@sapui5/sap.fe.core 1.103.0 → 1.104.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +12 -5
- package/src/sap/fe/core/AppComponent.ts +9 -3
- package/src/sap/fe/core/AppStateHandler.js +74 -62
- package/src/sap/fe/core/AppStateHandler.ts +24 -29
- package/src/sap/fe/core/CommonUtils.js +10 -34
- package/src/sap/fe/core/CommonUtils.ts +10 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +582 -207
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +237 -88
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +4 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +257 -219
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +103 -108
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +80 -54
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +40 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +28 -26
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +89 -47
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +85 -48
- package/src/sap/fe/core/controllerextensions/MassEdit.js +2 -2
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Share.js +153 -122
- package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
- package/src/sap/fe/core/controllerextensions/ViewState.js +139 -73
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -90
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +18 -13
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +17 -15
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +88 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +105 -31
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -4
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +28 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +10 -17
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -6
- package/src/sap/fe/core/controls/FileWrapper.js +6 -1
- package/src/sap/fe/core/controls/FileWrapper.ts +4 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +15 -4
- package/src/sap/fe/core/converters/MetaModelConverter.ts +10 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +4 -8
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +4 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +25 -30
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +9 -14
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
- package/src/sap/fe/core/converters/controls/Common/Table.js +8 -15
- package/src/sap/fe/core/converters/controls/Common/Table.ts +14 -30
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -3
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +27 -15
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -27
- package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
- package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
- package/src/sap/fe/core/helpers/BindingToolkit.js +36 -13
- package/src/sap/fe/core/helpers/BindingToolkit.ts +37 -11
- package/src/sap/fe/core/helpers/ClassSupport.js +30 -2
- package/src/sap/fe/core/helpers/ClassSupport.ts +23 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +94 -89
- package/src/sap/fe/core/helpers/MassEditHelper.ts +128 -157
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +4 -37
- package/src/sap/fe/core/messagebundle_ar.properties +20 -40
- package/src/sap/fe/core/messagebundle_bg.properties +20 -40
- package/src/sap/fe/core/messagebundle_ca.properties +20 -40
- package/src/sap/fe/core/messagebundle_cs.properties +20 -40
- package/src/sap/fe/core/messagebundle_cy.properties +20 -40
- package/src/sap/fe/core/messagebundle_da.properties +20 -40
- package/src/sap/fe/core/messagebundle_de.properties +20 -40
- package/src/sap/fe/core/messagebundle_el.properties +20 -40
- package/src/sap/fe/core/messagebundle_en.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +22 -18
- package/src/sap/fe/core/messagebundle_es.properties +22 -42
- package/src/sap/fe/core/messagebundle_es_MX.properties +20 -40
- package/src/sap/fe/core/messagebundle_et.properties +20 -40
- package/src/sap/fe/core/messagebundle_fi.properties +20 -40
- package/src/sap/fe/core/messagebundle_fr.properties +21 -41
- package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -40
- package/src/sap/fe/core/messagebundle_hi.properties +20 -40
- package/src/sap/fe/core/messagebundle_hr.properties +20 -40
- package/src/sap/fe/core/messagebundle_hu.properties +20 -40
- package/src/sap/fe/core/messagebundle_id.properties +20 -40
- package/src/sap/fe/core/messagebundle_it.properties +20 -40
- package/src/sap/fe/core/messagebundle_iw.properties +20 -40
- package/src/sap/fe/core/messagebundle_ja.properties +20 -40
- package/src/sap/fe/core/messagebundle_kk.properties +20 -40
- package/src/sap/fe/core/messagebundle_ko.properties +25 -45
- package/src/sap/fe/core/messagebundle_lt.properties +20 -40
- package/src/sap/fe/core/messagebundle_lv.properties +20 -40
- package/src/sap/fe/core/messagebundle_ms.properties +20 -40
- package/src/sap/fe/core/messagebundle_nl.properties +22 -42
- package/src/sap/fe/core/messagebundle_no.properties +20 -40
- package/src/sap/fe/core/messagebundle_pl.properties +21 -41
- package/src/sap/fe/core/messagebundle_pt.properties +21 -41
- package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -40
- package/src/sap/fe/core/messagebundle_ro.properties +20 -40
- package/src/sap/fe/core/messagebundle_ru.properties +20 -40
- package/src/sap/fe/core/messagebundle_sh.properties +20 -40
- package/src/sap/fe/core/messagebundle_sk.properties +20 -40
- package/src/sap/fe/core/messagebundle_sl.properties +20 -40
- package/src/sap/fe/core/messagebundle_sv.properties +20 -40
- package/src/sap/fe/core/messagebundle_th.properties +20 -40
- package/src/sap/fe/core/messagebundle_tr.properties +20 -40
- package/src/sap/fe/core/messagebundle_uk.properties +20 -40
- package/src/sap/fe/core/messagebundle_vi.properties +20 -40
- package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -40
- package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -40
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +96 -68
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +58 -59
- package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -7
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
- package/src/sap/fe/core/services/ShellServicesFactory.js +21 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +211 -190
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +114 -120
- package/src/sap/fe/core/templating/FilterHelper.js +7 -7
- package/src/sap/fe/core/templating/FilterHelper.ts +5 -5
- package/src/sap/fe/core/templating/UIFormatters.js +5 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapui5/sap.fe.core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.104.1",
|
|
4
4
|
"description": "SAPUI5 Library sap.fe.core",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "SAP SE (https://www.sap.com)",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"copy-dependency": "copyfiles -u 5 \"../../lib/annotation-converter-ui5/ui5-dist/**/*.js\" target/classes/META-INF/resources",
|
|
12
12
|
"prepare-npm-sources": "copyfiles -u 5 \"../../lib/annotation-converter-ui5/ui5-dist/**/*.js\" target/npm-sources/src && babel target/npm-sources/src --out-dir target/npm-sources/src --extensions \".ts\" --config-file ../../.babelrc",
|
|
13
13
|
"prepare-ts-class-doc": "ts-node ../../docbuilder/prepareTSClassDoc sap.fe.core",
|
|
14
|
-
"prepare-ui5-build-sources": "copyfiles -u 5 \"../../lib/annotation-converter-ui5/ui5-dist/**/*.js\" target/ui5-build-tmp/src && babel src --out-dir target/ui5-build-tmp/src --extensions \".ts\" --config-file ../../.babelrc && babel test --out-dir target/ui5-build-tmp/test --extensions \".ts\" --config-file ../../.babelrc",
|
|
14
|
+
"prepare-ui5-build-sources": "copyfiles -u 5 \"../../lib/annotation-converter-ui5/ui5-dist/**/*.js\" target/ui5-build-tmp/src && babel target/ui5-build-tmp/src --out-dir target/ui5-build-tmp/src --extensions \".ts\" --config-file ../../.babelrc && babel target/ui5-build-tmp/test --out-dir target/ui5-build-tmp/test --extensions \".ts\" --config-file ../../.babelrc",
|
|
15
15
|
"test": "jest --maxWorkers=4",
|
|
16
16
|
"test-refs": "jest --runInBand --config jest.config-refs.js",
|
|
17
17
|
"test-updateSnapshots": "jest --maxWorkers=4 -u",
|
|
@@ -25,6 +25,6 @@
|
|
|
25
25
|
"@babel/cli": "^7.14.8",
|
|
26
26
|
"@ui5/cli": "^2.14.0",
|
|
27
27
|
"copyfiles": "2.2.0",
|
|
28
|
-
"ts-node": "^
|
|
28
|
+
"ts-node": "^10.8.1"
|
|
29
29
|
}
|
|
30
30
|
}
|
package/src/sap/fe/core/.library
CHANGED
|
@@ -336,7 +336,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
336
336
|
};
|
|
337
337
|
|
|
338
338
|
_proto.destroy = function destroy() {
|
|
339
|
-
var _UIComponent$prototyp;
|
|
339
|
+
var _this$getRoutingServi, _UIComponent$prototyp;
|
|
340
340
|
|
|
341
341
|
// LEAKS, with workaround for some Flex / MDC issue
|
|
342
342
|
try {
|
|
@@ -361,9 +361,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
361
361
|
|
|
362
362
|
|
|
363
363
|
var oMainModel = this.oModels[undefined];
|
|
364
|
-
var oHeaders
|
|
364
|
+
var oHeaders;
|
|
365
365
|
|
|
366
|
-
|
|
366
|
+
if (oMainModel.oRequestor) {
|
|
367
|
+
oHeaders = jQuery.extend({}, oMainModel.oRequestor.mHeaders);
|
|
368
|
+
} // As we need to cleanup the application / handle the dirty object we need to call our cleanup before the models are destroyed
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
(_this$getRoutingServi = this.getRoutingService()) === null || _this$getRoutingServi === void 0 ? void 0 : _this$getRoutingServi.beforeExit();
|
|
367
372
|
|
|
368
373
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
369
374
|
args[_key2] = arguments[_key2];
|
|
@@ -371,7 +376,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
371
376
|
|
|
372
377
|
(_UIComponent$prototyp = _UIComponent.prototype.destroy).call.apply(_UIComponent$prototyp, [this].concat(args));
|
|
373
378
|
|
|
374
|
-
oMainModel.oRequestor
|
|
379
|
+
if (oHeaders && oMainModel.oRequestor) {
|
|
380
|
+
oMainModel.oRequestor.mHeaders = oHeaders;
|
|
381
|
+
}
|
|
375
382
|
};
|
|
376
383
|
|
|
377
384
|
_proto.getComponentData = function getComponentData() {
|
|
@@ -418,4 +425,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/AppStateHandler", "sap/fe/core/contr
|
|
|
418
425
|
}(UIComponent), _class2.instanceMap = {}, _temp)) || _class);
|
|
419
426
|
return AppComponent;
|
|
420
427
|
}, false);
|
|
421
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcENvbXBvbmVudC50cyJdLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJST1VURVJDTEFTUyIsIk5BVkNPTlRBSU5FUiIsIkFwcENvbXBvbmVudCIsImRlZmluZVVJNUNsYXNzIiwiaW50ZXJmYWNlcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0Iiwic2VydmljZXMiLCJyZXNvdXJjZU1vZGVsIiwiZmFjdG9yeU5hbWUiLCJyb3V0aW5nU2VydmljZSIsInN0YXJ0dXAiLCJzaGVsbFNlcnZpY2VzIiwiU2hlbGxVSVNlcnZpY2UiLCJuYXZpZ2F0aW9uU2VydmljZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiYXN5bmNDb21wb25lbnRTZXJ2aWNlIiwicm9vdFZpZXciLCJ2aWV3TmFtZSIsInR5cGUiLCJhc3luYyIsImlkIiwicm91dGluZyIsImNvbnRyb2xJZCIsInJvdXRlckNsYXNzIiwidmlld1R5cGUiLCJjb250cm9sQWdncmVnYXRpb24iLCJjb250YWluZXJPcHRpb25zIiwicHJvcGFnYXRlTW9kZWwiLCJkZXNpZ250aW1lIiwic3RhcnR1cE1vZGUiLCJOb3JtYWwiLCJfaXNGY2xFbmFibGVkIiwib01hbmlmZXN0VUk1IiwiZ2V0TWV0YWRhdGEiLCJnZXRNYW5pZmVzdEVudHJ5IiwiZ2V0Um91dGVyUHJveHkiLCJfb1JvdXRlclByb3h5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiX29BcHBTdGF0ZUhhbmRsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q29udGVudCIsImdldFN0YXJ0dXBNb2RlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJDcmVhdGUiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwiRGVlcGxpbmsiLCJpbml0IiwidWlNb2RlbCIsIkpTT05Nb2RlbCIsImVkaXRNb2RlIiwiRWRpdE1vZGUiLCJEaXNwbGF5IiwiaXNFZGl0YWJsZSIsImRyYWZ0U3RhdHVzIiwiRHJhZnRTdGF0dXMiLCJDbGVhciIsImJ1c3kiLCJidXN5TG9jYWwiLCJwYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJzZXRNb2RlbCIsImJJbml0aWFsaXplUm91dGluZyIsInVuZGVmaW5lZCIsIlJvdXRlclByb3h5IiwiQXBwU3RhdGVIYW5kbGVyIiwiX29EaWFnbm9zdGljcyIsIkRpYWdub3N0aWNzIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJlbnRpdHlDb250YWluZXIiLCJnZXRNZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiTG9nIiwiaW5mbyIsImluZGV4T2YiLCJFcnJvciIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImFkZFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImluc3RhbmNlTWFwIiwiZ2V0SWQiLCJvblNlcnZpY2VzU3RhcnRlZCIsImZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiIsInRoZW4iLCJhdHRhY2hSb3V0ZU1hdGNoZXJzIiwiZ2V0Um91dGVyIiwiaW5pdGlhbGl6ZSIsImNhdGNoIiwiZXJyb3IiLCJvUmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiZGlzcGxheU1lc3NhZ2VQYWdlIiwiZ2V0VGV4dCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiRkNMTGV2ZWwiLCJnZXRSb3V0aW5nU2VydmljZSIsImluaXRpYWxpemVSb3V0aW5nIiwiYXR0YWNoQWZ0ZXJJbml0IiwiZXJyIiwiZXhpdCIsImRlc3Ryb3kiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImdldERpYWdub3N0aWNzIiwiVmFsdWVMaXN0SGVscGVyIiwiaW5pdGlhbGl6ZUNhY2hlZFZhbHVlSGVscCIsIndpbmRvdyIsIl9yb3V0aW5nIiwiZSIsIm9NYWluTW9kZWwiLCJvTW9kZWxzIiwib0hlYWRlcnMiLCJqUXVlcnkiLCJleHRlbmQiLCJvUmVxdWVzdG9yIiwibUhlYWRlcnMiLCJiZWZvcmVFeGl0IiwiYXJncyIsImdldENvbXBvbmVudERhdGEiLCJnZXRTaGVsbFNlcnZpY2VzIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwib0NvbXBvbmVudERhdGEiLCJvU3RhcnRVcFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzdG9yZSIsInZpZXdTdGF0ZSIsIm9uUmVzdG9yZSIsInN1c3BlbmQiLCJvblN1c3BlbmQiLCJVSUNvbXBvbmVudCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQXNCQSxNQUFNQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0QsV0FBNUI7QUFFQSxNQUFNRSxPQUFPLEdBQUc7QUFDZkMsSUFBQUEsR0FBRyxFQUFFO0FBQ0pDLE1BQUFBLFFBQVEsRUFBRSx5Q0FETjtBQUVKQyxNQUFBQSxXQUFXLEVBQUU7QUFGVCxLQURVO0FBS2ZDLElBQUFBLFlBQVksRUFBRTtBQUNiRixNQUFBQSxRQUFRLEVBQUUsa0RBREc7QUFFYkMsTUFBQUEsV0FBVyxFQUFFO0FBRkE7QUFMQyxHQUFoQjtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O01BcUVNRSxZLFdBcEVMQyxjQUFjLENBQUMsMEJBQUQsRUFBNkI7QUFDM0NDLElBQUFBLFVBQVUsRUFBRSxDQUFDLG1DQUFELENBRCtCO0FBRTNDQyxJQUFBQSxNQUFNLEVBQUU7QUFDUEMsTUFBQUEsU0FBUyxFQUFFO0FBREosS0FGbUM7QUFLM0NDLElBQUFB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U0FBaEQ7QUFDQSxLOzs7SUFuU3lCQyxXLFdBQ25CekQsVyxHQUE0QyxFO1NBcVNyQ3JGLFkiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFwcFN0YXRlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwU3RhdGVIYW5kbGVyXCI7XG5pbXBvcnQgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGRlbGV0ZU1vZGVsQ2FjaGVEYXRhIH0gZnJvbSBcIi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBTZW1hbnRpY0RhdGVPcGVyYXRvcnMgZnJvbSBcIi4vaGVscGVycy9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcblxuY29uc3QgU3RhcnR1cE1vZGUgPSBsaWJyYXJ5LlN0YXJ0dXBNb2RlO1xuXG5jb25zdCBOQVZDT05GID0ge1xuXHRGQ0w6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiXG5cdH0sXG5cdE5BVkNPTlRBSU5FUjoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5tLnJvdXRpbmcuUm91dGVyXCJcblx0fVxufTtcblxuLyoqXG4gKiBNYWluIGNsYXNzIGZvciBjb21wb25lbnRzIHVzZWQgZm9yIGFuIGFwcGxpY2F0aW9uIGluIFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqXG4gKiBBcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHVzaW5nIHRoZSB0ZW1wbGF0ZXMgYW5kIGJ1aWxkaW5nIGJsb2NrcyBwcm92aWRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMgc2hvdWxkIGNyZWF0ZSB0aGVpciBhcHBzIGJ5IGV4dGVuZGluZyB0aGlzIGNvbXBvbmVudC5cbiAqIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IHNlcnZpY2VzIHRoYXQgeW91IG5lZWQgZm9yIHRoZSBidWlsZGluZyBibG9ja3MgYW5kIHRlbXBsYXRlcyB0byB3b3JrIHByb3Blcmx5IGFyZSBzdGFydGVkLlxuICpcbiAqIFdoZW4geW91IHVzZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYXMgdGhlIGJhc2UgY29tcG9uZW50LCB5b3UgYWxzbyBuZWVkIHRvIHVzZSBhIHJvb3RWaWV3LiBTQVAgRmlvcmkgZWxlbWVudHMgcHJvdmlkZXMgdHdvIG9wdGlvbnM6IDxici8+XG4gKiAgLSBzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5OYXZDb250YWluZXIgd2hlbiB1c2luZyBzYXAubS5yb3V0aW5nLlJvdXRlciA8YnIvPlxuICogIC0gc2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuRmNsIHdoZW4gdXNpbmcgc2FwLmYucm91dGluZy5Sb3V0ZXIgKEZDTCB1c2UgY2FzZSkgPGJyLz5cbiAqXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIsIHtcblx0aW50ZXJmYWNlczogW1wic2FwLnVpLmNvcmUuSUFzeW5jQ29udGVudENyZWF0aW9uXCJdLFxuXHRjb25maWc6IHtcblx0XHRmdWxsV2lkdGg6IHRydWVcblx0fSxcblx0bWFuaWZlc3Q6IHtcblx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0c2VydmljZXM6IHtcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0XCJzdGFydHVwXCI6IFwid2FpdEZvclwiLFxuXHRcdFx0XHRcdFwic2V0dGluZ3NcIjoge1xuXHRcdFx0XHRcdFx0XCJidW5kbGVzXCI6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRcIm1vZGVsTmFtZVwiOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJvdXRpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuUm91dGluZ1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaGVsbFNlcnZpY2VzOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2hlbGxTZXJ2aWNlc1wiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFNoZWxsVUlTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLnVzaGVsbC51aTVzZXJ2aWNlLlNoZWxsVUlTZXJ2aWNlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0bmF2aWdhdGlvblNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5OYXZpZ2F0aW9uU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuRW52aXJvbm1lbnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0c2lkZUVmZmVjdHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuU2lkZUVmZmVjdHNTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXN5bmNDb21wb25lbnRTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQXN5bmNDb21wb25lbnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJvb3RWaWV3OiB7XG5cdFx0XHRcdHZpZXdOYW1lOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSxcblx0XHRcdFx0dHlwZTogXCJYTUxcIixcblx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdGlkOiBcImFwcFJvb3RWaWV3XCJcblx0XHRcdH0sXG5cdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdGNvbnRyb2xJZDogXCJhcHBDb250ZW50XCIsXG5cdFx0XHRcdFx0cm91dGVyQ2xhc3M6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTLFxuXHRcdFx0XHRcdHZpZXdUeXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xBZ2dyZWdhdGlvbjogXCJwYWdlc1wiLFxuXHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdGNvbnRhaW5lck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdHByb3BhZ2F0ZU1vZGVsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRkZXNpZ250aW1lOiBcInNhcC9mZS9jb3JlL2Rlc2lnbnRpbWUvQXBwQ29tcG9uZW50LmRlc2lnbnRpbWVcIixcblxuXHRsaWJyYXJ5OiBcInNhcC5mZS5jb3JlXCJcbn0pXG5jbGFzcyBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCB7XG5cdHN0YXRpYyBpbnN0YW5jZU1hcDogUmVjb3JkPHN0cmluZywgQXBwQ29tcG9uZW50PiA9IHt9O1xuXHRwcml2YXRlIF9vUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblx0cHJpdmF0ZSBfb0FwcFN0YXRlSGFuZGxlciE6IEFwcFN0YXRlSGFuZGxlcjtcblx0cHJpdmF0ZSBiSW5pdGlhbGl6ZVJvdXRpbmc/OiBib29sZWFuO1xuXHRwcml2YXRlIF9vRGlhZ25vc3RpY3MhOiBEaWFnbm9zdGljcztcblx0cHJpdmF0ZSBlbnRpdHlDb250YWluZXI6IGFueTtcblx0cHJpdmF0ZSBzdGFydHVwTW9kZTogc3RyaW5nID0gU3RhcnR1cE1vZGUuTm9ybWFsO1xuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGFcblx0ICogQGZ1bmN0aW9uXG5cdCAqL1xuXG5cdF9pc0ZjbEVuYWJsZWQoKSB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCIvc2FwLnVpNVwiLCB0cnVlKTtcblx0XHRyZXR1cm4gTkFWQ09ORi5GQ0wuVklFV05BTUUgPT09IG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvdXRlclByb3h5XG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgQSBSZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5XG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvdXRlclByb3h5KCk6IFJvdXRlclByb3h5IHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlclByb3h5O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgQXBwU3RhdGVIYW5kbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0QXBwU3RhdGVIYW5kbGVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2dldFJvb3RWaWV3Q29udHJvbGxlclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byB0aGUgRkNMIENvbnRyb2xsZXJcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IEJhc2VDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBWaWV3KS5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjZ2V0Um9vdENvbnRhaW5lclxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zICBBIHJlZmVyZW5jZSB0byBOYXZDb250YWluZXIgY29udHJvbCBvciB0aGUgRkNMIGNvbnRyb2xcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBWaWV3KS5nZXRDb250ZW50KClbMF07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCkge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0RlZXBsaW5rJy5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlRGVlcGxpbmsoKSB7XG5cdFx0dGhpcy5zdGFydHVwTW9kZSA9IFN0YXJ0dXBNb2RlLkRlZXBsaW5rO1xuXHR9XG5cblx0aW5pdCgpIHtcblx0XHRjb25zdCB1aU1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRlZGl0TW9kZTogbGlicmFyeS5FZGl0TW9kZS5EaXNwbGF5LFxuXHRcdFx0aXNFZGl0YWJsZTogZmFsc2UsXG5cdFx0XHRkcmFmdFN0YXR1czogbGlicmFyeS5EcmFmdFN0YXR1cy5DbGVhcixcblx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0YnVzeUxvY2FsOiB7fSxcblx0XHRcdHBhZ2VzOiB7fVxuXHRcdH0pO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblxuXHRcdE1vZGVsSGVscGVyLmVuaGFuY2VVaUpTT05Nb2RlbCh1aU1vZGVsLCBsaWJyYXJ5KTtcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwob0ludGVybmFsTW9kZWwpO1xuXG5cdFx0dGhpcy5zZXRNb2RlbCh1aU1vZGVsLCBcInVpXCIpO1xuXHRcdHRoaXMuc2V0TW9kZWwob0ludGVybmFsTW9kZWwsIFwiaW50ZXJuYWxcIik7XG5cblx0XHR0aGlzLmJJbml0aWFsaXplUm91dGluZyA9IHRoaXMuYkluaXRpYWxpemVSb3V0aW5nICE9PSB1bmRlZmluZWQgPyB0aGlzLmJJbml0aWFsaXplUm91dGluZyA6IHRydWU7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5ID0gbmV3IFJvdXRlclByb3h5KCk7XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlciA9IG5ldyBBcHBTdGF0ZUhhbmRsZXIodGhpcyk7XG5cdFx0dGhpcy5fb0RpYWdub3N0aWNzID0gbmV3IERpYWdub3N0aWNzKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cdFx0aWYgKG9Nb2RlbCkge1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1XCIsIHRydWUpO1xuXHRcdGlmIChcblx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5GQ0wuVklFV05BTUUgJiZcblx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nLmNvbmZpZy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1Ncblx0XHQpIHtcblx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5GQ0wuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUgJiZcblx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nLmNvbmZpZy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1Ncblx0XHQpIHtcblx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUuaW5kZXhPZihcInNhcC5mZVwiKSAhPT0gLTEpIHtcblx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRgXFxuV3JvbmcgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvdXBsZSAocm9vdFZpZXcvcm91dGVyQ2xhc3MpIGluIG1hbmlmZXN0IGZpbGUuXFxuYCArXG5cdFx0XHRcdFx0YEN1cnJlbnQgdmFsdWVzIGFyZSA6KCR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfS8ke29NYW5pZmVzdFVJNS5yb3V0aW5nLmNvbmZpZy5yb3V0ZXJDbGFzc30pXFxuYCArXG5cdFx0XHRcdFx0YEV4cGVjdGVkIHZhbHVlcyBhcmUgXFxuYCArXG5cdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfS8ke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfSlcXG5gICtcblx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5GQ0wuVklFV05BTUV9LyR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9KWBcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdH1cblxuXHRcdC8vIEFkZGluZyBTZW1hbnRpYyBEYXRlIE9wZXJhdG9yc1xuXHRcdC8vIENvbW1lbnRpbmcgc2luY2UgaXQgaXMgbm90IG5lZWRlZCBmb3IgU2luZ2xlUmFuZ2Vcblx0XHRTZW1hbnRpY0RhdGVPcGVyYXRvcnMuYWRkU2VtYW50aWNEYXRlT3BlcmF0b3JzKCk7XG5cblx0XHQvLyB0aGUgaW5pdCBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSByb3V0aW5nIGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgYWJvdmVcblx0XHQvLyBpdCB3aWxsIGNhbGwgdGhlIGNyZWF0ZUNvbnRlbnQgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgdGhlIFJvb3RWaWV3IGFuZCBhZGQgaXQgdG8gdGhlIFVJQ29tcG9uZW50IGFnZ3JlZ2F0aW9uc1xuXG5cdFx0c3VwZXIuaW5pdCgpO1xuXHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldID0gdGhpcztcblx0fVxuXHRvblNlcnZpY2VzU3RhcnRlZCgpIHtcblx0XHQvL3JvdXRlciBtdXN0IGJlIHN0YXJ0ZWQgb25jZSB0aGUgcm9vdGNvbnRhaW5lciBpcyBpbml0aWFsaXplZFxuXHRcdC8vc3RhcnRpbmcgb2YgdGhlIHJvdXRlclxuXHRcdGNvbnN0IGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiA9ICgpID0+IHtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRpZiAoKHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS5hdHRhY2hSb3V0ZU1hdGNoZXJzKSB7XG5cdFx0XHRcdFx0XHQodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnkpLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXIoKS5pbml0aWFsaXplKCk7XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXJQcm94eSgpLmluaXQodGhpcywgdGhpcy5faXNGY2xFbmFibGVkKCkpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXG5cdFx0XHRcdFx0KHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS5kaXNwbGF5TWVzc2FnZVBhZ2UoXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9BUFBTVEFSVF9URUNITklDQUxfSVNTVUVTXCIpLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG5cdFx0XHRcdFx0XHRcdEZDTExldmVsOiAwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdGlmICh0aGlzLmJJbml0aWFsaXplUm91dGluZykge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKVxuXHRcdFx0XHQuaW5pdGlhbGl6ZVJvdXRpbmcoKVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0KHRoaXMuZ2V0Um9vdENvbnRyb2woKSBhcyBhbnkpLmF0dGFjaEFmdGVySW5pdChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBjYW5ub3QgY2Fubm90IGluaXRpYWxpemUgcm91dGluZzogJHtlcnJ9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRleGl0KCkge1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIuZGVzdHJveSgpO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eS5kZXN0cm95KCk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb0FwcFN0YXRlSGFuZGxlcjtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vUm91dGVyUHJveHk7XG5cdFx0ZGVsZXRlTW9kZWxDYWNoZURhdGEodGhpcy5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0dGhpcy5nZXRNb2RlbChcInVpXCIpLmRlc3Ryb3koKTtcblx0fVxuXHRnZXRNZXRhTW9kZWwoKTogT0RhdGFNZXRhTW9kZWwge1xuXHRcdHJldHVybiB0aGlzLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdH1cblx0Z2V0RGlhZ25vc3RpY3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29EaWFnbm9zdGljcztcblx0fVxuXHRkZXN0cm95KC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0Ly8gTEVBS1MsIHdpdGggd29ya2Fyb3VuZCBmb3Igc29tZSBGbGV4IC8gTURDIGlzc3VlXG5cdFx0dHJ5IHtcblx0XHRcdC8vIFx0Ly8gVGhpcyBvbmUgaXMgb25seSBhIGxlYWsgaWYgeW91IGRvbid0IGdvIGJhY2sgdG8gdGhlIHNhbWUgY29tcG9uZW50IGluIHRoZSBsb25nIHJ1blxuXHRcdFx0Ly9kZWxldGUgc2FwLnVpLmZsLkZsZXhDb250cm9sbGVyRmFjdG9yeS5fY29tcG9uZW50SW5zdGFudGlhdGlvblByb21pc2VzW3RoaXMuZ2V0SWQoKV07XG5cblx0XHRcdFZhbHVlTGlzdEhlbHBlci5pbml0aWFsaXplQ2FjaGVkVmFsdWVIZWxwKCk7XG5cblx0XHRcdGRlbGV0ZSBBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXTtcblxuXHRcdFx0Ly8gXHR2YXIgb1JlZ2lzdHJ5ID0gc2FwLnVpLm1kYy5wMTNuLkVuZ2luZS5nZXRJbnN0YW5jZSgpLl9nZXRSZWdpc3RyeSgpO1xuXHRcdFx0Ly8gXHRPYmplY3Qua2V5cyhvUmVnaXN0cnkpLmZvckVhY2goZnVuY3Rpb24oc0tleSkge1xuXHRcdFx0Ly8gXHRcdE9iamVjdC5rZXlzKG9SZWdpc3RyeVtzS2V5XS5jb250cm9sbGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHNDb250cm9sbGVyS2V5KSB7XG5cdFx0XHQvLyBcdFx0XHRvUmVnaXN0cnlbc0tleV0uY29udHJvbGxlcltzQ29udHJvbGxlcktleV0uZGVzdHJveSgpO1xuXHRcdFx0Ly8gXHRcdH0pO1xuXHRcdFx0Ly8gXHR9KTtcblx0XHRcdC8vIFx0c2FwLnVpLm1kYy5wMTNuLkVuZ2luZS5nZXRJbnN0YW5jZSgpLmRlc3Ryb3koKTtcblx0XHRcdGRlbGV0ZSAod2luZG93IGFzIGFueSkuX3JvdXRpbmc7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmluZm8oZSBhcyBhbnkpO1xuXHRcdH1cblxuXHRcdC8vV09SS0FST1VORCBmb3Igc3RpY2t5IGRpc2NhcmQgcmVxdWVzdCA6IGR1ZSB0byBhc3luYyBjYWxsYmFjaywgcmVxdWVzdCB0cmlnZ2VyZWQgYnkgdGhlIGV4aXRBcHBsaWNhdGlvbiB3aWxsIGJlIHNlbmQgYWZ0ZXIgdGhlIFVJQ29tcG9uZW50LnByb3RvdHlwZS5kZXN0cm95XG5cdFx0Ly9zbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIFJlcXVlc3RvciBoZWFkZXJzIGFzIGl0IHdpbGwgYmUgZGVzdHJveVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBvTWFpbk1vZGVsID0gKHRoaXMgYXMgYW55KS5vTW9kZWxzW3VuZGVmaW5lZF07XG5cdFx0Y29uc3Qgb0hlYWRlcnMgPSBqUXVlcnkuZXh0ZW5kKHt9LCBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMpO1xuXHRcdC8vIEFzIHdlIG5lZWQgdG8gY2xlYW51cCB0aGUgYXBwbGljYXRpb24gLyBoYW5kbGUgdGhlIGRpcnR5IG9iamVjdCB3ZSBuZWVkIHRvIGNhbGwgb3VyIGNsZWFudXAgYmVmb3JlIHRoZSBtb2RlbHMgYXJlIGRlc3Ryb3llZFxuXHRcdHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKS5iZWZvcmVFeGl0KCk7XG5cdFx0c3VwZXIuZGVzdHJveSguLi5hcmdzKTtcblx0XHRvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMgPSBvSGVhZGVycztcblx0fVxuXHRnZXRDb21wb25lbnREYXRhKCk6IGFueSB7XG5cdFx0cmV0dXJuIHN1cGVyLmdldENvbXBvbmVudERhdGEoKTtcblx0fVxuXHRnZXRSb3V0aW5nU2VydmljZSgpOiBSb3V0aW5nU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFJvdXRpbmdTZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cdGdldFNoZWxsU2VydmljZXMoKTogSVNoZWxsU2VydmljZXMge1xuXHRcdHJldHVybiB7fSBhcyBJU2hlbGxTZXJ2aWNlczsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXHRnZXROYXZpZ2F0aW9uU2VydmljZSgpOiBOYXZpZ2F0aW9uU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIE5hdmlnYXRpb25TZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cdGdldFNpZGVFZmZlY3RzU2VydmljZSgpOiBTaWRlRWZmZWN0c1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH1cblx0Z2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0U3RhcnR1cFBhcmFtZXRlcnMoKSB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSB0aGlzLmdldENvbXBvbmVudERhdGEoKTtcblx0XHRjb25zdCBvU3RhcnRVcFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9O1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob1N0YXJ0VXBQYXJhbWV0ZXJzKTtcblx0fVxuXHRyZXN0b3JlKCkge1xuXHRcdC8vIGNhbGxlZCBieSBGTFAgd2hlbiBhcHAgc2FwLWtlZXAtYWxpdmUgaXMgZW5hYmxlZCBhbmQgYXBwIGlzIHJlc3RvcmVkXG5cdFx0KHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55KS52aWV3U3RhdGUub25SZXN0b3JlKCk7XG5cdH1cblx0c3VzcGVuZCgpIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyBzdXNwZW5kZWRcblx0XHQodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnkpLnZpZXdTdGF0ZS5vblN1c3BlbmQoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcHBDb21wb25lbnQ7XG4iXX0=
|
|
428
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcENvbXBvbmVudC50cyJdLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJST1VURVJDTEFTUyIsIk5BVkNPTlRBSU5FUiIsIkFwcENvbXBvbmVudCIsImRlZmluZVVJNUNsYXNzIiwiaW50ZXJmYWNlcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0Iiwic2VydmljZXMiLCJyZXNvdXJjZU1vZGVsIiwiZmFjdG9yeU5hbWUiLCJyb3V0aW5nU2VydmljZSIsInN0YXJ0dXAiLCJzaGVsbFNlcnZpY2VzIiwiU2hlbGxVSVNlcnZpY2UiLCJuYXZpZ2F0aW9uU2VydmljZSIsImVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiYXN5bmNDb21wb25lbnRTZXJ2aWNlIiwicm9vdFZpZXciLCJ2aWV3TmFtZSIsInR5cGUiLCJhc3luYyIsImlkIiwicm91dGluZyIsImNvbnRyb2xJZCIsInJvdXRlckNsYXNzIiwidmlld1R5cGUiLCJjb250cm9sQWdncmVnYXRpb24iLCJjb250YWluZXJPcHRpb25zIiwicHJvcGFnYXRlTW9kZWwiLCJkZXNpZ250aW1lIiwic3RhcnR1cE1vZGUiLCJOb3JtYWwiLCJfaXNGY2xFbmFibGVkIiwib01hbmlmZXN0VUk1IiwiZ2V0TWV0YWRhdGEiLCJnZXRNYW5pZmVzdEVudHJ5IiwiZ2V0Um91dGVyUHJveHkiLCJfb1JvdXRlclByb3h5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiX29BcHBTdGF0ZUhhbmRsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q29udGVudCIsImdldFN0YXJ0dXBNb2RlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJDcmVhdGUiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwiRGVlcGxpbmsiLCJpbml0IiwidWlNb2RlbCIsIkpTT05Nb2RlbCIsImVkaXRNb2RlIiwiRWRpdE1vZGUiLCJEaXNwbGF5IiwiaXNFZGl0YWJsZSIsImRyYWZ0U3RhdHVzIiwiRHJhZnRTdGF0dXMiLCJDbGVhciIsImJ1c3kiLCJidXN5TG9jYWwiLCJwYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJzZXRNb2RlbCIsImJJbml0aWFsaXplUm91dGluZyIsInVuZGVmaW5lZCIsIlJvdXRlclByb3h5IiwiQXBwU3RhdGVIYW5kbGVyIiwiX29EaWFnbm9zdGljcyIsIkRpYWdub3N0aWNzIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJlbnRpdHlDb250YWluZXIiLCJnZXRNZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiTG9nIiwiaW5mbyIsImluZGV4T2YiLCJFcnJvciIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImFkZFNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImluc3RhbmNlTWFwIiwiZ2V0SWQiLCJvblNlcnZpY2VzU3RhcnRlZCIsImZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiIsInRoZW4iLCJhdHRhY2hSb3V0ZU1hdGNoZXJzIiwiZ2V0Um91dGVyIiwiaW5pdGlhbGl6ZSIsImNhdGNoIiwiZXJyb3IiLCJvUmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiZGlzcGxheU1lc3NhZ2VQYWdlIiwiZ2V0VGV4dCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiRkNMTGV2ZWwiLCJnZXRSb3V0aW5nU2VydmljZSIsImluaXRpYWxpemVSb3V0aW5nIiwiYXR0YWNoQWZ0ZXJJbml0IiwiZXJyIiwiZXhpdCIsImRlc3Ryb3kiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImdldERpYWdub3N0aWNzIiwiVmFsdWVMaXN0SGVscGVyIiwiaW5pdGlhbGl6ZUNhY2hlZFZhbHVlSGVscCIsIndpbmRvdyIsIl9yb3V0aW5nIiwiZSIsIm9NYWluTW9kZWwiLCJvTW9kZWxzIiwib0hlYWRlcnMiLCJvUmVxdWVzdG9yIiwialF1ZXJ5IiwiZXh0ZW5kIiwibUhlYWRlcnMiLCJiZWZvcmVFeGl0IiwiYXJncyIsImdldENvbXBvbmVudERhdGEiLCJnZXRTaGVsbFNlcnZpY2VzIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwib0NvbXBvbmVudERhdGEiLCJvU3RhcnRVcFBhcmFtZXRlcnMiLCJzdGFydHVwUGFyYW1ldGVycyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzdG9yZSIsInZpZXdTdGF0ZSIsIm9uUmVzdG9yZSIsInN1c3BlbmQiLCJvblN1c3BlbmQiLCJVSUNvbXBvbmVudCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQXNCQSxNQUFNQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0QsV0FBNUI7QUFFQSxNQUFNRSxPQUFPLEdBQUc7QUFDZkMsSUFBQUEsR0FBRyxFQUFFO0FBQ0pDLE1BQUFBLFFBQVEsRUFBRSx5Q0FETjtBQUVKQyxNQUFBQSxXQUFXLEVBQUU7QUFGVCxLQURVO0FBS2ZDLElBQUFBLFlBQVksRUFBRTtBQUNiRixNQUFBQSxRQUFRLEVBQUUsa0RBREc7QUFFYkMsTUFBQUEsV0FBVyxFQUFFO0FBRkE7QUFMQyxHQUFoQjtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O01BcUVNRSxZLFdBcEVMQyxjQUFjLENBQUMsMEJBQUQsRUFBNkI7QUFDM0NDLElBQUFBLFVBQVUsRUFBRSxDQUFDLG1DQUFELENBRCtCO0FBRTNDQyxJQUFBQSxNQUFNLEVBQUU7QUFDUEMsTUFBQUEsU0FBUyxFQUFFO0FBREosS0FGbUM7QUFLM0NDLElBQUFB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TCxFQUFELENBQXNDa0csU0FBdEMsQ0FBZ0RDLFNBQWhEO0FBQ0EsSzs7V0FDREMsTyxHQUFBLG1CQUFVO0FBQ1Q7QUFDQyxXQUFLcEcscUJBQUwsRUFBRCxDQUFzQ2tHLFNBQXRDLENBQWdERyxTQUFoRDtBQUNBLEs7OztJQXpTeUJDLFcsV0FDbkJ6RCxXLEdBQTRDLEU7U0EyU3JDckYsWSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1JvdXRpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgVmFsdWVMaXN0SGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL3ZhbHVlaGVscC9WYWx1ZUxpc3RIZWxwZXJcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFVJQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9VSUNvbXBvbmVudFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udHJvbGxlciBmcm9tIFwiLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgZGVsZXRlTW9kZWxDYWNoZURhdGEgfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwiLi9oZWxwZXJzL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuXG5jb25zdCBTdGFydHVwTW9kZSA9IGxpYnJhcnkuU3RhcnR1cE1vZGU7XG5cbmNvbnN0IE5BVkNPTkYgPSB7XG5cdEZDTDoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3LkZjbFwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCJcblx0fSxcblx0TkFWQ09OVEFJTkVSOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLm0ucm91dGluZy5Sb3V0ZXJcIlxuXHR9XG59O1xuXG4vKipcbiAqIE1haW4gY2xhc3MgZm9yIGNvbXBvbmVudHMgdXNlZCBmb3IgYW4gYXBwbGljYXRpb24gaW4gU0FQIEZpb3JpIGVsZW1lbnRzLlxuICpcbiAqIEFwcGxpY2F0aW9uIGRldmVsb3BlcnMgdXNpbmcgdGhlIHRlbXBsYXRlcyBhbmQgYnVpbGRpbmcgYmxvY2tzIHByb3ZpZGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cyBzaG91bGQgY3JlYXRlIHRoZWlyIGFwcHMgYnkgZXh0ZW5kaW5nIHRoaXMgY29tcG9uZW50LlxuICogVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBuZWNlc3Nhcnkgc2VydmljZXMgdGhhdCB5b3UgbmVlZCBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhbmQgdGVtcGxhdGVzIHRvIHdvcmsgcHJvcGVybHkgYXJlIHN0YXJ0ZWQuXG4gKlxuICogV2hlbiB5b3UgdXNlIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhcyB0aGUgYmFzZSBjb21wb25lbnQsIHlvdSBhbHNvIG5lZWQgdG8gdXNlIGEgcm9vdFZpZXcuIFNBUCBGaW9yaSBlbGVtZW50cyBwcm92aWRlcyB0d28gb3B0aW9uczogPGJyLz5cbiAqICAtIHNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3Lk5hdkNvbnRhaW5lciB3aGVuIHVzaW5nIHNhcC5tLnJvdXRpbmcuUm91dGVyIDxici8+XG4gKiAgLSBzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2wgd2hlbiB1c2luZyBzYXAuZi5yb3V0aW5nLlJvdXRlciAoRkNMIHVzZSBjYXNlKSA8YnIvPlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcIiwge1xuXHRpbnRlcmZhY2VzOiBbXCJzYXAudWkuY29yZS5JQXN5bmNDb250ZW50Q3JlYXRpb25cIl0sXG5cdGNvbmZpZzoge1xuXHRcdGZ1bGxXaWR0aDogdHJ1ZVxuXHR9LFxuXHRtYW5pZmVzdDoge1xuXHRcdFwic2FwLnVpNVwiOiB7XG5cdFx0XHRzZXJ2aWNlczoge1xuXHRcdFx0XHRyZXNvdXJjZU1vZGVsOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIixcblx0XHRcdFx0XHRcInN0YXJ0dXBcIjogXCJ3YWl0Rm9yXCIsXG5cdFx0XHRcdFx0XCJzZXR0aW5nc1wiOiB7XG5cdFx0XHRcdFx0XHRcImJ1bmRsZXNcIjogW1wic2FwLmZlLmNvcmUubWVzc2FnZWJ1bmRsZVwiXSxcblx0XHRcdFx0XHRcdFwibW9kZWxOYW1lXCI6IFwic2FwLmZlLmkxOG5cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cm91dGluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWxsU2VydmljZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0U2hlbGxVSVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAudXNoZWxsLnVpNXNlcnZpY2UuU2hlbGxVSVNlcnZpY2VcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5FbnZpcm9ubWVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaWRlRWZmZWN0c1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhc3luY0NvbXBvbmVudFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Bc3luY0NvbXBvbmVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0cm9vdFZpZXc6IHtcblx0XHRcdFx0dmlld05hbWU6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FLFxuXHRcdFx0XHR0eXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0aWQ6IFwiYXBwUm9vdFZpZXdcIlxuXHRcdFx0fSxcblx0XHRcdHJvdXRpbmc6IHtcblx0XHRcdFx0Y29uZmlnOiB7XG5cdFx0XHRcdFx0Y29udHJvbElkOiBcImFwcENvbnRlbnRcIixcblx0XHRcdFx0XHRyb3V0ZXJDbGFzczogTkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1MsXG5cdFx0XHRcdFx0dmlld1R5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdFx0Y29udHJvbEFnZ3JlZ2F0aW9uOiBcInBhZ2VzXCIsXG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0Y29udGFpbmVyT3B0aW9uczoge1xuXHRcdFx0XHRcdFx0cHJvcGFnYXRlTW9kZWw6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGRlc2lnbnRpbWU6IFwic2FwL2ZlL2NvcmUvZGVzaWdudGltZS9BcHBDb21wb25lbnQuZGVzaWdudGltZVwiLFxuXG5cdGxpYnJhcnk6IFwic2FwLmZlLmNvcmVcIlxufSlcbmNsYXNzIEFwcENvbXBvbmVudCBleHRlbmRzIFVJQ29tcG9uZW50IHtcblx0c3RhdGljIGluc3RhbmNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBBcHBDb21wb25lbnQ+ID0ge307XG5cdHByaXZhdGUgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXHRwcml2YXRlIF9vQXBwU3RhdGVIYW5kbGVyITogQXBwU3RhdGVIYW5kbGVyO1xuXHRwcml2YXRlIGJJbml0aWFsaXplUm91dGluZz86IGJvb2xlYW47XG5cdHByaXZhdGUgX29EaWFnbm9zdGljcyE6IERpYWdub3N0aWNzO1xuXHRwcml2YXRlIGVudGl0eUNvbnRhaW5lcjogYW55O1xuXHRwcml2YXRlIHN0YXJ0dXBNb2RlOiBzdHJpbmcgPSBTdGFydHVwTW9kZS5Ob3JtYWw7XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudC5nZXRNZXRhZGF0YVxuXHQgKiBAZnVuY3Rpb25cblx0ICovXG5cblx0X2lzRmNsRW5hYmxlZCgpIHtcblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1XCIsIHRydWUpO1xuXHRcdHJldHVybiBOQVZDT05GLkZDTC5WSUVXTkFNRSA9PT0gb01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHkuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjZ2V0Um91dGVyUHJveHlcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFxuXHQgKiBAcmV0dXJucyBBIFJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHlcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um91dGVyUHJveHkoKTogUm91dGVyUHJveHkge1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGVyUHJveHk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXIuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjZ2V0QXBwU3RhdGVIYW5kbGVyXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRBcHBTdGF0ZUhhbmRsZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29BcHBTdGF0ZUhhbmRsZXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBuYXYvRkNMIENvbnRyb2xsZXIuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjZ2V0Um9vdFZpZXdDb250cm9sbGVyXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBGQ0wgQ29udHJvbGxlclxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb290Vmlld0NvbnRyb2xsZXIoKTogQmFzZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiAodGhpcy5nZXRSb290Q29udHJvbCgpIGFzIFZpZXcpLmdldENvbnRyb2xsZXIoKSBhcyBCYXNlQ29udHJvbGxlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIE5hdkNvbnRhaW5lciBjb250cm9sIG9yIHRoZSBGQ0wgY29udHJvbC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCNnZXRSb290Q29udGFpbmVyXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcblx0ICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIE5hdkNvbnRhaW5lciBjb250cm9sIG9yIHRoZSBGQ0wgY29udHJvbFxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb290Q29udGFpbmVyKCkge1xuXHRcdHJldHVybiAodGhpcy5nZXRSb290Q29udHJvbCgpIGFzIFZpZXcpLmdldENvbnRlbnQoKVswXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXJ0dXAgbW9kZSBvZiB0aGUgYXBwLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhcnR1cCBtb2RlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRnZXRTdGFydHVwTW9kZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0dXBNb2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdDcmVhdGUnLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVDcmVhdGUoKSB7XG5cdFx0dGhpcy5zdGFydHVwTW9kZSA9IFN0YXJ0dXBNb2RlLkNyZWF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnRGVlcGxpbmsnLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVEZWVwbGluaygpIHtcblx0XHR0aGlzLnN0YXJ0dXBNb2RlID0gU3RhcnR1cE1vZGUuRGVlcGxpbms7XG5cdH1cblxuXHRpbml0KCkge1xuXHRcdGNvbnN0IHVpTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGVkaXRNb2RlOiBsaWJyYXJ5LkVkaXRNb2RlLkRpc3BsYXksXG5cdFx0XHRpc0VkaXRhYmxlOiBmYWxzZSxcblx0XHRcdGRyYWZ0U3RhdHVzOiBsaWJyYXJ5LkRyYWZ0U3RhdHVzLkNsZWFyLFxuXHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRidXN5TG9jYWw6IHt9LFxuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdHBhZ2VzOiB7fVxuXHRcdH0pO1xuXG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZVVpSlNPTk1vZGVsKHVpTW9kZWwsIGxpYnJhcnkpO1xuXHRcdE1vZGVsSGVscGVyLmVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbChvSW50ZXJuYWxNb2RlbCk7XG5cblx0XHR0aGlzLnNldE1vZGVsKHVpTW9kZWwsIFwidWlcIik7XG5cdFx0dGhpcy5zZXRNb2RlbChvSW50ZXJuYWxNb2RlbCwgXCJpbnRlcm5hbFwiKTtcblxuXHRcdHRoaXMuYkluaXRpYWxpemVSb3V0aW5nID0gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgIT09IHVuZGVmaW5lZCA/IHRoaXMuYkluaXRpYWxpemVSb3V0aW5nIDogdHJ1ZTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyID0gbmV3IEFwcFN0YXRlSGFuZGxlcih0aGlzKTtcblx0XHR0aGlzLl9vRGlhZ25vc3RpY3MgPSBuZXcgRGlhZ25vc3RpY3MoKTtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblx0XHRpZiAob01vZGVsKSB7XG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lciA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKS5yZXF1ZXN0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXIvXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwiL3NhcC51aTVcIiwgdHJ1ZSk7XG5cdFx0aWYgKFxuXHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRSAmJlxuXHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmcuY29uZmlnLnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTU1xuXHRcdCkge1xuXHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtOQVZDT05GLkZDTC5WSUVXTkFNRX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSAmJlxuXHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmcuY29uZmlnLnJvdXRlckNsYXNzID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU1xuXHRcdCkge1xuXHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZS5pbmRleE9mKFwic2FwLmZlXCIpICE9PSAtMSkge1xuXHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdGBcXG5Xcm9uZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY291cGxlIChyb290Vmlldy9yb3V0ZXJDbGFzcykgaW4gbWFuaWZlc3QgZmlsZS5cXG5gICtcblx0XHRcdFx0XHRgQ3VycmVudCB2YWx1ZXMgYXJlIDooJHtvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWV9LyR7b01hbmlmZXN0VUk1LnJvdXRpbmcuY29uZmlnLnJvdXRlckNsYXNzfSlcXG5gICtcblx0XHRcdFx0XHRgRXhwZWN0ZWQgdmFsdWVzIGFyZSBcXG5gICtcblx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9LyR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9KVxcbmAgK1xuXHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLkZDTC5WSUVXTkFNRX0vJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU30pYFxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkaW5nIFNlbWFudGljIERhdGUgT3BlcmF0b3JzXG5cdFx0Ly8gQ29tbWVudGluZyBzaW5jZSBpdCBpcyBub3QgbmVlZGVkIGZvciBTaW5nbGVSYW5nZVxuXHRcdFNlbWFudGljRGF0ZU9wZXJhdG9ycy5hZGRTZW1hbnRpY0RhdGVPcGVyYXRvcnMoKTtcblxuXHRcdC8vIHRoZSBpbml0IGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHJvdXRpbmcgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBhYm92ZVxuXHRcdC8vIGl0IHdpbGwgY2FsbCB0aGUgY3JlYXRlQ29udGVudCBmdW5jdGlvbiB0byBpbnN0YW50aWF0ZSB0aGUgUm9vdFZpZXcgYW5kIGFkZCBpdCB0byB0aGUgVUlDb21wb25lbnQgYWdncmVnYXRpb25zXG5cblx0XHRzdXBlci5pbml0KCk7XG5cdFx0QXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV0gPSB0aGlzO1xuXHR9XG5cdG9uU2VydmljZXNTdGFydGVkKCkge1xuXHRcdC8vcm91dGVyIG11c3QgYmUgc3RhcnRlZCBvbmNlIHRoZSByb290Y29udGFpbmVyIGlzIGluaXRpYWxpemVkXG5cdFx0Ly9zdGFydGluZyBvZiB0aGUgcm91dGVyXG5cdFx0Y29uc3QgZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uID0gKCkgPT4ge1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXJcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGlmICgodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnkpLmF0dGFjaFJvdXRlTWF0Y2hlcnMpIHtcblx0XHRcdFx0XHRcdCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmdldFJvdXRlcigpLmluaXRpYWxpemUoKTtcblx0XHRcdFx0XHR0aGlzLmdldFJvdXRlclByb3h5KCkuaW5pdCh0aGlzLCB0aGlzLl9pc0ZjbEVuYWJsZWQoKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cblx0XHRcdFx0XHQodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnkpLmRpc3BsYXlNZXNzYWdlUGFnZShcblx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0FQUFNUQVJUX1RFQ0hOSUNBTF9JU1NVRVNcIiksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0RkNMTGV2ZWw6IDBcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuYkluaXRpYWxpemVSb3V0aW5nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdC5pbml0aWFsaXplUm91dGluZygpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQodGhpcy5nZXRSb290Q29udHJvbCgpIGFzIGFueSkuYXR0YWNoQWZ0ZXJJbml0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0ZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYGNhbm5vdCBjYW5ub3QgaW5pdGlhbGl6ZSByb3V0aW5nOiAke2Vycn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdGV4aXQoKSB7XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlci5kZXN0cm95KCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5LmRlc3Ryb3koKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0XHRkZWxldGVNb2RlbENhY2hlRGF0YSh0aGlzLmdldE1ldGFNb2RlbCgpKTtcblx0XHR0aGlzLmdldE1vZGVsKFwidWlcIikuZGVzdHJveSgpO1xuXHR9XG5cdGdldE1ldGFNb2RlbCgpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0fVxuXHRnZXREaWFnbm9zdGljcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fb0RpYWdub3N0aWNzO1xuXHR9XG5cdGRlc3Ryb3koLi4uYXJnczogYW55W10pIHtcblx0XHQvLyBMRUFLUywgd2l0aCB3b3JrYXJvdW5kIGZvciBzb21lIEZsZXggLyBNREMgaXNzdWVcblx0XHR0cnkge1xuXHRcdFx0Ly8gXHQvLyBUaGlzIG9uZSBpcyBvbmx5IGEgbGVhayBpZiB5b3UgZG9uJ3QgZ28gYmFjayB0byB0aGUgc2FtZSBjb21wb25lbnQgaW4gdGhlIGxvbmcgcnVuXG5cdFx0XHQvL2RlbGV0ZSBzYXAudWkuZmwuRmxleENvbnRyb2xsZXJGYWN0b3J5Ll9jb21wb25lbnRJbnN0YW50aWF0aW9uUHJvbWlzZXNbdGhpcy5nZXRJZCgpXTtcblxuXHRcdFx0VmFsdWVMaXN0SGVscGVyLmluaXRpYWxpemVDYWNoZWRWYWx1ZUhlbHAoKTtcblxuXHRcdFx0ZGVsZXRlIEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldO1xuXG5cdFx0XHQvLyBcdHZhciBvUmVnaXN0cnkgPSBzYXAudWkubWRjLnAxM24uRW5naW5lLmdldEluc3RhbmNlKCkuX2dldFJlZ2lzdHJ5KCk7XG5cdFx0XHQvLyBcdE9iamVjdC5rZXlzKG9SZWdpc3RyeSkuZm9yRWFjaChmdW5jdGlvbihzS2V5KSB7XG5cdFx0XHQvLyBcdFx0T2JqZWN0LmtleXMob1JlZ2lzdHJ5W3NLZXldLmNvbnRyb2xsZXIpLmZvckVhY2goZnVuY3Rpb24oc0NvbnRyb2xsZXJLZXkpIHtcblx0XHRcdC8vIFx0XHRcdG9SZWdpc3RyeVtzS2V5XS5jb250cm9sbGVyW3NDb250cm9sbGVyS2V5XS5kZXN0cm95KCk7XG5cdFx0XHQvLyBcdFx0fSk7XG5cdFx0XHQvLyBcdH0pO1xuXHRcdFx0Ly8gXHRzYXAudWkubWRjLnAxM24uRW5naW5lLmdldEluc3RhbmNlKCkuZGVzdHJveSgpO1xuXHRcdFx0ZGVsZXRlICh3aW5kb3cgYXMgYW55KS5fcm91dGluZztcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRMb2cuaW5mbyhlIGFzIGFueSk7XG5cdFx0fVxuXG5cdFx0Ly9XT1JLQVJPVU5EIGZvciBzdGlja3kgZGlzY2FyZCByZXF1ZXN0IDogZHVlIHRvIGFzeW5jIGNhbGxiYWNrLCByZXF1ZXN0IHRyaWdnZXJlZCBieSB0aGUgZXhpdEFwcGxpY2F0aW9uIHdpbGwgYmUgc2VuZCBhZnRlciB0aGUgVUlDb21wb25lbnQucHJvdG90eXBlLmRlc3Ryb3lcblx0XHQvL3NvIHdlIG5lZWQgdG8gY29weSB0aGUgUmVxdWVzdG9yIGhlYWRlcnMgYXMgaXQgd2lsbCBiZSBkZXN0cm95XG5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG9NYWluTW9kZWwgPSAodGhpcyBhcyBhbnkpLm9Nb2RlbHNbdW5kZWZpbmVkXTtcblx0XHRsZXQgb0hlYWRlcnM7XG5cdFx0aWYgKG9NYWluTW9kZWwub1JlcXVlc3Rvcikge1xuXHRcdFx0b0hlYWRlcnMgPSBqUXVlcnkuZXh0ZW5kKHt9LCBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIEFzIHdlIG5lZWQgdG8gY2xlYW51cCB0aGUgYXBwbGljYXRpb24gLyBoYW5kbGUgdGhlIGRpcnR5IG9iamVjdCB3ZSBuZWVkIHRvIGNhbGwgb3VyIGNsZWFudXAgYmVmb3JlIHRoZSBtb2RlbHMgYXJlIGRlc3Ryb3llZFxuXHRcdHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKT8uYmVmb3JlRXhpdCgpO1xuXHRcdHN1cGVyLmRlc3Ryb3koLi4uYXJncyk7XG5cdFx0aWYgKG9IZWFkZXJzICYmIG9NYWluTW9kZWwub1JlcXVlc3Rvcikge1xuXHRcdFx0b01haW5Nb2RlbC5vUmVxdWVzdG9yLm1IZWFkZXJzID0gb0hlYWRlcnM7XG5cdFx0fVxuXHR9XG5cdGdldENvbXBvbmVudERhdGEoKTogYW55IHtcblx0XHRyZXR1cm4gc3VwZXIuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHR9XG5cdGdldFJvdXRpbmdTZXJ2aWNlKCk6IFJvdXRpbmdTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgUm91dGluZ1NlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblx0Z2V0U2hlbGxTZXJ2aWNlcygpOiBJU2hlbGxTZXJ2aWNlcyB7XG5cdFx0cmV0dXJuIHt9IGFzIElTaGVsbFNlcnZpY2VzOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cdGdldE5hdmlnYXRpb25TZXJ2aWNlKCk6IE5hdmlnYXRpb25TZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgTmF2aWdhdGlvblNlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk6IFNpZGVFZmZlY3RzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFNpZGVFZmZlY3RzU2VydmljZTtcblx0fVxuXHRnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2U7XG5cdH1cblxuXHRnZXRTdGFydHVwUGFyYW1ldGVycygpIHtcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IHRoaXMuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGNvbnN0IG9TdGFydFVwUGFyYW1ldGVycyA9IChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge307XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShvU3RhcnRVcFBhcmFtZXRlcnMpO1xuXHR9XG5cdHJlc3RvcmUoKSB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgcmVzdG9yZWRcblx0XHQodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnkpLnZpZXdTdGF0ZS5vblJlc3RvcmUoKTtcblx0fVxuXHRzdXNwZW5kKCkge1xuXHRcdC8vIGNhbGxlZCBieSBGTFAgd2hlbiBhcHAgc2FwLWtlZXAtYWxpdmUgaXMgZW5hYmxlZCBhbmQgYXBwIGlzIHN1c3BlbmRlZFxuXHRcdCh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueSkudmlld1N0YXRlLm9uU3VzcGVuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcENvbXBvbmVudDtcbiJdfQ==
|
|
@@ -371,11 +371,17 @@ class AppComponent extends UIComponent {
|
|
|
371
371
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
372
372
|
// @ts-ignore
|
|
373
373
|
const oMainModel = (this as any).oModels[undefined];
|
|
374
|
-
|
|
374
|
+
let oHeaders;
|
|
375
|
+
if (oMainModel.oRequestor) {
|
|
376
|
+
oHeaders = jQuery.extend({}, oMainModel.oRequestor.mHeaders);
|
|
377
|
+
}
|
|
378
|
+
|
|
375
379
|
// As we need to cleanup the application / handle the dirty object we need to call our cleanup before the models are destroyed
|
|
376
|
-
this.getRoutingService()
|
|
380
|
+
this.getRoutingService()?.beforeExit();
|
|
377
381
|
super.destroy(...args);
|
|
378
|
-
oMainModel.oRequestor
|
|
382
|
+
if (oHeaders && oMainModel.oRequestor) {
|
|
383
|
+
oMainModel.oRequestor.mHeaders = oHeaders;
|
|
384
|
+
}
|
|
379
385
|
}
|
|
380
386
|
getComponentData(): any {
|
|
381
387
|
return super.getComponentData();
|
|
@@ -2,35 +2,32 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/ClassSupport", "sap/fe/navigation/library", "sap/ui/base/Object", "./controllerextensions/BusyLocker", "./helpers/ModelHelper"], function (Log, deepEqual, ClassSupport, library, BaseObject, BusyLocker, ModelHelper) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ToES6Promise", "sap/fe/navigation/library", "sap/ui/base/Object", "./controllerextensions/BusyLocker", "./helpers/ModelHelper"], function (Log, deepEqual, ClassSupport, toES6Promise, library, BaseObject, BusyLocker, ModelHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _class;
|
|
9
9
|
|
|
10
10
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
11
11
|
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
function _catch(body, recover) {
|
|
13
|
+
try {
|
|
14
|
+
var result = body();
|
|
15
|
+
} catch (e) {
|
|
16
|
+
return recover(e);
|
|
17
|
+
}
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
if (result && result.then) {
|
|
20
|
+
return result.then(void 0, recover);
|
|
21
|
+
}
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
21
|
-
args[_key] = arguments[_key];
|
|
22
|
-
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
}).catch(function () {
|
|
26
|
-
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
27
|
-
args[_key2] = arguments[_key2];
|
|
28
|
-
}
|
|
26
|
+
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
}));
|
|
32
|
-
}
|
|
28
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
33
29
|
|
|
30
|
+
var NavType = library.NavType;
|
|
34
31
|
var AppStateHandler = (_dec = defineUI5Class("sap.fe.core.AppStateHandler"), _dec(_class = /*#__PURE__*/function (_BaseObject) {
|
|
35
32
|
_inheritsLoose(AppStateHandler, _BaseObject);
|
|
36
33
|
|
|
@@ -61,44 +58,59 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/C
|
|
|
61
58
|
;
|
|
62
59
|
|
|
63
60
|
_proto.createAppState = function createAppState() {
|
|
64
|
-
|
|
61
|
+
try {
|
|
62
|
+
var _this3 = this;
|
|
65
63
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
var oNavigationService = this.oAppComponent.getNavigationService(),
|
|
71
|
-
oRouterProxy = this.oAppComponent.getRouterProxy(),
|
|
72
|
-
sHash = oRouterProxy.getHash(),
|
|
73
|
-
oController = this.oAppComponent.getRootControl().getController(),
|
|
74
|
-
bIsStickyMode = ModelHelper.isStickySessionSupported(this.oAppComponent.getMetaModel());
|
|
75
|
-
|
|
76
|
-
if (!oController.viewState) {
|
|
77
|
-
return Promise.reject("viewState controller extension not available for controller: ".concat(oController.getMetadata().getName()));
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return oController.viewState.retrieveViewState().then(function (mInnerAppState) {
|
|
81
|
-
var oStoreData = {
|
|
82
|
-
appState: mInnerAppState
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
if (mInnerAppState && !deepEqual(_this2._mCurrentAppState, mInnerAppState)) {
|
|
86
|
-
_this2._mCurrentAppState = mInnerAppState;
|
|
87
|
-
var oAppState = oNavigationService.storeInnerAppStateWithImmediateReturn(oStoreData, true);
|
|
88
|
-
Log.info("APPSTATE: Appstate stored");
|
|
89
|
-
var sAppStateKey = oAppState.appStateKey;
|
|
90
|
-
var sNewHash = oNavigationService.replaceInnerAppStateKey(sHash, sAppStateKey);
|
|
64
|
+
if (!_this3.oAppComponent.getEnvironmentCapabilities().getCapabilities().AppState || BusyLocker.isLocked(_this3)) {
|
|
65
|
+
return Promise.resolve();
|
|
66
|
+
}
|
|
91
67
|
|
|
92
|
-
|
|
93
|
-
oRouterProxy.
|
|
94
|
-
|
|
95
|
-
|
|
68
|
+
var oNavigationService = _this3.oAppComponent.getNavigationService(),
|
|
69
|
+
oRouterProxy = _this3.oAppComponent.getRouterProxy(),
|
|
70
|
+
sHash = oRouterProxy.getHash(),
|
|
71
|
+
oController = _this3.oAppComponent.getRootControl().getController(),
|
|
72
|
+
bIsStickyMode = ModelHelper.isStickySessionSupported(_this3.oAppComponent.getMetaModel());
|
|
96
73
|
|
|
97
|
-
|
|
74
|
+
if (!oController.viewState) {
|
|
75
|
+
throw new Error("viewState controller extension not available for controller: ".concat(oController.getMetadata().getName()));
|
|
98
76
|
}
|
|
99
77
|
|
|
100
|
-
return
|
|
101
|
-
|
|
78
|
+
return Promise.resolve(oController.viewState.retrieveViewState()).then(function (mInnerAppState) {
|
|
79
|
+
var oStoreData = {
|
|
80
|
+
appState: mInnerAppState
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
var _temp2 = function () {
|
|
84
|
+
if (mInnerAppState && !deepEqual(_this3._mCurrentAppState, mInnerAppState)) {
|
|
85
|
+
_this3._mCurrentAppState = mInnerAppState;
|
|
86
|
+
|
|
87
|
+
var _temp3 = _catch(function () {
|
|
88
|
+
return Promise.resolve(oNavigationService.storeInnerAppState(oStoreData, true, true)).then(function (sAppStateKey) {
|
|
89
|
+
Log.info("APPSTATE: Appstate stored");
|
|
90
|
+
var sNewHash = oNavigationService.replaceInnerAppStateKey(sHash, sAppStateKey);
|
|
91
|
+
|
|
92
|
+
if (sNewHash !== sHash) {
|
|
93
|
+
oRouterProxy.navToHash(sNewHash, null, null, null, !bIsStickyMode);
|
|
94
|
+
_this3.bNoRouteChange = true;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
Log.info("APPSTATE: navToHash");
|
|
98
|
+
});
|
|
99
|
+
}, function (oError) {
|
|
100
|
+
Log.error(oError);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
if (_temp3 && _temp3.then) return _temp3.then(function () {});
|
|
104
|
+
}
|
|
105
|
+
}();
|
|
106
|
+
|
|
107
|
+
return _temp2 && _temp2.then ? _temp2.then(function () {
|
|
108
|
+
return oStoreData;
|
|
109
|
+
}) : oStoreData;
|
|
110
|
+
});
|
|
111
|
+
} catch (e) {
|
|
112
|
+
return Promise.reject(e);
|
|
113
|
+
}
|
|
102
114
|
};
|
|
103
115
|
|
|
104
116
|
_proto._createNavigationParameters = function _createNavigationParameters(oAppData, sNavType) {
|
|
@@ -122,7 +134,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/C
|
|
|
122
134
|
;
|
|
123
135
|
|
|
124
136
|
_proto.applyAppState = function applyAppState() {
|
|
125
|
-
var
|
|
137
|
+
var _this4 = this;
|
|
126
138
|
|
|
127
139
|
if (!this.oAppComponent.getEnvironmentCapabilities().getCapabilities().AppState || BusyLocker.isLocked(this)) {
|
|
128
140
|
return Promise.resolve();
|
|
@@ -133,7 +145,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/C
|
|
|
133
145
|
BusyLocker.lock(this.oAppComponent.getRootControl());
|
|
134
146
|
var oNavigationService = this.oAppComponent.getNavigationService(); // TODO oNavigationService.parseNavigation() should return ES6 promise instead jQuery.promise
|
|
135
147
|
|
|
136
|
-
return
|
|
148
|
+
return toES6Promise(oNavigationService.parseNavigation()).catch(function (aErrorData) {
|
|
137
149
|
if (!aErrorData) {
|
|
138
150
|
aErrorData = [];
|
|
139
151
|
}
|
|
@@ -147,21 +159,21 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/C
|
|
|
147
159
|
|
|
148
160
|
var oAppData = aResults[0] || {},
|
|
149
161
|
sNavType = aResults[2] || NavType.initial,
|
|
150
|
-
oRootController =
|
|
162
|
+
oRootController = _this4.oAppComponent.getRootControl().getController();
|
|
151
163
|
|
|
152
|
-
|
|
164
|
+
_this4._mCurrentAppState = sNavType === NavType.iAppState ? oAppData && oAppData.appState : undefined;
|
|
153
165
|
|
|
154
166
|
if (!oRootController.viewState) {
|
|
155
167
|
throw new Error("viewState extension required for controller ".concat(oRootController.getMetadata().getName()));
|
|
156
168
|
}
|
|
157
169
|
|
|
158
|
-
return oRootController.viewState.applyViewState(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
170
|
+
return oRootController.viewState.applyViewState(_this4._mCurrentAppState, _this4._createNavigationParameters(oAppData, sNavType));
|
|
171
|
+
}).catch(function (oError) {
|
|
172
|
+
Log.error("appState could not be applied", oError);
|
|
173
|
+
throw oError;
|
|
162
174
|
}).finally(function () {
|
|
163
|
-
BusyLocker.unlock(
|
|
164
|
-
BusyLocker.unlock(
|
|
175
|
+
BusyLocker.unlock(_this4);
|
|
176
|
+
BusyLocker.unlock(_this4.oAppComponent.getRootControl());
|
|
165
177
|
});
|
|
166
178
|
}
|
|
167
179
|
/**
|
|
@@ -197,4 +209,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/core/helpers/C
|
|
|
197
209
|
|
|
198
210
|
return AppStateHandler;
|
|
199
211
|
}, true);
|
|
200
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcFN0YXRlSGFuZGxlci50cyJdLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIl90b0VTNlByb21pc2UiLCJvVGhlbmFibGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRoZW4iLCJhcmdzIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJzbGljZSIsImNhbGwiLCJjYXRjaCIsIkFwcFN0YXRlSGFuZGxlciIsImRlZmluZVVJNUNsYXNzIiwib0FwcENvbXBvbmVudCIsIl9tQ3VycmVudEFwcFN0YXRlIiwic0lkIiwiZ2V0SWQiLCJiTm9Sb3V0ZUNoYW5nZSIsIkxvZyIsImluZm8iLCJjcmVhdGVBcHBTdGF0ZSIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiQXBwU3RhdGUiLCJCdXN5TG9ja2VyIiwiaXNMb2NrZWQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIm9Sb3V0ZXJQcm94eSIsImdldFJvdXRlclByb3h5Iiwic0hhc2giLCJnZXRIYXNoIiwib0NvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJnZXRNZXRhTW9kZWwiLCJ2aWV3U3RhdGUiLCJyZWplY3QiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIm1Jbm5lckFwcFN0YXRlIiwib1N0b3JlRGF0YSIsImFwcFN0YXRlIiwiZGVlcEVxdWFsIiwib0FwcFN0YXRlIiwic3RvcmVJbm5lckFwcFN0YXRlV2l0aEltbWVkaWF0ZVJldHVybiIsInNBcHBTdGF0ZUtleSIsImFwcFN0YXRlS2V5Iiwic05ld0hhc2giLCJyZXBsYWNlSW5uZXJBcHBTdGF0ZUtleSIsIm5hdlRvSGFzaCIsIl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm9BcHBEYXRhIiwic05hdlR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsInJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSIsIm5hdmlnYXRpb25UeXBlIiwiYXBwbHlBcHBTdGF0ZSIsImxvY2siLCJwYXJzZU5hdmlnYXRpb24iLCJhRXJyb3JEYXRhIiwid2FybmluZyIsImFSZXN1bHRzIiwiaW5pdGlhbCIsIm9Sb290Q29udHJvbGxlciIsImlBcHBTdGF0ZSIsInVuZGVmaW5lZCIsIkVycm9yIiwiYXBwbHlWaWV3U3RhdGUiLCJvRXJyb3IiLCJlcnJvciIsImZpbmFsbHkiLCJ1bmxvY2siLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwicmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAiLCJfaXNMaXN0QmFzZWRDb21wb25lbnQiLCJvQ29tcG9uZW50IiwiaXNBIiwiQmFzZU9iamVjdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBTUEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUNELE9BQXhCOztBQUNBLFdBQVNFLGFBQVQsQ0FBdUJDLFNBQXZCLEVBQXVDO0FBQ3RDLFdBQU9DLE9BQU8sQ0FBQ0MsT0FBUixDQUNORixTQUFTLENBQ1BHLElBREYsQ0FDTyxZQUEwQjtBQUFBLHdDQUFiQyxJQUFhO0FBQWJBLFFBQUFBLElBQWE7QUFBQTs7QUFDL0IsYUFBT0MsS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxLQUFoQixDQUFzQkMsSUFBdEIsQ0FBMkJKLElBQTNCLENBQVA7QUFDQSxLQUhGLEVBSUVLLEtBSkYsQ0FJUSxZQUEwQjtBQUFBLHlDQUFiTCxJQUFhO0FBQWJBLFFBQUFBLElBQWE7QUFBQTs7QUFDaEMsYUFBT0MsS0FBSyxDQUFDQyxTQUFOLENBQWdCQyxLQUFoQixDQUFzQkMsSUFB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QUFsQjtBQUNBMUQsUUFBQUEsVUFBVSxDQUFDMEQsTUFBWCxDQUFrQixNQUFJLENBQUNyRSxhQUFMLENBQW1Cb0IsY0FBbkIsRUFBbEI7QUFDQSxPQXRDSyxDQUFQO0FBdUNBO0FBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0NrRCx5QixHQUFBLHFDQUE0QjtBQUMzQixhQUFPLEtBQUtsRSxjQUFaO0FBQ0E7QUFDRDtBQUNEO0FBQ0E7OztXQUNDbUUsdUIsR0FBQSxtQ0FBMEI7QUFDekIsVUFBSSxLQUFLbkUsY0FBVCxFQUF5QjtBQUN4QixhQUFLQSxjQUFMLEdBQXNCLEtBQXRCO0FBQ0E7QUFDRCxLOztXQUNEb0UscUIsR0FBQSwrQkFBc0JDLFVBQXRCLEVBQXVDO0FBQ3RDLGFBQU9BLFVBQVUsQ0FBQ0MsR0FBWCxDQUFlLGdDQUFmLENBQVA7QUFDQSxLOzs7SUE5STRCQyxVO0FBaUo5QjtBQUNBO0FBQ0E7O1NBQ2U3RSxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwiLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5cbmNvbnN0IE5hdlR5cGUgPSBsaWJyYXJ5Lk5hdlR5cGU7XG5mdW5jdGlvbiBfdG9FUzZQcm9taXNlKG9UaGVuYWJsZTogYW55KSB7XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoXG5cdFx0b1RoZW5hYmxlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoLi4uYXJnczogYW55W10pIHtcblx0XHRcdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xuXHRcdFx0fSlcblx0KTtcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwU3RhdGVIYW5kbGVyXCIpXG5jbGFzcyBBcHBTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0cHVibGljIHNJZDogc3RyaW5nO1xuXHRwdWJsaWMgb0FwcENvbXBvbmVudDogYW55OyAvLyBBcHBDb21wb25lbnRcblx0cHVibGljIGJOb1JvdXRlQ2hhbmdlOiBib29sZWFuO1xuXHRwcml2YXRlIF9tQ3VycmVudEFwcFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cdGNvbnN0cnVjdG9yKG9BcHBDb21wb25lbnQ6IGFueSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0FwcENvbXBvbmVudDtcblx0XHR0aGlzLnNJZCA9IGAke29BcHBDb21wb25lbnQuZ2V0SWQoKX0vQXBwU3RhdGVIYW5kbGVyYDtcblxuXHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSBmYWxzZTtcblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFIDogQXBwc3RhdGUgaGFuZGxlciBpbml0aWFsaXplZFwiKTtcblx0fVxuXHRnZXRJZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5zSWQ7XG5cdH1cblx0LyoqXG5cdCAqIENyZWF0ZXMvdXBkYXRlcyB0aGUgYXBwc3RhdGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHN0b3JlZCBkYXRhXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0Y3JlYXRlQXBwU3RhdGUoKSB7XG5cdFx0aWYgKCF0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5BcHBTdGF0ZSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCksXG5cdFx0XHRvUm91dGVyUHJveHkgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKSxcblx0XHRcdHNIYXNoID0gb1JvdXRlclByb3h5LmdldEhhc2goKSxcblx0XHRcdG9Db250cm9sbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpLFxuXHRcdFx0YklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCh0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCkpO1xuXG5cdFx0aWYgKCFvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChgdmlld1N0YXRlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG5vdCBhdmFpbGFibGUgZm9yIGNvbnRyb2xsZXI6ICR7b0NvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZXRyaWV2ZVZpZXdTdGF0ZSgpLnRoZW4oKG1Jbm5lckFwcFN0YXRlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9TdG9yZURhdGEgPSB7IGFwcFN0YXRlOiBtSW5uZXJBcHBTdGF0ZSB9O1xuXHRcdFx0aWYgKG1Jbm5lckFwcFN0YXRlICYmICFkZWVwRXF1YWwodGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSwgbUlubmVyQXBwU3RhdGUpKSB7XG5cdFx0XHRcdHRoaXMuX21DdXJyZW50QXBwU3RhdGUgPSBtSW5uZXJBcHBTdGF0ZTtcblx0XHRcdFx0Y29uc3Qgb0FwcFN0YXRlID0gb05hdmlnYXRpb25TZXJ2aWNlLnN0b3JlSW5uZXJBcHBTdGF0ZVdpdGhJbW1lZGlhdGVSZXR1cm4ob1N0b3JlRGF0YSwgdHJ1ZSk7XG5cdFx0XHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IEFwcHN0YXRlIHN0b3JlZFwiKTtcblx0XHRcdFx0Y29uc3Qgc0FwcFN0YXRlS2V5ID0gb0FwcFN0YXRlLmFwcFN0YXRlS2V5O1xuXHRcdFx0XHRjb25zdCBzTmV3SGFzaCA9IG9OYXZpZ2F0aW9uU2VydmljZS5yZXBsYWNlSW5uZXJBcHBTdGF0ZUtleShzSGFzaCwgc0FwcFN0YXRlS2V5KTtcblx0XHRcdFx0aWYgKHNOZXdIYXNoICE9PSBzSGFzaCkge1xuXHRcdFx0XHRcdG9Sb3V0ZXJQcm94eS5uYXZUb0hhc2goc05ld0hhc2gsIG51bGwsIG51bGwsIG51bGwsICFiSXNTdGlja3lNb2RlKTtcblx0XHRcdFx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBuYXZUb0hhc2hcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb1N0b3JlRGF0YTtcblx0XHR9KTtcblx0fVxuXG5cdF9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyhvQXBwRGF0YTogYW55LCBzTmF2VHlwZTogYW55KSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9BcHBEYXRhLCB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IG9BcHBEYXRhLm9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb0FwcERhdGEub1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudDogIW9BcHBEYXRhLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHksXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc05hdlR5cGVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIGFuIGFwcHN0YXRlIGJ5IGZldGNoaW5nIGFwcGRhdGEgYW5kIHBhc3NpbmcgaXQgdG8gX2FwcGx5QXBwc3RhdGVUb1BhZ2UuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBTdGF0ZUhhbmRsZXJcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhc3luYyBoYW5kbGluZ1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGFwcGx5QXBwU3RhdGUoKSB7XG5cdFx0aWYgKCF0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5BcHBTdGF0ZSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzKTtcblx0XHQvLyBEb25lIGZvciBidXN5IGluZGljYXRvclxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cblx0XHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0XHQvLyBUT0RPIG9OYXZpZ2F0aW9uU2VydmljZS5wYXJzZU5hdmlnYXRpb24oKSBzaG91bGQgcmV0dXJuIEVTNiBwcm9taXNlIGluc3RlYWQgalF1ZXJ5LnByb21pc2Vcblx0XHRyZXR1cm4gX3RvRVM2UHJvbWlzZShvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkpXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGFFcnJvckRhdGE6IGFueSkge1xuXHRcdFx0XHRpZiAoIWFFcnJvckRhdGEpIHtcblx0XHRcdFx0XHRhRXJyb3JEYXRhID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0TG9nLndhcm5pbmcoXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBmYWlsZWRcIiwgYUVycm9yRGF0YVswXSk7XG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0LyogYXBwIGRhdGEgKi9cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFFcnJvckRhdGFbMV0sXG5cdFx0XHRcdFx0YUVycm9yRGF0YVsyXVxuXHRcdFx0XHRdO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChhUmVzdWx0czogYW55KSA9PiB7XG5cdFx0XHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IFBhcnNlIE5hdmlnYXRpb24gZG9uZVwiKTtcblxuXHRcdFx0XHQvLyBhUmVzdWx0c1sxXSA9PiBvU3RhcnR1cFBhcmFtZXRlcnMgKG5vdCBldmFsdWF0ZWQpXG5cdFx0XHRcdGNvbnN0IG9BcHBEYXRhID0gYVJlc3VsdHNbMF0gfHwge30sXG5cdFx0XHRcdFx0c05hdlR5cGUgPSBhUmVzdWx0c1syXSB8fCBOYXZUeXBlLmluaXRpYWwsXG5cdFx0XHRcdFx0b1Jvb3RDb250cm9sbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXG5cdFx0XHRcdHRoaXMuX21DdXJyZW50QXBwU3RhdGUgPSBzTmF2VHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgPyBvQXBwRGF0YSAmJiBvQXBwRGF0YS5hcHBTdGF0ZSA6IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRpZiAoIW9Sb290Q29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHZpZXdTdGF0ZSBleHRlbnNpb24gcmVxdWlyZWQgZm9yIGNvbnRyb2xsZXIgJHtvUm9vdENvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZVxuXHRcdFx0XHRcdC5hcHBseVZpZXdTdGF0ZSh0aGlzLl9tQ3VycmVudEFwcFN0YXRlLCB0aGlzLl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyhvQXBwRGF0YSwgc05hdlR5cGUpKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcImFwcFN0YXRlIGNvdWxkIG5vdCBiZSBhcHBsaWVkXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzKTtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIFRvIGNoZWNrIGlzIHJvdXRlIGlzIGNoYW5nZWQgYnkgY2hhbmdlIGluIHRoZSBpQVBQU3RhdGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcm91dGUgaGFzIGNobmFnZWRcblx0ICovXG5cdGNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYk5vUm91dGVDaGFuZ2U7XG5cdH1cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSByb3V0ZSBjaGFuZ2VkIGJ5IGlBUFBTdGF0ZS5cblx0ICovXG5cdHJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCkge1xuXHRcdGlmICh0aGlzLmJOb1JvdXRlQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdF9pc0xpc3RCYXNlZENvbXBvbmVudChvQ29tcG9uZW50OiBhbnkpIHtcblx0XHRyZXR1cm4gb0NvbXBvbmVudC5pc0EoXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RDb21wb25lbnRcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAZ2xvYmFsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IEFwcFN0YXRlSGFuZGxlcjtcbiJdfQ==
|
|
212
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcFN0YXRlSGFuZGxlci50cyJdLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiTmF2VHlwZSIsImxpYnJhcnkiLCJBcHBTdGF0ZUhhbmRsZXIiLCJkZWZpbmVVSTVDbGFzcyIsIm9BcHBDb21wb25lbnQiLCJfbUN1cnJlbnRBcHBTdGF0ZSIsInNJZCIsImdldElkIiwiYk5vUm91dGVDaGFuZ2UiLCJMb2ciLCJpbmZvIiwiY3JlYXRlQXBwU3RhdGUiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkFwcFN0YXRlIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwib05hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJvUm91dGVyUHJveHkiLCJnZXRSb3V0ZXJQcm94eSIsInNIYXNoIiwiZ2V0SGFzaCIsIm9Db250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwidmlld1N0YXRlIiwiRXJyb3IiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIm1Jbm5lckFwcFN0YXRlIiwib1N0b3JlRGF0YSIsImFwcFN0YXRlIiwiZGVlcEVxdWFsIiwic3RvcmVJbm5lckFwcFN0YXRlIiwic0FwcFN0YXRlS2V5Iiwic05ld0hhc2giLCJyZXBsYWNlSW5uZXJBcHBTdGF0ZUtleSIsIm5hdlRvSGFzaCIsIm9FcnJvciIsImVycm9yIiwiX2NyZWF0ZU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib0FwcERhdGEiLCJzTmF2VHlwZSIsIk9iamVjdCIsImFzc2lnbiIsInNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsIm9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsIm9TZWxlY3Rpb25WYXJpYW50IiwicmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQiLCJiTmF2U2VsVmFySGFzRGVmYXVsdHNPbmx5IiwibmF2aWdhdGlvblR5cGUiLCJhcHBseUFwcFN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJsb2NrIiwidG9FUzZQcm9taXNlIiwicGFyc2VOYXZpZ2F0aW9uIiwiY2F0Y2giLCJhRXJyb3JEYXRhIiwid2FybmluZyIsImFSZXN1bHRzIiwiaW5pdGlhbCIsIm9Sb290Q29udHJvbGxlciIsImlBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImFwcGx5Vmlld1N0YXRlIiwiZmluYWxseSIsInVubG9jayIsImNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAiLCJyZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCIsIl9pc0xpc3RCYXNlZENvbXBvbmVudCIsIm9Db21wb25lbnQiLCJpc0EiLCJCYXNlT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7OztBQWdqQk8sa0JBQWdCQSxJQUFoQixFQUFzQkMsT0FBdEIsRUFBK0I7QUFDckMsUUFBSTtBQUNILFVBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFqQjtBQUNBLEtBRkQsQ0FFRSxPQUFNRyxDQUFOLEVBQVM7QUFDVixhQUFPRixPQUFPLENBQUNFLENBQUQsQ0FBZDtBQUNBOztBQUNELFFBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFyQixFQUEyQjtBQUMxQixhQUFPRixNQUFNLENBQUNFLElBQVAsQ0FBWSxLQUFLLENBQWpCLEVBQW9CSCxPQUFwQixDQUFQO0FBQ0E7O0FBQ0QsV0FBT0MsTUFBUDtBQUNBOzs7Ozs7QUFuakJELE1BQU1HLE9BQU8sR0FBR0MsT0FBTyxDQUFDRCxPQUF4QjtNQUdNRSxlLFdBRExDLGNBQWMsQ0FBQyw2QkFBRCxDOzs7QUFHYTtBQUczQiw2QkFBWUMsYUFBWixFQUFnQztBQUFBOztBQUMvQjtBQUQrQixZQUR4QkMsaUJBQ3dCLEdBRGlCLEVBQ2pCO0FBRS9CLFlBQUtELGFB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O0FBQ0E7QUFDQTs7O1dBQ0NtRCx5QixHQUFBLHFDQUE0QjtBQUMzQixhQUFPLEtBQUtuRSxjQUFaO0FBQ0E7QUFDRDtBQUNEO0FBQ0E7OztXQUNDb0UsdUIsR0FBQSxtQ0FBMEI7QUFDekIsVUFBSSxLQUFLcEUsY0FBVCxFQUF5QjtBQUN4QixhQUFLQSxjQUFMLEdBQXNCLEtBQXRCO0FBQ0E7QUFDRCxLOztXQUNEcUUscUIsR0FBQSwrQkFBc0JDLFVBQXRCLEVBQXVDO0FBQ3RDLGFBQU9BLFVBQVUsQ0FBQ0MsR0FBWCxDQUFlLGdDQUFmLENBQVA7QUFDQSxLOzs7SUFuSjRCQyxVO0FBc0o5QjtBQUNBO0FBQ0E7O1NBQ2U5RSxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcEVxdWFsXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHRvRVM2UHJvbWlzZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Ub0VTNlByb21pc2VcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9saWJyYXJ5XCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuXG5jb25zdCBOYXZUeXBlID0gbGlicmFyeS5OYXZUeXBlO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5BcHBTdGF0ZUhhbmRsZXJcIilcbmNsYXNzIEFwcFN0YXRlSGFuZGxlciBleHRlbmRzIEJhc2VPYmplY3Qge1xuXHRwdWJsaWMgc0lkOiBzdHJpbmc7XG5cdHB1YmxpYyBvQXBwQ29tcG9uZW50OiBhbnk7IC8vIEFwcENvbXBvbmVudFxuXHRwdWJsaWMgYk5vUm91dGVDaGFuZ2U6IGJvb2xlYW47XG5cdHByaXZhdGUgX21DdXJyZW50QXBwU3RhdGU6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0Y29uc3RydWN0b3Iob0FwcENvbXBvbmVudDogYW55KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm9BcHBDb21wb25lbnQgPSBvQXBwQ29tcG9uZW50O1xuXHRcdHRoaXMuc0lkID0gYCR7b0FwcENvbXBvbmVudC5nZXRJZCgpfS9BcHBTdGF0ZUhhbmRsZXJgO1xuXG5cdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEUgOiBBcHBzdGF0ZSBoYW5kbGVyIGluaXRpYWxpemVkXCIpO1xuXHR9XG5cdGdldElkKCkge1xuXHRcdHJldHVybiB0aGlzLnNJZDtcblx0fVxuXHQvKipcblx0ICogQ3JlYXRlcy91cGRhdGVzIHRoZSBhcHBzdGF0ZS5cblx0ICpcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGFcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVBcHBTdGF0ZSgpOiBQcm9taXNlPHZvaWQgfCBhbnk+IHtcblx0XHRpZiAoIXRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkFwcFN0YXRlIHx8IEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKSxcblx0XHRcdG9Sb3V0ZXJQcm94eSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdFx0c0hhc2ggPSBvUm91dGVyUHJveHkuZ2V0SGFzaCgpLFxuXHRcdFx0b0NvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKHRoaXMub0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSk7XG5cblx0XHRpZiAoIW9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGB2aWV3U3RhdGUgY29udHJvbGxlciBleHRlbnNpb24gbm90IGF2YWlsYWJsZSBmb3IgY29udHJvbGxlcjogJHtvQ29udHJvbGxlci5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHR9XG5cblx0XHRjb25zdCBtSW5uZXJBcHBTdGF0ZSA9IGF3YWl0IG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZXRyaWV2ZVZpZXdTdGF0ZSgpO1xuXHRcdGNvbnN0IG9TdG9yZURhdGEgPSB7IGFwcFN0YXRlOiBtSW5uZXJBcHBTdGF0ZSB9O1xuXHRcdGlmIChtSW5uZXJBcHBTdGF0ZSAmJiAhZGVlcEVxdWFsKHRoaXMuX21DdXJyZW50QXBwU3RhdGUsIG1Jbm5lckFwcFN0YXRlKSkge1xuXHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9IG1Jbm5lckFwcFN0YXRlO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgc0FwcFN0YXRlS2V5ID0gYXdhaXQgb05hdmlnYXRpb25TZXJ2aWNlLnN0b3JlSW5uZXJBcHBTdGF0ZShvU3RvcmVEYXRhLCB0cnVlLCB0cnVlKTtcblx0XHRcdFx0TG9nLmluZm8oXCJBUFBTVEFURTogQXBwc3RhdGUgc3RvcmVkXCIpO1xuXHRcdFx0XHRjb25zdCBzTmV3SGFzaCA9IG9OYXZpZ2F0aW9uU2VydmljZS5yZXBsYWNlSW5uZXJBcHBTdGF0ZUtleShzSGFzaCwgc0FwcFN0YXRlS2V5KTtcblx0XHRcdFx0aWYgKHNOZXdIYXNoICE9PSBzSGFzaCkge1xuXHRcdFx0XHRcdG9Sb3V0ZXJQcm94eS5uYXZUb0hhc2goc05ld0hhc2gsIG51bGwsIG51bGwsIG51bGwsICFiSXNTdGlja3lNb2RlKTtcblx0XHRcdFx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBuYXZUb0hhc2hcIik7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb1N0b3JlRGF0YTtcblx0fVxuXG5cdF9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyhvQXBwRGF0YTogYW55LCBzTmF2VHlwZTogYW55KSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9BcHBEYXRhLCB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IG9BcHBEYXRhLm9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb0FwcERhdGEub1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudDogIW9BcHBEYXRhLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHksXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc05hdlR5cGVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIGFuIGFwcHN0YXRlIGJ5IGZldGNoaW5nIGFwcGRhdGEgYW5kIHBhc3NpbmcgaXQgdG8gX2FwcGx5QXBwc3RhdGVUb1BhZ2UuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAc3RhdGljXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5BcHBTdGF0ZUhhbmRsZXJcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGZvciBhc3luYyBoYW5kbGluZ1xuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdGFwcGx5QXBwU3RhdGUoKSB7XG5cdFx0aWYgKCF0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5BcHBTdGF0ZSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzKTtcblx0XHQvLyBEb25lIGZvciBidXN5IGluZGljYXRvclxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cblx0XHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0XHQvLyBUT0RPIG9OYXZpZ2F0aW9uU2VydmljZS5wYXJzZU5hdmlnYXRpb24oKSBzaG91bGQgcmV0dXJuIEVTNiBwcm9taXNlIGluc3RlYWQgalF1ZXJ5LnByb21pc2Vcblx0XHRyZXR1cm4gdG9FUzZQcm9taXNlKG9OYXZpZ2F0aW9uU2VydmljZS5wYXJzZU5hdmlnYXRpb24oKSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoYUVycm9yRGF0YTogYW55KSB7XG5cdFx0XHRcdGlmICghYUVycm9yRGF0YSkge1xuXHRcdFx0XHRcdGFFcnJvckRhdGEgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRMb2cud2FybmluZyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGZhaWxlZFwiLCBhRXJyb3JEYXRhWzBdKTtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQvKiBhcHAgZGF0YSAqL1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YUVycm9yRGF0YVsxXSxcblx0XHRcdFx0XHRhRXJyb3JEYXRhWzJdXG5cdFx0XHRcdF07XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFSZXN1bHRzOiBhbnkpID0+IHtcblx0XHRcdFx0TG9nLmluZm8oXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBkb25lXCIpO1xuXG5cdFx0XHRcdC8vIGFSZXN1bHRzWzFdID0+IG9TdGFydHVwUGFyYW1ldGVycyAobm90IGV2YWx1YXRlZClcblx0XHRcdFx0Y29uc3Qgb0FwcERhdGEgPSBhUmVzdWx0c1swXSB8fCB7fSxcblx0XHRcdFx0XHRzTmF2VHlwZSA9IGFSZXN1bHRzWzJdIHx8IE5hdlR5cGUuaW5pdGlhbCxcblx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCk7XG5cblx0XHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9IHNOYXZUeXBlID09PSBOYXZUeXBlLmlBcHBTdGF0ZSA/IG9BcHBEYXRhICYmIG9BcHBEYXRhLmFwcFN0YXRlIDogdW5kZWZpbmVkO1xuXG5cdFx0XHRcdGlmICghb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdmlld1N0YXRlIGV4dGVuc2lvbiByZXF1aXJlZCBmb3IgY29udHJvbGxlciAke29Sb290Q29udHJvbGxlci5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKFxuXHRcdFx0XHRcdHRoaXMuX21DdXJyZW50QXBwU3RhdGUsXG5cdFx0XHRcdFx0dGhpcy5fY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGEsIHNOYXZUeXBlKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiYXBwU3RhdGUgY291bGQgbm90IGJlIGFwcGxpZWRcIiwgb0Vycm9yKTtcblx0XHRcdFx0dGhyb3cgb0Vycm9yO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcyk7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpKTtcblx0XHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBUbyBjaGVjayBpcyByb3V0ZSBpcyBjaGFuZ2VkIGJ5IGNoYW5nZSBpbiB0aGUgaUFQUFN0YXRlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJvdXRlIGhhcyBjaG5hZ2VkXG5cdCAqL1xuXHRjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkge1xuXHRcdHJldHVybiB0aGlzLmJOb1JvdXRlQ2hhbmdlO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXNldCB0aGUgcm91dGUgY2hhbmdlZCBieSBpQVBQU3RhdGUuXG5cdCAqL1xuXHRyZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCgpIHtcblx0XHRpZiAodGhpcy5iTm9Sb3V0ZUNoYW5nZSkge1xuXHRcdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXHRfaXNMaXN0QmFzZWRDb21wb25lbnQob0NvbXBvbmVudDogYW55KSB7XG5cdFx0cmV0dXJuIG9Db21wb25lbnQuaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0Q29tcG9uZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogQGdsb2JhbFxuICovXG5leHBvcnQgZGVmYXVsdCBBcHBTdGF0ZUhhbmRsZXI7XG4iXX0=
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
2
|
import deepEqual from "sap/base/util/deepEqual";
|
|
3
3
|
import { defineUI5Class } from "sap/fe/core/helpers/ClassSupport";
|
|
4
|
+
import toES6Promise from "sap/fe/core/helpers/ToES6Promise";
|
|
4
5
|
import library from "sap/fe/navigation/library";
|
|
5
6
|
import BaseObject from "sap/ui/base/Object";
|
|
6
7
|
import BusyLocker from "./controllerextensions/BusyLocker";
|
|
7
8
|
import ModelHelper from "./helpers/ModelHelper";
|
|
8
9
|
|
|
9
10
|
const NavType = library.NavType;
|
|
10
|
-
function _toES6Promise(oThenable: any) {
|
|
11
|
-
return Promise.resolve(
|
|
12
|
-
oThenable
|
|
13
|
-
.then(function (...args: any[]) {
|
|
14
|
-
return Array.prototype.slice.call(args);
|
|
15
|
-
})
|
|
16
|
-
.catch(function (...args: any[]) {
|
|
17
|
-
return Array.prototype.slice.call(args);
|
|
18
|
-
})
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
11
|
|
|
22
12
|
@defineUI5Class("sap.fe.core.AppStateHandler")
|
|
23
13
|
class AppStateHandler extends BaseObject {
|
|
@@ -42,9 +32,9 @@ class AppStateHandler extends BaseObject {
|
|
|
42
32
|
* @returns A promise resolving the stored data
|
|
43
33
|
* @ui5-restricted
|
|
44
34
|
*/
|
|
45
|
-
createAppState() {
|
|
35
|
+
async createAppState(): Promise<void | any> {
|
|
46
36
|
if (!this.oAppComponent.getEnvironmentCapabilities().getCapabilities().AppState || BusyLocker.isLocked(this)) {
|
|
47
|
-
return
|
|
37
|
+
return;
|
|
48
38
|
}
|
|
49
39
|
|
|
50
40
|
const oNavigationService = this.oAppComponent.getNavigationService(),
|
|
@@ -54,25 +44,28 @@ class AppStateHandler extends BaseObject {
|
|
|
54
44
|
bIsStickyMode = ModelHelper.isStickySessionSupported(this.oAppComponent.getMetaModel());
|
|
55
45
|
|
|
56
46
|
if (!oController.viewState) {
|
|
57
|
-
|
|
47
|
+
throw new Error(`viewState controller extension not available for controller: ${oController.getMetadata().getName()}`);
|
|
58
48
|
}
|
|
59
49
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
50
|
+
const mInnerAppState = await oController.viewState.retrieveViewState();
|
|
51
|
+
const oStoreData = { appState: mInnerAppState };
|
|
52
|
+
if (mInnerAppState && !deepEqual(this._mCurrentAppState, mInnerAppState)) {
|
|
53
|
+
this._mCurrentAppState = mInnerAppState;
|
|
54
|
+
try {
|
|
55
|
+
const sAppStateKey = await oNavigationService.storeInnerAppState(oStoreData, true, true);
|
|
65
56
|
Log.info("APPSTATE: Appstate stored");
|
|
66
|
-
const sAppStateKey = oAppState.appStateKey;
|
|
67
57
|
const sNewHash = oNavigationService.replaceInnerAppStateKey(sHash, sAppStateKey);
|
|
68
58
|
if (sNewHash !== sHash) {
|
|
69
59
|
oRouterProxy.navToHash(sNewHash, null, null, null, !bIsStickyMode);
|
|
70
60
|
this.bNoRouteChange = true;
|
|
71
61
|
}
|
|
72
62
|
Log.info("APPSTATE: navToHash");
|
|
63
|
+
} catch (oError: any) {
|
|
64
|
+
Log.error(oError);
|
|
73
65
|
}
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return oStoreData;
|
|
76
69
|
}
|
|
77
70
|
|
|
78
71
|
_createNavigationParameters(oAppData: any, sNavType: any) {
|
|
@@ -104,7 +97,7 @@ class AppStateHandler extends BaseObject {
|
|
|
104
97
|
|
|
105
98
|
const oNavigationService = this.oAppComponent.getNavigationService();
|
|
106
99
|
// TODO oNavigationService.parseNavigation() should return ES6 promise instead jQuery.promise
|
|
107
|
-
return
|
|
100
|
+
return toES6Promise(oNavigationService.parseNavigation())
|
|
108
101
|
.catch(function (aErrorData: any) {
|
|
109
102
|
if (!aErrorData) {
|
|
110
103
|
aErrorData = [];
|
|
@@ -132,12 +125,14 @@ class AppStateHandler extends BaseObject {
|
|
|
132
125
|
throw new Error(`viewState extension required for controller ${oRootController.getMetadata().getName()}`);
|
|
133
126
|
}
|
|
134
127
|
|
|
135
|
-
return oRootController.viewState
|
|
136
|
-
|
|
137
|
-
.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
128
|
+
return oRootController.viewState.applyViewState(
|
|
129
|
+
this._mCurrentAppState,
|
|
130
|
+
this._createNavigationParameters(oAppData, sNavType)
|
|
131
|
+
);
|
|
132
|
+
})
|
|
133
|
+
.catch(function (oError: any) {
|
|
134
|
+
Log.error("appState could not be applied", oError);
|
|
135
|
+
throw oError;
|
|
141
136
|
})
|
|
142
137
|
.finally(() => {
|
|
143
138
|
BusyLocker.unlock(this);
|