@sapui5/sap.fe.core 1.95.0 → 1.98.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 +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +3 -3
- package/src/sap/fe/core/AppComponent.js +9 -44
- package/src/sap/fe/core/AppStateHandler.js +2 -2
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/BusyLocker.js +13 -1
- package/src/sap/fe/core/CommonUtils.js +129 -219
- package/src/sap/fe/core/ExtensionAPI.js +14 -6
- package/src/sap/fe/core/PageController.js +9 -35
- package/src/sap/fe/core/RouterProxy.js +79 -75
- package/src/sap/fe/core/Synchronization.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +16 -7
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TransactionHelper.js +183 -65
- package/src/sap/fe/core/actions/draft.js +50 -23
- package/src/sap/fe/core/actions/messageHandling.js +86 -7
- package/src/sap/fe/core/actions/nonDraft.js +1 -1
- package/src/sap/fe/core/actions/operations.js +75 -33
- package/src/sap/fe/core/actions/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +276 -122
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +14 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +90 -46
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +234 -232
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +539 -209
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +550 -213
- package/src/sap/fe/core/controllerextensions/MassEdit.js +79 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +227 -103
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -7
- package/src/sap/fe/core/controllerextensions/Paginator.js +38 -12
- package/src/sap/fe/core/controllerextensions/Placeholder.js +16 -19
- package/src/sap/fe/core/controllerextensions/Routing.js +17 -2
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +20 -7
- package/src/sap/fe/core/controllerextensions/SideEffects.js +8 -9
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +19 -17
- package/src/sap/fe/core/controllerextensions/ViewState.js +54 -9
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +40 -34
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ConditionalWrapper.js +1 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +110 -109
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +7 -4
- package/src/sap/fe/core/controls/FieldWrapper.js +10 -4
- package/src/sap/fe/core/controls/FilterBar.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -6
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +45 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +78 -0
- package/src/sap/fe/core/converters/ConverterContext.js +13 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +10 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +7 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +18 -7
- package/src/sap/fe/core/converters/ManifestWrapper.ts +15 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +920 -882
- package/src/sap/fe/core/converters/MetaModelConverter.ts +829 -853
- package/src/sap/fe/core/converters/annotations/DataField.js +54 -4
- package/src/sap/fe/core/converters/annotations/DataField.ts +53 -3
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +83 -48
- package/src/sap/fe/core/converters/controls/Common/Action.js +15 -3
- package/src/sap/fe/core/converters/controls/Common/Action.ts +12 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +68 -21
- package/src/sap/fe/core/converters/controls/Common/Form.ts +60 -16
- package/src/sap/fe/core/converters/controls/Common/KPI.js +331 -248
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +355 -287
- package/src/sap/fe/core/converters/controls/Common/Table.js +426 -332
- package/src/sap/fe/core/converters/controls/Common/Table.ts +516 -383
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +468 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +609 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +30 -13
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +31 -12
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +15 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +27 -6
- package/src/sap/fe/core/converters/helpers/Aggregation.js +8 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +9 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +2 -2
- package/src/sap/fe/core/converters/helpers/ID.js +9 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -2
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -5
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +2 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +34 -4
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -7
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -2
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +8 -3
- package/src/sap/fe/core/formatters/TableFormatter.js +27 -4
- package/src/sap/fe/core/formatters/TableFormatter.ts +20 -3
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -3
- package/src/sap/fe/core/fpm/Component.js +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +388 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +199 -111
- package/src/sap/fe/core/helpers/BindingExpression.ts +193 -102
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -3
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +211 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +32 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +678 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +64 -1
- package/src/sap/fe/core/helpers/PasteHelper.js +7 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +2 -2
- package/src/sap/fe/core/helpers/StableIdHelper.ts +1 -1
- package/src/sap/fe/core/library.js +28 -2
- package/src/sap/fe/core/library.support.js +10 -4
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
- package/src/sap/fe/core/messagebundle.properties +67 -3
- package/src/sap/fe/core/messagebundle_ar.properties +40 -3
- package/src/sap/fe/core/messagebundle_bg.properties +40 -3
- package/src/sap/fe/core/messagebundle_ca.properties +41 -4
- package/src/sap/fe/core/messagebundle_cs.properties +41 -4
- package/src/sap/fe/core/messagebundle_cy.properties +40 -3
- package/src/sap/fe/core/messagebundle_da.properties +40 -3
- package/src/sap/fe/core/messagebundle_de.properties +40 -3
- package/src/sap/fe/core/messagebundle_el.properties +40 -3
- package/src/sap/fe/core/messagebundle_en.properties +37 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +37 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +37 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +46 -2
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -0
- package/src/sap/fe/core/messagebundle_es.properties +40 -3
- package/src/sap/fe/core/messagebundle_es_MX.properties +41 -4
- package/src/sap/fe/core/messagebundle_et.properties +40 -3
- package/src/sap/fe/core/messagebundle_fi.properties +40 -3
- package/src/sap/fe/core/messagebundle_fr.properties +41 -4
- package/src/sap/fe/core/messagebundle_fr_CA.properties +40 -3
- package/src/sap/fe/core/messagebundle_hi.properties +40 -3
- package/src/sap/fe/core/messagebundle_hr.properties +40 -3
- package/src/sap/fe/core/messagebundle_hu.properties +41 -4
- package/src/sap/fe/core/messagebundle_id.properties +42 -5
- package/src/sap/fe/core/messagebundle_it.properties +40 -3
- package/src/sap/fe/core/messagebundle_iw.properties +40 -3
- package/src/sap/fe/core/messagebundle_ja.properties +49 -12
- package/src/sap/fe/core/messagebundle_kk.properties +40 -3
- package/src/sap/fe/core/messagebundle_ko.properties +40 -3
- package/src/sap/fe/core/messagebundle_lt.properties +40 -3
- package/src/sap/fe/core/messagebundle_lv.properties +40 -3
- package/src/sap/fe/core/messagebundle_ms.properties +40 -3
- package/src/sap/fe/core/messagebundle_nl.properties +40 -3
- package/src/sap/fe/core/messagebundle_no.properties +40 -3
- package/src/sap/fe/core/messagebundle_pl.properties +40 -3
- package/src/sap/fe/core/messagebundle_pt.properties +42 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +40 -3
- package/src/sap/fe/core/messagebundle_ro.properties +40 -3
- package/src/sap/fe/core/messagebundle_ru.properties +40 -3
- package/src/sap/fe/core/messagebundle_sh.properties +40 -3
- package/src/sap/fe/core/messagebundle_sk.properties +40 -3
- package/src/sap/fe/core/messagebundle_sl.properties +40 -3
- package/src/sap/fe/core/messagebundle_sv.properties +41 -4
- package/src/sap/fe/core/messagebundle_th.properties +40 -3
- package/src/sap/fe/core/messagebundle_tr.properties +40 -3
- package/src/sap/fe/core/messagebundle_uk.properties +40 -3
- package/src/sap/fe/core/messagebundle_vi.properties +40 -3
- package/src/sap/fe/core/messagebundle_zh_CN.properties +40 -3
- package/src/sap/fe/core/messagebundle_zh_TW.properties +40 -3
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +98 -328
- package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +30 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +8 -5
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +11 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +14 -5
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -37
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +13 -33
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/EntitySetHelper.js +86 -3
- package/src/sap/fe/core/templating/EntitySetHelper.ts +44 -0
- package/src/sap/fe/core/templating/FilterHelper.js +10 -7
- package/src/sap/fe/core/templating/FilterHelper.ts +8 -6
- package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
- package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +47 -107
- package/src/sap/fe/core/templating/UIFormatters.ts +76 -72
|
@@ -111,7 +111,7 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
|
|
|
111
111
|
var visualFilter = {};
|
|
112
112
|
var oVisualFilter = FilterFields[sPropertyPath];
|
|
113
113
|
|
|
114
|
-
if (oVisualFilter
|
|
114
|
+
if (oVisualFilter !== null && oVisualFilter !== void 0 && (_oVisualFilter$visual = oVisualFilter.visualFilter) !== null && _oVisualFilter$visual !== void 0 && _oVisualFilter$visual.valueList) {
|
|
115
115
|
var _oVisualFilter$visual2, _property$annotations;
|
|
116
116
|
|
|
117
117
|
var oVFPath = oVisualFilter === null || oVisualFilter === void 0 ? void 0 : (_oVisualFilter$visual2 = oVisualFilter.visualFilter) === null || _oVisualFilter$visual2 === void 0 ? void 0 : _oVisualFilter$visual2.valueList;
|
|
@@ -361,4 +361,4 @@ sap.ui.define(["sap/fe/core/templating/FilterTemplating", "sap/fe/core/helpers/B
|
|
|
361
361
|
_exports.getVisualFilters = getVisualFilters;
|
|
362
362
|
return _exports;
|
|
363
363
|
}, false);
|
|
364
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwibmFtZXMiOlsiX2NoZWNrVkZBZ2dyZWdhdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJ2YWx1ZSIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJzb21lIiwiY3VzdEFnZyIsInF1YWxpZmllciIsImFBZ2dyZWdhdGlvbnMiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImxlbmd0aCIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImdyb3VwYWJsZVByb3AiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiZW50aXR5VHlwZSIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJ2aXN1YWxGaWx0ZXIiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJjb2xsZWN0aW9uUGF0aCIsIkNvbGxlY3Rpb25QYXRoIiwiY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInBhcmFtZXRlckVudGl0eVR5cGUiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwia2V5cyIsIm1hcCIsImtleSIsImdldENvbnRleHRQYXRoIiwiZm9yRWFjaCIsInBhcmFtZXRlciIsInB1c2giLCJsb2NhbERhdGFQcm9wZXJ0eSIsInZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0UGFyYW0iLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUJpbmRpbmciLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwidmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJFcnJvciIsInB2UXVhbGlmaWVyIiwiUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciIsInN2UXVhbGlmaWVyIiwiU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllciIsInB2QW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsImJJc1JhbmdlIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwic0VudGl0eVNldCIsInNOYXZpZ2F0aW9uUHJvcGVydHkiLCJvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsImZpbmQiLCJyZXN0cmljdGVkTmF2UHJvcCIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsInR5cGUiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5kZXhPZiIsInNEaW1lbnNpb25UeXBlIiwiQ2hhcnRUeXBlIiwicmVuZGVyTGluZUNoYXJ0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIlZBTFVFTElTVCIsIk1hbmlmZXN0IiwiT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLG1CQUFtQixHQUFHLFVBQzNCQyxnQkFEMkIsRUFFM0JDLGVBRjJCLEVBRzNCQyxpQkFIMkIsRUFJTDtBQUFBOztBQUN0QixRQUFJQyxZQUFKLEVBQWtCQyxVQUFsQixFQUE4QkMsYUFBOUI7QUFDQSxRQUFNQyxRQUFnQixHQUFHTCxlQUFILGFBQUdBLGVBQUgsZ0RBQUdBLGVBQWUsQ0FBRU0sT0FBcEIsb0ZBQUcsc0JBQTBCQyxRQUExQixDQUFtQyxDQUFuQyxDQUFILDJEQUFHLHVCQUF1Q0MsS0FBaEU7QUFDQSxRQUFNQyxVQUFrQixHQUFHVCxlQUFILGFBQUdBLGVBQUgsaURBQUdBLGVBQWUsQ0FBRU0sT0FBcEIscUZBQUcsdUJBQTBCSSxVQUExQixDQUFxQyxDQUFyQyxDQUFILDJEQUFHLHVCQUF5Q0YsS0FBcEU7QUFDQSxRQUFNRyxnQkFBZ0IsR0FBR1YsaUJBQWlCLENBQUNXLDZCQUFsQixFQUF6QjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHWixpQkFBaUIsQ0FBQ2Esb0JBQWxCLEVBQTNCOztBQUVBLFFBQ0NILGdCQUFnQixDQUFDSSxJQUFqQixDQUFzQixVQUFTQyxPQUFULEVBQW1EO0FBQ3hFLGFBQU9BLE9BQU8sQ0FBQ0MsU0FBUixLQUFzQlosUUFBN0I7QUFDQSxLQUZELENBREQsRUFJRTtBQUNESCxNQUFBQSxZQUFZLEdBQUdHLFFBQWY7QUFDQSxLQU5ELE1BTU8sSUFBSVEsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDLENBQUQsQ0FBNUMsRUFBaUQ7QUFD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RXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDQyxLQUYzRjtBQUdBO0FBQ0QsU0FsSUQsTUFrSU87QUFDTjdKLFVBQUFBLGdCQUFnQixDQUNkcUosY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsSUFGbkQsRUFFeURDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NFLG1CQUYzRjtBQUdBO0FBQ0QsT0EvTkQsTUErTk87QUFDTjlKLFFBQUFBLGdCQUFnQixDQUNkcUosY0FERixHQUVFQyxRQUZGLENBRVdDLGFBQWEsQ0FBQ0MsVUFGekIsRUFFcUNDLGFBQWEsQ0FBQ0MsSUFGbkQsRUFFeURDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NHLFNBRjNGO0FBR0E7QUFDRCxLQTFPRCxNQTBPTztBQUNOL0osTUFBQUEsZ0JBQWdCLENBQUNxSixjQUFqQixHQUFrQ0MsUUFBbEMsQ0FBMkNDLGFBQWEsQ0FBQ1MsUUFBekQsRUFBbUVQLGFBQWEsQ0FBQ0MsSUFBakYsRUFBdUZDLFNBQVMsQ0FBQ0MsdUJBQVYsQ0FBa0NHLFNBQXpIO0FBQ0E7O0FBQ0QsUUFBSUUsTUFBTSxDQUFDbEcsSUFBUCxDQUFZNUIsWUFBWixFQUEwQlIsTUFBMUIsR0FBbUMsQ0FBdkMsRUFBMEM7QUFDekMsYUFBT1EsWUFBUDtBQUNBO0FBQ0QiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBpc1Byb3BlcnR5RmlsdGVyYWJsZSwgZ2V0SXNSZXF1aXJlZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpbHRlclRlbXBsYXRpbmdcIjtcbmltcG9ydCB7IGNvbXBpbGVCaW5kaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgSXNzdWVUeXBlLCBJc3N1ZVNldmVyaXR5LCBJc3N1ZUNhdGVnb3J5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ2FwYWJpbGl0aWVzXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uVGVybSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQWdncmVnYXRlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0FnZ3JlZ2F0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFZpc3VhbEZpbHRlcnMgPSB7XG5cdGRpbWVuc2lvblBhdGg/OiBzdHJpbmc7XG5cdG1lYXN1cmVQYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Y2hhcnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRwcmVzZW50YXRpb25Bbm5vdGF0aW9uPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogYm9vbGVhbjtcblx0b3V0UGFyYW1ldGVyPzogc3RyaW5nO1xuXHRpblBhcmFtZXRlcnM/OiBvYmplY3RbXTtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uPzogc3RyaW5nO1xuXHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQ/OiBib29sZWFuO1xuXHRyZXF1aXJlZD86IGJvb2xlYW47XG5cdHNob3dPdmVybGF5SW5pdGlhbGx5PzogYm9vbGVhbjtcblx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbjtcblx0cmVxdWlyZWRQcm9wZXJ0aWVzPzogb2JqZWN0W107XG59O1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IG1lYXN1cmVzIGFuZCBkaW1lbnNpb25zIG9mIHRoZSB2aXN1YWwgZmlsdGVyIGNoYXJ0IGNhbiBiZSBhZ2dyZWdhdGVkIGFuZCBncm91cGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2hhcnRBbm5vdGF0aW9uIFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gYWdncmVnYXRpb25IZWxwZXIgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWQgfVxuICovXG5jb25zdCBfY2hlY2tWRkFnZ3JlZ2F0aW9uID0gZnVuY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGNoYXJ0QW5ub3RhdGlvbjogYW55LFxuXHRhZ2dyZWdhdGlvbkhlbHBlcjogYW55XG4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0bGV0IHNNZWFzdXJlUGF0aCwgYkdyb3VwYWJsZSwgYkFnZ3JlZ2F0YWJsZTtcblx0Y29uc3Qgc01lYXN1cmU6IHN0cmluZyA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uTWVhc3VyZXNbMF0/LnZhbHVlO1xuXHRjb25zdCBzRGltZW5zaW9uOiBzdHJpbmcgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LnZhbHVlO1xuXHRjb25zdCBjdXN0b21BZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblxuXHRpZiAoXG5cdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uKGN1c3RBZ2c6IEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT4pIHtcblx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gc01lYXN1cmU7XG5cdFx0fSlcblx0KSB7XG5cdFx0c01lYXN1cmVQYXRoID0gc01lYXN1cmU7XG5cdH0gZWxzZSBpZiAoYVRyYW5zQWdncmVnYXRpb25zICYmIGFUcmFuc0FnZ3JlZ2F0aW9uc1swXSkge1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGlvbnMgPSBhVHJhbnNBZ2dyZWdhdGlvbnNbMF07XG5cdFx0YUFnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uKG9BZ2dyZWdhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9BZ2dyZWdhdGUuTmFtZSA9PT0gc01lYXN1cmUpIHtcblx0XHRcdFx0c01lYXN1cmVQYXRoID0gb0FnZ3JlZ2F0ZT8uQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0Y29uc3QgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKTtcblx0Y29uc3QgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEdyb3VwYWJsZVByb3BlcnRpZXMoKTtcblx0aWYgKGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3Agb2YgYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGFnZ3JlZ2F0YWJsZVByb3A/LlByb3BlcnR5Py52YWx1ZSA9PT0gc01lYXN1cmVQYXRoKSB7XG5cdFx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAoYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lciAmJiBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyLmxlbmd0aCkge1xuXHRcdGZvciAoY29uc3QgZ3JvdXBhYmxlUHJvcCBvZiBhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyKSB7XG5cdFx0XHRpZiAoZ3JvdXBhYmxlUHJvcD8udmFsdWUgPT09IHNEaW1lbnNpb24pIHtcblx0XHRcdFx0Ykdyb3VwYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBiQWdncmVnYXRhYmxlICYmIGJHcm91cGFibGU7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIHZpc3VhbCBmaWx0ZXJzIG9iamVjdCBmb3IgYSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNoYXJ0IGFubm90YXRpb25cbiAqIEBwYXJhbSBzUHJvcGVydHlQYXRoIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEBwYXJhbSBGaWx0ZXJGaWVsZHMgVGhlIGFnZ3JlZ2F0aW9uIGhlbHBlclxuICogQHJldHVybnMge1Zpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQgfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlzdWFsRmlsdGVycyhcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0c1Byb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPlxuKTogVmlzdWFsRmlsdGVycyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHZpc3VhbEZpbHRlcjogVmlzdWFsRmlsdGVycyA9IHt9O1xuXHRjb25zdCBvVmlzdWFsRmlsdGVyOiBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbiA9IEZpbHRlckZpZWxkc1tzUHJvcGVydHlQYXRoXTtcblx0aWYgKG9WaXN1YWxGaWx0ZXIgJiYgb1Zpc3VhbEZpbHRlcj8udmlzdWFsRmlsdGVyICYmIG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0KSB7XG5cdFx0Y29uc3Qgb1ZGUGF0aCA9IG9WaXN1YWxGaWx0ZXI/LnZpc3VhbEZpbHRlcj8udmFsdWVMaXN0O1xuXHRcdGNvbnN0IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdCA9IG9WRlBhdGguc3BsaXQoXCIjXCIpO1xuXHRcdGNvbnN0IHF1YWxpZmllclZMID0gYW5ub3RhdGlvblF1YWxpZmllclNwbGl0Lmxlbmd0aCA+IDEgPyBcIlZhbHVlTGlzdCNcIiArIGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFsxXSA6IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdFswXTtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgoc1Byb3BlcnR5UGF0aCk7XG5cdFx0Y29uc3QgdmFsdWVMaXN0OiBhbnkgPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbltxdWFsaWZpZXJWTF07XG5cdFx0aWYgKHZhbHVlTGlzdCkge1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvblBhdGggPSB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoO1xuXHRcdFx0bGV0IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XCIvXCIgKyAoY29sbGVjdGlvblBhdGggfHwgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8ubmFtZSlcblx0XHRcdCk7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbXMgPSB2YWx1ZUxpc3Q/LlBhcmFtZXRlcnM7XG5cdFx0XHRsZXQgb3V0UGFyYW1ldGVyOiBhbnk7XG5cdFx0XHRjb25zdCBpblBhcmFtZXRlcnM6IEFycmF5PG9iamVjdD4gPSBbXTtcblx0XHRcdGxldCBhUGFyYW1ldGVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXHRcdFx0aWYgKCFjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihcIlwiKTtcblx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSgpO1xuXHRcdFx0YVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJFbnRpdHlUeXBlXG5cdFx0XHRcdD8gcGFyYW1ldGVyRW50aXR5VHlwZS5rZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBrZXkubmFtZTtcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IFtdO1xuXHRcdFx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKSA9PT0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIHtcblx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbWV0ZXI6IGFueSkge1xuXHRcdFx0XHRcdGluUGFyYW1ldGVycy5wdXNoKHtcblx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogcGFyYW1ldGVyXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHZhbHVlTGlzdFBhcmFtIG9mIHZhbHVlTGlzdFBhcmFtcykge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsRGF0YVByb3BlcnR5ID0gKHZhbHVlTGlzdFBhcmFtIGFzIGFueSkuTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdFByb3BlcnR5ID0gKHZhbHVlTGlzdFBhcmFtIGFzIGFueSkuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5UGF0aCA9PT0gbG9jYWxEYXRhUHJvcGVydHlcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG91dFBhcmFtZXRlciA9IHZhbHVlTGlzdFBhcmFtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQodmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJJbk91dFwiIHx8XG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5cIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggIT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBiTm90RmlsdGVyYWJsZSA9IGlzUHJvcGVydHlGaWx0ZXJhYmxlKGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCwgdmFsdWVMaXN0UHJvcGVydHkpO1xuXHRcdFx0XHRcdFx0aWYgKCFiTm90RmlsdGVyYWJsZSkge1xuXHRcdFx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxEYXRhUHJvcGVydHk6IGxvY2FsRGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlTGlzdFByb3BlcnR5OiB2YWx1ZUxpc3RQcm9wZXJ0eVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChpblBhcmFtZXRlcnMgJiYgaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRpblBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihvSW5QYXJhbWV0ZXI6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8ubG9jYWxEYXRhUHJvcGVydHkpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RFbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Y2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKG9JblBhcmFtZXRlcj8udmFsdWVMaXN0UHJvcGVydHkpXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAodmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwidHJ1ZVwiICYmIG1haW5FbnRpdHlTZXRJbk1hcHBpbmdBbGxvd2VkRXhwcmVzc2lvbiA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdFwiRmlsdGVyUmVzdHJpY3Rpb25zIG9mIFwiICsgc1Byb3BlcnR5UGF0aCArIFwiIGluIE1haW5FbnRpdHlTZXQgYW5kIFZhbHVlTGlzdEVudGl0eVNldCBhcmUgZGlmZmVyZW50XCJcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHB2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5QcmVzZW50YXRpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3Qgc3ZRdWFsaWZpZXIgPSB2YWx1ZUxpc3Q/LlNlbGVjdGlvblZhcmlhbnRRdWFsaWZpZXI7XG5cdFx0XHRjb25zdCBwdkFubm90YXRpb246IGFueSA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAVUkuUHJlc2VudGF0aW9uVmFyaWFudCNcIiArIHB2UXVhbGlmaWVyKVxuXHRcdFx0XHQ/LmFubm90YXRpb247XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkhlbHBlci5pc0FuYWx5dGljc1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwdkFubm90YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYVZpc3VhbGl6YXRpb25zID0gcHZBbm5vdGF0aW9uPy5WaXN1YWxpemF0aW9ucztcblx0XHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBcIi9cIiArIHZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGggfHwgXCIvXCIgKyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVNldCgpPy5uYW1lO1xuXHRcdFx0XHR2aXN1YWxGaWx0ZXIuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aDtcblx0XHRcdFx0bGV0IGNoYXJ0QW5ub3RhdGlvbjtcblx0XHRcdFx0Zm9yIChjb25zdCB2aXN1YWxpemF0aW9uIG9mIGFWaXN1YWxpemF0aW9ucykge1xuXHRcdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLiR0YXJnZXQ/LnRlcm0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIikge1xuXHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY2hhcnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3QgX2JnZXRWRkFnZ3JlZ2F0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gX2NoZWNrVkZBZ2dyZWdhdGlvbihcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uSGVscGVyXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIV9iZ2V0VkZBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGNvbnN0IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXI6IGJvb2xlYW4gPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/LkRpbWVuc2lvbnNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0XHRcdFx0aWYgKGJEaW1lbnNpb25IaWRkZW4gPT09IHRydWUgfHwgYkRpbWVuc2lvbkhpZGRlbkZpbHRlciA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoYVZpc3VhbGl6YXRpb25zICYmIGFWaXN1YWxpemF0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5jaGFydEFubm90YXRpb24gPSBjaGFydEFubm90YXRpb25cblx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lICsgXCIvJEFubm90YXRpb25QYXRoL1wiXG5cdFx0XHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5wcmVzZW50YXRpb25Bbm5vdGF0aW9uID0gcHZBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHB2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIilcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIub3V0UGFyYW1ldGVyID0gb3V0UGFyYW1ldGVyPy5Mb2NhbERhdGFQcm9wZXJ0eT8udmFsdWU7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzID0gaW5QYXJhbWV0ZXJzO1xuXHRcdFx0XHRcdFx0Y29uc3QgYklzUmFuZ2UgPSBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMoXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc1Byb3BlcnR5UGF0aCkpXG5cdFx0XHRcdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRcdFx0XHRcdFx0W1wiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRpZiAoY29tcGlsZUJpbmRpbmcoYklzUmFuZ2UpID09PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJSYW5nZSBBbGxvd2VkRXhwcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciB2aXN1YWwgZmlsdGVyc1wiKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbjogYW55ID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVZhbHVlXCJdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCA9IGNvbXBpbGVCaW5kaW5nKCFiSXNNYWluRW50aXR5U2V0U2luZ2xlU2VsZWN0aW9uLnZhbHVlKSBhcyBhbnk7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucmVxdWlyZWQgPSBnZXRJc1JlcXVpcmVkKGNvbnZlcnRlckNvbnRleHQsIHNQcm9wZXJ0eVBhdGgpO1xuXHRcdFx0XHRcdFx0bGV0IHN2QW5ub3RhdGlvbjogYW55O1xuXHRcdFx0XHRcdFx0aWYgKHN2UXVhbGlmaWVyKSB7XG5cdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbiA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAVUkuU2VsZWN0aW9uVmFyaWFudCNcIiArIHN2UXVhbGlmaWVyKVxuXHRcdFx0XHRcdFx0XHRcdD8uYW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uID0gc3ZBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0PyBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoc3ZBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiL1wiKVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydGllcyA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVswXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc05hdmlnYXRpb25Qcm9wZXJ0eSA9IGNvbGxlY3Rpb25QYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXCIvXCIgKyBzRW50aXR5U2V0KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb0VudGl0eVNldENvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS5zdGFydGluZ0VudGl0eVNldFxuXHRcdFx0XHRcdFx0XHRcdD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucz8uUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SZXN0cmljdGVkUHJvcGVydHkgPSBhUmVzdHJpY3RlZFByb3BlcnRpZXM/LmZpbmQoXG5cdFx0XHRcdFx0XHRcdFx0KHJlc3RyaWN0ZWROYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5Py50eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdHJpY3RlZE5hdlByb3AuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblByb3BlcnR5O1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0aWVzID0gb1Jlc3RyaWN0ZWRQcm9wZXJ0eT8uRmlsdGVyUmVzdHJpY3Rpb25zPy5SZXF1aXJlZFByb3BlcnRpZXMgYXMgYW55W107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IGVudGl0eVNldEFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bGV0IHJlcXVpcmVkUHJvcGVydHlQYXRoczogQXJyYXk8b2JqZWN0PiA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKHJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKG9SZXF1aXJlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocy5wdXNoKG9SZXF1aXJlUHJvcGVydHkudmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydHlQYXRocyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5jb25jYXQoYVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcyA9IHJlcXVpcmVkUHJvcGVydHlQYXRocztcblx0XHRcdFx0XHRcdGlmICh2aXN1YWxGaWx0ZXIucmVxdWlyZWRQcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0aWYgKCF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzIHx8ICF2aXN1YWxGaWx0ZXIuaW5QYXJhbWV0ZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc2VsZWN0T3B0aW9ucyA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2QW5ub3RhdGlvbj8uU2VsZWN0T3B0aW9ucz8ubWFwKChvU2VsZWN0T3B0aW9uOiBhbnkpID0+IG9TZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLnZhbHVlKSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHBhcmFtZXRlck9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlBhcmFtZXRlcnM/Lm1hcCgob1BhcmFtZXRlck9wdGlvbjogYW55KSA9PiBvUGFyYW1ldGVyT3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RPcHRpb25zID0gc2VsZWN0T3B0aW9ucy5jb25jYXQocGFyYW1ldGVyT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuc29ydCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvbWUoZnVuY3Rpb24oc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlbGVjdE9wdGlvbnMuaW5kZXhPZihzUGF0aCkgPT09IC0xO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQhKFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0c0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIlxuXHRcdFx0XHRcdFx0XHQpICYmXG5cdFx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbi4kdGFyZ2V0LkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlbmRlckxpbmVDaGFydCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5DSEFSVCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlBSRVNFTlRBVElPTlZBUklBTlQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgSXNzdWVUeXBlLk1BTEZPUk1FRF9WSVNVQUxGSUxURVJTLlZBTFVFTElTVCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5Lk1hbmlmZXN0LCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHR9XG5cdGlmIChPYmplY3Qua2V5cyh2aXN1YWxGaWx0ZXIpLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gdmlzdWFsRmlsdGVyO1xuXHR9XG59XG4iXX0=
|
|
364
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlcnMudHMiXSwibmFtZXMiOlsiX2NoZWNrVkZBZ2dyZWdhdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbkhlbHBlciIsInNNZWFzdXJlUGF0aCIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwic01lYXN1cmUiLCIkdGFyZ2V0IiwiTWVhc3VyZXMiLCJ2YWx1ZSIsInNEaW1lbnNpb24iLCJEaW1lbnNpb25zIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJzb21lIiwiY3VzdEFnZyIsInF1YWxpZmllciIsImFBZ2dyZWdhdGlvbnMiLCJvQWdncmVnYXRlIiwiTmFtZSIsIkFnZ3JlZ2F0YWJsZVByb3BlcnR5IiwiYUFnZ3JlZ2F0YWJsZVByb3BzRnJvbUNvbnRhaW5lciIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhR3JvdXBhYmxlUHJvcHNGcm9tQ29udGFpbmVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImxlbmd0aCIsImFnZ3JlZ2F0YWJsZVByb3AiLCJQcm9wZXJ0eSIsImdyb3VwYWJsZVByb3AiLCJnZXRWaXN1YWxGaWx0ZXJzIiwiZW50aXR5VHlwZSIsInNQcm9wZXJ0eVBhdGgiLCJGaWx0ZXJGaWVsZHMiLCJ2aXN1YWxGaWx0ZXIiLCJvVmlzdWFsRmlsdGVyIiwidmFsdWVMaXN0Iiwib1ZGUGF0aCIsImFubm90YXRpb25RdWFsaWZpZXJTcGxpdCIsInNwbGl0IiwicXVhbGlmaWVyVkwiLCJwcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJjb2xsZWN0aW9uUGF0aCIsIkNvbGxlY3Rpb25QYXRoIiwiY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEVudGl0eVNldCIsIm5hbWUiLCJ2YWx1ZUxpc3RQYXJhbXMiLCJQYXJhbWV0ZXJzIiwib3V0UGFyYW1ldGVyIiwiaW5QYXJhbWV0ZXJzIiwiYVBhcmFtZXRlcnMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInBhcmFtZXRlckVudGl0eVR5cGUiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwia2V5cyIsIm1hcCIsImtleSIsImdldENvbnRleHRQYXRoIiwiZm9yRWFjaCIsInBhcmFtZXRlciIsInB1c2giLCJsb2NhbERhdGFQcm9wZXJ0eSIsInZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0UGFyYW0iLCJMb2NhbERhdGFQcm9wZXJ0eSIsIlZhbHVlTGlzdFByb3BlcnR5IiwiJFR5cGUiLCJiTm90RmlsdGVyYWJsZSIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwib0luUGFyYW1ldGVyIiwibWFpbkVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uIiwiY29tcGlsZUJpbmRpbmciLCJjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwidmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24iLCJFcnJvciIsInB2UXVhbGlmaWVyIiwiUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllciIsInN2UXVhbGlmaWVyIiwiU2VsZWN0aW9uVmFyaWFudFF1YWxpZmllciIsInB2QW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImFWaXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiY29udGV4dFBhdGgiLCJ2aXN1YWxpemF0aW9uIiwidGVybSIsIl9iZ2V0VkZBZ2dyZWdhdGlvbiIsImJEaW1lbnNpb25IaWRkZW4iLCJVSSIsIkhpZGRlbiIsInZhbHVlT2YiLCJiRGltZW5zaW9uSGlkZGVuRmlsdGVyIiwiSGlkZGVuRmlsdGVyIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidW5kZWZpbmVkIiwicHJlc2VudGF0aW9uQW5ub3RhdGlvbiIsImJJc1JhbmdlIiwiYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbiIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInJlcXVpcmVkIiwiZ2V0SXNSZXF1aXJlZCIsInN2QW5ub3RhdGlvbiIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwic0VudGl0eVNldCIsInNOYXZpZ2F0aW9uUHJvcGVydHkiLCJvRW50aXR5U2V0Q29udmVydGVyQ29udGV4dCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsInN0YXJ0aW5nRW50aXR5U2V0IiwiQ2FwYWJpbGl0aWVzIiwiTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwib1Jlc3RyaWN0ZWRQcm9wZXJ0eSIsImZpbmQiLCJyZXN0cmljdGVkTmF2UHJvcCIsIk5hdmlnYXRpb25Qcm9wZXJ0eSIsInR5cGUiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJlbnRpdHlTZXRBbm5vdGF0aW9ucyIsInJlcXVpcmVkUHJvcGVydHlQYXRocyIsIm9SZXF1aXJlUHJvcGVydHkiLCJjb25jYXQiLCJzaG93T3ZlcmxheUluaXRpYWxseSIsInNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwib1NlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsInBhcmFtZXRlck9wdGlvbnMiLCJvUGFyYW1ldGVyT3B0aW9uIiwic29ydCIsInNQYXRoIiwiaW5kZXhPZiIsInNEaW1lbnNpb25UeXBlIiwiQ2hhcnRUeXBlIiwicmVuZGVyTGluZUNoYXJ0IiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZVR5cGUiLCJNQUxGT1JNRURfVklTVUFMRklMVEVSUyIsIkNIQVJUIiwiUFJFU0VOVEFUSU9OVkFSSUFOVCIsIlZBTFVFTElTVCIsIk1hbmlmZXN0IiwiT2JqZWN0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLG1CQUFtQixHQUFHLFVBQzNCQyxnQkFEMkIsRUFFM0JDLGVBRjJCLEVBRzNCQyxpQkFIMkIsRUFJTDtBQUFBOztBQUN0QixRQUFJQyxZQUFKLEVBQWtCQyxVQUFsQixFQUE4QkMsYUFBOUI7QUFDQSxRQUFNQyxRQUFnQixHQUFHTCxlQUFILGFBQUdBLGVBQUgsZ0RBQUdBLGVBQWUsQ0FBRU0sT0FBcEIsb0ZBQUcsc0JBQTBCQyxRQUExQixDQUFtQyxDQUFuQyxDQUFILDJEQUFHLHVCQUF1Q0MsS0FBaEU7QUFDQSxRQUFNQyxVQUFrQixHQUFHVCxlQUFILGFBQUdBLGVBQUgsaURBQUdBLGVBQWUsQ0FBRU0sT0FBcEIscUZBQUcsdUJBQTBCSSxVQUExQixDQUFxQyxDQUFyQyxDQUFILDJEQUFHLHVCQUF5Q0YsS0FBcEU7QUFDQSxRQUFNRyxnQkFBZ0IsR0FBR1YsaUJBQWlCLENBQUNXLDZCQUFsQixFQUF6QjtBQUNBLFFBQU1DLGtCQUFrQixHQUFHWixpQkFBaUIsQ0FBQ2Esb0JBQWxCLEVBQTNCOztBQUVBLFFBQ0NILGdCQUFnQixDQUFDSSxJQUFqQixDQUFzQixVQUFTQyxPQUFULEVBQW1EO0FBQ3hFLGFBQU9BLE9BQU8sQ0FBQ0MsU0FBUixLQUFzQlosUUFBN0I7QUFDQSxLQUZELENBREQsRUFJRTtBQUNESCxNQUFBQSxZQUFZLEdBQUdHLFFBQWY7QUFDQSxLQU5ELE1BTU8sSUFBSVEsa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDLENBQUQsQ0FBNUMsRUFBaUQ7QUFD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SixVQUFBQSxnQkFBZ0IsQ0FDZHFKLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLElBRm5ELEVBRXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRSxtQkFGM0Y7QUFHQTtBQUNELE9BL05ELE1BK05PO0FBQ045SixRQUFBQSxnQkFBZ0IsQ0FDZHFKLGNBREYsR0FFRUMsUUFGRixDQUVXQyxhQUFhLENBQUNDLFVBRnpCLEVBRXFDQyxhQUFhLENBQUNDLElBRm5ELEVBRXlEQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRyxTQUYzRjtBQUdBO0FBQ0QsS0ExT0QsTUEwT087QUFDTi9KLE1BQUFBLGdCQUFnQixDQUFDcUosY0FBakIsR0FBa0NDLFFBQWxDLENBQTJDQyxhQUFhLENBQUNTLFFBQXpELEVBQW1FUCxhQUFhLENBQUNDLElBQWpGLEVBQXVGQyxTQUFTLENBQUNDLHVCQUFWLENBQWtDRyxTQUF6SDtBQUNBOztBQUNELFFBQUlFLE1BQU0sQ0FBQ2xHLElBQVAsQ0FBWTVCLFlBQVosRUFBMEJSLE1BQTFCLEdBQW1DLENBQXZDLEVBQTBDO0FBQ3pDLGFBQU9RLFlBQVA7QUFDQTtBQUNEIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eUZpbHRlcmFibGUsIGdldElzUmVxdWlyZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWx0ZXJUZW1wbGF0aW5nXCI7XG5pbXBvcnQgeyBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBjaGVja0ZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IElzc3VlVHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVDYXRlZ29yeSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUHJvcGVydHlSZXN0cmljdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvblRlcm0gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9BZ2dyZWdhdGlvblwiO1xuXG5leHBvcnQgdHlwZSBWaXN1YWxGaWx0ZXJzID0ge1xuXHRkaW1lbnNpb25QYXRoPzogc3RyaW5nO1xuXHRtZWFzdXJlUGF0aD86IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdGNoYXJ0QW5ub3RhdGlvbj86IHN0cmluZztcblx0cHJlc2VudGF0aW9uQW5ub3RhdGlvbj86IHN0cmluZztcblx0dmlzaWJsZT86IGJvb2xlYW47XG5cdG91dFBhcmFtZXRlcj86IHN0cmluZztcblx0aW5QYXJhbWV0ZXJzPzogb2JqZWN0W107XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblx0bXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRzaG93T3ZlcmxheUluaXRpYWxseT86IGJvb2xlYW47XG5cdHJlbmRlckxpbmVDaGFydD86IGJvb2xlYW47XG5cdHJlcXVpcmVkUHJvcGVydGllcz86IG9iamVjdFtdO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBtZWFzdXJlcyBhbmQgZGltZW5zaW9ucyBvZiB0aGUgdmlzdWFsIGZpbHRlciBjaGFydCBjYW4gYmUgYWdncmVnYXRlZCBhbmQgZ3JvdXBlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uSGVscGVyIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkIH1cbiAqL1xuY29uc3QgX2NoZWNrVkZBZ2dyZWdhdGlvbiA9IGZ1bmN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRjaGFydEFubm90YXRpb246IGFueSxcblx0YWdncmVnYXRpb25IZWxwZXI6IGFueVxuKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdGxldCBzTWVhc3VyZVBhdGgsIGJHcm91cGFibGUsIGJBZ2dyZWdhdGFibGU7XG5cdGNvbnN0IHNNZWFzdXJlOiBzdHJpbmcgPSBjaGFydEFubm90YXRpb24/LiR0YXJnZXQ/Lk1lYXN1cmVzWzBdPy52YWx1ZTtcblx0Y29uc3Qgc0RpbWVuc2lvbjogc3RyaW5nID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy52YWx1ZTtcblx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdGNvbnN0IGFUcmFuc0FnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldFRyYW5zQWdncmVnYXRpb25zKCk7XG5cblx0aWYgKFxuXHRcdGN1c3RvbUFnZ3JlZ2F0ZXMuc29tZShmdW5jdGlvbihjdXN0QWdnOiBBbm5vdGF0aW9uVGVybTxDdXN0b21BZ2dyZWdhdGU+KSB7XG5cdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IHNNZWFzdXJlO1xuXHRcdH0pXG5cdCkge1xuXHRcdHNNZWFzdXJlUGF0aCA9IHNNZWFzdXJlO1xuXHR9IGVsc2UgaWYgKGFUcmFuc0FnZ3JlZ2F0aW9ucyAmJiBhVHJhbnNBZ2dyZWdhdGlvbnNbMF0pIHtcblx0XHRjb25zdCBhQWdncmVnYXRpb25zID0gYVRyYW5zQWdncmVnYXRpb25zWzBdO1xuXHRcdGFBZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbihvQWdncmVnYXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQWdncmVnYXRlLk5hbWUgPT09IHNNZWFzdXJlKSB7XG5cdFx0XHRcdHNNZWFzdXJlUGF0aCA9IG9BZ2dyZWdhdGU/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5LnZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGlmIChhQWdncmVnYXRhYmxlUHJvcHNGcm9tQ29udGFpbmVyICYmIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIubGVuZ3RoKSB7XG5cdFx0Zm9yIChjb25zdCBhZ2dyZWdhdGFibGVQcm9wIG9mIGFBZ2dyZWdhdGFibGVQcm9wc0Zyb21Db250YWluZXIpIHtcblx0XHRcdGlmIChhZ2dyZWdhdGFibGVQcm9wPy5Qcm9wZXJ0eT8udmFsdWUgPT09IHNNZWFzdXJlUGF0aCkge1xuXHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGFHcm91cGFibGVQcm9wc0Zyb21Db250YWluZXIgJiYgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lci5sZW5ndGgpIHtcblx0XHRmb3IgKGNvbnN0IGdyb3VwYWJsZVByb3Agb2YgYUdyb3VwYWJsZVByb3BzRnJvbUNvbnRhaW5lcikge1xuXHRcdFx0aWYgKGdyb3VwYWJsZVByb3A/LnZhbHVlID09PSBzRGltZW5zaW9uKSB7XG5cdFx0XHRcdGJHcm91cGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYkFnZ3JlZ2F0YWJsZSAmJiBiR3JvdXBhYmxlO1xufTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IHRoZSB2aXN1YWwgZmlsdGVycyBvYmplY3QgZm9yIGEgcHJvcGVydHkuXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjaGFydCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gc1Byb3BlcnR5UGF0aCBUaGUgYWdncmVnYXRpb24gaGVscGVyXG4gKiBAcGFyYW0gRmlsdGVyRmllbGRzIFRoZSBhZ2dyZWdhdGlvbiBoZWxwZXJcbiAqIEByZXR1cm5zIHtWaXN1YWxGaWx0ZXJzIHwgdW5kZWZpbmVkIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpc3VhbEZpbHRlcnMoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0RmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZE1hbmlmZXN0Q29uZmlndXJhdGlvbj5cbik6IFZpc3VhbEZpbHRlcnMgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aXN1YWxGaWx0ZXI6IFZpc3VhbEZpbHRlcnMgPSB7fTtcblx0Y29uc3Qgb1Zpc3VhbEZpbHRlcjogRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBGaWx0ZXJGaWVsZHNbc1Byb3BlcnR5UGF0aF07XG5cdGlmIChvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdCkge1xuXHRcdGNvbnN0IG9WRlBhdGggPSBvVmlzdWFsRmlsdGVyPy52aXN1YWxGaWx0ZXI/LnZhbHVlTGlzdDtcblx0XHRjb25zdCBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXQgPSBvVkZQYXRoLnNwbGl0KFwiI1wiKTtcblx0XHRjb25zdCBxdWFsaWZpZXJWTCA9IGFubm90YXRpb25RdWFsaWZpZXJTcGxpdC5sZW5ndGggPiAxID8gXCJWYWx1ZUxpc3QjXCIgKyBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMV0gOiBhbm5vdGF0aW9uUXVhbGlmaWVyU3BsaXRbMF07XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IHZhbHVlTGlzdDogYW55ID0gcHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb25bcXVhbGlmaWVyVkxdO1xuXHRcdGlmICh2YWx1ZUxpc3QpIHtcblx0XHRcdGNvbnN0IGNvbGxlY3Rpb25QYXRoID0gdmFsdWVMaXN0Py5Db2xsZWN0aW9uUGF0aDtcblx0XHRcdGxldCBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFwiL1wiICsgKGNvbGxlY3Rpb25QYXRoIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/Lm5hbWUpXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgdmFsdWVMaXN0UGFyYW1zID0gdmFsdWVMaXN0Py5QYXJhbWV0ZXJzO1xuXHRcdFx0bGV0IG91dFBhcmFtZXRlcjogYW55O1xuXHRcdFx0Y29uc3QgaW5QYXJhbWV0ZXJzOiBBcnJheTxvYmplY3Q+ID0gW107XG5cdFx0XHRsZXQgYVBhcmFtZXRlcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcblx0XHRcdGlmICghY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJcIik7XG5cdFx0XHRcdGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXJFbnRpdHlUeXBlID0gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKTtcblx0XHRcdGFQYXJhbWV0ZXJzID0gcGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUua2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkgPT09IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpKSB7XG5cdFx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRpblBhcmFtZXRlcnMucHVzaCh7XG5cdFx0XHRcdFx0XHRsb2NhbERhdGFQcm9wZXJ0eTogcGFyYW1ldGVyLFxuXHRcdFx0XHRcdFx0dmFsdWVMaXN0UHJvcGVydHk6IHBhcmFtZXRlclxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZUxpc3RQYXJhbSBvZiB2YWx1ZUxpc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbERhdGFQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBhbnkpLkxvY2FsRGF0YVByb3BlcnR5Py52YWx1ZTtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3RQcm9wZXJ0eSA9ICh2YWx1ZUxpc3RQYXJhbSBhcyBhbnkpLlZhbHVlTGlzdFByb3BlcnR5O1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0UGFyYW0/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RQYXJhbWV0ZXJPdXRcIikgJiZcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eVBhdGggPT09IGxvY2FsRGF0YVByb3BlcnR5XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvdXRQYXJhbWV0ZXIgPSB2YWx1ZUxpc3RQYXJhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KHZhbHVlTGlzdFBhcmFtPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UGFyYW1ldGVySW5PdXRcIiB8fFxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbT8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluXCIpICYmXG5cdFx0XHRcdFx0XHRzUHJvcGVydHlQYXRoICE9PSBsb2NhbERhdGFQcm9wZXJ0eVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYk5vdEZpbHRlcmFibGUgPSBpc1Byb3BlcnR5RmlsdGVyYWJsZShjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsIHZhbHVlTGlzdFByb3BlcnR5KTtcblx0XHRcdFx0XHRcdGlmICghYk5vdEZpbHRlcmFibGUpIHtcblx0XHRcdFx0XHRcdFx0aW5QYXJhbWV0ZXJzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsRGF0YVByb3BlcnR5OiBsb2NhbERhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3RQcm9wZXJ0eTogdmFsdWVMaXN0UHJvcGVydHlcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoaW5QYXJhbWV0ZXJzICYmIGluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0aW5QYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ob0luUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LmxvY2FsRGF0YVByb3BlcnR5KSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0RW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChvSW5QYXJhbWV0ZXI/LnZhbHVlTGlzdFByb3BlcnR5KVxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKHZhbHVlTGlzdEVudGl0eVNldEluTWFwcGluZ0FsbG93ZWRFeHByZXNzaW9uID09PSBcInRydWVcIiAmJiBtYWluRW50aXR5U2V0SW5NYXBwaW5nQWxsb3dlZEV4cHJlc3Npb24gPT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdFx0XHRcIkZpbHRlclJlc3RyaWN0aW9ucyBvZiBcIiArIHNQcm9wZXJ0eVBhdGggKyBcIiBpbiBNYWluRW50aXR5U2V0IGFuZCBWYWx1ZUxpc3RFbnRpdHlTZXQgYXJlIGRpZmZlcmVudFwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwdlF1YWxpZmllciA9IHZhbHVlTGlzdD8uUHJlc2VudGF0aW9uVmFyaWFudFF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHN2UXVhbGlmaWVyID0gdmFsdWVMaXN0Py5TZWxlY3Rpb25WYXJpYW50UXVhbGlmaWVyO1xuXHRcdFx0Y29uc3QgcHZBbm5vdGF0aW9uOiBhbnkgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiQFVJLlByZXNlbnRhdGlvblZhcmlhbnQjXCIgKyBwdlF1YWxpZmllcilcblx0XHRcdFx0Py5hbm5vdGF0aW9uO1xuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmICghYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAocHZBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFWaXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbj8uVmlzdWFsaXphdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gXCIvXCIgKyB2YWx1ZUxpc3Q/LkNvbGxlY3Rpb25QYXRoIHx8IFwiL1wiICsgY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlTZXQoKT8ubmFtZTtcblx0XHRcdFx0dmlzdWFsRmlsdGVyLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGg7XG5cdFx0XHRcdGxldCBjaGFydEFubm90YXRpb247XG5cdFx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBhVmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi4kdGFyZ2V0Py50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpIHtcblx0XHRcdFx0XHRcdGNoYXJ0QW5ub3RhdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IF9iZ2V0VkZBZ2dyZWdhdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IF9jaGVja1ZGQWdncmVnYXRpb24oXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbkhlbHBlclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKCFfYmdldFZGQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYkRpbWVuc2lvbkhpZGRlbjogYm9vbGVhbiA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKTtcblx0XHRcdFx0XHRjb25zdCBiRGltZW5zaW9uSGlkZGVuRmlsdGVyOiBib29sZWFuID0gY2hhcnRBbm5vdGF0aW9uPy4kdGFyZ2V0Py5EaW1lbnNpb25zWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpO1xuXHRcdFx0XHRcdGlmIChiRGltZW5zaW9uSGlkZGVuID09PSB0cnVlIHx8IGJEaW1lbnNpb25IaWRkZW5GaWx0ZXIgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFWaXN1YWxpemF0aW9ucyAmJiBhVmlzdWFsaXphdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuY2hhcnRBbm5vdGF0aW9uID0gY2hhcnRBbm5vdGF0aW9uXG5cdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRcdFx0Y2hhcnRBbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSArIFwiLyRBbm5vdGF0aW9uUGF0aC9cIlxuXHRcdFx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIucHJlc2VudGF0aW9uQW5ub3RhdGlvbiA9IHB2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHQ/IGNvbGxlY3Rpb25QYXRoQ29udmVydGVyQ29udGV4dD8uZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChwdkFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lICsgXCIvXCIpXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLm91dFBhcmFtZXRlciA9IG91dFBhcmFtZXRlcj8uTG9jYWxEYXRhUHJvcGVydHk/LnZhbHVlO1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyA9IGluUGFyYW1ldGVycztcblx0XHRcdFx0XHRcdGNvbnN0IGJJc1JhbmdlID0gY2hlY2tGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zKFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LmdldENvbnZlcnRlckNvbnRleHRGb3IoY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNQcm9wZXJ0eVBhdGgpKVxuXHRcdFx0XHRcdFx0XHRcdC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0XHRcdFx0XHRcdFtcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiXVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0aWYgKGNvbXBpbGVCaW5kaW5nKGJJc1JhbmdlKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUmFuZ2UgQWxsb3dlZEV4cHJlc3Npb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgdmlzdWFsIGZpbHRlcnNcIik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnN0IGJJc01haW5FbnRpdHlTZXRTaW5nbGVTZWxlY3Rpb246IGFueSA9IGNoZWNrRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyhcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChzUHJvcGVydHlQYXRoKSlcblx0XHRcdFx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdFx0XHRcdFx0XHRbXCJTaW5nbGVWYWx1ZVwiXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQgPSBjb21waWxlQmluZGluZyghYklzTWFpbkVudGl0eVNldFNpbmdsZVNlbGVjdGlvbi52YWx1ZSkgYXMgYW55O1xuXHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnJlcXVpcmVkID0gZ2V0SXNSZXF1aXJlZChjb252ZXJ0ZXJDb250ZXh0LCBzUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0XHRcdGxldCBzdkFubm90YXRpb246IGFueTtcblx0XHRcdFx0XHRcdGlmIChzdlF1YWxpZmllcikge1xuXHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24gPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQ/LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKFwiQFVJLlNlbGVjdGlvblZhcmlhbnQjXCIgKyBzdlF1YWxpZmllcilcblx0XHRcdFx0XHRcdFx0XHQ/LmFubm90YXRpb247XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbiA9IHN2QW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0XHRcdD8gY29sbGVjdGlvblBhdGhDb252ZXJ0ZXJDb250ZXh0Py5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHN2QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgKyBcIi9cIilcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnRpZXMgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNOYXZpZ2F0aW9uUHJvcGVydHkgPSBjb2xsZWN0aW9uUGF0aC5zcGxpdChcIi9cIilbMV07XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKFwiL1wiICsgc0VudGl0eVNldCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9FbnRpdHlTZXRDb252ZXJ0ZXJDb250ZXh0Py5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuc3RhcnRpbmdFbnRpdHlTZXRcblx0XHRcdFx0XHRcdFx0XHQ/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXM/Lk5hdmlnYXRpb25SZXN0cmljdGlvbnM/LlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvUmVzdHJpY3RlZFByb3BlcnR5ID0gYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzPy5maW5kKFxuXHRcdFx0XHRcdFx0XHRcdChyZXN0cmljdGVkTmF2UHJvcDogTmF2aWdhdGlvblByb3BlcnR5UmVzdHJpY3Rpb25UeXBlcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eT8udHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3RyaWN0ZWROYXZQcm9wLk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25Qcm9wZXJ0eTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkUHJvcGVydGllcyA9IG9SZXN0cmljdGVkUHJvcGVydHk/LkZpbHRlclJlc3RyaWN0aW9ucz8uUmVxdWlyZWRQcm9wZXJ0aWVzIGFzIGFueVtdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZW50aXR5U2V0QW5ub3RhdGlvbnMgPSBjb2xsZWN0aW9uUGF0aENvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zO1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMgPSBlbnRpdHlTZXRBbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5GaWx0ZXJSZXN0cmljdGlvbnM/LlJlcXVpcmVkUHJvcGVydGllcyBhcyBhbnlbXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGxldCByZXF1aXJlZFByb3BlcnR5UGF0aHM6IEFycmF5PG9iamVjdD4gPSBbXTtcblx0XHRcdFx0XHRcdGlmIChyZXF1aXJlZFByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihvUmVxdWlyZVByb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMucHVzaChvUmVxdWlyZVByb3BlcnR5LnZhbHVlKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXF1aXJlZFByb3BlcnR5UGF0aHMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHMuY29uY2F0KGFQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZXF1aXJlZFByb3BlcnRpZXMgPSByZXF1aXJlZFByb3BlcnR5UGF0aHM7XG5cdFx0XHRcdFx0XHRpZiAodmlzdWFsRmlsdGVyLnJlcXVpcmVkUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghdmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycyB8fCAhdmlzdWFsRmlsdGVyLmluUGFyYW1ldGVycy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIXZpc3VhbEZpbHRlci5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHNlbGVjdE9wdGlvbnMgPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdkFubm90YXRpb24/LlNlbGVjdE9wdGlvbnM/Lm1hcCgob1NlbGVjdE9wdGlvbjogYW55KSA9PiBvU2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS52YWx1ZSkgfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBwYXJhbWV0ZXJPcHRpb25zID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0c3ZBbm5vdGF0aW9uPy5QYXJhbWV0ZXJzPy5tYXAoKG9QYXJhbWV0ZXJPcHRpb246IGFueSkgPT4gb1BhcmFtZXRlck9wdGlvbi5Qcm9wZXJ0eU5hbWUudmFsdWUpIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0T3B0aW9ucyA9IHNlbGVjdE9wdGlvbnMuY29uY2F0KHBhcmFtZXRlck9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRQcm9wZXJ0eVBhdGhzID0gcmVxdWlyZWRQcm9wZXJ0eVBhdGhzLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdE9wdGlvbnMgPSBzZWxlY3RPcHRpb25zLnNvcnQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5zaG93T3ZlcmxheUluaXRpYWxseSA9IHJlcXVpcmVkUHJvcGVydHlQYXRocy5zb21lKGZ1bmN0aW9uKHNQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3RPcHRpb25zLmluZGV4T2Yoc1BhdGgpID09PSAtMTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2aXN1YWxGaWx0ZXIuc2hvd092ZXJsYXlJbml0aWFsbHkgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmlzdWFsRmlsdGVyLnNob3dPdmVybGF5SW5pdGlhbGx5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBzRGltZW5zaW9uVHlwZSA9IGNoYXJ0QW5ub3RhdGlvbj8uJHRhcmdldD8uRGltZW5zaW9uc1swXT8uJHRhcmdldD8udHlwZTtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0IShcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlXCIgfHxcblx0XHRcdFx0XHRcdFx0XHRzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCJcblx0XHRcdFx0XHRcdFx0KSAmJlxuXHRcdFx0XHRcdFx0XHRjaGFydEFubm90YXRpb24uJHRhcmdldC5DaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIlxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZpc3VhbEZpbHRlci5yZW5kZXJMaW5lQ2hhcnQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuQ0hBUlQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5QUkVTRU5UQVRJT05WQVJJQU5UKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NQUxGT1JNRURfVklTVUFMRklMVEVSUy5WQUxVRUxJU1QpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCkuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5NYW5pZmVzdCwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUFMRk9STUVEX1ZJU1VBTEZJTFRFUlMuVkFMVUVMSVNUKTtcblx0fVxuXHRpZiAoT2JqZWN0LmtleXModmlzdWFsRmlsdGVyKS5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIHZpc3VhbEZpbHRlcjtcblx0fVxufVxuIl19
|
|
@@ -95,7 +95,7 @@ export function getVisualFilters(
|
|
|
95
95
|
): VisualFilters | undefined {
|
|
96
96
|
const visualFilter: VisualFilters = {};
|
|
97
97
|
const oVisualFilter: FilterFieldManifestConfiguration = FilterFields[sPropertyPath];
|
|
98
|
-
if (oVisualFilter
|
|
98
|
+
if (oVisualFilter?.visualFilter?.valueList) {
|
|
99
99
|
const oVFPath = oVisualFilter?.visualFilter?.valueList;
|
|
100
100
|
const annotationQualifierSplit = oVFPath.split("#");
|
|
101
101
|
const qualifierVL = annotationQualifierSplit.length > 1 ? "ValueList#" + annotationQualifierSplit[1] : annotationQualifierSplit[0];
|
|
@@ -276,13 +276,19 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
276
276
|
var subSectionID = SubSectionID({
|
|
277
277
|
Facet: facetDefinition
|
|
278
278
|
});
|
|
279
|
+
var oHiddenAnnotation = (_facetDefinition$anno = facetDefinition.annotations) === null || _facetDefinition$anno === void 0 ? void 0 : (_facetDefinition$anno2 = _facetDefinition$anno.UI) === null || _facetDefinition$anno2 === void 0 ? void 0 : _facetDefinition$anno2.Hidden;
|
|
280
|
+
var isVisible = compileBinding(not(equal(true, annotationExpression(oHiddenAnnotation))));
|
|
281
|
+
var isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && !((oHiddenAnnotation === null || oHiddenAnnotation === void 0 ? void 0 : oHiddenAnnotation.type) === "Path");
|
|
282
|
+
var isVisibleDynamicExpression = isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) : false;
|
|
283
|
+
var title = compileBinding(annotationExpression(facetDefinition.Label));
|
|
279
284
|
var subSection = {
|
|
280
285
|
id: subSectionID,
|
|
281
286
|
key: getSubSectionKey(facetDefinition, subSectionID),
|
|
282
|
-
title:
|
|
287
|
+
title: title,
|
|
283
288
|
type: SubSectionType.Unknown,
|
|
284
289
|
annotationPath: converterContext.getEntitySetBasedAnnotationPath(facetDefinition.fullyQualifiedName),
|
|
285
|
-
visible:
|
|
290
|
+
visible: isVisible,
|
|
291
|
+
isVisibilityDynamic: isDynamicExpression,
|
|
286
292
|
level: level,
|
|
287
293
|
sideContent: undefined
|
|
288
294
|
};
|
|
@@ -340,7 +346,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
340
346
|
var actions = getFacetActions(facetDefinition, converterContext),
|
|
341
347
|
formCollectionSubSection = _objectSpread(_objectSpread({}, subSection), {}, {
|
|
342
348
|
type: SubSectionType.Form,
|
|
343
|
-
formDefinition: createFormDefinition(facetDefinition, converterContext, actions),
|
|
349
|
+
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
|
|
344
350
|
level: level,
|
|
345
351
|
actions: actions.filter(function (action) {
|
|
346
352
|
return action.facetName === undefined;
|
|
@@ -362,12 +368,14 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
362
368
|
var presentation = getDataVisualizationConfiguration(facetDefinition.Target.value, getCondensedTableLayoutCompliance(facetDefinition, facetsToCreate, converterContext), converterContext, undefined, isHeaderSection);
|
|
363
369
|
var controlTitle = (_presentation$visuali = presentation.visualizations[0]) === null || _presentation$visuali === void 0 ? void 0 : (_presentation$visuali2 = _presentation$visuali.annotation) === null || _presentation$visuali2 === void 0 ? void 0 : _presentation$visuali2.title;
|
|
364
370
|
controlTitle ? controlTitle : controlTitle = (_presentation$visuali3 = presentation.visualizations[0]) === null || _presentation$visuali3 === void 0 ? void 0 : _presentation$visuali3.title;
|
|
371
|
+
var showTitle = isSubsectionTitleShown(hasSingleContent, subSection.title, controlTitle);
|
|
365
372
|
|
|
366
373
|
var dataVisualizationSubSection = _objectSpread(_objectSpread({}, subSection), {}, {
|
|
367
374
|
type: SubSectionType.DataVisualization,
|
|
368
375
|
level: level,
|
|
369
376
|
presentation: presentation,
|
|
370
|
-
showTitle:
|
|
377
|
+
showTitle: showTitle,
|
|
378
|
+
titleVisible: isDynamicExpression ? "{= (" + isVisibleDynamicExpression + ") && ('" + title + "' !=='undefined') && (" + showTitle + " ? true : false) }" : isVisible && title !== "undefined" && (title ? isVisible : false)
|
|
371
379
|
});
|
|
372
380
|
|
|
373
381
|
return dataVisualizationSubSection;
|
|
@@ -382,7 +390,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
382
390
|
formElementSubSection = _objectSpread(_objectSpread({}, subSection), {}, {
|
|
383
391
|
type: SubSectionType.Form,
|
|
384
392
|
level: level,
|
|
385
|
-
formDefinition: createFormDefinition(facetDefinition, converterContext, _actions),
|
|
393
|
+
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, _actions),
|
|
386
394
|
actions: _actions.filter(function (action) {
|
|
387
395
|
return action.facetName === undefined;
|
|
388
396
|
})
|
|
@@ -587,7 +595,7 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
587
595
|
title: manifestSubSection.title,
|
|
588
596
|
level: 1,
|
|
589
597
|
position: position,
|
|
590
|
-
visible: manifestSubSection.visible,
|
|
598
|
+
visible: manifestSubSection.visible !== undefined ? manifestSubSection.visible : true,
|
|
591
599
|
sideContent: sideContent
|
|
592
600
|
};
|
|
593
601
|
|
|
@@ -671,4 +679,4 @@ sap.ui.define(["../../ManifestSettings", "../../helpers/ID", "../Common/Form", "
|
|
|
671
679
|
|
|
672
680
|
return _exports;
|
|
673
681
|
}, false);
|
|
674
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwidGVtcGxhdGVFZGl0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uIiwic3ViU2VjdGlvbklEIiwiQ3VzdG9tU3ViU2VjdGlvbklEIiwic3ViU2VjdGlvbiIsImlkIiwidGl0bGUiLCJ0eXBlIiwiWE1MRnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsInZpc2libGUiLCJsZXZlbCIsInNpZGVDb250ZW50IiwidW5kZWZpbmVkIiwic3Rhc2hlZCIsImZsZXhTZXR0aW5ncyIsImFjdGlvbnMiLCJnZXRTdWJTZWN0aW9uS2V5IiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJhZGRGb3JtTWVudUFjdGlvbnMiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJmb3JtQWN0aW9ucyIsImdldEZvcm1BY3Rpb25zIiwiZm9ybUFsbEFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRGYWNldEFjdGlvbnMiLCJBcnJheSIsImZpbHRlciIsImlzUmVmZXJlbmNlRmFjZXQiLCJjcmVhdGVGb3JtQWN0aW9uUmVkdWNlciIsImdldEJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwiUGF0aEZvckJ1dHRvblR5cGUiLCJwYXRoIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiR2hvc3QiLCJoYXNTaW5nbGVDb250ZW50IiwiU3ViU2VjdGlvbklEIiwiRmFjZXQiLCJjb21waWxlQmluZGluZyIsImFubm90YXRpb25FeHByZXNzaW9uIiwiVW5rbm93biIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIm5vdCIsImVxdWFsIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhpZGRlbiIsImdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0IiwiZGVzaWdudGltZSIsImdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJjb250ZW50IiwidGFibGVDb250ZW50IiwiaW5kZXgiLCJ1bnN1cHBvcnRlZFRleHQiLCJpIiwiY29uY2F0IiwibWl4ZWRTdWJTZWN0aW9uIiwiTWl4ZWQiLCJmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb24iLCJGb3JtIiwiZm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImFjdGlvbiIsImZhY2V0TmFtZSIsInZhbHVlIiwicHJlc2VudGF0aW9uIiwiZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIiwiZ2V0Q29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbmNlIiwiY29udHJvbFRpdGxlIiwidmlzdWFsaXphdGlvbnMiLCJhbm5vdGF0aW9uIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJzaG93VGl0bGUiLCJpc1N1YnNlY3Rpb25UaXRsZVNob3duIiwiZm9ybUVsZW1lbnRTdWJTZWN0aW9uIiwidW5zdXBwb3J0ZWRTdWJTZWN0aW9uIiwidGV4dCIsInN1YlNlY3Rpb25UaXRsZSIsInJlZmVyZW5jZVRhcmdldCIsInRhcmdldFZhbHVlIiwibWFuaWZlc3RBY3Rpb25zIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsInNwbGl0IiwibmF2aWdhdGlvblByb3BlcnR5UGF0aCIsImxhc3RJbmRleE9mIiwic3Vic3RyIiwiRGF0YSIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJxdWFsaWZpZXIiLCJkYXRhRmllbGQiLCJVSUFubm90YXRpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJ2YWx1ZU9mIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImVuYWJsZWQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uVHlwZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0RpYWxvZyIsImNvbnRleHRzIiwiYmluZGluZ0V4cHJlc3Npb24iLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlZiIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwiZm9yRWFjaCIsInN1YlNlY3Rpb25LZXkiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9uIiwibWFuaWZlc3RTdWJTZWN0aW9uIiwiU2lkZUNvbnRlbnRJRCIsImVxdWFsU3BsaXQiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwic3ViU2VjdGlvbkRlZmluaXRpb24iLCJuYW1lIiwiUGxhY2Vob2xkZXIiLCJjdXJyZW50RmFjZXQiLCJmYWNldHNUb0NyZWF0ZUluU2VjdGlvbiIsIm1hbmlmZXN0V3JhcHBlciIsInVzZUljb25UYWJCYXIiLCJoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJldmVyeSIsInN1YkZhY2V0IiwicmVmRmFjZXQiLCJzdWJDb2xsZWN0aW9uRmFjZXQiLCJzdWJSZWZGYWNldCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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ZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uVHlwZSwgTWFuaWZlc3RTdWJTZWN0aW9uLCBNYW5pZmVzdEFjdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQge1xuXHRBbm5vdGF0aW9uVGVybSxcblx0Q29sbGVjdGlvbkZhY2V0VHlwZXMsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdEZhY2V0VHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdElkZW50aWZpY2F0aW9uLFxuXHRPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdFN0YXR1c0luZm8sXG5cdFVJQW5ub3RhdGlvblRlcm1zLFxuXHRVSUFubm90YXRpb25UeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHsgQ3VzdG9tU3ViU2VjdGlvbklELCBGb3JtSUQsIFN1YlNlY3Rpb25JRCwgU2lkZUNvbnRlbnRJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtRGVmaW5pdGlvbiwgRm9ybURlZmluaXRpb24sIGlzUmVmZXJlbmNlRmFjZXQgfSBmcm9tIFwiLi4vQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDb25maWd1cmFibGVSZWNvcmQsIEN1c3RvbUVsZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzLCBQbGFjZW1lbnQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdENvbnZlcnRlckFjdGlvbixcblx0Q3VzdG9tQWN0aW9uLFxuXHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LFxuXHRpc0FjdGlvbk5hdmlnYWJsZSxcblx0QnV0dG9uVHlwZSxcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRyZW1vdmVEdXBsaWNhdGVBY3Rpb25zLFxuXHRCYXNlQWN0aW9uLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHtcblx0YW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRCaW5kaW5nRXhwcmVzc2lvbixcblx0Y29tcGlsZUJpbmRpbmcsXG5cdGVxdWFsLFxuXHRmbixcblx0bm90LFxuXHRyZWZcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCB7IElzc3VlVHlwZSwgSXNzdWVTZXZlcml0eSwgSXNzdWVDYXRlZ29yeSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQge1xuXHRGbGV4U2V0dGluZ3MsXG5cdGdldERlc2lnblRpbWVNZXRhZGF0YVNldHRpbmdzRm9ySGVhZGVyRmFjZXQsXG5cdGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQsXG5cdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9PYmplY3RQYWdlL0hlYWRlckZhY2V0XCI7XG5pbXBvcnQgeyBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucywgZ2V0Rm9ybUhpZGRlbkFjdGlvbnMsIGdldEZvcm1BY3Rpb25zIH0gZnJvbSBcIi4uLy4uL29iamVjdFBhZ2UvRm9ybU1lbnVBY3Rpb25zXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG5leHBvcnQgZW51bSBTdWJTZWN0aW9uVHlwZSB7XG5cdFVua25vd24gPSBcIlVua25vd25cIiwgLy8gRGVmYXVsdCBUeXBlXG5cdEZvcm0gPSBcIkZvcm1cIixcblx0RGF0YVZpc3VhbGl6YXRpb24gPSBcIkRhdGFWaXN1YWxpemF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiLFxuXHRQbGFjZWhvbGRlciA9IFwiUGxhY2Vob2xkZXJcIixcblx0TWl4ZWQgPSBcIk1peGVkXCJcbn1cblxuZXhwb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gPVxuXHR8IFVuc3VwcG9ydGVkU3ViU2VjdGlvblxuXHR8IEZvcm1TdWJTZWN0aW9uXG5cdHwgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uXG5cdHwgQ29udGFjdFN1YlNlY3Rpb25cblx0fCBYTUxGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBQbGFjZWhvbGRlckZyYWdtZW50U3ViU2VjdGlvblxuXHR8IE1peGVkU3ViU2VjdGlvbjtcblxudHlwZSBCYXNlU3ViU2VjdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG5cdHRpdGxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZTtcblx0dmlzaWJsZTogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdGZsZXhTZXR0aW5ncz86IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGxldmVsOiBudW1iZXI7XG5cdGNvbnRlbnQ/OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cdHNpZGVDb250ZW50PzogU2lkZUNvbnRlbnREZWY7XG59O1xuXG50eXBlIFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xuXG50eXBlIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbjtcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNob3dUaXRsZTogYm9vbGVhbjtcbn07XG5cbnR5cGUgQ29udGFjdFN1YlNlY3Rpb24gPSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gJiB7fTtcblxudHlwZSBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgRW1waGFzaXplZCA9IHtcblx0cGF0aDogc3RyaW5nO1xufTtcblxudHlwZSBQbGFjZWhvbGRlckZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBNaXhlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0Y29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybTtcblx0Zm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xuXHRhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR0aXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0c2hvd1RpdGxlPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHZpc2libGU6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcbn07XG5cbnR5cGUgU2lkZUNvbnRlbnREZWYgPSB7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0c2lkZUNvbnRlbnRGYWxsRG93bj86IHN0cmluZztcblx0Y29udGFpbmVyUXVlcnk/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRlcXVhbFNwbGl0PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU2VjdGlvbj47XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cbmNvbnN0IHRhcmdldFRlcm1zOiBzdHJpbmdbXSA9IFtcblx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbl07XG5cbi8vIFRPRE86IE5lZWQgdG8gaGFuZGxlIFRhYmxlIGNhc2UgaW5zaWRlIGNyZWF0ZVN1YlNlY3Rpb24gZnVuY3Rpb24gaWYgQ29sbGVjdGlvbkZhY2V0IGhhcyBUYWJsZSBSZWZlcmVuY2VGYWNldFxuY29uc3QgaGFzVGFibGUgPSAoZmFjZXRzOiBhbnlbXSA9IFtdKSA9PiB7XG5cdHJldHVybiBmYWNldHMuc29tZShmYWNldFR5cGUgPT4gdGFyZ2V0VGVybXMuaW5kZXhPZihmYWNldFR5cGU/LlRhcmdldD8uJHRhcmdldD8udGVybSkgPiAtMSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBzdWJzZWN0aW9ucyBiYXNlZCBvbiBmYWNldCBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSB7RmFjZXRUeXBlc1tdfSBmYWNldENvbGxlY3Rpb24gQ29sbGVjdGlvbiBvZiBmYWNldHNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb25bXX0gVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb25zKFxuXHRmYWNldENvbGxlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdC8vIEZpcnN0IHdlIGRldGVybWluZSB3aGljaCBzdWIgc2VjdGlvbiB3ZSBuZWVkIHRvIGNyZWF0ZVxuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGZhY2V0Q29sbGVjdGlvbi5yZWR1Y2UoKGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sIGZhY2V0RGVmaW5pdGlvbikgPT4ge1xuXHRcdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRcdC8vIFRPRE8gSWYgdGhlIENvbGxlY3Rpb24gRmFjZXQgaGFzIGEgY2hpbGQgb2YgdHlwZSBDb2xsZWN0aW9uIEZhY2V0IHdlIGJyaW5nIHRoZW0gdXAgb25lIGxldmVsIChGb3JtICsgVGFibGUgdXNlIGNhc2UpID9cblx0XHRcdFx0Ly8gZmlyc3QgY2FzZSBmYWNldCBDb2xsZWN0aW9uIGlzIGNvbWJpbmF0aW9uIG9mIGNvbGxlY3Rpb24gYW5kIHJlZmVyZW5jZSBmYWNldCBvciBub3QgYWxsIGZhY2V0cyBhcmUgcmVmZXJlbmNlIGZhY2V0cy5cblx0XHRcdFx0aWYgKGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmluZChmYWNldFR5cGUgPT4gZmFjZXRUeXBlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpKSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUuc3BsaWNlKGZhY2V0c1RvQ3JlYXRlLmxlbmd0aCwgMCwgLi4uZmFjZXREZWZpbml0aW9uLkZhY2V0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdFx0Ly8gTm90IHN1cHBvcnRlZFxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0Ly8gVGhlbiB3ZSBjcmVhdGUgdGhlIGFjdHVhbCBzdWJzZWN0aW9uc1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKGZhY2V0ID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihmYWNldCwgZmFjZXRzVG9DcmVhdGUsIGNvbnZlcnRlckNvbnRleHQsIDAsICEoZmFjZXQgYXMgYW55KT8uRmFjZXRzPy5sZW5ndGgsIGlzSGVhZGVyU2VjdGlvbilcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbltdfSBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiA9IGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpXG5cdCk7XG5cdGNvbnN0IGFDdXN0b21IZWFkZXJGYWNldHM6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdID0gW107XG5cdE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlckZhY2V0cykubWFwKGZ1bmN0aW9uKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoY3VzdG9tSGVhZGVyRmFjZXQgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuLy8gZnVuY3Rpb24gaXNUYXJnZXRGb3JDb21wbGlhbnQoYW5ub3RhdGlvblBhdGg6IEFubm90YXRpb25QYXRoKSB7XG4vLyBcdHJldHVybiAvLipjb21cXC5zYXBcXC52b2NhYnVsYXJpZXNcXC5VSVxcLnYxXFwuKEZpZWxkR3JvdXB8SWRlbnRpZmljYXRpb258RGF0YVBvaW50fFN0YXR1c0luZm8pLiovLnRlc3QoYW5ub3RhdGlvblBhdGgudmFsdWUpO1xuLy8gfVxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdfVxuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRmb3JtQWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiA9IGdldEZvcm1BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFjdGlvbnMsXG5cdFx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucylcblx0XHQpO1xuXHRyZXR1cm4gZm9ybUFsbEFjdGlvbnMgPyBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyhyZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zKSkgOiBhY3Rpb25zO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Q29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW119IFRoZSBjdXJyZW50IGZhY2V0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0bGV0IGFjdGlvbnMgPSBuZXcgQXJyYXk8Q29udmVydGVyQWN0aW9uPigpO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbHRlcihmYWNldERlZmluaXRpb24gPT4gaXNSZWZlcmVuY2VGYWNldChmYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW10pLnJlZHVjZShcblx0XHRcdFx0KGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLCBmYWNldERlZmluaXRpb24pID0+IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvbnMsIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFtdXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGFjdGlvbnMgPSBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihbXSwgZmFjZXREZWZpbml0aW9uIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXRydW5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIEVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMge0J1dHRvblR5cGUgfCBzdHJpbmd9IFRoZSBidXR0b24gdHlwZSBvciBwYXRoIGJhc2VkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvblR5cGUoRW1waGFzaXplZDogRW1waGFzaXplZCk6IEJ1dHRvblR5cGUgfCBzdHJpbmcge1xuXHRjb25zdCBQYXRoRm9yQnV0dG9uVHlwZTogc3RyaW5nID0gRW1waGFzaXplZD8ucGF0aDtcblx0aWYgKFBhdGhGb3JCdXR0b25UeXBlKSB7XG5cdFx0cmV0dXJuIFwiez0gXCIgKyBcIiEke1wiICsgUGF0aEZvckJ1dHRvblR5cGUgKyBcIn0gPyAnXCIgKyBCdXR0b25UeXBlLlRyYW5zcGFyZW50ICsgXCInIDogJHtcIiArIFBhdGhGb3JCdXR0b25UeXBlICsgXCJ9XCIgKyBcIn1cIjtcblx0fSBlbHNlIGlmIChFbXBoYXNpemVkKSB7XG5cdFx0cmV0dXJuIEJ1dHRvblR5cGUuR2hvc3Q7XG5cdH1cblx0cmV0dXJuIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBGYWNldFR5cGVzLlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxldmVsXG4gKiBAcGFyYW0gaGFzU2luZ2xlQ29udGVudFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9ufSBBIHN1YnNlY3Rpb24gZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbihcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsZXZlbDogbnVtYmVyLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IFN1YlNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSk7XG5cdGNvbnN0IHN1YlNlY3Rpb246IEJhc2VTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBnZXRTdWJTZWN0aW9uS2V5KGZhY2V0RGVmaW5pdGlvbiwgc3ViU2VjdGlvbklEKSxcblx0XHR0aXRsZTogY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24oZmFjZXREZWZpbml0aW9uLkxhYmVsKSksXG5cdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuVW5rbm93bixcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdGxldmVsOiBsZXZlbCxcblx0XHRzaWRlQ29udGVudDogdW5kZWZpbmVkXG5cdH07XG5cdGlmIChpc0hlYWRlclNlY3Rpb24pIHtcblx0XHRzdWJTZWN0aW9uLnN0YXNoZWQgPSBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0c3ViU2VjdGlvbi5mbGV4U2V0dGluZ3MgPSB7XG5cdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH07XG5cdH1cblx0bGV0IGNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCB0YWJsZUNvbnRlbnQ6IEFycmF5PE9iamVjdFBhZ2VTdWJTZWN0aW9uPiA9IFtdO1xuXHRjb25zdCBpbmRleDogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXHRsZXQgdW5zdXBwb3J0ZWRUZXh0ID0gXCJcIjtcblx0bGV2ZWwrKztcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGNvbnN0IGZhY2V0cyA9IGZhY2V0RGVmaW5pdGlvbi5GYWNldHM7XG5cdFx0XHRpZiAoaGFzVGFibGUoZmFjZXRzKSkge1xuXHRcdFx0XHQvLyBpZiB3ZSBoYXZlIHRhYmxlcyBpbiBhIGNvbGxlY3Rpb24gZmFjZXQgdGhlbiB3ZSBjcmVhdGUgc2VwYXJhdGUgc3Vic2VjdGlvbiBmb3IgdGhlbVxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZhY2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmICh0YXJnZXRUZXJtcy5pbmRleE9mKChmYWNldHNbaV0gYXMgYW55KS5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0pID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vY3JlYXRpbmcgc2VwYXJhdGUgYXJyYXkgZm9yIHRhYmxlc1xuXHRcdFx0XHRcdFx0dGFibGVDb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldHNbaV0sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgZmFjZXRzLmxlbmd0aCA9PT0gMSwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdFx0XHRpbmRleC5wdXNoKGkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGxldCBpID0gaW5kZXgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdFx0XHQvL3JlbW92ZSB0YWJsZSBmYWNldHMgZnJvbSBmYWNldCBkZWZpbml0aW9uXG5cdFx0XHRcdFx0ZmFjZXRzLnNwbGljZShpbmRleFtpXSwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZhY2V0cy5sZW5ndGgpIHtcblx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uRmFjZXRzID0gZmFjZXRzO1xuXHRcdFx0XHRcdC8vY3JlYXRlIGEgZm9ybSBzdWJzZWN0aW9uIGZyb20gdGhlIHJlbWFpbmluZyBmYWNldHNcblx0XHRcdFx0XHRjb250ZW50LnB1c2goY3JlYXRlU3ViU2VjdGlvbihmYWNldERlZmluaXRpb24sIFtdLCBjb252ZXJ0ZXJDb250ZXh0LCBsZXZlbCwgaGFzU2luZ2xlQ29udGVudCwgaXNIZWFkZXJTZWN0aW9uKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGVudCA9IGNvbnRlbnQuY29uY2F0KHRhYmxlQ29udGVudCk7XG5cdFx0XHRcdGNvbnN0IG1peGVkU3ViU2VjdGlvbjogTWl4ZWRTdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuTWl4ZWQsXG5cdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IGNvbnRlbnRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIG1peGVkU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRmb3JtQ29sbGVjdGlvblN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRmb3JtRGVmaW5pdGlvbjogY3JlYXRlRm9ybURlZmluaXRpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zKSxcblx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0XHRnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoZmFjZXREZWZpbml0aW9uLCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0aXNIZWFkZXJTZWN0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0bGV0IGNvbnRyb2xUaXRsZSA9IChwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgYW55KT8uYW5ub3RhdGlvbj8udGl0bGU7XG5cdFx0XHRcdFx0XHRjb250cm9sVGl0bGUgPyBjb250cm9sVGl0bGUgOiAoY29udHJvbFRpdGxlID0gKHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy50aXRsZSk7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0Li4uc3ViU2VjdGlvbixcblx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRGF0YVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdFx0cHJlc2VudGF0aW9uOiBwcmVzZW50YXRpb24sXG5cdFx0XHRcdFx0XHRcdHNob3dUaXRsZTogaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50LCBzdWJTZWN0aW9uLnRpdGxlLCBjb250cm9sVGl0bGUpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjtcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRGF0YVBvaW50OlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0XHRjYXNlIENvbW11bmljYXRpb25Bbm5vdGF0aW9uVGVybXMuQ29udGFjdDpcblx0XHRcdFx0XHRcdC8vIEFsbCB0aG9zZSBlbGVtZW50IGJlbG9uZyB0byBhIGZvcm0gZmFjZXRcblx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbnMgPSBnZXRGYWNldEFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRTdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLkZvcm0sXG5cdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1EZWZpbml0aW9uOiBjcmVhdGVGb3JtRGVmaW5pdGlvbihmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQsIGFjdGlvbnMpLFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm9ybUVsZW1lbnRTdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkVGV4dCA9IGBGb3IgJHtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybX0gRnJhZ21lbnRgO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlVVJMRmFjZXQ6XG5cdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBcIkZvciBSZWZlcmVuY2UgVVJMIEZhY2V0XCI7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblx0Ly8gSWYgd2UgcmVhY2ggaGVyZSB3ZSBlbmRlZCB1cCB3aXRoIGFuIHVuc3VwcG9ydGVkIFN1YlNlY3Rpb24gdHlwZVxuXHRjb25zdCB1bnN1cHBvcnRlZFN1YlNlY3Rpb246IFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IHtcblx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdHRleHQ6IHVuc3VwcG9ydGVkVGV4dFxuXHR9O1xuXHRyZXR1cm4gdW5zdXBwb3J0ZWRTdWJTZWN0aW9uO1xufVxuZnVuY3Rpb24gaXNTdWJzZWN0aW9uVGl0bGVTaG93bihoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLCBzdWJTZWN0aW9uVGl0bGU6IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4sIGNvbnRyb2xUaXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGlmIChoYXNTaW5nbGVDb250ZW50ICYmIGNvbnRyb2xUaXRsZSA9PT0gc3ViU2VjdGlvblRpdGxlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY3JlYXRlRm9ybUFjdGlvblJlZHVjZXIoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgcmVmZXJlbmNlVGFyZ2V0OiBBbm5vdGF0aW9uVGVybTxhbnk+ID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0O1xuXHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWU7XG5cdGxldCBtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0bGV0IGRhdGFGaWVsZENvbGxlY3Rpb246IERhdGFGaWVsZEFic3RyYWN0VHlwZXNbXSA9IFtdO1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdOiBhbnkgPSB0YXJnZXRWYWx1ZS5zcGxpdChcIkBcIik7XG5cdGlmIChuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA+IDApIHtcblx0XHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdFx0bmF2aWdhdGlvblByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguc3Vic3RyKDAsIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAocmVmZXJlbmNlVGFyZ2V0KSB7XG5cdFx0c3dpdGNoIChyZWZlcmVuY2VUYXJnZXQudGVybSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gKHJlZmVyZW5jZVRhcmdldCBhcyBGaWVsZEdyb3VwKS5EYXRhO1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnMsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSBhcyBzdHJpbmdcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLklkZW50aWZpY2F0aW9uOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRpZiAocmVmZXJlbmNlVGFyZ2V0LnF1YWxpZmllcikge1xuXHRcdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb24gPSByZWZlcmVuY2VUYXJnZXQgYXMgSWRlbnRpZmljYXRpb24gfCBTdGF0dXNJbmZvO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGFjdGlvbnMgPSBkYXRhRmllbGRDb2xsZWN0aW9uLnJlZHVjZSgoYWN0aW9ucywgZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0Y29uc3QgVUlBbm5vdGF0aW9uOiBhbnkgPSBkYXRhRmllbGQ/LmFubm90YXRpb25zPy5VSTtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdFx0XHQuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0XHRcdFx0LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5Mb3csIElzc3VlVHlwZS5NQUxGT1JNRURfREFUQUZJRUxEX0ZPUl9JQk4uUkVRVUlSRVNDT05URVhUKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLklOTElORSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5EZXRlcm1pbmluZz8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLkRFVEVSTUlOSU5HKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFueSA9IHt9O1xuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLk1hcHBpbmcpIHtcblx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGRhdGFGaWVsZC5NYXBwaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdFx0XHRcdGlkOiBGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHRcdD8gY29tcGlsZUJpbmRpbmcoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSksIHRydWUpKVxuXHRcdFx0XHRcdFx0XHQ6IHRydWUsXG5cdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKFVJQW5ub3RhdGlvbj8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlQmluZGluZyh7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRcdGFjdGlvbjogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbilcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0Y29uc3QgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb246IGFueSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbihyZWZlcmVuY2VUYXJnZXQpLmFjdGlvbnM7XG5cdFx0XHRcdGNvbnN0IGtleTogc3RyaW5nID0gS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpO1xuXHRcdFx0XHRhY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdGlkOiBGb3JtSUQoeyBGYWNldDogZmFjZXREZWZpbml0aW9uIH0sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0a2V5OiBrZXksXG5cdFx0XHRcdFx0dGV4dDogZGF0YUZpZWxkLkxhYmVsPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRcdGJpbmRpbmc6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPyBcInsgJ3BhdGgnIDogJ1wiICsgbmF2aWdhdGlvblByb3BlcnR5UGF0aCArIFwiJ31cIiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkpLCB0cnVlKSkpLFxuXHRcdFx0XHRcdHJlcXVpcmVzRGlhbG9nOiBpc0RpYWxvZyhkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0XHRidXR0b25UeXBlOiBnZXRCdXR0b25UeXBlKFVJQW5ub3RhdGlvbj8uRW1waGFzaXplZCksXG5cdFx0XHRcdFx0cHJlc3M6IGNvbXBpbGVCaW5kaW5nKFxuXHRcdFx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0XHRcdFwiaW52b2tlQWN0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRzOiBmbihcImdldEJpbmRpbmdDb250ZXh0XCIsIFtdLCBiaW5kaW5nRXhwcmVzc2lvbihcIlwiLCBcIiRzb3VyY2VcIikpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiAoZGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyA9PT0gXCJVSS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcIkNoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogXCJJc29sYXRlZFwiKSBhcyBPcGVyYXRpb25Hcm91cGluZ1R5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkxhYmVsKSxcblx0XHRcdFx0XHRcdFx0XHRcdG1vZGVsOiBmbihcImdldE1vZGVsXCIsIFtdLCBiaW5kaW5nRXhwcmVzc2lvbihcIi9cIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb24gJiYgZm9ybU1hbmlmZXN0QWN0aW9uc0NvbmZpZ3VyYXRpb25ba2V5XVxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0cmVmKFwiLmVkaXRGbG93XCIpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmYWNldE5hbWU6IGRhdGFGaWVsZC5JbmxpbmUgPyAoZmFjZXREZWZpbml0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGFjdGlvbnM7XG5cdH0sIGFjdGlvbnMpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlhbG9nKGFjdGlvbkRlZmluaXRpb246IGFueSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdGlmIChhY3Rpb25EZWZpbml0aW9uKSB7XG5cdFx0Y29uc3QgYkNyaXRpY2FsID0gYWN0aW9uRGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0FjdGlvbkNyaXRpY2FsO1xuXHRcdGlmIChhY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMubGVuZ3RoID4gMSB8fCBiQ3JpdGljYWwpIHtcblx0XHRcdHJldHVybiBcIkRpYWxvZ1wiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMoXG5cdG1hbmlmZXN0U3ViU2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0U3ViU2VjdGlvbj4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uPiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4gPSB7fTtcblx0T2JqZWN0LmtleXMobWFuaWZlc3RTdWJTZWN0aW9ucykuZm9yRWFjaChcblx0XHRzdWJTZWN0aW9uS2V5ID0+XG5cdFx0XHQoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0gPSBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKG1hbmlmZXN0U3ViU2VjdGlvbnNbc3ViU2VjdGlvbktleV0sIHN1YlNlY3Rpb25LZXksIGNvbnZlcnRlckNvbnRleHQpKVxuXHQpO1xuXHRyZXR1cm4gc3ViU2VjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDdXN0b21TdWJTZWN0aW9uKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb246IE1hbmlmZXN0U3ViU2VjdGlvbixcblx0c3ViU2VjdGlvbktleTogc3RyaW5nLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHNpZGVDb250ZW50OiBTaWRlQ29udGVudERlZiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudFxuXHRcdD8ge1xuXHRcdFx0XHR0ZW1wbGF0ZTogbWFuaWZlc3RTdWJTZWN0aW9uLnNpZGVDb250ZW50LnRlbXBsYXRlLFxuXHRcdFx0XHRpZDogU2lkZUNvbnRlbnRJRChzdWJTZWN0aW9uS2V5KSxcblx0XHRcdFx0dmlzaWJsZTogZmFsc2UsXG5cdFx0XHRcdGVxdWFsU3BsaXQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC5lcXVhbFNwbGl0XG5cdFx0ICB9XG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCBwb3NpdGlvbiA9IG1hbmlmZXN0U3ViU2VjdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25EZWZpbml0aW9uID0ge1xuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0aWQ6IG1hbmlmZXN0U3ViU2VjdGlvbi5pZCB8fCBDdXN0b21TdWJTZWN0aW9uSUQoc3ViU2VjdGlvbktleSksXG5cdFx0YWN0aW9uczogZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFN1YlNlY3Rpb24uYWN0aW9ucywgY29udmVydGVyQ29udGV4dCksXG5cdFx0a2V5OiBzdWJTZWN0aW9uS2V5LFxuXHRcdHRpdGxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udGl0bGUsXG5cdFx0bGV2ZWw6IDEsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHZpc2libGU6IG1hbmlmZXN0U3ViU2VjdGlvbi52aXNpYmxlLFxuXHRcdHNpZGVDb250ZW50OiBzaWRlQ29udGVudFxuXHR9O1xuXHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHRcdCgoc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgdW5rbm93bikgYXMgWE1MRnJhZ21lbnRTdWJTZWN0aW9uKS50ZW1wbGF0ZSA9XG5cdFx0XHRtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUgfHwgXCJcIjtcblx0fSBlbHNlIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdH1cblx0cmV0dXJuIHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSBjb25kZW5zZWQgbW9kZSBjYW4gYmUgYXBwbGkzZWQgb24gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RmFjZXRcbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZUluU2VjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0Ly8gSWYgdGhlIE9QIHVzZSB0aGUgdGFiIGJhc2VkIHdlIGNoZWNrIGlmIHRoZSBmYWNldHMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc2VjdGlvbiBhcmUgYWxsIG5vbiB2aXNpYmxlXG5cdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggJiYgZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoID4gMSkge1xuXHRcdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcywgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24uZXZlcnkoZnVuY3Rpb24oc3ViRmFjZXQpIHtcblx0XHRpZiAoc3ViRmFjZXQgIT09IGN1cnJlbnRGYWNldCkge1xuXHRcdFx0aWYgKHN1YkZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRjb25zdCByZWZGYWNldCA9IHN1YkZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8XG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuICE9PSB1bmRlZmluZWQgPyByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA6IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc3ViQ29sbGVjdGlvbkZhY2V0ID0gc3ViRmFjZXQgYXMgQ29sbGVjdGlvbkZhY2V0VHlwZXM7XG5cdFx0XHRcdHJldHVybiBzdWJDb2xsZWN0aW9uRmFjZXQuRmFjZXRzLmV2ZXJ5KGZ1bmN0aW9uKGZhY2V0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViUmVmRmFjZXQgPSBmYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xufVxuIl19
|
|
682
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlN1YlNlY3Rpb24udHMiXSwibmFtZXMiOlsiU3ViU2VjdGlvblR5cGUiLCJ0YXJnZXRUZXJtcyIsImhhc1RhYmxlIiwiZmFjZXRzIiwic29tZSIsImZhY2V0VHlwZSIsImluZGV4T2YiLCJUYXJnZXQiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiZmFjZXRDb2xsZWN0aW9uIiwiY29udmVydGVyQ29udGV4dCIsImlzSGVhZGVyU2VjdGlvbiIsImZhY2V0c1RvQ3JlYXRlIiwicmVkdWNlIiwiZmFjZXREZWZpbml0aW9uIiwiJFR5cGUiLCJwdXNoIiwiRmFjZXRzIiwiZmluZCIsInNwbGljZSIsImxlbmd0aCIsIm1hcCIsImZhY2V0IiwiY3JlYXRlU3ViU2VjdGlvbiIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXRIZWFkZXJGYWNldHMiLCJhQ3VzdG9tSGVhZGVyRmFjZXRzIiwiT2JqZWN0Iiwia2V5cyIsImtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwidGVtcGxhdGVFZGl0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uIiwic3ViU2VjdGlvbklEIiwiQ3VzdG9tU3ViU2VjdGlvbklEIiwic3ViU2VjdGlvbiIsImlkIiwidGl0bGUiLCJ0eXBlIiwiWE1MRnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsInZpc2libGUiLCJsZXZlbCIsInNpZGVDb250ZW50IiwidW5kZWZpbmVkIiwic3Rhc2hlZCIsImZsZXhTZXR0aW5ncyIsImFjdGlvbnMiLCJnZXRTdWJTZWN0aW9uS2V5IiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJhZGRGb3JtTWVudUFjdGlvbnMiLCJoaWRkZW5BY3Rpb25zIiwiZ2V0Rm9ybUhpZGRlbkFjdGlvbnMiLCJmb3JtQWN0aW9ucyIsImdldEZvcm1BY3Rpb25zIiwiZm9ybUFsbEFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJnZXRGYWNldEFjdGlvbnMiLCJBcnJheSIsImZpbHRlciIsImlzUmVmZXJlbmNlRmFjZXQiLCJjcmVhdGVGb3JtQWN0aW9uUmVkdWNlciIsImdldEJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwiUGF0aEZvckJ1dHRvblR5cGUiLCJwYXRoIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiR2hvc3QiLCJoYXNTaW5nbGVDb250ZW50IiwiU3ViU2VjdGlvbklEIiwiRmFjZXQiLCJvSGlkZGVuQW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiVUkiLCJIaWRkZW4iLCJpc1Zpc2libGUiLCJjb21waWxlQmluZGluZyIsIm5vdCIsImVxdWFsIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJpc0R5bmFtaWNFeHByZXNzaW9uIiwiaXNWaXNpYmxlRHluYW1pY0V4cHJlc3Npb24iLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsIlVua25vd24iLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwiZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQiLCJkZXNpZ250aW1lIiwiZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImNvbnRlbnQiLCJ0YWJsZUNvbnRlbnQiLCJpbmRleCIsInVuc3VwcG9ydGVkVGV4dCIsImkiLCJjb25jYXQiLCJtaXhlZFN1YlNlY3Rpb24iLCJNaXhlZCIsImZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbiIsIkZvcm0iLCJmb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiYWN0aW9uIiwiZmFjZXROYW1lIiwidmFsdWUiLCJwcmVzZW50YXRpb24iLCJnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UiLCJjb250cm9sVGl0bGUiLCJ2aXN1YWxpemF0aW9ucyIsImFubm90YXRpb24iLCJzaG93VGl0bGUiLCJpc1N1YnNlY3Rpb25UaXRsZVNob3duIiwiZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uIiwiRGF0YVZpc3VhbGl6YXRpb24iLCJ0aXRsZVZpc2libGUiLCJmb3JtRWxlbWVudFN1YlNlY3Rpb24iLCJ1bnN1cHBvcnRlZFN1YlNlY3Rpb24iLCJ0ZXh0Iiwic3ViU2VjdGlvblRpdGxlIiwicmVmZXJlbmNlVGFyZ2V0IiwidGFyZ2V0VmFsdWUiLCJtYW5pZmVzdEFjdGlvbnMiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic3BsaXQiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3Vic3RyIiwiRGF0YSIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJxdWFsaWZpZXIiLCJkYXRhRmllbGQiLCJVSUFubm90YXRpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJ2YWx1ZU9mIiwiZ2V0RGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIkxvdyIsIklzc3VlVHlwZSIsIk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTiIsIlJFUVVJUkVTQ09OVEVYVCIsIklubGluZSIsIklOTElORSIsIkRldGVybWluaW5nIiwiREVURVJNSU5JTkciLCJtTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsIkZvcm1JRCIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImVuYWJsZWQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uVHlwZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJBY3Rpb25UYXJnZXQiLCJiaW5kaW5nIiwicmVxdWlyZXNEaWFsb2ciLCJpc0RpYWxvZyIsImNvbnRleHRzIiwiYmluZGluZ0V4cHJlc3Npb24iLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJsYWJlbCIsIm1vZGVsIiwiaXNOYXZpZ2FibGUiLCJpc0FjdGlvbk5hdmlnYWJsZSIsInJlZiIsImFjdGlvbkRlZmluaXRpb24iLCJiQ3JpdGljYWwiLCJDb21tb24iLCJJc0FjdGlvbkNyaXRpY2FsIiwicGFyYW1ldGVycyIsImNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zIiwibWFuaWZlc3RTdWJTZWN0aW9ucyIsInN1YlNlY3Rpb25zIiwiZm9yRWFjaCIsInN1YlNlY3Rpb25LZXkiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9uIiwibWFuaWZlc3RTdWJTZWN0aW9uIiwiU2lkZUNvbnRlbnRJRCIsImVxdWFsU3BsaXQiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwic3ViU2VjdGlvbkRlZmluaXRpb24iLCJuYW1lIiwiUGxhY2Vob2xkZXIiLCJjdXJyZW50RmFjZXQiLCJmYWNldHNUb0NyZWF0ZUluU2VjdGlvbiIsIm1hbmlmZXN0V3JhcHBlciIsInVzZUljb25UYWJCYXIiLCJoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJldmVyeSIsInN1YkZhY2V0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QUNBLEtBNUJNLENBQVA7QUE2QkEiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvblR5cGUsIE1hbmlmZXN0U3ViU2VjdGlvbiwgTWFuaWZlc3RBY3Rpb24gfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHtcblx0QW5ub3RhdGlvblRlcm0sXG5cdENvbGxlY3Rpb25GYWNldFR5cGVzLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRGYWNldFR5cGVzLFxuXHRGaWVsZEdyb3VwLFxuXHRJZGVudGlmaWNhdGlvbixcblx0T3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRTdGF0dXNJbmZvLFxuXHRVSUFubm90YXRpb25UZXJtcyxcblx0VUlBbm5vdGF0aW9uVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0NvbW11bmljYXRpb25cIjtcbmltcG9ydCB7IEN1c3RvbVN1YlNlY3Rpb25JRCwgRm9ybUlELCBTdWJTZWN0aW9uSUQsIFNpZGVDb250ZW50SUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24sIEZvcm1EZWZpbml0aW9uLCBpc1JlZmVyZW5jZUZhY2V0IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50LCBpbnNlcnRDdXN0b21FbGVtZW50cywgUGxhY2VtZW50IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQge1xuXHRDb252ZXJ0ZXJBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdCxcblx0aXNBY3Rpb25OYXZpZ2FibGUsXG5cdEJ1dHRvblR5cGUsXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0cmVtb3ZlRHVwbGljYXRlQWN0aW9ucyxcblx0QmFzZUFjdGlvbixcblx0Z2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7XG5cdGFubm90YXRpb25FeHByZXNzaW9uLFxuXHRiaW5kaW5nRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRlcXVhbCxcblx0Zm4sXG5cdG5vdCxcblx0cmVmXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQgeyBJc3N1ZVR5cGUsIElzc3VlU2V2ZXJpdHksIElzc3VlQ2F0ZWdvcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHtcblx0RmxleFNldHRpbmdzLFxuXHRnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0LFxuXHRnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCxcblx0Q3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0LFxuXHRnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3Rcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0VmlzaWJpbGl0eUVuYWJsZW1lbnRGb3JtTWVudUFjdGlvbnMsIGdldEZvcm1IaWRkZW5BY3Rpb25zLCBnZXRGb3JtQWN0aW9ucyB9IGZyb20gXCIuLi8uLi9vYmplY3RQYWdlL0Zvcm1NZW51QWN0aW9uc1wiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IGVudW0gU3ViU2VjdGlvblR5cGUge1xuXHRVbmtub3duID0gXCJVbmtub3duXCIsIC8vIERlZmF1bHQgVHlwZVxuXHRGb3JtID0gXCJGb3JtXCIsXG5cdERhdGFWaXN1YWxpemF0aW9uID0gXCJEYXRhVmlzdWFsaXphdGlvblwiLFxuXHRYTUxGcmFnbWVudCA9IFwiWE1MRnJhZ21lbnRcIixcblx0UGxhY2Vob2xkZXIgPSBcIlBsYWNlaG9sZGVyXCIsXG5cdE1peGVkID0gXCJNaXhlZFwiXG59XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uID1cblx0fCBVbnN1cHBvcnRlZFN1YlNlY3Rpb25cblx0fCBGb3JtU3ViU2VjdGlvblxuXHR8IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvblxuXHR8IENvbnRhY3RTdWJTZWN0aW9uXG5cdHwgWE1MRnJhZ21lbnRTdWJTZWN0aW9uXG5cdHwgUGxhY2Vob2xkZXJGcmFnbWVudFN1YlNlY3Rpb25cblx0fCBNaXhlZFN1YlNlY3Rpb247XG5cbnR5cGUgQmFzZVN1YlNlY3Rpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGtleTogc3RyaW5nO1xuXHR0aXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0dHlwZTogU3ViU2VjdGlvblR5cGU7XG5cdHZpc2libGU6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc1Zpc2liaWxpdHlEeW5hbWljPzogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IFwiXCI7XG5cdGZsZXhTZXR0aW5ncz86IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGxldmVsOiBudW1iZXI7XG5cdGNvbnRlbnQ/OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cdHNpZGVDb250ZW50PzogU2lkZUNvbnRlbnREZWY7XG59O1xuXG50eXBlIFVuc3VwcG9ydGVkU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0ZXh0OiBzdHJpbmc7XG59O1xuXG50eXBlIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IEJhc2VTdWJTZWN0aW9uICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbjtcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNob3dUaXRsZTogYm9vbGVhbjtcblx0dGl0bGVWaXNpYmxlPzogc3RyaW5nIHwgYm9vbGVhbjtcbn07XG5cbnR5cGUgQ29udGFjdFN1YlNlY3Rpb24gPSBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gJiB7fTtcblxudHlwZSBYTUxGcmFnbWVudFN1YlNlY3Rpb24gPSBPbWl0PEJhc2VTdWJTZWN0aW9uLCBcImFubm90YXRpb25QYXRoXCI+ICYge1xuXHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5YTUxGcmFnbWVudDtcblx0dGVtcGxhdGU6IHN0cmluZztcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbnR5cGUgRW1waGFzaXplZCA9IHtcblx0cGF0aDogc3RyaW5nO1xufTtcblxudHlwZSBQbGFjZWhvbGRlckZyYWdtZW50U3ViU2VjdGlvbiA9IE9taXQ8QmFzZVN1YlNlY3Rpb24sIFwiYW5ub3RhdGlvblBhdGhcIj4gJiB7XG5cdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlBsYWNlaG9sZGVyO1xuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxudHlwZSBNaXhlZFN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0Y29udGVudDogQXJyYXk8T2JqZWN0UGFnZVN1YlNlY3Rpb24+O1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybVN1YlNlY3Rpb24gPSBCYXNlU3ViU2VjdGlvbiAmIHtcblx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybTtcblx0Zm9ybURlZmluaXRpb246IEZvcm1EZWZpbml0aW9uO1xuXHRhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSB8IEJhc2VBY3Rpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHRpZDogc3RyaW5nO1xuXHR0aXRsZTogQmluZGluZ0V4cHJlc3Npb248c3RyaW5nPjtcblx0c2hvd1RpdGxlPzogQmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdHZpc2libGU6IEJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXTtcbn07XG5cbnR5cGUgU2lkZUNvbnRlbnREZWYgPSB7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0c2lkZUNvbnRlbnRGYWxsRG93bj86IHN0cmluZztcblx0Y29udGFpbmVyUXVlcnk/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBib29sZWFuO1xuXHRlcXVhbFNwbGl0PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU2VjdGlvbj47XG5cbmV4cG9ydCB0eXBlIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlU3ViU2VjdGlvbj47XG5cbmNvbnN0IHRhcmdldFRlcm1zOiBzdHJpbmdbXSA9IFtcblx0VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0sXG5cdFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbl07XG5cbi8vIFRPRE86IE5lZWQgdG8gaGFuZGxlIFRhYmxlIGNhc2UgaW5zaWRlIGNyZWF0ZVN1YlNlY3Rpb24gZnVuY3Rpb24gaWYgQ29sbGVjdGlvbkZhY2V0IGhhcyBUYWJsZSBSZWZlcmVuY2VGYWNldFxuY29uc3QgaGFzVGFibGUgPSAoZmFjZXRzOiBhbnlbXSA9IFtdKSA9PiB7XG5cdHJldHVybiBmYWNldHMuc29tZShmYWNldFR5cGUgPT4gdGFyZ2V0VGVybXMuaW5kZXhPZihmYWNldFR5cGU/LlRhcmdldD8uJHRhcmdldD8udGVybSkgPiAtMSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBzdWJzZWN0aW9ucyBiYXNlZCBvbiBmYWNldCBkZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSB7RmFjZXRUeXBlc1tdfSBmYWNldENvbGxlY3Rpb24gQ29sbGVjdGlvbiBvZiBmYWNldHNcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIZWFkZXJTZWN0aW9uIFRydWUgaWYgaGVhZGVyIHNlY3Rpb24gaXMgZ2VuZXJhdGVkIGluIHRoaXMgaXRlcmF0aW9uXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb25bXX0gVGhlIGN1cnJlbnQgc3Vic2VjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1YlNlY3Rpb25zKFxuXHRmYWNldENvbGxlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aXNIZWFkZXJTZWN0aW9uPzogYm9vbGVhblxuKTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdC8vIEZpcnN0IHdlIGRldGVybWluZSB3aGljaCBzdWIgc2VjdGlvbiB3ZSBuZWVkIHRvIGNyZWF0ZVxuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGZhY2V0Q29sbGVjdGlvbi5yZWR1Y2UoKGZhY2V0c1RvQ3JlYXRlOiBGYWNldFR5cGVzW10sIGZhY2V0RGVmaW5pdGlvbikgPT4ge1xuXHRcdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0XHRmYWNldHNUb0NyZWF0ZS5wdXNoKGZhY2V0RGVmaW5pdGlvbik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRcdC8vIFRPRE8gSWYgdGhlIENvbGxlY3Rpb24gRmFjZXQgaGFzIGEgY2hpbGQgb2YgdHlwZSBDb2xsZWN0aW9uIEZhY2V0IHdlIGJyaW5nIHRoZW0gdXAgb25lIGxldmVsIChGb3JtICsgVGFibGUgdXNlIGNhc2UpID9cblx0XHRcdFx0Ly8gZmlyc3QgY2FzZSBmYWNldCBDb2xsZWN0aW9uIGlzIGNvbWJpbmF0aW9uIG9mIGNvbGxlY3Rpb24gYW5kIHJlZmVyZW5jZSBmYWNldCBvciBub3QgYWxsIGZhY2V0cyBhcmUgcmVmZXJlbmNlIGZhY2V0cy5cblx0XHRcdFx0aWYgKGZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZmluZChmYWNldFR5cGUgPT4gZmFjZXRUeXBlLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpKSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUuc3BsaWNlKGZhY2V0c1RvQ3JlYXRlLmxlbmd0aCwgMCwgLi4uZmFjZXREZWZpbml0aW9uLkZhY2V0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChmYWNldERlZmluaXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldDpcblx0XHRcdFx0Ly8gTm90IHN1cHBvcnRlZFxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGZhY2V0c1RvQ3JlYXRlO1xuXHR9LCBbXSk7XG5cblx0Ly8gVGhlbiB3ZSBjcmVhdGUgdGhlIGFjdHVhbCBzdWJzZWN0aW9uc1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGUubWFwKGZhY2V0ID0+XG5cdFx0Y3JlYXRlU3ViU2VjdGlvbihmYWNldCwgZmFjZXRzVG9DcmVhdGUsIGNvbnZlcnRlckNvbnRleHQsIDAsICEoZmFjZXQgYXMgYW55KT8uRmFjZXRzPy5sZW5ndGgsIGlzSGVhZGVyU2VjdGlvbilcblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHN1YnNlY3Rpb25zIGJhc2VkIG9uIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtPYmplY3RQYWdlU3ViU2VjdGlvbltdfSBUaGUgY3VycmVudCBzdWJzZWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiA9IGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEhlYWRlckZhY2V0cygpXG5cdCk7XG5cdGNvbnN0IGFDdXN0b21IZWFkZXJGYWNldHM6IEN1c3RvbU9iamVjdFBhZ2VIZWFkZXJGYWNldFtdID0gW107XG5cdE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlckZhY2V0cykubWFwKGZ1bmN0aW9uKGtleSkge1xuXHRcdGFDdXN0b21IZWFkZXJGYWNldHMucHVzaChjdXN0b21IZWFkZXJGYWNldHNba2V5XSk7XG5cdFx0cmV0dXJuIGFDdXN0b21IZWFkZXJGYWNldHM7XG5cdH0pO1xuXHRjb25zdCBmYWNldHNUb0NyZWF0ZSA9IGFDdXN0b21IZWFkZXJGYWNldHMucmVkdWNlKChmYWNldHNUb0NyZWF0ZTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0W10sIGN1c3RvbUhlYWRlckZhY2V0KSA9PiB7XG5cdFx0aWYgKGN1c3RvbUhlYWRlckZhY2V0LnRlbXBsYXRlRWRpdCkge1xuXHRcdFx0ZmFjZXRzVG9DcmVhdGUucHVzaChjdXN0b21IZWFkZXJGYWNldCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNldHNUb0NyZWF0ZTtcblx0fSwgW10pO1xuXG5cdHJldHVybiBmYWNldHNUb0NyZWF0ZS5tYXAoY3VzdG9tSGVhZGVyRmFjZXQgPT4gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9uKGN1c3RvbUhlYWRlckZhY2V0KSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN1YnNlY3Rpb24gYmFzZWQgb24gYSBjdXN0b20gaGVhZGVyIGZhY2V0LlxuICpcbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldCBBIGN1c3RvbSBoZWFkZXIgZmFjZXRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0UGFnZVN1YlNlY3Rpb259IEEgZGVmaW5pdGlvbiBmb3IgYSBzdWJzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbihjdXN0b21IZWFkZXJGYWNldDogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0KTogT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzdWJTZWN0aW9uSUQgPSBDdXN0b21TdWJTZWN0aW9uSUQoY3VzdG9tSGVhZGVyRmFjZXQua2V5KTtcblx0Y29uc3Qgc3ViU2VjdGlvbjogWE1MRnJhZ21lbnRTdWJTZWN0aW9uID0ge1xuXHRcdGlkOiBzdWJTZWN0aW9uSUQsXG5cdFx0a2V5OiBjdXN0b21IZWFkZXJGYWNldC5rZXksXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0LnRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50LFxuXHRcdHRlbXBsYXRlOiBjdXN0b21IZWFkZXJGYWNldC50ZW1wbGF0ZUVkaXQgfHwgXCJcIixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldC52aXNpYmxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHNpZGVDb250ZW50OiB1bmRlZmluZWQsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXQuc3Rhc2hlZCxcblx0XHRmbGV4U2V0dGluZ3M6IGN1c3RvbUhlYWRlckZhY2V0LmZsZXhTZXR0aW5ncyxcblx0XHRhY3Rpb25zOiB7fVxuXHR9O1xuXHRyZXR1cm4gc3ViU2VjdGlvbjtcbn1cblxuLy8gZnVuY3Rpb24gaXNUYXJnZXRGb3JDb21wbGlhbnQoYW5ub3RhdGlvblBhdGg6IEFubm90YXRpb25QYXRoKSB7XG4vLyBcdHJldHVybiAvLipjb21cXC5zYXBcXC52b2NhYnVsYXJpZXNcXC5VSVxcLnYxXFwuKEZpZWxkR3JvdXB8SWRlbnRpZmljYXRpb258RGF0YVBvaW50fFN0YXR1c0luZm8pLiovLnRlc3QoYW5ub3RhdGlvblBhdGgudmFsdWUpO1xuLy8gfVxuY29uc3QgZ2V0U3ViU2VjdGlvbktleSA9IChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsIGZhbGxiYWNrOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gZmFjZXREZWZpbml0aW9uLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvbi5MYWJlbD8udG9TdHJpbmcoKSB8fCBmYWxsYmFjaztcbn07XG4vKipcbiAqIEFkZHMgRm9ybSBtZW51IGFjdGlvbiB0byBhbGwgZm9ybSBhY3Rpb25zLCByZW1vdmVzIGR1cGxpY2F0ZSBhY3Rpb25zIGFuZCBoaWRkZW4gYWN0aW9ucy5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBhY3Rpb25zIGludm9sdmVkXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdfVxuICovXG5mdW5jdGlvbiBhZGRGb3JtTWVudUFjdGlvbnMoXG5cdGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0Y29uc3QgaGlkZGVuQWN0aW9uczogQmFzZUFjdGlvbltdID0gZ2V0Rm9ybUhpZGRlbkFjdGlvbnMoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSB8fCBbXSxcblx0XHRmb3JtQWN0aW9uczogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiA9IGdldEZvcm1BY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Zm9ybUFsbEFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdGFjdGlvbnMsXG5cdFx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KGZvcm1BY3Rpb25zLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGlkZGVuQWN0aW9ucylcblx0XHQpO1xuXHRyZXR1cm4gZm9ybUFsbEFjdGlvbnMgPyBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudEZvcm1NZW51QWN0aW9ucyhyZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGZvcm1BbGxBY3Rpb25zKSkgOiBhY3Rpb25zO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYWN0aW9uIGZvcm0gYSBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7Q29udmVydGVyQWN0aW9uW10gfCBCYXNlQWN0aW9uW119IFRoZSBjdXJyZW50IGZhY2V0IGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB8IENvbnZlcnRlckFjdGlvbltdIHtcblx0bGV0IGFjdGlvbnMgPSBuZXcgQXJyYXk8Q29udmVydGVyQWN0aW9uPigpO1xuXHRzd2l0Y2ggKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0YWN0aW9ucyA9IChmYWNldERlZmluaXRpb24uRmFjZXRzLmZpbHRlcihmYWNldERlZmluaXRpb24gPT4gaXNSZWZlcmVuY2VGYWNldChmYWNldERlZmluaXRpb24pKSBhcyBSZWZlcmVuY2VGYWNldFR5cGVzW10pLnJlZHVjZShcblx0XHRcdFx0KGFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLCBmYWNldERlZmluaXRpb24pID0+IGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKGFjdGlvbnMsIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFtdXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGFjdGlvbnMgPSBjcmVhdGVGb3JtQWN0aW9uUmVkdWNlcihbXSwgZmFjZXREZWZpbml0aW9uIGFzIFJlZmVyZW5jZUZhY2V0VHlwZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0cmV0dXJuIGFkZEZvcm1NZW51QWN0aW9ucyhhY3Rpb25zLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xufVxuLyoqXG4gKiBSZXRydW5zIHRoZSBidXR0b24gdHlwZSBiYXNlZCBvbiBAVUkuRW1waGFzaXplZCBhbm5vdGF0aW9uLlxuICogQHBhcmFtIEVtcGhhc2l6ZWQgRW1waGFzaXplZCBhbm5vdGF0aW9uIHZhbHVlLlxuICogQHJldHVybnMge0J1dHRvblR5cGUgfCBzdHJpbmd9IFRoZSBidXR0b24gdHlwZSBvciBwYXRoIGJhc2VkIGV4cHJlc3Npb24uXG4gKi9cbmZ1bmN0aW9uIGdldEJ1dHRvblR5cGUoRW1waGFzaXplZDogRW1waGFzaXplZCk6IEJ1dHRvblR5cGUgfCBzdHJpbmcge1xuXHRjb25zdCBQYXRoRm9yQnV0dG9uVHlwZTogc3RyaW5nID0gRW1waGFzaXplZD8ucGF0aDtcblx0aWYgKFBhdGhGb3JCdXR0b25UeXBlKSB7XG5cdFx0cmV0dXJuIFwiez0gXCIgKyBcIiEke1wiICsgUGF0aEZvckJ1dHRvblR5cGUgKyBcIn0gPyAnXCIgKyBCdXR0b25UeXBlLlRyYW5zcGFyZW50ICsgXCInIDogJHtcIiArIFBhdGhGb3JCdXR0b25UeXBlICsgXCJ9XCIgKyBcIn1cIjtcblx0fSBlbHNlIGlmIChFbXBoYXNpemVkKSB7XG5cdFx0cmV0dXJuIEJ1dHRvblR5cGUuR2hvc3Q7XG5cdH1cblx0cmV0dXJuIEJ1dHRvblR5cGUuVHJhbnNwYXJlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgc3Vic2VjdGlvbiBiYXNlZCBvbiBGYWNldFR5cGVzLlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGZhY2V0c1RvQ3JlYXRlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxldmVsXG4gKiBAcGFyYW0gaGFzU2luZ2xlQ29udGVudFxuICogQHBhcmFtIGlzSGVhZGVyU2VjdGlvblxuICogQHJldHVybnMge09iamVjdFBhZ2VTdWJTZWN0aW9ufSBBIHN1YnNlY3Rpb24gZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3ViU2VjdGlvbihcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRmYWNldHNUb0NyZWF0ZTogRmFjZXRUeXBlc1tdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsZXZlbDogbnVtYmVyLFxuXHRoYXNTaW5nbGVDb250ZW50OiBib29sZWFuLFxuXHRpc0hlYWRlclNlY3Rpb24/OiBib29sZWFuXG4pOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB7XG5cdGNvbnN0IHN1YlNlY3Rpb25JRCA9IFN1YlNlY3Rpb25JRCh7IEZhY2V0OiBmYWNldERlZmluaXRpb24gfSk7XG5cdGNvbnN0IG9IaWRkZW5Bbm5vdGF0aW9uOiBhbnkgPSBmYWNldERlZmluaXRpb24uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdGNvbnN0IGlzVmlzaWJsZSA9IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbCh0cnVlLCBhbm5vdGF0aW9uRXhwcmVzc2lvbihvSGlkZGVuQW5ub3RhdGlvbikpKSk7XG5cdGNvbnN0IGlzRHluYW1pY0V4cHJlc3Npb24gPVxuXHRcdGlzVmlzaWJsZSAmJiB0eXBlb2YgaXNWaXNpYmxlID09PSBcInN0cmluZ1wiICYmIGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgPT09IDAgJiYgIShvSGlkZGVuQW5ub3RhdGlvbj8udHlwZSA9PT0gXCJQYXRoXCIpO1xuXHRjb25zdCBpc1Zpc2libGVEeW5hbWljRXhwcmVzc2lvbiA9XG5cdFx0aXNWaXNpYmxlICYmIGlzRHluYW1pY0V4cHJlc3Npb24gPyBpc1Zpc2libGUuc3Vic3RyaW5nKGlzVmlzaWJsZS5pbmRleE9mKFwiez1cIikgKyAyLCBpc1Zpc2libGUubGFzdEluZGV4T2YoXCJ9XCIpKSA6IGZhbHNlO1xuXHRjb25zdCB0aXRsZSA9IGNvbXBpbGVCaW5kaW5nKGFubm90YXRpb25FeHByZXNzaW9uKGZhY2V0RGVmaW5pdGlvbi5MYWJlbCkpO1xuXHRjb25zdCBzdWJTZWN0aW9uOiBCYXNlU3ViU2VjdGlvbiA9IHtcblx0XHRpZDogc3ViU2VjdGlvbklELFxuXHRcdGtleTogZ2V0U3ViU2VjdGlvbktleShmYWNldERlZmluaXRpb24sIHN1YlNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IHRpdGxlLFxuXHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLlVua25vd24sXG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHR2aXNpYmxlOiBpc1Zpc2libGUsXG5cdFx0aXNWaXNpYmlsaXR5RHluYW1pYzogaXNEeW5hbWljRXhwcmVzc2lvbixcblx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0c2lkZUNvbnRlbnQ6IHVuZGVmaW5lZFxuXHR9O1xuXHRpZiAoaXNIZWFkZXJTZWN0aW9uKSB7XG5cdFx0c3ViU2VjdGlvbi5zdGFzaGVkID0gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdHN1YlNlY3Rpb24uZmxleFNldHRpbmdzID0ge1xuXHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0XHR9O1xuXHR9XG5cdGxldCBjb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj4gPSBbXTtcblx0Y29uc3QgdGFibGVDb250ZW50OiBBcnJheTxPYmplY3RQYWdlU3ViU2VjdGlvbj4gPSBbXTtcblx0Y29uc3QgaW5kZXg6IEFycmF5PG51bWJlcj4gPSBbXTtcblx0bGV0IHVuc3VwcG9ydGVkVGV4dCA9IFwiXCI7XG5cdGxldmVsKys7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQ6XG5cdFx0XHRjb25zdCBmYWNldHMgPSBmYWNldERlZmluaXRpb24uRmFjZXRzO1xuXHRcdFx0aWYgKGhhc1RhYmxlKGZhY2V0cykpIHtcblx0XHRcdFx0Ly8gaWYgd2UgaGF2ZSB0YWJsZXMgaW4gYSBjb2xsZWN0aW9uIGZhY2V0IHRoZW4gd2UgY3JlYXRlIHNlcGFyYXRlIHN1YnNlY3Rpb24gZm9yIHRoZW1cblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBmYWNldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRpZiAodGFyZ2V0VGVybXMuaW5kZXhPZigoZmFjZXRzW2ldIGFzIGFueSkuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHQvL2NyZWF0aW5nIHNlcGFyYXRlIGFycmF5IGZvciB0YWJsZXNcblx0XHRcdFx0XHRcdHRhYmxlQ29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXRzW2ldLCBbXSwgY29udmVydGVyQ29udGV4dCwgbGV2ZWwsIGZhY2V0cy5sZW5ndGggPT09IDEsIGlzSGVhZGVyU2VjdGlvbikpO1xuXHRcdFx0XHRcdFx0aW5kZXgucHVzaChpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChsZXQgaSA9IGluZGV4Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0Ly9yZW1vdmUgdGFibGUgZmFjZXRzIGZyb20gZmFjZXQgZGVmaW5pdGlvblxuXHRcdFx0XHRcdGZhY2V0cy5zcGxpY2UoaW5kZXhbaV0sIDEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmYWNldHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLkZhY2V0cyA9IGZhY2V0cztcblx0XHRcdFx0XHQvL2NyZWF0ZSBhIGZvcm0gc3Vic2VjdGlvbiBmcm9tIHRoZSByZW1haW5pbmcgZmFjZXRzXG5cdFx0XHRcdFx0Y29udGVudC5wdXNoKGNyZWF0ZVN1YlNlY3Rpb24oZmFjZXREZWZpbml0aW9uLCBbXSwgY29udmVydGVyQ29udGV4dCwgbGV2ZWwsIGhhc1NpbmdsZUNvbnRlbnQsIGlzSGVhZGVyU2VjdGlvbikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRlbnQgPSBjb250ZW50LmNvbmNhdCh0YWJsZUNvbnRlbnQpO1xuXHRcdFx0XHRjb25zdCBtaXhlZFN1YlNlY3Rpb246IE1peGVkU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdHR5cGU6IFN1YlNlY3Rpb25UeXBlLk1peGVkLFxuXHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRjb250ZW50OiBjb250ZW50XG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiBtaXhlZFN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25zID0gZ2V0RmFjZXRBY3Rpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0Zm9ybUNvbGxlY3Rpb25TdWJTZWN0aW9uOiBGb3JtU3ViU2VjdGlvbiA9IHtcblx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Gb3JtLFxuXHRcdFx0XHRcdFx0Zm9ybURlZmluaXRpb246IGNyZWF0ZUZvcm1EZWZpbml0aW9uKGZhY2V0RGVmaW5pdGlvbiwgaXNWaXNpYmxlLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zKSxcblx0XHRcdFx0XHRcdGxldmVsOiBsZXZlbCxcblx0XHRcdFx0XHRcdGFjdGlvbnM6IGFjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24uZmFjZXROYW1lID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIGZvcm1Db2xsZWN0aW9uU3ViU2VjdGlvbjtcblx0XHRcdH1cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aWYgKCFmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gYFVuYWJsZSB0byBmaW5kIGFubm90YXRpb25QYXRoICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybSkge1xuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW06XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5DaGFydDpcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50OlxuXHRcdFx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRcdFx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdFx0XHRnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoZmFjZXREZWZpbml0aW9uLCBmYWNldHNUb0NyZWF0ZSwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0aXNIZWFkZXJTZWN0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0bGV0IGNvbnRyb2xUaXRsZSA9IChwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gYXMgYW55KT8uYW5ub3RhdGlvbj8udGl0bGU7XG5cdFx0XHRcdFx0XHRjb250cm9sVGl0bGUgPyBjb250cm9sVGl0bGUgOiAoY29udHJvbFRpdGxlID0gKHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1swXSBhcyBhbnkpPy50aXRsZSk7XG5cdFx0XHRcdFx0XHRjb25zdCBzaG93VGl0bGUgPSBpc1N1YnNlY3Rpb25UaXRsZVNob3duKGhhc1NpbmdsZUNvbnRlbnQsIHN1YlNlY3Rpb24udGl0bGUsIGNvbnRyb2xUaXRsZSk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHQuLi5zdWJTZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5EYXRhVmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHRcdFx0bGV2ZWw6IGxldmVsLFxuXHRcdFx0XHRcdFx0XHRwcmVzZW50YXRpb246IHByZXNlbnRhdGlvbixcblx0XHRcdFx0XHRcdFx0c2hvd1RpdGxlOiBzaG93VGl0bGUsXG5cdFx0XHRcdFx0XHRcdHRpdGxlVmlzaWJsZTogaXNEeW5hbWljRXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0XHRcdD8gXCJ7PSAoXCIgK1xuXHRcdFx0XHRcdFx0XHRcdCAgaXNWaXNpYmxlRHluYW1pY0V4cHJlc3Npb24gK1xuXHRcdFx0XHRcdFx0XHRcdCAgXCIpICYmICgnXCIgK1xuXHRcdFx0XHRcdFx0XHRcdCAgdGl0bGUgK1xuXHRcdFx0XHRcdFx0XHRcdCAgXCInICE9PSd1bmRlZmluZWQnKSAmJiAoXCIgK1xuXHRcdFx0XHRcdFx0XHRcdCAgc2hvd1RpdGxlICtcblx0XHRcdFx0XHRcdFx0XHQgIFwiID8gdHJ1ZSA6IGZhbHNlKSB9XCJcblx0XHRcdFx0XHRcdFx0XHQ6IGlzVmlzaWJsZSAmJiB0aXRsZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiAodGl0bGUgPyBpc1Zpc2libGUgOiBmYWxzZSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwOlxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuSWRlbnRpZmljYXRpb246XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5EYXRhUG9pbnQ6XG5cdFx0XHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5TdGF0dXNJbmZvOlxuXHRcdFx0XHRcdGNhc2UgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UZXJtcy5Db250YWN0OlxuXHRcdFx0XHRcdFx0Ly8gQWxsIHRob3NlIGVsZW1lbnQgYmVsb25nIHRvIGEgZm9ybSBmYWNldFxuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9ucyA9IGdldEZhY2V0QWN0aW9ucyhmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRmb3JtRWxlbWVudFN1YlNlY3Rpb246IEZvcm1TdWJTZWN0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHRcdC4uLnN1YlNlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogU3ViU2VjdGlvblR5cGUuRm9ybSxcblx0XHRcdFx0XHRcdFx0XHRsZXZlbDogbGV2ZWwsXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybURlZmluaXRpb246IGNyZWF0ZUZvcm1EZWZpbml0aW9uKGZhY2V0RGVmaW5pdGlvbiwgaXNWaXNpYmxlLCBjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25zKSxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb25zOiBhY3Rpb25zLmZpbHRlcihhY3Rpb24gPT4gYWN0aW9uLmZhY2V0TmFtZSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZvcm1FbGVtZW50U3ViU2VjdGlvbjtcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR1bnN1cHBvcnRlZFRleHQgPSBgRm9yICR7ZmFjZXREZWZpbml0aW9uLlRhcmdldC4kdGFyZ2V0LnRlcm19IEZyYWdtZW50YDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0OlxuXHRcdFx0dW5zdXBwb3J0ZWRUZXh0ID0gXCJGb3IgUmVmZXJlbmNlIFVSTCBGYWNldFwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdC8vIElmIHdlIHJlYWNoIGhlcmUgd2UgZW5kZWQgdXAgd2l0aCBhbiB1bnN1cHBvcnRlZCBTdWJTZWN0aW9uIHR5cGVcblx0Y29uc3QgdW5zdXBwb3J0ZWRTdWJTZWN0aW9uOiBVbnN1cHBvcnRlZFN1YlNlY3Rpb24gPSB7XG5cdFx0Li4uc3ViU2VjdGlvbixcblx0XHR0ZXh0OiB1bnN1cHBvcnRlZFRleHRcblx0fTtcblx0cmV0dXJuIHVuc3VwcG9ydGVkU3ViU2VjdGlvbjtcbn1cbmZ1bmN0aW9uIGlzU3Vic2VjdGlvblRpdGxlU2hvd24oaGFzU2luZ2xlQ29udGVudDogYm9vbGVhbiwgc3ViU2VjdGlvblRpdGxlOiBCaW5kaW5nRXhwcmVzc2lvbjxzdHJpbmc+LCBjb250cm9sVGl0bGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRpZiAoaGFzU2luZ2xlQ29udGVudCAmJiBjb250cm9sVGl0bGUgPT09IHN1YlNlY3Rpb25UaXRsZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyKFxuXHRhY3Rpb25zOiBDb252ZXJ0ZXJBY3Rpb25bXSxcblx0ZmFjZXREZWZpbml0aW9uOiBSZWZlcmVuY2VGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDb252ZXJ0ZXJBY3Rpb25bXSB7XG5cdGNvbnN0IHJlZmVyZW5jZVRhcmdldDogQW5ub3RhdGlvblRlcm08YW55PiA9IGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQuJHRhcmdldDtcblx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlO1xuXHRsZXQgbWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cdGxldCBkYXRhRmllbGRDb2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gPSBbXTtcblx0bGV0IFtuYXZpZ2F0aW9uUHJvcGVydHlQYXRoXTogYW55ID0gdGFyZ2V0VmFsdWUuc3BsaXQoXCJAXCIpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPiAwKSB7XG5cdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID09PSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpIHtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLnN1YnN0cigwLCBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCAtIDEpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKHJlZmVyZW5jZVRhcmdldCkge1xuXHRcdHN3aXRjaCAocmVmZXJlbmNlVGFyZ2V0LnRlcm0pIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cDpcblx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbiA9IChyZWZlcmVuY2VUYXJnZXQgYXMgRmllbGRHcm91cCkuRGF0YTtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb25zID0gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24ocmVmZXJlbmNlVGFyZ2V0KS5hY3Rpb25zLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgYXMgc3RyaW5nXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UZXJtcy5JZGVudGlmaWNhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVGVybXMuU3RhdHVzSW5mbzpcblx0XHRcdFx0aWYgKHJlZmVyZW5jZVRhcmdldC5xdWFsaWZpZXIpIHtcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uID0gcmVmZXJlbmNlVGFyZ2V0IGFzIElkZW50aWZpY2F0aW9uIHwgU3RhdHVzSW5mbztcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRhY3Rpb25zID0gZGF0YUZpZWxkQ29sbGVjdGlvbi5yZWR1Y2UoKGFjdGlvbnMsIGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdGNvbnN0IFVJQW5ub3RhdGlvbjogYW55ID0gZGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk7XG5cdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0XHRpZiAoZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0LmdldERpYWdub3N0aWNzKClcblx0XHRcdFx0XHRcdC5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuTG93LCBJc3N1ZVR5cGUuTUFMRk9STUVEX0RBVEFGSUVMRF9GT1JfSUJOLlJFUVVJUkVTQ09OVEVYVCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5JbmxpbmU/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5JTkxJTkUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuRGV0ZXJtaW5pbmc/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdC5nZXREaWFnbm9zdGljcygpXG5cdFx0XHRcdFx0XHQuYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkxvdywgSXNzdWVUeXBlLk1BTEZPUk1FRF9EQVRBRklFTERfRk9SX0lCTi5ERVRFUk1JTklORyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbU5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhbnkgPSB7fTtcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5NYXBwaW5nKSB7XG5cdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRpZDogRm9ybUlEKHsgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9LCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0XHRlbmFibGVkOlxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVCaW5kaW5nKGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkpLCB0cnVlKSlcblx0XHRcdFx0XHRcdFx0OiB0cnVlLFxuXHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdFx0YnV0dG9uVHlwZTogZ2V0QnV0dG9uVHlwZShVSUFubm90YXRpb24/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdHByZXNzOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGZuKFwiLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVcIiwgW1xuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuQWN0aW9uKSxcblx0XHRcdFx0XHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogY29tcGlsZUJpbmRpbmcoe1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCksXG5cdFx0XHRcdFx0XHRhY3Rpb246IGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBY3Rpb246XG5cdFx0XHRcdGNvbnN0IGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uOiBhbnkgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24ocmVmZXJlbmNlVGFyZ2V0KS5hY3Rpb25zO1xuXHRcdFx0XHRjb25zdCBrZXk6IHN0cmluZyA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdFx0YWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0XHRpZDogRm9ybUlEKHsgRmFjZXQ6IGZhY2V0RGVmaW5pdGlvbiB9LCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdGtleToga2V5LFxuXHRcdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHRcdFx0XHRlbmFibGVkOiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0XHRiaW5kaW5nOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8gXCJ7ICdwYXRoJyA6ICdcIiArIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggKyBcIid9XCIgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0XHRyZXF1aXJlc0RpYWxvZzogaXNEaWFsb2coZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdFx0YnV0dG9uVHlwZTogZ2V0QnV0dG9uVHlwZShVSUFubm90YXRpb24/LkVtcGhhc2l6ZWQpLFxuXHRcdFx0XHRcdHByZXNzOiBjb21waWxlQmluZGluZyhcblx0XHRcdFx0XHRcdGZuKFxuXHRcdFx0XHRcdFx0XHRcImludm9rZUFjdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0czogZm4oXCJnZXRCaW5kaW5nQ29udGV4dFwiLCBbXSwgYmluZGluZ0V4cHJlc3Npb24oXCJcIiwgXCIkc291cmNlXCIpKSxcblx0XHRcdFx0XHRcdFx0XHRcdGludm9jYXRpb25Hcm91cGluZzogKGRhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgPT09IFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlL0NoYW5nZVNldFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gXCJDaGFuZ2VTZXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwiSXNvbGF0ZWRcIikgYXMgT3BlcmF0aW9uR3JvdXBpbmdUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5MYWJlbCksXG5cdFx0XHRcdFx0XHRcdFx0XHRtb2RlbDogZm4oXCJnZXRNb2RlbFwiLCBbXSwgYmluZGluZ0V4cHJlc3Npb24oXCIvXCIsIFwiJHNvdXJjZVwiKSksXG5cdFx0XHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogaXNBY3Rpb25OYXZpZ2FibGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uICYmIGZvcm1NYW5pZmVzdEFjdGlvbnNDb25maWd1cmF0aW9uW2tleV1cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdHJlZihcIi5lZGl0Rmxvd1wiKVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZmFjZXROYW1lOiBkYXRhRmllbGQuSW5saW5lID8gKGZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgYXMgc3RyaW5nKSA6IHVuZGVmaW5lZFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBhY3Rpb25zO1xuXHR9LCBhY3Rpb25zKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKGFjdGlvbnMsIG1hbmlmZXN0QWN0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpYWxvZyhhY3Rpb25EZWZpbml0aW9uOiBhbnkgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRpZiAoYWN0aW9uRGVmaW5pdGlvbikge1xuXHRcdGNvbnN0IGJDcml0aWNhbCA9IGFjdGlvbkRlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNBY3Rpb25Dcml0aWNhbDtcblx0XHRpZiAoYWN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA+IDEgfHwgYkNyaXRpY2FsKSB7XG5cdFx0XHRyZXR1cm4gXCJEaWFsb2dcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zKFxuXHRtYW5pZmVzdFN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21PYmplY3RQYWdlU3ViU2VjdGlvbj4ge1xuXHRjb25zdCBzdWJTZWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24+ID0ge307XG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0U3ViU2VjdGlvbnMpLmZvckVhY2goXG5cdFx0c3ViU2VjdGlvbktleSA9PlxuXHRcdFx0KHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihtYW5pZmVzdFN1YlNlY3Rpb25zW3N1YlNlY3Rpb25LZXldLCBzdWJTZWN0aW9uS2V5LCBjb252ZXJ0ZXJDb250ZXh0KSlcblx0KTtcblx0cmV0dXJuIHN1YlNlY3Rpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbihcblx0bWFuaWZlc3RTdWJTZWN0aW9uOiBNYW5pZmVzdFN1YlNlY3Rpb24sXG5cdHN1YlNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ3VzdG9tT2JqZWN0UGFnZVN1YlNlY3Rpb24ge1xuXHRjb25zdCBzaWRlQ29udGVudDogU2lkZUNvbnRlbnREZWYgfCB1bmRlZmluZWQgPSBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnRcblx0XHQ/IHtcblx0XHRcdFx0dGVtcGxhdGU6IG1hbmlmZXN0U3ViU2VjdGlvbi5zaWRlQ29udGVudC50ZW1wbGF0ZSxcblx0XHRcdFx0aWQ6IFNpZGVDb250ZW50SUQoc3ViU2VjdGlvbktleSksXG5cdFx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0XHRlcXVhbFNwbGl0OiBtYW5pZmVzdFN1YlNlY3Rpb24uc2lkZUNvbnRlbnQuZXF1YWxTcGxpdFxuXHRcdCAgfVxuXHRcdDogdW5kZWZpbmVkO1xuXHRsZXQgcG9zaXRpb24gPSBtYW5pZmVzdFN1YlNlY3Rpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHRjb25zdCBzdWJTZWN0aW9uRGVmaW5pdGlvbiA9IHtcblx0XHR0eXBlOiBTdWJTZWN0aW9uVHlwZS5Vbmtub3duLFxuXHRcdGlkOiBtYW5pZmVzdFN1YlNlY3Rpb24uaWQgfHwgQ3VzdG9tU3ViU2VjdGlvbklEKHN1YlNlY3Rpb25LZXkpLFxuXHRcdGFjdGlvbnM6IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RTdWJTZWN0aW9uLmFjdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGtleTogc3ViU2VjdGlvbktleSxcblx0XHR0aXRsZTogbWFuaWZlc3RTdWJTZWN0aW9uLnRpdGxlLFxuXHRcdGxldmVsOiAxLFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBtYW5pZmVzdFN1YlNlY3Rpb24udmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gbWFuaWZlc3RTdWJTZWN0aW9uLnZpc2libGUgOiB0cnVlLFxuXHRcdHNpZGVDb250ZW50OiBzaWRlQ29udGVudFxuXHR9O1xuXHRpZiAobWFuaWZlc3RTdWJTZWN0aW9uLnRlbXBsYXRlIHx8IG1hbmlmZXN0U3ViU2VjdGlvbi5uYW1lKSB7XG5cdFx0c3ViU2VjdGlvbkRlZmluaXRpb24udHlwZSA9IFN1YlNlY3Rpb25UeXBlLlhNTEZyYWdtZW50O1xuXHRcdCgoc3ViU2VjdGlvbkRlZmluaXRpb24gYXMgdW5rbm93bikgYXMgWE1MRnJhZ21lbnRTdWJTZWN0aW9uKS50ZW1wbGF0ZSA9XG5cdFx0XHRtYW5pZmVzdFN1YlNlY3Rpb24udGVtcGxhdGUgfHwgbWFuaWZlc3RTdWJTZWN0aW9uLm5hbWUgfHwgXCJcIjtcblx0fSBlbHNlIHtcblx0XHRzdWJTZWN0aW9uRGVmaW5pdGlvbi50eXBlID0gU3ViU2VjdGlvblR5cGUuUGxhY2Vob2xkZXI7XG5cdH1cblx0cmV0dXJuIHN1YlNlY3Rpb25EZWZpbml0aW9uIGFzIEN1c3RvbU9iamVjdFBhZ2VTdWJTZWN0aW9uO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlIGlmIHRoZSBjb25kZW5zZWQgbW9kZSBjYW4gYmUgYXBwbGkzZWQgb24gdGhlIHRhYmxlLlxuICpcbiAqIEBwYXJhbSBjdXJyZW50RmFjZXRcbiAqIEBwYXJhbSBmYWNldHNUb0NyZWF0ZUluU2VjdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGZvciBjb21wbGlhbnQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5mdW5jdGlvbiBnZXRDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFuY2UoXG5cdGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcyxcblx0ZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGlmIChtYW5pZmVzdFdyYXBwZXIudXNlSWNvblRhYkJhcigpKSB7XG5cdFx0Ly8gSWYgdGhlIE9QIHVzZSB0aGUgdGFiIGJhc2VkIHdlIGNoZWNrIGlmIHRoZSBmYWNldHMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHRoaXMgc2VjdGlvbiBhcmUgYWxsIG5vbiB2aXNpYmxlXG5cdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uRmFjZXRzPy5sZW5ndGggJiYgZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubGVuZ3RoID4gMSkge1xuXHRcdFx0cmV0dXJuIGhhc05vT3RoZXJWaXNpYmxlVGFibGVJblRhcmdldHMoY3VycmVudEZhY2V0LCBmYWNldHNUb0NyZWF0ZUluU2VjdGlvbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBoYXNOb090aGVyVmlzaWJsZVRhYmxlSW5UYXJnZXRzKGN1cnJlbnRGYWNldDogRmFjZXRUeXBlcywgZmFjZXRzVG9DcmVhdGVJblNlY3Rpb246IEZhY2V0VHlwZXNbXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZmFjZXRzVG9DcmVhdGVJblNlY3Rpb24uZXZlcnkoZnVuY3Rpb24oc3ViRmFjZXQpIHtcblx0XHRpZiAoc3ViRmFjZXQgIT09IGN1cnJlbnRGYWNldCkge1xuXHRcdFx0aWYgKHN1YkZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCkge1xuXHRcdFx0XHRjb25zdCByZWZGYWNldCA9IHN1YkZhY2V0IGFzIFJlZmVyZW5jZUZhY2V0VHlwZXM7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZWZGYWNldC5UYXJnZXQ/LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtIHx8XG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50IHx8XG5cdFx0XHRcdFx0cmVmRmFjZXQuVGFyZ2V0LiR0YXJnZXQ/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuICE9PSB1bmRlZmluZWQgPyByZWZGYWNldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiA6IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc3ViQ29sbGVjdGlvbkZhY2V0ID0gc3ViRmFjZXQgYXMgQ29sbGVjdGlvbkZhY2V0VHlwZXM7XG5cdFx0XHRcdHJldHVybiBzdWJDb2xsZWN0aW9uRmFjZXQuRmFjZXRzLmV2ZXJ5KGZ1bmN0aW9uKGZhY2V0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3ViUmVmRmFjZXQgPSBmYWNldCBhcyBSZWZlcmVuY2VGYWNldFR5cGVzO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW0gfHxcblx0XHRcdFx0XHRcdHN1YlJlZkZhY2V0LlRhcmdldD8uJHRhcmdldD8udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudCB8fFxuXHRcdFx0XHRcdFx0c3ViUmVmRmFjZXQuVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViUmVmRmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4gIT09IHVuZGVmaW5lZCA/IHN1YlJlZkZhY2V0LmFubm90YXRpb25zPy5VST8uSGlkZGVuIDogZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pO1xufVxuIl19
|