@sapui5/sap.fe.core 1.130.0 → 1.131.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +3 -3
- package/src/sap/fe/core/ActionRuntime.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +38 -14
- package/src/sap/fe/core/CommonUtils.ts +39 -15
- package/src/sap/fe/core/TemplateComponent.js +4 -1
- package/src/sap/fe/core/TemplateComponent.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
- package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
- package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
- package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
- package/src/sap/fe/core/converters/ConverterContext.js +10 -3
- package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
- package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
- package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
- package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
- package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
- package/src/sap/fe/core/helpers/MetaPath.js +17 -2
- package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
- package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
- package/src/sap/fe/core/library.js +5 -2
- package/src/sap/fe/core/library.support.js +3 -3
- package/src/sap/fe/core/library.support.ts +2 -1
- package/src/sap/fe/core/library.ts +4 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +11 -3
- package/src/sap/fe/core/messagebundle_bg.properties +14 -6
- package/src/sap/fe/core/messagebundle_ca.properties +10 -2
- package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
- package/src/sap/fe/core/messagebundle_cs.properties +10 -2
- package/src/sap/fe/core/messagebundle_cy.properties +10 -2
- package/src/sap/fe/core/messagebundle_da.properties +10 -2
- package/src/sap/fe/core/messagebundle_de.properties +12 -4
- package/src/sap/fe/core/messagebundle_el.properties +10 -2
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
- package/src/sap/fe/core/messagebundle_es.properties +12 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
- package/src/sap/fe/core/messagebundle_et.properties +10 -2
- package/src/sap/fe/core/messagebundle_fi.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr.properties +10 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
- package/src/sap/fe/core/messagebundle_hi.properties +10 -2
- package/src/sap/fe/core/messagebundle_hr.properties +11 -3
- package/src/sap/fe/core/messagebundle_hu.properties +11 -3
- package/src/sap/fe/core/messagebundle_id.properties +10 -2
- package/src/sap/fe/core/messagebundle_it.properties +10 -2
- package/src/sap/fe/core/messagebundle_iw.properties +11 -3
- package/src/sap/fe/core/messagebundle_ja.properties +10 -2
- package/src/sap/fe/core/messagebundle_kk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ko.properties +10 -2
- package/src/sap/fe/core/messagebundle_lt.properties +10 -2
- package/src/sap/fe/core/messagebundle_lv.properties +10 -2
- package/src/sap/fe/core/messagebundle_mk.properties +10 -2
- package/src/sap/fe/core/messagebundle_ms.properties +10 -2
- package/src/sap/fe/core/messagebundle_nl.properties +12 -4
- package/src/sap/fe/core/messagebundle_no.properties +11 -3
- package/src/sap/fe/core/messagebundle_pl.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt.properties +10 -2
- package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
- package/src/sap/fe/core/messagebundle_ro.properties +10 -2
- package/src/sap/fe/core/messagebundle_ru.properties +10 -2
- package/src/sap/fe/core/messagebundle_sh.properties +10 -2
- package/src/sap/fe/core/messagebundle_sk.properties +10 -2
- package/src/sap/fe/core/messagebundle_sl.properties +10 -2
- package/src/sap/fe/core/messagebundle_sr.properties +10 -2
- package/src/sap/fe/core/messagebundle_sv.properties +10 -2
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +12 -4
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +11 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
- package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
- package/src/sap/fe/core/operationsHelper.js +4 -4
- package/src/sap/fe/core/operationsHelper.ts +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
- package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
|
@@ -124,9 +124,6 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
124
124
|
) {
|
|
125
125
|
/* Do Nothing */
|
|
126
126
|
};
|
|
127
|
-
_proto.createRenderer = function createRenderer() {
|
|
128
|
-
return {};
|
|
129
|
-
};
|
|
130
127
|
_proto.getUser = function getUser() {
|
|
131
128
|
return {};
|
|
132
129
|
};
|
|
@@ -508,7 +505,7 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
508
505
|
* @returns A promise the success handler of the resolve promise get an expanded shell hash as first argument
|
|
509
506
|
*/;
|
|
510
507
|
_proto2.expandCompactHash = async function expandCompactHash(sHashFragment) {
|
|
511
|
-
return sHashFragment; //this.navTargetResolution.expandCompactHash(sHashFragment);
|
|
508
|
+
return Promise.resolve(sHashFragment); //this.navTargetResolution.expandCompactHash(sHashFragment);
|
|
512
509
|
};
|
|
513
510
|
_proto2.getHash = function getHash() {
|
|
514
511
|
return `#${this.urlParsingService.getShellHash(window.location.href)}`;
|
|
@@ -589,14 +586,6 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
589
586
|
this.oShellContainer.deregisterDirtyStateProvider(fnDirtyStateProvider);
|
|
590
587
|
}
|
|
591
588
|
|
|
592
|
-
/**
|
|
593
|
-
* Will call createRenderer method of ushell container.
|
|
594
|
-
* @returns Returns renderer object
|
|
595
|
-
*/;
|
|
596
|
-
_proto2.createRenderer = async function createRenderer() {
|
|
597
|
-
return this.oShellContainer.createRenderer();
|
|
598
|
-
}
|
|
599
|
-
|
|
600
589
|
/**
|
|
601
590
|
* Will call getUser method of ushell container.
|
|
602
591
|
* @returns Returns User object
|
|
@@ -848,4 +837,4 @@ sap.ui.define(["sap/base/Log", "sap/ui/core/service/Service", "sap/ui/core/servi
|
|
|
848
837
|
}(ServiceFactory);
|
|
849
838
|
return ShellServicesFactory;
|
|
850
839
|
}, false);
|
|
851
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiX1NlcnZpY2UiLCJfaW5oZXJpdHNMb29zZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJjcmVhdGVSZW5kZXJlciIsImdldFVzZXIiLCJnZXRVc2VySW5pdGlhbHMiLCJoYXNVU2hlbGwiLCJyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJ1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsInNldEJhY2tOYXZpZ2F0aW9uIiwic2V0SGllcmFyY2h5Iiwic2V0VGl0bGUiLCJnZXRDb250ZW50RGVuc2l0eSIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiZ2V0UHJpbWFyeUludGVudCIsIndhaXRGb3JQbHVnaW5zTG9hZCIsImdldFRpdGxlIiwiZ2V0UGVyc29uYWxpemVyIiwiX3BlcnNJZCIsIl9zY29wZSIsIl9jb21wb25lbnQiLCJnZXRQZXJzRGF0YSIsImhpc3RvcnlFbmFibGVkIiwic3VnZ2VzdGlvbnNFbmFibGVkIiwiYXBwcyIsInNldFBlcnNEYXRhIiwiZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIiLCJfaXRlbU5hbWUiLCJnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEiLCJzZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEiLCJfb2JqZWN0IiwiZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyIiwiX2tleSIsImdldFNoZWxsQ29uZmlnIiwiZ2V0UmVnaXN0ZXJlZFBsdWdpbnMiLCJBcHBXYXJtdXAiLCJSZW5kZXJlckV4dGVuc2lvbnMiLCJVc2VyRGVmYXVsdHMiLCJVc2VySW1hZ2UiLCJpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCIsInBhcnNlUGFyYW1ldGVycyIsImdldEV4dGVuc2lvblNlcnZpY2UiLCJnZXRJbmZyYW1lVXJsIiwiU2VydmljZSIsIlNoZWxsU2VydmljZXMiLCJfU2VydmljZTIiLCJfdGhpcyIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5MiIsImNhbGwiLCJhcHBsaWNhdGlvblBlcnNvbm5hbGl6ZXJzIiwiX2V4cG9ydHMiLCJfcHJvdG8yIiwib0NvbnRleHQiLCJnZXRDb250ZXh0IiwiYXBwQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvU2hlbGxDb250YWluZXIiLCJzZXR0aW5ncyIsInNoZWxsQ29udGFpbmVyIiwibGlua3NDYWNoZSIsImZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUiLCJvQXJncyIsImFDYWNoZWRTZW1hbnRpY09iamVjdHMiLCJhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwibGlua0ZpbHRlciIsInNlbWFudGljT2JqZWN0IiwicHVzaCIsImxpbmtzIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsIm9sZEFyZ3MiLCJuZXdBcmdzIiwiY2FjaGVkTGlua3MiLCJyZWplY3QiLCJyZXNvbHZlRm4iLCJyZWplY3RGbiIsIm5hdmlnYXRpb25TZXJ2aWNlUCIsImdldFNlcnZpY2VBc3luYyIsInVzZXJJbmZvU2VydmljZVAiLCJvVXJsUGFyc2luZ1NlcnZpY2VQcm9taXNlIiwib1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlIiwib1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UiLCJvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbEV4dGVuc2lvblNlcnZpY2VQcm9taXNlIiwiYWxsIiwidGhlbiIsIl9yZWYiLCJuYXZpZ2F0aW9uU2VydmljZSIsInVzZXJJbmZvU2VydmljZSIsIm9VcmxQYXJzaW5nU2VydmljZSIsIm9TaGVsbE5hdmlnYXRpb24iLCJvU2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlIiwib1NoZWxsUGx1Z2luTWFuYWdlciIsIm9TaGVsbEV4dGVuc2lvblNlcnZpY2UiLCJhcHBsaWNhdGlvbk5hdmlnYXRpb24iLCJ1cmxQYXJzaW5nU2VydmljZSIsInNoZWxsTmF2aWdhdGlvbiIsInNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsInNoZWxsUGx1Z2luTWFuYWdlciIsImV4dGVuc2lvblNlcnZpY2UiLCJjYXRjaCIsImdldFNlbWFudGljT2JqZWN0cyIsIm9DYWNoZVJlc3VsdHMiLCJhTGlua3MiLCJvU2VtYW50aWNPYmplY3RzTGlua3MiLCJpIiwiYXNzaWduIiwiYU1lcmdlZExpbmtzIiwiaiIsIml0ZW0iLCJnZXRTaGVsbFVJU2VydmljZSIsImdldFNlcnZpY2UiLCJnZXRTaGVsbENvbnRhaW5lciIsInVzaGVsbENvbnRhaW5lciIsImFwcFVybCIsImluQXBwUnVudGltZSIsImdldEZMUFVybEFzeW5jIiwiZXJyb3IiLCJMb2ciLCJvTmF2QXJndW1lbnRzQXJyIiwib0NvbXBvbmVudCIsIm9UYXJnZXQiLCJzQXBwU3RhdGVLZXkiLCJhVGFyZ2V0cyIsInNIYXNoRnJhZ21lbnQiLCJnZXRTaGVsbEhhc2giLCJmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zIiwiaGFzT3duUHJvcGVydHkiLCJNQU5BR0VfRkVfQ0FDSEVTIiwiZW5hYmxlZCIsIm9OZXdTaGVsbEhhc2giLCJiRGlydHkiLCJmbkRpcnR5U3RhdGVQcm92aWRlciIsImdldEluaXRpYWxzIiwiZm5OYXZGaWx0ZXIiLCJmbkNhbGxCYWNrIiwiYUhpZXJhcmNoeUxldmVscyIsInNUaXRsZSIsInNTZW1hbnRpY09iamVjdCIsIm1QYXJhbWV0ZXJzIiwicHJpbWFyeUludGVudCIsImlzQXJyYXkiLCJfdGhpcyRzaGVsbFBsdWdpbk1hbmEiLCJnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZSIsImZhaWwiLCJvRXJyb3IiLCJwZXJzSWQiLCJzY29wZSIsImNvbXBvbmVudCIsImtleUNhdGVnb3J5IiwiY29uc3RhbnRzIiwiRklYRURfS0VZIiwid3JpdGVGcmVxdWVuY3kiLCJMT1ciLCJjbGllbnRTdG9yYWdlQWxsb3dlZCIsInZhbGlkaXR5IiwiSW5maW5pdHkiLCJrZXkiLCJkZWxldGVDb250YWluZXIiLCJpdGVtTmFtZSIsImNvbnRhaW5lciIsImdldE1hbmlmZXN0IiwiaWQiLCJfYXdhaXQkdGhpcyRnZXRBcHBsaWMiLCJkYXRhIiwidXJsIiwiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkiLCJfU2VydmljZUZhY3RvcnkiLCJfcHJvdG8zIiwiY3JlYXRlSW5zdGFuY2UiLCJzZXJ2aWNlQ29udGV4dCIsInNhcCIsInVpIiwicmVxdWlyZSIsInNoZWxsU2VydmljZSIsImdldFNoZWxsU2VydmljZXMiLCJpbnRlcm5hbE1vZGVsIiwiZ2V0TW9kZWwiLCJzZW1hbnRpY09iamVjdHMiLCJzZXRQcm9wZXJ0eSIsIlNlcnZpY2VGYWN0b3J5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaGVsbFNlcnZpY2VzRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL0V4dGVuc2lvblwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IExpbmssIExpbmtGaWx0ZXIsIFRhcmdldCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFBlcnNvbmFsaXphdGlvblYyIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgeyB0eXBlIFBlcnNJZCwgdHlwZSBTY29wZSB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgdHlwZSBTaGVsbE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvU2hlbGxOYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBVUkxQYXJzaW5nIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkSGFzaCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIFVzZXJJbmZvIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VzZXJJbmZvXCI7XG5pbXBvcnQgdHlwZSBTaGVsbFVJU2VydmljZSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cEFwcFN0YXRlID0ge1xuXHRnZXREYXRhKCk6IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50Pzoge1xuXHRcdFx0U2VsZWN0T3B0aW9ucz86IHtcblx0XHRcdFx0UHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFJhbmdlczoge1xuXHRcdFx0XHRcdE9wdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdFNpZ246IHN0cmluZztcblx0XHRcdFx0XHRMb3c6IHN0cmluZztcblx0XHRcdFx0fVtdO1xuXHRcdFx0fVtdO1xuXHRcdH07XG5cdH07XG59O1xuXG4vLyBzZWU6IHNhcFxcdXNoZWxsXFxzZXJ2aWNlc1xcX1BlcnNvbmFsaXphdGlvblxcY29uc3RhbnRzLmpzXG5leHBvcnQgdHlwZSBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzID0gUGVyc29uYWxpemF0aW9uVjIgJiB7XG5cdGNvbnN0YW50czoge1xuXHRcdGtleUNhdGVnb3J5OiB7XG5cdFx0XHRGSVhFRF9LRVk6IHN0cmluZztcblx0XHRcdEdFTkVSQVRFRF9LRVk6IHN0cmluZztcblx0XHR9O1xuXHRcdHdyaXRlRnJlcXVlbmN5OiB7XG5cdFx0XHRISUdIOiBzdHJpbmc7XG5cdFx0XHRMT1c6IHN0cmluZztcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgUGVyc29uYWxpemVyVHlwZSA9IHtcblx0Z2V0UGVyc0RhdGE6ICgpID0+IFByb21pc2U8b2JqZWN0Pjtcblx0c2V0UGVyc0RhdGE6IChwZXJzRGF0YTogb2JqZWN0KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgU2hlbGxDb25maWdUeXBlID0ge1xuXHRhcHBzOiB7XG5cdFx0aW5wdXRGaWVsZEhpc3Rvcnk6IHtcblx0XHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIEZMUFBsdWdpbiA9IHtcblx0Y29tcG9uZW50OiBzdHJpbmc7XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdHVybDogc3RyaW5nO1xuXHRjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUgPSB7XG5cdEFwcFdhcm11cDogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRSZW5kZXJlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0VXNlckRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJJbWFnZTogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xufTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cdGluc3RhbmNlVHlwZTogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdHM6IHN0cmluZ1tdO1xuXG5cdGdldExpbmtzKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBPbWl0PExpbmtGaWx0ZXIsIFwidWk1Q29tcG9uZW50XCI+W10pOiBQcm9taXNlPExpbmtbXVtdPjtcblxuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IHZvaWQ7XG5cblx0Z2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT47XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKTogdm9pZDtcblxuXHRocmVmRm9yRXh0ZXJuYWwob0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SHJlZihvVGFyZ2V0OiBvYmplY3QsIG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPjtcblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPjtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IG9iamVjdDtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj47XG5cblx0bmF2aWdhdGUob1RhcmdldDogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTx1bmRlZmluZWQ+O1xuXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+O1xuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRleHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmc7XG5cblx0cGFyc2VTaGVsbEhhc2goc0hhc2g6IHN0cmluZyk6IFBhcnNlZEhhc2g7XG5cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJzcGxpdEhhc2hcIl0+O1xuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmc7XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQ7XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0Y3JlYXRlUmVuZGVyZXIoKTogb2JqZWN0O1xuXG5cdGdldFVzZXIoKTogVXNlckluZm87XG5cdGdldFVzZXJJbml0aWFscygpOiBzdHJpbmc7XG5cblx0aGFzVVNoZWxsKCk6IGJvb2xlYW47XG5cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRzZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrPzogRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+KTogUHJvbWlzZTx2b2lkPjtcblxuXHRzZXRUaXRsZShzVGl0bGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbjtcblxuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmc7XG5cblx0Z2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBvYmplY3QpOiBQcm9taXNlPExpbms+O1xuXG5cdHdhaXRGb3JQbHVnaW5zTG9hZCgpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZTtcblxuXHRpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpOiBib29sZWFuO1xuXG5cdGdldFRpdGxlKCk6IFByb21pc2U8c3RyaW5nPjtcblxuXHRnZXRQZXJzb25hbGl6ZXIocGVyc0lkOiBQZXJzSWQsIHNjb3BlOiBTY29wZSwgY29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPjtcblxuXHRkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoa2V5OiBzdHJpbmcsIHNjb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPjtcblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGU7XG5cblx0cGFyc2VQYXJhbWV0ZXJzKHVybDogc3RyaW5nKTogUmV0dXJuVHlwZTxVUkxQYXJzaW5nW1wicGFyc2VQYXJhbWV0ZXJzXCJdPjtcblxuXHRnZXRFeHRlbnNpb25TZXJ2aWNlKCk6IEV4dGVuc2lvbjtcblxuXHRnZXRJbmZyYW1lVXJsKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblxuXHRnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXplcihpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPjtcblxuXHRnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEoaXRlbU5hbWU6IHN0cmluZyk6IFByb21pc2U8T2JqZWN0IHwgdW5kZWZpbmVkPjtcblxuXHRzZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEoaXRlbU5hbWU6IHN0cmluZywgb2JqZWN0OiBPYmplY3QpOiBQcm9taXNlPHZvaWQ+O1xufVxudHlwZSBOYXZpZ2F0aW9uRXh0ZW5zaW9uID0gTmF2aWdhdGlvbiAmIHtcblx0Z2V0U3RhcnR1cEFwcFN0YXRlKG9BcHBDb21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8U3RhcnR1cEFwcFN0YXRlIHwgdW5kZWZpbmVkPjtcblx0Z2V0QXBwU3RhdGUob0FwcENvbXBvbmVudDogQ29tcG9uZW50LCBzQXBwU3RhdGVLZXk6IHN0cmluZyk6IFByb21pc2U8b2JqZWN0Pjtcblx0Y3JlYXRlRW1wdHlBcHBTdGF0ZShcblx0XHRvQXBwQ29tcG9uZW50OiBDb21wb25lbnQsXG5cdFx0YlRyYW5zaWVudEVuZm9yY2VkPzogYm9vbGVhbixcblx0XHRzUGVyc2lzdGVuY3lNZXRob2Q/OiBzdHJpbmcsXG5cdFx0b1BlcnNpc3RlbmN5U2V0dGluZ3M/OiBvYmplY3Rcblx0KTogUHJvbWlzZTxvYmplY3Q+O1xufTtcblxuLyoqXG4gKiBNb2NrIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGVsbFNlcnZpY2UgZm9yIE9wZW5GRVxuICpcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlTW9jayBleHRlbmRzIFNlcnZpY2U8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPElTaGVsbFNlcnZpY2VzPjtcblxuXHRpbnN0YW5jZVR5cGUhOiBzdHJpbmc7XG5cblx0c2VtYW50aWNPYmplY3RzITogc3RyaW5nW107XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMgYXMgSVNoZWxsU2VydmljZXMpO1xuXHRcdHRoaXMuaW5zdGFuY2VUeXBlID0gXCJtb2NrXCI7XG5cdH1cblxuXHRhc3luYyBnZXRMaW5rcygvKm9BcmdzOiBvYmplY3QqLyk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdGFzeW5jIF9fZmV0Y2hTZW1hbnRpY09iamVjdCgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG5cdH1cblxuXHRhc3luYyBnZXRMaW5rc1dpdGhDYWNoZSgvKm9BcmdzOiBvYmplY3QqLyk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdHRvRXh0ZXJuYWwoLypvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50OiBvYmplY3QqLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGFzeW5jIGdldFN0YXJ0dXBBcHBTdGF0ZSgvKm9BcmdzOiBvYmplY3QqLyk6IFByb21pc2U8U3RhcnR1cEFwcFN0YXRlIHwgdW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG5cblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgaHJlZkZvckV4dGVybmFsKC8qb0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QsIGJBc3luYz86IGJvb2xlYW4qLyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0fVxuXG5cdGFzeW5jIGdldEhyZWYoLypvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbiovKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHR9XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcblx0fVxuXG5cdGFzeW5jIGdldEFwcFN0YXRlKC8qb0NvbXBvbmVudDogb2JqZWN0LCBzQXBwU3RhdGVLZXk6IHN0cmluZyovKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlKC8qb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIGNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYygvKm9Db21wb25lbnQ6IG9iamVjdCovKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRhc3luYyBuYXZpZ2F0ZSgvKm9UYXJnZXQ6IFRhcmdldCxvQ29tcG9uZW50PzogQ29tcG9uZW50Ki8pOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFzeW5jIGlzTmF2aWdhdGlvblN1cHBvcnRlZCgvKm9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ6IG9iamVjdCovKTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdGFzeW5jIGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdH1cblxuXHRhc3luYyBleHBhbmRDb21wYWN0SGFzaCgvKnNIYXNoRnJhZ21lbnQ6IHN0cmluZyovKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHR9XG5cblx0cGFyc2VTaGVsbEhhc2goLypzSGFzaDogc3RyaW5nKi8pOiBQYXJzZWRIYXNoIHtcblx0XHRyZXR1cm4ge30gYXMgdW5rbm93biBhcyBQYXJzZWRIYXNoO1xuXHR9XG5cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJzcGxpdEhhc2hcIl0+IHtcblx0XHQvKipcblx0XHQgKiBGb3IgYW4gQXBwbGljYXRpb24gd2l0aG91dCBTaGVsbCwgdGhlIGhhc2ggaXMgc2ltaWxhciB0byA6ICMvU2FsZXNPcmRlck1hbmFnZSgxMTExMTExMS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYpXG5cdFx0ICogdGhpcyBmdW5jdGlvbiByZXR1cm5zIDpcblx0XHQgKiB7XG5cdFx0XHRzaGVsbFBhcnQ6IFwiXCIsXG5cdFx0XHRhcHBTcGVjaWZpY1JvdXRlOiBcIlNhbGVzT3JkZXJNYW5hZ2UoMTExMTExMTEtYWFhYS1iYmJiLWNjY2MtZGRkZGVlZWVmZmZmKVwiXG5cdFx0fVxuXHRcdCAqL1xuXHRcdGNvbnN0IHJlZ2V4ID0gLyNbXi9dKlxcLyguKikvLmV4ZWMoc0hhc2gpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzaGVsbFBhcnQ6IFwiXCIsXG5cdFx0XHRhcHBTcGVjaWZpY1JvdXRlOiByZWdleD8ubGVuZ3RoID09PSAyID8gcmVnZXhbMV0gOiBcIlwiXG5cdFx0fTtcblx0fVxuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaCgvKm9OZXdTaGVsbEhhc2g6IG9iamVjdCovKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdHNldERpcnR5RmxhZygvKmJEaXJ0eTogYm9vbGVhbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoLypmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoLypmbkRpcnR5U3RhdGVQcm92aWRlcjogRnVuY3Rpb24qLyk6IHZvaWQge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0fVxuXG5cdGNyZWF0ZVJlbmRlcmVyKCk6IG9iamVjdCB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbyB7XG5cdFx0cmV0dXJuIHt9IGFzIFVzZXJJbmZvO1xuXHR9XG5cblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKC8qZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgc2V0QmFja05hdmlnYXRpb24oLypmbkNhbGxCYWNrPzogRnVuY3Rpb24qLyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRhc3luYyBzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0YXN5bmMgc2V0VGl0bGUoLypzVGl0bGU6IHN0cmluZyovKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZyB7XG5cdFx0Ly8gaW4gY2FzZSB0aGVyZSBpcyBubyBzaGVsbCB3ZSBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNsYXNzZXMgYmVpbmcgZGVmaW5lZCBvbiB0aGUgYm9keVxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvenlcIikpIHtcblx0XHRcdHJldHVybiBcImNvenlcIjtcblx0XHR9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2FwVWlTaXplQ29tcGFjdFwiKSkge1xuXHRcdFx0cmV0dXJuIFwiY29tcGFjdFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBnZXRQcmltYXJ5SW50ZW50KC8qc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0Ki8pOiBQcm9taXNlPExpbms+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIExpbmspO1xuXHR9XG5cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHRhc3luYyBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRhc3luYyBnZXRQZXJzb25hbGl6ZXIoX3BlcnNJZDogUGVyc0lkLCBfc2NvcGU6IFNjb3BlLCBfY29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHRnZXRQZXJzRGF0YTogYXN5bmMgKCkgPT5cblx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdFx0XHRoaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0c3VnZ2VzdGlvbnNFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRhcHBzOiB7fVxuXHRcdFx0XHR9KSxcblx0XHRcdHNldFBlcnNEYXRhOiAoKSA9PiB7fVxuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoX2l0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdGdldFBlcnNEYXRhOiBhc3luYyAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pLFxuXHRcdFx0c2V0UGVyc0RhdGE6ICgpID0+IHt9XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEoX2l0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgc2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKF9pdGVtTmFtZTogc3RyaW5nLCBfb2JqZWN0OiBPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoX2tleTogc3RyaW5nLCBfc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiB7fSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRBcHBXYXJtdXA6IHt9LFxuXHRcdFx0UmVuZGVyZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdFVzZXJEZWZhdWx0czoge30sXG5cdFx0XHRVc2VySW1hZ2U6IHt9XG5cdFx0fTtcblx0fVxuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHBhcnNlUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4ge30gYXMgRXh0ZW5zaW9uO1xuXHR9XG5cblx0YXN5bmMgZ2V0SW5mcmFtZVVybCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBTaGVsbFNlcnZpY2VzU2V0dGluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgU2hlbGxTZXJ2aWNlc1NldHRpbmdzID0ge1xuXHRzaGVsbENvbnRhaW5lcj86IENvbnRhaW5lcjtcbn07XG5cbnR5cGUgU2hlbGxQbHVnaW5NYW5hZ2VyID0ge1xuXHRnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShjYXRlZ29yeTogc3RyaW5nKTogalF1ZXJ5LlByb21pc2U7XG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZTtcbn07XG5cbnR5cGUgUHJpdmF0ZVNoZWxsVXNlciA9IHtcblx0Z2V0SW5pdGlhbHMoKTogc3RyaW5nO1xuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2VzIGV4dGVuZHMgU2VydmljZTxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+PiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0cmVzb2x2ZUZuITogRnVuY3Rpb247XG5cblx0cmVqZWN0Rm4hOiAoKSA9PiB2b2lkO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0YXBwbGljYXRpb25OYXZpZ2F0aW9uITogTmF2aWdhdGlvbkV4dGVuc2lvbjtcblxuXHR1c2VySW5mb1NlcnZpY2UhOiBVc2VySW5mbztcblxuXHR1cmxQYXJzaW5nU2VydmljZSE6IFVSTFBhcnNpbmc7XG5cblx0c2hlbGxOYXZpZ2F0aW9uITogU2hlbGxOYXZpZ2F0aW9uO1xuXG5cdHNoZWxsUGx1Z2luTWFuYWdlciE6IFNoZWxsUGx1Z2luTWFuYWdlcjtcblxuXHRvU2hlbGxDb250YWluZXIhOiBDb250YWluZXIgJiB7IGdldFVzZXI6ICgpID0+IFByaXZhdGVTaGVsbFVzZXIgfTtcblxuXHRzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UhOiBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzO1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRsaW5rc0NhY2hlITogUmVjb3JkPHN0cmluZywgeyBsaW5rczogTGlua1tdIH0+O1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUhOiBGdW5jdGlvbjtcblxuXHRleHRlbnNpb25TZXJ2aWNlITogRXh0ZW5zaW9uO1xuXG5cdGFwcENvbXBvbmVudCE6IENvbXBvbmVudDtcblxuXHRwcml2YXRlIGFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnM6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4+ID0ge307XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuYXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3QgYXMgQ29tcG9uZW50O1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyID0gb0NvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXI7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcInJlYWxcIjtcblx0XHR0aGlzLmxpbmtzQ2FjaGUgPSB7fTtcblx0XHR0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUgPSBmdW5jdGlvbiAob0FyZ3M6IExpbmtGaWx0ZXJbXSk6IG9iamVjdCB7XG5cdFx0XHRjb25zdCBhQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rW11bXSA9IFtdO1xuXHRcdFx0Y29uc3QgYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0czogTGlua0ZpbHRlcltdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtGaWx0ZXIgb2Ygb0FyZ3MpIHtcblx0XHRcdFx0aWYgKCEhbGlua0ZpbHRlciAmJiAhIWxpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdKSB7XG5cdFx0XHRcdFx0XHRhQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2godGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzKTtcblx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsaW5rRmlsdGVyLCBcImxpbmtzXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMubGlua3NDYWNoZVtsaW5rRmlsdGVyLnNlbWFudGljT2JqZWN0XS5saW5rc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaChsaW5rRmlsdGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7IG9sZEFyZ3M6IG9BcmdzLCBuZXdBcmdzOiBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzLCBjYWNoZWRMaW5rczogYUNhY2hlZFNlbWFudGljT2JqZWN0cyB9O1xuXHRcdH07XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiTmF2aWdhdGlvblwiKTtcblx0XHRjb25zdCB1c2VySW5mb1NlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVXNlckluZm9cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uSW50ZXJuYWxcIik7XG5cdFx0Y29uc3Qgb1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJQbHVnaW5NYW5hZ2VyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiUGVyc29uYWxpemF0aW9uVjJcIik7XG5cdFx0Y29uc3Qgb1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJFeHRlbnNpb25cIik7XG5cblx0XHRQcm9taXNlLmFsbChbXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZVAsXG5cdFx0XHR1c2VySW5mb1NlcnZpY2VQLFxuXHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UsXG5cdFx0XHRvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZVxuXHRcdF0pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KFtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0XHR1c2VySW5mb1NlcnZpY2UsXG5cdFx0XHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0b1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxQbHVnaW5NYW5hZ2VyLFxuXHRcdFx0XHRcdG9TaGVsbEV4dGVuc2lvblNlcnZpY2Vcblx0XHRcdFx0XSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uID0gbmF2aWdhdGlvblNlcnZpY2UgYXMgTmF2aWdhdGlvbkV4dGVuc2lvbjtcblx0XHRcdFx0XHR0aGlzLnVzZXJJbmZvU2VydmljZSA9IHVzZXJJbmZvU2VydmljZSBhcyBVc2VySW5mbztcblx0XHRcdFx0XHR0aGlzLnVybFBhcnNpbmdTZXJ2aWNlID0gb1VybFBhcnNpbmdTZXJ2aWNlIGFzIFVSTFBhcnNpbmc7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24gPSBvU2hlbGxOYXZpZ2F0aW9uIGFzIFNoZWxsTmF2aWdhdGlvbjtcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSA9IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgYXMgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlciA9IG9TaGVsbFBsdWdpbk1hbmFnZXIgYXMgU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXHRcdFx0XHRcdHRoaXMuZXh0ZW5zaW9uU2VydmljZSA9IG9TaGVsbEV4dGVuc2lvblNlcnZpY2UgYXMgRXh0ZW5zaW9uO1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUZuKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3Mob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9BcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZSB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLCBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgbWVzc2FnZVxuXHQgKi9cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0U2VtYW50aWNPYmplY3RzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb24gaW4gY2FjaGVcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0aWYgKChvQXJncyBhcyBPYmplY3RbXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9DYWNoZVJlc3VsdHMgPSB0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUob0FyZ3MpO1xuXG5cdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gb0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9DYWNoZVJlc3VsdHMubmV3QXJncyk7XG5cdFx0XHRcdGlmIChhTGlua3MubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c0xpbmtzOiBSZWNvcmQ8c3RyaW5nLCB7IGxpbmtzOiBMaW5rW10gfT4gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldLmxlbmd0aCA+IDAgJiYgb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLmxpbmtzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0c0xpbmtzW29DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0bGlua3M6IGFMaW5rc1tpXVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR0aGlzLmxpbmtzQ2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMubGlua3NDYWNoZSwgb1NlbWFudGljT2JqZWN0c0xpbmtzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gYUxpbmtzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBvQ2FjaGVSZXN1bHRzLm9sZEFyZ3MpIHtcblx0XHRcdFx0XHRcdGlmIChqIDwgYUxpbmtzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2pdLmxlbmd0aCA+IDAgJiYgaXRlbVswXS5zZW1hbnRpY09iamVjdCA9PT0gb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2pdWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goaXRlbVswXS5saW5rcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGl0ZW1bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYU1lcmdlZExpbmtzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZ2V0U2hlbGxVSVNlcnZpY2UoKTogUHJvbWlzZTxTaGVsbFVJU2VydmljZT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcENvbXBvbmVudC5nZXRTZXJ2aWNlKFwiU2hlbGxVSVNlcnZpY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgU2hlbGxDb250YWluZXIuXG5cdCAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHByZWRlZmluZWQgc2hlbGxDb250YWluZXIgbWV0aG9kc1xuXHQgKi9cblx0Z2V0U2hlbGxDb250YWluZXIoKTogQ29udGFpbmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHRhc3luYyBnZXRJbmZyYW1lVXJsKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdXNoZWxsQ29udGFpbmVyID0gdGhpcy5nZXRTaGVsbENvbnRhaW5lcigpO1xuXHRcdGxldCBhcHBVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAodXNoZWxsQ29udGFpbmVyPy5pbkFwcFJ1bnRpbWUoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXBwVXJsID0gYXdhaXQgdXNoZWxsQ29udGFpbmVyLmdldEZMUFVybEFzeW5jKHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgRkxQIFVSTFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYXBwVXJsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB0b0V4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqIEBwYXJhbSBvTmF2QXJndW1lbnRzQXJyIEFuZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT50b0V4dGVybmFsIGFyZ3VtZW50c1xuXHQgKi9cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLm5hdmlnYXRlKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IHN0YXJ0dXBBcHBTdGF0ZVxuXHQgKiBXaWxsIGNoZWNrIHRoZSBleGlzdGFuY2Ugb2YgdGhlIFNoZWxsQ29udGFpbmVyIGFuZCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0U3RhcnR1cEFwcFN0YXRlIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0U3RhcnR1cEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gT2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkIHwgU3RhcnR1cEFwcFN0YXRlPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXJncyk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGJhY2tUb1ByZXZpb3VzQXBwIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBTb21ldGhpbmcgdGhhdCBpbmRpY2F0ZSB3ZSd2ZSBuYXZpZ2F0ZWRcblx0ICovXG5cdGFzeW5jIGJhY2tUb1ByZXZpb3VzQXBwKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5iYWNrVG9QcmV2aW91c0FwcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBocmVmRm9yRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmhyZWZGb3JFeHRlcm5hbCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHN0cmluZ1xuXHQgKi9cblx0YXN5bmMgaHJlZkZvckV4dGVybmFsKG9BcmdzOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRIcmVmKG9BcmdzLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYSBVUkwgdGhhdCBsYXVuY2hlcyBhbiBhcHAgd2l0aCBjZXJ0YWluIHBhcmFtZXRlcnMuXG5cdCAqIFRoaXMgQVBJIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVybmFsIHNoZWxsIGhhc2ggZm9ybWF0IGludG8gdGhlIFVSTCBmb3JtYXQgZm9yIHVzZSBpbiBsaW5rIHRhZ3MuXG5cdCAqIFRoZSByZXN1bHRpbmcgaHJlZiBpcyBmdWxseSBlbmNvZGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBpbiBvdGhlciBBUElzIHRoYXQgZXhwZWN0IHRoZSBpbnRlcm5hbCBkZWNvZGVkIGhhc2guXG5cdCAqIEBwYXJhbSBbb1RhcmdldF0gVGhlIG5hdmlnYXRpb24gdGFyZ2V0IHRvIHRyYW5zZm9ybS4gV2hlbiwgb21pdHRlZCB0aGUgY3VycmVudCBoYXNoIGlzIHVzZWQgYXMgdGhlIGJhc2lzIGZvciB0aGUgY2FsY3VsYXRpb24uXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSBlbmNvZGVkIGhyZWYuXG5cdCAqL1xuXHRhc3luYyBnZXRIcmVmKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEhyZWYob1RhcmdldCwgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldEFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudCBhbmQgb0FwcFN0YXRlS2V5LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcGFyYW0gc0FwcFN0YXRlS2V5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEFwcFN0YXRlKG9Db21wb25lbnQsIHNBcHBTdGF0ZUtleSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZUVtcHR5QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5jcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc05hdmlnYXRpb25TdXBwb3J0ZWQgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICogQHBhcmFtIGFUYXJnZXRzXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmlzTmF2aWdhdGlvblN1cHBvcnRlZCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzOiBUYXJnZXRbXSwgb0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzLCBvQ29tcG9uZW50KSBhcyB1bmtub3duIGFzIFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpZWQgdGFyZ2V0IG91dHNpZGUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gb1RhcmdldCBUaGUgbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2aW5nIG9uY2UgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZC4gVGhlIFByb21pc2UgbWlnaHQgbmV2ZXIgcmVqZWN0IG9yIHJlc29sdmVcblx0ICogICAgICAgICAgICAgICAgICAgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgbmF2aWdhdGlvbi5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0LCBvQ29tcG9uZW50KSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHVuZGVmaW5lZD47XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYyBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIGJvb2xlYW5cblx0ICovXG5cdGFzeW5jIGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmlzSW5pdGlhbE5hdmlnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZXhwYW5kQ29tcGFjdEhhc2ggbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBzSGFzaEZyYWdtZW50IEFuIChpbnRlcm5hbCBmb3JtYXQpIHNoZWxsIGhhc2hcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoZSBzdWNjZXNzIGhhbmRsZXIgb2YgdGhlIHJlc29sdmUgcHJvbWlzZSBnZXQgYW4gZXhwYW5kZWQgc2hlbGwgaGFzaCBhcyBmaXJzdCBhcmd1bWVudFxuXHQgKi9cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gc0hhc2hGcmFnbWVudDsgLy90aGlzLm5hdlRhcmdldFJlc29sdXRpb24uZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudCk7XG5cdH1cblxuXHRnZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGAjJHt0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLmdldFNoZWxsSGFzaCh3aW5kb3cubG9jYXRpb24uaHJlZil9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIGFsbCB0aGUgcGx1Z2lucyB3aGljaCBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBQbHVnaW5NYW5hZ2VyLCBzb3J0ZWQgYnkgc3VwcG9ydGVkIHBsdWdpbiBjYXRlZ29yaWVzLlxuXHQgKiBAcmV0dXJucyBNYXAgb2YgcmVnaXN0ZXJlZCBwbHVnaW5zXG5cdCAqL1xuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB0aGlzLnNoZWxsUGx1Z2luTWFuYWdlci5nZXRSZWdpc3RlcmVkUGx1Z2lucygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGZvciB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwbHVnaW4gc2V0dXAgaW4gdGhlIEZMUC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgb3B0aW1pc3RpYyBiYXRjaCBwbHVnaW4gaXMgc2V0IHVwIGFuZCBlbmFibGVkLlxuXHQgKi9cblx0aXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyA9IHRoaXMuZ2V0UmVnaXN0ZXJlZFBsdWdpbnMoKS5SZW5kZXJlckV4dGVuc2lvbnM7XG5cdFx0aWYgKFxuXHRcdFx0ZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucz8uaGFzT3duUHJvcGVydHkoXCJNQU5BR0VfRkVfQ0FDSEVTXCIpICYmXG5cdFx0XHQhIShmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIG9iamVjdD4+KS5NQU5BR0VfRkVfQ0FDSEVTLmVuYWJsZWRcblx0XHQpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBwYXJzZVNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqIEBwYXJhbSBzSGFzaCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLlVSTFBhcnNpbmc9PnBhcnNlU2hlbGxIYXNoIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBUaGUgcGFyc2VkIHVybFxuXHQgKi9cblx0cGFyc2VTaGVsbEhhc2goc0hhc2g6IHN0cmluZyk6IFBhcnNlZEhhc2gge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLnBhcnNlU2hlbGxIYXNoKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc3BsaXRIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICogQHBhcmFtIHNIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+c3BsaXRIYXNoIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZyk6IHsgc2hlbGxQYXJ0Pzogc3RyaW5nOyBhcHBTcGVjaWZpY1JvdXRlPzogc3RyaW5nIH0ge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLnNwbGl0SGFzaChzSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNvbnN0cnVjdFNoZWxsSGFzaCBtZXRob2Qgb2YgVVJMUGFyc2luZyBzZXJ2aWNlIHdpdGggZ2l2ZW4gc0hhc2guXG5cdCAqIEBwYXJhbSBvTmV3U2hlbGxIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+Y29uc3RydWN0U2hlbGxIYXNoIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBTaGVsbCBIYXNoIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2g6IG9iamVjdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UuY29uc3RydWN0U2hlbGxIYXNoKG9OZXdTaGVsbEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXREaXJ0eUZsYWcgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUuXG5cdCAqIEBwYXJhbSBiRGlydHkgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuc2V0RGlydHlGbGFnIGFyZ3VtZW50c1xuXHQgKi9cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyLnNldERpcnR5RmxhZyhiRGlydHkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCByZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZSBwcm92aWRlciBjYWxsYmFjayBtZXRob2QuXG5cdCAqIEBwYXJhbSBmbkRpcnR5U3RhdGVQcm92aWRlciBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICogQHBhcmFtIGZuRGlydHlTdGF0ZVByb3ZpZGVyIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgYXJndW1lbnRzXG5cdCAqL1xuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZVJlbmRlcmVyIG1ldGhvZCBvZiB1c2hlbGwgY29udGFpbmVyLlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHJlbmRlcmVyIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgY3JlYXRlUmVuZGVyZXIoKTogUHJvbWlzZTxDb250cm9sIHwgQ29tcG9uZW50Q29udGFpbmVyPiB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmNyZWF0ZVJlbmRlcmVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldFVzZXIgbWV0aG9kIG9mIHVzaGVsbCBjb250YWluZXIuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgVXNlciBvYmplY3Rcblx0ICovXG5cdGdldFVzZXIoKTogVXNlckluZm8ge1xuXHRcdHJldHVybiB0aGlzLnVzZXJJbmZvU2VydmljZTtcblx0fVxuXG5cdGlzSmFtQWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRVc2VyKCkuaXNKYW1BY3RpdmUoKTtcblx0fVxuXG5cdGdldFVzZXJJbml0aWFscygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRVc2VyKCkuZ2V0SW5pdGlhbHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNoZWNrIGlmIHVzaGVsbCBjb250YWluZXIgaXMgYXZhaWxhYmxlIG9yIG5vdC5cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlXG5cdCAqL1xuXHRoYXNVU2hlbGwoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciBtZXRob2Qgb2Ygc2hlbGxOYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gZm5OYXZGaWx0ZXIgVGhlIGZpbHRlciBmdW5jdGlvbiB0byByZWdpc3RlclxuXHQgKi9cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uLnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIG1ldGhvZCBvZiBzaGVsbE5hdmlnYXRpb24uXG5cdCAqIEBwYXJhbSBmbk5hdkZpbHRlciBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHVucmVnaXN0ZXJcblx0ICovXG5cdHVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdHRoaXMuc2hlbGxOYXZpZ2F0aW9uLnVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0QmFja05hdmlnYXRpb24gbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGJhY2sgYnV0dG9uIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqIEBwYXJhbSBmbkNhbGxCYWNrIEEgY2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIGluIHRoZSBVSS5cblx0ICovXG5cdGFzeW5jIHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s6IEZ1bmN0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0KGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldEhpZXJhcmNoeSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gaGllcmFyY2h5IGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqIEBwYXJhbSBbYUhpZXJhcmNoeUxldmVsc10gQW4gYXJyYXkgcmVwcmVzZW50aW5nIGhpZXJhcmNoaWVzIG9mIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGFwcC5cblx0ICovXG5cdGFzeW5jIHNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzOiBvYmplY3RbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdChhd2FpdCB0aGlzLmdldFNoZWxsVUlTZXJ2aWNlKCkpLnNldEhpZXJhcmNoeShhSGllcmFyY2h5TGV2ZWxzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0VGl0bGUgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIHRpdGxlIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqIEBwYXJhbSBbc1RpdGxlXSBUaGUgbmV3IHRpdGxlLiBUaGUgZGVmYXVsdCB0aXRsZSBpcyBzZXQgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgZ2l2ZW4uXG5cdCAqL1xuXHRhc3luYyBzZXRUaXRsZShzVGl0bGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdChhd2FpdCB0aGlzLmdldFNoZWxsVUlTZXJ2aWNlKCkpLnNldFRpdGxlKHNUaXRsZSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldFRpdGxlIG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiB0aXRsZSBpbiB0aGUgc2hlbGwgaGVhZGVyLlxuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKi9cblx0YXN5bmMgZ2V0VGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuZ2V0VGl0bGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGNvbnRlbnQgZGVuc2l0eS5cblx0ICogQHJldHVybnMgVGhlIGNvbnRlbnQgZGVuc2l0eSB2YWx1ZVxuXHQgKi9cblx0Z2V0Q29udGVudERlbnNpdHkoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0VXNlcigpLmdldENvbnRlbnREZW5zaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogRm9yIGEgZ2l2ZW4gc2VtYW50aWMgb2JqZWN0LCB0aGlzIG1ldGhvZCBjb25zaWRlcnMgYWxsIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZW1hbnRpYyBvYmplY3QgYW5kXG5cdCAqIHJldHVybnMgdGhlIG9uZSB0YWdnZWQgYXMgYSBcInByaW1hcnlBY3Rpb25cIi4gSWYgbm8gaW5ib3VuZCB0YWdnZWQgYXMgXCJwcmltYXJ5QWN0aW9uXCIgZXhpc3RzLCB0aGVuIGl0IHJldHVybnNcblx0ICogdGhlIGludGVudCBvZiB0aGUgZmlyc3QgaW5ib3VuZCAoYWZ0ZXIgc29ydGluZyBoYXMgYmVlbiBhcHBsaWVkKSBtYXRjaGluZyB0aGUgYWN0aW9uIFwiZGlzcGxheUZhY3RTaGVldFwiLlxuXHQgKiBAcGFyYW0gc1NlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFNlZSAjQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24jZ2V0TGlua3MgZm9yIGRlc2NyaXB0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgaW50ZW50IGlmIGl0IGV4aXN0cy5cblx0ICovXG5cdGFzeW5jIGdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogTGlua0ZpbHRlcik6IFByb21pc2U8TGluaz4ge1xuXHRcdGNvbnN0IHByaW1hcnlJbnRlbnQgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdCwgbVBhcmFtZXRlcnMpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHByaW1hcnlJbnRlbnQpKSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudFswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHByaW1hcnlJbnRlbnQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFdhaXQgZm9yIHRoZSByZW5kZXIgZXh0ZW5zaW9ucyBwbHVnaW4gdG8gYmUgbG9hZGVkLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHdlIGFyZSBhYmxlIHRvIHdhaXQgZm9yIGl0LCBvdGhlcndpc2Ugd2UgY291bGRuJ3QgYW5kIGNhbm5vdCByZWx5IG9uIGl0LlxuXHQgKi9cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0aWYgKCF0aGlzLnNoZWxsUGx1Z2luTWFuYWdlcj8uZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UpIHtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRcdFx0dGhpcy5zaGVsbFBsdWdpbk1hbmFnZXJcblx0XHRcdFx0XHQuZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UoXCJSZW5kZXJlckV4dGVuc2lvbnNcIilcblx0XHRcdFx0XHQuZmFpbCgob0Vycm9yOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZywgXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzRmFjdG9yeS53YWl0Rm9yUGx1Z2luc0xvYWRcIik7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHJlc29sdmUodHJ1ZSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcGVyc29uYWxpemVyIGZyb20gdGhlIHNoZWxsIHNlcnZpY2UuXG5cdCAqIFdlIHNldCBzb21lIGRlZmF1bHRzIGZvciB0aGUgc2NvcGUgb2JqZWN0LlxuXHQgKiBAcGFyYW0gcGVyc0lkIFBlcnNvbmFsaXphdGlvbiBvYmplY3Rcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcGFyYW0gY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFBlcnNvbmFsaXplciBvYmplY3Qgd2hpY2ggaGFuZGxlcyBwZXJzb25hbGl6YXRpb25cblx0ICovXG5cdGFzeW5jIGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRzY29wZSA9IHtcblx0XHRcdC8vIG1lcmdlIHNvbWUgZGVmYXVsdHNcblx0XHRcdGtleUNhdGVnb3J5OiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5jb25zdGFudHMua2V5Q2F0ZWdvcnkuRklYRURfS0VZLFxuXHRcdFx0d3JpdGVGcmVxdWVuY3k6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy53cml0ZUZyZXF1ZW5jeS5MT1csXG5cdFx0XHRjbGllbnRTdG9yYWdlQWxsb3dlZDogZmFsc2UsXG5cdFx0XHR2YWxpZGl0eTogSW5maW5pdHksXG5cdFx0XHQuLi5zY29wZVxuXHRcdH07XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5nZXRQZXJzb25hbGl6ZXIocGVyc0lkLCBzY29wZSwgY29tcG9uZW50KSkgYXMgUGVyc29uYWxpemVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWxldGVzIGEgY29udGFpbmVyIGlkZW50aWZpZWQgYnkgc0NvbnRhaW5lcktleS5cblx0ICogQHBhcmFtIGtleSBDb250YWluZXIga2V5XG5cdCAqIEBwYXJhbSBzY29wZSBTY29wZSBvYmplY3Rcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCB3aGVuIHRoZSBjb250YWluZXIgaXMgZGVsZXRlZFxuXHQgKi9cblx0YXN5bmMgZGVsZXRlUGVyc29uYWxpemF0aW9uQ29udGFpbmVyKGtleTogc3RyaW5nLCBzY29wZT86IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZS5kZWxldGVDb250YWluZXIoa2V5LCBzY29wZSBhcyB1bmtub3duIGFzIG9iamVjdCkgYXMgUHJvbWlzZTx2b2lkPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcGVyc29uYWxpemVyIHRvIGFjY2VzcyB0aGUgQXBwbGljYXRpb24gZGF0YSBzdG9yZWQgaW4gdGhlIHNoZWxsIFBlcnNvbmFsaXphdGlvbi5cblx0ICogQHBhcmFtIGl0ZW1OYW1lIFRoZSBuYW1lIG9mIHRoZSBpdGVtIGZvciB3aGljaCB0aGUgcGVyc29uYWxpemVyIGlzIGNyZWF0ZWQuXG5cdCAqIEByZXR1cm5zIEEgcGVyc29uYWxpemVyXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoaXRlbU5hbWU6IHN0cmluZyk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4ge1xuXHRcdGlmICghdGhpcy5hcHBsaWNhdGlvblBlcnNvbm5hbGl6ZXJzW2l0ZW1OYW1lXSkge1xuXHRcdFx0dGhpcy5hcHBsaWNhdGlvblBlcnNvbm5hbGl6ZXJzW2l0ZW1OYW1lXSA9IHRoaXMuZ2V0UGVyc29uYWxpemVyKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29udGFpbmVyOiBgQXBwbGljYXRpb24jJHsodGhpcy5hcHBDb21wb25lbnQgYXMgQXBwQ29tcG9uZW50KS5nZXRNYW5pZmVzdCgpW1wic2FwLmFwcFwiXS5pZH1gLFxuXHRcdFx0XHRcdGl0ZW06IGl0ZW1OYW1lXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHt9LFxuXHRcdFx0XHR0aGlzLmFwcENvbXBvbmVudFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25QZXJzb25uYWxpemVyc1tpdGVtTmFtZV07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyBkYXRhIGZyb20gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWVcblx0ICogQHJldHVybnMgRGF0YVxuXHQgKi9cblx0cHVibGljIGFzeW5jIGdldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxvYmplY3QgfCB1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gKGF3YWl0IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyKGl0ZW1OYW1lKSk/LmdldFBlcnNEYXRhKCkpIGFzIG9iamVjdCB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzdG9yZXMgYW4gb2JqZWN0IGluIHRoZSBwZXJzb25hbGl6YXRpb24gc2VydmljZS5cblx0ICogQHBhcmFtIGl0ZW1OYW1lXG5cdCAqIEBwYXJhbSBkYXRhXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZVxuXHQgKi9cblx0cHVibGljIGFzeW5jIHNldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShpdGVtTmFtZTogc3RyaW5nLCBkYXRhOiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvblBlcnNvbmFsaXplcihpdGVtTmFtZSkpLnNldFBlcnNEYXRhKGRhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2hlbGwgY29uZmlnIGZyb20gdGhlIHdpbmRvd3Mgb2JqZWN0LlxuXHQgKiBAcmV0dXJucyBTaGVsbCBjb25maWcgb2JqZWN0XG5cdCAqL1xuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiAod2luZG93IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgb2JqZWN0PilbXCJzYXAtdXNoZWxsLWNvbmZpZ1wiXSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2UgcGFyYW1ldGVycyBmcm9tIGEgVVJJIHF1ZXJ5IHN0cmluZyAoc3RhcnRpbmcgd2l0aCA/KSBpbnRvIGEgcGFyYW1ldGVyIG9iamVjdC5cblx0ICogQHBhcmFtIHVybCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBQYXJhbWV0ZXIgc3RyaW5nXG5cdCAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluZyBzdHJpbmcgYXJyYXlzXG5cdCAqL1xuXHRwYXJzZVBhcmFtZXRlcnModXJsOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB0aGlzLnVybFBhcnNpbmdTZXJ2aWNlLnBhcnNlUGFyYW1ldGVycyh1cmwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2hlbGwgZXh0ZW5zaW9uIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIFNoZWxsIGV4dGVuc2lvbiBzZXJ2aWNlXG5cdCAqL1xuXHRnZXRFeHRlbnNpb25TZXJ2aWNlKCk6IEV4dGVuc2lvbiB7XG5cdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uU2VydmljZTtcblx0fVxufVxuXG4vKipcbiAqIFNlcnZpY2UgRmFjdG9yeSBmb3IgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmNsYXNzIFNoZWxsU2VydmljZXNGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPiB7XG5cdC8qKlxuXHQgKiBDcmVhdGVzIGVpdGhlciBhIHN0YW5kYXJkIG9yIGEgbW9jayBTaGVsbCBzZXJ2aWNlIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi5cblx0ICogQHBhcmFtIHNlcnZpY2VDb250ZXh0IFRoZSBzaGVsbHNlcnZpY2UgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGEgc2hlbGwgc2VydmljZSBpbXBsZW1lbnRhdGlvblxuXHQgKiBAc2VlIFNlcnZpY2VGYWN0b3J5I2NyZWF0ZUluc3RhbmNlXG5cdCAqL1xuXHRhc3luYyBjcmVhdGVJbnN0YW5jZShzZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPik6IFByb21pc2U8SVNoZWxsU2VydmljZXM+IHtcblx0XHRzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lciA9IHNhcC51aS5yZXF1aXJlKFwic2FwL3VzaGVsbC9Db250YWluZXJcIik7XG5cdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlID0gc2VydmljZUNvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXJcblx0XHRcdD8gbmV3IFNoZWxsU2VydmljZXMoc2VydmljZUNvbnRleHQgYXMgU2VydmljZUNvbnRleHQ8UmVxdWlyZWQ8U2hlbGxTZXJ2aWNlc1NldHRpbmdzPj4pXG5cdFx0XHQ6IG5ldyBTaGVsbFNlcnZpY2VNb2NrKHNlcnZpY2VDb250ZXh0KTtcblx0XHRhd2FpdCBzaGVsbFNlcnZpY2UuaW5pdFByb21pc2U7XG5cdFx0Ly8gRW5yaWNoIHRoZSBhcHBDb21wb25lbnQgd2l0aCB0aGlzIG1ldGhvZFxuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHNlcnZpY2VDb250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzID0gKCk6IElTaGVsbFNlcnZpY2VzID0+IHNoZWxsU2VydmljZTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0aWYgKGludGVybmFsTW9kZWwpIHtcblx0XHRcdGxldCBzZW1hbnRpY09iamVjdHM6IHN0cmluZ1tdID0gW107XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdHMgPSBhd2FpdCBzaGVsbFNlcnZpY2UuX19mZXRjaFNlbWFudGljT2JqZWN0KCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjYWxsaW5nIGdldFNlbWFudGljT2JqZWN0c1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0KGludGVybmFsTW9kZWwgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShcIi9zZW1hbnRpY09iamVjdHNcIiwgc2VtYW50aWNPYmplY3RzKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNoZWxsU2VydmljZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaGVsbFNlcnZpY2VzRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztFQW9DQTtFQXlDQTtBQUNBO0FBQ0E7RUE0R0E7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUlNQSxnQkFBZ0IsMEJBQUFDLFFBQUE7SUFBQUMsY0FBQSxDQUFBRixnQkFBQSxFQUFBQyxRQUFBO0lBQUEsU0FBQUQsaUJBQUE7TUFBQSxPQUFBQyxRQUFBLENBQUFFLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUEsSUFBQUMsTUFBQSxHQUFBTCxnQkFBQSxDQUFBTSxTQUFBO0lBQUFELE1BQUEsQ0FPckJFLElBQUksR0FBSixTQUFBQSxLQUFBLEVBQWE7TUFDWixJQUFJLENBQUNDLFdBQVcsR0FBR0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBc0IsQ0FBQztNQUMxRCxJQUFJLENBQUNDLFlBQVksR0FB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
|
|
840
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTaGVsbFNlcnZpY2VNb2NrIiwiX1NlcnZpY2UiLCJfaW5oZXJpdHNMb29zZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaW5pdCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnN0YW5jZVR5cGUiLCJnZXRMaW5rcyIsIl9fZmV0Y2hTZW1hbnRpY09iamVjdCIsImdldExpbmtzV2l0aENhY2hlIiwidG9FeHRlcm5hbCIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInVuZGVmaW5lZCIsImlzSmFtQWN0aXZlIiwiYmFja1RvUHJldmlvdXNBcHAiLCJocmVmRm9yRXh0ZXJuYWwiLCJnZXRIcmVmIiwiZ2V0SGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImdldEFwcFN0YXRlIiwiY3JlYXRlRW1wdHlBcHBTdGF0ZSIsImNyZWF0ZUVtcHR5QXBwU3RhdGVBc3luYyIsIm5hdmlnYXRlIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiaXNJbml0aWFsTmF2aWdhdGlvbiIsImV4cGFuZENvbXBhY3RIYXNoIiwicGFyc2VTaGVsbEhhc2giLCJzcGxpdEhhc2giLCJzSGFzaCIsInJlZ2V4IiwiZXhlYyIsInNoZWxsUGFydCIsImFwcFNwZWNpZmljUm91dGUiLCJsZW5ndGgiLCJjb25zdHJ1Y3RTaGVsbEhhc2giLCJzZXREaXJ0eUZsYWciLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRVc2VyIiwiZ2V0VXNlckluaXRpYWxzIiwiaGFzVVNoZWxsIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInNldEhpZXJhcmNoeSIsInNldFRpdGxlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJkb2N1bWVudCIsImJvZHkiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldFByaW1hcnlJbnRlbnQiLCJ3YWl0Rm9yUGx1Z2luc0xvYWQiLCJnZXRUaXRsZSIsImdldFBlcnNvbmFsaXplciIsIl9wZXJzSWQiLCJfc2NvcGUiLCJfY29tcG9uZW50IiwiZ2V0UGVyc0RhdGEiLCJoaXN0b3J5RW5hYmxlZCIsInN1Z2dlc3Rpb25zRW5hYmxlZCIsImFwcHMiLCJzZXRQZXJzRGF0YSIsImdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyIiwiX2l0ZW1OYW1lIiwiZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwic2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwiX29iamVjdCIsImRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lciIsIl9rZXkiLCJnZXRTaGVsbENvbmZpZyIsImdldFJlZ2lzdGVyZWRQbHVnaW5zIiwiQXBwV2FybXVwIiwiUmVuZGVyZXJFeHRlbnNpb25zIiwiVXNlckRlZmF1bHRzIiwiVXNlckltYWdlIiwiaXNGbHBPcHRpbWlzdGljQmF0Y2hQbHVnaW5Mb2FkZWQiLCJwYXJzZVBhcmFtZXRlcnMiLCJnZXRFeHRlbnNpb25TZXJ2aWNlIiwiZ2V0SW5mcmFtZVVybCIsIlNlcnZpY2UiLCJTaGVsbFNlcnZpY2VzIiwiX1NlcnZpY2UyIiwiX3RoaXMiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleTIiLCJjYWxsIiwiYXBwbGljYXRpb25QZXJzb25uYWxpemVycyIsIl9leHBvcnRzIiwiX3Byb3RvMiIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsImFwcENvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib1NoZWxsQ29udGFpbmVyIiwic2V0dGluZ3MiLCJzaGVsbENvbnRhaW5lciIsImxpbmtzQ2FjaGUiLCJmbkZpbmRTZW1hbnRpY09iamVjdHNJbkNhY2hlIiwib0FyZ3MiLCJhQ2FjaGVkU2VtYW50aWNPYmplY3RzIiwiYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0cyIsImxpbmtGaWx0ZXIiLCJzZW1hbnRpY09iamVjdCIsInB1c2giLCJsaW5rcyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJvbGRBcmdzIiwibmV3QXJncyIsImNhY2hlZExpbmtzIiwicmVqZWN0IiwicmVzb2x2ZUZuIiwicmVqZWN0Rm4iLCJuYXZpZ2F0aW9uU2VydmljZVAiLCJnZXRTZXJ2aWNlQXN5bmMiLCJ1c2VySW5mb1NlcnZpY2VQIiwib1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXJQcm9taXNlIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZVByb21pc2UiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZSIsImFsbCIsInRoZW4iLCJfcmVmIiwibmF2aWdhdGlvblNlcnZpY2UiLCJ1c2VySW5mb1NlcnZpY2UiLCJvVXJsUGFyc2luZ1NlcnZpY2UiLCJvU2hlbGxOYXZpZ2F0aW9uIiwib1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSIsIm9TaGVsbFBsdWdpbk1hbmFnZXIiLCJvU2hlbGxFeHRlbnNpb25TZXJ2aWNlIiwiYXBwbGljYXRpb25OYXZpZ2F0aW9uIiwidXJsUGFyc2luZ1NlcnZpY2UiLCJzaGVsbE5hdmlnYXRpb24iLCJzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UiLCJzaGVsbFBsdWdpbk1hbmFnZXIiLCJleHRlbnNpb25TZXJ2aWNlIiwiY2F0Y2giLCJnZXRTZW1hbnRpY09iamVjdHMiLCJvQ2FjaGVSZXN1bHRzIiwiYUxpbmtzIiwib1NlbWFudGljT2JqZWN0c0xpbmtzIiwiaSIsImFzc2lnbiIsImFNZXJnZWRMaW5rcyIsImoiLCJpdGVtIiwiZ2V0U2hlbGxVSVNlcnZpY2UiLCJnZXRTZXJ2aWNlIiwiZ2V0U2hlbGxDb250YWluZXIiLCJ1c2hlbGxDb250YWluZXIiLCJhcHBVcmwiLCJpbkFwcFJ1bnRpbWUiLCJnZXRGTFBVcmxBc3luYyIsImVycm9yIiwiTG9nIiwib05hdkFyZ3VtZW50c0FyciIsIm9Db21wb25lbnQiLCJvVGFyZ2V0Iiwic0FwcFN0YXRlS2V5IiwiYVRhcmdldHMiLCJzSGFzaEZyYWdtZW50IiwiZ2V0U2hlbGxIYXNoIiwiZmxwUGx1Z2luc1JlbmRlcmVyRXh0ZW5zaW9ucyIsImhhc093blByb3BlcnR5IiwiTUFOQUdFX0ZFX0NBQ0hFUyIsImVuYWJsZWQiLCJvTmV3U2hlbGxIYXNoIiwiYkRpcnR5IiwiZm5EaXJ0eVN0YXRlUHJvdmlkZXIiLCJnZXRJbml0aWFscyIsImZuTmF2RmlsdGVyIiwiZm5DYWxsQmFjayIsImFIaWVyYXJjaHlMZXZlbHMiLCJzVGl0bGUiLCJzU2VtYW50aWNPYmplY3QiLCJtUGFyYW1ldGVycyIsInByaW1hcnlJbnRlbnQiLCJpc0FycmF5IiwiX3RoaXMkc2hlbGxQbHVnaW5NYW5hIiwiZ2V0UGx1Z2luTG9hZGluZ1Byb21pc2UiLCJmYWlsIiwib0Vycm9yIiwicGVyc0lkIiwic2NvcGUiLCJjb21wb25lbnQiLCJrZXlDYXRlZ29yeSIsImNvbnN0YW50cyIsIkZJWEVEX0tFWSIsIndyaXRlRnJlcXVlbmN5IiwiTE9XIiwiY2xpZW50U3RvcmFnZUFsbG93ZWQiLCJ2YWxpZGl0eSIsIkluZmluaXR5Iiwia2V5IiwiZGVsZXRlQ29udGFpbmVyIiwiaXRlbU5hbWUiLCJjb250YWluZXIiLCJnZXRNYW5pZmVzdCIsImlkIiwiX2F3YWl0JHRoaXMkZ2V0QXBwbGljIiwiZGF0YSIsInVybCIsIlNoZWxsU2VydmljZXNGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMyIsImNyZWF0ZUluc3RhbmNlIiwic2VydmljZUNvbnRleHQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaW50ZXJuYWxNb2RlbCIsImdldE1vZGVsIiwic2VtYW50aWNPYmplY3RzIiwic2V0UHJvcGVydHkiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2hlbGxTZXJ2aWNlc0ZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL0V4dGVuc2lvblwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IExpbmssIExpbmtGaWx0ZXIsIFRhcmdldCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIFBlcnNvbmFsaXphdGlvblYyIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgeyB0eXBlIFBlcnNJZCwgdHlwZSBTY29wZSB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1BlcnNvbmFsaXphdGlvblYyXCI7XG5pbXBvcnQgdHlwZSBTaGVsbE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvU2hlbGxOYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBVUkxQYXJzaW5nIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIHsgUGFyc2VkSGFzaCB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VSTFBhcnNpbmdcIjtcbmltcG9ydCB0eXBlIFVzZXJJbmZvIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL1VzZXJJbmZvXCI7XG5pbXBvcnQgdHlwZSBTaGVsbFVJU2VydmljZSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cEFwcFN0YXRlID0ge1xuXHRnZXREYXRhKCk6IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50Pzoge1xuXHRcdFx0U2VsZWN0T3B0aW9ucz86IHtcblx0XHRcdFx0UHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFJhbmdlczoge1xuXHRcdFx0XHRcdE9wdGlvbjogc3RyaW5nO1xuXHRcdFx0XHRcdFNpZ246IHN0cmluZztcblx0XHRcdFx0XHRMb3c6IHN0cmluZztcblx0XHRcdFx0fVtdO1xuXHRcdFx0fVtdO1xuXHRcdH07XG5cdH07XG59O1xuXG4vLyBzZWU6IHNhcFxcdXNoZWxsXFxzZXJ2aWNlc1xcX1BlcnNvbmFsaXphdGlvblxcY29uc3RhbnRzLmpzXG5leHBvcnQgdHlwZSBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzID0gUGVyc29uYWxpemF0aW9uVjIgJiB7XG5cdGNvbnN0YW50czoge1xuXHRcdGtleUNhdGVnb3J5OiB7XG5cdFx0XHRGSVhFRF9LRVk6IHN0cmluZztcblx0XHRcdEdFTkVSQVRFRF9LRVk6IHN0cmluZztcblx0XHR9O1xuXHRcdHdyaXRlRnJlcXVlbmN5OiB7XG5cdFx0XHRISUdIOiBzdHJpbmc7XG5cdFx0XHRMT1c6IHN0cmluZztcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgUGVyc29uYWxpemVyVHlwZSA9IHtcblx0Z2V0UGVyc0RhdGE6ICgpID0+IFByb21pc2U8b2JqZWN0Pjtcblx0c2V0UGVyc0RhdGE6IChwZXJzRGF0YTogb2JqZWN0KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgU2hlbGxDb25maWdUeXBlID0ge1xuXHRhcHBzOiB7XG5cdFx0aW5wdXRGaWVsZEhpc3Rvcnk6IHtcblx0XHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0fTtcblx0fTtcbn07XG5cbmV4cG9ydCB0eXBlIEZMUFBsdWdpbiA9IHtcblx0Y29tcG9uZW50OiBzdHJpbmc7XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdHVybDogc3RyaW5nO1xuXHRjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUgPSB7XG5cdEFwcFdhcm11cDogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xuXHRSZW5kZXJlckV4dGVuc2lvbnM6IFJlY29yZDxzdHJpbmcsIEZMUFBsdWdpbj4gfCB7fTtcblx0VXNlckRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBGTFBQbHVnaW4+IHwge307XG5cdFVzZXJJbWFnZTogUmVjb3JkPHN0cmluZywgRkxQUGx1Z2luPiB8IHt9O1xufTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIElTaGVsbFNlcnZpY2VzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cdGluc3RhbmNlVHlwZTogc3RyaW5nO1xuXHRzZW1hbnRpY09iamVjdHM6IHN0cmluZ1tdO1xuXG5cdGdldExpbmtzKG9BcmdzPzogT21pdDxMaW5rRmlsdGVyLCBcInVpNUNvbXBvbmVudFwiPltdKTogUHJvbWlzZTxMaW5rW11bXT47XG5cblx0Z2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBPbWl0PExpbmtGaWx0ZXIsIFwidWk1Q29tcG9uZW50XCI+W10pOiBQcm9taXNlPExpbmtbXVtdPjtcblxuXHR0b0V4dGVybmFsKG9OYXZBcmd1bWVudHNBcnI6IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCk6IHZvaWQ7XG5cblx0Z2V0U3RhcnR1cEFwcFN0YXRlKG9BcmdzOiBvYmplY3QpOiBQcm9taXNlPHVuZGVmaW5lZCB8IFN0YXJ0dXBBcHBTdGF0ZT47XG5cblx0YmFja1RvUHJldmlvdXNBcHAoKTogdm9pZDtcblxuXHRocmVmRm9yRXh0ZXJuYWwob0FyZ3M/OiBvYmplY3QsIG9Db21wb25lbnQ/OiBvYmplY3QpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SHJlZihvVGFyZ2V0OiBvYmplY3QsIG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPjtcblxuXHRnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPjtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IG9iamVjdDtcblxuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj47XG5cblx0bmF2aWdhdGUob1RhcmdldDogVGFyZ2V0LCBvQ29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTx1bmRlZmluZWQ+O1xuXG5cdGlzTmF2aWdhdGlvblN1cHBvcnRlZChvTmF2QXJndW1lbnRzQXJyOiBBcnJheTxvYmplY3Q+LCBvQ29tcG9uZW50Pzogb2JqZWN0KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+O1xuXG5cdGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPjtcblxuXHRleHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cblx0Z2V0SGFzaCgpOiBzdHJpbmc7XG5cblx0cGFyc2VTaGVsbEhhc2goc0hhc2g6IHN0cmluZyk6IFBhcnNlZEhhc2g7XG5cblx0c3BsaXRIYXNoKHNIYXNoOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJzcGxpdEhhc2hcIl0+O1xuXG5cdGNvbnN0cnVjdFNoZWxsSGFzaChvTmV3U2hlbGxIYXNoOiBvYmplY3QpOiBzdHJpbmc7XG5cblx0c2V0RGlydHlGbGFnKGJEaXJ0eTogYm9vbGVhbik6IHZvaWQ7XG5cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbik6IHZvaWQ7XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbztcblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZztcblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbjtcblxuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZDtcblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcihmbk5hdkZpbHRlcjogRnVuY3Rpb24pOiB2b2lkO1xuXG5cdHNldEJhY2tOYXZpZ2F0aW9uKGZuQ2FsbEJhY2s/OiBGdW5jdGlvbik6IFByb21pc2U8dm9pZD47XG5cblx0c2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IEFycmF5PG9iamVjdD4pOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZztcblxuXHRnZXRQcmltYXJ5SW50ZW50KHNTZW1hbnRpY09iamVjdDogc3RyaW5nLCBtUGFyYW1ldGVycz86IG9iamVjdCk6IFByb21pc2U8TGluaz47XG5cblx0d2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj47XG5cblx0Z2V0UmVnaXN0ZXJlZFBsdWdpbnMoKTogUmVnaXN0ZXJlZFBsdWdpbnNNYXBUeXBlO1xuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW47XG5cblx0Z2V0VGl0bGUoKTogUHJvbWlzZTxzdHJpbmc+O1xuXG5cdGdldFBlcnNvbmFsaXplcihwZXJzSWQ6IFBlcnNJZCwgc2NvcGU6IFNjb3BlLCBjb21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+O1xuXG5cdGRlbGV0ZVBlcnNvbmFsaXphdGlvbkNvbnRhaW5lcihrZXk6IHN0cmluZywgc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdGdldFNoZWxsQ29uZmlnKCk6IFNoZWxsQ29uZmlnVHlwZTtcblxuXHRwYXJzZVBhcmFtZXRlcnModXJsOiBzdHJpbmcpOiBSZXR1cm5UeXBlPFVSTFBhcnNpbmdbXCJwYXJzZVBhcmFtZXRlcnNcIl0+O1xuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uO1xuXG5cdGdldEluZnJhbWVVcmwoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXG5cdGdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+O1xuXG5cdGdldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxPYmplY3QgfCB1bmRlZmluZWQ+O1xuXG5cdHNldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YShpdGVtTmFtZTogc3RyaW5nLCBvYmplY3Q6IE9iamVjdCk6IFByb21pc2U8dm9pZD47XG59XG50eXBlIE5hdmlnYXRpb25FeHRlbnNpb24gPSBOYXZpZ2F0aW9uICYge1xuXHRnZXRTdGFydHVwQXBwU3RhdGUob0FwcENvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTxTdGFydHVwQXBwU3RhdGUgfCB1bmRlZmluZWQ+O1xuXHRnZXRBcHBTdGF0ZShvQXBwQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+O1xuXHRjcmVhdGVFbXB0eUFwcFN0YXRlKFxuXHRcdG9BcHBDb21wb25lbnQ6IENvbXBvbmVudCxcblx0XHRiVHJhbnNpZW50RW5mb3JjZWQ/OiBib29sZWFuLFxuXHRcdHNQZXJzaXN0ZW5jeU1ldGhvZD86IHN0cmluZyxcblx0XHRvUGVyc2lzdGVuY3lTZXR0aW5ncz86IG9iamVjdFxuXHQpOiBQcm9taXNlPG9iamVjdD47XG59O1xuXG4vKipcbiAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZSBmb3IgT3BlbkZFXG4gKlxuICovXG5jbGFzcyBTaGVsbFNlcnZpY2VNb2NrIGV4dGVuZHMgU2VydmljZTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IGltcGxlbWVudHMgSVNoZWxsU2VydmljZXMge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8SVNoZWxsU2VydmljZXM+O1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRzZW1hbnRpY09iamVjdHMhOiBzdHJpbmdbXTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyBhcyBJU2hlbGxTZXJ2aWNlcyk7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcIm1vY2tcIjtcblx0fVxuXG5cdGFzeW5jIGdldExpbmtzKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0fVxuXG5cdGFzeW5jIGdldExpbmtzV2l0aENhY2hlKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0dG9FeHRlcm5hbCgvKm9OYXZBcmd1bWVudHNBcnI6IEFycmF5PG9iamVjdD4sIG9Db21wb25lbnQ6IG9iamVjdCovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgZ2V0U3RhcnR1cEFwcFN0YXRlKC8qb0FyZ3M6IG9iamVjdCovKTogUHJvbWlzZTxTdGFydHVwQXBwU3RhdGUgfCB1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cblxuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRiYWNrVG9QcmV2aW91c0FwcCgpOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRhc3luYyBocmVmRm9yRXh0ZXJuYWwoLypvQXJncz86IG9iamVjdCwgb0NvbXBvbmVudD86IG9iamVjdCwgYkFzeW5jPzogYm9vbGVhbiovKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHR9XG5cblx0YXN5bmMgZ2V0SHJlZigvKm9BcmdzPzogb2JqZWN0LCBvQ29tcG9uZW50Pzogb2JqZWN0LCBiQXN5bmM/OiBib29sZWFuKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRnZXRIYXNoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QsIHNBcHBTdGF0ZUtleTogc3RyaW5nKi8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIGNyZWF0ZUVtcHR5QXBwU3RhdGUoLypvQ29tcG9uZW50OiBvYmplY3QqLyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgY3JlYXRlRW1wdHlBcHBTdGF0ZUFzeW5jKC8qb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHVua25vd24+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0fVxuXG5cdGFzeW5jIG5hdmlnYXRlKC8qb1RhcmdldDogVGFyZ2V0LG9Db21wb25lbnQ/OiBDb21wb25lbnQqLyk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG5cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKC8qb05hdkFyZ3VtZW50c0FycjogQXJyYXk8b2JqZWN0Piwgb0NvbXBvbmVudDogb2JqZWN0Ki8pOiBQcm9taXNlPHsgc3VwcG9ydGVkOiBib29sZWFuIH1bXT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHR9XG5cblx0YXN5bmMgaXNJbml0aWFsTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0fVxuXG5cdGFzeW5jIGV4cGFuZENvbXBhY3RIYXNoKC8qc0hhc2hGcmFnbWVudDogc3RyaW5nKi8pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRwYXJzZVNoZWxsSGFzaCgvKnNIYXNoOiBzdHJpbmcqLyk6IFBhcnNlZEhhc2gge1xuXHRcdHJldHVybiB7fSBhcyB1bmtub3duIGFzIFBhcnNlZEhhc2g7XG5cdH1cblxuXHRzcGxpdEhhc2goc0hhc2g6IHN0cmluZyk6IFJldHVyblR5cGU8VVJMUGFyc2luZ1tcInNwbGl0SGFzaFwiXT4ge1xuXHRcdC8qKlxuXHRcdCAqIEZvciBhbiBBcHBsaWNhdGlvbiB3aXRob3V0IFNoZWxsLCB0aGUgaGFzaCBpcyBzaW1pbGFyIHRvIDogIy9TYWxlc09yZGVyTWFuYWdlKDExMTExMTExLWFhYWEtYmJiYi1jY2NjLWRkZGRlZWVlZmZmZilcblx0XHQgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgOlxuXHRcdCAqIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IFwiU2FsZXNPcmRlck1hbmFnZSgxMTExMTExMS1hYWFhLWJiYmItY2NjYy1kZGRkZWVlZWZmZmYpXCJcblx0XHR9XG5cdFx0ICovXG5cdFx0Y29uc3QgcmVnZXggPSAvI1teL10qXFwvKC4qKS8uZXhlYyhzSGFzaCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNoZWxsUGFydDogXCJcIixcblx0XHRcdGFwcFNwZWNpZmljUm91dGU6IHJlZ2V4Py5sZW5ndGggPT09IDIgPyByZWdleFsxXSA6IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0Y29uc3RydWN0U2hlbGxIYXNoKC8qb05ld1NoZWxsSGFzaDogb2JqZWN0Ki8pOiBzdHJpbmcge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0c2V0RGlydHlGbGFnKC8qYkRpcnR5OiBib29sZWFuKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcigvKmZuRGlydHlTdGF0ZVByb3ZpZGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0Z2V0VXNlcigpOiBVc2VySW5mbyB7XG5cdFx0cmV0dXJuIHt9IGFzIFVzZXJJbmZvO1xuXHR9XG5cblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRoYXNVU2hlbGwoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKC8qZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKi8pOiB2b2lkIHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdH1cblxuXHR1bnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcigvKmZuTmF2RmlsdGVyOiBGdW5jdGlvbiovKTogdm9pZCB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHR9XG5cblx0YXN5bmMgc2V0QmFja05hdmlnYXRpb24oLypmbkNhbGxCYWNrPzogRnVuY3Rpb24qLyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8qIERvIE5vdGhpbmcgKi9cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRhc3luYyBzZXRIaWVyYXJjaHkoLyphSGllcmFyY2h5TGV2ZWxzOiBBcnJheTxvYmplY3Q+Ki8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvKiBEbyBOb3RoaW5nICovXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHR9XG5cblx0YXN5bmMgc2V0VGl0bGUoLypzVGl0bGU6IHN0cmluZyovKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0LyogRG8gTm90aGluZyAqL1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdGdldENvbnRlbnREZW5zaXR5KCk6IHN0cmluZyB7XG5cdFx0Ly8gaW4gY2FzZSB0aGVyZSBpcyBubyBzaGVsbCB3ZSBwcm9iYWJseSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNsYXNzZXMgYmVpbmcgZGVmaW5lZCBvbiB0aGUgYm9keVxuXHRcdGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvenlcIikpIHtcblx0XHRcdHJldHVybiBcImNvenlcIjtcblx0XHR9IGVsc2UgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2FwVWlTaXplQ29tcGFjdFwiKSkge1xuXHRcdFx0cmV0dXJuIFwiY29tcGFjdFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBnZXRQcmltYXJ5SW50ZW50KC8qc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG1QYXJhbWV0ZXJzPzogb2JqZWN0Ki8pOiBQcm9taXNlPExpbms+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIExpbmspO1xuXHR9XG5cblx0YXN5bmMgd2FpdEZvclBsdWdpbnNMb2FkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHRhc3luYyBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cblxuXHRhc3luYyBnZXRQZXJzb25hbGl6ZXIoX3BlcnNJZDogUGVyc0lkLCBfc2NvcGU6IFNjb3BlLCBfY29tcG9uZW50PzogQ29tcG9uZW50KTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHRnZXRQZXJzRGF0YTogYXN5bmMgKCkgPT5cblx0XHRcdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdFx0XHRoaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0c3VnZ2VzdGlvbnNFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRhcHBzOiB7fVxuXHRcdFx0XHR9KSxcblx0XHRcdHNldFBlcnNEYXRhOiAoKSA9PiB7fVxuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoX2l0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBlcnNvbmFsaXplclR5cGU+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdGdldFBlcnNEYXRhOiBhc3luYyAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pLFxuXHRcdFx0c2V0UGVyc0RhdGE6ICgpID0+IHt9XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEoX2l0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0YXN5bmMgc2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKF9pdGVtTmFtZTogc3RyaW5nLCBfb2JqZWN0OiBPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoX2tleTogc3RyaW5nLCBfc2NvcGU/OiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHRnZXRTaGVsbENvbmZpZygpOiBTaGVsbENvbmZpZ1R5cGUge1xuXHRcdHJldHVybiB7fSBhcyBTaGVsbENvbmZpZ1R5cGU7XG5cdH1cblxuXHRnZXRSZWdpc3RlcmVkUGx1Z2lucygpOiBSZWdpc3RlcmVkUGx1Z2luc01hcFR5cGUge1xuXHRcdHJldHVybiB7XG5cdFx0XHRBcHBXYXJtdXA6IHt9LFxuXHRcdFx0UmVuZGVyZXJFeHRlbnNpb25zOiB7fSxcblx0XHRcdFVzZXJEZWZhdWx0czoge30sXG5cdFx0XHRVc2VySW1hZ2U6IHt9XG5cdFx0fTtcblx0fVxuXG5cdGlzRmxwT3B0aW1pc3RpY0JhdGNoUGx1Z2luTG9hZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHBhcnNlUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4ge30gYXMgRXh0ZW5zaW9uO1xuXHR9XG5cblx0YXN5bmMgZ2V0SW5mcmFtZVVybCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBTaGVsbFNlcnZpY2VzU2V0dGluZ3NcbiAqL1xuZXhwb3J0IHR5cGUgU2hlbGxTZXJ2aWNlc1NldHRpbmdzID0ge1xuXHRzaGVsbENvbnRhaW5lcj86IENvbnRhaW5lcjtcbn07XG5cbnR5cGUgU2hlbGxQbHVnaW5NYW5hZ2VyID0ge1xuXHRnZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShjYXRlZ29yeTogc3RyaW5nKTogalF1ZXJ5LlByb21pc2U7XG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZTtcbn07XG5cbnR5cGUgUHJpdmF0ZVNoZWxsVXNlciA9IHtcblx0Z2V0SW5pdGlhbHMoKTogc3RyaW5nO1xuXHRpc0phbUFjdGl2ZSgpOiBib29sZWFuO1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoZWxsU2VydmljZXNcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2VzIGV4dGVuZHMgU2VydmljZTxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+PiBpbXBsZW1lbnRzIElTaGVsbFNlcnZpY2VzIHtcblx0cmVzb2x2ZUZuITogRnVuY3Rpb247XG5cblx0cmVqZWN0Rm4hOiAoKSA9PiB2b2lkO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz47XG5cblx0YXBwbGljYXRpb25OYXZpZ2F0aW9uITogTmF2aWdhdGlvbkV4dGVuc2lvbjtcblxuXHR1c2VySW5mb1NlcnZpY2UhOiBVc2VySW5mbztcblxuXHR1cmxQYXJzaW5nU2VydmljZSE6IFVSTFBhcnNpbmc7XG5cblx0c2hlbGxOYXZpZ2F0aW9uITogU2hlbGxOYXZpZ2F0aW9uO1xuXG5cdHNoZWxsUGx1Z2luTWFuYWdlciE6IFNoZWxsUGx1Z2luTWFuYWdlcjtcblxuXHRvU2hlbGxDb250YWluZXIhOiBDb250YWluZXIgJiB7IGdldFVzZXI6ICgpID0+IFByaXZhdGVTaGVsbFVzZXIgfTtcblxuXHRzaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UhOiBQZXJzb25hbGl6YXRpb25XaXRoQ29uc3RhbnRzO1xuXG5cdGluc3RhbmNlVHlwZSE6IHN0cmluZztcblxuXHRsaW5rc0NhY2hlITogUmVjb3JkPHN0cmluZywgeyBsaW5rczogTGlua1tdIH0+O1xuXG5cdHNlbWFudGljT2JqZWN0cyE6IHN0cmluZ1tdO1xuXG5cdGZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUhOiBGdW5jdGlvbjtcblxuXHRleHRlbnNpb25TZXJ2aWNlITogRXh0ZW5zaW9uO1xuXG5cdGFwcENvbXBvbmVudCE6IENvbXBvbmVudDtcblxuXHRwcml2YXRlIGFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnM6IFJlY29yZDxzdHJpbmcsIFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4+ID0ge307XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuYXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3QgYXMgQ29tcG9uZW50O1xuXHRcdHRoaXMub1NoZWxsQ29udGFpbmVyID0gb0NvbnRleHQuc2V0dGluZ3Muc2hlbGxDb250YWluZXI7XG5cdFx0dGhpcy5pbnN0YW5jZVR5cGUgPSBcInJlYWxcIjtcblx0XHR0aGlzLmxpbmtzQ2FjaGUgPSB7fTtcblx0XHR0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUgPSBmdW5jdGlvbiAob0FyZ3M6IExpbmtGaWx0ZXJbXSk6IG9iamVjdCB7XG5cdFx0XHRjb25zdCBhQ2FjaGVkU2VtYW50aWNPYmplY3RzOiBMaW5rW11bXSA9IFtdO1xuXHRcdFx0Y29uc3QgYU5vbkNhY2hlZFNlbWFudGljT2JqZWN0czogTGlua0ZpbHRlcltdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGxpbmtGaWx0ZXIgb2Ygb0FyZ3MpIHtcblx0XHRcdFx0aWYgKCEhbGlua0ZpbHRlciAmJiAhIWxpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRpZiAodGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdKSB7XG5cdFx0XHRcdFx0XHRhQ2FjaGVkU2VtYW50aWNPYmplY3RzLnB1c2godGhpcy5saW5rc0NhY2hlW2xpbmtGaWx0ZXIuc2VtYW50aWNPYmplY3RdLmxpbmtzKTtcblx0XHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsaW5rRmlsdGVyLCBcImxpbmtzXCIsIHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMubGlua3NDYWNoZVtsaW5rRmlsdGVyLnNlbWFudGljT2JqZWN0XS5saW5rc1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFOb25DYWNoZWRTZW1hbnRpY09iamVjdHMucHVzaChsaW5rRmlsdGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB7IG9sZEFyZ3M6IG9BcmdzLCBuZXdBcmdzOiBhTm9uQ2FjaGVkU2VtYW50aWNPYmplY3RzLCBjYWNoZWRMaW5rczogYUNhY2hlZFNlbWFudGljT2JqZWN0cyB9O1xuXHRcdH07XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiTmF2aWdhdGlvblwiKTtcblx0XHRjb25zdCB1c2VySW5mb1NlcnZpY2VQID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiVXNlckluZm9cIik7XG5cdFx0Y29uc3Qgb1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSA9IHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIlVSTFBhcnNpbmdcIik7XG5cdFx0Y29uc3Qgb1NoZWxsTmF2aWdhdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiU2hlbGxOYXZpZ2F0aW9uSW50ZXJuYWxcIik7XG5cdFx0Y29uc3Qgb1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJQbHVnaW5NYW5hZ2VyXCIpO1xuXHRcdGNvbnN0IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlID0gdGhpcy5vU2hlbGxDb250YWluZXIuZ2V0U2VydmljZUFzeW5jKFwiUGVyc29uYWxpemF0aW9uVjJcIik7XG5cdFx0Y29uc3Qgb1NoZWxsRXh0ZW5zaW9uU2VydmljZVByb21pc2UgPSB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJFeHRlbnNpb25cIik7XG5cblx0XHRQcm9taXNlLmFsbChbXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZVAsXG5cdFx0XHR1c2VySW5mb1NlcnZpY2VQLFxuXHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbE5hdmlnYXRpb25TZXJ2aWNlUHJvbWlzZSxcblx0XHRcdG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2VQcm9taXNlLFxuXHRcdFx0b1NoZWxsUGx1Z2luTWFuYWdlclByb21pc2UsXG5cdFx0XHRvU2hlbGxFeHRlbnNpb25TZXJ2aWNlUHJvbWlzZVxuXHRcdF0pXG5cdFx0XHQudGhlbihcblx0XHRcdFx0KFtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZSxcblx0XHRcdFx0XHR1c2VySW5mb1NlcnZpY2UsXG5cdFx0XHRcdFx0b1VybFBhcnNpbmdTZXJ2aWNlLFxuXHRcdFx0XHRcdG9TaGVsbE5hdmlnYXRpb24sXG5cdFx0XHRcdFx0b1NoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSxcblx0XHRcdFx0XHRvU2hlbGxQbHVnaW5NYW5hZ2VyLFxuXHRcdFx0XHRcdG9TaGVsbEV4dGVuc2lvblNlcnZpY2Vcblx0XHRcdFx0XSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uID0gbmF2aWdhdGlvblNlcnZpY2UgYXMgTmF2aWdhdGlvbkV4dGVuc2lvbjtcblx0XHRcdFx0XHR0aGlzLnVzZXJJbmZvU2VydmljZSA9IHVzZXJJbmZvU2VydmljZSBhcyBVc2VySW5mbztcblx0XHRcdFx0XHR0aGlzLnVybFBhcnNpbmdTZXJ2aWNlID0gb1VybFBhcnNpbmdTZXJ2aWNlIGFzIFVSTFBhcnNpbmc7XG5cdFx0XHRcdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24gPSBvU2hlbGxOYXZpZ2F0aW9uIGFzIFNoZWxsTmF2aWdhdGlvbjtcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGVyc29uYWxpemF0aW9uU2VydmljZSA9IG9TaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UgYXMgUGVyc29uYWxpemF0aW9uV2l0aENvbnN0YW50cztcblx0XHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlciA9IG9TaGVsbFBsdWdpbk1hbmFnZXIgYXMgU2hlbGxQbHVnaW5NYW5hZ2VyO1xuXHRcdFx0XHRcdHRoaXMuZXh0ZW5zaW9uU2VydmljZSA9IG9TaGVsbEV4dGVuc2lvblNlcnZpY2UgYXMgRXh0ZW5zaW9uO1xuXHRcdFx0XHRcdHRoaXMucmVzb2x2ZUZuKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb25cblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3Mob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9BcmdzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZSB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBzZW1hbnRpYyBvYmplY3RzIG9mIHRoZSBpbnRlbnRzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLCBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgbWVzc2FnZVxuXHQgKi9cblx0YXN5bmMgX19mZXRjaFNlbWFudGljT2JqZWN0KCk6IFByb21pc2U8c3RyaW5nW10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uZ2V0U2VtYW50aWNPYmplY3RzKCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB0YXJnZXQgbGlua3MgY29uZmlndXJlZCBmb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QgJiBhY3Rpb24gaW4gY2FjaGVcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0TGlua3MgbWV0aG9kLiBJbiBjYXNlIHNlcnZpY2UgaXMgbm90IGF2YWlsYWJsZSBvciBhbnkgZXhjZXB0aW9uXG5cdCAqIG1ldGhvZCB0aHJvd3MgZXhjZXB0aW9uIGVycm9yIGluIGNvbnNvbGUuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5nZXRMaW5rcyBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHRhcmdldCBsaW5rcyBhcnJheVxuXHQgKi9cblx0YXN5bmMgZ2V0TGlua3NXaXRoQ2FjaGUob0FyZ3M/OiBMaW5rRmlsdGVyW10pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0aWYgKChvQXJncyBhcyBPYmplY3RbXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG9DYWNoZVJlc3VsdHMgPSB0aGlzLmZuRmluZFNlbWFudGljT2JqZWN0c0luQ2FjaGUob0FyZ3MpO1xuXG5cdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5uZXdBcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gb0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldExpbmtzKG9DYWNoZVJlc3VsdHMubmV3QXJncyk7XG5cdFx0XHRcdGlmIChhTGlua3MubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0c0xpbmtzOiBSZWNvcmQ8c3RyaW5nLCB7IGxpbmtzOiBMaW5rW10gfT4gPSB7fTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2ldLmxlbmd0aCA+IDAgJiYgb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2ldWzBdLmxpbmtzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0c0xpbmtzW29DYWNoZVJlc3VsdHMubmV3QXJnc1tpXVswXS5zZW1hbnRpY09iamVjdF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0bGlua3M6IGFMaW5rc1tpXVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR0aGlzLmxpbmtzQ2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMubGlua3NDYWNoZSwgb1NlbWFudGljT2JqZWN0c0xpbmtzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NhY2hlUmVzdWx0cy5jYWNoZWRMaW5rcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gYUxpbmtzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGFNZXJnZWRMaW5rcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBqID0gMDtcblxuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBvQ2FjaGVSZXN1bHRzLm9sZEFyZ3MpIHtcblx0XHRcdFx0XHRcdGlmIChqIDwgYUxpbmtzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoYUxpbmtzW2pdLmxlbmd0aCA+IDAgJiYgaXRlbVswXS5zZW1hbnRpY09iamVjdCA9PT0gb0NhY2hlUmVzdWx0cy5uZXdBcmdzW2pdWzBdLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goYUxpbmtzW2pdKTtcblx0XHRcdFx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YU1lcmdlZExpbmtzLnB1c2goaXRlbVswXS5saW5rcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFNZXJnZWRMaW5rcy5wdXNoKGl0ZW1bMF0ubGlua3MpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYU1lcmdlZExpbmtzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgZ2V0U2hlbGxVSVNlcnZpY2UoKTogUHJvbWlzZTxTaGVsbFVJU2VydmljZT4ge1xuXHRcdHJldHVybiB0aGlzLmFwcENvbXBvbmVudC5nZXRTZXJ2aWNlKFwiU2hlbGxVSVNlcnZpY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCByZXRyaWV2ZSB0aGUgU2hlbGxDb250YWluZXIuXG5cdCAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHByZWRlZmluZWQgc2hlbGxDb250YWluZXIgbWV0aG9kc1xuXHQgKi9cblx0Z2V0U2hlbGxDb250YWluZXIoKTogQ29udGFpbmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vU2hlbGxDb250YWluZXI7XG5cdH1cblxuXHRhc3luYyBnZXRJbmZyYW1lVXJsKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0Y29uc3QgdXNoZWxsQ29udGFpbmVyID0gdGhpcy5nZXRTaGVsbENvbnRhaW5lcigpO1xuXHRcdGxldCBhcHBVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAodXNoZWxsQ29udGFpbmVyPy5pbkFwcFJ1bnRpbWUoKSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXBwVXJsID0gYXdhaXQgdXNoZWxsQ29udGFpbmVyLmdldEZMUFVybEFzeW5jKHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgRkxQIFVSTFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYXBwVXJsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCB0b0V4dGVybmFsIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggTmF2aWdhdGlvbiBBcmd1bWVudHMgYW5kIG9Db21wb25lbnQuXG5cdCAqIEBwYXJhbSBvTmF2QXJndW1lbnRzQXJyIEFuZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT50b0V4dGVybmFsIGFyZ3VtZW50c1xuXHQgKi9cblx0dG9FeHRlcm5hbChvTmF2QXJndW1lbnRzQXJyOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLm5hdmlnYXRlKG9OYXZBcmd1bWVudHNBcnIsIG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdGFyZ2V0IHN0YXJ0dXBBcHBTdGF0ZVxuXHQgKiBXaWxsIGNoZWNrIHRoZSBleGlzdGFuY2Ugb2YgdGhlIFNoZWxsQ29udGFpbmVyIGFuZCByZXRyaWV2ZSB0aGUgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb25cblx0ICogc2VydmljZSByZWZlcmVuY2UgY2FsbCB0aGUgZ2V0U3RhcnR1cEFwcFN0YXRlIG1ldGhvZC4gSW4gY2FzZSBzZXJ2aWNlIGlzIG5vdCBhdmFpbGFibGUgb3IgYW55IGV4Y2VwdGlvblxuXHQgKiBtZXRob2QgdGhyb3dzIGV4Y2VwdGlvbiBlcnJvciBpbiBjb25zb2xlLlxuXHQgKiBAcGFyYW0gb0FyZ3MgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5Dcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbj0+Z2V0U3RhcnR1cEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gT2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRTdGFydHVwQXBwU3RhdGUob0FyZ3M6IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkIHwgU3RhcnR1cEFwcFN0YXRlPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXJncyk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGJhY2tUb1ByZXZpb3VzQXBwIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBTb21ldGhpbmcgdGhhdCBpbmRpY2F0ZSB3ZSd2ZSBuYXZpZ2F0ZWRcblx0ICovXG5cdGFzeW5jIGJhY2tUb1ByZXZpb3VzQXBwKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5iYWNrVG9QcmV2aW91c0FwcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBocmVmRm9yRXh0ZXJuYWwgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBvQXJncyBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBUaGUgYXBwQ29tcG9uZW50XG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmhyZWZGb3JFeHRlcm5hbCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIHN0cmluZ1xuXHQgKi9cblx0YXN5bmMgaHJlZkZvckV4dGVybmFsKG9BcmdzOiBUYXJnZXQsIG9Db21wb25lbnQ/OiBDb21wb25lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5nZXRIcmVmKG9BcmdzLCBvQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgcHJvbWlzZSByZXNvbHZpbmcgdG8gYSBVUkwgdGhhdCBsYXVuY2hlcyBhbiBhcHAgd2l0aCBjZXJ0YWluIHBhcmFtZXRlcnMuXG5cdCAqIFRoaXMgQVBJIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVybmFsIHNoZWxsIGhhc2ggZm9ybWF0IGludG8gdGhlIFVSTCBmb3JtYXQgZm9yIHVzZSBpbiBsaW5rIHRhZ3MuXG5cdCAqIFRoZSByZXN1bHRpbmcgaHJlZiBpcyBmdWxseSBlbmNvZGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBpbiBvdGhlciBBUElzIHRoYXQgZXhwZWN0IHRoZSBpbnRlcm5hbCBkZWNvZGVkIGhhc2guXG5cdCAqIEBwYXJhbSBbb1RhcmdldF0gVGhlIG5hdmlnYXRpb24gdGFyZ2V0IHRvIHRyYW5zZm9ybS4gV2hlbiwgb21pdHRlZCB0aGUgY3VycmVudCBoYXNoIGlzIHVzZWQgYXMgdGhlIGJhc2lzIGZvciB0aGUgY2FsY3VsYXRpb24uXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSBlbmNvZGVkIGhyZWYuXG5cdCAqL1xuXHRhc3luYyBnZXRIcmVmKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEhyZWYob1RhcmdldCwgb0NvbXBvbmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGdldEFwcFN0YXRlIG1ldGhvZCBvZiBDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiBzZXJ2aWNlIHdpdGggb0NvbXBvbmVudCBhbmQgb0FwcFN0YXRlS2V5LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcGFyYW0gc0FwcFN0YXRlS2V5IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmdldEFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBnZXRBcHBTdGF0ZShvQ29tcG9uZW50OiBDb21wb25lbnQsIHNBcHBTdGF0ZUtleTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldEFwcFN0YXRlKG9Db21wb25lbnQsIHNBcHBTdGF0ZUtleSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGNyZWF0ZUVtcHR5QXBwU3RhdGUgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBvQ29tcG9uZW50LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudCBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZlxuXHQgKiBzYXAudXNoZWxsLnNlcnZpY2VzLkNyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uPT5jcmVhdGVFbXB0eUFwcFN0YXRlIGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQ6IENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5jcmVhdGVFbXB0eUFwcFN0YXRlKG9Db21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBpc05hdmlnYXRpb25TdXBwb3J0ZWQgbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2Ugd2l0aCBOYXZpZ2F0aW9uIEFyZ3VtZW50cyBhbmQgb0NvbXBvbmVudC5cblx0ICogQHBhcmFtIGFUYXJnZXRzXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50IENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb249PmlzTmF2aWdhdGlvblN1cHBvcnRlZCBhcmd1bWVudHNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIG9iamVjdFxuXHQgKi9cblx0YXN5bmMgaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzOiBUYXJnZXRbXSwgb0NvbXBvbmVudDogQ29tcG9uZW50KTogUHJvbWlzZTx7IHN1cHBvcnRlZDogYm9vbGVhbiB9W10+IHtcblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvbk5hdmlnYXRpb24uaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKGFUYXJnZXRzLCBvQ29tcG9uZW50KSBhcyB1bmtub3duIGFzIFByb21pc2U8eyBzdXBwb3J0ZWQ6IGJvb2xlYW4gfVtdPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gdG8gYSBzcGVjaWZpZWQgdGFyZ2V0IG91dHNpZGUgb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIGFwcGxpY2F0aW9uLlxuXHQgKiBAcGFyYW0gb1RhcmdldCBUaGUgbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqIEBwYXJhbSBbb0NvbXBvbmVudF0gQSBVSTUgY29tcG9uZW50LCB1c2VkIHRvIGxvZ2ljYWxseSBhdHRhY2ggYW55IHJlbGF0ZWQgYXBwIHN0YXRlLlxuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2aW5nIG9uY2UgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZC4gVGhlIFByb21pc2UgbWlnaHQgbmV2ZXIgcmVqZWN0IG9yIHJlc29sdmVcblx0ICogICAgICAgICAgICAgICAgICAgIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgbmF2aWdhdGlvbi5cblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlKG9UYXJnZXQ6IFRhcmdldCwgb0NvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0LCBvQ29tcG9uZW50KSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHVuZGVmaW5lZD47XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGlzSW5pdGlhbE5hdmlnYXRpb25Bc3luYyBtZXRob2Qgb2YgQ3Jvc3NBcHBsaWNhdGlvbk5hdmlnYXRpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHRvIGJvb2xlYW5cblx0ICovXG5cdGFzeW5jIGlzSW5pdGlhbE5hdmlnYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmlzSW5pdGlhbE5hdmlnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZXhwYW5kQ29tcGFjdEhhc2ggbWV0aG9kIG9mIENyb3NzQXBwbGljYXRpb25OYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBzSGFzaEZyYWdtZW50IEFuIChpbnRlcm5hbCBmb3JtYXQpIHNoZWxsIGhhc2hcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoZSBzdWNjZXNzIGhhbmRsZXIgb2YgdGhlIHJlc29sdmUgcHJvbWlzZSBnZXQgYW4gZXhwYW5kZWQgc2hlbGwgaGFzaCBhcyBmaXJzdCBhcmd1bWVudFxuXHQgKi9cblx0YXN5bmMgZXhwYW5kQ29tcGFjdEhhc2goc0hhc2hGcmFnbWVudDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHNIYXNoRnJhZ21lbnQpOyAvL3RoaXMubmF2VGFyZ2V0UmVzb2x1dGlvbi5leHBhbmRDb21wYWN0SGFzaChzSGFzaEZyYWdtZW50KTtcblx0fVxuXG5cdGdldEhhc2goKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gYCMke3RoaXMudXJsUGFyc2luZ1NlcnZpY2UuZ2V0U2hlbGxIYXNoKHdpbmRvdy5sb2NhdGlvbi5ocmVmKX1gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgYWxsIHRoZSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIFBsdWdpbk1hbmFnZXIsIHNvcnRlZCBieSBzdXBwb3J0ZWQgcGx1Z2luIGNhdGVnb3JpZXMuXG5cdCAqIEByZXR1cm5zIE1hcCBvZiByZWdpc3RlcmVkIHBsdWdpbnNcblx0ICovXG5cdGdldFJlZ2lzdGVyZWRQbHVnaW5zKCk6IFJlZ2lzdGVyZWRQbHVnaW5zTWFwVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyLmdldFJlZ2lzdGVyZWRQbHVnaW5zKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgZm9yIHRoZSBvcHRpbWlzdGljIGJhdGNoIHBsdWdpbiBzZXR1cCBpbiB0aGUgRkxQLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcHRpbWlzdGljIGJhdGNoIHBsdWdpbiBpcyBzZXQgdXAgYW5kIGVuYWJsZWQuXG5cdCAqL1xuXHRpc0ZscE9wdGltaXN0aWNCYXRjaFBsdWdpbkxvYWRlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zID0gdGhpcy5nZXRSZWdpc3RlcmVkUGx1Z2lucygpLlJlbmRlcmVyRXh0ZW5zaW9ucztcblx0XHRpZiAoXG5cdFx0XHRmbHBQbHVnaW5zUmVuZGVyZXJFeHRlbnNpb25zPy5oYXNPd25Qcm9wZXJ0eShcIk1BTkFHRV9GRV9DQUNIRVNcIikgJiZcblx0XHRcdCEhKGZscFBsdWdpbnNSZW5kZXJlckV4dGVuc2lvbnMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgb2JqZWN0Pj4pLk1BTkFHRV9GRV9DQUNIRVMuZW5hYmxlZFxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHBhcnNlU2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICogQHBhcmFtIHNIYXNoIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIHNhcC51c2hlbGwuc2VydmljZXMuVVJMUGFyc2luZz0+cGFyc2VTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdXJsXG5cdCAqL1xuXHRwYXJzZVNoZWxsSGFzaChzSGFzaDogc3RyaW5nKTogUGFyc2VkSGFzaCB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VTaGVsbEhhc2goc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzcGxpdEhhc2ggbWV0aG9kIG9mIFVSTFBhcnNpbmcgc2VydmljZSB3aXRoIGdpdmVuIHNIYXNoLlxuXHQgKiBAcGFyYW0gc0hhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5zcGxpdEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB0byBvYmplY3Rcblx0ICovXG5cdHNwbGl0SGFzaChzSGFzaDogc3RyaW5nKTogeyBzaGVsbFBhcnQ/OiBzdHJpbmc7IGFwcFNwZWNpZmljUm91dGU/OiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2Uuc3BsaXRIYXNoKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgY29uc3RydWN0U2hlbGxIYXNoIG1ldGhvZCBvZiBVUkxQYXJzaW5nIHNlcnZpY2Ugd2l0aCBnaXZlbiBzSGFzaC5cblx0ICogQHBhcmFtIG9OZXdTaGVsbEhhc2ggQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Zcblx0ICogc2FwLnVzaGVsbC5zZXJ2aWNlcy5VUkxQYXJzaW5nPT5jb25zdHJ1Y3RTaGVsbEhhc2ggYXJndW1lbnRzXG5cdCAqIEByZXR1cm5zIFNoZWxsIEhhc2ggc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaDogb2JqZWN0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy51cmxQYXJzaW5nU2VydmljZS5jb25zdHJ1Y3RTaGVsbEhhc2gob05ld1NoZWxsSGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHNldERpcnR5RmxhZyBtZXRob2Qgd2l0aCBnaXZlbiBkaXJ0eSBzdGF0ZS5cblx0ICogQHBhcmFtIGJEaXJ0eSBDaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBzYXAudXNoZWxsLkNvbnRhaW5lci5zZXREaXJ0eUZsYWcgYXJndW1lbnRzXG5cdCAqL1xuXHRzZXREaXJ0eUZsYWcoYkRpcnR5OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5vU2hlbGxDb250YWluZXIuc2V0RGlydHlGbGFnKGJEaXJ0eSk7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIG1ldGhvZCB3aXRoIGdpdmVuIGRpcnR5IHN0YXRlIHByb3ZpZGVyIGNhbGxiYWNrIG1ldGhvZC5cblx0ICogQHBhcmFtIGZuRGlydHlTdGF0ZVByb3ZpZGVyIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHNhcC51c2hlbGwuQ29udGFpbmVyLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIGFyZ3VtZW50c1xuXHQgKi9cblx0cmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihmbkRpcnR5U3RhdGVQcm92aWRlcik7XG5cdH1cblxuXHQvKipcblx0ICogV2lsbCBjYWxsIGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIgbWV0aG9kIHdpdGggZ2l2ZW4gZGlydHkgc3RhdGUgcHJvdmlkZXIgY2FsbGJhY2sgbWV0aG9kLlxuXHQgKiBAcGFyYW0gZm5EaXJ0eVN0YXRlUHJvdmlkZXIgQ2hlY2sgdGhlIGRlZmluaXRpb24gb2Ygc2FwLnVzaGVsbC5Db250YWluZXIuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciBhcmd1bWVudHNcblx0ICovXG5cdGRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZm5EaXJ0eVN0YXRlUHJvdmlkZXI6ICgpID0+IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm9TaGVsbENvbnRhaW5lci5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGZuRGlydHlTdGF0ZVByb3ZpZGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VXNlciBtZXRob2Qgb2YgdXNoZWxsIGNvbnRhaW5lci5cblx0ICogQHJldHVybnMgUmV0dXJucyBVc2VyIG9iamVjdFxuXHQgKi9cblx0Z2V0VXNlcigpOiBVc2VySW5mbyB7XG5cdFx0cmV0dXJuIHRoaXMudXNlckluZm9TZXJ2aWNlO1xuXHR9XG5cblx0aXNKYW1BY3RpdmUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5pc0phbUFjdGl2ZSgpO1xuXHR9XG5cblx0Z2V0VXNlckluaXRpYWxzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMub1NoZWxsQ29udGFpbmVyLmdldFVzZXIoKS5nZXRJbml0aWFscygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2hlY2sgaWYgdXNoZWxsIGNvbnRhaW5lciBpcyBhdmFpbGFibGUgb3Igbm90LlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWVcblx0ICovXG5cdGhhc1VTaGVsbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgcmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIG1ldGhvZCBvZiBzaGVsbE5hdmlnYXRpb24uXG5cdCAqIEBwYXJhbSBmbk5hdkZpbHRlciBUaGUgZmlsdGVyIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyXG5cdCAqL1xuXHRyZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24ucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKGZuTmF2RmlsdGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgdW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIgbWV0aG9kIG9mIHNoZWxsTmF2aWdhdGlvbi5cblx0ICogQHBhcmFtIGZuTmF2RmlsdGVyIFRoZSBmaWx0ZXIgZnVuY3Rpb24gdG8gdW5yZWdpc3RlclxuXHQgKi9cblx0dW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXI6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0dGhpcy5zaGVsbE5hdmlnYXRpb24udW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIoZm5OYXZGaWx0ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRCYWNrTmF2aWdhdGlvbiBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgYmFjayBidXR0b24gaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIGZuQ2FsbEJhY2sgQSBjYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgaW4gdGhlIFVJLlxuXHQgKi9cblx0YXN5bmMgc2V0QmFja05hdmlnYXRpb24oZm5DYWxsQmFjazogRnVuY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQoYXdhaXQgdGhpcy5nZXRTaGVsbFVJU2VydmljZSgpKS5zZXRCYWNrTmF2aWdhdGlvbihmbkNhbGxCYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgc2V0SGllcmFyY2h5IG1ldGhvZCBvZiBTaGVsbFVJU2VydmljZVxuXHQgKiB0aGF0IGRpc3BsYXlzIHRoZSBnaXZlbiBoaWVyYXJjaHkgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIFthSGllcmFyY2h5TGV2ZWxzXSBBbiBhcnJheSByZXByZXNlbnRpbmcgaGllcmFyY2hpZXMgb2YgdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgYXBwLlxuXHQgKi9cblx0YXN5bmMgc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHM6IG9iamVjdFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0KGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuc2V0SGllcmFyY2h5KGFIaWVyYXJjaHlMZXZlbHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpbGwgY2FsbCBzZXRUaXRsZSBtZXRob2Qgb2YgU2hlbGxVSVNlcnZpY2Vcblx0ICogdGhhdCBkaXNwbGF5cyB0aGUgZ2l2ZW4gdGl0bGUgaW4gdGhlIHNoZWxsIGhlYWRlci5cblx0ICogQHBhcmFtIFtzVGl0bGVdIFRoZSBuZXcgdGl0bGUuIFRoZSBkZWZhdWx0IHRpdGxlIGlzIHNldCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBnaXZlbi5cblx0ICovXG5cdGFzeW5jIHNldFRpdGxlKHNUaXRsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0KGF3YWl0IHRoaXMuZ2V0U2hlbGxVSVNlcnZpY2UoKSkuc2V0VGl0bGUoc1RpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXaWxsIGNhbGwgZ2V0VGl0bGUgbWV0aG9kIG9mIFNoZWxsVUlTZXJ2aWNlXG5cdCAqIHRoYXQgZGlzcGxheXMgdGhlIGdpdmVuIHRpdGxlIGluIHRoZSBzaGVsbCBoZWFkZXIuXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqL1xuXHRhc3luYyBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdHJldHVybiAoYXdhaXQgdGhpcy5nZXRTaGVsbFVJU2VydmljZSgpKS5nZXRUaXRsZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY3VycmVudGx5IGRlZmluZWQgY29udGVudCBkZW5zaXR5LlxuXHQgKiBAcmV0dXJucyBUaGUgY29udGVudCBkZW5zaXR5IHZhbHVlXG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0eSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm9TaGVsbENvbnRhaW5lci5nZXRVc2VyKCkuZ2V0Q29udGVudERlbnNpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgYSBnaXZlbiBzZW1hbnRpYyBvYmplY3QsIHRoaXMgbWV0aG9kIGNvbnNpZGVycyBhbGwgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHNlbWFudGljIG9iamVjdCBhbmRcblx0ICogcmV0dXJucyB0aGUgb25lIHRhZ2dlZCBhcyBhIFwicHJpbWFyeUFjdGlvblwiLiBJZiBubyBpbmJvdW5kIHRhZ2dlZCBhcyBcInByaW1hcnlBY3Rpb25cIiBleGlzdHMsIHRoZW4gaXQgcmV0dXJuc1xuXHQgKiB0aGUgaW50ZW50IG9mIHRoZSBmaXJzdCBpbmJvdW5kIChhZnRlciBzb3J0aW5nIGhhcyBiZWVuIGFwcGxpZWQpIG1hdGNoaW5nIHRoZSBhY3Rpb24gXCJkaXNwbGF5RmFjdFNoZWV0XCIuXG5cdCAqIEBwYXJhbSBzU2VtYW50aWNPYmplY3QgU2VtYW50aWMgb2JqZWN0LlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgU2VlICNDcm9zc0FwcGxpY2F0aW9uTmF2aWdhdGlvbiNnZXRMaW5rcyBmb3IgZGVzY3JpcHRpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd2lsbCBiZSByZXNvbHZlZCB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBpbnRlbnQgaWYgaXQgZXhpc3RzLlxuXHQgKi9cblx0YXN5bmMgZ2V0UHJpbWFyeUludGVudChzU2VtYW50aWNPYmplY3Q6IHN0cmluZywgbVBhcmFtZXRlcnM/OiBMaW5rRmlsdGVyKTogUHJvbWlzZTxMaW5rPiB7XG5cdFx0Y29uc3QgcHJpbWFyeUludGVudCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25OYXZpZ2F0aW9uLmdldFByaW1hcnlJbnRlbnQoc1NlbWFudGljT2JqZWN0LCBtUGFyYW1ldGVycyk7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkocHJpbWFyeUludGVudCkpIHtcblx0XHRcdHJldHVybiBwcmltYXJ5SW50ZW50WzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gcHJpbWFyeUludGVudDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogV2FpdCBmb3IgdGhlIHJlbmRlciBleHRlbnNpb25zIHBsdWdpbiB0byBiZSBsb2FkZWQuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgd2UgYXJlIGFibGUgdG8gd2FpdCBmb3IgaXQsIG90aGVyd2lzZSB3ZSBjb3VsZG4ndCBhbmQgY2Fubm90IHJlbHkgb24gaXQuXG5cdCAqL1xuXHRhc3luYyB3YWl0Rm9yUGx1Z2luc0xvYWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRpZiAoIXRoaXMuc2hlbGxQbHVnaW5NYW5hZ2VyPy5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZSkge1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9taXNlL2NhdGNoLW9yLXJldHVyblxuXHRcdFx0XHR0aGlzLnNoZWxsUGx1Z2luTWFuYWdlclxuXHRcdFx0XHRcdC5nZXRQbHVnaW5Mb2FkaW5nUHJvbWlzZShcIlJlbmRlcmVyRXh0ZW5zaW9uc1wiKVxuXHRcdFx0XHRcdC5mYWlsKChvRXJyb3I6IHVua25vd24pID0+IHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nLCBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNGYWN0b3J5LndhaXRGb3JQbHVnaW5zTG9hZFwiKTtcblx0XHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBwZXJzb25hbGl6ZXIgZnJvbSB0aGUgc2hlbGwgc2VydmljZS5cblx0ICogV2Ugc2V0IHNvbWUgZGVmYXVsdHMgZm9yIHRoZSBzY29wZSBvYmplY3QuXG5cdCAqIEBwYXJhbSBwZXJzSWQgUGVyc29uYWxpemF0aW9uIG9iamVjdFxuXHQgKiBAcGFyYW0gc2NvcGUgU2NvcGUgb2JqZWN0XG5cdCAqIEBwYXJhbSBjb21wb25lbnRcblx0ICogQHJldHVybnMgUGVyc29uYWxpemVyIG9iamVjdCB3aGljaCBoYW5kbGVzIHBlcnNvbmFsaXphdGlvblxuXHQgKi9cblx0YXN5bmMgZ2V0UGVyc29uYWxpemVyKHBlcnNJZDogUGVyc0lkLCBzY29wZTogU2NvcGUsIGNvbXBvbmVudD86IENvbXBvbmVudCk6IFByb21pc2U8UGVyc29uYWxpemVyVHlwZT4ge1xuXHRcdHNjb3BlID0ge1xuXHRcdFx0Ly8gbWVyZ2Ugc29tZSBkZWZhdWx0c1xuXHRcdFx0a2V5Q2F0ZWdvcnk6IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmNvbnN0YW50cy5rZXlDYXRlZ29yeS5GSVhFRF9LRVksXG5cdFx0XHR3cml0ZUZyZXF1ZW5jeTogdGhpcy5zaGVsbFBlcnNvbmFsaXphdGlvblNlcnZpY2UuY29uc3RhbnRzLndyaXRlRnJlcXVlbmN5LkxPVyxcblx0XHRcdGNsaWVudFN0b3JhZ2VBbGxvd2VkOiBmYWxzZSxcblx0XHRcdHZhbGlkaXR5OiBJbmZpbml0eSxcblx0XHRcdC4uLnNjb3BlXG5cdFx0fTtcblx0XHRyZXR1cm4gKGF3YWl0IHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmdldFBlcnNvbmFsaXplcihwZXJzSWQsIHNjb3BlLCBjb21wb25lbnQpKSBhcyBQZXJzb25hbGl6ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZXMgYSBjb250YWluZXIgaWRlbnRpZmllZCBieSBzQ29udGFpbmVyS2V5LlxuXHQgKiBAcGFyYW0ga2V5IENvbnRhaW5lciBrZXlcblx0ICogQHBhcmFtIHNjb3BlIFNjb3BlIG9iamVjdFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIHdoZW4gdGhlIGNvbnRhaW5lciBpcyBkZWxldGVkXG5cdCAqL1xuXHRhc3luYyBkZWxldGVQZXJzb25hbGl6YXRpb25Db250YWluZXIoa2V5OiBzdHJpbmcsIHNjb3BlPzogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuc2hlbGxQZXJzb25hbGl6YXRpb25TZXJ2aWNlLmRlbGV0ZUNvbnRhaW5lcihrZXksIHNjb3BlIGFzIHVua25vd24gYXMgb2JqZWN0KSBhcyBQcm9taXNlPHZvaWQ+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSBwZXJzb25hbGl6ZXIgdG8gYWNjZXNzIHRoZSBBcHBsaWNhdGlvbiBkYXRhIHN0b3JlZCBpbiB0aGUgc2hlbGwgUGVyc29uYWxpemF0aW9uLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWUgVGhlIG5hbWUgb2YgdGhlIGl0ZW0gZm9yIHdoaWNoIHRoZSBwZXJzb25hbGl6ZXIgaXMgY3JlYXRlZC5cblx0ICogQHJldHVybnMgQSBwZXJzb25hbGl6ZXJcblx0ICovXG5cdHB1YmxpYyBhc3luYyBnZXRBcHBsaWNhdGlvblBlcnNvbmFsaXplcihpdGVtTmFtZTogc3RyaW5nKTogUHJvbWlzZTxQZXJzb25hbGl6ZXJUeXBlPiB7XG5cdFx0aWYgKCF0aGlzLmFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnNbaXRlbU5hbWVdKSB7XG5cdFx0XHR0aGlzLmFwcGxpY2F0aW9uUGVyc29ubmFsaXplcnNbaXRlbU5hbWVdID0gdGhpcy5nZXRQZXJzb25hbGl6ZXIoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb250YWluZXI6IGBBcHBsaWNhdGlvbiMkeyh0aGlzLmFwcENvbXBvbmVudCBhcyBBcHBDb21wb25lbnQpLmdldE1hbmlmZXN0KClbXCJzYXAuYXBwXCJdLmlkfWAsXG5cdFx0XHRcdFx0aXRlbTogaXRlbU5hbWVcblx0XHRcdFx0fSxcblx0XHRcdFx0e30sXG5cdFx0XHRcdHRoaXMuYXBwQ29tcG9uZW50XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5hcHBsaWNhdGlvblBlcnNvbm5hbGl6ZXJzW2l0ZW1OYW1lXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGRhdGEgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBpdGVtTmFtZVxuXHQgKiBAcmV0dXJucyBEYXRhXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKGl0ZW1OYW1lOiBzdHJpbmcpOiBQcm9taXNlPG9iamVjdCB8IHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiAoYXdhaXQgKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25QZXJzb25hbGl6ZXIoaXRlbU5hbWUpKT8uZ2V0UGVyc0RhdGEoKSkgYXMgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHN0b3JlcyBhbiBvYmplY3QgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gaXRlbU5hbWVcblx0ICogQHBhcmFtIGRhdGFcblx0ICogQHJldHVybnMgQSBwcm9taXNlXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgc2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhKGl0ZW1OYW1lOiBzdHJpbmcsIGRhdGE6IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uUGVyc29uYWxpemVyKGl0ZW1OYW1lKSkuc2V0UGVyc0RhdGEoZGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBjb25maWcgZnJvbSB0aGUgd2luZG93cyBvYmplY3QuXG5cdCAqIEByZXR1cm5zIFNoZWxsIGNvbmZpZyBvYmplY3Rcblx0ICovXG5cdGdldFNoZWxsQ29uZmlnKCk6IFNoZWxsQ29uZmlnVHlwZSB7XG5cdFx0cmV0dXJuICh3aW5kb3cgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+KVtcInNhcC11c2hlbGwtY29uZmlnXCJdIGFzIFNoZWxsQ29uZmlnVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBwYXJhbWV0ZXJzIGZyb20gYSBVUkkgcXVlcnkgc3RyaW5nIChzdGFydGluZyB3aXRoID8pIGludG8gYSBwYXJhbWV0ZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gdXJsIENoZWNrIHRoZSBkZWZpbml0aW9uIG9mXG5cdCAqIFBhcmFtZXRlciBzdHJpbmdcblx0ICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5nIHN0cmluZyBhcnJheXNcblx0ICovXG5cdHBhcnNlUGFyYW1ldGVycyh1cmw6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiB7XG5cdFx0cmV0dXJuIHRoaXMudXJsUGFyc2luZ1NlcnZpY2UucGFyc2VQYXJhbWV0ZXJzKHVybCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzaGVsbCBleHRlbnNpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgU2hlbGwgZXh0ZW5zaW9uIHNlcnZpY2Vcblx0ICovXG5cdGdldEV4dGVuc2lvblNlcnZpY2UoKTogRXh0ZW5zaW9uIHtcblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25TZXJ2aWNlO1xuXHR9XG59XG5cbi8qKlxuICogU2VydmljZSBGYWN0b3J5IGZvciB0aGUgU2hlbGxTZXJ2aWNlc1xuICpcbiAqL1xuY2xhc3MgU2hlbGxTZXJ2aWNlc0ZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+IHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgZWl0aGVyIGEgc3RhbmRhcmQgb3IgYSBtb2NrIFNoZWxsIHNlcnZpY2UgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuXHQgKiBAcGFyYW0gc2VydmljZUNvbnRleHQgVGhlIHNoZWxsc2VydmljZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYSBzaGVsbCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uXG5cdCAqIEBzZWUgU2VydmljZUZhY3RvcnkjY3JlYXRlSW5zdGFuY2Vcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKHNlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+KTogUHJvbWlzZTxJU2hlbGxTZXJ2aWNlcz4ge1xuXHRcdHNlcnZpY2VDb250ZXh0LnNldHRpbmdzLnNoZWxsQ29udGFpbmVyID0gc2FwLnVpLnJlcXVpcmUoXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiKTtcblx0XHRjb25zdCBzaGVsbFNlcnZpY2UgPSBzZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5zaGVsbENvbnRhaW5lclxuXHRcdFx0PyBuZXcgU2hlbGxTZXJ2aWNlcyhzZXJ2aWNlQ29udGV4dCBhcyBTZXJ2aWNlQ29udGV4dDxSZXF1aXJlZDxTaGVsbFNlcnZpY2VzU2V0dGluZ3M+Pilcblx0XHRcdDogbmV3IFNoZWxsU2VydmljZU1vY2soc2VydmljZUNvbnRleHQpO1xuXHRcdGF3YWl0IHNoZWxsU2VydmljZS5pbml0UHJvbWlzZTtcblx0XHQvLyBFbnJpY2ggdGhlIGFwcENvbXBvbmVudCB3aXRoIHRoaXMgbWV0aG9kXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gc2VydmljZUNvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0YXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMgPSAoKTogSVNoZWxsU2VydmljZXMgPT4gc2hlbGxTZXJ2aWNlO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0bGV0IHNlbWFudGljT2JqZWN0czogc3RyaW5nW10gPSBbXTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0cyA9IGF3YWl0IHNoZWxsU2VydmljZS5fX2ZldGNoU2VtYW50aWNPYmplY3QoKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGNhbGxpbmcgZ2V0U2VtYW50aWNPYmplY3RzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHQoaW50ZXJuYWxNb2RlbCBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL3NlbWFudGljT2JqZWN0c1wiLCBzZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc2hlbGxTZXJ2aWNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoZWxsU2VydmljZXNGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0VBa0NBO0VBeUNBO0FBQ0E7QUFDQTtFQTBHQTtBQUNBO0FBQ0E7QUFDQTtFQUhBLElBSU1BLGdCQUFnQiwwQkFBQUMsUUFBQTtJQUFBQyxjQUFBLENBQUFGLGdCQUFBLEVBQUFDLFFBQUE7SUFBQSxTQUFBRCxpQkFBQTtNQUFBLE9BQUFDLFFBQUEsQ0FBQUUsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQSxJQUFBQyxNQUFBLEdBQUFMLGdCQUFBLENBQUFNLFNBQUE7SUFBQUQsTUFBQSxDQU9yQkUsSUFBSSxHQUFKLFNBQUFBLEtBQUEsRUFBYTtNQUNaLElBQUksQ0FBQ0MsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFzQixDQUFDO01BQzFELElBQUksQ0FBQ0MsWUFBWSxHQUFHLE1BQU07SUFDM0IsQ0FBQztJQUFBTixNQUFBLENBRUtPLFFBQVEsR0FBZCxlQUFBQSxTQUFBLENBQWU7SUFBQSxFQUFzQztNQUNwRCxPQUFPSCxPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBTCxNQUFBLENBRUtRLHFCQUFxQixHQUEzQixlQUFBQSxzQkFBQSxFQUFpRDtNQUNoRCxPQUFPSixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUFBTCxNQUFBLENBRUtTLGlCQUFpQixHQUF2QixlQUFBQSxrQkFBQSxDQUF3QjtJQUFBLEVBQXNDO01BQzdELE9BQU9MLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUFMLE1BQUEsQ0FFRFUsVUFBVSxHQUFWLFNBQUFBLFdBQUEsQ0FBVztJQUFBLEVBQStEO01BQ3pFO0lBQUEsQ0FDQTtJQUFBVixNQUFBLENBRUtXLGtCQUFrQixHQUF4QixlQUFB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
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
2
|
import type Component from "sap/ui/core/Component";
|
|
3
|
-
import type ComponentContainer from "sap/ui/core/ComponentContainer";
|
|
4
|
-
import type Control from "sap/ui/core/Control";
|
|
5
3
|
import Service from "sap/ui/core/service/Service";
|
|
6
4
|
import ServiceFactory from "sap/ui/core/service/ServiceFactory";
|
|
7
5
|
import type JSONModel from "sap/ui/model/json/JSONModel";
|
|
@@ -125,8 +123,6 @@ export interface IShellServices {
|
|
|
125
123
|
|
|
126
124
|
deregisterDirtyStateProvider(fnDirtyStateProvider: Function): void;
|
|
127
125
|
|
|
128
|
-
createRenderer(): object;
|
|
129
|
-
|
|
130
126
|
getUser(): UserInfo;
|
|
131
127
|
getUserInitials(): string;
|
|
132
128
|
|
|
@@ -305,10 +301,6 @@ class ShellServiceMock extends Service<ShellServicesSettings> implements IShellS
|
|
|
305
301
|
/* Do Nothing */
|
|
306
302
|
}
|
|
307
303
|
|
|
308
|
-
createRenderer(): object {
|
|
309
|
-
return {};
|
|
310
|
-
}
|
|
311
|
-
|
|
312
304
|
getUser(): UserInfo {
|
|
313
305
|
return {} as UserInfo;
|
|
314
306
|
}
|
|
@@ -766,7 +758,7 @@ export class ShellServices extends Service<Required<ShellServicesSettings>> impl
|
|
|
766
758
|
* @returns A promise the success handler of the resolve promise get an expanded shell hash as first argument
|
|
767
759
|
*/
|
|
768
760
|
async expandCompactHash(sHashFragment: string): Promise<string> {
|
|
769
|
-
return sHashFragment; //this.navTargetResolution.expandCompactHash(sHashFragment);
|
|
761
|
+
return Promise.resolve(sHashFragment); //this.navTargetResolution.expandCompactHash(sHashFragment);
|
|
770
762
|
}
|
|
771
763
|
|
|
772
764
|
getHash(): string {
|
|
@@ -851,14 +843,6 @@ export class ShellServices extends Service<Required<ShellServicesSettings>> impl
|
|
|
851
843
|
this.oShellContainer.deregisterDirtyStateProvider(fnDirtyStateProvider);
|
|
852
844
|
}
|
|
853
845
|
|
|
854
|
-
/**
|
|
855
|
-
* Will call createRenderer method of ushell container.
|
|
856
|
-
* @returns Returns renderer object
|
|
857
|
-
*/
|
|
858
|
-
async createRenderer(): Promise<Control | ComponentContainer> {
|
|
859
|
-
return this.oShellContainer.createRenderer();
|
|
860
|
-
}
|
|
861
|
-
|
|
862
846
|
/**
|
|
863
847
|
* Will call getUser method of ushell container.
|
|
864
848
|
* @returns Returns User object
|