@sapui5/sap.fe.core 1.141.2 → 1.142.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 +1 -1
- package/src/sap/fe/core/.library +4 -1
- package/src/sap/fe/core/ActionRuntime.js +48 -23
- package/src/sap/fe/core/ActionRuntime.ts +61 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +94 -8
- package/src/sap/fe/core/AppStateHandler.js +9 -8
- package/src/sap/fe/core/AppStateHandler.ts +13 -9
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -10
- package/src/sap/fe/core/ExtensionAPI.ts +2 -14
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +20 -1
- package/src/sap/fe/core/TemplateComponent.ts +24 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
- package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
- package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
- package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
- package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/Component.js +8 -1
- package/src/sap/fe/core/fpm/Component.ts +8 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
- package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.ts +28 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Button", "sap/m/CustomListItem", "sap/m/Dialog", "sap/m/Label", "sap/m/List", "sap/m/Text", "sap/m/VBox", "sap/ui/base/ManagedObject", "sap/ui/core/CustomData", "sap/ui/core/library", "../../CommonUtils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs", "sap/fe/base/jsx-runtime/Fragment"], function (ClassSupport, ResourceModelHelper, StableIdHelper, Button, CustomListItem, Dialog, Label, List, Text, VBox, ManagedObject, CustomData, library, CommonUtils, _jsx, _jsxs, _Fragment) {
|
|
5
|
+
sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Button", "sap/m/CustomListItem", "sap/m/Dialog", "sap/m/Label", "sap/m/List", "sap/m/Text", "sap/m/VBox", "sap/ui/base/ManagedObject", "sap/ui/core/CustomData", "sap/ui/core/library", "sap/ui/performance/trace/FESRHelper", "../../CommonUtils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs", "sap/fe/base/jsx-runtime/Fragment"], function (ClassSupport, ResourceModelHelper, StableIdHelper, Button, CustomListItem, Dialog, Label, List, Text, VBox, ManagedObject, CustomData, library, FESRHelper, CommonUtils, _jsx, _jsxs, _Fragment) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
|
|
@@ -124,11 +124,13 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHel
|
|
|
124
124
|
* @returns A button
|
|
125
125
|
*/;
|
|
126
126
|
_proto.getConfirmButton = function getConfirmButton() {
|
|
127
|
-
|
|
127
|
+
const button = _jsx(Button, {
|
|
128
128
|
text: this.dataLossResourceModel.getText("C_COMMON_DIALOG_OK"),
|
|
129
129
|
type: "Emphasized",
|
|
130
130
|
press: () => this.handleDataLossOk()
|
|
131
131
|
});
|
|
132
|
+
FESRHelper.setSemanticStepname(button, "press", "fe4:draftLoss:Ok");
|
|
133
|
+
return button;
|
|
132
134
|
}
|
|
133
135
|
|
|
134
136
|
/**
|
|
@@ -136,10 +138,12 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHel
|
|
|
136
138
|
* @returns A button
|
|
137
139
|
*/;
|
|
138
140
|
_proto.getCancelButton = function getCancelButton() {
|
|
139
|
-
|
|
141
|
+
const button = _jsx(Button, {
|
|
140
142
|
text: this.isHiddenDraft ? this.dataLossResourceModel.getText("C_COMMON_SAPFE_CLOSE") : this.dataLossResourceModel.getText("C_COMMON_DIALOG_CANCEL"),
|
|
141
143
|
press: () => this.handleDataLossCancel()
|
|
142
144
|
});
|
|
145
|
+
FESRHelper.setSemanticStepname(button, "press", "fe4:draftLoss:Cancel");
|
|
146
|
+
return button;
|
|
143
147
|
}
|
|
144
148
|
|
|
145
149
|
/**
|
|
@@ -224,6 +228,7 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHel
|
|
|
224
228
|
state: ValueState.Warning,
|
|
225
229
|
type: "Message",
|
|
226
230
|
contentWidth: "22rem",
|
|
231
|
+
escapeHandler: () => this.close(),
|
|
227
232
|
ref: this.dataLossDialog,
|
|
228
233
|
children: {
|
|
229
234
|
content: _jsxs(_Fragment, {
|
|
@@ -261,4 +266,4 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/helpers/ResourceModelHel
|
|
|
261
266
|
_exports = DraftDataLossDialog;
|
|
262
267
|
return _exports;
|
|
263
268
|
}, false);
|
|
264
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcmFmdERhdGFMb3NzRGlhbG9nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFuYWdlZE9iamVjdCIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsInNoYWxsRm9yY2VEcmFmdFNhdmVPckRpc2NhcmQiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib3BlbiIsImNvbnRyb2xsZXIiLCJmb2N1c09uQ2FuY2VsIiwidmlldyIsImdldFZpZXciLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImlzSGlkZGVuRHJhZnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsInZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1Jvb3RDb250ZXh0TmV3IiwiZWRpdEZsb3ciLCJkYXRhTG9zc1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiY3JlYXRlQ29udGVudCIsImRhdGFMb3NzQ29uZmlybSIsImhhbmRsZURhdGFMb3NzT2siLCJvcHRpb25zTGlzdCIsImN1cnJlbnQiLCJhZGRFdmVudERlbGVnYXRlIiwib25rZXl1cCIsImUiLCJrZXkiLCJhZGREZXBlbmRlbnQiLCJkYXRhTG9zc0RpYWxvZyIsInNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicHJvbWlzZVJlc29sdmUiLCJjbG9zZSIsImRlc3Ryb3kiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZURhdGFMb3NzQ2FuY2VsIiwiY2FuY2VsQnV0dG9uIiwiZ2V0SXRlbXMiLCJzZXRTZWxlY3RlZEl0ZW0iLCJmb2N1cyIsImZpcnN0TGlzdEl0ZW1PcHRpb24iLCJnZXRTZWxlY3RlZEl0ZW0iLCJkYXRhIiwiZ2V0Q29uZmlybUJ1dHRvbiIsIl9qc3giLCJCdXR0b24iLCJ0ZXh0IiwiZ2V0VGV4dCIsInR5cGUiLCJwcmVzcyIsImdldENhbmNlbEJ1dHRvbiIsImlzU2F2ZSIsImNyZWF0ZU9yU2F2ZVRleHQiLCJjcmVhdGVPclNhdmVMYWJlbCIsIml0ZW1zIiwicHVzaCIsIkN1c3RvbUxpc3RJdGVtIiwiY3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJ2YWx1ZSIsImNoaWxkcmVuIiwiX2pzeHMiLCJWQm94IiwiY2xhc3MiLCJMYWJlbCIsImRlc2lnbiIsIlRleHQiLCJoYXNBY3RpdmVFbnRpdHkiLCJnZXRPYmplY3QiLCJIYXNBY3RpdmVFbnRpdHkiLCJkZXNjcmlwdGlvbiIsIkRpYWxvZyIsImlkIiwiZ2VuZXJhdGUiLCJnZXRJZCIsInRpdGxlIiwic3RhdGUiLCJWYWx1ZVN0YXRlIiwiV2FybmluZyIsImNvbnRlbnRXaWR0aCIsInJlZiIsImNvbnRlbnQiLCJfRnJhZ21lbnQiLCJMaXN0IiwibW9kZSIsInNob3dTZXBhcmF0b3JzIiwiaW5jbHVkZUl0ZW1JblNlbGVjdGlvbiIsImJhY2tncm91bmREZXNpZ24iLCJidXR0b25zIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRHJhZnREYXRhTG9zc0RpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uLy4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcIi4uLy4uL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgSGlkZGVuRHJhZnQgfSBmcm9tIFwiLi4vLi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkRhdGFMb3NzT3JEcmFmdERpc2NhcmQuRHJhZnREYXRhTG9zc0RpYWxvZ1wiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhZnREYXRhTG9zc0RpYWxvZyBleHRlbmRzIE1hbmFnZWRPYmplY3Qge1xuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZGF0YUxvc3NEaWFsb2chOiBSZWY8RGlhbG9nPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0b3B0aW9uc0xpc3QhOiBSZWY8TGlzdD47XG5cblx0cHJpdmF0ZSB2aWV3ITogVmlldztcblxuXHRwcml2YXRlIGRhdGFMb3NzUmVzb3VyY2VNb2RlbCE6IFJlc291cmNlTW9kZWw7XG5cblx0LyoqXG5cdCAqIFJlc29sdmVzIHRoZSBwcm9taXNlIHdpdGggdGhlIHNlbGVjdGVkIGRpYWxvZyBsaXN0IG9wdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBwcm9taXNlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc2hhbGxGb3JjZURyYWZ0U2F2ZU9yRGlzY2FyZCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgaXNSb290Q29udGV4dE5ldyE6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBpc0hpZGRlbkRyYWZ0ITogYm9vbGVhbjtcblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGRhdGEgbG9zcyBkaWFsb2cuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBmb2N1c09uQ2FuY2VsIERldGVybWluZXMgd2hldGhlciB0byBmb2N1cyBvbiB0aGUgY2FuY2VsIGJ1dHRvbiB3aGVuIHRoZSBkaWFsb2cgb3BlbnMuXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb3Blbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgZm9jdXNPbkNhbmNlbD86IGJvb2xlYW4pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHR0aGlzLnZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy52aWV3KTtcblx0XHR0aGlzLmlzSGlkZGVuRHJhZnQgPSAoYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk/LmdldENhcGFiaWxpdGllcygpPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQ7XG5cdFx0Y29uc3Qgdmlld0NvbnRleHQgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdHRoaXMuaXNSb290Q29udGV4dE5ldyA9IHZpZXdDb250ZXh0ID8gYXdhaXQgY29udHJvbGxlci5lZGl0Rmxvdy5pc1Jvb3RDb250ZXh0TmV3KHZpZXdDb250ZXh0KSA6IGZhbHNlO1xuXHRcdHRoaXMuc2hhbGxGb3JjZURyYWZ0U2F2ZU9yRGlzY2FyZCA9IGNvbnRyb2xsZXIuZWRpdEZsb3cuc2hhbGxGb3JjZURyYWZ0U2F2ZU9yRGlzY2FyZCgpO1xuXHRcdHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnZpZXcpO1xuXHRcdHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHRcdGNvbnN0IGRhdGFMb3NzQ29uZmlybSA9ICgpOiB2b2lkID0+IHRoaXMuaGFuZGxlRGF0YUxvc3NPaygpO1xuXHRcdHRoaXMub3B0aW9uc0xpc3QuY3VycmVudD8uYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleXVwOiBmdW5jdGlvbiAoZTogS2V5Ym9hcmRFdmVudCkge1xuXHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHRcdGRhdGFMb3NzQ29uZmlybSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy52aWV3LmFkZERlcGVuZGVudCh0aGlzLmRhdGFMb3NzRGlhbG9nLmN1cnJlbnQgYXMgVUk1RWxlbWVudCk7XG5cdFx0dGhpcy5kYXRhTG9zc0RpYWxvZy5jdXJyZW50Py5vcGVuKCk7XG5cdFx0aWYgKGZvY3VzT25DYW5jZWwgIT0gbnVsbCkge1xuXHRcdFx0dGhpcy5zZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoZm9jdXNPbkNhbmNlbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2VsZWN0QW5kRm9jdXNGaXJzdEVudHJ5KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIHRvIGNsb3NlIHRoZSBkYXRhbG9zcyBkaWFsb2cuXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5kYXRhTG9zc0RpYWxvZy5jdXJyZW50Py5jbG9zZSgpO1xuXHRcdHRoaXMuZGF0YUxvc3NEaWFsb2cuY3VycmVudD8uZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBsb2dpYyB3aGVuIHRoZSBkYXRhIGxvc3MgZGlhbG9nIGlzIGNvbmZpcm1lZC4gVGhlIHNlbGVjdGlvbiBvZiBhbiBvcHRpb24gcmVzb2x2ZXMgdGhlIHByb21pc2UgYW5kIGxlYWRzIHRvIHRoZVxuXHQgKiBwcm9jZXNzaW5nIG9mIHRoZSBvcmlnaW5hbGx5IHRyaWdnZXJlZCBhY3Rpb24gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKi9cblxuXHRwcml2YXRlIGhhbmRsZURhdGFMb3NzT2soKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZSh0aGlzLmdldFNlbGVjdGVkS2V5KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgdG8gY2xvc2UgdGhlIGRhdGFsb3NzIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlRGF0YUxvc3NDYW5jZWwoKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShcImNhbmNlbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgZmlyc3QgbGlzdCBpdGVtIG9mIHRoZSBkaWFsb2cuXG5cdCAqIEBwYXJhbSBmb2N1c09uQ2FuY2VsIERldGVybWluZXMgd2hldGhlciB0byBmb2N1cyBvbiB0aGUgY2FuY2VsIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgc2VsZWN0QW5kRm9jdXNGaXJzdEVudHJ5KGZvY3VzT25DYW5jZWw/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0aWYgKGZvY3VzT25DYW5jZWwgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHRoaXMub3B0aW9uc0xpc3QuY3VycmVudD8uZ2V0SXRlbXMoKVsxXSBhcyBDdXN0b21MaXN0SXRlbTtcblx0XHRcdHRoaXMub3B0aW9uc0xpc3QuY3VycmVudD8uc2V0U2VsZWN0ZWRJdGVtKGNhbmNlbEJ1dHRvbik7XG5cdFx0XHRjYW5jZWxCdXR0b24/LmZvY3VzKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGZpcnN0TGlzdEl0ZW1PcHRpb246IEN1c3RvbUxpc3RJdGVtID0gdGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5nZXRJdGVtcygpWzBdIGFzIEN1c3RvbUxpc3RJdGVtO1xuXHRcdHRoaXMub3B0aW9uc0xpc3QuY3VycmVudD8uc2V0U2VsZWN0ZWRJdGVtKGZpcnN0TGlzdEl0ZW1PcHRpb24pO1xuXHRcdC8vIFdlIGRvIG5vdCBzZXQgdGhlIGZvY3VzIG9uIHRoZSBidXR0b24sIGJ1dCBjYXRjaCB0aGUgRU5URVIga2V5IGluIHRoZSBkaWFsb2dcblx0XHQvLyBhbmQgcHJvY2VzcyBpdCBhcyBPaywgc2luY2UgZm9jdXNpbmcgdGhlIGJ1dHRvbiB3YXMgcmVwb3J0ZWQgYXMgYW4gQUNDIGlzc3VlXG5cdFx0Zmlyc3RMaXN0SXRlbU9wdGlvbj8uZm9jdXMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBrZXkgb2YgdGhlIHNlbGVjdGVkIGl0ZW0gZnJvbSB0aGUgbGlzdCBvZiBvcHRpb25zIHRoYXQgd2FzIHNldCB2aWEgY3VzdG9tRGF0YS5cblx0ICogQHJldHVybnMgVGhlIGtleSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgZ2V0U2VsZWN0ZWRLZXkoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvcHRpb25zTGlzdCA9IHRoaXMub3B0aW9uc0xpc3QuY3VycmVudCBhcyBMaXN0O1xuXHRcdHJldHVybiBvcHRpb25zTGlzdC5nZXRTZWxlY3RlZEl0ZW0oKS5kYXRhKFwiaXRlbUtleVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb25maXJtIGJ1dHRvbi5cblx0ICogQHJldHVybnMgQSBidXR0b25cblx0ICovXG5cdHByaXZhdGUgZ2V0Q29uZmlybUJ1dHRvbigpOiBCdXR0b24ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIil9XG5cdFx0XHRcdHR5cGU9e1wiRW1waGFzaXplZFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4gdGhpcy5oYW5kbGVEYXRhTG9zc09rKCl9XG5cdFx0XHQvPlxuXHRcdCkgYXMgQnV0dG9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNhbmNlbCBidXR0b24uXG5cdCAqIEByZXR1cm5zIEEgYnV0dG9uXG5cdCAqL1xuXHRwcml2YXRlIGdldENhbmNlbEJ1dHRvbigpOiBCdXR0b24ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdHRleHQ9e1xuXHRcdFx0XHRcdHRoaXMuaXNIaWRkZW5EcmFmdFxuXHRcdFx0XHRcdFx0PyB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfQ0xPU0VcIilcblx0XHRcdFx0XHRcdDogdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19DQU5DRUxcIilcblx0XHRcdFx0fVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4gdGhpcy5oYW5kbGVEYXRhTG9zc0NhbmNlbCgpfVxuXHRcdFx0Lz5cblx0XHQpIGFzIEJ1dHRvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgZGlhbG9nLlxuXHQgKiBAcGFyYW0gaXNTYXZlXG5cdCAqIEByZXR1cm5zIFRoZSBvcHRpb25zIGFzIEN1c3RvbUxpc3RJdGVtc1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRJdGVtcyhpc1NhdmU6IGJvb2xlYW4pOiBDdXN0b21MaXN0SXRlbVtdIHtcblx0XHRsZXQgY3JlYXRlT3JTYXZlVGV4dCA9IFwiXCI7XG5cdFx0bGV0IGNyZWF0ZU9yU2F2ZUxhYmVsID0gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX1NBVkVfRFJBRlRfUkJMXCIpO1xuXHRcdGlmIChpc1NhdmUpIHtcblx0XHRcdGNyZWF0ZU9yU2F2ZVRleHQgPSB0aGlzLmlzSGlkZGVuRHJhZnRcblx0XHRcdFx0PyB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfU0FWRV9ISURERU5fRFJBRlRfVE9MXCIpXG5cdFx0XHRcdDogdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX1NBVkVfRFJBRlRfVE9MXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjcmVhdGVPclNhdmVMYWJlbCA9IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19DUkVBVEVfRU5USVRZX1JCTFwiKTtcblx0XHRcdGNyZWF0ZU9yU2F2ZVRleHQgPSB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfQ1JFQVRFX0VOVElUWV9UT0xcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGl0ZW1zOiBDdXN0b21MaXN0SXRlbVtdID0gW107XG5cdFx0aXRlbXMucHVzaChcblx0XHRcdDxDdXN0b21MaXN0SXRlbSBjdXN0b21EYXRhPXtbbmV3IEN1c3RvbURhdGEoeyBrZXk6IFwiaXRlbUtleVwiLCB2YWx1ZTogXCJkcmFmdERhdGFMb3NzT3B0aW9uU2F2ZVwiIH0pXX0+XG5cdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlUaW55TWFyZ2luXCI+XG5cdFx0XHRcdFx0PExhYmVsIHRleHQ9e2NyZWF0ZU9yU2F2ZUxhYmVsfSBkZXNpZ249XCJCb2xkXCIgLz5cblx0XHRcdFx0XHQ8VGV4dCB0ZXh0PXtjcmVhdGVPclNhdmVUZXh0fSAvPlxuXHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdCk7XG5cblx0XHQvLyBUaGUgb3B0aW9uIHRvIGtlZXAgdGhlIGRyYWZ0IGlzIG5vdCBhdmFpbGFibGUgZm9yIG5ldyBkcmFmdHMgYW5kIGlmIHNoYWxsRm9yY2VEcmFmdFNhdmVPckRpc2NhcmQgPT09IHRydWVcblx0XHQvLyAoVHJlZVRhYmxlIGluIHRoZSBMaXN0UmVwb3J0KVxuXHRcdGlmICgoaXNTYXZlIHx8ICF0aGlzLnNoYWxsRm9yY2VEcmFmdFNhdmVPckRpc2NhcmQpICYmICF0aGlzLmlzSGlkZGVuRHJhZnQpIHtcblx0XHRcdGl0ZW1zLnB1c2goXG5cdFx0XHRcdDxDdXN0b21MaXN0SXRlbSBjdXN0b21EYXRhPXtbbmV3IEN1c3RvbURhdGEoeyBrZXk6IFwiaXRlbUtleVwiLCB2YWx1ZTogXCJkcmFmdERhdGFMb3NzT3B0aW9uS2VlcFwiIH0pXX0+XG5cdFx0XHRcdFx0PFZCb3ggY2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5cIj5cblx0XHRcdFx0XHRcdDxMYWJlbCB0ZXh0PXt0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfS0VFUF9EUkFGVF9SQkxcIil9IGRlc2lnbj1cIkJvbGRcIiAvPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD17dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0tFRVBfRFJBRlRfVE9MXCIpfSAvPlxuXHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aXRlbXMucHVzaChcblx0XHRcdDxDdXN0b21MaXN0SXRlbSBjdXN0b21EYXRhPXtbbmV3IEN1c3RvbURhdGEoeyBrZXk6IFwiaXRlbUtleVwiLCB2YWx1ZTogXCJkcmFmdERhdGFMb3NzT3B0aW9uRGlzY2FyZFwiIH0pXX0+XG5cdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlUaW55TWFyZ2luXCI+XG5cdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHR0ZXh0PXtcblx0XHRcdFx0XHRcdFx0dGhpcy5pc0hpZGRlbkRyYWZ0XG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfRElTQ0FSRF9ISURERU5fRFJBRlRfUkJMXCIpXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfRElTQ0FSRF9EUkFGVF9SQkxcIilcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRlc2lnbj1cIkJvbGRcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PFRleHQgdGV4dD17dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0RJU0NBUkRfRFJBRlRfVE9MXCIpfSAvPlxuXHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdCk7XG5cblx0XHRyZXR1cm4gaXRlbXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Y3JlYXRlQ29udGVudCgpOiBEaWFsb2cge1xuXHRcdGNvbnN0IGhhc0FjdGl2ZUVudGl0eSA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkgPT09IHRydWU7XG5cdFx0Y29uc3QgaXNTYXZlID0gdGhpcy5pc0hpZGRlbkRyYWZ0ID8gIXRoaXMuaXNSb290Q29udGV4dE5ldyA6IGhhc0FjdGl2ZUVudGl0eTtcblx0XHRjb25zdCBkZXNjcmlwdGlvbiA9IGlzU2F2ZVxuXHRcdFx0PyB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfUE9QVVBfTUVTU0FHRV9TQVZFXCIpXG5cdFx0XHQ6IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19QT1BVUF9NRVNTQUdFX0NSRUFURVwiKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5nZXRJZCgpLCBcImRyYWZ0RGF0YUxvc3NEaWFsb2dcIl0pfVxuXHRcdFx0XHR0aXRsZT17dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIldBUk5JTkdcIil9XG5cdFx0XHRcdHN0YXRlPXtWYWx1ZVN0YXRlLldhcm5pbmd9XG5cdFx0XHRcdHR5cGU9e1wiTWVzc2FnZVwifVxuXHRcdFx0XHRjb250ZW50V2lkdGg9e1wiMjJyZW1cIn1cblx0XHRcdFx0cmVmPXt0aGlzLmRhdGFMb3NzRGlhbG9nfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e2Rlc2NyaXB0aW9ufSBjbGFzcz1cInNhcFVpVGlueU1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblRvcEJvdHRvbVwiIC8+XG5cdFx0XHRcdFx0XHRcdDxMaXN0XG5cdFx0XHRcdFx0XHRcdFx0bW9kZT1cIlNpbmdsZVNlbGVjdExlZnRcIlxuXHRcdFx0XHRcdFx0XHRcdHNob3dTZXBhcmF0b3JzPVwiTm9uZVwiXG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZUl0ZW1JblNlbGVjdGlvbj1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmREZXNpZ249XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU5vQ29udGVudFBhZGRpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdHJlZj17dGhpcy5vcHRpb25zTGlzdH1cblx0XHRcdFx0XHRcdFx0XHRpdGVtcz17dGhpcy5nZXRJdGVtcyhpc1NhdmUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRidXR0b25zOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHRjb25maXJtQnV0dG9uID0ge3RoaXMuZ2V0Q29uZmlybUJ1dHRvbigpfVxuXHRcdFx0XHRcdFx0XHRjYW5jZWxCdXR0b24gPSB7dGhpcy5nZXRDYW5jZWxCdXR0b24oKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCkgYXMgRGlhbG9nO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1QnFCQSxtQkFBbUIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLGlFQUFpRSxDQUFDLEVBQUFD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
|
|
269
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcmFmdERhdGFMb3NzRGlhbG9nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjMyIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFuYWdlZE9iamVjdCIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsInNoYWxsRm9yY2VEcmFmdFNhdmVPckRpc2NhcmQiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwib3BlbiIsImNvbnRyb2xsZXIiLCJmb2N1c09uQ2FuY2VsIiwidmlldyIsImdldFZpZXciLCJhcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImlzSGlkZGVuRHJhZnQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsInZpZXdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1Jvb3RDb250ZXh0TmV3IiwiZWRpdEZsb3ciLCJkYXRhTG9zc1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiY3JlYXRlQ29udGVudCIsImRhdGFMb3NzQ29uZmlybSIsImhhbmRsZURhdGFMb3NzT2siLCJvcHRpb25zTGlzdCIsImN1cnJlbnQiLCJhZGRFdmVudERlbGVnYXRlIiwib25rZXl1cCIsImUiLCJrZXkiLCJhZGREZXBlbmRlbnQiLCJkYXRhTG9zc0RpYWxvZyIsInNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicHJvbWlzZVJlc29sdmUiLCJjbG9zZSIsImRlc3Ryb3kiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZURhdGFMb3NzQ2FuY2VsIiwiY2FuY2VsQnV0dG9uIiwiZ2V0SXRlbXMiLCJzZXRTZWxlY3RlZEl0ZW0iLCJmb2N1cyIsImZpcnN0TGlzdEl0ZW1PcHRpb24iLCJnZXRTZWxlY3RlZEl0ZW0iLCJkYXRhIiwiZ2V0Q29uZmlybUJ1dHRvbiIsImJ1dHRvbiIsIl9qc3giLCJCdXR0b24iLCJ0ZXh0IiwiZ2V0VGV4dCIsInR5cGUiLCJwcmVzcyIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwiZ2V0Q2FuY2VsQnV0dG9uIiwiaXNTYXZlIiwiY3JlYXRlT3JTYXZlVGV4dCIsImNyZWF0ZU9yU2F2ZUxhYmVsIiwiaXRlbXMiLCJwdXNoIiwiQ3VzdG9tTGlzdEl0ZW0iLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsInZhbHVlIiwiY2hpbGRyZW4iLCJfanN4cyIsIlZCb3giLCJjbGFzcyIsIkxhYmVsIiwiZGVzaWduIiwiVGV4dCIsImhhc0FjdGl2ZUVudGl0eSIsImdldE9iamVjdCIsIkhhc0FjdGl2ZUVudGl0eSIsImRlc2NyaXB0aW9uIiwiRGlhbG9nIiwiaWQiLCJnZW5lcmF0ZSIsImdldElkIiwidGl0bGUiLCJzdGF0ZSIsIlZhbHVlU3RhdGUiLCJXYXJuaW5nIiwiY29udGVudFdpZHRoIiwiZXNjYXBlSGFuZGxlciIsInJlZiIsImNvbnRlbnQiLCJfRnJhZ21lbnQiLCJMaXN0IiwibW9kZSIsInNob3dTZXBhcmF0b3JzIiwiaW5jbHVkZUl0ZW1JblNlbGVjdGlvbiIsImJhY2tncm91bmREZXNpZ24iLCJidXR0b25zIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRHJhZnREYXRhTG9zc0RpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgRkVTUkhlbHBlciBmcm9tIFwic2FwL3VpL3BlcmZvcm1hbmNlL3RyYWNlL0ZFU1JIZWxwZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwiLi4vLi4vQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi8uLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwiLi4vLi4vUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbHMuRGF0YUxvc3NPckRyYWZ0RGlzY2FyZC5EcmFmdERhdGFMb3NzRGlhbG9nXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmFmdERhdGFMb3NzRGlhbG9nIGV4dGVuZHMgTWFuYWdlZE9iamVjdCB7XG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRkYXRhTG9zc0RpYWxvZyE6IFJlZjxEaWFsb2c+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRvcHRpb25zTGlzdCE6IFJlZjxMaXN0PjtcblxuXHRwcml2YXRlIHZpZXchOiBWaWV3O1xuXG5cdHByaXZhdGUgZGF0YUxvc3NSZXNvdXJjZU1vZGVsITogUmVzb3VyY2VNb2RlbDtcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2VsZWN0ZWQgZGlhbG9nIGxpc3Qgb3B0aW9uXG5cdCAqL1xuXHRwcml2YXRlIHByb21pc2VSZXNvbHZlITogRnVuY3Rpb247XG5cblx0cHJpdmF0ZSBzaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBpc1Jvb3RDb250ZXh0TmV3ITogYm9vbGVhbjtcblxuXHRwcml2YXRlIGlzSGlkZGVuRHJhZnQhOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgZGF0YSBsb3NzIGRpYWxvZy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIGZvY3VzT25DYW5jZWwgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGZvY3VzIG9uIHRoZSBjYW5jZWwgYnV0dG9uIHdoZW4gdGhlIGRpYWxvZyBvcGVucy5cblx0ICovXG5cdHB1YmxpYyBhc3luYyBvcGVuKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBmb2N1c09uQ2FuY2VsPzogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHRoaXMudmlldyA9IGNvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLnZpZXcpO1xuXHRcdHRoaXMuaXNIaWRkZW5EcmFmdCA9IChhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZDtcblx0XHRjb25zdCB2aWV3Q29udGV4dCA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0dGhpcy5pc1Jvb3RDb250ZXh0TmV3ID0gdmlld0NvbnRleHQgPyBhd2FpdCBjb250cm9sbGVyLmVkaXRGbG93LmlzUm9vdENvbnRleHROZXcodmlld0NvbnRleHQpIDogZmFsc2U7XG5cdFx0dGhpcy5zaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkID0gY29udHJvbGxlci5lZGl0Rmxvdy5zaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkKCk7XG5cdFx0dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMudmlldyk7XG5cdFx0dGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0Y29uc3QgZGF0YUxvc3NDb25maXJtID0gKCk6IHZvaWQgPT4gdGhpcy5oYW5kbGVEYXRhTG9zc09rKCk7XG5cdFx0dGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5dXA6IGZ1bmN0aW9uIChlOiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0XHRcdGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG5cdFx0XHRcdFx0ZGF0YUxvc3NDb25maXJtKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHR0aGlzLnZpZXcuYWRkRGVwZW5kZW50KHRoaXMuZGF0YUxvc3NEaWFsb2cuY3VycmVudCBhcyBVSTVFbGVtZW50KTtcblx0XHR0aGlzLmRhdGFMb3NzRGlhbG9nLmN1cnJlbnQ/Lm9wZW4oKTtcblx0XHRpZiAoZm9jdXNPbkNhbmNlbCAhPSBudWxsKSB7XG5cdFx0XHR0aGlzLnNlbGVjdEFuZEZvY3VzRmlyc3RFbnRyeShmb2N1c09uQ2FuY2VsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMucHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgdG8gY2xvc2UgdGhlIGRhdGFsb3NzIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmRhdGFMb3NzRGlhbG9nLmN1cnJlbnQ/LmNsb3NlKCk7XG5cdFx0dGhpcy5kYXRhTG9zc0RpYWxvZy5jdXJyZW50Py5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGxvZ2ljIHdoZW4gdGhlIGRhdGEgbG9zcyBkaWFsb2cgaXMgY29uZmlybWVkLiBUaGUgc2VsZWN0aW9uIG9mIGFuIG9wdGlvbiByZXNvbHZlcyB0aGUgcHJvbWlzZSBhbmQgbGVhZHMgdG8gdGhlXG5cdCAqIHByb2Nlc3Npbmcgb2YgdGhlIG9yaWdpbmFsbHkgdHJpZ2dlcmVkIGFjdGlvbiBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24uXG5cdCAqXG5cdCAqL1xuXG5cdHByaXZhdGUgaGFuZGxlRGF0YUxvc3NPaygpOiB2b2lkIHtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKHRoaXMuZ2V0U2VsZWN0ZWRLZXkoKSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB0byBjbG9zZSB0aGUgZGF0YWxvc3MgZGlhbG9nLlxuXHQgKlxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVEYXRhTG9zc0NhbmNlbCgpOiB2b2lkIHtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFwiY2FuY2VsXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBmaXJzdCBsaXN0IGl0ZW0gb2YgdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGZvY3VzT25DYW5jZWwgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGZvY3VzIG9uIHRoZSBjYW5jZWwgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBzZWxlY3RBbmRGb2N1c0ZpcnN0RW50cnkoZm9jdXNPbkNhbmNlbD86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAoZm9jdXNPbkNhbmNlbCA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgY2FuY2VsQnV0dG9uID0gdGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5nZXRJdGVtcygpWzFdIGFzIEN1c3RvbUxpc3RJdGVtO1xuXHRcdFx0dGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5zZXRTZWxlY3RlZEl0ZW0oY2FuY2VsQnV0dG9uKTtcblx0XHRcdGNhbmNlbEJ1dHRvbj8uZm9jdXMoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZmlyc3RMaXN0SXRlbU9wdGlvbjogQ3VzdG9tTGlzdEl0ZW0gPSB0aGlzLm9wdGlvbnNMaXN0LmN1cnJlbnQ/LmdldEl0ZW1zKClbMF0gYXMgQ3VzdG9tTGlzdEl0ZW07XG5cdFx0dGhpcy5vcHRpb25zTGlzdC5jdXJyZW50Py5zZXRTZWxlY3RlZEl0ZW0oZmlyc3RMaXN0SXRlbU9wdGlvbik7XG5cdFx0Ly8gV2UgZG8gbm90IHNldCB0aGUgZm9jdXMgb24gdGhlIGJ1dHRvbiwgYnV0IGNhdGNoIHRoZSBFTlRFUiBrZXkgaW4gdGhlIGRpYWxvZ1xuXHRcdC8vIGFuZCBwcm9jZXNzIGl0IGFzIE9rLCBzaW5jZSBmb2N1c2luZyB0aGUgYnV0dG9uIHdhcyByZXBvcnRlZCBhcyBhbiBBQ0MgaXNzdWVcblx0XHRmaXJzdExpc3RJdGVtT3B0aW9uPy5mb2N1cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgaXRlbSBmcm9tIHRoZSBsaXN0IG9mIG9wdGlvbnMgdGhhdCB3YXMgc2V0IHZpYSBjdXN0b21EYXRhLlxuXHQgKiBAcmV0dXJucyBUaGUga2V5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBnZXRTZWxlY3RlZEtleSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9wdGlvbnNMaXN0ID0gdGhpcy5vcHRpb25zTGlzdC5jdXJyZW50IGFzIExpc3Q7XG5cdFx0cmV0dXJuIG9wdGlvbnNMaXN0LmdldFNlbGVjdGVkSXRlbSgpLmRhdGEoXCJpdGVtS2V5XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbmZpcm0gYnV0dG9uLlxuXHQgKiBAcmV0dXJucyBBIGJ1dHRvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDb25maXJtQnV0dG9uKCk6IEJ1dHRvbiB7XG5cdFx0Y29uc3QgYnV0dG9uOiBCdXR0b24gPSAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdHRleHQ9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIil9XG5cdFx0XHRcdHR5cGU9e1wiRW1waGFzaXplZFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4gdGhpcy5oYW5kbGVEYXRhTG9zc09rKCl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKGJ1dHRvbiwgXCJwcmVzc1wiLCBcImZlNDpkcmFmdExvc3M6T2tcIik7XG5cdFx0cmV0dXJuIGJ1dHRvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjYW5jZWwgYnV0dG9uLlxuXHQgKiBAcmV0dXJucyBBIGJ1dHRvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRDYW5jZWxCdXR0b24oKTogQnV0dG9uIHtcblx0XHRjb25zdCBidXR0b246IEJ1dHRvbiA9IChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0dGV4dD17XG5cdFx0XHRcdFx0dGhpcy5pc0hpZGRlbkRyYWZ0XG5cdFx0XHRcdFx0XHQ/IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0OiB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB0aGlzLmhhbmRsZURhdGFMb3NzQ2FuY2VsKCl9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKGJ1dHRvbiwgXCJwcmVzc1wiLCBcImZlNDpkcmFmdExvc3M6Q2FuY2VsXCIpO1xuXHRcdHJldHVybiBidXR0b247XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgb3B0aW9ucyBhdmFpbGFibGUgaW4gdGhlIGRpYWxvZy5cblx0ICogQHBhcmFtIGlzU2F2ZVxuXHQgKiBAcmV0dXJucyBUaGUgb3B0aW9ucyBhcyBDdXN0b21MaXN0SXRlbXNcblx0ICovXG5cdHByaXZhdGUgZ2V0SXRlbXMoaXNTYXZlOiBib29sZWFuKTogQ3VzdG9tTGlzdEl0ZW1bXSB7XG5cdFx0bGV0IGNyZWF0ZU9yU2F2ZVRleHQgPSBcIlwiO1xuXHRcdGxldCBjcmVhdGVPclNhdmVMYWJlbCA9IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19TQVZFX0RSQUZUX1JCTFwiKTtcblx0XHRpZiAoaXNTYXZlKSB7XG5cdFx0XHRjcmVhdGVPclNhdmVUZXh0ID0gdGhpcy5pc0hpZGRlbkRyYWZ0XG5cdFx0XHRcdD8gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX1NBVkVfSElEREVOX0RSQUZUX1RPTFwiKVxuXHRcdFx0XHQ6IHRoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19TQVZFX0RSQUZUX1RPTFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3JlYXRlT3JTYXZlTGFiZWwgPSB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfQ1JFQVRFX0VOVElUWV9SQkxcIik7XG5cdFx0XHRjcmVhdGVPclNhdmVUZXh0ID0gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0NSRUFURV9FTlRJVFlfVE9MXCIpO1xuXHRcdH1cblx0XHRjb25zdCBpdGVtczogQ3VzdG9tTGlzdEl0ZW1bXSA9IFtdO1xuXHRcdGl0ZW1zLnB1c2goXG5cdFx0XHQ8Q3VzdG9tTGlzdEl0ZW0gY3VzdG9tRGF0YT17W25ldyBDdXN0b21EYXRhKHsga2V5OiBcIml0ZW1LZXlcIiwgdmFsdWU6IFwiZHJhZnREYXRhTG9zc09wdGlvblNhdmVcIiB9KV19PlxuXHRcdFx0XHQ8VkJveCBjbGFzcz1cInNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdDxMYWJlbCB0ZXh0PXtjcmVhdGVPclNhdmVMYWJlbH0gZGVzaWduPVwiQm9sZFwiIC8+XG5cdFx0XHRcdFx0PFRleHQgdGV4dD17Y3JlYXRlT3JTYXZlVGV4dH0gLz5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHQpO1xuXG5cdFx0Ly8gVGhlIG9wdGlvbiB0byBrZWVwIHRoZSBkcmFmdCBpcyBub3QgYXZhaWxhYmxlIGZvciBuZXcgZHJhZnRzIGFuZCBpZiBzaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkID09PSB0cnVlXG5cdFx0Ly8gKFRyZWVUYWJsZSBpbiB0aGUgTGlzdFJlcG9ydClcblx0XHRpZiAoKGlzU2F2ZSB8fCAhdGhpcy5zaGFsbEZvcmNlRHJhZnRTYXZlT3JEaXNjYXJkKSAmJiAhdGhpcy5pc0hpZGRlbkRyYWZ0KSB7XG5cdFx0XHRpdGVtcy5wdXNoKFxuXHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW0gY3VzdG9tRGF0YT17W25ldyBDdXN0b21EYXRhKHsga2V5OiBcIml0ZW1LZXlcIiwgdmFsdWU6IFwiZHJhZnREYXRhTG9zc09wdGlvbktlZXBcIiB9KV19PlxuXHRcdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlUaW55TWFyZ2luXCI+XG5cdFx0XHRcdFx0XHQ8TGFiZWwgdGV4dD17dGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0tFRVBfRFJBRlRfUkJMXCIpfSBkZXNpZ249XCJCb2xkXCIgLz5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19LRUVQX0RSQUZUX1RPTFwiKX0gLz5cblx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGl0ZW1zLnB1c2goXG5cdFx0XHQ8Q3VzdG9tTGlzdEl0ZW0gY3VzdG9tRGF0YT17W25ldyBDdXN0b21EYXRhKHsga2V5OiBcIml0ZW1LZXlcIiwgdmFsdWU6IFwiZHJhZnREYXRhTG9zc09wdGlvbkRpc2NhcmRcIiB9KV19PlxuXHRcdFx0XHQ8VkJveCBjbGFzcz1cInNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0dGV4dD17XG5cdFx0XHRcdFx0XHRcdHRoaXMuaXNIaWRkZW5EcmFmdFxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0RJU0NBUkRfSElEREVOX0RSQUZUX1JCTFwiKVxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX0RJU0NBUkRfRFJBRlRfUkJMXCIpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkZXNpZ249XCJCb2xkXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxUZXh0IHRleHQ9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJTVF9EUkFGVF9EQVRBTE9TU19ESVNDQVJEX0RSQUZUX1RPTFwiKX0gLz5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIGl0ZW1zO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBidWlsZGluZyBibG9jayByZW5kZXIgZnVuY3Rpb24uXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmdcblx0ICovXG5cdGNyZWF0ZUNvbnRlbnQoKTogRGlhbG9nIHtcblx0XHRjb25zdCBoYXNBY3RpdmVFbnRpdHkgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0T2JqZWN0KCkuSGFzQWN0aXZlRW50aXR5ID09PSB0cnVlO1xuXHRcdGNvbnN0IGlzU2F2ZSA9IHRoaXMuaXNIaWRkZW5EcmFmdCA/ICF0aGlzLmlzUm9vdENvbnRleHROZXcgOiBoYXNBY3RpdmVFbnRpdHk7XG5cdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBpc1NhdmVcblx0XHRcdD8gdGhpcy5kYXRhTG9zc1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIlNUX0RSQUZUX0RBVEFMT1NTX1BPUFVQX01FU1NBR0VfU0FWRVwiKVxuXHRcdFx0OiB0aGlzLmRhdGFMb3NzUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiU1RfRFJBRlRfREFUQUxPU1NfUE9QVVBfTUVTU0FHRV9DUkVBVEVcIik7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RoaXMuZ2V0SWQoKSwgXCJkcmFmdERhdGFMb3NzRGlhbG9nXCJdKX1cblx0XHRcdFx0dGl0bGU9e3RoaXMuZGF0YUxvc3NSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJXQVJOSU5HXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5XYXJuaW5nfVxuXHRcdFx0XHR0eXBlPXtcIk1lc3NhZ2VcIn1cblx0XHRcdFx0Y29udGVudFdpZHRoPXtcIjIycmVtXCJ9XG5cdFx0XHRcdGVzY2FwZUhhbmRsZXI9eygpOiB2b2lkID0+IHRoaXMuY2xvc2UoKX1cblx0XHRcdFx0cmVmPXt0aGlzLmRhdGFMb3NzRGlhbG9nfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9e2Rlc2NyaXB0aW9ufSBjbGFzcz1cInNhcFVpVGlueU1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblRvcEJvdHRvbVwiIC8+XG5cdFx0XHRcdFx0XHRcdDxMaXN0XG5cdFx0XHRcdFx0XHRcdFx0bW9kZT1cIlNpbmdsZVNlbGVjdExlZnRcIlxuXHRcdFx0XHRcdFx0XHRcdHNob3dTZXBhcmF0b3JzPVwiTm9uZVwiXG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZUl0ZW1JblNlbGVjdGlvbj1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmREZXNpZ249XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU5vQ29udGVudFBhZGRpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdHJlZj17dGhpcy5vcHRpb25zTGlzdH1cblx0XHRcdFx0XHRcdFx0XHRpdGVtcz17dGhpcy5nZXRJdGVtcyhpc1NhdmUpfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRidXR0b25zOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHRjb25maXJtQnV0dG9uID0ge3RoaXMuZ2V0Q29uZmlybUJ1dHRvbigpfVxuXHRcdFx0XHRcdFx0XHRjYW5jZWxCdXR0b24gPSB7dGhpcy5nZXRDYW5jZWxCdXR0b24oKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvRGlhbG9nPlxuXHRcdCkgYXMgRGlhbG9nO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF3QnFCQSxtQkFBbUIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLGlFQUFpRSxDQUFDLEVBQUFDLEtBQUEsR0FFaEZDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFILElBQUEsQ0FBQUssTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBQUEsU0FBQVIsb0JBQUE7TUFBQSxJQUFBUyxLQUFBO01BQUEsU0FBQUMsSUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBQUMsSUFBQSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtRQUFBRixJQUFBLENBQUFFLElBQUEsSUFBQUosU0FBQSxDQUFBSSxJQUFBO01BQUE7TUFBQU4sS0FBQSxHQUFBRCxjQUFBLENBQUFRLElBQUEsVUFBQUgsSUFBQTtNQUFBSSwwQkFBQSxDQUFBUixLQUFBLG9CQUFBUyxXQUFBLEVBQUFULEtBQUE7TUFBQVEsMEJBQUEsQ0FBQVIsS0FBQSxpQkFBQVUsWUFBQSxFQUFBVixLQUFBO01BQUFBLEtBQUEsQ0FZVlcsNEJBQTRCLEdBQUcsS0FBSztNQUFBLE9BQUFYLEtBQUE7SUFBQTtJQUFBWSxRQUFBLEdBQUFyQixt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
|
|
@@ -15,6 +15,7 @@ import type UI5Element from "sap/ui/core/Element";
|
|
|
15
15
|
import { ValueState } from "sap/ui/core/library";
|
|
16
16
|
import type View from "sap/ui/core/mvc/View";
|
|
17
17
|
import type Context from "sap/ui/model/odata/v4/Context";
|
|
18
|
+
import FESRHelper from "sap/ui/performance/trace/FESRHelper";
|
|
18
19
|
import CommonUtils from "../../CommonUtils";
|
|
19
20
|
import type PageController from "../../PageController";
|
|
20
21
|
import type ResourceModel from "../../ResourceModel";
|
|
@@ -137,13 +138,15 @@ export default class DraftDataLossDialog extends ManagedObject {
|
|
|
137
138
|
* @returns A button
|
|
138
139
|
*/
|
|
139
140
|
private getConfirmButton(): Button {
|
|
140
|
-
|
|
141
|
+
const button: Button = (
|
|
141
142
|
<Button
|
|
142
143
|
text={this.dataLossResourceModel.getText("C_COMMON_DIALOG_OK")}
|
|
143
144
|
type={"Emphasized"}
|
|
144
145
|
press={(): void => this.handleDataLossOk()}
|
|
145
146
|
/>
|
|
146
|
-
)
|
|
147
|
+
);
|
|
148
|
+
FESRHelper.setSemanticStepname(button, "press", "fe4:draftLoss:Ok");
|
|
149
|
+
return button;
|
|
147
150
|
}
|
|
148
151
|
|
|
149
152
|
/**
|
|
@@ -151,7 +154,7 @@ export default class DraftDataLossDialog extends ManagedObject {
|
|
|
151
154
|
* @returns A button
|
|
152
155
|
*/
|
|
153
156
|
private getCancelButton(): Button {
|
|
154
|
-
|
|
157
|
+
const button: Button = (
|
|
155
158
|
<Button
|
|
156
159
|
text={
|
|
157
160
|
this.isHiddenDraft
|
|
@@ -160,7 +163,9 @@ export default class DraftDataLossDialog extends ManagedObject {
|
|
|
160
163
|
}
|
|
161
164
|
press={(): void => this.handleDataLossCancel()}
|
|
162
165
|
/>
|
|
163
|
-
)
|
|
166
|
+
);
|
|
167
|
+
FESRHelper.setSemanticStepname(button, "press", "fe4:draftLoss:Cancel");
|
|
168
|
+
return button;
|
|
164
169
|
}
|
|
165
170
|
|
|
166
171
|
/**
|
|
@@ -239,6 +244,7 @@ export default class DraftDataLossDialog extends ManagedObject {
|
|
|
239
244
|
state={ValueState.Warning}
|
|
240
245
|
type={"Message"}
|
|
241
246
|
contentWidth={"22rem"}
|
|
247
|
+
escapeHandler={(): void => this.close()}
|
|
242
248
|
ref={this.dataLossDialog}
|
|
243
249
|
>
|
|
244
250
|
{{
|
|
@@ -219,6 +219,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
|
|
|
219
219
|
return undefined;
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
|
+
|
|
223
|
+
// Filter recommendationData to only include active recommendations
|
|
224
|
+
if (this.acceptAllParams.recommendationData) {
|
|
225
|
+
this.acceptAllParams.recommendationData = this._filterActiveRecommendations(this.acceptAllParams.recommendationData);
|
|
226
|
+
}
|
|
222
227
|
const acceptModel = this.getAcceptAllModel();
|
|
223
228
|
this.view.setModel(acceptModel, "_acceptDialogModel");
|
|
224
229
|
if (!acceptModel.getData().items?.length) {
|
|
@@ -244,6 +249,29 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
|
|
|
244
249
|
this.confirmRecommendationDialog.current?.destroy();
|
|
245
250
|
}
|
|
246
251
|
|
|
252
|
+
/**
|
|
253
|
+
* Filters recommendation data to only include recommendations that are currently active.
|
|
254
|
+
* @param recommendationData Array of recommendation data to filter
|
|
255
|
+
* @returns Filtered array containing only active recommendations
|
|
256
|
+
*/;
|
|
257
|
+
_proto._filterActiveRecommendations = function _filterActiveRecommendations(recommendationData) {
|
|
258
|
+
const localAnnotationModel = this.view.getModel().getLocalAnnotationModel();
|
|
259
|
+
const activeRecommendations = localAnnotationModel.getProperty("/activeRecommendations") ?? {};
|
|
260
|
+
return recommendationData.filter(recommendation => {
|
|
261
|
+
const contextPath = recommendation.context?.getPath();
|
|
262
|
+
if (!contextPath || !recommendation.propertyPath) {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
const activePathsForContext = activeRecommendations[contextPath];
|
|
266
|
+
if (!activePathsForContext || activePathsForContext.length === 0) {
|
|
267
|
+
return false;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Check if the recommendation's propertyPath is in the active recommendations list
|
|
271
|
+
return activePathsForContext.includes(recommendation.propertyPath);
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
|
|
247
275
|
/**
|
|
248
276
|
* Handler for Accept and Save button.
|
|
249
277
|
*/;
|
|
@@ -321,7 +349,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
|
|
|
321
349
|
const rejectedContextData = {};
|
|
322
350
|
for (const key of Object.keys(annotationObject)) {
|
|
323
351
|
if (key.includes("ui5.fe.recommendations")) {
|
|
324
|
-
|
|
352
|
+
const value = annotationObject[key];
|
|
353
|
+
rejectedContextData[key] = Array.isArray(value) ? [...value] : value;
|
|
325
354
|
}
|
|
326
355
|
}
|
|
327
356
|
return rejectedContextData;
|
|
@@ -533,4 +562,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
|
|
|
533
562
|
_exports.ConfirmRecommendationDialog = ConfirmRecommendationDialog;
|
|
534
563
|
return _exports;
|
|
535
564
|
}, false);
|
|
536
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIl9leHBvcnRzIiwiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJkZWZpbmVSZWZlcmVuY2UiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hbmFnZWRPYmplY3QiLCJwcm9wcyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJ2aWV3IiwicHJvZ3JhbW1pbmdNb2RlbCIsImNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zIiwidmlzaWJsZUNvbnRleHRQYXRocyIsImdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzIiwib3BlblJlY29tbWVuZGF0aW9ucyIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzIiwicmVjb21tZW5kYXRpb25zIiwibGVuZ3RoIiwiZm9yRWFjaCIsInJlY29tbWVuZGF0aW9uIiwicHJpbWFyeUNvbnRleHQiLCJjb250ZXh0IiwiZmFsbGJhY2tDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJpc0VtcHR5IiwiY3R4IiwicGF0aCIsInZhbHVlIiwiZ2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJwdXNoIiwidmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMiLCJnZXRQYXRoIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJmY2xDb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiaXNGY2xFbmFibGVkIiwiX2lzRmNsRW5hYmxlZCIsImlzRnVsbFNjcmVlbiIsImdldEhlbHBlciIsImdldEN1cnJlbnRVSVN0YXRlIiwicmlnaHRNb3N0Q29udGV4dCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJpbmNsdWRlcyIsImNvbnRleHRQYXRocyIsImxvY2FsQW5ub3RhdGlvbk1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImNvbnRleHRQYXRoIiwibG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwiZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbk9iamVjdCIsImZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwicmVjb21tZW5kYXRpb25PYmplY3QiLCJjdXJyZW50S2V5IiwiY3VycmVudFZhbHVlIiwia2V5cyIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyIsImNvbnRleHRJZGVudGlmaWVyIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQiLCJjb250ZXh0RGF0YSIsInJlY29tbWVuZGF0aW9uQ29udGV4dCIsImNvbnRleHRLZXkiLCJhcmd1bWVudHMiLCJjdXJyZW50VmFsdWVJc0NvbnRleHQiLCJpc0EiLCJzcGxpdCIsIm9wZW5SZWNvbW1lbmRhdGlvbiIsImNvbnRleHRJZGVudGlmaWVyVGV4dCIsImRlc2NyaXB0aW9uIiwidGV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm9wZW4iLCJpc1NhdmUiLCJzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIiwiYWRkQ29udGV4dElkZW50aWZpZXJUZXh0IiwicmVjb21tZW5kYXRpb25EYXRhIiwiYWNjZXB0QWxsUGFyYW1zIiwib25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImZldGNoQWNjZXB0QWxsUGFyYW1zIiwiYWNjZXB0TW9kZWwiLCJnZXRBY2NlcHRBbGxNb2RlbCIsInNldE1vZGVsIiwiZ2V0RGF0YSIsIml0ZW1zIiwiU2tpcHBlZCIsImRpYWxvZyIsImdldENvbnRlbnQiLCJzZXRFc2NhcGVIYW5kbGVyIiwib25Db250aW51ZUVkaXRpbmciLCJiaW5kIiwiYWRkRGVwZW5kZW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9taXNlUmVzb2x2ZSIsInByb21pc2VSZWplY3QiLCJjbG9zZSIsImNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyIsImN1cnJlbnQiLCJkZXN0cm95Iiwib25BY2NlcHRBbmRTYXZlIiwiaXNBY2NlcHRlZCIsImFjY2VwdFJlY29tbWVuZGF0aW9ucyIsIkFjY2VwdCIsIkxvZyIsImVycm9yIiwib25JZ25vcmVBbmRTYXZlIiwicmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMiLCJwcm9jZXNzZWRDb250ZXh0UGF0aHMiLCJTZXQiLCJoYXMiLCJfcHJvY2Vzc1JlY29tbWVuZGF0aW9uQ29udGV4dCIsImlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMiLCJSZWplY3QiLCJyZWplY3RlZENvbnRleHREYXRhIiwiX2ZpbHRlclJlY29tbWVuZGF0aW9uS2V5cyIsIl9jbGVhclJlY29tbWVuZGF0aW9uUHJvcGVydGllcyIsInNldFByb3BlcnR5IiwiYWRkIiwia2V5IiwiT2JqZWN0IiwiQ29udGludWUiLCJnZXRGaWVsZE5hbWUiLCJ0YXJnZXRQYXRoIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3QiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwiZ2V0VGV4dCIsImRpc3BsYXlNb2RlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0QnV0dG9uIiwidHlwZSIsInByZXNzSGFuZGxlciIsIl9qc3giLCJCdXR0b24iLCJ3aWR0aCIsInByZXNzIiwiY2hpbGRyZW4iLCJsYXlvdXREYXRhIiwiX0ZyYWdtZW50IiwiRmxleEl0ZW1EYXRhIiwibWluV2lkdGgiLCJnZXRGb290ZXIiLCJUb29sYmFyIiwiY29udGVudCIsIl9qc3hzIiwiVG9vbGJhclNwYWNlciIsIl9nZXREaWFsb2dCdXR0b25UZXh0Iiwic2F2ZSIsInJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJpc0FjY2VwdEJ1dHRvbiIsImlzQ3JlYXRlTW9kZSIsIkpTT05Nb2RlbCIsImVudGl0eU5hbWVMYWJlbCIsImdldEVudGl0eU5hbWUiLCJpZGVudGlmaWVyVGV4dHMiLCJnZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgiLCJsaXN0RGF0YSIsImZpZWxkTmFtZSIsInZhbHVlT2YiLCJmaWVsZFZhbHVlIiwic2V0RGF0YSIsImdldEdyb3VwIiwiZ2V0TWVzc2FnZSIsImFjY2VwdEFsbERhdGEiLCJtZXNzYWdlVGV4dCIsIlRleHQiLCJnZXREaWFsb2dDb250ZW50IiwiTGlzdCIsIm1vZGVsIiwic29ydGVyIiwiU29ydGVyIiwiQ3VzdG9tTGlzdEl0ZW0iLCJIQm94IiwiY2xhc3MiLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiVmFsdWVTdGF0ZSIsIkluZm9ybWF0aW9uIiwicmVmIiwicmVzaXphYmxlIiwiY29udGVudFdpZHRoIiwiZm9vdGVyIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCJzYXAvbS9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcIi4uLy4uL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQWNjZXB0QWxsUGFyYW1zLCBSZWNvbW1lbmRhdGlvbkRhdGEgfSBmcm9tIFwiLi4vLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCIuLi8uLi9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciwgdHlwZSBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCIuLi8uLi9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG50eXBlIFByb2dyYW1taW5nTW9kZWxUeXBlID0gKHR5cGVvZiBQcm9ncmFtbWluZ01vZGVsKVtrZXlvZiB0eXBlb2YgUHJvZ3JhbW1pbmdNb2RlbF07XG5cbmV4cG9ydCBlbnVtIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24ge1xuXHRBY2NlcHQgPSBcIkFjY2VwdF9SZWNvbW1lbmRhdGlvbnNcIixcblx0UmVqZWN0ID0gXCJSZWplY3RfUmVjb21tZW5kYXRpb25zXCIsXG5cdENvbnRpbnVlID0gXCJDb250aW51ZV9FZGl0aW5nXCIsXG5cdFNraXBwZWQgPSBcIlNraXBwZWRcIlxufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5SZWNvbW1lbmRhdGlvbnMuQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCIpXG5leHBvcnQgY2xhc3MgQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIGV4dGVuZHMgTWFuYWdlZE9iamVjdCB7XG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Q29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nPikge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnZpZXcgPSBwcm9wcy52aWV3IGFzIFZpZXc7XG5cdFx0dGhpcy5wcm9ncmFtbWluZ01vZGVsID0gcHJvcHMucHJvZ3JhbW1pbmdNb2RlbDtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMudmlldyk7XG5cdH1cblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0Y29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nITogUmVmPERpYWxvZz47XG5cblx0cHVibGljIHZpZXchOiBWaWV3O1xuXG5cdHB1YmxpYyBwcm9ncmFtbWluZ01vZGVsITogUHJvZ3JhbW1pbmdNb2RlbFR5cGU7XG5cblx0cHJpdmF0ZSBjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsITogUmVzb3VyY2VNb2RlbDtcblxuXHRwcm90ZWN0ZWQga2V5ITogc3RyaW5nO1xuXG5cdHByaXZhdGUgaXNTYXZlITogYm9vbGVhbjtcblxuXHRwcml2YXRlIGFjY2VwdEFsbFBhcmFtcyE6IEFjY2VwdEFsbFBhcmFtcztcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2VsZWN0ZWQgZGlhbG9nIGxpc3Qgb3B0aW9uXG5cdCAqL1xuXHRwcml2YXRlIHByb21pc2VSZXNvbHZlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIFJlamVjdHMgdGhlIHByb21pc2Ugb2Ygb3BlbiBkaWFsb2dcblx0ICovXG5cdHB1YmxpYyBwcm9taXNlUmVqZWN0ITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uIERhdGFcblx0ICovXG5cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTogUmVjb21tZW5kYXRpb25EYXRhW10ge1xuXHRcdGNvbnN0IHZpc2libGVDb250ZXh0UGF0aHMgPSB0aGlzLmdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzKCk7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHModmlzaWJsZUNvbnRleHRQYXRocyk7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBwcmltYXJ5Q29udGV4dCA9IHJlY29tbWVuZGF0aW9uLmNvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IGZhbGxiYWNrQ29udGV4dCA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSByZWNvbW1lbmRhdGlvbi5wcm9wZXJ0eVBhdGggPz8gXCJcIjtcblxuXHRcdFx0XHRjb25zdCBpc0VtcHR5ID0gKGN0eDogQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGwsIHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gY3R4Py5nZXRQcm9wZXJ0eShwYXRoKTtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gXCJcIjtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBwdXNoIHJlY29tbWVuZGF0aW9uIGlmIHByb3BlcnR5IGlzIGVtcHR5IGluIGJvdGggY29udGV4dHNcblx0XHRcdFx0aWYgKGlzRW1wdHkocHJpbWFyeUNvbnRleHQsIHByb3BlcnR5UGF0aCkgJiYgaXNFbXB0eShmYWxsYmFja0NvbnRleHQsIHByb3BlcnR5UGF0aCkpIHtcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnMucHVzaChyZWNvbW1lbmRhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgY29udGV4dCBwYXRoc1xuXHQgKi9cblxuXHRwdWJsaWMgZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMgPSBbdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKV07XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWQgPyBmY2xDb250cm9sbGVyLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuIDogdHJ1ZTtcblx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSBmY2xDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdGlmICghdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMuaW5jbHVkZXMocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHR2aXNpYmxlUGFnZUNvbnRleHRQYXRocy5wdXNoKHJpZ2h0TW9zdENvbnRleHQ/LmdldFBhdGgoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB2aXNpYmxlUGFnZUNvbnRleHRQYXRocztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhzIFBhdGhzIG9mIHRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbkRhdGEgZm9yIHZpc2libGUgY29udGV4dHNcblx0ICovXG5cdHB1YmxpYyBnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyhjb250ZXh0UGF0aHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10gPSBbXTtcblx0XHRpZiAoY29udGV4dFBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gKHRoaXMudmlldy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKCk7XG5cdFx0XHQvLyBjaGVjayBjb250ZXh0IHBhdGhzIGluIGxvY2FsIGFubm90YXRpb24gbW9kZWxzIHdoaWNoIG1hdGNoIHRvXG5cdFx0XHQvLyAxLiBjdXJyZW50IHBhZ2UgYW5kXG5cdFx0XHQvLyAyLiBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgcGFnZVxuXHRcdFx0Ly8gTmVlZCB0byBjb25zaWRlciBhbHNvIGltbWVkaWF0ZSBjaGlsZHJlblxuXHRcdFx0Ly8gaXRlcmF0ZSBvdmVyIGFsbCBrZXlzXG5cdFx0XHRjb250ZXh0UGF0aHMuZm9yRWFjaCgoY29udGV4dFBhdGgpID0+IHtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbEFubm90YXRpb25PYmplY3QgPSBsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRPYmplY3QoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGlmIChsb2NhbEFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25PYmplY3QgPSBsb2NhbEFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHRcdCAqIFRoZSBsb2NhbCBhbm5vdGF0aW9uIG9iamVjdCB3aWxsIGJlIG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIDpcblx0XHRcdFx0XHRcdCAqIHtcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogUHJvcGVydHlOYW1lOiB7XG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQ6eyBjb250ZXh0IH1cblx0XHRcdFx0XHRcdCAqIFx0IH1cblx0XHRcdFx0XHRcdCAqIHJlY29tbWVuZGF0aW9uQ29udGV4dDp7IGNvbnRleHQgfVxuXHRcdFx0XHRcdFx0ICogfVxuXHRcdFx0XHRcdFx0ICpcblx0XHRcdFx0XHRcdCAqIHNvIGluIG9yZGVyIHRvIGdldCB0aGUgcmVjb21tZW5kYXRpb25zIGFzIHBlciBlYWNoIGNvbnRleHQgLSBmb3IgcGFyZW50L2NoaWxkIGVudGl0aWVzIHdlIG5lZWQgdG8gaXRlcmF0ZSBvdmVyIGVhY2gga2V5cyByZWN1cnNpdmVseSBpbiB0aGUgZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QgZnVuY3Rpb24sXG5cdFx0XHRcdFx0XHQgKiBmb3JtIHRoZSBjb3JyZXNwb25kaW5nIHN0cnVjdHVyZSBhbmQgdGhlbiBzZW5kIGl0IGZvciBnZXR0aW5nIHRoZSByZWNvbW1lbmRhdGlvbnMgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgb3BlblJlY29tbWVuZGF0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9wZW5SZWNvbW1lbmRhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGFubm90YXRpb25PYmplY3Rcblx0ICogQHBhcmFtIG9wZW5SZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb24gRGF0YVxuXHQgKi9cblxuXHRwcml2YXRlIGZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSk6IHZvaWQge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdKSB7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdID0gYW5ub3RhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGZvciAoY29uc3QgY3VycmVudEtleSBpbiBhbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFubm90YXRpb25PYmplY3RbY3VycmVudEtleV07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoKGN1cnJlbnRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBPRGF0YVY0Q29udGV4dD4pW1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3RbY3VycmVudEtleV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wZW5SZWNvbW1lbmRhdGlvbnMpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIikgfHxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiKSB8fFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIilcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W2N1cnJlbnRLZXldID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qga2V5cyA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0KHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKS5jb250ZXh0SWRlbnRpZmllciA9IGtleXNbXCJzZW1hbnRpY0tleXNcIl1cblx0XHRcdFx0PyBrZXlzW1wic2VtYW50aWNLZXlzXCJdXG5cdFx0XHRcdDoga2V5c1tcInRlY2huaWNhbEtleXNcIl07XG5cdFx0XHR0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdCxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dERhdGEgVGhlIGNvbnRleHQgZGF0YSBvYmplY3QgZm9yIHJlY29tbWVuZGF0aW9uc1xuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25Db250ZXh0IFRoZSByZWNvbW1lbmRhdGlvbiBjb250ZXh0XG5cdCAqIEBwYXJhbSBvcGVuUmVjb21tZW5kYXRpb25zIFJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKiBAcGFyYW0gY29udGV4dEtleSBDb250ZXh0IEtleVxuXHQgKi9cblxuXHRwcml2YXRlIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdGNvbnRleHREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdLFxuXHRcdGNvbnRleHRLZXkgPSBcIlwiXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY3VycmVudEtleSBpbiBjb250ZXh0RGF0YSkge1xuXHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gY29udGV4dERhdGFbY3VycmVudEtleV07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZUlzQ29udGV4dCA9XG5cdFx0XHRcdFx0KGN1cnJlbnRWYWx1ZSBhcyBPRGF0YVY0Q29udGV4dCkuaXNBICYmIChjdXJyZW50VmFsdWUgYXMgT0RhdGFWNENvbnRleHQpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpO1xuXHRcdFx0XHRpZiAoY3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gY3VycmVudEtleS5zcGxpdChcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpWzBdO1xuXHRcdFx0XHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbjogUmVjb21tZW5kYXRpb25EYXRhID0ge1xuXHRcdFx0XHRcdFx0Y29udGV4dDogcmVjb21tZW5kYXRpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBjb250ZXh0S2V5ID8gYCR7Y29udGV4dEtleX0vJHtwcm9wZXJ0eVBhdGh9YCA6IHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdHZhbHVlOiBjdXJyZW50VmFsdWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXI6IChyZWNvbW1lbmRhdGlvbkNvbnRleHQgYXMgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pLmNvbnRleHRJZGVudGlmaWVyLFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXJUZXh0OiBbXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBjb250ZXh0RGF0YVtgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gXTtcblx0XHRcdFx0XHRpZiAoZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbi50ZXh0ID0gZGVzY3JpcHRpb24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLnB1c2gob3BlblJlY29tbWVuZGF0aW9uKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkgJiYgIWN1cnJlbnRWYWx1ZUlzQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGNvbmZpcm0gcmVjb21tZW5kYXRpb25zIGRpYWxvZy5cblx0ICogQHBhcmFtIGlzU2F2ZSBCb29sZWFuIGZsYWcgd2hpY2ggd291bGQgYmUgc2V0IHRvIHRydWUgaWYgd2UgYXJlIHNhdmluZyB0aGUgZG9jdW1lbnQgYW5kIHdvdWxkIGJlIGZhbHNlIGlmIHdlIGRvIGFwcGx5IGNoYW5nZXNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3b3VsZCByZXNvbHZlIHdpdGggUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiAoQWNjZXB0LCBJZ25vcmUsIENvbnRpbnVlLCBTa2lwcGVkKVxuXHQgKi9cblx0cHVibGljIGFzeW5jIG9wZW4oaXNTYXZlOiBib29sZWFuKTogUHJvbWlzZTxSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIHwgdW5kZWZpbmVkPiB7XG5cdFx0Ly8gY2hlY2sgZm9yIGJ1aWx0LWluIHJlY29tbWVuZGF0aW9uc1xuXHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbnMgPSB0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTtcblx0XHRpZiAob3BlblJlY29tbWVuZGF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmFkZENvbnRleHRJZGVudGlmaWVyVGV4dChcblx0XHRcdFx0eyByZWNvbW1lbmRhdGlvbkRhdGE6IG9wZW5SZWNvbW1lbmRhdGlvbnMgfSxcblx0XHRcdFx0dGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zID0ge1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGE6IG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdH07XG5cdFx0XHRhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5vbkJlZm9yZUFjY2VwdFJlY29tbWVuZGF0aW9ucyh0aGlzLmFjY2VwdEFsbFBhcmFtcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGlmIGJ1aWx0LWluIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IGZvdW5kIHRoZW4gY2hlY2sgZm9yIGxlZ2FjeSByZWNvbW1lbmRhdGlvbnMuXG5cdFx0XHRjb25zdCBsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCA9ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCgpO1xuXHRcdFx0aWYgKGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0KSB7XG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zID0gYXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBY2NlcHRBbGxQYXJhbXMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGFjY2VwdE1vZGVsID0gdGhpcy5nZXRBY2NlcHRBbGxNb2RlbCgpO1xuXHRcdHRoaXMudmlldy5zZXRNb2RlbChhY2NlcHRNb2RlbCwgXCJfYWNjZXB0RGlhbG9nTW9kZWxcIik7XG5cdFx0aWYgKCFhY2NlcHRNb2RlbC5nZXREYXRhKCkuaXRlbXM/Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uU2tpcHBlZDtcblx0XHR9XG5cdFx0dGhpcy5pc1NhdmUgPSBpc1NhdmU7XG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0ZGlhbG9nPy5zZXRFc2NhcGVIYW5kbGVyKHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy52aWV3LmFkZERlcGVuZGVudChkaWFsb2cgYXMgVUk1RWxlbWVudCk7XG5cdFx0ZGlhbG9nPy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgdG8gY2xvc2UgdGhlIGNvbmZpcm1SZWNvbW1lbmRhdGlvbiBkaWFsb2cuXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2cuY3VycmVudD8uY2xvc2UoKTtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgQWNjZXB0IGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BY2NlcHRBbmRTYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpc0FjY2VwdGVkID0gYXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuYWNjZXB0UmVjb21tZW5kYXRpb25zKFxuXHRcdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtc1xuXHRcdFx0KTtcblx0XHRcdGlmICghaXNBY2NlcHRlZCkge1xuXHRcdFx0XHR0aGlzLnByb21pc2VSZWplY3QoXCJBY2NlcHQgRmFpbGVkXCIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRMb2cuZXJyb3IoXCJBY2NlcHQgUmVjb21tZW5kYXRpb25zIEZhaWxlZFwiKTtcblx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgUmVqZWN0IGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBSZWplY3QgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRjb25zdCByZWplY3RlZFJlY29tbWVuZGF0aW9ucyA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5KFwiL3JlamVjdGVkUmVjb21tZW5kYXRpb25zXCIpID8/IHt9O1xuXG5cdFx0aWYgKCF0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcHJvY2Vzc2VkQ29udGV4dFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uIG9mIHRoaXMuYWNjZXB0QWxsUGFyYW1zLnJlY29tbWVuZGF0aW9uRGF0YSkge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSByZWNvbW1lbmRhdGlvbi5jb250ZXh0Py5nZXRQYXRoKCkgPz8gXCJcIjtcblxuXHRcdFx0aWYgKGNvbnRleHRQYXRoICE9PSBcIlwiICYmICFwcm9jZXNzZWRDb250ZXh0UGF0aHMuaGFzKGNvbnRleHRQYXRoKSkge1xuXHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0T2JqZWN0KGNvbnRleHRQYXRoKTtcblxuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdCAhPT0gbnVsbCAmJiB0eXBlb2YgYW5ub3RhdGlvbk9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdHRoaXMuX3Byb2Nlc3NSZWNvbW1lbmRhdGlvbkNvbnRleHQoXG5cdFx0XHRcdFx0XHRjb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdGFubm90YXRpb25PYmplY3QsXG5cdFx0XHRcdFx0XHRyZWplY3RlZFJlY29tbWVuZGF0aW9ucyxcblx0XHRcdFx0XHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc2VkQ29udGV4dFBhdGhzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMoKTtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uUmVqZWN0KTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvY2Vzc2VzIGEgc2luZ2xlIHJlY29tbWVuZGF0aW9uIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIGJlaW5nIHByb2Nlc3NlZFxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdCBUaGUgYW5ub3RhdGlvbiBvYmplY3QgZm9yIHRoZSBjb250ZXh0XG5cdCAqIEBwYXJhbSByZWplY3RlZFJlY29tbWVuZGF0aW9ucyBUaGUgcmVqZWN0ZWQgcmVjb21tZW5kYXRpb25zIG9iamVjdFxuXHQgKiBAcGFyYW0gbG9jYWxBbm5vdGF0aW9uTW9kZWwgVGhlIGxvY2FsIGFubm90YXRpb24gbW9kZWxcblx0ICogQHBhcmFtIHByb2Nlc3NlZENvbnRleHRQYXRocyBTZXQgdG8gdHJhY2sgcHJvY2Vzc2VkIGNvbnRleHRzXG5cdCAqL1xuXHRwcml2YXRlIF9wcm9jZXNzUmVjb21tZW5kYXRpb25Db250ZXh0KFxuXHRcdGNvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0YW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0cmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsOiBKU09OTW9kZWwsXG5cdFx0cHJvY2Vzc2VkQ29udGV4dFBhdGhzOiBTZXQ8c3RyaW5nPlxuXHQpOiB2b2lkIHtcblx0XHQvLyBCdWlsZCBhIHNoYWxsb3cgY29weSwgdGhlbiBmaWx0ZXIgZm9yIHJlY29tbWVuZGF0aW9uIGtleXMgb25seVxuXHRcdGNvbnN0IHJlamVjdGVkQ29udGV4dERhdGEgPSB0aGlzLl9maWx0ZXJSZWNvbW1lbmRhdGlvbktleXMoYW5ub3RhdGlvbk9iamVjdCk7XG5cblx0XHQvLyBDbGVhciByZWNvbW1lbmRhdGlvbiBwcm9wZXJ0aWVzIGZyb20gbG9jYWwgYW5ub3RhdGlvbiBtb2RlbFxuXHRcdHRoaXMuX2NsZWFyUmVjb21tZW5kYXRpb25Qcm9wZXJ0aWVzKGFubm90YXRpb25PYmplY3QsIGNvbnRleHRQYXRoLCBsb2NhbEFubm90YXRpb25Nb2RlbCk7XG5cblx0XHQvLyBTdG9yZSB0aGUgZmlsdGVyZWQgcmVqZWN0ZWQgY29udGV4dCBpbiByZWplY3RlZFJlY29tbWVuZGF0aW9uc1xuXHRcdHJlamVjdGVkUmVjb21tZW5kYXRpb25zW2NvbnRleHRQYXRoXSA9IHJlamVjdGVkQ29udGV4dERhdGE7XG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnNcIiwgcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMpO1xuXG5cdFx0Ly8gTWFyayB0aGlzIGNvbnRleHRQYXRoIGFzIHByb2Nlc3NlZFxuXHRcdHByb2Nlc3NlZENvbnRleHRQYXRocy5hZGQoY29udGV4dFBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbHRlcnMgYW5ub3RhdGlvbiBvYmplY3QgdG8ga2VlcCBvbmx5IHJlY29tbWVuZGF0aW9uIGtleXMuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uT2JqZWN0IFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBvYmplY3Rcblx0ICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgb25seSByZWNvbW1lbmRhdGlvbi1yZWxhdGVkIGtleXNcblx0ICovXG5cdHByaXZhdGUgX2ZpbHRlclJlY29tbWVuZGF0aW9uS2V5cyhhbm5vdGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCByZWplY3RlZENvbnRleHREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoYW5ub3RhdGlvbk9iamVjdCkpIHtcblx0XHRcdGlmIChrZXkuaW5jbHVkZXMoXCJ1aTUuZmUucmVjb21tZW5kYXRpb25zXCIpKSB7XG5cdFx0XHRcdHJlamVjdGVkQ29udGV4dERhdGFba2V5XSA9IGFubm90YXRpb25PYmplY3Rba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVqZWN0ZWRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgcmVjb21tZW5kYXRpb24gcHJvcGVydGllcyBmcm9tIGxvY2FsIGFubm90YXRpb24gbW9kZWwuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uT2JqZWN0IFRoZSBhbm5vdGF0aW9uIG9iamVjdCBjb250YWluaW5nIGtleXMgdG8gY2xlYXJcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIFRoZSBjb250ZXh0IHBhdGggZm9yIHByb3BlcnR5IGNsZWFyaW5nXG5cdCAqIEBwYXJhbSBsb2NhbEFubm90YXRpb25Nb2RlbCBUaGUgbG9jYWwgYW5ub3RhdGlvbiBtb2RlbFxuXHQgKi9cblx0cHJpdmF0ZSBfY2xlYXJSZWNvbW1lbmRhdGlvblByb3BlcnRpZXMoXG5cdFx0YW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRsb2NhbEFubm90YXRpb25Nb2RlbDogSlNPTk1vZGVsXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0XHRpZiAoa2V5LmluY2x1ZGVzKFwidWk1LmZlLnJlY29tbWVuZGF0aW9uc1wiKSkge1xuXHRcdFx0XHRsb2NhbEFubm90YXRpb25Nb2RlbC5zZXRQcm9wZXJ0eShgJHtjb250ZXh0UGF0aH0vJHtrZXl9YCwgdW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgQ29udGludWUgRWRpdGluZyBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIG9uQ29udGludWVFZGl0aW5nKCk6IHZvaWQge1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSk7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxhYmVsIG9yIG5hbWUgb2YgdGhlIEZpZWxkIGJhc2VkIG9uIGl0cyBwcm9wZXJ0eSBwYXRoLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBsYWJlbCBvZiB0aGUgRmllbGQuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpZWxkTmFtZSh0YXJnZXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8UHJvcGVydHk+KFxuXHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fFxuXHRcdFx0dGFyZ2V0UGF0aC5zcGxpdChcIi9cIilbdGFyZ2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoIC0gMV1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGV4dCBmb3IgcmVjb21tZW5kYXRpb24gYmFzZWQgb24gZGlzcGxheSBtb2RlLlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25cblx0ICogQHBhcmFtIGRpc3BsYXlNb2RlXG5cdCAqIEByZXR1cm5zIFRleHQgZm9yIGEgcmVjb21tZW5kYXRpb25cblx0ICovXG5cdHByaXZhdGUgZ2V0VGV4dChyZWNvbW1lbmRhdGlvbjogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlLCBkaXNwbGF5TW9kZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAocmVjb21tZW5kYXRpb24udGV4dCB8fCByZWNvbW1lbmRhdGlvbi52YWx1ZSkge1xuXHRcdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udGV4dCE7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udGV4dCwgcmVjb21tZW5kYXRpb24udmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHJlY29tbWVuZGF0aW9uLnZhbHVlLCByZWNvbW1lbmRhdGlvbi50ZXh0KTtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnZhbHVlITtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnZhbHVlIHx8IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBCdXR0b24gd2l0aCBnaXZlbiB0ZXh0LCB0eXBlIGFuZCBwcmVzc0hhbmRsZXIuXG5cdCAqIEBwYXJhbSB0ZXh0IFRleHQgZm9yIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgYnV0dG9uXG5cdCAqIEBwYXJhbSBwcmVzc0hhbmRsZXIgUHJlc3MgSGFuZGxlciBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcmV0dXJucyBCdXR0b24gd2l0aCB0aGUgZ2l2ZW4gc2V0dGluZ3Ncblx0ICovXG5cdHByaXZhdGUgZ2V0QnV0dG9uKHRleHQ6IHN0cmluZywgdHlwZTogc3RyaW5nLCBwcmVzc0hhbmRsZXI6IEV2ZW50SGFuZGxlcik6IEJ1dHRvbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b24gdGV4dD17dGV4dH0gdHlwZT17dHlwZX0gd2lkdGg9e1wiYXV0b1wifSBwcmVzcz17cHJlc3NIYW5kbGVyfT5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8RmxleEl0ZW1EYXRhIG1pbldpZHRoPXtcIjEwMCVcIn0+PC9GbGV4SXRlbURhdGE+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgRm9vdGVyIHdpdGggQnV0dG9ucy5cblx0ICogQHJldHVybnMgRm9vdGVyXG5cdCAqL1xuXG5cdHByaXZhdGUgZ2V0Rm9vdGVyKCk6IFRvb2xiYXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VG9vbGJhcj5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0RGlhbG9nQnV0dG9uVGV4dCh0aGlzLmlzU2F2ZSwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQpLFxuXHRcdFx0XHRcdFx0XHRcdFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25BY2NlcHRBbmRTYXZlLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0QnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2dldERpYWxvZ0J1dHRvblRleHQodGhpcy5pc1NhdmUsIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uUmVqZWN0KSxcblx0XHRcdFx0XHRcdFx0XHRcIkdob3N0XCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbklnbm9yZUFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19DT05USU5VRV9FRElUSU5HXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQ29udGludWVFZGl0aW5nLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhcj5cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0RGlhbG9nQnV0dG9uVGV4dChzYXZlOiBib29sZWFuLCByZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uOiBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uKTogc3RyaW5nIHtcblx0XHRjb25zdCBpc0FjY2VwdEJ1dHRvbiA9IHJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0O1xuXHRcdGlmIChzYXZlKSB7XG5cdFx0XHRjb25zdCBpc0NyZWF0ZU1vZGUgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiY3JlYXRlTW9kZVwiKTtcblxuXHRcdFx0aWYgKGlzQ3JlYXRlTW9kZSkge1xuXHRcdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9DUkVBVEVcIilcblx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfUkVKRUNUX0FORF9DUkVBVEVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBpc0FjY2VwdEJ1dHRvblxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9TQVZFXCIpXG5cdFx0XHRcdDogdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19SRUpFQ1RfQU5EX1NBVkVcIik7XG5cdFx0fVxuXG5cdFx0Ly8gTm90IHNhdmluZyDigJMgcGxhaW4gQWNjZXB0L0lnbm9yZVxuXHRcdHJldHVybiBpc0FjY2VwdEJ1dHRvblxuXHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKVxuXHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1JFSkVDVFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVkIGEgSlNPTiBNb2RlbCBmb3IgdGhlIGFjY2VwdCBhbGwgZGlhbG9nIGRhdGEuXG5cdCAqIEByZXR1cm5zIFRoZSBKU09OIE1vZGVsIGZvciBhY2NlcHQgYWxsIGRpYWxvZy5cblx0ICovXG5cdGdldEFjY2VwdEFsbE1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0Y29uc3QgaXRlbXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSBvZiB0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlOYW1lTGFiZWwgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldEVudGl0eU5hbWUocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0cyA9XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQgJiYgcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0PyBgJHtlbnRpdHlOYW1lTGFiZWx9ICgke3JlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHR9KWBcblx0XHRcdFx0XHQ6IGVudGl0eU5hbWVMYWJlbDtcblxuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS52YWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRhdGEudGV4dCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQ/LmdldFBhdGgoKSArIFwiL1wiICsgcmVjb21tZW5kYXRpb25EYXRhLnByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aChcblx0XHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgbGlzdERhdGEgPSB7XG5cdFx0XHRcdFx0ZmllbGROYW1lOiB0aGlzLmdldEZpZWxkTmFtZSh0YXJnZXRQYXRoKS52YWx1ZU9mKCksXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZTogdGhpcy5nZXRUZXh0KHJlY29tbWVuZGF0aW9uRGF0YSwgZGlzcGxheU1vZGUpLFxuXHRcdFx0XHRcdGlkZW50aWZpZXJUZXh0czogaWRlbnRpZmllclRleHRzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGl0ZW1zLnB1c2gobGlzdERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhY2NlcHRNb2RlbC5zZXREYXRhKHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdHJldHVybiBhY2NlcHRNb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBncm91cHMgdGhlIGNvbnRleHRzIGFjY29yZGluZyB0byB0aGUgaWRlbnRpZmllciB0ZXh0cy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGl0ZW1cblx0ICogQHJldHVybnMgVGhlIHRleHQgb2YgdGhlIGdyb3VwXG5cdCAqL1xuXHRnZXRHcm91cChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJpZGVudGlmaWVyVGV4dHNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBhY2NlcHQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIG1lc3NhZ2Ugd2l0aCB0aGUgZGVzaXJlZCB0ZXh0LlxuXHQgKi9cblx0Z2V0TWVzc2FnZSgpOiBUZXh0IHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID1cblx0XHRcdGFjY2VwdEFsbERhdGEubGVuZ3RoID4gMVxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVFwiLCBbYWNjZXB0QWxsRGF0YS5sZW5ndGhdKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVF9TSU5HVUxBUlwiKTtcblx0XHRyZXR1cm4gPFRleHQgdGV4dD17bWVzc2FnZVRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2UoKX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0RGlhbG9nQ29udGVudCgpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmb290ZXI6IDw+e3RoaXMuZ2V0Rm9vdGVyKCl9PC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpIGFzIERpYWxvZztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBcUNBLE1BQU1BLGdCQUFnQixHQUFHQyxTQUFTLENBQUNELGdCQUFnQjtFQUFDLElBR3hDRSw0QkFB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
|
|
565
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsIl9leHBvcnRzIiwiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJkZWZpbmVSZWZlcmVuY2UiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX01hbmFnZWRPYmplY3QiLCJwcm9wcyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJ2aWV3IiwicHJvZ3JhbW1pbmdNb2RlbCIsImNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwiLCJnZXRSZXNvdXJjZU1vZGVsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zIiwidmlzaWJsZUNvbnRleHRQYXRocyIsImdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzIiwib3BlblJlY29tbWVuZGF0aW9ucyIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzIiwicmVjb21tZW5kYXRpb25zIiwibGVuZ3RoIiwiZm9yRWFjaCIsInJlY29tbWVuZGF0aW9uIiwicHJpbWFyeUNvbnRleHQiLCJjb250ZXh0IiwiZmFsbGJhY2tDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJpc0VtcHR5IiwiY3R4IiwicGF0aCIsInZhbHVlIiwiZ2V0UHJvcGVydHkiLCJ1bmRlZmluZWQiLCJwdXNoIiwidmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMiLCJnZXRQYXRoIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJmY2xDb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiaXNGY2xFbmFibGVkIiwiX2lzRmNsRW5hYmxlZCIsImlzRnVsbFNjcmVlbiIsImdldEhlbHBlciIsImdldEN1cnJlbnRVSVN0YXRlIiwicmlnaHRNb3N0Q29udGV4dCIsImdldFJpZ2h0bW9zdENvbnRleHQiLCJpbmNsdWRlcyIsImNvbnRleHRQYXRocyIsImxvY2FsQW5ub3RhdGlvbk1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImNvbnRleHRQYXRoIiwibG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwiZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbk9iamVjdCIsImZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwicmVjb21tZW5kYXRpb25PYmplY3QiLCJjdXJyZW50S2V5IiwiY3VycmVudFZhbHVlIiwia2V5cyIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyIsImNvbnRleHRJZGVudGlmaWVyIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQiLCJjb250ZXh0RGF0YSIsInJlY29tbWVuZGF0aW9uQ29udGV4dCIsImNvbnRleHRLZXkiLCJhcmd1bWVudHMiLCJjdXJyZW50VmFsdWVJc0NvbnRleHQiLCJpc0EiLCJzcGxpdCIsIm9wZW5SZWNvbW1lbmRhdGlvbiIsImNvbnRleHRJZGVudGlmaWVyVGV4dCIsImRlc2NyaXB0aW9uIiwidGV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm9wZW4iLCJpc1NhdmUiLCJzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIiwiYWRkQ29udGV4dElkZW50aWZpZXJUZXh0IiwicmVjb21tZW5kYXRpb25EYXRhIiwiYWNjZXB0QWxsUGFyYW1zIiwib25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCIsImZldGNoQWNjZXB0QWxsUGFyYW1zIiwiX2ZpbHRlckFjdGl2ZVJlY29tbWVuZGF0aW9ucyIsImFjY2VwdE1vZGVsIiwiZ2V0QWNjZXB0QWxsTW9kZWwiLCJzZXRNb2RlbCIsImdldERhdGEiLCJpdGVtcyIsIlNraXBwZWQiLCJkaWFsb2ciLCJnZXRDb250ZW50Iiwic2V0RXNjYXBlSGFuZGxlciIsIm9uQ29udGludWVFZGl0aW5nIiwiYmluZCIsImFkZERlcGVuZGVudCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZVJlc29sdmUiLCJwcm9taXNlUmVqZWN0IiwiY2xvc2UiLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJjdXJyZW50IiwiZGVzdHJveSIsImFjdGl2ZVJlY29tbWVuZGF0aW9ucyIsImZpbHRlciIsImFjdGl2ZVBhdGhzRm9yQ29udGV4dCIsIm9uQWNjZXB0QW5kU2F2ZSIsImlzQWNjZXB0ZWQiLCJhY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJBY2NlcHQiLCJMb2ciLCJlcnJvciIsIm9uSWdub3JlQW5kU2F2ZSIsInJlamVjdGVkUmVjb21tZW5kYXRpb25zIiwicHJvY2Vzc2VkQ29udGV4dFBhdGhzIiwiU2V0IiwiaGFzIiwiX3Byb2Nlc3NSZWNvbW1lbmRhdGlvbkNvbnRleHQiLCJpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzIiwiUmVqZWN0IiwicmVqZWN0ZWRDb250ZXh0RGF0YSIsIl9maWx0ZXJSZWNvbW1lbmRhdGlvbktleXMiLCJfY2xlYXJSZWNvbW1lbmRhdGlvblByb3BlcnRpZXMiLCJzZXRQcm9wZXJ0eSIsImFkZCIsImtleSIsIk9iamVjdCIsIkNvbnRpbnVlIiwiZ2V0RmllbGROYW1lIiwidGFyZ2V0UGF0aCIsImludm9sdmVkRGF0YU1vZGVsT2JqZWN0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aCIsImdldE1ldGFNb2RlbCIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiTGFiZWwiLCJ0b1N0cmluZyIsImdldFRleHQiLCJkaXNwbGF5TW9kZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhCcmFja2V0cyIsImdldEJ1dHRvbiIsInR5cGUiLCJwcmVzc0hhbmRsZXIiLCJfanN4IiwiQnV0dG9uIiwid2lkdGgiLCJwcmVzcyIsImNoaWxkcmVuIiwibGF5b3V0RGF0YSIsIl9GcmFnbWVudCIsIkZsZXhJdGVtRGF0YSIsIm1pbldpZHRoIiwiZ2V0Rm9vdGVyIiwiVG9vbGJhciIsImNvbnRlbnQiLCJfanN4cyIsIlRvb2xiYXJTcGFjZXIiLCJfZ2V0RGlhbG9nQnV0dG9uVGV4dCIsInNhdmUiLCJyZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiaXNBY2NlcHRCdXR0b24iLCJpc0NyZWF0ZU1vZGUiLCJKU09OTW9kZWwiLCJlbnRpdHlOYW1lTGFiZWwiLCJnZXRFbnRpdHlOYW1lIiwiaWRlbnRpZmllclRleHRzIiwiZ2V0RGlzcGxheU1vZGVGb3JUYXJnZXRQYXRoIiwibGlzdERhdGEiLCJmaWVsZE5hbWUiLCJ2YWx1ZU9mIiwiZmllbGRWYWx1ZSIsInNldERhdGEiLCJnZXRHcm91cCIsImdldE1lc3NhZ2UiLCJhY2NlcHRBbGxEYXRhIiwibWVzc2FnZVRleHQiLCJUZXh0IiwiZ2V0RGlhbG9nQ29udGVudCIsIkxpc3QiLCJtb2RlbCIsInNvcnRlciIsIlNvcnRlciIsIkN1c3RvbUxpc3RJdGVtIiwiSEJveCIsImNsYXNzIiwiRGlhbG9nIiwidGl0bGUiLCJzdGF0ZSIsIlZhbHVlU3RhdGUiLCJJbmZvcm1hdGlvbiIsInJlZiIsInJlc2l6YWJsZSIsImNvbnRlbnRXaWR0aCIsImZvb3RlciIsIk1hbmFnZWRPYmplY3QiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVJlZmVyZW5jZSwgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBDdXN0b21MaXN0SXRlbSBmcm9tIFwic2FwL20vQ3VzdG9tTGlzdEl0ZW1cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwic2FwL20vVG9vbGJhclwiO1xuaW1wb3J0IFRvb2xiYXJTcGFjZXIgZnJvbSBcInNhcC9tL1Rvb2xiYXJTcGFjZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgeyBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250cm9sbGVyIGZyb20gXCIuLi8uLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCIuLi8uLi9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEFjY2VwdEFsbFBhcmFtcywgUmVjb21tZW5kYXRpb25EYXRhIH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xsZXJleHRlbnNpb25zL1JlY29tbWVuZGF0aW9uc1wiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwiLi4vLi4vZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB7IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIsIHR5cGUgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcblxuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xudHlwZSBQcm9ncmFtbWluZ01vZGVsVHlwZSA9ICh0eXBlb2YgUHJvZ3JhbW1pbmdNb2RlbClba2V5b2YgdHlwZW9mIFByb2dyYW1taW5nTW9kZWxdO1xuXG5leHBvcnQgZW51bSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIHtcblx0QWNjZXB0ID0gXCJBY2NlcHRfUmVjb21tZW5kYXRpb25zXCIsXG5cdFJlamVjdCA9IFwiUmVqZWN0X1JlY29tbWVuZGF0aW9uc1wiLFxuXHRDb250aW51ZSA9IFwiQ29udGludWVfRWRpdGluZ1wiLFxuXHRTa2lwcGVkID0gXCJTa2lwcGVkXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbHMuUmVjb21tZW5kYXRpb25zLkNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiKVxuZXhwb3J0IGNsYXNzIENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyBleHRlbmRzIE1hbmFnZWRPYmplY3Qge1xuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZz4pIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy52aWV3ID0gcHJvcHMudmlldyBhcyBWaWV3O1xuXHRcdHRoaXMucHJvZ3JhbW1pbmdNb2RlbCA9IHByb3BzLnByb2dyYW1taW5nTW9kZWw7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnZpZXcpO1xuXHR9XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyE6IFJlZjxEaWFsb2c+O1xuXG5cdHB1YmxpYyB2aWV3ITogVmlldztcblxuXHRwdWJsaWMgcHJvZ3JhbW1pbmdNb2RlbCE6IFByb2dyYW1taW5nTW9kZWxUeXBlO1xuXG5cdHByaXZhdGUgY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbCE6IFJlc291cmNlTW9kZWw7XG5cblx0cHJvdGVjdGVkIGtleSE6IHN0cmluZztcblxuXHRwcml2YXRlIGlzU2F2ZSE6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBhY2NlcHRBbGxQYXJhbXMhOiBBY2NlcHRBbGxQYXJhbXM7XG5cblx0LyoqXG5cdCAqIFJlc29sdmVzIHRoZSBwcm9taXNlIHdpdGggdGhlIHNlbGVjdGVkIGRpYWxvZyBsaXN0IG9wdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBwcm9taXNlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBSZWplY3RzIHRoZSBwcm9taXNlIG9mIG9wZW4gZGlhbG9nXG5cdCAqL1xuXHRwdWJsaWMgcHJvbWlzZVJlamVjdCE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbiBEYXRhXG5cdCAqL1xuXG5cdHB1YmxpYyBnZXRPcGVuUmVjb21tZW5kYXRpb25zKCk6IFJlY29tbWVuZGF0aW9uRGF0YVtdIHtcblx0XHRjb25zdCB2aXNpYmxlQ29udGV4dFBhdGhzID0gdGhpcy5nZXRWaXNpYmxlUGFnZUNvbnRleHRQYXRocygpO1xuXHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbnMgPSB0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzKHZpc2libGVDb250ZXh0UGF0aHMpO1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10gPSBbXTtcblxuXHRcdGlmIChvcGVuUmVjb21tZW5kYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMuZm9yRWFjaCgocmVjb21tZW5kYXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgcHJpbWFyeUNvbnRleHQgPSByZWNvbW1lbmRhdGlvbi5jb250ZXh0O1xuXHRcdFx0XHRjb25zdCBmYWxsYmFja0NvbnRleHQgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoID8/IFwiXCI7XG5cblx0XHRcdFx0Y29uc3QgaXNFbXB0eSA9IChjdHg6IENvbnRleHQgfCB1bmRlZmluZWQgfCBudWxsLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGN0eD8uZ2V0UHJvcGVydHkocGF0aCk7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IFwiXCI7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gcHVzaCByZWNvbW1lbmRhdGlvbiBpZiBwcm9wZXJ0eSBpcyBlbXB0eSBpbiBib3RoIGNvbnRleHRzXG5cdFx0XHRcdGlmIChpc0VtcHR5KHByaW1hcnlDb250ZXh0LCBwcm9wZXJ0eVBhdGgpICYmIGlzRW1wdHkoZmFsbGJhY2tDb250ZXh0LCBwcm9wZXJ0eVBhdGgpKSB7XG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25zLnB1c2gocmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGNvbnRleHQgcGF0aHNcblx0ICovXG5cblx0cHVibGljIGdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzKCk6IChzdHJpbmcgfCB1bmRlZmluZWQpW10ge1xuXHRcdGNvbnN0IHZpc2libGVQYWdlQ29udGV4dFBhdGhzID0gW3RoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCldO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLnZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIEJhc2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IGZjbENvbnRyb2xsZXIgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXI7XG5cdFx0Y29uc3QgaXNGY2xFbmFibGVkID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5faXNGY2xFbmFibGVkKCk7XG5cdFx0Y29uc3QgaXNGdWxsU2NyZWVuID0gaXNGY2xFbmFibGVkID8gZmNsQ29udHJvbGxlci5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmlzRnVsbFNjcmVlbiA6IHRydWU7XG5cdFx0aWYgKGlzRmNsRW5hYmxlZCAmJiAhaXNGdWxsU2NyZWVuKSB7XG5cdFx0XHRjb25zdCByaWdodE1vc3RDb250ZXh0ID0gZmNsQ29udHJvbGxlci5nZXRSaWdodG1vc3RDb250ZXh0KCk7XG5cdFx0XHRpZiAoIXZpc2libGVQYWdlQ29udGV4dFBhdGhzLmluY2x1ZGVzKHJpZ2h0TW9zdENvbnRleHQ/LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0dmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMucHVzaChyaWdodE1vc3RDb250ZXh0Py5nZXRQYXRoKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRQYXRocyBQYXRocyBvZiB0aGUgY29udGV4dHNcblx0ICogQHJldHVybnMgUmVjb21tZW5kYXRpb25EYXRhIGZvciB2aXNpYmxlIGNvbnRleHRzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHMoY29udGV4dFBhdGhzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogUmVjb21tZW5kYXRpb25EYXRhW10ge1xuXHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdID0gW107XG5cdFx0aWYgKGNvbnRleHRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBsb2NhbEFubm90YXRpb25Nb2RlbCA9ICh0aGlzLnZpZXcuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCgpO1xuXHRcdFx0Ly8gY2hlY2sgY29udGV4dCBwYXRocyBpbiBsb2NhbCBhbm5vdGF0aW9uIG1vZGVscyB3aGljaCBtYXRjaCB0b1xuXHRcdFx0Ly8gMS4gY3VycmVudCBwYWdlIGFuZFxuXHRcdFx0Ly8gMi4gaW1tZWRpYXRlIGNoaWxkcmVuIG9mIHRoZSBjdXJyZW50IHBhZ2Vcblx0XHRcdC8vIE5lZWQgdG8gY29uc2lkZXIgYWxzbyBpbW1lZGlhdGUgY2hpbGRyZW5cblx0XHRcdC8vIGl0ZXJhdGUgb3ZlciBhbGwga2V5c1xuXHRcdFx0Y29udGV4dFBhdGhzLmZvckVhY2goKGNvbnRleHRQYXRoKSA9PiB7XG5cdFx0XHRcdGlmIChjb250ZXh0UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0T2JqZWN0KGNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRpZiAobG9jYWxBbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0XHQgKiBUaGUgbG9jYWwgYW5ub3RhdGlvbiBvYmplY3Qgd2lsbCBiZSBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSA6XG5cdFx0XHRcdFx0XHQgKiB7XG5cdFx0XHRcdFx0XHQgKiBcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFByb3BlcnR5TmFtZToge1xuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcdFx0cmVjb21tZW5kYXRpb25Db250ZXh0OnsgY29udGV4dCB9XG5cdFx0XHRcdFx0XHQgKiBcdCB9XG5cdFx0XHRcdFx0XHQgKiByZWNvbW1lbmRhdGlvbkNvbnRleHQ6eyBjb250ZXh0IH1cblx0XHRcdFx0XHRcdCAqIH1cblx0XHRcdFx0XHRcdCAqXG5cdFx0XHRcdFx0XHQgKiBzbyBpbiBvcmRlciB0byBnZXQgdGhlIHJlY29tbWVuZGF0aW9ucyBhcyBwZXIgZWFjaCBjb250ZXh0IC0gZm9yIHBhcmVudC9jaGlsZCBlbnRpdGllcyB3ZSBuZWVkIHRvIGl0ZXJhdGUgb3ZlciBlYWNoIGtleXMgcmVjdXJzaXZlbHkgaW4gdGhlIGZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0IGZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ICogZm9ybSB0aGUgY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmUgYW5kIHRoZW4gc2VuZCBpdCBmb3IgZ2V0dGluZyB0aGUgcmVjb21tZW5kYXRpb25zIGFjY29yZGluZ2x5LlxuXHRcdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0XHR0aGlzLmZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIG9wZW5SZWNvbW1lbmRhdGlvbnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvcGVuUmVjb21tZW5kYXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uT2JqZWN0XG5cdCAqIEBwYXJhbSBvcGVuUmVjb21tZW5kYXRpb25zIFJlY29tbWVuZGF0aW9uIERhdGFcblx0ICovXG5cblx0cHJpdmF0ZSBmZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10pOiB2b2lkIHtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSkge1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSA9IGFubm90YXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRmb3IgKGNvbnN0IGN1cnJlbnRLZXkgaW4gYW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBhbm5vdGF0aW9uT2JqZWN0W2N1cnJlbnRLZXldO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKChjdXJyZW50VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgT0RhdGFWNENvbnRleHQ+KVtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSkge1xuXHRcdFx0XHRcdFx0dGhpcy5mZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0W2N1cnJlbnRLZXldIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcGVuUmVjb21tZW5kYXRpb25zKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpIHx8XG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIikgfHxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCIpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtjdXJyZW50S2V5XSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IGtleXMgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RFbnRpdHlLZXlzKFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0KTtcblx0XHRcdChyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykuY29udGV4dElkZW50aWZpZXIgPSBrZXlzW1wic2VtYW50aWNLZXlzXCJdXG5cdFx0XHRcdD8ga2V5c1tcInNlbWFudGljS2V5c1wiXVxuXHRcdFx0XHQ6IGtleXNbXCJ0ZWNobmljYWxLZXlzXCJdO1xuXHRcdFx0dGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3QsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHREYXRhIFRoZSBjb250ZXh0IGRhdGEgb2JqZWN0IGZvciByZWNvbW1lbmRhdGlvbnNcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uQ29udGV4dCBUaGUgcmVjb21tZW5kYXRpb24gY29udGV4dFxuXHQgKiBAcGFyYW0gb3BlblJlY29tbWVuZGF0aW9ucyBSZWNvbW1lbmRhdGlvbkRhdGFcblx0ICogQHBhcmFtIGNvbnRleHRLZXkgQ29udGV4dCBLZXlcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRjb250ZXh0RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0cmVjb21tZW5kYXRpb25Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSxcblx0XHRjb250ZXh0S2V5ID0gXCJcIlxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGN1cnJlbnRLZXkgaW4gY29udGV4dERhdGEpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnRleHREYXRhW2N1cnJlbnRLZXldO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWVJc0NvbnRleHQgPVxuXHRcdFx0XHRcdChjdXJyZW50VmFsdWUgYXMgT0RhdGFWNENvbnRleHQpLmlzQSAmJiAoY3VycmVudFZhbHVlIGFzIE9EYXRhVjRDb250ZXh0KS5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKTtcblx0XHRcdFx0aWYgKGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGN1cnJlbnRLZXkuc3BsaXQoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKVswXTtcblx0XHRcdFx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb246IFJlY29tbWVuZGF0aW9uRGF0YSA9IHtcblx0XHRcdFx0XHRcdGNvbnRleHQ6IHJlY29tbWVuZGF0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogY29udGV4dEtleSA/IGAke2NvbnRleHRLZXl9LyR7cHJvcGVydHlQYXRofWAgOiBwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHR2YWx1ZTogY3VycmVudFZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyOiAocmVjb21tZW5kYXRpb25Db250ZXh0IGFzIFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKS5jb250ZXh0SWRlbnRpZmllcixcblx0XHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyVGV4dDogW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uID0gY29udGV4dERhdGFbYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uYF07XG5cdFx0XHRcdFx0aWYgKGRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb24udGV4dCA9IGRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5wdXNoKG9wZW5SZWNvbW1lbmRhdGlvbik7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpICYmICFjdXJyZW50VmFsdWVJc0NvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucyxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBjb25maXJtIHJlY29tbWVuZGF0aW9ucyBkaWFsb2cuXG5cdCAqIEBwYXJhbSBpc1NhdmUgQm9vbGVhbiBmbGFnIHdoaWNoIHdvdWxkIGJlIHNldCB0byB0cnVlIGlmIHdlIGFyZSBzYXZpbmcgdGhlIGRvY3VtZW50IGFuZCB3b3VsZCBiZSBmYWxzZSBpZiB3ZSBkbyBhcHBseSBjaGFuZ2VzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd291bGQgcmVzb2x2ZSB3aXRoIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gKEFjY2VwdCwgSWdub3JlLCBDb250aW51ZSwgU2tpcHBlZClcblx0ICovXG5cdHB1YmxpYyBhc3luYyBvcGVuKGlzU2F2ZTogYm9vbGVhbik6IFByb21pc2U8UmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vIGNoZWNrIGZvciBidWlsdC1pbiByZWNvbW1lbmRhdGlvbnNcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zID0gdGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zKCk7XG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5hZGRDb250ZXh0SWRlbnRpZmllclRleHQoXG5cdFx0XHRcdHsgcmVjb21tZW5kYXRpb25EYXRhOiBvcGVuUmVjb21tZW5kYXRpb25zIH0sXG5cdFx0XHRcdHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKClcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtcyA9IHtcblx0XHRcdFx0cmVjb21tZW5kYXRpb25EYXRhOiBvcGVuUmVjb21tZW5kYXRpb25zXG5cdFx0XHR9O1xuXHRcdFx0YXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMub25CZWZvcmVBY2NlcHRSZWNvbW1lbmRhdGlvbnModGhpcy5hY2NlcHRBbGxQYXJhbXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZiBidWlsdC1pbiByZWNvbW1lbmRhdGlvbnMgYXJlIG5vdCBmb3VuZCB0aGVuIGNoZWNrIGZvciBsZWdhY3kgcmVjb21tZW5kYXRpb25zLlxuXHRcdFx0Y29uc3QgbGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QgPSAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5jaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QoKTtcblx0XHRcdGlmIChsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCkge1xuXHRcdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtcyA9IGF3YWl0ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmZldGNoQWNjZXB0QWxsUGFyYW1zKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZpbHRlciByZWNvbW1lbmRhdGlvbkRhdGEgdG8gb25seSBpbmNsdWRlIGFjdGl2ZSByZWNvbW1lbmRhdGlvbnNcblx0XHRpZiAodGhpcy5hY2NlcHRBbGxQYXJhbXMucmVjb21tZW5kYXRpb25EYXRhKSB7XG5cdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEgPSB0aGlzLl9maWx0ZXJBY3RpdmVSZWNvbW1lbmRhdGlvbnModGhpcy5hY2NlcHRBbGxQYXJhbXMucmVjb21tZW5kYXRpb25EYXRhKTtcblx0XHR9XG5cblx0XHRjb25zdCBhY2NlcHRNb2RlbCA9IHRoaXMuZ2V0QWNjZXB0QWxsTW9kZWwoKTtcblx0XHR0aGlzLnZpZXcuc2V0TW9kZWwoYWNjZXB0TW9kZWwsIFwiX2FjY2VwdERpYWxvZ01vZGVsXCIpO1xuXHRcdGlmICghYWNjZXB0TW9kZWwuZ2V0RGF0YSgpLml0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLlNraXBwZWQ7XG5cdFx0fVxuXHRcdHRoaXMuaXNTYXZlID0gaXNTYXZlO1xuXHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGRpYWxvZz8uc2V0RXNjYXBlSGFuZGxlcih0aGlzLm9uQ29udGludWVFZGl0aW5nLmJpbmQodGhpcykpO1xuXHRcdHRoaXMudmlldy5hZGREZXBlbmRlbnQoZGlhbG9nIGFzIFVJNUVsZW1lbnQpO1xuXHRcdGRpYWxvZz8ub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucHJvbWlzZVJlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIHRvIGNsb3NlIHRoZSBjb25maXJtUmVjb21tZW5kYXRpb24gZGlhbG9nLlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmN1cnJlbnQ/LmNsb3NlKCk7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2cuY3VycmVudD8uZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbHRlcnMgcmVjb21tZW5kYXRpb24gZGF0YSB0byBvbmx5IGluY2x1ZGUgcmVjb21tZW5kYXRpb25zIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkRhdGEgQXJyYXkgb2YgcmVjb21tZW5kYXRpb24gZGF0YSB0byBmaWx0ZXJcblx0ICogQHJldHVybnMgRmlsdGVyZWQgYXJyYXkgY29udGFpbmluZyBvbmx5IGFjdGl2ZSByZWNvbW1lbmRhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgX2ZpbHRlckFjdGl2ZVJlY29tbWVuZGF0aW9ucyhyZWNvbW1lbmRhdGlvbkRhdGE6IFJlY29tbWVuZGF0aW9uRGF0YVtdKTogUmVjb21tZW5kYXRpb25EYXRhW10ge1xuXHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gKHRoaXMudmlldy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKCk7XG5cdFx0Y29uc3QgYWN0aXZlUmVjb21tZW5kYXRpb25zID1cblx0XHRcdChsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRQcm9wZXJ0eShcIi9hY3RpdmVSZWNvbW1lbmRhdGlvbnNcIikgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10gfCB1bmRlZmluZWQ+IHwgbnVsbCkgPz8ge307XG5cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb25EYXRhLmZpbHRlcigocmVjb21tZW5kYXRpb24pID0+IHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gcmVjb21tZW5kYXRpb24uY29udGV4dD8uZ2V0UGF0aCgpO1xuXHRcdFx0aWYgKCFjb250ZXh0UGF0aCB8fCAhcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYWN0aXZlUGF0aHNGb3JDb250ZXh0ID0gYWN0aXZlUmVjb21tZW5kYXRpb25zW2NvbnRleHRQYXRoXTtcblx0XHRcdGlmICghYWN0aXZlUGF0aHNGb3JDb250ZXh0IHx8IGFjdGl2ZVBhdGhzRm9yQ29udGV4dC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgcmVjb21tZW5kYXRpb24ncyBwcm9wZXJ0eVBhdGggaXMgaW4gdGhlIGFjdGl2ZSByZWNvbW1lbmRhdGlvbnMgbGlzdFxuXHRcdFx0cmV0dXJuIGFjdGl2ZVBhdGhzRm9yQ29udGV4dC5pbmNsdWRlcyhyZWNvbW1lbmRhdGlvbi5wcm9wZXJ0eVBhdGgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIEFjY2VwdCBhbmQgU2F2ZSBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG9uQWNjZXB0QW5kU2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaXNBY2NlcHRlZCA9IGF3YWl0ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmFjY2VwdFJlY29tbWVuZGF0aW9ucyhcblx0XHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXNcblx0XHRcdCk7XG5cdFx0XHRpZiAoIWlzQWNjZXB0ZWQpIHtcblx0XHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0KFwiQWNjZXB0IEZhaWxlZFwiKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0TG9nLmVycm9yKFwiQWNjZXB0IFJlY29tbWVuZGF0aW9ucyBGYWlsZWRcIik7XG5cdFx0XHR0aGlzLnByb21pc2VSZWplY3QoXCJBY2NlcHQgRmFpbGVkXCIpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIFJlamVjdCBhbmQgU2F2ZSBidXR0b24uXG5cdCAqL1xuXHQvKipcblx0ICogSGFuZGxlciBmb3IgUmVqZWN0IGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgb25JZ25vcmVBbmRTYXZlKCk6IHZvaWQge1xuXHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gKHRoaXMudmlldy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKCk7XG5cdFx0Y29uc3QgcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMgPSBsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRQcm9wZXJ0eShcIi9yZWplY3RlZFJlY29tbWVuZGF0aW9uc1wiKSA/PyB7fTtcblxuXHRcdGlmICghdGhpcy5hY2NlcHRBbGxQYXJhbXM/LnJlY29tbWVuZGF0aW9uRGF0YSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb2Nlc3NlZENvbnRleHRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5cdFx0Zm9yIChjb25zdCByZWNvbW1lbmRhdGlvbiBvZiB0aGlzLmFjY2VwdEFsbFBhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gcmVjb21tZW5kYXRpb24uY29udGV4dD8uZ2V0UGF0aCgpID8/IFwiXCI7XG5cblx0XHRcdGlmIChjb250ZXh0UGF0aCAhPT0gXCJcIiAmJiAhcHJvY2Vzc2VkQ29udGV4dFBhdGhzLmhhcyhjb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cblx0XHRcdFx0aWYgKGFubm90YXRpb25PYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIGFubm90YXRpb25PYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHR0aGlzLl9wcm9jZXNzUmVjb21tZW5kYXRpb25Db250ZXh0KFxuXHRcdFx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRcdFx0cmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMsXG5cdFx0XHRcdFx0XHRsb2NhbEFubm90YXRpb25Nb2RlbCxcblx0XHRcdFx0XHRcdHByb2Nlc3NlZENvbnRleHRQYXRoc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5pZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzKCk7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLlJlamVjdCk7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb2Nlc3NlcyBhIHNpbmdsZSByZWNvbW1lbmRhdGlvbiBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggVGhlIGNvbnRleHQgcGF0aCBiZWluZyBwcm9jZXNzZWRcblx0ICogQHBhcmFtIGFubm90YXRpb25PYmplY3QgVGhlIGFubm90YXRpb24gb2JqZWN0IGZvciB0aGUgY29udGV4dFxuXHQgKiBAcGFyYW0gcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnMgVGhlIHJlamVjdGVkIHJlY29tbWVuZGF0aW9ucyBvYmplY3Rcblx0ICogQHBhcmFtIGxvY2FsQW5ub3RhdGlvbk1vZGVsIFRoZSBsb2NhbCBhbm5vdGF0aW9uIG1vZGVsXG5cdCAqIEBwYXJhbSBwcm9jZXNzZWRDb250ZXh0UGF0aHMgU2V0IHRvIHRyYWNrIHByb2Nlc3NlZCBjb250ZXh0c1xuXHQgKi9cblx0cHJpdmF0ZSBfcHJvY2Vzc1JlY29tbWVuZGF0aW9uQ29udGV4dChcblx0XHRjb250ZXh0UGF0aDogc3RyaW5nLFxuXHRcdGFubm90YXRpb25PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHJlamVjdGVkUmVjb21tZW5kYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRsb2NhbEFubm90YXRpb25Nb2RlbDogSlNPTk1vZGVsLFxuXHRcdHByb2Nlc3NlZENvbnRleHRQYXRoczogU2V0PHN0cmluZz5cblx0KTogdm9pZCB7XG5cdFx0Ly8gQnVpbGQgYSBzaGFsbG93IGNvcHksIHRoZW4gZmlsdGVyIGZvciByZWNvbW1lbmRhdGlvbiBrZXlzIG9ubHlcblx0XHRjb25zdCByZWplY3RlZENvbnRleHREYXRhID0gdGhpcy5fZmlsdGVyUmVjb21tZW5kYXRpb25LZXlzKGFubm90YXRpb25PYmplY3QpO1xuXG5cdFx0Ly8gQ2xlYXIgcmVjb21tZW5kYXRpb24gcHJvcGVydGllcyBmcm9tIGxvY2FsIGFubm90YXRpb24gbW9kZWxcblx0XHR0aGlzLl9jbGVhclJlY29tbWVuZGF0aW9uUHJvcGVydGllcyhhbm5vdGF0aW9uT2JqZWN0LCBjb250ZXh0UGF0aCwgbG9jYWxBbm5vdGF0aW9uTW9kZWwpO1xuXG5cdFx0Ly8gU3RvcmUgdGhlIGZpbHRlcmVkIHJlamVjdGVkIGNvbnRleHQgaW4gcmVqZWN0ZWRSZWNvbW1lbmRhdGlvbnNcblx0XHRyZWplY3RlZFJlY29tbWVuZGF0aW9uc1tjb250ZXh0UGF0aF0gPSByZWplY3RlZENvbnRleHREYXRhO1xuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KFwiL3JlamVjdGVkUmVjb21tZW5kYXRpb25zXCIsIHJlamVjdGVkUmVjb21tZW5kYXRpb25zKTtcblxuXHRcdC8vIE1hcmsgdGhpcyBjb250ZXh0UGF0aCBhcyBwcm9jZXNzZWRcblx0XHRwcm9jZXNzZWRDb250ZXh0UGF0aHMuYWRkKGNvbnRleHRQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaWx0ZXJzIGFubm90YXRpb24gb2JqZWN0IHRvIGtlZXAgb25seSByZWNvbW1lbmRhdGlvbiBrZXlzLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdCBUaGUgc291cmNlIGFubm90YXRpb24gb2JqZWN0XG5cdCAqIEByZXR1cm5zIE9iamVjdCBjb250YWluaW5nIG9ubHkgcmVjb21tZW5kYXRpb24tcmVsYXRlZCBrZXlzXG5cdCAqL1xuXHRwcml2YXRlIF9maWx0ZXJSZWNvbW1lbmRhdGlvbktleXMoYW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG5cdFx0Y29uc3QgcmVqZWN0ZWRDb250ZXh0RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuXHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFubm90YXRpb25PYmplY3QpKSB7XG5cdFx0XHRpZiAoa2V5LmluY2x1ZGVzKFwidWk1LmZlLnJlY29tbWVuZGF0aW9uc1wiKSkge1xuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGFubm90YXRpb25PYmplY3Rba2V5XTtcblx0XHRcdFx0cmVqZWN0ZWRDb250ZXh0RGF0YVtrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlamVjdGVkQ29udGV4dERhdGE7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIHJlY29tbWVuZGF0aW9uIHByb3BlcnRpZXMgZnJvbSBsb2NhbCBhbm5vdGF0aW9uIG1vZGVsLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdCBUaGUgYW5ub3RhdGlvbiBvYmplY3QgY29udGFpbmluZyBrZXlzIHRvIGNsZWFyXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIGZvciBwcm9wZXJ0eSBjbGVhcmluZ1xuXHQgKiBAcGFyYW0gbG9jYWxBbm5vdGF0aW9uTW9kZWwgVGhlIGxvY2FsIGFubm90YXRpb24gbW9kZWxcblx0ICovXG5cdHByaXZhdGUgX2NsZWFyUmVjb21tZW5kYXRpb25Qcm9wZXJ0aWVzKFxuXHRcdGFubm90YXRpb25PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdGNvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWw6IEpTT05Nb2RlbFxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhhbm5vdGF0aW9uT2JqZWN0KSkge1xuXHRcdFx0aWYgKGtleS5pbmNsdWRlcyhcInVpNS5mZS5yZWNvbW1lbmRhdGlvbnNcIikpIHtcblx0XHRcdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoYCR7Y29udGV4dFBhdGh9LyR7a2V5fWAsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIENvbnRpbnVlIEVkaXRpbmcgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbkNvbnRpbnVlRWRpdGluZygpOiB2b2lkIHtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsYWJlbCBvciBuYW1lIG9mIHRoZSBGaWVsZCBiYXNlZCBvbiBpdHMgcHJvcGVydHkgcGF0aC5cblx0ICogQHBhcmFtIHRhcmdldFBhdGhcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgbGFiZWwgb2YgdGhlIEZpZWxkLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWVsZE5hbWUodGFyZ2V0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBpbnZvbHZlZERhdGFNb2RlbE9iamVjdCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoPFByb3BlcnR5Pihcblx0XHRcdHRhcmdldFBhdGgsXG5cdFx0XHR0aGlzLnZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsXG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0aW52b2x2ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgfHxcblx0XHRcdHRhcmdldFBhdGguc3BsaXQoXCIvXCIpW3RhcmdldFBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCAtIDFdXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRleHQgZm9yIHJlY29tbWVuZGF0aW9uIGJhc2VkIG9uIGRpc3BsYXkgbW9kZS5cblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uXG5cdCAqIEBwYXJhbSBkaXNwbGF5TW9kZVxuXHQgKiBAcmV0dXJucyBUZXh0IGZvciBhIHJlY29tbWVuZGF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGdldFRleHQocmVjb21tZW5kYXRpb246IFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZSwgZGlzcGxheU1vZGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKHJlY29tbWVuZGF0aW9uLnRleHQgfHwgcmVjb21tZW5kYXRpb24udmFsdWUpIHtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnRleHQhO1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHJlY29tbWVuZGF0aW9uLnRleHQsIHJlY29tbWVuZGF0aW9uLnZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhyZWNvbW1lbmRhdGlvbi52YWx1ZSwgcmVjb21tZW5kYXRpb24udGV4dCk7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi52YWx1ZSE7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi52YWx1ZSB8fCBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgQnV0dG9uIHdpdGggZ2l2ZW4gdGV4dCwgdHlwZSBhbmQgcHJlc3NIYW5kbGVyLlxuXHQgKiBAcGFyYW0gdGV4dCBUZXh0IGZvciB0aGUgYnV0dG9uXG5cdCAqIEBwYXJhbSB0eXBlIFR5cGUgb2YgdGhlIGJ1dHRvblxuXHQgKiBAcGFyYW0gcHJlc3NIYW5kbGVyIFByZXNzIEhhbmRsZXIgZm9yIHRoZSBidXR0b25cblx0ICogQHJldHVybnMgQnV0dG9uIHdpdGggdGhlIGdpdmVuIHNldHRpbmdzXG5cdCAqL1xuXHRwcml2YXRlIGdldEJ1dHRvbih0ZXh0OiBzdHJpbmcsIHR5cGU6IHN0cmluZywgcHJlc3NIYW5kbGVyOiBFdmVudEhhbmRsZXIpOiBCdXR0b24ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uIHRleHQ9e3RleHR9IHR5cGU9e3R5cGV9IHdpZHRoPXtcImF1dG9cIn0gcHJlc3M9e3ByZXNzSGFuZGxlcn0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0PEZsZXhJdGVtRGF0YSBtaW5XaWR0aD17XCIxMDAlXCJ9PjwvRmxleEl0ZW1EYXRhPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEZvb3RlciB3aXRoIEJ1dHRvbnMuXG5cdCAqIEByZXR1cm5zIEZvb3RlclxuXHQgKi9cblxuXHRwcml2YXRlIGdldEZvb3RlcigpOiBUb29sYmFyIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRvb2xiYXI+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0QnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2dldERpYWxvZ0J1dHRvblRleHQodGhpcy5pc1NhdmUsIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0KSxcblx0XHRcdFx0XHRcdFx0XHRcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQWNjZXB0QW5kU2F2ZS5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9nZXREaWFsb2dCdXR0b25UZXh0KHRoaXMuaXNTYXZlLCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLlJlamVjdCksXG5cdFx0XHRcdFx0XHRcdFx0XCJHaG9zdFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25JZ25vcmVBbmRTYXZlLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0QnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQ09OVElOVUVfRURJVElOR1wiKSxcblx0XHRcdFx0XHRcdFx0XHRcIkdob3N0XCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkNvbnRpbnVlRWRpdGluZy5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1Rvb2xiYXI+XG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgX2dldERpYWxvZ0J1dHRvblRleHQoc2F2ZTogYm9vbGVhbiwgcmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbjogUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgaXNBY2NlcHRCdXR0b24gPSByZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uID09PSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdDtcblx0XHRpZiAoc2F2ZSkge1xuXHRcdFx0Y29uc3QgaXNDcmVhdGVNb2RlID0gdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KFwicGFnZUludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcImNyZWF0ZU1vZGVcIik7XG5cblx0XHRcdGlmIChpc0NyZWF0ZU1vZGUpIHtcblx0XHRcdFx0cmV0dXJuIGlzQWNjZXB0QnV0dG9uXG5cdFx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfQ1JFQVRFXCIpXG5cdFx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1JFSkVDVF9BTkRfQ1JFQVRFXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfU0FWRVwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfUkVKRUNUX0FORF9TQVZFXCIpO1xuXHRcdH1cblxuXHRcdC8vIE5vdCBzYXZpbmcg4oCTIHBsYWluIEFjY2VwdC9JZ25vcmVcblx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdD8gdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19BQ0NFUFRcIilcblx0XHRcdDogdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19SRUpFQ1RcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY3JlYXRlZCBhIEpTT04gTW9kZWwgZm9yIHRoZSBhY2NlcHQgYWxsIGRpYWxvZyBkYXRhLlxuXHQgKiBAcmV0dXJucyBUaGUgSlNPTiBNb2RlbCBmb3IgYWNjZXB0IGFsbCBkaWFsb2cuXG5cdCAqL1xuXHRnZXRBY2NlcHRBbGxNb2RlbCgpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGFjY2VwdE1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGNvbnN0IGl0ZW1zID0gW107XG5cdFx0Zm9yIChjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgb2YgdGhpcy5hY2NlcHRBbGxQYXJhbXM/LnJlY29tbWVuZGF0aW9uRGF0YSB8fCBbXSkge1xuXHRcdFx0Y29uc3QgZW50aXR5TmFtZUxhYmVsID0gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5nZXRFbnRpdHlOYW1lKHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KSB8fCBcIlwiO1xuXG5cdFx0XHRjb25zdCBpZGVudGlmaWVyVGV4dHMgPVxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0ICYmIHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQubGVuZ3RoID4gMFxuXHRcdFx0XHRcdD8gYCR7ZW50aXR5TmFtZUxhYmVsfSAoJHtyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0fSlgXG5cdFx0XHRcdFx0OiBlbnRpdHlOYW1lTGFiZWw7XG5cblx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbkRhdGEudmFsdWUgfHwgcmVjb21tZW5kYXRpb25EYXRhLnRleHQpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0Py5nZXRQYXRoKCkgKyBcIi9cIiArIHJlY29tbWVuZGF0aW9uRGF0YS5wcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5nZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgoXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdFx0XHR0aGlzLnZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGxpc3REYXRhID0ge1xuXHRcdFx0XHRcdGZpZWxkTmFtZTogdGhpcy5nZXRGaWVsZE5hbWUodGFyZ2V0UGF0aCkudmFsdWVPZigpLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWU6IHRoaXMuZ2V0VGV4dChyZWNvbW1lbmRhdGlvbkRhdGEsIGRpc3BsYXlNb2RlKSxcblx0XHRcdFx0XHRpZGVudGlmaWVyVGV4dHM6IGlkZW50aWZpZXJUZXh0c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpdGVtcy5wdXNoKGxpc3REYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YWNjZXB0TW9kZWwuc2V0RGF0YSh7IGl0ZW1zOiBpdGVtcyB9KTtcblx0XHRyZXR1cm4gYWNjZXB0TW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZ3JvdXBzIHRoZSBjb250ZXh0cyBhY2NvcmRpbmcgdG8gdGhlIGlkZW50aWZpZXIgdGV4dHMuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBpdGVtXG5cdCAqIEByZXR1cm5zIFRoZSB0ZXh0IG9mIHRoZSBncm91cFxuXHQgKi9cblx0Z2V0R3JvdXAoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBjb250ZXh0LmdldFByb3BlcnR5KFwiaWRlbnRpZmllclRleHRzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVzc2FnZSB0byBiZSBzaG93biBpbiB0aGUgYWNjZXB0IGRpYWxvZy5cblx0ICogQHJldHVybnMgQSBtZXNzYWdlIHdpdGggdGhlIGRlc2lyZWQgdGV4dC5cblx0ICovXG5cdGdldE1lc3NhZ2UoKTogVGV4dCB7XG5cdFx0Y29uc3QgYWNjZXB0QWxsRGF0YSA9ICh0aGlzLnZpZXcuZ2V0TW9kZWwoXCJfYWNjZXB0RGlhbG9nTW9kZWxcIikgYXMgSlNPTk1vZGVsKT8uZ2V0RGF0YSgpPy5pdGVtcztcblx0XHRjb25zdCBtZXNzYWdlVGV4dCA9XG5cdFx0XHRhY2NlcHRBbGxEYXRhLmxlbmd0aCA+IDFcblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RFWFRcIiwgW2FjY2VwdEFsbERhdGEubGVuZ3RoXSlcblx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RFWFRfU0lOR1VMQVJcIik7XG5cdFx0cmV0dXJuIDxUZXh0IHRleHQ9e21lc3NhZ2VUZXh0fSAvPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBjb250ZW50IGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIGxpc3QgYXMgY29udGVudCBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0Z2V0RGlhbG9nQ29udGVudCgpOiBMaXN0IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PExpc3QgaXRlbXM9e3sgbW9kZWw6IFwiX2FjY2VwdERpYWxvZ01vZGVsXCIsIHBhdGg6IFwiL2l0ZW1zXCIsIHNvcnRlcjogbmV3IFNvcnRlcihcImlkZW50aWZpZXJUZXh0c1wiLCBmYWxzZSwgdGhpcy5nZXRHcm91cCkgfX0+XG5cdFx0XHRcdDxDdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHQ8SEJveCBjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5CZWdpbiBzYXBVaVRpbnlNYXJnaW5cIj5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9XCJ7X2FjY2VwdERpYWxvZ01vZGVsPmZpZWxkTmFtZX06IHtfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGRWYWx1ZX1cIiAvPlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdDwvTGlzdD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBidWlsZGluZyBibG9jayByZW5kZXIgZnVuY3Rpb24uXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmdcblx0ICovXG5cdGdldENvbnRlbnQoKTogRGlhbG9nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19USVRMRVwiKX1cblx0XHRcdFx0c3RhdGU9e1ZhbHVlU3RhdGUuSW5mb3JtYXRpb259XG5cdFx0XHRcdHR5cGU9e1wiTWVzc2FnZVwifVxuXHRcdFx0XHRyZWY9e3RoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nfVxuXHRcdFx0XHRyZXNpemFibGU9e1widHJ1ZVwifVxuXHRcdFx0XHRjb250ZW50V2lkdGg9e1wiMzVyZW1cIn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRNZXNzYWdlKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldERpYWxvZ0NvbnRlbnQoKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Zm9vdGVyOiA8Pnt0aGlzLmdldEZvb3RlcigpfTwvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EaWFsb2c+XG5cdFx0KSBhcyBEaWFsb2c7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFDQSxNQUFNQSxnQkFBZ0IsR0FBR0MsU0FBUyxDQUFDRCxnQkFBZ0I7RUFBQyxJQUd4Q0UsNEJBQTRCLDBCQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBQSxPQUE1QkEsNEJBQTRCO0VBQUE7RUFBQUMsUUFBQSxDQUFBRCw0QkFBQSxHQUFBQSw0QkFBQTtFQUFBLElBUTNCRSwyQkFBMkIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLGtFQUFrRSxDQUFDLEVB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
|
|
@@ -282,6 +282,12 @@ export class ConfirmRecommendationDialog extends ManagedObject {
|
|
|
282
282
|
return undefined;
|
|
283
283
|
}
|
|
284
284
|
}
|
|
285
|
+
|
|
286
|
+
// Filter recommendationData to only include active recommendations
|
|
287
|
+
if (this.acceptAllParams.recommendationData) {
|
|
288
|
+
this.acceptAllParams.recommendationData = this._filterActiveRecommendations(this.acceptAllParams.recommendationData);
|
|
289
|
+
}
|
|
290
|
+
|
|
285
291
|
const acceptModel = this.getAcceptAllModel();
|
|
286
292
|
this.view.setModel(acceptModel, "_acceptDialogModel");
|
|
287
293
|
if (!acceptModel.getData().items?.length) {
|
|
@@ -307,6 +313,32 @@ export class ConfirmRecommendationDialog extends ManagedObject {
|
|
|
307
313
|
this.confirmRecommendationDialog.current?.destroy();
|
|
308
314
|
}
|
|
309
315
|
|
|
316
|
+
/**
|
|
317
|
+
* Filters recommendation data to only include recommendations that are currently active.
|
|
318
|
+
* @param recommendationData Array of recommendation data to filter
|
|
319
|
+
* @returns Filtered array containing only active recommendations
|
|
320
|
+
*/
|
|
321
|
+
private _filterActiveRecommendations(recommendationData: RecommendationData[]): RecommendationData[] {
|
|
322
|
+
const localAnnotationModel = (this.view.getModel() as ODataModel).getLocalAnnotationModel();
|
|
323
|
+
const activeRecommendations =
|
|
324
|
+
(localAnnotationModel.getProperty("/activeRecommendations") as Record<string, string[] | undefined> | null) ?? {};
|
|
325
|
+
|
|
326
|
+
return recommendationData.filter((recommendation) => {
|
|
327
|
+
const contextPath = recommendation.context?.getPath();
|
|
328
|
+
if (!contextPath || !recommendation.propertyPath) {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
const activePathsForContext = activeRecommendations[contextPath];
|
|
333
|
+
if (!activePathsForContext || activePathsForContext.length === 0) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Check if the recommendation's propertyPath is in the active recommendations list
|
|
338
|
+
return activePathsForContext.includes(recommendation.propertyPath);
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
|
|
310
342
|
/**
|
|
311
343
|
* Handler for Accept and Save button.
|
|
312
344
|
*/
|
|
@@ -405,7 +437,8 @@ export class ConfirmRecommendationDialog extends ManagedObject {
|
|
|
405
437
|
|
|
406
438
|
for (const key of Object.keys(annotationObject)) {
|
|
407
439
|
if (key.includes("ui5.fe.recommendations")) {
|
|
408
|
-
|
|
440
|
+
const value = annotationObject[key];
|
|
441
|
+
rejectedContextData[key] = Array.isArray(value) ? [...value] : value;
|
|
409
442
|
}
|
|
410
443
|
}
|
|
411
444
|
|