@sapui5/sap.fe.core 1.97.0 → 1.99.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 +5 -4
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +377 -405
- package/src/sap/fe/core/AnnotationHelper.ts +385 -0
- package/src/sap/fe/core/AppComponent.js +6 -3
- package/src/sap/fe/core/AppStateHandler.js +229 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +3 -2
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2073 -2379
- package/src/sap/fe/core/CommonUtils.ts +2078 -0
- package/src/sap/fe/core/ExtensionAPI.js +16 -7
- package/src/sap/fe/core/PageController.js +84 -119
- package/src/sap/fe/core/PageController.ts +101 -0
- package/src/sap/fe/core/RouterProxy.js +986 -807
- package/src/sap/fe/core/RouterProxy.ts +838 -0
- package/src/sap/fe/core/Synchronization.js +51 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -155
- package/src/sap/fe/core/TemplateComponent.ts +166 -0
- package/src/sap/fe/core/TemplateModel.js +97 -54
- package/src/sap/fe/core/TemplateModel.ts +64 -0
- package/src/sap/fe/core/TransactionHelper.js +1576 -1579
- package/src/sap/fe/core/TransactionHelper.ts +1706 -0
- package/src/sap/fe/core/actions/draft.js +560 -581
- package/src/sap/fe/core/actions/draft.ts +594 -0
- package/src/sap/fe/core/actions/messageHandling.js +545 -511
- package/src/sap/fe/core/actions/messageHandling.ts +532 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1074 -1211
- package/src/sap/fe/core/actions/operations.ts +1162 -0
- package/src/sap/fe/core/actions/sticky.js +102 -105
- package/src/sap/fe/core/actions/sticky.ts +102 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +229 -260
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +288 -13
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -23
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +82 -46
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +113 -25
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +135 -44
- package/src/sap/fe/core/controllerextensions/MassEdit.js +172 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +22 -9
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
- package/src/sap/fe/core/controllerextensions/Paginator.js +37 -9
- package/src/sap/fe/core/controllerextensions/Placeholder.js +8 -4
- package/src/sap/fe/core/controllerextensions/Routing.js +25 -5
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +22 -8
- package/src/sap/fe/core/controllerextensions/SideEffects.js +9 -9
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -21
- package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +9 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +18 -23
- package/src/sap/fe/core/controls/FilterBar.js +3 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
- package/src/sap/fe/core/converters/ConverterContext.js +14 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +14 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +56 -32
- package/src/sap/fe/core/converters/ManifestWrapper.ts +24 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +67 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +70 -14
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +3 -3
- package/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
- package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +20 -10
- package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +72 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +390 -398
- package/src/sap/fe/core/converters/controls/Common/Table.ts +497 -484
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +527 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +655 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +489 -37
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +506 -58
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -3
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
- package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
- package/src/sap/fe/core/fpm/Component.js +3 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +391 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +484 -437
- package/src/sap/fe/core/helpers/BindingExpression.ts +480 -463
- package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
- package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
- package/src/sap/fe/core/helpers/MassEditHelper.js +687 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.support.js +12 -5
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
- package/src/sap/fe/core/messagebundle.properties +61 -13
- package/src/sap/fe/core/messagebundle_ar.properties +33 -2
- package/src/sap/fe/core/messagebundle_bg.properties +33 -2
- package/src/sap/fe/core/messagebundle_ca.properties +33 -2
- package/src/sap/fe/core/messagebundle_cs.properties +34 -3
- package/src/sap/fe/core/messagebundle_cy.properties +33 -2
- package/src/sap/fe/core/messagebundle_da.properties +33 -2
- package/src/sap/fe/core/messagebundle_de.properties +33 -2
- package/src/sap/fe/core/messagebundle_el.properties +33 -2
- package/src/sap/fe/core/messagebundle_en.properties +32 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +32 -1
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +36 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +33 -2
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +33 -2
- package/src/sap/fe/core/messagebundle_es.properties +33 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +33 -2
- package/src/sap/fe/core/messagebundle_et.properties +33 -2
- package/src/sap/fe/core/messagebundle_fi.properties +34 -3
- package/src/sap/fe/core/messagebundle_fr.properties +38 -7
- package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -2
- package/src/sap/fe/core/messagebundle_hi.properties +33 -2
- package/src/sap/fe/core/messagebundle_hr.properties +33 -2
- package/src/sap/fe/core/messagebundle_hu.properties +34 -3
- package/src/sap/fe/core/messagebundle_id.properties +36 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -2
- package/src/sap/fe/core/messagebundle_iw.properties +33 -2
- package/src/sap/fe/core/messagebundle_ja.properties +33 -2
- package/src/sap/fe/core/messagebundle_kk.properties +33 -2
- package/src/sap/fe/core/messagebundle_ko.properties +33 -2
- package/src/sap/fe/core/messagebundle_lt.properties +33 -2
- package/src/sap/fe/core/messagebundle_lv.properties +33 -2
- package/src/sap/fe/core/messagebundle_ms.properties +33 -2
- package/src/sap/fe/core/messagebundle_nl.properties +33 -2
- package/src/sap/fe/core/messagebundle_no.properties +33 -2
- package/src/sap/fe/core/messagebundle_pl.properties +33 -2
- package/src/sap/fe/core/messagebundle_pt.properties +34 -3
- package/src/sap/fe/core/messagebundle_pt_PT.properties +33 -2
- package/src/sap/fe/core/messagebundle_ro.properties +33 -2
- package/src/sap/fe/core/messagebundle_ru.properties +33 -2
- package/src/sap/fe/core/messagebundle_sh.properties +33 -2
- package/src/sap/fe/core/messagebundle_sk.properties +33 -2
- package/src/sap/fe/core/messagebundle_sl.properties +33 -2
- package/src/sap/fe/core/messagebundle_sv.properties +34 -3
- package/src/sap/fe/core/messagebundle_th.properties +33 -2
- package/src/sap/fe/core/messagebundle_tr.properties +33 -2
- package/src/sap/fe/core/messagebundle_uk.properties +33 -2
- package/src/sap/fe/core/messagebundle_vi.properties +33 -2
- package/src/sap/fe/core/messagebundle_zh_CN.properties +33 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +33 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -1152
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -11
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +42 -85
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +57 -100
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -478
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +10 -48
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +14 -46
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +139 -70
- package/src/sap/fe/core/templating/FilterHelper.ts +140 -70
- package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +45 -110
- package/src/sap/fe/core/templating/UIFormatters.ts +39 -75
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
- package/src/sap/fe/core/controls/filterbar.d.js +0 -8
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "../helpers/ClassSupport", "sap/fe/
|
|
5
|
+
sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/fe/core/controllerextensions/ControllerExtensionMetadata", "../helpers/ClassSupport", "sap/fe/macros/field/FieldRuntime", "sap/base/Log", "../CommonUtils"], function (ControllerExtension, ControllerExtensionMetadata, ClassSupport, FieldRuntime, Log, CommonUtils) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _class, _class2;
|
|
@@ -25,7 +25,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/fe/core/controllerext
|
|
|
25
25
|
|
|
26
26
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
27
27
|
|
|
28
|
-
function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
28
|
+
function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
29
29
|
|
|
30
30
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
31
31
|
|
|
@@ -392,7 +392,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/fe/core/controllerext
|
|
|
392
392
|
}, {
|
|
393
393
|
key: "_generateStatusIndex",
|
|
394
394
|
value: function _generateStatusIndex(mEntityType, sPropertyPath, oContext) {
|
|
395
|
-
var sContextPath = oContext.getPath();
|
|
395
|
+
var sContextPath = oContext === null || oContext === void 0 ? void 0 : oContext.getPath();
|
|
396
396
|
var mProperty = mEntityType.resolvePath(sPropertyPath);
|
|
397
397
|
|
|
398
398
|
if (mProperty) {
|
|
@@ -691,15 +691,15 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/fe/core/controllerext
|
|
|
691
691
|
}, {
|
|
692
692
|
key: "_getBindingForField",
|
|
693
693
|
value: function _getBindingForField(oField) {
|
|
694
|
-
var
|
|
694
|
+
var sBindingName = "value";
|
|
695
695
|
|
|
696
696
|
if (oField.isA("sap.m.CheckBox")) {
|
|
697
|
-
|
|
698
|
-
} else {
|
|
699
|
-
|
|
697
|
+
sBindingName = "selected";
|
|
698
|
+
} else if (oField.isA("sap.ui.unified.FileUploader")) {
|
|
699
|
+
sBindingName = "uploadUrl";
|
|
700
700
|
}
|
|
701
701
|
|
|
702
|
-
return
|
|
702
|
+
return oField.getBinding(sBindingName);
|
|
703
703
|
}
|
|
704
704
|
}]);
|
|
705
705
|
|
|
@@ -707,4 +707,4 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/fe/core/controllerext
|
|
|
707
707
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "clearPropertiesStatus", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "clearPropertiesStatus"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredFailedRequests", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredFailedRequests"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldChange", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldGroupChange", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldGroupChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "addControlSideEffects", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "addControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeFailedSideEffects", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "removeFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffects", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeControlSideEffects", [Public, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "removeControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_addFailedSideEffects", [Private, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "_addFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_getContextForSideEffects", [Private, Final], Object.getOwnPropertyDescriptor(_class2.prototype, "_getContextForSideEffects"), _class2.prototype)), _class2)) || _class);
|
|
708
708
|
return SideEffectsControllerExtension;
|
|
709
709
|
}, false);
|
|
710
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNpZGVFZmZlY3RzLnRzIl0sIm5hbWVzIjpbIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsIlVJNUNsYXNzIiwiQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIiwiT3ZlcnJpZGUiLCJfb1ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9vQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJfb1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIl9tRmllbGRHcm91cFF1ZXVlIiwiX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSIsIlNldCIsIl9tRmFpbGVkU2lkZUVmZmVjdHMiLCJjbGVhciIsIm9FdmVudCIsIm9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlIiwibUV2ZW50RmllbGRQcm9wZXJ0aWVzIiwiX2dldEZpZWxkUHJvcGVydGllcyIsImFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMiLCJfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHMiLCJiSXNJbW1lZGlhdGVUcmlnZ2VyZWQiLCJfZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlIiwidGhlbiIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJtU2lkZUVmZmVjdHNQcm9wZXJ0eSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzIiwiY29udGV4dCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZGVidWciLCJmaWx0ZXIiLCJtSW1tZWRpYXRlU2lkZUVmZmVjdHMiLCJwcmV2aW91c2x5RmFpbGVkIiwiZm9yRWFjaCIsIl9hZGRGYWlsZWRTaWRlRWZmZWN0cyIsInRoYXQiLCJhRGVmZXJyZWRTaWRlRWZmZWN0cyIsImFGaWVsZEdyb3VwSWRzIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0RmllbGRHcm91cFJlcXVlc3RQcm9taXNlIiwib0RlZmVycmVkU2lkZUVmZmVjdCIsImJJc1JlcXVlc3RzVHJpZ2dlcmVkIiwib1NpZGVFZmZlY3RQcm9wZXJ0eSIsInNpZGVFZmZlY3RQcm9wZXJ0eSIsIm9Db250ZXh0Iiwic0NvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwibUVudGl0eVR5cGUiLCJfZ2V0RW50aXR5VHlwZUZyb21GUU4iLCJwcm9taXNlcyIsIlNvdXJjZVByb3BlcnRpZXMiLCJldmVyeSIsInNvdXJjZVByb3BlcnR5IiwidHlwZSIsInNJZCIsIl9nZW5lcmF0ZVN0YXR1c0luZGV4IiwidmFsdWUiLCJoYXMiLCJmaW5hbGx5IiwibmFtZSIsInNGaWVsZEdyb3VwSWQiLCJzU2lkZUVmZmVjdE5hbWUiLCJyZXBsYWNlIiwibUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzIiwiT2JqZWN0Iiwia2V5cyIsInByb2Nlc3NTdGFydGVkIiwicHVzaCIsIm9TaWRlRWZmZWN0cyIsImFkZENvbnRyb2xTaWRlRWZmZWN0cyIsImZSZXNvbHZlciIsImZSZWplY3RvciIsIm9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFUYXJnZXRzIiwiVGFyZ2V0RW50aXRpZXMiLCJjb25jYXQiLCJUYXJnZXRQcm9wZXJ0aWVzIiwic1RyaWdnZXJBY3Rpb24iLCJUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsIm9Db250cm9sIiwic0NvbnRyb2xJZCIsImlzQSIsImdldElkIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiYklzTm90QWxyZWFkeUxpc3RlZCIsIm1GYWlsZWRTaWRlRWZmZWN0cyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImJQcm9taXNlU3VjY2VzcyIsInByb21pc2UiLCJfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyIsImZpZWxkIiwib0ZpZWxkIiwic0ZpZWxkSGVscGVySWQiLCJnZXRGaWVsZEhlbHAiLCJvRmlsdGVySGVscCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImJ5SWQiLCJnZXRPdXRQYXJhbWV0ZXJzIiwib091dFBhcmFtZXRlciIsIm9CaW5kaW5nIiwiZ2V0QmluZGluZyIsInJlcXVlc3RWYWx1ZSIsInNQcm9wZXJ0eVBhdGgiLCJtUHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiam9pbiIsInVuZGVmaW5lZCIsIm9Tb3VyY2VGaWVsZCIsInNTaWRlRWZmZWN0RW50aXR5VHlwZSIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib0NvbnRleHRGb3JTaWRlRWZmZWN0cyIsImdldENvbnRleHQiLCJzRnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5VHlwZXMiLCJmaW5kIiwib0VudGl0eVR5cGUiLCJGaWVsZFJ1bnRpbWUiLCJnZXRGaWVsZFN0YXRlT25DaGFuZ2UiLCJzdGF0ZSIsInZhbGlkaXR5IiwiZ2V0U291cmNlIiwiX2dldEZpZWxkUHJvbWlzZSIsInNpZGVFZmZlY3RzTWFwIiwiX2dldEZpZWxkU2lkZUVmZmVjdHNNYXAiLCJtU2lkZUVmZmVjdHNNYXAiLCJnZXRGaWVsZEdyb3VwSWRzIiwic1ZpZXdFbnRpdHlTZXRTZXROYW1lIiwiZ2V0Vmlld0RhdGEiLCJlbnRpdHlTZXQiLCJvVmlld0VudGl0eVNldCIsImVudGl0eVNldHMiLCJvRW50aXR5U2V0IiwiYklzSW1tZWRpYXRlIiwiaW5kZXhPZiIsInNOYW1lIiwiYVNpZGVFZmZlY3RQYXJ0cyIsInNwbGl0Iiwic1NpZGVFZmZlY3RQYXRoIiwibGVuZ3RoIiwib1NpZGVFZmZlY3QiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiX2dldENvbnRleHRGb3JTaWRlRWZmZWN0cyIsImltbWVkaWF0ZSIsInNWaWV3RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJtRmllbGRQYXRoIiwiZ2V0QWdncmVnYXRpb24iLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsInNGaWVsZFBhdGgiLCJnZXRWYWx1ZSIsIm1Db250cm9sRW50aXR5VHlwZSIsImdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyIsInNDb250cm9sTmFtZSIsIm9Db250cm9sU2lkZUVmZmVjdHMiLCJpbmNsdWRlcyIsIm1GaWVsZFNpZGVFZmZlY3RzTWFwIiwib0ZpZWxkUHJvbWlzZUZvckZpZWxkR3JvdXAiLCJfZ2VuZXJhdGVGaWVsZEdyb3VwUHJvbWlzZSIsIm1GYWlsZWRTaWRlRWZmZWN0c05hbWUiLCJzU2lkZUVmZmVjdENvbnRleHRQYXRoIiwiYUZhaWxlZFNpZGVFZmZlY3RzIiwibVNpZGVFZmZlY3RDb250ZXh0UGF0aCIsImJTdWNjZXNzIiwib0ZpZWxkQmluZGluZyIsIl9nZXRCaW5kaW5nRm9yRmllbGQiLCJhRmllbGRQYXRocyIsImdldEJpbmRpbmdzIiwic1BhdGgiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiUHVibGljIiwiRmluYWwiLCJQcml2YXRlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BbURNQSw4QixXQURMQyxRQUFRLENBQUMsOENBQUQsRUFBaURDLDJCQUFqRCxDLFVBU1BDLFFBQVEsRTs7Ozs7Ozs7Ozs7OzthQUFULGtCQUNnQjtBQUNmLGFBQUtDLE1BQUwsR0FBZSxJQUFELENBQWNDLElBQWQsQ0FBbUJDLE9BQW5CLEVBQWQ7QUFDQSxhQUFLQyxjQUFMLEdBQXNCQyxXQUFXLENBQUNDLGVBQVosQ0FBNEIsS0FBS0wsTUFBakMsQ0FBdEI7QUFDQSxhQUFLTSxvQkFBTCxHQUE2QixLQUFLSCxjQUFOLENBQTZCSSxxQkFBN0IsRUFBNUI7QUFDQSxhQUFLQyxpQkFBTCxHQUF5QixFQUF6QjtBQUNBLGFBQUtDLHlCQUFMLEdBQWlDLElBQUlDLEdBQUosRUFBakM7QUFDQSxhQUFLQyxtQkFBTCxHQUEyQixFQUEzQjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O2FBQ0MsaUNBRXFDO0FBQ3BDLGFBQUtGLHlCQUFMLENBQStCRyxLQUEvQjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7YUFDQyx1Q0FFaUU7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O0lBNW5CMkN5RSxtQiw2TkF3QjNDQyxNLEVBQ0FDLEssaUxBWUFELE0sRUFDQUMsSyw2S0FpQkFELE0sRUFDQUMsSyx3S0E2Q0FELE0sRUFDQUMsSyw0S0FrRkFELE0sRUFDQUMsSyw2S0FXQUQsTSxFQUNBQyxLLDBLQWNBRCxNLEVBQ0FDLEssMktBZ0NBRCxNLEVBQ0FDLEssOEtBa0JBQyxPLEVBQ0FELEssK0tBOEdBQyxPLEVBQ0FELEs7U0F3UWE1TCw4QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbGxlckV4dGVuc2lvbiB9IGZyb20gXCJzYXAvdWkvY29yZS9tdmNcIjtcbmltcG9ydCB7IEJpbmRpbmcsIENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsXCI7XG5pbXBvcnQgeyBDaGVja0JveCB9IGZyb20gXCJzYXAvbVwiO1xuaW1wb3J0IHsgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zXCI7XG5pbXBvcnQgeyBVSTVDbGFzcywgT3ZlcnJpZGUsIFB1YmxpYywgRmluYWwsIFByaXZhdGUgfSBmcm9tIFwiLi4vaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IEFwcENvbXBvbmVudCwgQ29tbW9uVXRpbHMgfSBmcm9tIFwic2FwL2ZlL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2wgfSBmcm9tIFwic2FwL3VpL2NvcmVcIjtcbmltcG9ydCB7XG5cdFNpZGVFZmZlY3RzVHlwZSxcblx0Q29udHJvbFNpZGVFZmZlY3RzVHlwZSxcblx0T0RhdGFTaWRlRWZmZWN0c1R5cGUsXG5cdENvbnRyb2xTaWRlRWZmZWN0c0VudGl0eURpY3Rpb25hcnlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB7IEZpZWxkUnVudGltZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkXCI7XG5pbXBvcnQgeyBDb252ZXJ0ZXJPdXRwdXQsIFByb3BlcnR5UGF0aCwgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSBcInNhcC9iYXNlXCI7XG5cbnR5cGUgRmllbGRDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0RmllbGRIZWxwKCk6IHN0cmluZztcblx0Z2V0RmllbGRHcm91cElkcygpOiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgRmllbGRFdmVudFByb3BlcnR5VHlwZSA9IHtcblx0cHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuXHRmaWVsZDogRmllbGRDb250cm9sO1xuXHRzaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcbn07XG5cbnR5cGUgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGltbWVkaWF0ZT86IGJvb2xlYW47XG5cdGNvbnRleHQ6IENvbnRleHQ8YW55Pjtcblx0c2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZTtcblx0cHJldmlvdXNseUZhaWxlZD86IGJvb2xlYW47XG59O1xuXG50eXBlIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG50eXBlIEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdHNUeXBlW10+O1xuXG50eXBlIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSA9IHtcblx0cHJvbWlzZXM6IFByb21pc2U8YW55PltdO1xuXHRzaWRlRWZmZWN0UHJvcGVydHk6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZTtcblx0cHJvY2Vzc1N0YXJ0ZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBGaWVsZEdyb3VwUXVldWVNYXBUeXBlID0ge1xuXHRbc2lkZUVmZmVjdE5hbWU6IHN0cmluZ106IHtcblx0XHRbY29udGV4dFBhdGg6IHN0cmluZ106IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZTtcblx0fTtcbn07XG5cbkBVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlNpZGVFZmZlY3RzXCIsIENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSlcbmNsYXNzIFNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIF9vVmlldzogYW55O1xuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXHRwcml2YXRlIF9tRmllbGRHcm91cFF1ZXVlITogRmllbGRHcm91cFF1ZXVlTWFwVHlwZTtcblx0cHJpdmF0ZSBfYVNvdXJjZVByb3BlcnRpZXNGYWlsdXJlITogU2V0PHN0cmluZz47XG5cdHByaXZhdGUgX29TaWRlRWZmZWN0c1NlcnZpY2UhOiBhbnk7XG5cdHByaXZhdGUgX21GYWlsZWRTaWRlRWZmZWN0cyE6IEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xuXG5cdEBPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkluaXQoKSB7XG5cdFx0dGhpcy5fb1ZpZXcgPSAodGhpcyBhcyBhbnkpLmJhc2UuZ2V0VmlldygpO1xuXHRcdHRoaXMuX29BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fb1ZpZXcpO1xuXHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UgPSAodGhpcy5fb0FwcENvbXBvbmVudCBhcyBhbnkpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdHRoaXMuX21GaWVsZEdyb3VwUXVldWUgPSB7fTtcblx0XHR0aGlzLl9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUgPSBuZXcgU2V0KCk7XG5cdFx0dGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgcmVjb3JkZWQgdmFsaWRhdGlvbiBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgY2xlYXJQcm9wZXJ0aWVzU3RhdHVzXG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRwdWJsaWMgY2xlYXJQcm9wZXJ0aWVzU3RhdHVzKCk6IHZvaWQge1xuXHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZS5jbGVhcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgZmFpbGVkIFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0UmVnaXN0ZXJlZEZhaWxlZFJlcXVlc3RzXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFJlZ2lzdGVyZWQgU2lkZUVmZmVjdHMgcmVxdWVzdHMgdGhhdCBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0cHVibGljIGdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cygpOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0cmV0dXJuIHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSB3b3JrZmxvdyBmb3IgU2lkZUVmZmVjdHMgd2l0aCByZWxhdGVkIGNoYW5nZXMgdG8gYSBmaWVsZFxuXHQgKiBUaGUgZm9sbG93aW5nIHNjZW5hcmlvcyBhcmUgbWFuYWdlZDpcblx0ICogIC0gRXhlY3V0ZTogdHJpZ2dlcnMgaW1tZWRpYXRlIFNpZGVFZmZlY3RzIHJlcXVlc3RzIGlmIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgZXZlbnQgaXMgZnVsZmlsbGVkXG5cdCAqICAtIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaGFuZGxlRmllbGRDaGFuZ2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBTQVBVSTUgZXZlbnQgdGhhdCBjb21lcyBmcm9tIGEgZmllbGQgY2hhbmdlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9ICBQcm9taXNlIG9uIFNpZGVFZmZlY3RzIHJlcXVlc3Qocylcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdHB1YmxpYyBoYW5kbGVGaWVsZENoYW5nZShvRXZlbnQ6IFVJNUV2ZW50LCBvRmllbGRHcm91cFByZVJlcXVpc2l0ZT86IFByb21pc2U8YW55Pik6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3QgbUV2ZW50RmllbGRQcm9wZXJ0aWVzID0gdGhpcy5fZ2V0RmllbGRQcm9wZXJ0aWVzKG9FdmVudCksXG5cdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSA9IHRoaXMuX2luaXRpYWxpemVGaWVsZFNpZGVFZmZlY3RzKFxuXHRcdFx0XHRtRXZlbnRGaWVsZFByb3BlcnRpZXMsXG5cdFx0XHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlXG5cdFx0XHQpO1xuXG5cdFx0bGV0IGJJc0ltbWVkaWF0ZVRyaWdnZXJlZCA9IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHRoaXMuX2dlbmVyYXRlSW1tZWRpYXRlUHJvbWlzZShtRXZlbnRGaWVsZFByb3BlcnRpZXMpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGJJc0ltbWVkaWF0ZVRyaWdnZXJlZCA9IHRydWU7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzLm1hcChtU2lkZUVmZmVjdHNQcm9wZXJ0eSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMobVNpZGVFZmZlY3RzUHJvcGVydHkuc2lkZUVmZmVjdHMsIG1TaWRlRWZmZWN0c1Byb3BlcnR5LmNvbnRleHQpO1xuXHRcdFx0XHRcdH0pIHx8IFtdXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKG9FcnJvciA9PiB7XG5cdFx0XHRcdGlmIChiSXNJbW1lZGlhdGVUcmlnZ2VyZWQpIHtcblx0XHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBwcm9jZXNzaW5nIEZpZWxkIFNpZGVFZmZlY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogU2lkZUVmZmVjdHMgaGF2ZSBub3QgYmVlbiB0cmlnZ2VyZWQgc2luY2UgcHJlUmVxdWlzaXRlIHZhbGlkYXRpb24gZmFpbHMgc28gd2UgbmVlZFxuXHRcdFx0XHRcdCAqIHRvIGtlZXAgcHJldmlvdXNseSBmYWlsZWQgcmVxdWVzdCBhcyBGYWlsZWQgcmVxdWVzdCAodG8gYmUgcmV0cmlnZ2VyIG9uIG5leHQgY2hhbmdlKVxuXHRcdFx0XHRcdCAqL1xuXG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0LmZpbHRlcihtSW1tZWRpYXRlU2lkZUVmZmVjdHMgPT4gbUltbWVkaWF0ZVNpZGVFZmZlY3RzLnByZXZpb3VzbHlGYWlsZWQgPT09IHRydWUpXG5cdFx0XHRcdFx0XHQuZm9yRWFjaChtSW1tZWRpYXRlU2lkZUVmZmVjdHMgPT5cblx0XHRcdFx0XHRcdFx0dGhpcy5fYWRkRmFpbGVkU2lkZUVmZmVjdHMobUltbWVkaWF0ZVNpZGVFZmZlY3RzLnNpZGVFZmZlY3RzLCBtSW1tZWRpYXRlU2lkZUVmZmVjdHMuY29udGV4dClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgU2lkZUVmZmVjdHMgd2l0aCBhIHJlbGF0ZWQgJ2ZvY3VzIG91dCcgdG8gYSBmaWVsZCBncm91cC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBTQVBVSTUgRXZlbnRcblx0ICogQHJldHVybnMge29iamVjdH0gUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0KHMpXG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRwdWJsaWMgaGFuZGxlRmllbGRHcm91cENoYW5nZShvRXZlbnQ6IFVJNUV2ZW50KTogUHJvbWlzZTxhbnk+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcyxcblx0XHRcdGFEZWZlcnJlZFNpZGVFZmZlY3RzOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGVbXSA9IFtdLFxuXHRcdFx0YUZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdID0gb0V2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIik7XG5cblx0XHRjb25zdCBnZXRGaWVsZEdyb3VwUmVxdWVzdFByb21pc2UgPSBmdW5jdGlvbihvRGVmZXJyZWRTaWRlRWZmZWN0OiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUpIHtcblx0XHRcdGxldCBiSXNSZXF1ZXN0c1RyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RQcm9wZXJ0eSA9IG9EZWZlcnJlZFNpZGVFZmZlY3Quc2lkZUVmZmVjdFByb3BlcnR5O1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHQ7XG5cdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoYXQuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IG1FbnRpdHlUeXBlID0gdGhhdC5fZ2V0RW50aXR5VHlwZUZyb21GUU4oc0VudGl0eVR5cGUpO1xuXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwob0RlZmVycmVkU2lkZUVmZmVjdC5wcm9taXNlcylcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0YklzUmVxdWVzdHNUcmlnZ2VyZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0Ly9EZWZlcnJlZCBTaWRlRWZmZWN0cyBhcmUgZXhlY3V0ZWQgb25seSBpZiBhbGwgc291cmNlUHJvcGVydGllcyBoYXZlIG5vIHJlZ2lzdGVyZWQgZmFpbHVyZS5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRtRW50aXR5VHlwZSAmJlxuXHRcdFx0XHRcdFx0KG9TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMuU291cmNlUHJvcGVydGllcyBhcyBQcm9wZXJ0eVBhdGhbXSkuZXZlcnkoc291cmNlUHJvcGVydHkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoc291cmNlUHJvcGVydHkudHlwZSA9PT0gXCJQcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNJZCA9IHRoYXQuX2dlbmVyYXRlU3RhdHVzSW5kZXgobUVudGl0eVR5cGUsIHNvdXJjZVByb3BlcnR5LnZhbHVlLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNJZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuICF0aGF0Ll9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUuaGFzKHNJZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLCBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKG9FcnJvciA9PiB7XG5cdFx0XHRcdFx0aWYgKGJJc1JlcXVlc3RzVHJpZ2dlcmVkKSB7XG5cdFx0XHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBwcm9jZXNzaW5nIEZpZWxkR3JvdXAgU2lkZUVmZmVjdHMgb24gY29udGV4dCBcIiArIHNDb250ZXh0UGF0aCwgb0Vycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHRkZWxldGUgdGhhdC5fbUZpZWxkR3JvdXBRdWV1ZVtvU2lkZUVmZmVjdFByb3BlcnR5Lm5hbWVdW3NDb250ZXh0UGF0aF07XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRhRmllbGRHcm91cElkcy5mb3JFYWNoKHNGaWVsZEdyb3VwSWQgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBzdHJpbmcgXCIkJEltbWVkaWF0ZVJlcXVlc3RcIiBpcyBhZGRlZCB0byB0aGUgU2lkZUVmZmVjdHMgbmFtZSBkdXJpbmcgdGVtcGxhdGluZyB0byBrbm93XG5cdFx0XHQgKiBpZiB0aGlzIFNpZGVFZmZlY3RzIG11c3QgYmUgaW1tZWRpYXRlbHkgZXhlY3V0ZWQgcmVxdWVzdGVkIChvbiBmaWVsZCBjaGFuZ2UpIG9yIG11c3Rcblx0XHRcdCAqIGJlIGRlZmVycmVkIChvbiBmaWVsZCBncm91cCBmb2N1cyBvdXQpXG5cdFx0XHQgKlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBzU2lkZUVmZmVjdE5hbWU6IHN0cmluZyA9IHNGaWVsZEdyb3VwSWQucmVwbGFjZShcIiQkSW1tZWRpYXRlUmVxdWVzdFwiLCBcIlwiKTtcblx0XHRcdGNvbnN0IG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cyA9IHRoYXQuX21GaWVsZEdyb3VwUXVldWU/LltzU2lkZUVmZmVjdE5hbWVdO1xuXHRcdFx0aWYgKG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtQ29udGV4dERlZmVycmVkU2lkZUVmZmVjdHMpLmZvckVhY2goc0NvbnRleHRQYXRoID0+IHtcblx0XHRcdFx0XHRjb25zdCBvRGVmZXJyZWRTaWRlRWZmZWN0ID0gbUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF07XG5cdFx0XHRcdFx0aWYgKCFvRGVmZXJyZWRTaWRlRWZmZWN0LnByb2Nlc3NTdGFydGVkKSB7XG5cdFx0XHRcdFx0XHRvRGVmZXJyZWRTaWRlRWZmZWN0LnByb2Nlc3NTdGFydGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGFEZWZlcnJlZFNpZGVFZmZlY3RzLnB1c2gob0RlZmVycmVkU2lkZUVmZmVjdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdGFEZWZlcnJlZFNpZGVFZmZlY3RzLm1hcChvRGVmZXJyZWRTaWRlRWZmZWN0ID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldEZpZWxkR3JvdXBSZXF1ZXN0UHJvbWlzZShvRGVmZXJyZWRTaWRlRWZmZWN0KTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgU2lkZUVmZmVjdHMgY29udHJvbC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGFkZENvbnRyb2xTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0VudGl0eVR5cGUgTmFtZSBvZiB0aGUgZW50aXR5IHdoZXJlIHRoZSBTaWRlRWZmZWN0cyBjb250cm9sIHdpbGwgYmUgcmVnaXN0ZXJlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1NpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIHJlZ2lzdGVyLiBFbnN1cmUgdGhlIHNvdXJjZUNvbnRyb2xJZCBtYXRjaGVzIHRoZSBhc3NvY2lhdGVkIFNBUFVJNSBjb250cm9sIElELlxuXHQgKlxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0cHVibGljIGFkZENvbnRyb2xTaWRlRWZmZWN0cyhzRW50aXR5VHlwZTogc3RyaW5nLCBvU2lkZUVmZmVjdHM6IE9taXQ8Q29udHJvbFNpZGVFZmZlY3RzVHlwZSwgXCJmdWxseVF1YWxpZmllZE5hbWVcIj4pOiB2b2lkIHtcblx0XHR0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmFkZENvbnRyb2xTaWRlRWZmZWN0cyhzRW50aXR5VHlwZSwgb1NpZGVFZmZlY3RzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBxdWV1ZSBjb250YWluaW5nIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSByZW1vdmVGYWlsZWRTaWRlRWZmZWN0c1xuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0cHVibGljIHJlbW92ZUZhaWxlZFNpZGVFZmZlY3RzKCk6IHZvaWQge1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3QgU2lkZUVmZmVjdHMgb24gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgcmVxdWVzdFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRwdWJsaWMgcmVxdWVzdFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlLCBvQ29udGV4dDogQ29udGV4dDxhbnk+KTogUHJvbWlzZTxhbnk+IHtcblx0XHRsZXQgZlJlc29sdmVyOiBhbnksIGZSZWplY3RvcjogYW55O1xuXHRcdGNvbnN0IG9Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmUmVzb2x2ZXIgPSByZXNvbHZlO1xuXHRcdFx0ZlJlamVjdG9yID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFUYXJnZXRzOiBhbnlbXSA9ICgob1NpZGVFZmZlY3RzLlRhcmdldEVudGl0aWVzIGFzIGFueVtdKSB8fCBbXSkuY29uY2F0KChvU2lkZUVmZmVjdHMuVGFyZ2V0UHJvcGVydGllcyBhcyBhbnlbXSkgfHwgW10pLFxuXHRcdFx0c1RyaWdnZXJBY3Rpb246IFN0cmluZyB8IHVuZGVmaW5lZCA9IChvU2lkZUVmZmVjdHMgYXMgT0RhdGFTaWRlRWZmZWN0c1R5cGUpLlRyaWdnZXJBY3Rpb247XG5cblx0XHRpZiAoc1RyaWdnZXJBY3Rpb24pIHtcblx0XHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihzVHJpZ2dlckFjdGlvbiwgb0NvbnRleHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2Vcblx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoYVRhcmdldHMsIG9Db250ZXh0KVxuXHRcdFx0LnRoZW4oKCkgPT4gZlJlc29sdmVyKCkpXG5cdFx0XHQuY2F0Y2goKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0cywgb0NvbnRleHQpO1xuXHRcdFx0XHRmUmVqZWN0b3Iob0Vycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIG9Qcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgU2lkZUVmZmVjdHMgY3JlYXRlZCBieSBhIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSByZW1vdmVDb250cm9sU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250cm9sIFNBUFVJNSBDb250cm9sXG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRwdWJsaWMgcmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKG9Db250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Y29uc3Qgc0NvbnRyb2xJZCA9IG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpICYmIG9Db250cm9sLmdldElkKCk7XG5cblx0XHRpZiAoc0NvbnRyb2xJZCkge1xuXHRcdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5yZW1vdmVDb250cm9sU2lkZUVmZmVjdHMoc0NvbnRyb2xJZCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgU2lkZUVmZmVjdHMgdG8gdGhlIHF1ZXVlIG9mIHRoZSBmYWlsZWQgU2lkZUVmZmVjdHNcblx0ICogVGhlIFNpZGVFZmZlY3RzIHdpbGwgYmUgcmV0cmlnZ2VyZWQgb24gdGhlIG5leHQgY2hhbmdlIG9uIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfYWRkRmFpbGVkU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtvYmplY3R9IG9TaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgcmV0cmlnZ2VyZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgaGF2ZSBmYWlsZWRcblx0ICovXG5cdEBQcml2YXRlXG5cdEBGaW5hbFxuXHRwcml2YXRlIF9hZGRGYWlsZWRTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSwgb0NvbnRleHQ6IENvbnRleHQ8YW55Pik6IHZvaWQge1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aDogc3RyaW5nID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0gfHwgW107XG5cdFx0Y29uc3QgYklzTm90QWxyZWFkeUxpc3RlZCA9IHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdLmV2ZXJ5KFxuXHRcdFx0bUZhaWxlZFNpZGVFZmZlY3RzID0+IG9TaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWUgIT09IG1GYWlsZWRTaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHQpO1xuXHRcdGlmIChiSXNOb3RBbHJlYWR5TGlzdGVkKSB7XG5cdFx0XHR0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc0NvbnRleHRQYXRoXS5wdXNoKG9TaWRlRWZmZWN0cyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgcHJvbWlzZSBmb3IgdGhlIGZpZWxkIGdyb3VwIHRoYXQgaXMgcmVxdWlyZWQgYmVmb3JlIHJlcXVlc3RpbmcgU2lkZUVmZmVjdHMuXG5cdCAqIElmIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIGFuZCBvbmx5IHRoZSBmaWVsZCByZXF1aXJlcyB0aGUgU2lkZUVmZmVjdHMgb24gdGhpcyBjb250ZXh0LCB0aGUgU2lkZUVmZmVjdHMgYXJlIHJlbW92ZWQgZnJvbSB0aGVcblx0ICogU2lkZUVmZmVjdHMgcXVldWUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2VuZXJhdGVGaWVsZEdyb3VwUHJvbWlzZVxuXHQgKiBAcGFyYW0ge29iamVjdH0gbUV2ZW50RmllbGRQcm9wZXJ0aWVzIEZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMge29iamVjdH0gUHJvbWlzZSB0byBiZSB1c2VkIGZvciB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRcblx0ICovXG5cdHByaXZhdGUgX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlKTogUHJvbWlzZTxhbnk+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblxuXHRcdGxldCBiUHJvbWlzZVN1Y2Nlc3MgPSB0cnVlO1xuXHRcdHJldHVybiBtRXZlbnRGaWVsZFByb3BlcnRpZXMucHJvbWlzZVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBiUHJvbWlzZVN1Y2Nlc3M7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRiUHJvbWlzZVN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIGJQcm9taXNlU3VjY2Vzcztcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBOZWVkIHRvIHN0b3JlIHRoZSBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoaXMgZmllbGQgZm9yIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdFx0XHRcdCAqIHNpbmNlIGFsbCBTb3VyY2VQcm9wZXJ0aWVzIGZvciB0aGlzIGtpbmQgb2YgU2lkZUVmZmVjdHMgbXVzdCBiZSB2YWxpZFxuXHRcdFx0XHQgKi9cblx0XHRcdFx0dGhhdC5fc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhtRXZlbnRGaWVsZFByb3BlcnRpZXMuZmllbGQsIGJQcm9taXNlU3VjY2Vzcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHByb21pc2UgZm9yIHRoZSBmaWVsZCB0aGF0IGlzIHJlcXVpcmVkIGJlZm9yZSByZXF1ZXN0aW5nIGltbWVkaWF0ZSBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFByb21pc2UgdG8gYmUgdXNlZCBmb3IgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRwcml2YXRlIF9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBvUHJvbWlzZSA9IG1FdmVudEZpZWxkUHJvcGVydGllcy5wcm9taXNlO1xuXHRcdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJZiB0aGUgZmllbGQgZ2V0cyBhIEZpZWxkSGVscGVyLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgYWxsIGZpZWxkcyBjaGFuZ2VkIGJ5IHRoaXMgRmllbGRIZWxwZXIgaGF2ZSBiZWVuIHNldC5cblx0XHRcdCAqIFRvIGFjaGlldmUgdGhpcywgd2UgZW5zdXJlIHRoYXQgYWxsIHJlbGF0ZWQgYmluZGluZ3MgaGF2ZSBiZWVuIHJlc29sdmVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoaXMgcmVzb2x1dGlvbiBwcm9jZXNzIGlzIG5vdCBtYW5hZ2VkIGJ5IHRoZSBGaWVsZCBFdmVudCBQcm9taXNlLCBzbyBmb3IgZmFzdCB1c2VyIGFjdGlvbnMgKGxpa2UgYXV0b21hdGlvbikgaXQgY2FuIGxvY2sgdGhlIG1vZGVsXG5cdFx0XHQgKiBhbmQgbm8gcmVxdWVzdCBjYW4gYmUgZXhlY3V0ZWQuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IG9GaWVsZCA9IG1FdmVudEZpZWxkUHJvcGVydGllcy5maWVsZDtcblx0XHRcdGNvbnN0IHNGaWVsZEhlbHBlcklkID0gb0ZpZWxkLmdldEZpZWxkSGVscCAmJiBvRmllbGQuZ2V0RmllbGRIZWxwKCk7XG5cdFx0XHRpZiAoc0ZpZWxkSGVscGVySWQpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlckhlbHA6IGFueSA9IHNhcC51aS5nZXRDb3JlKCkuYnlJZChzRmllbGRIZWxwZXJJZCk7XG5cdFx0XHRcdGlmIChvRmlsdGVySGVscCkge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRcdChvRmlsdGVySGVscC5nZXRPdXRQYXJhbWV0ZXJzKCkgYXMgYW55W10pLm1hcChvT3V0UGFyYW1ldGVyID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSBvT3V0UGFyYW1ldGVyLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nID8gb0JpbmRpbmcucmVxdWVzdFZhbHVlKCkgOiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtdKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBzdGF0dXMgaW5kZXguXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2VuZXJhdGVTdGF0dXNJbmRleFxuXHQgKiBAcGFyYW0ge29iamVjdH0gbUVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udGV4dCBTQVBVSTUgQ29udGV4dFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBJbmRleFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZTogRW50aXR5VHlwZSwgc1Byb3BlcnR5UGF0aDogc3RyaW5nLCBvQ29udGV4dDogQ29udGV4dDxhbnk+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgbVByb3BlcnR5ID0gbUVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdFx0aWYgKG1Qcm9wZXJ0eSkge1xuXHRcdFx0aWYgKG1Qcm9wZXJ0eSAmJiBtUHJvcGVydHkuX3R5cGUgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdFx0XHRyZXR1cm4gW21Qcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUsIHNDb250ZXh0UGF0aF0uam9pbihcIl9fXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQgb24gd2hpY2ggU2lkZUVmZmVjdHMgY2FuIGJlIHJlcXVlc3RlZC5cblx0ICogVGhlIGNvcnJlY3Qgb25lIG11c3QgaGF2ZSB0aGUgYmluZGluZyBwYXJhbWV0ZXIgJCRwYXRjaFdpdGhvdXRTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Tb3VyY2VGaWVsZCBGaWVsZFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1NpZGVFZmZlY3RFbnRpdHlUeXBlIFRhcmdldCBlbnRpdHkgdHlwZSBvZiB0aGUgU2lkZUVmZmVjdHMgYW5ub3RhdGlvblxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBTQVBVSTUgQ29udGV4dFxuXHQgKi9cblx0QFByaXZhdGVcblx0QEZpbmFsXG5cdHByaXZhdGUgX2dldENvbnRleHRGb3JTaWRlRWZmZWN0cyhvU291cmNlRmllbGQ6IEZpZWxkQ29udHJvbCwgc1NpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmcpOiBDb250ZXh0PGFueT4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCBvQ29udGV4dEZvclNpZGVFZmZlY3RzID0gb0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0c0VudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQmluZGluZ0NvbnRleHQpO1xuXG5cdFx0aWYgKHNTaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgPSAob0JpbmRpbmdDb250ZXh0IGFzIGFueSkuZ2V0QmluZGluZygpLmdldENvbnRleHQoKTtcblx0XHRcdGlmIChvQ29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdHNFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0NvbnRleHRGb3JTaWRlRWZmZWN0cyk7XG5cdFx0XHRcdGlmIChzU2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0b0NvbnRleHRGb3JTaWRlRWZmZWN0cyA9IChvQ29udGV4dEZvclNpZGVFZmZlY3RzIGFzIGFueSkuZ2V0QmluZGluZygpLmdldENvbnRleHQoKTtcblx0XHRcdFx0XHRpZiAob0NvbnRleHRGb3JTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdFx0c0VudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQ29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0XHRcdGlmIChzU2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgfHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgRW50aXR5VHlwZSBiYXNlZCBvbiBpdHMgZnVsbHktcXVhbGlmaWVkIG5hbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRnVsbHlRdWFsaWZpZWROYW1lIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZVxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgZW50aXR5IHR5cGVcblx0ICovXG5cdHByaXZhdGUgX2dldEVudGl0eVR5cGVGcm9tRlFOKHNGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1FbnRpdHlUeXBlID0gKHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCkgYXMgQ29udmVydGVyT3V0cHV0KS5lbnRpdHlUeXBlcy5maW5kKG9FbnRpdHlUeXBlID0+IHtcblx0XHRcdHJldHVybiBvRW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUgPT09IHNGdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1FbnRpdHlUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb21pc2Ugb2YgdGhlIGZpZWxkIHZhbGlkYXRpb24gdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIFNpZGVFZmZlY3RzIHByb2Nlc3MuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RmllbGRQcm9taXNlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRXZlbnQgRmllbGQgY2hhbmdlIGV2ZW50XG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEZpZWxkIHByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgX2dldEZpZWxkUHJvbWlzZShvRXZlbnQ6IFVJNUV2ZW50KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBwcm9taXNlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IHtcblx0XHRcdGNvbnN0IG9Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRcdGlmICghRmllbGRSdW50aW1lLmdldEZpZWxkU3RhdGVPbkNoYW5nZShvRXZlbnQpLnN0YXRlLnZhbGlkaXR5KSB7XG5cdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gb1Byb21pc2U7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgZmllbGQgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoZSBTaWRlRWZmZWN0cyBwcm9jZXNzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldEZpZWxkUHJvcGVydGllc1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb0V2ZW50IEZpZWxkIGNoYW5nZSBldmVudFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBGaWVsZCBwcm9wZXJ0aWVzIChldmVudCBjaGFuZ2UgcHJvbWlzZSwgZmllbGQsIFNpZGVFZmZlY3RzIHJlbGF0ZWQgdG8gdGhpcyBmaWVsZClcblx0ICovXG5cdHByaXZhdGUgX2dldEZpZWxkUHJvcGVydGllcyhvRXZlbnQ6IFVJNUV2ZW50KTogRmllbGRFdmVudFByb3BlcnR5VHlwZSB7XG5cdFx0Y29uc3Qgb0ZpZWxkOiBGaWVsZENvbnRyb2wgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cHJvbWlzZTogdGhpcy5fZ2V0RmllbGRQcm9taXNlKG9FdmVudCksXG5cdFx0XHRmaWVsZDogb0ZpZWxkLFxuXHRcdFx0c2lkZUVmZmVjdHNNYXA6IHRoaXMuX2dldEZpZWxkU2lkZUVmZmVjdHNNYXAob0ZpZWxkKVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgU2lkZUVmZmVjdHMgbWFwXG5cdCAqIFRoZXNlIFNpZGVFZmZlY3RzIGFyZVxuXHQgKiAtIGxpc3RlZCBpbnRvIEZpZWxkR3JvdXBJZHMgKGNvbWluZyBmcm9tIGFuIE9EYXRhIFNlcnZpY2UpXG5cdCAqIC0gZ2VuZXJhdGVkIGJ5IGEgY29udHJvbCBvciBjb250cm9scyBhbmQgdGhhdCBjb25maWd1cmUgdGhpcyBmaWVsZCBhcyBTb3VyY2VQcm9wZXJ0aWVzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldEZpZWxkU2lkZUVmZmVjdHNNYXBcblx0ICogQHBhcmFtIHtvYmplY3R9IG9GaWVsZCBGaWVsZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBTaWRlRWZmZWN0cyBtYXBcblx0ICovXG5cdHByaXZhdGUgX2dldEZpZWxkU2lkZUVmZmVjdHNNYXAob0ZpZWxkOiBGaWVsZENvbnRyb2wpOiBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHtcblx0XHRjb25zdCBtU2lkZUVmZmVjdHNNYXA6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSB7fSxcblx0XHRcdGFGaWVsZEdyb3VwSWRzOiBzdHJpbmdbXSA9IG9GaWVsZC5nZXRGaWVsZEdyb3VwSWRzKCksXG5cdFx0XHRzVmlld0VudGl0eVNldFNldE5hbWUgPSB0aGlzLl9vVmlldy5nZXRWaWV3RGF0YSgpLmVudGl0eVNldCxcblx0XHRcdG9WaWV3RW50aXR5U2V0ID0gKHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCkgYXMgQ29udmVydGVyT3V0cHV0KS5lbnRpdHlTZXRzLmZpbmQob0VudGl0eVNldCA9PiB7XG5cdFx0XHRcdHJldHVybiBvRW50aXR5U2V0Lm5hbWUgPT09IHNWaWV3RW50aXR5U2V0U2V0TmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHRcdGFGaWVsZEdyb3VwSWRzLmZvckVhY2goc0ZpZWxkR3JvdXBJZCA9PiB7XG5cdFx0XHRjb25zdCBiSXNJbW1lZGlhdGU6IGJvb2xlYW4gPSBzRmllbGRHcm91cElkLmluZGV4T2YoXCIkJEltbWVkaWF0ZVJlcXVlc3RcIikgIT09IC0xLFxuXHRcdFx0XHRzTmFtZTogc3RyaW5nID0gc0ZpZWxkR3JvdXBJZC5yZXBsYWNlKFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCIsIFwiXCIpLFxuXHRcdFx0XHRhU2lkZUVmZmVjdFBhcnRzOiBzdHJpbmdbXSA9IHNOYW1lLnNwbGl0KFwiI1wiKSxcblx0XHRcdFx0c1NpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmcgPSBhU2lkZUVmZmVjdFBhcnRzWzBdLFxuXHRcdFx0XHRzU2lkZUVmZmVjdFBhdGg6IHN0cmluZyA9XG5cdFx0XHRcdFx0c1NpZGVFZmZlY3RFbnRpdHlUeXBlICtcblx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNcIiArXG5cdFx0XHRcdFx0KGFTaWRlRWZmZWN0UGFydHMubGVuZ3RoID09PSAyID8gXCIjXCIgKyBhU2lkZUVmZmVjdFBhcnRzWzFdIDogXCJcIiksXG5cdFx0XHRcdG9TaWRlRWZmZWN0OiBTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoc1NpZGVFZmZlY3RFbnRpdHlUeXBlKT8uW1xuXHRcdFx0XHRcdHNTaWRlRWZmZWN0UGF0aFxuXHRcdFx0XHRdLFxuXHRcdFx0XHRvQ29udGV4dDogQ29udGV4dDxhbnk+IHwgdW5kZWZpbmVkID0gdGhpcy5fZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKG9GaWVsZCwgc1NpZGVFZmZlY3RFbnRpdHlUeXBlKTtcblx0XHRcdGlmIChvU2lkZUVmZmVjdCAmJiBvQ29udGV4dCkge1xuXHRcdFx0XHRtU2lkZUVmZmVjdHNNYXBbc05hbWVdID0ge1xuXHRcdFx0XHRcdG5hbWU6IHNOYW1lLFxuXHRcdFx0XHRcdGltbWVkaWF0ZTogYklzSW1tZWRpYXRlLFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBvU2lkZUVmZmVjdCxcblx0XHRcdFx0XHRjb250ZXh0OiBvQ29udGV4dFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly9TaWRlRWZmZWN0cyBjb21pbmcgZnJvbSBjb250cm9sKHMpXG5cdFx0aWYgKHNWaWV3RW50aXR5U2V0U2V0TmFtZSAmJiBvVmlld0VudGl0eVNldCkge1xuXHRcdFx0Y29uc3Qgc1ZpZXdFbnRpdHlUeXBlID0gb1ZpZXdFbnRpdHlTZXQuZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdG1GaWVsZFBhdGg6IGFueSA9IChvRmllbGQuZ2V0QWdncmVnYXRpb24oXCJjdXN0b21EYXRhXCIpIGFzIGFueVtdKS5maW5kKG9DdXN0b21EYXRhID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwic291cmNlUGF0aFwiO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0b0NvbnRleHQ6IENvbnRleHQ8YW55PiB8IHVuZGVmaW5lZCA9IHRoaXMuX2dldENvbnRleHRGb3JTaWRlRWZmZWN0cyhvRmllbGQsIHNWaWV3RW50aXR5VHlwZSk7XG5cblx0XHRcdGlmIChtRmllbGRQYXRoICYmIG9Db250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHNGaWVsZFBhdGggPSBtRmllbGRQYXRoLmdldFZhbHVlKCkucmVwbGFjZShcIi9cIiArIHNWaWV3RW50aXR5U2V0U2V0TmFtZSArIFwiL1wiLCBcIlwiKSxcblx0XHRcdFx0XHRtQ29udHJvbEVudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyhcblx0XHRcdFx0XHRcdHNWaWV3RW50aXR5VHlwZVxuXHRcdFx0XHRcdCkgYXMgQ29udHJvbFNpZGVFZmZlY3RzRW50aXR5RGljdGlvbmFyeTtcblx0XHRcdFx0T2JqZWN0LmtleXMobUNvbnRyb2xFbnRpdHlUeXBlKS5mb3JFYWNoKHNDb250cm9sTmFtZSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRyb2xTaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlID0gbUNvbnRyb2xFbnRpdHlUeXBlW3NDb250cm9sTmFtZV07XG5cdFx0XHRcdFx0aWYgKChvQ29udHJvbFNpZGVFZmZlY3RzLlNvdXJjZVByb3BlcnRpZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHNGaWVsZFBhdGgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzTmFtZSA9IHNDb250cm9sTmFtZSArIFwiOjpcIiArIHNWaWV3RW50aXR5VHlwZTtcblx0XHRcdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtzTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IHNOYW1lLFxuXHRcdFx0XHRcdFx0XHRpbW1lZGlhdGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBvQ29udHJvbFNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0OiBvQ29udGV4dFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbVNpZGVFZmZlY3RzTWFwO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogTGlzdDogZ2V0cyBpbW1lZGlhdGUgU2lkZUVmZmVjdHMgcmVxdWVzdHNcblx0ICogUmVnaXN0ZXI6IGNhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtvYmplY3R9IG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBldmVudCBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIGltbWVkaWF0ZSBTaWRlRWZmZWN0c1xuXHQgKi9cblx0cHJpdmF0ZSBfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHMoXG5cdFx0bUV2ZW50RmllbGRQcm9wZXJ0aWVzOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlLFxuXHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTxhbnk+XG5cdCk6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZVtdIHtcblx0XHRjb25zdCBtRmllbGRTaWRlRWZmZWN0c01hcCA9IG1FdmVudEZpZWxkUHJvcGVydGllcy5zaWRlRWZmZWN0c01hcCxcblx0XHRcdG9GaWVsZFByb21pc2VGb3JGaWVsZEdyb3VwID0gdGhpcy5fZ2VuZXJhdGVGaWVsZEdyb3VwUHJvbWlzZShtRXZlbnRGaWVsZFByb3BlcnRpZXMpLCAvLyBQcm9taXNlIG1hbmFnaW5nIEZpZWxkR3JvdXAgcmVxdWVzdHMgaWYgRmllbGQgcHJvbWlzZSBmYWlsc1xuXHRcdFx0bUZhaWxlZFNpZGVFZmZlY3RzTmFtZTogYW55ID0ge30sXG5cdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSA9IFtdO1xuXG5cdFx0b0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgPSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSB8fCBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRcdE9iamVjdC5rZXlzKG1GaWVsZFNpZGVFZmZlY3RzTWFwKS5mb3JFYWNoKHNTaWRlRWZmZWN0TmFtZSA9PiB7XG5cdFx0XHRjb25zdCBvU2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSBtRmllbGRTaWRlRWZmZWN0c01hcFtzU2lkZUVmZmVjdE5hbWVdLFxuXHRcdFx0XHRzU2lkZUVmZmVjdENvbnRleHRQYXRoID0gb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdO1xuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcHJldmlvdXNseSBmYWlsZWQgcmVxdWVzdCBmb3IgdGhpcyBjb250ZXh0XG5cdFx0XHRpZiAoYUZhaWxlZFNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF07XG5cdFx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0gPSB7fTtcblx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzLmZvckVhY2gobUZhaWxlZFNpZGVFZmZlY3RzID0+IHtcblx0XHRcdFx0XHRtRmFpbGVkU2lkZUVmZmVjdHNOYW1lW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdW21GYWlsZWRTaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWVdID0gdHJ1ZTtcblx0XHRcdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogc1NpZGVFZmZlY3ROYW1lLFxuXHRcdFx0XHRcdFx0cHJldmlvdXNseUZhaWxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBtRmFpbGVkU2lkZUVmZmVjdHMsXG5cdFx0XHRcdFx0XHRjb250ZXh0OiBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob1NpZGVFZmZlY3RQcm9wZXJ0eS5pbW1lZGlhdGUpIHtcblx0XHRcdFx0Ly8gU2lkZUVmZmVjdHMgd2lsbCBiZSBleGVjdXRlZCBpbW1lZGlhdGVseSBhZnRlciBldmVudCBwcm9taXNlIHZhbGlkYXRpb25cblx0XHRcdFx0aWYgKCFtRmFpbGVkU2lkZUVmZmVjdHNOYW1lW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdPy5bb1NpZGVFZmZlY3RQcm9wZXJ0eS5zaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWVdKSB7XG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdG5hbWU6IHNTaWRlRWZmZWN0TmFtZSxcblx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0Y29udGV4dDogb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEFkZCBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0byB0aGUgcmVsYXRlZCBkaWN0aW9uYXJ5XG5cdFx0XHRcdHRoaXMuX21GaWVsZEdyb3VwUXVldWVbc1NpZGVFZmZlY3ROYW1lXSA9IHRoaXMuX21GaWVsZEdyb3VwUXVldWVbc1NpZGVFZmZlY3ROYW1lXSB8fCB7fTtcblx0XHRcdFx0Y29uc3QgbVNpZGVFZmZlY3RDb250ZXh0UGF0aCA9IHRoaXMuX21GaWVsZEdyb3VwUXVldWVbc1NpZGVFZmZlY3ROYW1lXVtzU2lkZUVmZmVjdENvbnRleHRQYXRoXSB8fCB7XG5cdFx0XHRcdFx0cHJvbWlzZXM6IFtdLFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RQcm9wZXJ0eTogb1NpZGVFZmZlY3RQcm9wZXJ0eSxcblx0XHRcdFx0XHRwcm9jZXNzU3RhcnRlZDogZmFsc2Vcblx0XHRcdFx0fTtcblx0XHRcdFx0bVNpZGVFZmZlY3RDb250ZXh0UGF0aC5wcm9taXNlcyA9IG1TaWRlRWZmZWN0Q29udGV4dFBhdGgucHJvbWlzZXMuY29uY2F0KFtcblx0XHRcdFx0XHRvRmllbGRQcm9taXNlRm9yRmllbGRHcm91cCxcblx0XHRcdFx0XHRvRmllbGRHcm91cFByZVJlcXVpc2l0ZSBhcyBQcm9taXNlPGFueT5cblx0XHRcdFx0XSk7XG5cdFx0XHRcdHRoaXMuX21GaWVsZEdyb3VwUXVldWVbc1NpZGVFZmZlY3ROYW1lXVtzU2lkZUVmZmVjdENvbnRleHRQYXRoXSA9IG1TaWRlRWZmZWN0Q29udGV4dFBhdGg7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXM7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIHZhbGlkYXRpb24gc3RhdHVzIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byBhIGZpZWxkIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRmllbGQgRmllbGRcblx0ICogQHBhcmFtIHtib29sZWFufSBiU3VjY2VzcyBTdGF0dXMgb2YgdGhlIGZpZWxkIHZhbGlkYXRpb25cblx0ICovXG5cdHByaXZhdGUgX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMob0ZpZWxkOiBGaWVsZENvbnRyb2wsIGJTdWNjZXNzOiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb0ZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3Qgc0VudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQmluZGluZ0NvbnRleHQpO1xuXHRcdGNvbnN0IG1FbnRpdHlUeXBlID0gdGhpcy5fZ2V0RW50aXR5VHlwZUZyb21GUU4oc0VudGl0eVR5cGUpO1xuXHRcdGlmIChtRW50aXR5VHlwZSkge1xuXHRcdFx0Ly8gUmV0cmlldmVzIGFsbCBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIGZpZWxkXG5cdFx0XHRjb25zdCBvRmllbGRCaW5kaW5nOiBhbnkgPSB0aGlzLl9nZXRCaW5kaW5nRm9yRmllbGQob0ZpZWxkKTtcblx0XHRcdGNvbnN0IGFGaWVsZFBhdGhzID0gb0ZpZWxkQmluZGluZy5pc0EoXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiKVxuXHRcdFx0XHQ/ICgob0ZpZWxkQmluZGluZyBhcyBhbnkpLmdldEJpbmRpbmdzKCkgfHwgW10pLm1hcCgob0JpbmRpbmc6IGFueSkgPT4gb0JpbmRpbmcuc1BhdGgpXG5cdFx0XHRcdDogW29GaWVsZEJpbmRpbmcuZ2V0UGF0aCgpXTtcblxuXHRcdFx0Ly8gU3RvcmVzIHN0YXR1cyBmb3IgYWxsIHByb3BlcnRpZXNcblx0XHRcdGFGaWVsZFBhdGhzLmZvckVhY2goKHNGaWVsZFBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBzSWQgPSB0aGlzLl9nZW5lcmF0ZVN0YXR1c0luZGV4KG1FbnRpdHlUeXBlLCBzRmllbGRQYXRoLCBvQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRpZiAoc0lkKSB7XG5cdFx0XHRcdFx0dGhpcy5fYVNvdXJjZVByb3BlcnRpZXNGYWlsdXJlW2JTdWNjZXNzID8gXCJkZWxldGVcIiA6IFwiYWRkXCJdKHNJZCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHByb3BlcnR5IGJpbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogQHBhcmFtIG9GaWVsZCBGaWVsZFxuXHQgKiBAcmV0dXJucyB7QmluZGluZ30gIEJpbmRpbmcgdG8gdGhlIHZhbHVlXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRCaW5kaW5nRm9yRmllbGQob0ZpZWxkOiBGaWVsZENvbnRyb2wpOiBCaW5kaW5nIHtcblx0XHRsZXQgb0JpbmRpbmc6IEJpbmRpbmc7XG5cdFx0aWYgKG9GaWVsZC5pc0E8Q2hlY2tCb3g+KFwic2FwLm0uQ2hlY2tCb3hcIikpIHtcblx0XHRcdG9CaW5kaW5nID0gb0ZpZWxkLmdldEJpbmRpbmcoXCJzZWxlY3RlZFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0JpbmRpbmcgPSBvRmllbGQuZ2V0QmluZGluZyhcInZhbHVlXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gb0JpbmRpbmc7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2lkZUVmZmVjdHNDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl19
|
|
710
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNpZGVFZmZlY3RzLnRzIl0sIm5hbWVzIjpbIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsIlVJNUNsYXNzIiwiQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIiwiT3ZlcnJpZGUiLCJfb1ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9vQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJfb1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIl9tRmllbGRHcm91cFF1ZXVlIiwiX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSIsIlNldCIsIl9tRmFpbGVkU2lkZUVmZmVjdHMiLCJjbGVhciIsIm9FdmVudCIsIm9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlIiwibUV2ZW50RmllbGRQcm9wZXJ0aWVzIiwiX2dldEZpZWxkUHJvcGVydGllcyIsImFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMiLCJfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHMiLCJiSXNJbW1lZGlhdGVUcmlnZ2VyZWQiLCJfZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlIiwidGhlbiIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJtU2lkZUVmZmVjdHNQcm9wZXJ0eSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RzIiwiY29udGV4dCIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZGVidWciLCJmaWx0ZXIiLCJtSW1tZWRpYXRlU2lkZUVmZmVjdHMiLCJwcmV2aW91c2x5RmFpbGVkIiwiZm9yRWFjaCIsIl9hZGRGYWlsZWRTaWRlRWZmZWN0cyIsInRoYXQiLCJhRGVmZXJyZWRTaWRlRWZmZWN0cyIsImFGaWVsZEdyb3VwSWRzIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0RmllbGRHcm91cFJlcXVlc3RQcm9taXNlIiwib0RlZmVycmVkU2lkZUVmZmVjdCIsImJJc1JlcXVlc3RzVHJpZ2dlcmVkIiwib1NpZGVFZmZlY3RQcm9wZXJ0eSIsInNpZGVFZmZlY3RQcm9wZXJ0eSIsIm9Db250ZXh0Iiwic0NvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwibUVudGl0eVR5cGUiLCJfZ2V0RW50aXR5VHlwZUZyb21GUU4iLCJwcm9taXNlcyIsIlNvdXJjZVByb3BlcnRpZXMiLCJldmVyeSIsInNvdXJjZVByb3BlcnR5IiwidHlwZSIsInNJZCIsIl9nZW5lcmF0ZVN0YXR1c0luZGV4IiwidmFsdWUiLCJoYXMiLCJmaW5hbGx5IiwibmFtZSIsInNGaWVsZEdyb3VwSWQiLCJzU2lkZUVmZmVjdE5hbWUiLCJyZXBsYWNlIiwibUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzIiwiT2JqZWN0Iiwia2V5cyIsInByb2Nlc3NTdGFydGVkIiwicHVzaCIsIm9TaWRlRWZmZWN0cyIsImFkZENvbnRyb2xTaWRlRWZmZWN0cyIsImZSZXNvbHZlciIsImZSZWplY3RvciIsIm9Qcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFUYXJnZXRzIiwiVGFyZ2V0RW50aXRpZXMiLCJjb25jYXQiLCJUYXJnZXRQcm9wZXJ0aWVzIiwic1RyaWdnZXJBY3Rpb24iLCJUcmlnZ2VyQWN0aW9uIiwiZXhlY3V0ZUFjdGlvbiIsIm9Db250cm9sIiwic0NvbnRyb2xJZCIsImlzQSIsImdldElkIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiYklzTm90QWxyZWFkeUxpc3RlZCIsIm1GYWlsZWRTaWRlRWZmZWN0cyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImJQcm9taXNlU3VjY2VzcyIsInByb21pc2UiLCJfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyIsImZpZWxkIiwib0ZpZWxkIiwic0ZpZWxkSGVscGVySWQiLCJnZXRGaWVsZEhlbHAiLCJvRmlsdGVySGVscCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImJ5SWQiLCJnZXRPdXRQYXJhbWV0ZXJzIiwib091dFBhcmFtZXRlciIsIm9CaW5kaW5nIiwiZ2V0QmluZGluZyIsInJlcXVlc3RWYWx1ZSIsInNQcm9wZXJ0eVBhdGgiLCJtUHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiam9pbiIsInVuZGVmaW5lZCIsIm9Tb3VyY2VGaWVsZCIsInNTaWRlRWZmZWN0RW50aXR5VHlwZSIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib0NvbnRleHRGb3JTaWRlRWZmZWN0cyIsImdldENvbnRleHQiLCJzRnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5VHlwZXMiLCJmaW5kIiwib0VudGl0eVR5cGUiLCJGaWVsZFJ1bnRpbWUiLCJnZXRGaWVsZFN0YXRlT25DaGFuZ2UiLCJzdGF0ZSIsInZhbGlkaXR5IiwiZ2V0U291cmNlIiwiX2dldEZpZWxkUHJvbWlzZSIsInNpZGVFZmZlY3RzTWFwIiwiX2dldEZpZWxkU2lkZUVmZmVjdHNNYXAiLCJtU2lkZUVmZmVjdHNNYXAiLCJnZXRGaWVsZEdyb3VwSWRzIiwic1ZpZXdFbnRpdHlTZXRTZXROYW1lIiwiZ2V0Vmlld0RhdGEiLCJlbnRpdHlTZXQiLCJvVmlld0VudGl0eVNldCIsImVudGl0eVNldHMiLCJvRW50aXR5U2V0IiwiYklzSW1tZWRpYXRlIiwiaW5kZXhPZiIsInNOYW1lIiwiYVNpZGVFZmZlY3RQYXJ0cyIsInNwbGl0Iiwic1NpZGVFZmZlY3RQYXRoIiwibGVuZ3RoIiwib1NpZGVFZmZlY3QiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiX2dldENvbnRleHRGb3JTaWRlRWZmZWN0cyIsImltbWVkaWF0ZSIsInNWaWV3RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJtRmllbGRQYXRoIiwiZ2V0QWdncmVnYXRpb24iLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsInNGaWVsZFBhdGgiLCJnZXRWYWx1ZSIsIm1Db250cm9sRW50aXR5VHlwZSIsImdldENvbnRyb2xFbnRpdHlTaWRlRWZmZWN0cyIsInNDb250cm9sTmFtZSIsIm9Db250cm9sU2lkZUVmZmVjdHMiLCJpbmNsdWRlcyIsIm1GaWVsZFNpZGVFZmZlY3RzTWFwIiwib0ZpZWxkUHJvbWlzZUZvckZpZWxkR3JvdXAiLCJfZ2VuZXJhdGVGaWVsZEdyb3VwUHJvbWlzZSIsIm1GYWlsZWRTaWRlRWZmZWN0c05hbWUiLCJzU2lkZUVmZmVjdENvbnRleHRQYXRoIiwiYUZhaWxlZFNpZGVFZmZlY3RzIiwibVNpZGVFZmZlY3RDb250ZXh0UGF0aCIsImJTdWNjZXNzIiwib0ZpZWxkQmluZGluZyIsIl9nZXRCaW5kaW5nRm9yRmllbGQiLCJhRmllbGRQYXRocyIsImdldEJpbmRpbmdzIiwic1BhdGgiLCJzQmluZGluZ05hbWUiLCJDb250cm9sbGVyRXh0ZW5zaW9uIiwiUHVibGljIiwiRmluYWwiLCJQcml2YXRlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bb0RNQSw4QixXQURMQyxRQUFRLENBQUMsOENBQUQsRUFBaURDLDJCQUFqRCxDLFVBU1BDLFFBQVEsRTs7Ozs7Ozs7Ozs7OzthQUFULGtCQUNnQjtBQUNmLGFBQUtDLE1BQUwsR0FBZSxJQUFELENBQWNDLElBQWQsQ0FBbUJDLE9BQW5CLEVBQWQ7QUFDQSxhQUFLQyxjQUFMLEdBQXNCQyxXQUFXLENBQUNDLGVBQVosQ0FBNEIsS0FBS0wsTUFBakMsQ0FBdEI7QUFDQSxhQUFLTSxvQkFBTCxHQUE2QixLQUFLSCxjQUFOLENBQTZCSSxxQkFBN0IsRUFBNUI7QUFDQSxhQUFLQyxpQkFBTCxHQUF5QixFQUF6QjtBQUNBLGFBQUtDLHlCQUFMLEdBQWlDLElBQUlDLEdBQUosRUFBakM7QUFDQSxhQUFLQyxtQkFBTCxHQUEyQixFQUEzQjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O2FBQ0MsaUNBRXFDO0FBQ3BDLGFBQUtGLHlCQUFMLENBQStCRyxLQUEvQjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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RyxXQUFmO0FBQ0E7O0FBQ0QsZUFBT25GLE1BQU0sQ0FBQ1csVUFBUCxDQUFrQndFLFlBQWxCLENBQVA7QUFDQTs7OztJQTVuQjJDQyxtQiw2TkF3QjNDQyxNLEVBQ0FDLEssaUxBWUFELE0sRUFDQUMsSyw2S0FpQkFELE0sRUFDQUMsSyx3S0E2Q0FELE0sRUFDQUMsSyw0S0FrRkFELE0sRUFDQUMsSyw2S0FXQUQsTSxFQUNBQyxLLDBLQWNBRCxNLEVBQ0FDLEssMktBZ0NBRCxNLEVBQ0FDLEssOEtBa0JBQyxPLEVBQ0FELEssK0tBOEdBQyxPLEVBQ0FELEs7U0F3UWE3TCw4QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHsgQ29udHJvbGxlckV4dGVuc2lvbk1ldGFkYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zXCI7XG5pbXBvcnQgeyBVSTVDbGFzcywgT3ZlcnJpZGUsIFB1YmxpYywgRmluYWwsIFByaXZhdGUgfSBmcm9tIFwiLi4vaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gXCJzYXAvZmUvY29yZVwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB7XG5cdFNpZGVFZmZlY3RzVHlwZSxcblx0Q29udHJvbFNpZGVFZmZlY3RzVHlwZSxcblx0T0RhdGFTaWRlRWZmZWN0c1R5cGUsXG5cdENvbnRyb2xTaWRlRWZmZWN0c0VudGl0eURpY3Rpb25hcnlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB7IEZpZWxkUnVudGltZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkXCI7XG5pbXBvcnQgeyBDb252ZXJ0ZXJPdXRwdXQsIFByb3BlcnR5UGF0aCwgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5cbnR5cGUgRmllbGRDb250cm9sID0gQ29udHJvbCAmIHtcblx0Z2V0RmllbGRIZWxwKCk6IHN0cmluZztcblx0Z2V0RmllbGRHcm91cElkcygpOiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgRmllbGRFdmVudFByb3BlcnR5VHlwZSA9IHtcblx0cHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuXHRmaWVsZDogRmllbGRDb250cm9sO1xuXHRzaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcbn07XG5cbnR5cGUgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGltbWVkaWF0ZT86IGJvb2xlYW47XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdHNpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1R5cGU7XG5cdHByZXZpb3VzbHlGYWlsZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlPjtcblxudHlwZSBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IFJlY29yZDxzdHJpbmcsIFNpZGVFZmZlY3RzVHlwZVtdPjtcblxudHlwZSBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGUgPSB7XG5cdHByb21pc2VzOiBQcm9taXNlPGFueT5bXTtcblx0c2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU7XG5cdHByb2Nlc3NTdGFydGVkPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgRmllbGRHcm91cFF1ZXVlTWFwVHlwZSA9IHtcblx0W3NpZGVFZmZlY3ROYW1lOiBzdHJpbmddOiB7XG5cdFx0W2NvbnRleHRQYXRoOiBzdHJpbmddOiBGaWVsZEdyb3VwU2lkZUVmZmVjdFR5cGU7XG5cdH07XG59O1xuXG5AVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5TaWRlRWZmZWN0c1wiLCBDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEpXG5jbGFzcyBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBfb1ZpZXc6IGFueTtcblx0cHJpdmF0ZSBfb0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblx0cHJpdmF0ZSBfbUZpZWxkR3JvdXBRdWV1ZSE6IEZpZWxkR3JvdXBRdWV1ZU1hcFR5cGU7XG5cdHByaXZhdGUgX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSE6IFNldDxzdHJpbmc+O1xuXHRwcml2YXRlIF9vU2lkZUVmZmVjdHNTZXJ2aWNlITogYW55O1xuXHRwcml2YXRlIF9tRmFpbGVkU2lkZUVmZmVjdHMhOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblxuXHRAT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCkge1xuXHRcdHRoaXMuX29WaWV3ID0gKHRoaXMgYXMgYW55KS5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX29WaWV3KTtcblx0XHR0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlID0gKHRoaXMuX29BcHBDb21wb25lbnQgYXMgYW55KS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHR0aGlzLl9tRmllbGRHcm91cFF1ZXVlID0ge307XG5cdFx0dGhpcy5fYVNvdXJjZVByb3BlcnRpZXNGYWlsdXJlID0gbmV3IFNldCgpO1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIHJlY29yZGVkIHZhbGlkYXRpb24gc3RhdHVzIGZvciBhbGwgcHJvcGVydGllcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGNsZWFyUHJvcGVydGllc1N0YXR1c1xuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0cHVibGljIGNsZWFyUHJvcGVydGllc1N0YXR1cygpOiB2b2lkIHtcblx0XHR0aGlzLl9hU291cmNlUHJvcGVydGllc0ZhaWx1cmUuY2xlYXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGZhaWxlZCBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0c1xuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBSZWdpc3RlcmVkIFNpZGVFZmZlY3RzIHJlcXVlc3RzIHRoYXQgaGF2ZSBmYWlsZWRcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdHB1YmxpYyBnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMoKTogRmFpbGVkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdHJldHVybiB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHM7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgd29ya2Zsb3cgZm9yIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogVGhlIGZvbGxvd2luZyBzY2VuYXJpb3MgYXJlIG1hbmFnZWQ6XG5cdCAqICAtIEV4ZWN1dGU6IHRyaWdnZXJzIGltbWVkaWF0ZSBTaWRlRWZmZWN0cyByZXF1ZXN0cyBpZiB0aGUgcHJvbWlzZSBmb3IgdGhlIGZpZWxkIGV2ZW50IGlzIGZ1bGZpbGxlZFxuXHQgKiAgLSBSZWdpc3RlcjogY2FjaGVzIGRlZmVycmVkIFNpZGVFZmZlY3RzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBGaWVsZEdyb3VwIGlzIHVuZm9jdXNlZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGhhbmRsZUZpZWxkQ2hhbmdlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRXZlbnQgU0FQVUk1IGV2ZW50IHRoYXQgY29tZXMgZnJvbSBhIGZpZWxkIGNoYW5nZVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSAgUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0KHMpXG5cdCAqL1xuXHRAUHVibGljXG5cdEBGaW5hbFxuXHRwdWJsaWMgaGFuZGxlRmllbGRDaGFuZ2Uob0V2ZW50OiBVSTVFdmVudCwgb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IG1FdmVudEZpZWxkUHJvcGVydGllcyA9IHRoaXMuX2dldEZpZWxkUHJvcGVydGllcyhvRXZlbnQpLFxuXHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlW10gPSB0aGlzLl9pbml0aWFsaXplRmllbGRTaWRlRWZmZWN0cyhcblx0XHRcdFx0bUV2ZW50RmllbGRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRvRmllbGRHcm91cFByZVJlcXVpc2l0ZVxuXHRcdFx0KTtcblxuXHRcdGxldCBiSXNJbW1lZGlhdGVUcmlnZ2VyZWQgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLl9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRiSXNJbW1lZGlhdGVUcmlnZ2VyZWQgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcy5tYXAobVNpZGVFZmZlY3RzUHJvcGVydHkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKG1TaWRlRWZmZWN0c1Byb3BlcnR5LnNpZGVFZmZlY3RzLCBtU2lkZUVmZmVjdHNQcm9wZXJ0eS5jb250ZXh0KTtcblx0XHRcdFx0XHR9KSB8fCBbXVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChvRXJyb3IgPT4ge1xuXHRcdFx0XHRpZiAoYklzSW1tZWRpYXRlVHJpZ2dlcmVkKSB7XG5cdFx0XHRcdFx0TG9nLmRlYnVnKFwiRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZCBTaWRlRWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdCAqIFNpZGVFZmZlY3RzIGhhdmUgbm90IGJlZW4gdHJpZ2dlcmVkIHNpbmNlIHByZVJlcXVpc2l0ZSB2YWxpZGF0aW9uIGZhaWxzIHNvIHdlIG5lZWRcblx0XHRcdFx0XHQgKiB0byBrZWVwIHByZXZpb3VzbHkgZmFpbGVkIHJlcXVlc3QgYXMgRmFpbGVkIHJlcXVlc3QgKHRvIGJlIHJldHJpZ2dlciBvbiBuZXh0IGNoYW5nZSlcblx0XHRcdFx0XHQgKi9cblxuXHRcdFx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXNcblx0XHRcdFx0XHRcdC5maWx0ZXIobUltbWVkaWF0ZVNpZGVFZmZlY3RzID0+IG1JbW1lZGlhdGVTaWRlRWZmZWN0cy5wcmV2aW91c2x5RmFpbGVkID09PSB0cnVlKVxuXHRcdFx0XHRcdFx0LmZvckVhY2gobUltbWVkaWF0ZVNpZGVFZmZlY3RzID0+XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG1JbW1lZGlhdGVTaWRlRWZmZWN0cy5zaWRlRWZmZWN0cywgbUltbWVkaWF0ZVNpZGVFZmZlY3RzLmNvbnRleHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIFNpZGVFZmZlY3RzIHdpdGggYSByZWxhdGVkICdmb2N1cyBvdXQnIHRvIGEgZmllbGQgZ3JvdXAuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBoYW5kbGVGaWVsZEdyb3VwQ2hhbmdlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRXZlbnQgU0FQVUk1IEV2ZW50XG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFByb21pc2Ugb24gU2lkZUVmZmVjdHMgcmVxdWVzdChzKVxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0cHVibGljIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2Uob0V2ZW50OiBVSTVFdmVudCk6IFByb21pc2U8YW55PiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXMsXG5cdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10gPSBbXSxcblx0XHRcdGFGaWVsZEdyb3VwSWRzOiBzdHJpbmdbXSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJmaWVsZEdyb3VwSWRzXCIpO1xuXG5cdFx0Y29uc3QgZ2V0RmllbGRHcm91cFJlcXVlc3RQcm9taXNlID0gZnVuY3Rpb24ob0RlZmVycmVkU2lkZUVmZmVjdDogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlKSB7XG5cdFx0XHRsZXQgYklzUmVxdWVzdHNUcmlnZ2VyZWQgPSBmYWxzZTtcblx0XHRcdGNvbnN0IG9TaWRlRWZmZWN0UHJvcGVydHkgPSBvRGVmZXJyZWRTaWRlRWZmZWN0LnNpZGVFZmZlY3RQcm9wZXJ0eTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0O1xuXHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVR5cGUgPSB0aGF0Ll9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRjb25zdCBtRW50aXR5VHlwZSA9IHRoYXQuX2dldEVudGl0eVR5cGVGcm9tRlFOKHNFbnRpdHlUeXBlKTtcblxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKG9EZWZlcnJlZFNpZGVFZmZlY3QucHJvbWlzZXMpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGJJc1JlcXVlc3RzVHJpZ2dlcmVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdC8vRGVmZXJyZWQgU2lkZUVmZmVjdHMgYXJlIGV4ZWN1dGVkIG9ubHkgaWYgYWxsIHNvdXJjZVByb3BlcnRpZXMgaGF2ZSBubyByZWdpc3RlcmVkIGZhaWx1cmUuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0bUVudGl0eVR5cGUgJiZcblx0XHRcdFx0XHRcdChvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLlNvdXJjZVByb3BlcnRpZXMgYXMgUHJvcGVydHlQYXRoW10pLmV2ZXJ5KHNvdXJjZVByb3BlcnR5ID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKHNvdXJjZVByb3BlcnR5LnR5cGUgPT09IFwiUHJvcGVydHlQYXRoXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzSWQgPSB0aGF0Ll9nZW5lcmF0ZVN0YXR1c0luZGV4KG1FbnRpdHlUeXBlLCBzb3VyY2VQcm9wZXJ0eS52YWx1ZSwgb0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzSWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAhdGhhdC5fYVNvdXJjZVByb3BlcnRpZXNGYWlsdXJlLmhhcyhzSWQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhhdC5yZXF1ZXN0U2lkZUVmZmVjdHMob1NpZGVFZmZlY3RQcm9wZXJ0eS5zaWRlRWZmZWN0cywgb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChvRXJyb3IgPT4ge1xuXHRcdFx0XHRcdGlmIChiSXNSZXF1ZXN0c1RyaWdnZXJlZCkge1xuXHRcdFx0XHRcdFx0TG9nLmRlYnVnKFwiRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzIG9uIGNvbnRleHQgXCIgKyBzQ29udGV4dFBhdGgsIG9FcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoYXQuX21GaWVsZEdyb3VwUXVldWVbb1NpZGVFZmZlY3RQcm9wZXJ0eS5uYW1lXVtzQ29udGV4dFBhdGhdO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0YUZpZWxkR3JvdXBJZHMuZm9yRWFjaChzRmllbGRHcm91cElkID0+IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogc3RyaW5nIFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCIgaXMgYWRkZWQgdG8gdGhlIFNpZGVFZmZlY3RzIG5hbWUgZHVyaW5nIHRlbXBsYXRpbmcgdG8ga25vd1xuXHRcdFx0ICogaWYgdGhpcyBTaWRlRWZmZWN0cyBtdXN0IGJlIGltbWVkaWF0ZWx5IGV4ZWN1dGVkIHJlcXVlc3RlZCAob24gZmllbGQgY2hhbmdlKSBvciBtdXN0XG5cdFx0XHQgKiBiZSBkZWZlcnJlZCAob24gZmllbGQgZ3JvdXAgZm9jdXMgb3V0KVxuXHRcdFx0ICpcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgc1NpZGVFZmZlY3ROYW1lOiBzdHJpbmcgPSBzRmllbGRHcm91cElkLnJlcGxhY2UoXCIkJEltbWVkaWF0ZVJlcXVlc3RcIiwgXCJcIik7XG5cdFx0XHRjb25zdCBtQ29udGV4dERlZmVycmVkU2lkZUVmZmVjdHMgPSB0aGF0Ll9tRmllbGRHcm91cFF1ZXVlPy5bc1NpZGVFZmZlY3ROYW1lXTtcblx0XHRcdGlmIChtQ29udGV4dERlZmVycmVkU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMobUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzKS5mb3JFYWNoKHNDb250ZXh0UGF0aCA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0RlZmVycmVkU2lkZUVmZmVjdCA9IG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdO1xuXHRcdFx0XHRcdGlmICghb0RlZmVycmVkU2lkZUVmZmVjdC5wcm9jZXNzU3RhcnRlZCkge1xuXHRcdFx0XHRcdFx0b0RlZmVycmVkU2lkZUVmZmVjdC5wcm9jZXNzU3RhcnRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0cy5wdXNoKG9EZWZlcnJlZFNpZGVFZmZlY3QpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0cy5tYXAob0RlZmVycmVkU2lkZUVmZmVjdCA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRGaWVsZEdyb3VwUmVxdWVzdFByb21pc2Uob0RlZmVycmVkU2lkZUVmZmVjdCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIFNpZGVFZmZlY3RzIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBhZGRDb250cm9sU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNFbnRpdHlUeXBlIE5hbWUgb2YgdGhlIGVudGl0eSB3aGVyZSB0aGUgU2lkZUVmZmVjdHMgY29udHJvbCB3aWxsIGJlIHJlZ2lzdGVyZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9TaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byByZWdpc3Rlci4gRW5zdXJlIHRoZSBzb3VyY2VDb250cm9sSWQgbWF0Y2hlcyB0aGUgYXNzb2NpYXRlZCBTQVBVSTUgY29udHJvbCBJRC5cblx0ICpcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdHB1YmxpYyBhZGRDb250cm9sU2lkZUVmZmVjdHMoc0VudGl0eVR5cGU6IHN0cmluZywgb1NpZGVFZmZlY3RzOiBPbWl0PENvbnRyb2xTaWRlRWZmZWN0c1R5cGUsIFwiZnVsbHlRdWFsaWZpZWROYW1lXCI+KTogdm9pZCB7XG5cdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5hZGRDb250cm9sU2lkZUVmZmVjdHMoc0VudGl0eVR5cGUsIG9TaWRlRWZmZWN0cyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgcXVldWUgY29udGFpbmluZyB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgcmVtb3ZlRmFpbGVkU2lkZUVmZmVjdHNcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdHB1YmxpYyByZW1vdmVGYWlsZWRTaWRlRWZmZWN0cygpOiB2b2lkIHtcblx0XHR0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0IFNpZGVFZmZlY3RzIG9uIGEgc3BlY2lmaWMgY29udGV4dC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHJlcXVlc3RTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb1NpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIG5lZWQgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHJldHVybnMge29iamVjdH0gU2lkZUVmZmVjdHMgcmVxdWVzdCBvbiBTQVBVSTUgY29udGV4dFxuXHQgKi9cblx0QFB1YmxpY1xuXHRARmluYWxcblx0cHVibGljIHJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSwgb0NvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPGFueT4ge1xuXHRcdGxldCBmUmVzb2x2ZXI6IGFueSwgZlJlamVjdG9yOiBhbnk7XG5cdFx0Y29uc3Qgb1Byb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGZSZXNvbHZlciA9IHJlc29sdmU7XG5cdFx0XHRmUmVqZWN0b3IgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3QgYVRhcmdldHM6IGFueVtdID0gKChvU2lkZUVmZmVjdHMuVGFyZ2V0RW50aXRpZXMgYXMgYW55W10pIHx8IFtdKS5jb25jYXQoKG9TaWRlRWZmZWN0cy5UYXJnZXRQcm9wZXJ0aWVzIGFzIGFueVtdKSB8fCBbXSksXG5cdFx0XHRzVHJpZ2dlckFjdGlvbjogU3RyaW5nIHwgdW5kZWZpbmVkID0gKG9TaWRlRWZmZWN0cyBhcyBPRGF0YVNpZGVFZmZlY3RzVHlwZSkuVHJpZ2dlckFjdGlvbjtcblxuXHRcdGlmIChzVHJpZ2dlckFjdGlvbikge1xuXHRcdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKHNUcmlnZ2VyQWN0aW9uLCBvQ29udGV4dCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZVxuXHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhhVGFyZ2V0cywgb0NvbnRleHQpXG5cdFx0XHQudGhlbigoKSA9PiBmUmVzb2x2ZXIoKSlcblx0XHRcdC5jYXRjaCgob0Vycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5fYWRkRmFpbGVkU2lkZUVmZmVjdHMob1NpZGVFZmZlY3RzLCBvQ29udGV4dCk7XG5cdFx0XHRcdGZSZWplY3RvcihvRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRyZXR1cm4gb1Byb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyBTaWRlRWZmZWN0cyBjcmVhdGVkIGJ5IGEgY29udHJvbC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRyb2wgU0FQVUk1IENvbnRyb2xcblx0ICovXG5cdEBQdWJsaWNcblx0QEZpbmFsXG5cdHB1YmxpYyByZW1vdmVDb250cm9sU2lkZUVmZmVjdHMob0NvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHRjb25zdCBzQ29udHJvbElkID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBICYmIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIikgJiYgb0NvbnRyb2wuZ2V0SWQoKTtcblxuXHRcdGlmIChzQ29udHJvbElkKSB7XG5cdFx0XHR0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLnJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhzQ29udHJvbElkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBTaWRlRWZmZWN0cyB0byB0aGUgcXVldWUgb2YgdGhlIGZhaWxlZCBTaWRlRWZmZWN0c1xuXHQgKiBUaGUgU2lkZUVmZmVjdHMgd2lsbCBiZSByZXRyaWdnZXJlZCBvbiB0aGUgbmV4dCBjaGFuZ2Ugb24gdGhlIHNhbWUgY29udGV4dC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9hZGRGYWlsZWRTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb1NpZGVFZmZlY3RzIFNpZGVFZmZlY3RzIHRoYXQgbmVlZCB0byBiZSByZXRyaWdnZXJlZFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRleHQgQ29udGV4dCB3aGVyZSBTaWRlRWZmZWN0cyBoYXZlIGZhaWxlZFxuXHQgKi9cblx0QFByaXZhdGVcblx0QEZpbmFsXG5cdHByaXZhdGUgX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlLCBvQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aDogc3RyaW5nID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0gfHwgW107XG5cdFx0Y29uc3QgYklzTm90QWxyZWFkeUxpc3RlZCA9IHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdLmV2ZXJ5KFxuXHRcdFx0bUZhaWxlZFNpZGVFZmZlY3RzID0+IG9TaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWUgIT09IG1GYWlsZWRTaWRlRWZmZWN0cy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHQpO1xuXHRcdGlmIChiSXNOb3RBbHJlYWR5TGlzdGVkKSB7XG5cdFx0XHR0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc0NvbnRleHRQYXRoXS5wdXNoKG9TaWRlRWZmZWN0cyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgcHJvbWlzZSBmb3IgdGhlIGZpZWxkIGdyb3VwIHRoYXQgaXMgcmVxdWlyZWQgYmVmb3JlIHJlcXVlc3RpbmcgU2lkZUVmZmVjdHMuXG5cdCAqIElmIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIGFuZCBvbmx5IHRoZSBmaWVsZCByZXF1aXJlcyB0aGUgU2lkZUVmZmVjdHMgb24gdGhpcyBjb250ZXh0LCB0aGUgU2lkZUVmZmVjdHMgYXJlIHJlbW92ZWQgZnJvbSB0aGVcblx0ICogU2lkZUVmZmVjdHMgcXVldWUuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2VuZXJhdGVGaWVsZEdyb3VwUHJvbWlzZVxuXHQgKiBAcGFyYW0ge29iamVjdH0gbUV2ZW50RmllbGRQcm9wZXJ0aWVzIEZpZWxkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMge29iamVjdH0gUHJvbWlzZSB0byBiZSB1c2VkIGZvciB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRcblx0ICovXG5cdHByaXZhdGUgX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlKTogUHJvbWlzZTxhbnk+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblxuXHRcdGxldCBiUHJvbWlzZVN1Y2Nlc3MgPSB0cnVlO1xuXHRcdHJldHVybiBtRXZlbnRGaWVsZFByb3BlcnRpZXMucHJvbWlzZVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBiUHJvbWlzZVN1Y2Nlc3M7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRiUHJvbWlzZVN1Y2Nlc3MgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIGJQcm9taXNlU3VjY2Vzcztcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBOZWVkIHRvIHN0b3JlIHRoZSBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoaXMgZmllbGQgZm9yIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdFx0XHRcdCAqIHNpbmNlIGFsbCBTb3VyY2VQcm9wZXJ0aWVzIGZvciB0aGlzIGtpbmQgb2YgU2lkZUVmZmVjdHMgbXVzdCBiZSB2YWxpZFxuXHRcdFx0XHQgKi9cblx0XHRcdFx0dGhhdC5fc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhtRXZlbnRGaWVsZFByb3BlcnRpZXMuZmllbGQsIGJQcm9taXNlU3VjY2Vzcyk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHByb21pc2UgZm9yIHRoZSBmaWVsZCB0aGF0IGlzIHJlcXVpcmVkIGJlZm9yZSByZXF1ZXN0aW5nIGltbWVkaWF0ZSBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFByb21pc2UgdG8gYmUgdXNlZCBmb3IgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkXG5cdCAqL1xuXHRwcml2YXRlIF9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBvUHJvbWlzZSA9IG1FdmVudEZpZWxkUHJvcGVydGllcy5wcm9taXNlO1xuXHRcdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBJZiB0aGUgZmllbGQgZ2V0cyBhIEZpZWxkSGVscGVyLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgYWxsIGZpZWxkcyBjaGFuZ2VkIGJ5IHRoaXMgRmllbGRIZWxwZXIgaGF2ZSBiZWVuIHNldC5cblx0XHRcdCAqIFRvIGFjaGlldmUgdGhpcywgd2UgZW5zdXJlIHRoYXQgYWxsIHJlbGF0ZWQgYmluZGluZ3MgaGF2ZSBiZWVuIHJlc29sdmVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoaXMgcmVzb2x1dGlvbiBwcm9jZXNzIGlzIG5vdCBtYW5hZ2VkIGJ5IHRoZSBGaWVsZCBFdmVudCBQcm9taXNlLCBzbyBmb3IgZmFzdCB1c2VyIGFjdGlvbnMgKGxpa2UgYXV0b21hdGlvbikgaXQgY2FuIGxvY2sgdGhlIG1vZGVsXG5cdFx0XHQgKiBhbmQgbm8gcmVxdWVzdCBjYW4gYmUgZXhlY3V0ZWQuXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IG9GaWVsZCA9IG1FdmVudEZpZWxkUHJvcGVydGllcy5maWVsZDtcblx0XHRcdGNvbnN0IHNGaWVsZEhlbHBlcklkID0gb0ZpZWxkLmdldEZpZWxkSGVscCAmJiBvRmllbGQuZ2V0RmllbGRIZWxwKCk7XG5cdFx0XHRpZiAoc0ZpZWxkSGVscGVySWQpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlckhlbHA6IGFueSA9IHNhcC51aS5nZXRDb3JlKCkuYnlJZChzRmllbGRIZWxwZXJJZCk7XG5cdFx0XHRcdGlmIChvRmlsdGVySGVscCkge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRcdChvRmlsdGVySGVscC5nZXRPdXRQYXJhbWV0ZXJzKCkgYXMgYW55W10pLm1hcChvT3V0UGFyYW1ldGVyID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSBvT3V0UGFyYW1ldGVyLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nID8gb0JpbmRpbmcucmVxdWVzdFZhbHVlKCkgOiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtdKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBzdGF0dXMgaW5kZXguXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2VuZXJhdGVTdGF0dXNJbmRleFxuXHQgKiBAcGFyYW0ge29iamVjdH0gbUVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udGV4dCBTQVBVSTUgQ29udGV4dFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBJbmRleFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZTogRW50aXR5VHlwZSwgc1Byb3BlcnR5UGF0aDogc3RyaW5nLCBvQ29udGV4dD86IENvbnRleHQgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1Qcm9wZXJ0eSA9IG1FbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHRcdGlmIChtUHJvcGVydHkpIHtcblx0XHRcdGlmIChtUHJvcGVydHkgJiYgbVByb3BlcnR5Ll90eXBlID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdFx0cmV0dXJuIFttUHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lLCBzQ29udGV4dFBhdGhdLmpvaW4oXCJfX1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IG9uIHdoaWNoIFNpZGVFZmZlY3RzIGNhbiBiZSByZXF1ZXN0ZWQuXG5cdCAqIFRoZSBjb3JyZWN0IG9uZSBtdXN0IGhhdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVyICQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU291cmNlRmllbGQgRmllbGRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTaWRlRWZmZWN0RW50aXR5VHlwZSBUYXJnZXQgZW50aXR5IHR5cGUgb2YgdGhlIFNpZGVFZmZlY3RzIGFubm90YXRpb25cblx0ICogQHJldHVybnMge29iamVjdH0gU0FQVUk1IENvbnRleHRcblx0ICovXG5cdEBQcml2YXRlXG5cdEBGaW5hbFxuXHRwcml2YXRlIF9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob1NvdXJjZUZpZWxkOiBGaWVsZENvbnRyb2wsIHNTaWRlRWZmZWN0RW50aXR5VHlwZTogc3RyaW5nKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1NvdXJjZUZpZWxkLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0bGV0IG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgPSBvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRzRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRpZiAoc1NpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0b0NvbnRleHRGb3JTaWRlRWZmZWN0cyA9IChvQmluZGluZ0NvbnRleHQgYXMgYW55KS5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0aWYgKG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0c0VudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQ29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0aWYgKHNTaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRvQ29udGV4dEZvclNpZGVFZmZlY3RzID0gKG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgYXMgYW55KS5nZXRCaW5kaW5nKCkuZ2V0Q29udGV4dCgpO1xuXHRcdFx0XHRcdGlmIChvQ29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdFx0XHRzRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHRcdFx0aWYgKHNTaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb0NvbnRleHRGb3JTaWRlRWZmZWN0cyB8fCB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBFbnRpdHlUeXBlIGJhc2VkIG9uIGl0cyBmdWxseS1xdWFsaWZpZWQgbmFtZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNGdWxseVF1YWxpZmllZE5hbWUgVGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSBlbnRpdHkgdHlwZVxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RW50aXR5VHlwZUZyb21GUU4oc0Z1bGx5UXVhbGlmaWVkTmFtZTogc3RyaW5nKTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbUVudGl0eVR5cGUgPSAodGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRDb252ZXJ0ZWRNZXRhTW9kZWwoKSBhcyBDb252ZXJ0ZXJPdXRwdXQpLmVudGl0eVR5cGVzLmZpbmQob0VudGl0eVR5cGUgPT4ge1xuXHRcdFx0cmV0dXJuIG9FbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gc0Z1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbUVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvbWlzZSBvZiB0aGUgZmllbGQgdmFsaWRhdGlvbiB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgU2lkZUVmZmVjdHMgcHJvY2Vzcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRGaWVsZFByb21pc2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBGaWVsZCBjaGFuZ2UgZXZlbnRcblx0ICogQHJldHVybnMge29iamVjdH0gRmllbGQgcHJvbWlzZVxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRQcm9taXNlKG9FdmVudDogVUk1RXZlbnQpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHByb21pc2UgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKSB8fCBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRcdHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4ge1xuXHRcdFx0Y29uc3Qgb1Byb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdFx0aWYgKCFGaWVsZFJ1bnRpbWUuZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlKG9FdmVudCkuc3RhdGUudmFsaWRpdHkpIHtcblx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBvUHJvbWlzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBmaWVsZCB0aGF0IGFyZSByZXF1aXJlZCBmb3IgdGhlIFNpZGVFZmZlY3RzIHByb2Nlc3MuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RmllbGRQcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRXZlbnQgRmllbGQgY2hhbmdlIGV2ZW50XG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEZpZWxkIHByb3BlcnRpZXMgKGV2ZW50IGNoYW5nZSBwcm9taXNlLCBmaWVsZCwgU2lkZUVmZmVjdHMgcmVsYXRlZCB0byB0aGlzIGZpZWxkKVxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRQcm9wZXJ0aWVzKG9FdmVudDogVUk1RXZlbnQpOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlIHtcblx0XHRjb25zdCBvRmllbGQ6IEZpZWxkQ29udHJvbCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRwcm9taXNlOiB0aGlzLl9nZXRGaWVsZFByb21pc2Uob0V2ZW50KSxcblx0XHRcdGZpZWxkOiBvRmllbGQsXG5cdFx0XHRzaWRlRWZmZWN0c01hcDogdGhpcy5fZ2V0RmllbGRTaWRlRWZmZWN0c01hcChvRmllbGQpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBTaWRlRWZmZWN0cyBtYXBcblx0ICogVGhlc2UgU2lkZUVmZmVjdHMgYXJlXG5cdCAqIC0gbGlzdGVkIGludG8gRmllbGRHcm91cElkcyAoY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZSlcblx0ICogLSBnZW5lcmF0ZWQgYnkgYSBjb250cm9sIG9yIGNvbnRyb2xzIGFuZCB0aGF0IGNvbmZpZ3VyZSB0aGlzIGZpZWxkIGFzIFNvdXJjZVByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RmllbGRTaWRlRWZmZWN0c01hcFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ZpZWxkIEZpZWxkXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFNpZGVFZmZlY3RzIG1hcFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRTaWRlRWZmZWN0c01hcChvRmllbGQ6IEZpZWxkQ29udHJvbCk6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGNvbnN0IG1TaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9LFxuXHRcdFx0YUZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdID0gb0ZpZWxkLmdldEZpZWxkR3JvdXBJZHMoKSxcblx0XHRcdHNWaWV3RW50aXR5U2V0U2V0TmFtZSA9IHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0LFxuXHRcdFx0b1ZpZXdFbnRpdHlTZXQgPSAodGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRDb252ZXJ0ZWRNZXRhTW9kZWwoKSBhcyBDb252ZXJ0ZXJPdXRwdXQpLmVudGl0eVNldHMuZmluZChvRW50aXR5U2V0ID0+IHtcblx0XHRcdFx0cmV0dXJuIG9FbnRpdHlTZXQubmFtZSA9PT0gc1ZpZXdFbnRpdHlTZXRTZXROYW1lO1xuXHRcdFx0fSk7XG5cblx0XHQvLyBTaWRlRWZmZWN0cyBjb21pbmcgZnJvbSBhbiBPRGF0YSBTZXJ2aWNlXG5cdFx0YUZpZWxkR3JvdXBJZHMuZm9yRWFjaChzRmllbGRHcm91cElkID0+IHtcblx0XHRcdGNvbnN0IGJJc0ltbWVkaWF0ZTogYm9vbGVhbiA9IHNGaWVsZEdyb3VwSWQuaW5kZXhPZihcIiQkSW1tZWRpYXRlUmVxdWVzdFwiKSAhPT0gLTEsXG5cdFx0XHRcdHNOYW1lOiBzdHJpbmcgPSBzRmllbGRHcm91cElkLnJlcGxhY2UoXCIkJEltbWVkaWF0ZVJlcXVlc3RcIiwgXCJcIiksXG5cdFx0XHRcdGFTaWRlRWZmZWN0UGFydHM6IHN0cmluZ1tdID0gc05hbWUuc3BsaXQoXCIjXCIpLFxuXHRcdFx0XHRzU2lkZUVmZmVjdEVudGl0eVR5cGU6IHN0cmluZyA9IGFTaWRlRWZmZWN0UGFydHNbMF0sXG5cdFx0XHRcdHNTaWRlRWZmZWN0UGF0aDogc3RyaW5nID1cblx0XHRcdFx0XHRzU2lkZUVmZmVjdEVudGl0eVR5cGUgK1xuXHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TaWRlRWZmZWN0c1wiICtcblx0XHRcdFx0XHQoYVNpZGVFZmZlY3RQYXJ0cy5sZW5ndGggPT09IDIgPyBcIiNcIiArIGFTaWRlRWZmZWN0UGFydHNbMV0gOiBcIlwiKSxcblx0XHRcdFx0b1NpZGVFZmZlY3Q6IFNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZCA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhzU2lkZUVmZmVjdEVudGl0eVR5cGUpPy5bXG5cdFx0XHRcdFx0c1NpZGVFZmZlY3RQYXRoXG5cdFx0XHRcdF0sXG5cdFx0XHRcdG9Db250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkID0gdGhpcy5fZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKG9GaWVsZCwgc1NpZGVFZmZlY3RFbnRpdHlUeXBlKTtcblx0XHRcdGlmIChvU2lkZUVmZmVjdCAmJiBvQ29udGV4dCkge1xuXHRcdFx0XHRtU2lkZUVmZmVjdHNNYXBbc05hbWVdID0ge1xuXHRcdFx0XHRcdG5hbWU6IHNOYW1lLFxuXHRcdFx0XHRcdGltbWVkaWF0ZTogYklzSW1tZWRpYXRlLFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBvU2lkZUVmZmVjdCxcblx0XHRcdFx0XHRjb250ZXh0OiBvQ29udGV4dFxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly9TaWRlRWZmZWN0cyBjb21pbmcgZnJvbSBjb250cm9sKHMpXG5cdFx0aWYgKHNWaWV3RW50aXR5U2V0U2V0TmFtZSAmJiBvVmlld0VudGl0eVNldCkge1xuXHRcdFx0Y29uc3Qgc1ZpZXdFbnRpdHlUeXBlID0gb1ZpZXdFbnRpdHlTZXQuZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdG1GaWVsZFBhdGg6IGFueSA9IChvRmllbGQuZ2V0QWdncmVnYXRpb24oXCJjdXN0b21EYXRhXCIpIGFzIGFueVtdKS5maW5kKG9DdXN0b21EYXRhID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwic291cmNlUGF0aFwiO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0b0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgPSB0aGlzLl9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob0ZpZWxkLCBzVmlld0VudGl0eVR5cGUpO1xuXG5cdFx0XHRpZiAobUZpZWxkUGF0aCAmJiBvQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBzRmllbGRQYXRoID0gbUZpZWxkUGF0aC5nZXRWYWx1ZSgpLnJlcGxhY2UoXCIvXCIgKyBzVmlld0VudGl0eVNldFNldE5hbWUgKyBcIi9cIiwgXCJcIiksXG5cdFx0XHRcdFx0bUNvbnRyb2xFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRDb250cm9sRW50aXR5U2lkZUVmZmVjdHMoXG5cdFx0XHRcdFx0XHRzVmlld0VudGl0eVR5cGVcblx0XHRcdFx0XHQpIGFzIENvbnRyb2xTaWRlRWZmZWN0c0VudGl0eURpY3Rpb25hcnk7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG1Db250cm9sRW50aXR5VHlwZSkuZm9yRWFjaChzQ29udHJvbE5hbWUgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250cm9sU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSA9IG1Db250cm9sRW50aXR5VHlwZVtzQ29udHJvbE5hbWVdO1xuXHRcdFx0XHRcdGlmICgob0NvbnRyb2xTaWRlRWZmZWN0cy5Tb3VyY2VQcm9wZXJ0aWVzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhzRmllbGRQYXRoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc05hbWUgPSBzQ29udHJvbE5hbWUgKyBcIjo6XCIgKyBzVmlld0VudGl0eVR5cGU7XG5cdFx0XHRcdFx0XHRtU2lkZUVmZmVjdHNNYXBbc05hbWVdID0ge1xuXHRcdFx0XHRcdFx0XHRuYW1lOiBzTmFtZSxcblx0XHRcdFx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogb0NvbnRyb2xTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogb0NvbnRleHRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1TaWRlRWZmZWN0c01hcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBTaWRlRWZmZWN0cyB3aXRoIHJlbGF0ZWQgY2hhbmdlcyB0byBhIGZpZWxkXG5cdCAqIExpc3Q6IGdldHMgaW1tZWRpYXRlIFNpZGVFZmZlY3RzIHJlcXVlc3RzXG5cdCAqIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2luaXRpYWxpemVGaWVsZFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBtRXZlbnRGaWVsZFByb3BlcnRpZXMgRmllbGQgZXZlbnQgcHJvcGVydGllc1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiBpbW1lZGlhdGUgU2lkZUVmZmVjdHNcblx0ICovXG5cdHByaXZhdGUgX2luaXRpYWxpemVGaWVsZFNpZGVFZmZlY3RzKFxuXHRcdG1FdmVudEZpZWxkUHJvcGVydGllczogRmllbGRFdmVudFByb3BlcnR5VHlwZSxcblx0XHRvRmllbGRHcm91cFByZVJlcXVpc2l0ZT86IFByb21pc2U8YW55PlxuXHQpOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSB7XG5cdFx0Y29uc3QgbUZpZWxkU2lkZUVmZmVjdHNNYXAgPSBtRXZlbnRGaWVsZFByb3BlcnRpZXMuc2lkZUVmZmVjdHNNYXAsXG5cdFx0XHRvRmllbGRQcm9taXNlRm9yRmllbGRHcm91cCA9IHRoaXMuX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzKSwgLy8gUHJvbWlzZSBtYW5hZ2luZyBGaWVsZEdyb3VwIHJlcXVlc3RzIGlmIEZpZWxkIHByb21pc2UgZmFpbHNcblx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWU6IGFueSA9IHt9LFxuXHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlW10gPSBbXTtcblxuXHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlID0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHRPYmplY3Qua2V5cyhtRmllbGRTaWRlRWZmZWN0c01hcCkuZm9yRWFjaChzU2lkZUVmZmVjdE5hbWUgPT4ge1xuXHRcdFx0Y29uc3Qgb1NpZGVFZmZlY3RQcm9wZXJ0eTogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlID0gbUZpZWxkU2lkZUVmZmVjdHNNYXBbc1NpZGVFZmZlY3ROYW1lXSxcblx0XHRcdFx0c1NpZGVFZmZlY3RDb250ZXh0UGF0aCA9IG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dC5nZXRQYXRoKCksXG5cdFx0XHRcdGFGYWlsZWRTaWRlRWZmZWN0cyA9IHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzU2lkZUVmZmVjdENvbnRleHRQYXRoXTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHByZXZpb3VzbHkgZmFpbGVkIHJlcXVlc3QgZm9yIHRoaXMgY29udGV4dFxuXHRcdFx0aWYgKGFGYWlsZWRTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRkZWxldGUgdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdO1xuXHRcdFx0XHRtRmFpbGVkU2lkZUVmZmVjdHNOYW1lW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdID0ge307XG5cdFx0XHRcdGFGYWlsZWRTaWRlRWZmZWN0cy5mb3JFYWNoKG1GYWlsZWRTaWRlRWZmZWN0cyA9PiB7XG5cdFx0XHRcdFx0bUZhaWxlZFNpZGVFZmZlY3RzTmFtZVtzU2lkZUVmZmVjdENvbnRleHRQYXRoXVttRmFpbGVkU2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHRydWU7XG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdG5hbWU6IHNTaWRlRWZmZWN0TmFtZSxcblx0XHRcdFx0XHRcdHByZXZpb3VzbHlGYWlsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogbUZhaWxlZFNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0Y29udGV4dDogb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9TaWRlRWZmZWN0UHJvcGVydHkuaW1tZWRpYXRlKSB7XG5cdFx0XHRcdC8vIFNpZGVFZmZlY3RzIHdpbGwgYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZXZlbnQgcHJvbWlzZSB2YWxpZGF0aW9uXG5cdFx0XHRcdGlmICghbUZhaWxlZFNpZGVFZmZlY3RzTmFtZVtzU2lkZUVmZmVjdENvbnRleHRQYXRoXT8uW29TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lXSkge1xuXHRcdFx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBzU2lkZUVmZmVjdE5hbWUsXG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogb1NpZGVFZmZlY3RQcm9wZXJ0eS5zaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdGNvbnRleHQ6IG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBBZGQgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdG8gdGhlIHJlbGF0ZWQgZGljdGlvbmFyeVxuXHRcdFx0XHR0aGlzLl9tRmllbGRHcm91cFF1ZXVlW3NTaWRlRWZmZWN0TmFtZV0gPSB0aGlzLl9tRmllbGRHcm91cFF1ZXVlW3NTaWRlRWZmZWN0TmFtZV0gfHwge307XG5cdFx0XHRcdGNvbnN0IG1TaWRlRWZmZWN0Q29udGV4dFBhdGggPSB0aGlzLl9tRmllbGRHcm91cFF1ZXVlW3NTaWRlRWZmZWN0TmFtZV1bc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0gfHwge1xuXHRcdFx0XHRcdHByb21pc2VzOiBbXSxcblx0XHRcdFx0XHRzaWRlRWZmZWN0UHJvcGVydHk6IG9TaWRlRWZmZWN0UHJvcGVydHksXG5cdFx0XHRcdFx0cHJvY2Vzc1N0YXJ0ZWQ6IGZhbHNlXG5cdFx0XHRcdH07XG5cdFx0XHRcdG1TaWRlRWZmZWN0Q29udGV4dFBhdGgucHJvbWlzZXMgPSBtU2lkZUVmZmVjdENvbnRleHRQYXRoLnByb21pc2VzLmNvbmNhdChbXG5cdFx0XHRcdFx0b0ZpZWxkUHJvbWlzZUZvckZpZWxkR3JvdXAsXG5cdFx0XHRcdFx0b0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgYXMgUHJvbWlzZTxhbnk+XG5cdFx0XHRcdF0pO1xuXHRcdFx0XHR0aGlzLl9tRmllbGRHcm91cFF1ZXVlW3NTaWRlRWZmZWN0TmFtZV1bc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0gPSBtU2lkZUVmZmVjdENvbnRleHRQYXRoO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSB2YWxpZGF0aW9uIHN0YXR1cyBvZiBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gYSBmaWVsZCBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ZpZWxkIEZpZWxkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlN1Y2Nlc3MgU3RhdHVzIG9mIHRoZSBmaWVsZCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIF9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzKG9GaWVsZDogRmllbGRDb250cm9sLCBiU3VjY2VzczogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9GaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRjb25zdCBtRW50aXR5VHlwZSA9IHRoaXMuX2dldEVudGl0eVR5cGVGcm9tRlFOKHNFbnRpdHlUeXBlKTtcblx0XHRpZiAobUVudGl0eVR5cGUpIHtcblx0XHRcdC8vIFJldHJpZXZlcyBhbGwgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBmaWVsZFxuXHRcdFx0Y29uc3Qgb0ZpZWxkQmluZGluZzogYW55ID0gdGhpcy5fZ2V0QmluZGluZ0ZvckZpZWxkKG9GaWVsZCk7XG5cdFx0XHRjb25zdCBhRmllbGRQYXRocyA9IG9GaWVsZEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIilcblx0XHRcdFx0PyAob0ZpZWxkQmluZGluZy5nZXRCaW5kaW5ncygpIHx8IFtdKS5tYXAoKG9CaW5kaW5nOiBhbnkpID0+IG9CaW5kaW5nLnNQYXRoKVxuXHRcdFx0XHQ6IFtvRmllbGRCaW5kaW5nLmdldFBhdGgoKV07XG5cblx0XHRcdC8vIFN0b3JlcyBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzXG5cdFx0XHRhRmllbGRQYXRocy5mb3JFYWNoKChzRmllbGRQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3Qgc0lkID0gdGhpcy5fZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZSwgc0ZpZWxkUGF0aCwgb0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0aWYgKHNJZCkge1xuXHRcdFx0XHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZVtiU3VjY2VzcyA/IFwiZGVsZXRlXCIgOiBcImFkZFwiXShzSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBwcm9wZXJ0eSBiaW5kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRmllbGQgRmllbGRcblx0ICogQHJldHVybnMge0JpbmRpbmd9ICBCaW5kaW5nIHRvIHRoZSB2YWx1ZVxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0QmluZGluZ0ZvckZpZWxkKG9GaWVsZDogRmllbGRDb250cm9sKTogQmluZGluZyB7XG5cdFx0bGV0IHNCaW5kaW5nTmFtZSA9IFwidmFsdWVcIjtcblx0XHRpZiAob0ZpZWxkLmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRzQmluZGluZ05hbWUgPSBcInNlbGVjdGVkXCI7XG5cdFx0fSBlbHNlIGlmIChvRmllbGQuaXNBKFwic2FwLnVpLnVuaWZpZWQuRmlsZVVwbG9hZGVyXCIpKSB7XG5cdFx0XHRzQmluZGluZ05hbWUgPSBcInVwbG9hZFVybFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gb0ZpZWxkLmdldEJpbmRpbmcoc0JpbmRpbmdOYW1lKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb247XG4iXX0=
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
|
|
2
|
+
import Binding from "sap/ui/model/Binding";
|
|
3
|
+
import Context from "sap/ui/model/Context";
|
|
4
4
|
import { ControllerExtensionMetadata } from "sap/fe/core/controllerextensions";
|
|
5
5
|
import { UI5Class, Override, Public, Final, Private } from "../helpers/ClassSupport";
|
|
6
|
-
import { AppComponent
|
|
7
|
-
import
|
|
6
|
+
import { AppComponent } from "sap/fe/core";
|
|
7
|
+
import Control from "sap/ui/core/Control";
|
|
8
8
|
import {
|
|
9
9
|
SideEffectsType,
|
|
10
10
|
ControlSideEffectsType,
|
|
@@ -13,7 +13,8 @@ import {
|
|
|
13
13
|
} from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
14
14
|
import { FieldRuntime } from "sap/fe/macros/field";
|
|
15
15
|
import { ConverterOutput, PropertyPath, EntityType } from "@sap-ux/vocabularies-types";
|
|
16
|
-
import
|
|
16
|
+
import Log from "sap/base/Log";
|
|
17
|
+
import CommonUtils from "../CommonUtils";
|
|
17
18
|
|
|
18
19
|
type FieldControl = Control & {
|
|
19
20
|
getFieldHelp(): string;
|
|
@@ -29,7 +30,7 @@ type FieldEventPropertyType = {
|
|
|
29
30
|
type FieldSideEffectPropertyType = {
|
|
30
31
|
name: string;
|
|
31
32
|
immediate?: boolean;
|
|
32
|
-
context: Context
|
|
33
|
+
context: Context;
|
|
33
34
|
sideEffects: SideEffectsType;
|
|
34
35
|
previouslyFailed?: boolean;
|
|
35
36
|
};
|
|
@@ -264,7 +265,7 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
264
265
|
*/
|
|
265
266
|
@Public
|
|
266
267
|
@Final
|
|
267
|
-
public requestSideEffects(oSideEffects: SideEffectsType, oContext: Context
|
|
268
|
+
public requestSideEffects(oSideEffects: SideEffectsType, oContext: Context): Promise<any> {
|
|
268
269
|
let fResolver: any, fRejector: any;
|
|
269
270
|
const oPromise = new Promise(function(resolve, reject) {
|
|
270
271
|
fResolver = resolve;
|
|
@@ -316,7 +317,7 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
316
317
|
*/
|
|
317
318
|
@Private
|
|
318
319
|
@Final
|
|
319
|
-
private _addFailedSideEffects(oSideEffects: SideEffectsType, oContext: Context
|
|
320
|
+
private _addFailedSideEffects(oSideEffects: SideEffectsType, oContext: Context): void {
|
|
320
321
|
const sContextPath: string = oContext.getPath();
|
|
321
322
|
this._mFailedSideEffects[sContextPath] = this._mFailedSideEffects[sContextPath] || [];
|
|
322
323
|
const bIsNotAlreadyListed = this._mFailedSideEffects[sContextPath].every(
|
|
@@ -404,8 +405,8 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
404
405
|
* @param {object} oContext SAPUI5 Context
|
|
405
406
|
* @returns {string | undefined} Index
|
|
406
407
|
*/
|
|
407
|
-
private _generateStatusIndex(mEntityType: EntityType, sPropertyPath: string, oContext
|
|
408
|
-
const sContextPath = oContext
|
|
408
|
+
private _generateStatusIndex(mEntityType: EntityType, sPropertyPath: string, oContext?: Context | null): string | undefined {
|
|
409
|
+
const sContextPath = oContext?.getPath();
|
|
409
410
|
const mProperty = mEntityType.resolvePath(sPropertyPath);
|
|
410
411
|
if (mProperty) {
|
|
411
412
|
if (mProperty && mProperty._type === "Property") {
|
|
@@ -427,7 +428,7 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
427
428
|
*/
|
|
428
429
|
@Private
|
|
429
430
|
@Final
|
|
430
|
-
private _getContextForSideEffects(oSourceField: FieldControl, sSideEffectEntityType: string): Context
|
|
431
|
+
private _getContextForSideEffects(oSourceField: FieldControl, sSideEffectEntityType: string): Context | undefined {
|
|
431
432
|
const oBindingContext = oSourceField.getBindingContext();
|
|
432
433
|
let oContextForSideEffects = oBindingContext,
|
|
433
434
|
sEntityType = this._oSideEffectsService.getEntityTypeFromContext(oBindingContext);
|
|
@@ -537,7 +538,7 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
537
538
|
oSideEffect: SideEffectsType | undefined = this._oSideEffectsService.getODataEntitySideEffects(sSideEffectEntityType)?.[
|
|
538
539
|
sSideEffectPath
|
|
539
540
|
],
|
|
540
|
-
oContext: Context
|
|
541
|
+
oContext: Context | undefined = this._getContextForSideEffects(oField, sSideEffectEntityType);
|
|
541
542
|
if (oSideEffect && oContext) {
|
|
542
543
|
mSideEffectsMap[sName] = {
|
|
543
544
|
name: sName,
|
|
@@ -554,7 +555,7 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
554
555
|
mFieldPath: any = (oField.getAggregation("customData") as any[]).find(oCustomData => {
|
|
555
556
|
return oCustomData.getKey() === "sourcePath";
|
|
556
557
|
}),
|
|
557
|
-
oContext: Context
|
|
558
|
+
oContext: Context | undefined = this._getContextForSideEffects(oField, sViewEntityType);
|
|
558
559
|
|
|
559
560
|
if (mFieldPath && oContext) {
|
|
560
561
|
const sFieldPath = mFieldPath.getValue().replace("/" + sViewEntitySetSetName + "/", ""),
|
|
@@ -660,7 +661,7 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
660
661
|
// Retrieves all properties used by the field
|
|
661
662
|
const oFieldBinding: any = this._getBindingForField(oField);
|
|
662
663
|
const aFieldPaths = oFieldBinding.isA("sap.ui.model.CompositeBinding")
|
|
663
|
-
? (
|
|
664
|
+
? (oFieldBinding.getBindings() || []).map((oBinding: any) => oBinding.sPath)
|
|
664
665
|
: [oFieldBinding.getPath()];
|
|
665
666
|
|
|
666
667
|
// Stores status for all properties
|
|
@@ -680,13 +681,13 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
680
681
|
* @returns {Binding} Binding to the value
|
|
681
682
|
*/
|
|
682
683
|
private _getBindingForField(oField: FieldControl): Binding {
|
|
683
|
-
let
|
|
684
|
-
if (oField.isA
|
|
685
|
-
|
|
686
|
-
} else {
|
|
687
|
-
|
|
684
|
+
let sBindingName = "value";
|
|
685
|
+
if (oField.isA("sap.m.CheckBox")) {
|
|
686
|
+
sBindingName = "selected";
|
|
687
|
+
} else if (oField.isA("sap.ui.unified.FileUploader")) {
|
|
688
|
+
sBindingName = "uploadUrl";
|
|
688
689
|
}
|
|
689
|
-
return
|
|
690
|
+
return oField.getBinding(sBindingName);
|
|
690
691
|
}
|
|
691
692
|
}
|
|
692
693
|
|
|
@@ -38,8 +38,9 @@
|
|
|
38
38
|
|
|
39
39
|
<template:if test="{= !${parameter>$isCollection} }">
|
|
40
40
|
<template:then>
|
|
41
|
+
<!--The payload of FieldBaseDelegate is used to control the fallback feature 'retrieveTextFromValueList' -->
|
|
41
42
|
<mdc:Field
|
|
42
|
-
delegate="{name:
|
|
43
|
+
delegate="{name:'sap/fe/macros/FieldBaseDelegate', payload:{retrieveTextFromValueList:true}}"
|
|
43
44
|
unittest:id="ActionParameterDialogFieldExpressionTest"
|
|
44
45
|
id="{= ID.generate(['APD_', ${parameter>$Name}]) }"
|
|
45
46
|
value="{parameter>@@MODEL.format}"
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
sap.ui.define(["sap/ui/core/CommandExecution", "sap/base/Log", "sap/ui/core/Element", "sap/ui/core/Shortcut"], function(
|
|
6
7
|
CommandExecution,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
sap.ui.define(
|
|
6
7
|
["sap/m/QuickViewPage", "sap/m/Button", "sap/fe/core/CommonUtils", "sap/fe/macros/DelegateUtil", "sap/fe/core/helpers/KeepAliveHelper"],
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
6
|
sap.ui.define(
|
|
6
7
|
[
|
|
@@ -110,9 +111,12 @@ sap.ui.define(
|
|
|
110
111
|
|
|
111
112
|
DataLossOrDraftDiscardHandler.discardDraft = function(oController, bSkipBindingToView) {
|
|
112
113
|
var oParamsContext = oController.getView().getBindingContext();
|
|
113
|
-
var mParams = {
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
var mParams = {
|
|
115
|
+
skipBackNavigation: true,
|
|
116
|
+
skipDiscardPopover: true,
|
|
117
|
+
skipBindingToView: bSkipBindingToView !== undefined ? bSkipBindingToView : true
|
|
118
|
+
};
|
|
119
|
+
|
|
116
120
|
return oController.editFlow.cancelDocument(oParamsContext, mParams);
|
|
117
121
|
};
|
|
118
122
|
|
|
@@ -1,14 +1,23 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
|
|
4
5
|
*/
|
|
5
|
-
sap.ui.define(["sap/ui/core/Control", "sap/ui/base/ManagedObjectObserver"], function(
|
|
6
|
+
sap.ui.define(["sap/ui/core/Control", "sap/ui/base/ManagedObjectObserver", "sap/ui/core/TextAlign", "sap/m/Text"], function(
|
|
7
|
+
Control,
|
|
8
|
+
ManagedObjectObserver,
|
|
9
|
+
TextAlign,
|
|
10
|
+
Text
|
|
11
|
+
) {
|
|
6
12
|
"use strict";
|
|
7
13
|
|
|
8
14
|
return Control.extend("sap.fe.core.controls.FieldWrapper", {
|
|
9
15
|
metadata: {
|
|
10
16
|
interfaces: ["sap.ui.core.IFormContent"],
|
|
11
17
|
properties: {
|
|
18
|
+
textAlign: {
|
|
19
|
+
type: "sap.ui.core.TextAlign"
|
|
20
|
+
},
|
|
12
21
|
width: {
|
|
13
22
|
type: "sap.ui.core.CSSSize",
|
|
14
23
|
defaultValue: null
|
|
@@ -91,9 +100,9 @@ sap.ui.define(["sap/ui/core/Control", "sap/ui/base/ManagedObjectObserver"], func
|
|
|
91
100
|
apiVersion: 2,
|
|
92
101
|
render: function(oRm, oControl) {
|
|
93
102
|
oRm.openStart("div", oControl);
|
|
103
|
+
oRm.style("text-align", oControl.getTextAlign());
|
|
94
104
|
if (oControl.getEditMode() === "Display") {
|
|
95
105
|
oRm.style("width", oControl.getWidth());
|
|
96
|
-
oRm.style("display", "inline-block");
|
|
97
106
|
oRm.openEnd();
|
|
98
107
|
var oContentDisplayControl = oControl.getContentDisplay();
|
|
99
108
|
// we only check empty trigger if the control doesnt display anything when there is no value
|
|
@@ -107,24 +116,11 @@ sap.ui.define(["sap/ui/core/Control", "sap/ui/base/ManagedObjectObserver"], func
|
|
|
107
116
|
return !oContentDisplayControl.isA(sBlockControlType);
|
|
108
117
|
});
|
|
109
118
|
if (bCheckEmptyTrigger && oContentDisplayControl && !oControl.getEmptyIndicatorTrigger()) {
|
|
110
|
-
var
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
oRm.
|
|
115
|
-
oRm.text(oResourceBundle.getText("T_FIELDWRAPPER_NO_VALUE"));
|
|
116
|
-
oRm.close("span");
|
|
117
|
-
|
|
118
|
-
// element for empty indicator
|
|
119
|
-
oRm.openStart("span");
|
|
120
|
-
oRm.attr("aria-hidden", "true");
|
|
121
|
-
oRm.attr("emptyindicator", oResourceBundle.getText("T_FIELDWRAPPER_EMPTY_INDICATOR"));
|
|
122
|
-
oRm.class("sapMText");
|
|
123
|
-
oRm.class("sapUiSelectable");
|
|
124
|
-
oRm.class("sapMTextMaxWidth");
|
|
125
|
-
oRm.class("sapUiMdcFieldBaseEmpty");
|
|
126
|
-
oRm.openEnd();
|
|
127
|
-
oRm.close("span");
|
|
119
|
+
var oInvisibleText = new Text({
|
|
120
|
+
text: "",
|
|
121
|
+
emptyIndicatorMode: "On"
|
|
122
|
+
});
|
|
123
|
+
oRm.renderControl(oInvisibleText);
|
|
128
124
|
} else {
|
|
129
125
|
oRm.renderControl(oControl.getContentDisplay()); // render the child Control for display
|
|
130
126
|
}
|
|
@@ -135,7 +131,6 @@ sap.ui.define(["sap/ui/core/Control", "sap/ui/base/ManagedObjectObserver"], func
|
|
|
135
131
|
// oRm.class("sapUiMdcFieldBaseMoreFields");
|
|
136
132
|
// }
|
|
137
133
|
oRm.style("width", oControl.getWidth());
|
|
138
|
-
oRm.style("display", "inline-block");
|
|
139
134
|
oRm.openEnd();
|
|
140
135
|
for (var i = 0; i < aContentEdit.length; i++) {
|
|
141
136
|
var oContent = aContentEdit[i]; // render the child Control for edit
|