@sapui5/sap.fe.core 1.121.2 → 1.123.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +1 -2
- package/src/sap/fe/core/CommonUtils.js +14 -171
- package/src/sap/fe/core/CommonUtils.ts +15 -221
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +16 -0
- package/src/sap/fe/core/TemplateComponent.js +6 -1
- package/src/sap/fe/core/TemplateComponent.ts +8 -0
- package/src/sap/fe/core/UIProvider.js +23 -0
- package/src/sap/fe/core/UIProvider.ts +38 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
- package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
- package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
- package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
- package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
- package/src/sap/fe/core/controllerextensions/Share.js +7 -7
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
- package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
- package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
- package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
- package/src/sap/fe/core/converters/ConverterContext.js +17 -9
- package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
- package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
- package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
- package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
- package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
- package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
- package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
- package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
- package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
- package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
- package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
- package/src/sap/fe/core/converters/helpers/Key.js +2 -2
- package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
- package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
- package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
- package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
- package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
- package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
- package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
- package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
- package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
- package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
- package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
- package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
- package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
- package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
- package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
- package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
- package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
- package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
- package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
- package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +5 -2
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_en.properties +267 -2
- package/src/sap/fe/core/messagebundle_sl.properties +1 -1
- package/src/sap/fe/core/operationsHelper.js +2 -1
- package/src/sap/fe/core/operationsHelper.ts +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
- package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
- package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
- package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
- package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
- package/src/sap/fe/core/templating/FilterHelper.js +13 -10
- package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
- package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
- package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
- package/src/sap/fe/core/templating/UIFormatters.js +23 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/EDM.ts +2 -2
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +2 -2
|
@@ -668,7 +668,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/uid", "
|
|
|
668
668
|
} else {
|
|
669
669
|
requireOnMacro = coreRequire;
|
|
670
670
|
}
|
|
671
|
-
oMacroElement.setAttributeNS("sap.ui.core", "require", requireOnMacro);
|
|
671
|
+
oMacroElement.setAttributeNS("sap.ui.core", "core:require", requireOnMacro);
|
|
672
672
|
}
|
|
673
673
|
}
|
|
674
674
|
}
|
|
@@ -944,4 +944,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/uid", "
|
|
|
944
944
|
_exports.xml = xml;
|
|
945
945
|
return _exports;
|
|
946
946
|
}, false);
|
|
947
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0dHRVJfU0NPUEUiLCJYTUxURU1QTEFUSU5HX05TIiwiRE9NUGFyc2VySW5zdGFuY2UiLCJET01QYXJzZXIiLCJ2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0Iiwic05hbWUiLCJtQ29udGV4dHMiLCJvQ29udGV4dFNldHRpbmdzIiwic0tleSIsIm9Db250ZXh0Iiwib0NvbnRleHRPYmplY3QiLCJnZXRPYmplY3QiLCJyZXF1aXJlZCIsIkVycm9yIiwiaGFzT3duUHJvcGVydHkiLCIka2luZCIsInVuZGVmaW5lZCIsImV4cGVjdGVkVHlwZXMiLCJpbmNsdWRlcyIsImdldFBhdGgiLCIkVHlwZSIsImV4cGVjdGVkQW5ub3RhdGlvblR5cGVzIiwidmFsaWRhdGVNYWNyb1NpZ25hdHVyZSIsIm9NZXRhZGF0YSIsIm9Ob2RlIiwiYU1ldGFkYXRhQ29udGV4dEtleXMiLCJtZXRhZGF0YUNvbnRleHRzIiwiT2JqZWN0Iiwia2V5cyIsImFQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIm9BdHRyaWJ1dGVOYW1lcyIsImF0dHJpYnV0ZU5hbWVzIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJhdHRyaWJ1dGVOYW1lIiwiZm9yRWFjaCIsIm9Qcm9wZXJ0eVNldHRpbmdzIiwiaGFzQXR0cmlidXRlIiwic3RhcnRzV2l0aCIsIkxvZyIsIndhcm5pbmciLCJTQVBfVUlfQ09SRV9FTEVNRU5UIiwiU0FQX1VJX01PREVMX0NPTlRFWFQiLCJ0cmFuc2Zvcm1NZXRhZGF0YSIsImJ1aWxkaW5nQmxvY2tNZXRhZGF0YSIsImFnZ3JlZ2F0aW9ucyIsImRlcGVuZGVudHMiLCJ0eXBlIiwic2xvdCIsImlzUHVibGljIiwiY3VzdG9tRGF0YSIsImxheW91dERhdGEiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyIsIm9TZXR0aW5ncyIsInNBdHRyaWJ1dGVWYWx1ZSIsInNNZXRhUGF0aCIsInNDb250ZXh0UGF0aCIsImN1cnJlbnRDb250ZXh0UGF0aCIsImVuZHNXaXRoIiwibW9kZWwiLCJwYXRoIiwiX2NyZWF0ZUluaXRpYWxNZXRhZGF0YUNvbnRleHQiLCJzQXR0cmlidXRlTmFtZSIsInJldHVybkNvbnRleHQiLCJtb2RlbHMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJkYXRhIiwidW5zdG9yZU9iamVjdFZhbHVlIiwic2V0UHJvcGVydHkiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJfZ2V0TWV0YWRhdGFDb250ZXh0Iiwib1Zpc2l0b3IiLCJiRG9Ob3RSZXNvbHZlIiwiaXNPcGVuIiwib01ldGFkYXRhQ29udGV4dCIsImdldEF0dHJpYnV0ZSIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiZ2V0Q29udGV4dCIsImUiLCJwcm9jZXNzUHJvcGVydGllcyIsImRlZmluaXRpb25Qcm9wZXJ0aWVzIiwiYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyIsInByb3BlcnR5VmFsdWVzIiwic0tleVZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiZGVlcENsb25lIiwiZXJyb3IiLCJ2aXNpdEF0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJnZXROYW1lZEl0ZW0iLCJ2YWx1ZSIsIk51bWJlciIsInByb2Nlc3NDb250ZXh0cyIsImNvbnRleHRQYXRoIiwibU1pc3NpbmdDb250ZXh0Iiwib0RlZmluaXRpb25Db250ZXh0cyIsImFEZWZpbml0aW9uQ29udGV4dHNLZXlzIiwiY29udGV4dFBhdGhJbmRleCIsImluZGV4T2YiLCJjb250ZXh0UGF0aERlZmluaXRpb24iLCJzcGxpY2UiLCJwcm9wZXJ0eVZhbHVlIiwibGVuZ3RoIiwibmFtZSIsImFkZFNpbmdsZUNvbnRleHQiLCJwYXJzZUFnZ3JlZ2F0aW9uIiwib0FnZ3JlZ2F0aW9uIiwicHJvY2Vzc0FnZ3JlZ2F0aW9ucyIsIm9PdXRPYmplY3RzIiwiY2hpbGRyZW4iLCJjaGlsZElkeCIsImNoaWxkRGVmaW5pdGlvbiIsImNoaWxkS2V5Iiwic2V0QXR0cmlidXRlIiwiYWdncmVnYXRpb25PYmplY3QiLCJrZXkiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiYW5jaG9yIiwidGFnTmFtZSIsIm5vZGVOYW1lIiwicHJvY2Vzc0NoaWxkcmVuIiwib0FnZ3JlZ2F0aW9ucyIsImZpcnN0RWxlbWVudENoaWxkIiwib0ZpcnN0RWxlbWVudENoaWxkIiwibmFtZXNwYWNlVVJJIiwib1BhcmVudCIsInBhcmVudE5vZGUiLCJpQ2hpbGRJbmRleCIsIkFycmF5IiwiZnJvbSIsInZpc2l0Tm9kZSIsIm5leHRFbGVtZW50U2libGluZyIsInNDaGlsZE5hbWUiLCJsb2NhbE5hbWUiLCJzQWdncmVnYXRpb25OYW1lIiwidG9VcHBlckNhc2UiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJwYXJzZWRBZ2dyZWdhdGlvbiIsInBhcnNlZEFnZ3JlZ2F0aW9uS2V5Iiwib05leHRDaGlsZCIsIm5leHRDaGlsZCIsImhhc1ZpcnR1YWxOb2RlIiwiY2hpbGRXcmFwcGVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsIm9OZXdDaGlsZCIsImNsb25lTm9kZSIsImFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXMiLCJjaGlsZEluZGV4Iiwic3ViQ2hpbGQiLCJzdWJPYmplY3RLZXkiLCJzdWJPYmplY3QiLCJzdWJDaGlsZEF0dHJpYnV0ZU5hbWVzIiwic3ViQ2hpbGRBdHRyaWJ1dGVOYW1lIiwibXlDaGlsZCIsInB1c2giLCJwcm9jZXNzU2xvdHMiLCJvTWV0YWRhdGFBZ2dyZWdhdGlvbnMiLCJwcm9jZXNzQ3VzdG9tRGF0YSIsIm9BZ2dyZWdhdGlvbkVsZW1lbnQiLCJvRWxlbWVudENoaWxkIiwic1Nsb3ROYW1lIiwib1RhcmdldEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudCIsInJlcGxhY2VXaXRoIiwicmVwbGFjZSIsInByb2Nlc3NCdWlsZGluZ0Jsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJzRnJhZ21lbnROYW1lIiwiZnJhZ21lbnQiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJ4bWxUYWciLCJnZXRTZXR0aW5ncyIsIkpTT05Nb2RlbCIsImluaXRpYWxLZXlzIiwib0NvbnRyb2xDb25maWciLCJ2aWV3RGF0YSIsInByb2Nlc3NlZFByb3BlcnR5VmFsdWVzIiwicHJvcE5hbWUiLCJvRGF0YSIsIm9yaWdpbmFsRGVmaW5pdGlvbiIsInZhbGlkYXRlIiwiaXNBIiwiZ2V0TW9kZWwiLCJvSW5zdGFuY2UiLCJnZXRQcm9wZXJ0aWVzIiwic0NvbnRleHROYW1lIiwidGFyZ2V0T2JqZWN0IiwiaXNDb250ZXh0IiwiYXR0cmlidXRlVmFsdWUiLCJzdG9yZU9iamVjdFZhbHVlIiwibmV3Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib0F0dHJpYnV0ZXNNb2RlbCIsIkF0dHJpYnV0ZU1vZGVsIiwib1ByZXZpb3VzTWFjcm9JbmZvIiwiY29yZVJlcXVpcmUiLCJUcmFjZUluZm8iLCJpc1RyYWNlSW5mb0FjdGl2ZSIsIm9UcmFjZUluZm8iLCJ0cmFjZU1hY3JvQ2FsbHMiLCJtYWNyb0luZm8iLCJvQ29udGV4dFZpc2l0b3IiLCJ3aXRoIiwib1Byb21pc2UiLCJpbnNlcnRGcmFnbWVudCIsIm9sZEtleXMiLCJ0ZW1wb3JhcnlPYmplY3RTdG9yZSIsInRlbXBsYXRlU3RyaW5nIiwiZ2V0UnVudGltZUJ1aWxkaW5nQmxvY2tUZW1wbGF0ZSIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0VGVtcGxhdGUiLCJpc1J1bnRpbWUiLCJzdG9yZUtleSIsImhhc0Vycm9yIiwiaGFzUGFyc2VFcnJvciIsInBhcnNlZFRlbXBsYXRlIiwicGFyc2VYTUxTdHJpbmciLCJlbGVtZW50IiwiaXRlciIsImNyZWF0ZU5vZGVJdGVyYXRvciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJ0ZXh0bm9kZSIsIm5leHROb2RlIiwidGV4dENvbnRlbnQiLCJ0cmltIiwicHJvY2Vzc1htbEluVHJhY2UiLCJpbml0aWFsVGVtcGxhdGUiLCJvRXJyb3JUZXh0IiwiY3JlYXRlRXJyb3JYTUwiLCJtYXAiLCJ0ZW1wbGF0ZSIsIm91dGVySFRNTCIsImpvaW4iLCJ2aXNpdGVkTm9kZXMiLCJpbnRlcm5hbE5vZGUiLCJQcm9taXNlIiwiYWxsIiwicmVtb3ZlIiwicmVzb2x2ZSIsIm9NYWNyb0VsZW1lbnQiLCJvUmVtYWluaW5nU2xvdHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwib1Nsb3RFbGVtZW50IiwicmVxdWlyZU9uTWFjcm8iLCJnZXRBdHRyaWJ1dGVOUyIsInN1YnN0cmluZyIsInNldEF0dHJpYnV0ZU5TIiwidHJhY2VEZXRhaWxzIiwiaW5pdGlhbFByb3BlcnRpZXMiLCJyZXNvbHZlZFByb3BlcnRpZXMiLCJtaXNzaW5nQ29udGV4dHMiLCJvRXJyb3IiLCJzdGFjayIsIm9UZW1wbGF0ZSIsIm9DdHgiLCJtU2V0dGluZyIsImV4IiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwiWE1MUHJlcHJvY2Vzc29yIiwicGx1Z0luIiwidW5yZWdpc3RlckJ1aWxkaW5nQmxvY2siLCJlcnJvck1lc3NhZ2VzIiwieG1sRnJhZ21lbnQiLCJhZGRpdGlvbmFsRGF0YSIsImVycm9yTGFiZWxzIiwiZXJyb3JNZXNzYWdlIiwieG1sIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJlcnJvclN0YWNrIiwic3RhY2tGb3JtYXR0ZWQiLCJidG9hIiwiYWRkaXRpb25hbFRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZUFsbCIsInByb3BlcnR5VUlEIiwidWlkIiwicHJvY2Vzc05leHRYbWxJblRyYWNlIiwibWV0aG9kIiwicmV0dXJuVmFsdWUiLCJ4bWxTdHJpbmciLCJhZGREZWZhdWx0TmFtZXNwYWNlcyIsInhtbERvY3VtZW50IiwicGFyc2VGcm9tU3RyaW5nIiwib3V0cHV0IiwicGFyZW50RWxlbWVudCIsInJlbmRlckluVHJhY2VNb2RlIiwib3V0U3RyIiwieG1sUmVzdWx0IiwiaW5uZXJUZXh0IiwiaW5uZXJIVE1MIiwic3BsaXQiLCJzdHJpbmdzIiwiaSIsInZhbHVlcyIsImlzQXJyYXkiLCJmbGF0IiwiaXNGdW5jdGlvbkFycmF5IiwidmFsdWVmbiIsImlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwiY29tcGlsZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9wZXJ0eVVJZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEF0dHJpYnV0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0F0dHJpYnV0ZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0QnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24sXG5cdE9iamVjdFZhbHVlLFxuXHRPYmplY3RWYWx1ZTJcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL1J1bnRpbWVCdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNDb250ZXh0LCBpc0Z1bmN0aW9uQXJyYXkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvY29yZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYWNyb0luZm8gfSBmcm9tIFwiLi4vVHJhY2VJbmZvXCI7XG5pbXBvcnQgVHJhY2VJbmZvIGZyb20gXCIuLi9UcmFjZUluZm9cIjtcblxuY29uc3QgTE9HR0VSX1NDT1BFID0gXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuY29uc3QgWE1MVEVNUExBVElOR19OUyA9IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIjtcbmNvbnN0IERPTVBhcnNlckluc3RhbmNlID0gbmV3IERPTVBhcnNlcigpO1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSA9IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSAmIHtcblx0bWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+O1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgbWV0YSBkYXRhIGNvbnRleHRcbiAqL1xudHlwZSBNZXRhRGF0YUNvbnRleHQgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdG1vZGVsOiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGN1cnJlbnRDb250ZXh0UGF0aDogQ29udGV4dDtcblx0aXNQdWJsaWM6IGJvb2xlYW47XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRpc1J1bnRpbWVJbnN0YW50aWF0aW9uPzogYm9vbGVhbjtcblx0bW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbD4gJiB7XG5cdFx0Y29udmVydGVyQ29udGV4dDogSlNPTk1vZGVsO1xuXHRcdHZpZXdEYXRhOiBKU09OTW9kZWw7XG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblx0XHRcInNhcC5mZS5pMThuXCI/OiBSZXNvdXJjZU1vZGVsO1xuXHR9O1xuXHRiaW5kaW5nQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+O1xuXHRfbWFjcm9JbmZvPzogTWFjcm9JbmZvO1xuXHRbazogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIElWaXNpdG9yQ2FsbGJhY2sgPSB7XG5cdGdldFNldHRpbmdzKCk6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdC8qKlxuXHQgKiBWaXNpdHMgdGhlIGdpdmVuIG5vZGUgYW5kIGVpdGhlciBwcm9jZXNzZXMgYSB0ZW1wbGF0ZSBpbnN0cnVjdGlvbiwgY2FsbHNcblx0ICogYSB2aXNpdG9yLCBvciBzaW1wbHkgY2FsbHMgYm90aCB7QGxpbmtcblx0ICogc2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3IuSUNhbGxiYWNrLnZpc2l0QXR0cmlidXRlcyB2aXNpdEF0dHJpYnV0ZXN9XG5cdCAqIGFuZCB7QGxpbmsgc2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3IuSUNhbGxiYWNrLnZpc2l0Q2hpbGROb2Rlc1xuXHQgKiB2aXNpdENoaWxkTm9kZXN9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb05vZGVcblx0ICogICBUaGUgWE1MIERPTSBub2RlXG5cdCAqIEByZXR1cm5zXG5cdCAqICAgQSB0aGVuYWJsZSB3aGljaCByZXNvbHZlcyB3aXRoIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gYXMgc29vbiBhcyB2aXNpdGluZ1xuXHQgKiAgIGlzIGRvbmUsIG9yIGlzIHJlamVjdGVkIHdpdGggYSBjb3JyZXNwb25kaW5nIGVycm9yIGlmIHZpc2l0aW5nIGZhaWxzXG5cdCAqL1xuXHR2aXNpdE5vZGUob05vZGU6IE5vZGUpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKlxuXHQgKiBJbnNlcnRzIHRoZSBmcmFnbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHBsYWNlIG9mIHRoZSBnaXZlbiBlbGVtZW50LiBMb2FkcyB0aGVcblx0ICogZnJhZ21lbnQsIHRha2VzIGNhcmUgb2YgY2FjaGluZyAoZm9yIHRoZSBjdXJyZW50IHByZS1wcm9jZXNzb3IgcnVuKSBhbmQgdmlzaXRzIHRoZVxuXHQgKiBmcmFnbWVudCdzIGNvbnRlbnQgb25jZSBpdCBoYXMgYmVlbiBpbXBvcnRlZCBpbnRvIHRoZSBlbGVtZW50J3Mgb3duZXIgZG9jdW1lbnQgYW5kXG5cdCAqIHB1dCBpbnRvIHBsYWNlLiBMb2FkaW5nIG9mIGZyYWdtZW50cyBpcyBhc3luY2hyb25vdXMgaWYgdGhlIHRlbXBsYXRlIHZpZXcgaXNcblx0ICogYXN5bmNocm9ub3VzLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0ZyYWdtZW50XG5cdCAqICAgdGhlIGZyYWdtZW50J3MgcmVzb2x2ZWQgbmFtZVxuXHQgKiBAcGFyYW0gb0VsZW1lbnRcblx0ICogICB0aGUgWE1MIERPTSBlbGVtZW50LCBlLmcuIDxzYXAudWkuY29yZTpGcmFnbWVudD4gb3IgPGNvcmU6RXh0ZW5zaW9uUG9pbnQ+XG5cdCAqIEBwYXJhbSBvV2l0aFxuXHQgKiAgIHRoZSBwYXJlbnQncyBcIndpdGhcIiBjb250cm9sXG5cdCAqIEByZXR1cm5zXG5cdCAqIEEgc3luYyBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBhcyBzb29uIGFzIHRoZSBmcmFnbWVudFxuXHQgKiAgIGhhcyBiZWVuIGluc2VydGVkLCBvciBpcyByZWplY3RlZCB3aXRoIGEgY29ycmVzcG9uZGluZyBlcnJvciBpZiBsb2FkaW5nIG9yIHZpc2l0aW5nXG5cdCAqICAgZmFpbHMuXG5cdCAqL1xuXHRpbnNlcnRGcmFnbWVudChzRnJhZ21lbnQ6IHN0cmluZywgb0VsZW1lbnQ6IEVsZW1lbnQsIG9XaXRoPzogQ29udHJvbCk6IFByb21pc2U8dm9pZD47XG5cdHZpc2l0QXR0cmlidXRlKG9Ob2RlOiBFbGVtZW50LCBvQXR0cmlidXRlOiBBdHRyKTogUHJvbWlzZTx2b2lkPjtcblx0dmlzaXRBdHRyaWJ1dGVzKG9Ob2RlOiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPjtcblx0Z2V0Vmlld0luZm8oKTogUHJvbWlzZTx1bmtub3duPjtcblx0dmlzaXRDaGlsZE5vZGVzKG9Ob2RlOiBOb2RlKTogUHJvbWlzZTx2b2lkPjtcblx0LyoqXG5cdCAqIEludGVycHJldHMgdGhlIGdpdmVuIFhNTCBET00gYXR0cmlidXRlIHZhbHVlIGFzIGEgYmluZGluZyBhbmQgcmV0dXJucyB0aGVcblx0ICogcmVzdWx0aW5nIHZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1ZhbHVlXG5cdCAqICAgQW4gWE1MIERPTSBhdHRyaWJ1dGUgdmFsdWVcblx0ICogQHBhcmFtIFtlbGVtZW50XVxuXHQgKiAgIFRoZSBYTUwgRE9NIGVsZW1lbnQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiZWxvbmdzIHRvIChuZWVkZWQgb25seSBmb3Jcblx0ICogICB3YXJuaW5ncyB3aGljaCBhcmUgbG9nZ2VkIHRvIHRoZSBjb25zb2xlKVxuXHQgKiBAcmV0dXJuc1xuXHQgKiAgIEEgdGhlbmFibGUgd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0aW5nIHZhbHVlLCBvciBpcyByZWplY3RlZCB3aXRoIGFcblx0ICogICBjb3JyZXNwb25kaW5nIGVycm9yIChmb3IgZXhhbXBsZSwgYW4gZXJyb3IgdGhyb3duIGJ5IGEgZm9ybWF0dGVyKSBvclxuXHQgKiAgIDxjb2RlPm51bGw8L2NvZGU+IGluIGNhc2UgdGhlIGJpbmRpbmcgaXMgbm90IHJlYWR5IChiZWNhdXNlIGl0IHJlZmVycyB0byBhXG5cdCAqICAgbW9kZWwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSkgKHNpbmNlIDEuNTcuMClcblx0ICovXG5cdGdldFJlc3VsdChzVmFsdWU6IHN0cmluZywgZWxlbWVudD86IEVsZW1lbnQpOiBQcm9taXNlPENvbnRleHQ+IHwgbnVsbDtcblx0Z2V0Q29udGV4dChzUGF0aD86IHN0cmluZyk6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgY2FsbGJhY2sgaW50ZXJmYWNlIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gbWFwIG9mIHZhcmlhYmxlcyB3aGljaFxuXHQgKiBvdmVycmlkZSBjdXJyZW50bHkga25vd24gdmFyaWFibGVzIG9mIHRoZSBzYW1lIG5hbWUgaW4gPGNvZGU+dGhpczwvY29kZT5cblx0ICogcGFyZW50IGludGVyZmFjZSBvciByZXBsYWNlIHRoZW0gYWx0b2dldGhlci4gRWFjaCB2YXJpYWJsZSBuYW1lIGJlY29tZXMgYVxuXHQgKiBuYW1lZCBtb2RlbCB3aXRoIGEgY29ycmVzcG9uZGluZyBvYmplY3QgYmluZGluZyBhbmQgY2FuIGJlIHVzZWQgaW5zaWRlIHRoZVxuXHQgKiBYTUwgdGVtcGxhdGUgaW4gdGhlIHVzdWFsIHdheSwgdGhhdCBpcywgd2l0aCBhIGJpbmRpbmcgZXhwcmVzc2lvbiBsaWtlXG5cdCAqIDxjb2RlPlwie3Zhcj5zb21lL3JlbGF0aXZlL3BhdGh9XCI8L2NvZGU+IChzZWUgZXhhbXBsZSkuXG5cdCAqXG5cdCAqIEBwYXJhbSBbbVZhcmlhYmxlcz17fV1cblx0ICogICBNYXAgZnJvbSB2YXJpYWJsZSBuYW1lIChzdHJpbmcpIHRvIHZhbHVlXG5cdCAqIEBwYXJhbSBbYlJlcGxhY2VdXG5cdCAqICAgV2hldGhlciBvbmx5IHRoZSBnaXZlbiB2YXJpYWJsZXMgYXJlIGtub3duIGluIHRoZSBuZXcgY2FsbGJhY2sgaW50ZXJmYWNlXG5cdCAqICAgaW5zdGFuY2UsIG5vIGluaGVyaXRlZCBvbmVzXG5cdCAqIEByZXR1cm5zXG5cdCAqICAgQSBjYWxsYmFjayBpbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG1WYXJpYWJsZXNcblx0ICogQHBhcmFtIGJSZXBsYWNlXG5cdCAqL1xuXHRcIndpdGhcIihtVmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sIGJSZXBsYWNlPzogYm9vbGVhbik6IElWaXNpdG9yQ2FsbGJhY2s7XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0KFxuXHRzTmFtZTogc3RyaW5nLFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+LFxuXHRvQ29udGV4dFNldHRpbmdzOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbixcblx0c0tleTogc3RyaW5nXG4pOiB2b2lkIHtcblx0Y29uc3Qgb0NvbnRleHQgPSBtQ29udGV4dHNbc0tleV07XG5cdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gb0NvbnRleHQ/LmdldE9iamVjdCgpIGFzIHtcblx0XHQkVHlwZT86IHN0cmluZztcblx0XHQka2luZD86IHN0cmluZztcblx0fTtcblxuXHRpZiAob0NvbnRleHRTZXR0aW5ncy5yZXF1aXJlZCA9PT0gdHJ1ZSAmJiAoIW9Db250ZXh0IHx8IG9Db250ZXh0T2JqZWN0ID09PSBudWxsKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgJHtzTmFtZX06IFJlcXVpcmVkIG1ldGFkYXRhQ29udGV4dCAnJHtzS2V5fScgaXMgbWlzc2luZ2ApO1xuXHR9IGVsc2UgaWYgKG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0Ly8gSWYgY29udGV4dCBvYmplY3QgaGFzICRraW5kIHByb3BlcnR5LCAkVHlwZSBzaG91bGQgbm90IGJlIGNoZWNrZWRcblx0XHQvLyBUaGVyZWZvcmUgcmVtb3ZlIGZyb20gY29udGV4dCBzZXR0aW5nc1xuXHRcdGlmIChvQ29udGV4dE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcIiRraW5kXCIpICYmIG9Db250ZXh0T2JqZWN0LiRraW5kICE9PSB1bmRlZmluZWQgJiYgb0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZFR5cGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSAka2luZCBpcyBwYXJ0IG9mIHRoZSBhbGxvd2VkIG9uZXNcblx0XHRcdGlmICghb0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZFR5cGVzLmluY2x1ZGVzKG9Db250ZXh0T2JqZWN0LiRraW5kKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YCR7c05hbWV9OiAnJHtzS2V5fScgbXVzdCBiZSAnJGtpbmQnICcke29Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRUeXBlc30nIGJ1dCBpcyAnJHtcblx0XHRcdFx0XHRcdG9Db250ZXh0T2JqZWN0LiRraW5kXG5cdFx0XHRcdFx0fSc6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b0NvbnRleHRPYmplY3QuaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSAmJlxuXHRcdFx0b0NvbnRleHRPYmplY3QuJFR5cGUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZEFubm90YXRpb25UeXBlc1xuXHRcdCkge1xuXHRcdFx0Ly8gQ2hlY2sgb25seSAkVHlwZVxuXHRcdFx0aWYgKCFvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkQW5ub3RhdGlvblR5cGVzLmluY2x1ZGVzKG9Db250ZXh0T2JqZWN0LiRUeXBlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YCR7c05hbWV9OiAnJHtzS2V5fScgbXVzdCBiZSAnJFR5cGUnICcke29Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXN9JyBidXQgaXMgJyR7XG5cdFx0XHRcdFx0XHRvQ29udGV4dE9iamVjdC4kVHlwZVxuXHRcdFx0XHRcdH0nOiAke29Db250ZXh0LmdldFBhdGgoKX1gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNYWNyb1NpZ25hdHVyZShcblx0c05hbWU6IHN0cmluZyxcblx0b01ldGFkYXRhOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0bUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0Pixcblx0b05vZGU6IEVsZW1lbnRcbik6IHZvaWQge1xuXHRjb25zdCBhTWV0YWRhdGFDb250ZXh0S2V5cyA9IChvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cyAmJiBPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykpIHx8IFtdLFxuXHRcdGFQcm9wZXJ0aWVzID0gKG9NZXRhZGF0YS5wcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5wcm9wZXJ0aWVzKSkgfHwgW10sXG5cdFx0b0F0dHJpYnV0ZU5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdC8vIGNvbGxlY3QgYWxsIGF0dHJpYnV0ZXMgdG8gZmluZCB1bmNoZWNrZWQgcHJvcGVydGllc1xuXHRjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IG9Ob2RlLmdldEF0dHJpYnV0ZU5hbWVzKCk7XG5cdGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBvZiBhdHRyaWJ1dGVOYW1lcykge1xuXHRcdG9BdHRyaWJ1dGVOYW1lc1thdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cdH1cblxuXHQvL0NoZWNrIG1ldGFkYXRhQ29udGV4dHNcblx0YU1ldGFkYXRhQ29udGV4dEtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdGNvbnN0IG9Db250ZXh0U2V0dGluZ3MgPSBvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0c1tzS2V5XTtcblxuXHRcdHZhbGlkYXRlTWFjcm9NZXRhZGF0YUNvbnRleHQoc05hbWUsIG1Db250ZXh0cywgb0NvbnRleHRTZXR0aW5ncywgc0tleSk7XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVOYW1lc1tzS2V5XTtcblx0fSk7XG5cdC8vQ2hlY2sgcHJvcGVydGllc1xuXHRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5U2V0dGluZ3MgPSBvTWV0YWRhdGEucHJvcGVydGllc1tzS2V5XTtcblx0XHRpZiAoIW9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5KSkge1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eVNldHRpbmdzLnJlcXVpcmVkICYmICFvUHJvcGVydHlTZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7c05hbWV9OiBgICsgYFJlcXVpcmVkIHByb3BlcnR5ICcke3NLZXl9JyBpcyBtaXNzaW5nYCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlTmFtZXNbc0tleV07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBVbmNoZWNrZWQgcHJvcGVydGllc1xuXHRPYmplY3Qua2V5cyhvQXR0cmlidXRlTmFtZXMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdC8vIG5vIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdoaWNoIGNvbnRhaW4gYSBjb2xvbiBcIjpcIiAoZGlmZmVyZW50IG5hbWVzcGFjZSksIGUuZy4geG1sbnM6dHJhY2UsIHRyYWNlOm1hY3JvSUQsIHVuaXR0ZXN0OmlkXG5cdFx0aWYgKCFzS2V5LmluY2x1ZGVzKFwiOlwiKSAmJiAhc0tleS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdExvZy53YXJuaW5nKGBVbmNoZWNrZWQgcGFyYW1ldGVyOiAke3NOYW1lfTogJHtzS2V5fWAsIHVuZGVmaW5lZCwgTE9HR0VSX1NDT1BFKTtcblx0XHR9XG5cdH0pO1xufVxuXG5jb25zdCBTQVBfVUlfQ09SRV9FTEVNRU5UID0gXCJzYXAudWkuY29yZS5FbGVtZW50XCI7XG5cbmV4cG9ydCBjb25zdCBTQVBfVUlfTU9ERUxfQ09OVEVYVCA9IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIjtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBtZXRhZGF0YSBvZiBhIGJ1aWxkaW5nIGJsb2NrIGJ5IGFkZGluZyBhZGRpdGlvbmFsIGFnZ3JlZ2F0aW9ucyxcbiAqIGFuZCBzcGxpdHRpbmcgcHJvcGVydGllcyBpbnRvIGFjdHVhbCBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSBjb250ZXh0cy5cbiAqXG4gKiBAcGFyYW0gYnVpbGRpbmdCbG9ja01ldGFkYXRhIFRoZSBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBpbnB1dFxuICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybU1ldGFkYXRhKGJ1aWxkaW5nQmxvY2tNZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhKTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEge1xuXHRjb25zdCBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uPiA9IHt9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24+ID0ge1xuXHRcdGRlcGVuZGVudHM6IHtcblx0XHRcdHR5cGU6IFNBUF9VSV9DT1JFX0VMRU1FTlQsXG5cdFx0XHRzbG90OiBcImRlcGVuZGVudHNcIixcblx0XHRcdGlzUHVibGljOiB0cnVlXG5cdFx0fSxcblx0XHRjdXN0b21EYXRhOiB7XG5cdFx0XHR0eXBlOiBTQVBfVUlfQ09SRV9FTEVNRU5ULFxuXHRcdFx0c2xvdDogXCJjdXN0b21EYXRhXCIsXG5cdFx0XHRpc1B1YmxpYzogdHJ1ZVxuXHRcdH0sXG5cdFx0bGF5b3V0RGF0YToge1xuXHRcdFx0dHlwZTogU0FQX1VJX0NPUkVfRUxFTUVOVCxcblx0XHRcdHNsb3Q6IFwibGF5b3V0RGF0YVwiLFxuXHRcdFx0aXNQdWJsaWM6IHRydWVcblx0XHR9LFxuXHRcdC4uLmJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5hZ2dyZWdhdGlvbnNcblx0fTtcblx0Y29uc3QgbWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+ID0ge307XG5cblx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmtleXMoYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXMpKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXS50eXBlO1xuXG5cdFx0aWYgKHByb3BlcnR5VHlwZSAhPT0gU0FQX1VJX01PREVMX0NPTlRFWFQpIHtcblx0XHRcdHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0fVxuXG5cdFx0aWYgKFtTQVBfVUlfTU9ERUxfQ09OVEVYVCwgXCJvYmplY3RcIiwgXCJhcnJheVwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHQvLyBFeHBsaWNpdGx5IGRlZmluZWQgY29udGV4dHMsIG9iamVjdHMsIGFuZCBhcnJheXMgbWF5IGNvbWUgZnJvbSB0aGUgbWV0YWRhdGFDb250ZXh0XG5cdFx0XHRtZXRhZGF0YUNvbnRleHRzW3Byb3BlcnR5TmFtZV0gPSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdIGFzIEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Li4uYnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0bWV0YWRhdGFDb250ZXh0cyxcblx0XHRhZ2dyZWdhdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGFic29sdXRlIG9yIGNvbnRleHQgcGF0aHMgYW5kIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgTWV0YUNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9TZXR0aW5ncyBBZGRpdGlvbmFsIHNldHRpbmdzXG4gKiBAcGFyYW0gc0F0dHJpYnV0ZVZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWVcbiAqIEByZXR1cm5zIFRoZSBtZXRhIGRhdGEgY29udGV4dCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2NoZWNrQWJzb2x1dGVBbmRDb250ZXh0UGF0aHMob1NldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLCBzQXR0cmlidXRlVmFsdWU6IHN0cmluZyk6IE1ldGFEYXRhQ29udGV4dCB7XG5cdGxldCBzTWV0YVBhdGg6IHN0cmluZztcblx0aWYgKHNBdHRyaWJ1dGVWYWx1ZSAmJiBzQXR0cmlidXRlVmFsdWUuc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHQvLyBhYnNvbHV0ZSBwYXRoIC0gd2UganVzdCB1c2UgdGhpcyBvbmVcblx0XHRzTWV0YVBhdGggPSBzQXR0cmlidXRlVmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGguZ2V0UGF0aCgpO1xuXHRcdGlmICghc0NvbnRleHRQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0c0NvbnRleHRQYXRoICs9IFwiL1wiO1xuXHRcdH1cblx0XHRzTWV0YVBhdGggPSBzQ29udGV4dFBhdGggKyBzQXR0cmlidXRlVmFsdWU7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtb2RlbDogXCJtZXRhTW9kZWxcIixcblx0XHRwYXRoOiBzTWV0YVBhdGhcblx0fTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBoZWxwcyB0byBjcmVhdGUgdGhlIG1ldGFkYXRhIGNvbnRleHQgaW4gY2FzZSBpdCBpcyBub3QgeWV0IGF2YWlsYWJsZSBpbiB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIG9TZXR0aW5ncyBBZGRpdGlvbmFsIHNldHRpbmdzXG4gKiBAcGFyYW0gc0F0dHJpYnV0ZU5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lXG4gKiBAcGFyYW0gc0F0dHJpYnV0ZVZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWVcbiAqIEByZXR1cm5zIFRoZSBtZXRhIGRhdGEgY29udGV4dCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2NyZWF0ZUluaXRpYWxNZXRhZGF0YUNvbnRleHQoXG5cdG9TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0c0F0dHJpYnV0ZU5hbWU6IHN0cmluZyxcblx0c0F0dHJpYnV0ZVZhbHVlOiBzdHJpbmdcbik6IE1ldGFEYXRhQ29udGV4dCB7XG5cdGxldCByZXR1cm5Db250ZXh0OiBNZXRhRGF0YUNvbnRleHQ7XG5cdGlmIChzQXR0cmlidXRlVmFsdWUuc3RhcnRzV2l0aChcIi91aWQtLVwiKSAmJiAhb1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LmdldFByb3BlcnR5KHNBdHRyaWJ1dGVWYWx1ZSkpIHtcblx0XHRjb25zdCBkYXRhID0gdW5zdG9yZU9iamVjdFZhbHVlKHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdFx0b1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LnNldFByb3BlcnR5KHNBdHRyaWJ1dGVWYWx1ZSwgZGF0YSk7XG5cdFx0cmV0dXJuQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBcImNvbnZlcnRlckNvbnRleHRcIixcblx0XHRcdHBhdGg6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdH07XG5cdH0gZWxzZSBpZiAoKHNBdHRyaWJ1dGVOYW1lID09PSBcIm1ldGFQYXRoXCIgJiYgb1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCkgfHwgc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIikge1xuXHRcdHJldHVybkNvbnRleHQgPSBfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyhvU2V0dGluZ3MsIHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdH0gZWxzZSBpZiAoc0F0dHJpYnV0ZVZhbHVlICYmIHNBdHRyaWJ1dGVWYWx1ZS5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdC8vIGFic29sdXRlIHBhdGggLSB3ZSBqdXN0IHVzZSB0aGlzIG9uZVxuXHRcdHJldHVybkNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogXCJtZXRhTW9kZWxcIixcblx0XHRcdHBhdGg6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdFx0cGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlTZXQgPyBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmVudGl0eVNldC5nZXRQYXRoKHNBdHRyaWJ1dGVWYWx1ZSkgOiBzQXR0cmlidXRlVmFsdWVcblx0XHR9O1xuXHR9XG5cdHJldHVybiByZXR1cm5Db250ZXh0O1xufVxuXG5mdW5jdGlvbiBfZ2V0TWV0YWRhdGFDb250ZXh0KFxuXHRvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRzQXR0cmlidXRlTmFtZTogc3RyaW5nLFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0YkRvTm90UmVzb2x2ZTogYm9vbGVhbixcblx0aXNPcGVuOiBib29sZWFuXG4pOiBNZXRhRGF0YUNvbnRleHQgfCB1bmRlZmluZWQge1xuXHRsZXQgb01ldGFkYXRhQ29udGV4dDogTWV0YURhdGFDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRpZiAoIWJEb05vdFJlc29sdmUgJiYgb05vZGUuaGFzQXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKSkge1xuXHRcdGNvbnN0IHNBdHRyaWJ1dGVWYWx1ZSA9IG9Ob2RlLmdldEF0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSkgYXMgc3RyaW5nO1xuXHRcdG9NZXRhZGF0YUNvbnRleHQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoc0F0dHJpYnV0ZVZhbHVlKTtcblx0XHRpZiAoIW9NZXRhZGF0YUNvbnRleHQpIHtcblx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSBfY3JlYXRlSW5pdGlhbE1ldGFkYXRhQ29udGV4dChvU2V0dGluZ3MsIHNBdHRyaWJ1dGVOYW1lLCBzQXR0cmlidXRlVmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmhhc093blByb3BlcnR5KHNBdHRyaWJ1dGVOYW1lKSkge1xuXHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogc0F0dHJpYnV0ZU5hbWUsXG5cdFx0XHRwYXRoOiBcIlwiXG5cdFx0fTtcblx0fSBlbHNlIGlmIChpc09wZW4pIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKG9WaXNpdG9yLmdldENvbnRleHQoYCR7c0F0dHJpYnV0ZU5hbWV9PmApKSB7XG5cdFx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRcdFx0bW9kZWw6IHNBdHRyaWJ1dGVOYW1lLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCJcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb01ldGFkYXRhQ29udGV4dDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgaW5jb21pbmcgWE1MIG5vZGUgYW5kIHRyeSB0byByZXNvbHZlIHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgdGhlcmUuXG4gKlxuICogQHBhcmFtIG9NZXRhZGF0YSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIG9Ob2RlIFRoZSBYTUwgbm9kZSB0byBwYXJzZVxuICogQHBhcmFtIGlzUHVibGljIFdoZXRoZXIgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW4gYSBwdWJsaWMgY29udGV4dCBvciBub3RcbiAqIEBwYXJhbSBvVmlzaXRvciBUaGUgdmlzaXRvciBpbnN0YW5jZVxuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBwcm9wZXJ0aWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRvTm9kZTogRWxlbWVudCxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPj4ge1xuXHRjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IG9NZXRhZGF0YS5wcm9wZXJ0aWVzO1xuXG5cdC8vIFJldHJpZXZlIHByb3BlcnRpZXMgdmFsdWVzXG5cdGNvbnN0IGFEZWZpbml0aW9uUHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhkZWZpbml0aW9uUHJvcGVydGllcyk7XG5cblx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPiA9IHt9O1xuXHRmb3IgKGNvbnN0IHNLZXlWYWx1ZSBvZiBhRGVmaW5pdGlvblByb3BlcnRpZXNLZXlzKSB7XG5cdFx0aWYgKGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0udHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0cHJvcGVydHlWYWx1ZXNbc0tleVZhbHVlXSA9XG5cdFx0XHRcdGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0uZGVmYXVsdFZhbHVlICYmIGRlZXBDbG9uZShkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmRlZmF1bHRWYWx1ZSk7IC8vIFRvIGF2b2lkIHZhbHVlcyBiZWluZyByZXVzZWQgYWNyb3NzIG1hY3Jvc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID0gZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAob05vZGUuaGFzQXR0cmlidXRlKHNLZXlWYWx1ZSkgJiYgaXNQdWJsaWMgJiYgZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5pc1B1YmxpYyA9PT0gZmFsc2UpIHtcblx0XHRcdExvZy5lcnJvcihgUHJvcGVydHkgJHtzS2V5VmFsdWV9IHdhcyBpZ25vcmVkIGFzIGl0IGlzIG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIHVzYWdlYCk7XG5cdFx0fSBlbHNlIGlmIChvTm9kZS5oYXNBdHRyaWJ1dGUoc0tleVZhbHVlKSkge1xuXHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXRBdHRyaWJ1dGUob05vZGUsIG9Ob2RlLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKHNLZXlWYWx1ZSkgYXMgQXR0cik7XG5cdFx0XHRsZXQgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkID0gb05vZGUuZ2V0QXR0cmlidXRlKHNLZXlWYWx1ZSk7XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICF2YWx1ZS5zdGFydHNXaXRoKFwie1wiKSkge1xuXHRcdFx0XHRcdHN3aXRjaCAoZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiB2YWx1ZTtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0tleVZhbHVlXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydHlWYWx1ZXM7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGluY29taW5nIFhNTCBub2RlIGFuZCB0cnkgdG8gcmVzb2x2ZSB0aGUgYmluZGluZyBjb250ZXh0cyBkZWZpbmVkIGluc2lkZS5cbiAqXG4gKiBAcGFyYW0gb01ldGFkYXRhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gb1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvYmplY3RcbiAqIEBwYXJhbSBvTm9kZSBUaGUgWE1MIG5vZGUgdG8gcGFyc2VcbiAqIEBwYXJhbSBpc1B1YmxpYyBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGluIGEgcHVibGljIGNvbnRleHQgb3Igbm90XG4gKiBAcGFyYW0gb1Zpc2l0b3IgVGhlIHZpc2l0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSBtQ29udGV4dHMgVGhlIGNvbnRleHRzIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlcyBUaGUgY3VycmVudCBwcm9wZXJ0eSB2YWx1ZXNcbiAqIEByZXR1cm5zIFRoZSBwcm9jZXNzZWQgYW5kIG1pc3NpbmcgY29udGV4dHNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0NvbnRleHRzKFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRpc1B1YmxpYzogYm9vbGVhbixcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2ssXG5cdG1Db250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sXG5cdHByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZT5cbik6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcblx0b1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuY29udGV4dFBhdGg7XG5cdGNvbnN0IG1NaXNzaW5nQ29udGV4dDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0Y29uc3Qgb0RlZmluaXRpb25Db250ZXh0cyA9IG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzO1xuXHRjb25zdCBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cyA9IE9iamVjdC5rZXlzKG9EZWZpbml0aW9uQ29udGV4dHMpO1xuXHQvLyBTaW5jZSB0aGUgbWV0YVBhdGggYW5kIG90aGVyIHByb3BlcnR5IGNhbiBiZSByZWxhdGl2ZSB0byB0aGUgY29udGV4dFBhdGggd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgY3VycmVudCBjb250ZXh0UGF0aCBmaXJzdFxuXHRjb25zdCBjb250ZXh0UGF0aEluZGV4ID0gYURlZmluaXRpb25Db250ZXh0c0tleXMuaW5kZXhPZihcImNvbnRleHRQYXRoXCIpO1xuXHRpZiAoY29udGV4dFBhdGhJbmRleCAhPT0gLTEpIHtcblx0XHQvLyBJZiBpdCBpcyBkZWZpbmVkIHdlIGV4dHJhY3QgaXQgYW5kIHJlaW5zZXJ0IGl0IGluIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgYXJyYXlcblx0XHRjb25zdCBjb250ZXh0UGF0aERlZmluaXRpb24gPSBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cy5zcGxpY2UoY29udGV4dFBhdGhJbmRleCwgMSk7XG5cdFx0YURlZmluaXRpb25Db250ZXh0c0tleXMuc3BsaWNlKDAsIDAsIGNvbnRleHRQYXRoRGVmaW5pdGlvblswXSk7XG5cdH1cblx0Zm9yIChjb25zdCBzQXR0cmlidXRlTmFtZSBvZiBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cykge1xuXHRcdC8vIElmIHRoZSBjb250ZXh0IHdhcyByZXNvbHZlZCBhcyBhIHByb3BlcnR5IChiaW5kaW5nIC8geG1sIGFnZ3JlZ2F0aW9uKSB0aGVuIHdlIGRvbid0IG5lZWQgdG8gcmVzb2x2ZSBpdCBoZXJlLlxuXHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1tzQXR0cmlidXRlTmFtZV07XG5cdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlIGFzIG9iamVjdCkubGVuZ3RoID4gMCkge1xuXHRcdFx0ZGVsZXRlIG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBiRG9Ob3RSZXNvbHZlID0gaXNQdWJsaWMgJiYgb0RlZmluaXRpb25Db250ZXh0c1tzQXR0cmlidXRlTmFtZV0uaXNQdWJsaWMgPT09IGZhbHNlICYmIG9Ob2RlLmhhc0F0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSk7XG5cdFx0Y29uc3Qgb01ldGFkYXRhQ29udGV4dCA9IF9nZXRNZXRhZGF0YUNvbnRleHQob1NldHRpbmdzLCBvTm9kZSwgc0F0dHJpYnV0ZU5hbWUsIG9WaXNpdG9yLCBiRG9Ob3RSZXNvbHZlLCBvTWV0YWRhdGEuaXNPcGVuID8/IGZhbHNlKTtcblx0XHRpZiAob01ldGFkYXRhQ29udGV4dCkge1xuXHRcdFx0b01ldGFkYXRhQ29udGV4dC5uYW1lID0gc0F0dHJpYnV0ZU5hbWU7XG5cdFx0XHRhZGRTaW5nbGVDb250ZXh0KG1Db250ZXh0cywgb1Zpc2l0b3IsIG9NZXRhZGF0YUNvbnRleHQpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoc0F0dHJpYnV0ZU5hbWUgPT09IFwiZW50aXR5U2V0XCIgfHwgc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIikgJiZcblx0XHRcdFx0IW9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuaGFzT3duUHJvcGVydHkoc0F0dHJpYnV0ZU5hbWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0b1NldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzQXR0cmlidXRlTmFtZV0gPSBtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNBdHRyaWJ1dGVOYW1lID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRcdFx0b1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0XHRpZiAobUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NBdHRyaWJ1dGVOYW1lXSA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlc1tzQXR0cmlidXRlTmFtZV0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIGJpbmRpbmcgY291bGRuJ3QgYmUgcmVzb2x2ZWQgY29uc2lkZXIgdGhhdCB0aGVyZSB3YXMgbm8gdmFsdWUgaGVyZVxuXHRcdFx0XHRkZWxldGUgb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtTWlzc2luZ0NvbnRleHRbc0F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1NaXNzaW5nQ29udGV4dDtcbn1cblxuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0cG9zaXRpb246IFBvc2l0aW9uO1xuXHR0eXBlOiBcIlNsb3RcIjtcbn07XG5mdW5jdGlvbiBwYXJzZUFnZ3JlZ2F0aW9uKG9BZ2dyZWdhdGlvbj86IEVsZW1lbnQsIHByb2Nlc3NBZ2dyZWdhdGlvbnM/OiBGdW5jdGlvbik6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbj4ge1xuXHRjb25zdCBvT3V0T2JqZWN0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uPiA9IHt9O1xuXHRpZiAob0FnZ3JlZ2F0aW9uICYmIG9BZ2dyZWdhdGlvbi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBvQWdncmVnYXRpb24uY2hpbGRyZW47XG5cdFx0Zm9yIChsZXQgY2hpbGRJZHggPSAwOyBjaGlsZElkeCA8IGNoaWxkcmVuLmxlbmd0aDsgY2hpbGRJZHgrKykge1xuXHRcdFx0Y29uc3QgY2hpbGREZWZpbml0aW9uID0gY2hpbGRyZW5bY2hpbGRJZHhdO1xuXHRcdFx0bGV0IGNoaWxkS2V5ID0gY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImtleVwiKSB8fCBjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cdFx0XHRpZiAoY2hpbGRLZXkpIHtcblx0XHRcdFx0Y2hpbGRLZXkgPSBgSW5saW5lWE1MXyR7Y2hpbGRLZXl9YDtcblx0XHRcdFx0Y2hpbGREZWZpbml0aW9uLnNldEF0dHJpYnV0ZShcImtleVwiLCBjaGlsZEtleSk7XG5cdFx0XHRcdGxldCBhZ2dyZWdhdGlvbk9iamVjdDogQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uID0ge1xuXHRcdFx0XHRcdGtleTogY2hpbGRLZXksXG5cdFx0XHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0XHRcdHBsYWNlbWVudDogKGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJwbGFjZW1lbnRcIikgYXMgUGxhY2VtZW50KSB8fCBQbGFjZW1lbnQuQWZ0ZXIsXG5cdFx0XHRcdFx0XHRhbmNob3I6IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJhbmNob3JcIikgfHwgdW5kZWZpbmVkXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0eXBlOiBcIlNsb3RcIlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAocHJvY2Vzc0FnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uT2JqZWN0ID0gcHJvY2Vzc0FnZ3JlZ2F0aW9ucyhjaGlsZERlZmluaXRpb24sIGFnZ3JlZ2F0aW9uT2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvT3V0T2JqZWN0c1thZ2dyZWdhdGlvbk9iamVjdC5rZXldID0gYWdncmVnYXRpb25PYmplY3Q7XG5cdFx0XHR9IGVsc2UgaWYgKGNoaWxkRGVmaW5pdGlvbi50YWdOYW1lICE9PSBcInNsb3RcIikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYFRoZSBhZ2dyZWdhdGlvbiAke2NoaWxkRGVmaW5pdGlvbi5ub2RlTmFtZX0gaXMgbWlzc2luZyBhIEtleSBhdHRyaWJ1dGUuIEl0IGlzIG5vdCBkaXNwbGF5ZWRgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9PdXRPYmplY3RzO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrIGFuZCBwYXJzZXMgdGhlbSBhcyBlaXRoZXIgYWdncmVnYXRpb25zIG9yIG9iamVjdC0vYXJyYXktYmFzZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSBvTm9kZSBUaGUgWE1MIG5vZGUgZm9yIHdoaWNoIHRvIHByb2Nlc3MgdGhlIGNoaWxkcmVuXG4gKiBAcGFyYW0gb1Zpc2l0b3IgVGhlIHZpc2l0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSBvTWV0YWRhdGEgVGhlIG1ldGFkYXRhIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBpc1B1YmxpYyBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGluIGEgcHVibGljIGNvbnRleHQgb3Igbm90XG4gKiBAcGFyYW0gcHJvcGVydHlWYWx1ZXMgVGhlIHZhbHVlcyBvZiBhbHJlYWR5IHBhcnNlZCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBjaGlsZHJlblxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRyZW4oXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b01ldGFkYXRhOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdHByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZT5cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgRWxlbWVudD4+IHtcblx0Y29uc3Qgb0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgRWxlbWVudD4gPSB7fTtcblx0aWYgKG9Ob2RlLmZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0bGV0IG9GaXJzdEVsZW1lbnRDaGlsZDogRWxlbWVudCB8IG51bGwgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZCBhcyBFbGVtZW50IHwgbnVsbDtcblxuXHRcdHdoaWxlIChvRmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHRcdGlmIChvRmlyc3RFbGVtZW50Q2hpbGQubmFtZXNwYWNlVVJJID09PSBYTUxURU1QTEFUSU5HX05TKSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugd2UgZW5jb3VudGVyIGEgdGVtcGxhdGluZyB0YWcsIHJ1biB0aGUgdmlzaXRvciBvbiBpdCBhbmQgY29udGludWUgd2l0aCB0aGUgcmVzdWx0aW5nIGNoaWxkXG5cdFx0XHRcdGNvbnN0IG9QYXJlbnQgPSBvRmlyc3RFbGVtZW50Q2hpbGQucGFyZW50Tm9kZTtcblx0XHRcdFx0aWYgKG9QYXJlbnQpIHtcblx0XHRcdFx0XHRjb25zdCBpQ2hpbGRJbmRleCA9IEFycmF5LmZyb20ob1BhcmVudC5jaGlsZHJlbikuaW5kZXhPZihvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdID8gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF0gOiBudWxsO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE5vdCBzdXJlIGhvdyB0aGlzIGNvdWxkIGhhcHBlbiBidXQgSSBhbHNvIGRvbid0IHdhbnQgdG8gY3JlYXRlIGluZmluaXRlIGxvb3BzXG5cdFx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc0NoaWxkTmFtZSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRcdGxldCBzQWdncmVnYXRpb25OYW1lID0gc0NoaWxkTmFtZTtcblx0XHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWVbMF0udG9VcHBlckNhc2UoKSA9PT0gc0FnZ3JlZ2F0aW9uTmFtZVswXSkge1xuXHRcdFx0XHRcdC8vIG5vdCBhIHN1YiBhZ2dyZWdhdGlvbiwgZ28gYmFjayB0byBkZWZhdWx0IEFnZ3JlZ2F0aW9uXG5cdFx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZSA9IG9NZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gfHwgXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZmluaXRpb24gPSBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uICE9PSB1bmRlZmluZWQgJiYgIWFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5zbG90KSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyc2VkQWdncmVnYXRpb24gPSBwYXJzZUFnZ3JlZ2F0aW9uKG9GaXJzdEVsZW1lbnRDaGlsZCwgYWdncmVnYXRpb25EZWZpbml0aW9uLnByb2Nlc3NBZ2dyZWdhdGlvbnMpO1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NBZ2dyZWdhdGlvbk5hbWVdID0gcGFyc2VkQWdncmVnYXRpb247XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYXJzZWRBZ2dyZWdhdGlvbktleSBpbiBwYXJzZWRBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0b01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twYXJzZWRBZ2dyZWdhdGlvbktleV0gPSBwYXJzZWRBZ2dyZWdhdGlvbltwYXJzZWRBZ2dyZWdhdGlvbktleV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb05vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0d2hpbGUgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3Qgb05leHRDaGlsZDogRWxlbWVudCB8IG51bGwgPSBvRmlyc3RFbGVtZW50Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0Y29uc3Qgc0NoaWxkTmFtZSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRsZXQgc0FnZ3JlZ2F0aW9uTmFtZSA9IHNDaGlsZE5hbWU7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZVswXS50b1VwcGVyQ2FzZSgpID09PSBzQWdncmVnYXRpb25OYW1lWzBdKSB7XG5cdFx0XHRcdC8vIG5vdCBhIHN1YiBhZ2dyZWdhdGlvbiwgZ28gYmFjayB0byBkZWZhdWx0IEFnZ3JlZ2F0aW9uXG5cdFx0XHRcdHNBZ2dyZWdhdGlvbk5hbWUgPSBvTWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uIHx8IFwiXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdE9iamVjdC5rZXlzKG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnMpLmluY2x1ZGVzKHNBZ2dyZWdhdGlvbk5hbWUpICYmXG5cdFx0XHRcdCghaXNQdWJsaWMgfHwgb01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5pc1B1YmxpYyA9PT0gdHJ1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZmluaXRpb24gPSBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0XHRpZiAoIWFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5zbG90ICYmIG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCAmJiBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdGxldCBjaGlsZERlZmluaXRpb24gPSBvRmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdFx0d2hpbGUgKGNoaWxkRGVmaW5pdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV4dENoaWxkID0gY2hpbGREZWZpbml0aW9uLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0XHRcdGlmICghYWdncmVnYXRpb25EZWZpbml0aW9uLmhhc1ZpcnR1YWxOb2RlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoaWxkV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvTm9kZS5uYW1lc3BhY2VVUkksIGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJrZXlcIikhKTtcblx0XHRcdFx0XHRcdFx0Y2hpbGRXcmFwcGVyLmFwcGVuZENoaWxkKGNoaWxkRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0XHRcdG9BZ2dyZWdhdGlvbnNbY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImtleVwiKSFdID0gY2hpbGRXcmFwcGVyO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIV0gPSBjaGlsZERlZmluaXRpb247XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNoaWxkRGVmaW5pdGlvbi5yZW1vdmVBdHRyaWJ1dGUoXCJrZXlcIik7XG5cdFx0XHRcdFx0XHRjaGlsZERlZmluaXRpb24gPSBuZXh0Q2hpbGQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5zbG90KSB7XG5cdFx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUgIT09IHNDaGlsZE5hbWUpIHtcblx0XHRcdFx0XHRcdGlmICghb0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3Q2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMob05vZGUubmFtZXNwYWNlVVJJLCBzQWdncmVnYXRpb25OYW1lKTtcblx0XHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSA9IG9OZXdDaGlsZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9BZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV0uYXBwZW5kQ2hpbGQob0ZpcnN0RWxlbWVudENoaWxkLmNsb25lTm9kZSh0cnVlKSBhcyBFbGVtZW50KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5jbG9uZU5vZGUodHJ1ZSkgYXMgRWxlbWVudDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoT2JqZWN0LmtleXMob01ldGFkYXRhLnByb3BlcnRpZXMpLmluY2x1ZGVzKHNBZ2dyZWdhdGlvbk5hbWUpKSB7XG5cdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRpZiAob01ldGFkYXRhLnByb3BlcnRpZXNbc0FnZ3JlZ2F0aW9uTmFtZV0udHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdC8vIE9iamVjdCBUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvblByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZTIgfCBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZTI+PiA9IHt9O1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZU5hbWVzID0gb0ZpcnN0RWxlbWVudENoaWxkLmdldEF0dHJpYnV0ZU5hbWVzKCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIGF0dHJpYnV0ZU5hbWVzKSB7XG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvblByb3BlcnR5VmFsdWVzW2F0dHJpYnV0ZU5hbWVdID0gb0ZpcnN0RWxlbWVudENoaWxkLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vcmV0cmlldmUgb25lIGxldmVsIHN1Yk9iamVjdCBwcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbi5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJDaGlsZCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbltjaGlsZEluZGV4XTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3ViT2JqZWN0S2V5ID0gc3ViQ2hpbGQubG9jYWxOYW1lO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJPYmplY3Q6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3ViQ2hpbGRBdHRyaWJ1dGVOYW1lcyA9IHN1YkNoaWxkLmdldEF0dHJpYnV0ZU5hbWVzKCk7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3Qgc3ViQ2hpbGRBdHRyaWJ1dGVOYW1lIG9mIHN1YkNoaWxkQXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRzdWJPYmplY3Rbc3ViQ2hpbGRBdHRyaWJ1dGVOYW1lXSA9IHN1YkNoaWxkLmdldEF0dHJpYnV0ZShzdWJDaGlsZEF0dHJpYnV0ZU5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXNbc3ViT2JqZWN0S2V5XSA9IHN1Yk9iamVjdDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBhZ2dyZWdhdGlvblByb3BlcnR5VmFsdWVzO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXRhZGF0YS5wcm9wZXJ0aWVzW3NBZ2dyZWdhdGlvbk5hbWVdLnR5cGUgPT09IFwiYXJyYXlcIikge1xuXHRcdFx0XHRcdGlmIChvRmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwgJiYgb0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnN0IGNoaWxkcmVuID0gb0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb091dE9iamVjdHM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMj5bXSA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgY2hpbGRJZHggPSAwOyBjaGlsZElkeCA8IGNoaWxkcmVuLmxlbmd0aDsgY2hpbGRJZHgrKykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjaGlsZERlZmluaXRpb24gPSBjaGlsZHJlbltjaGlsZElkeF07XG5cdFx0XHRcdFx0XHRcdC8vIG5vbiBrZXllZCBjaGlsZCwganVzdCBhZGQgaXQgdG8gdGhlIGFnZ3JlZ2F0aW9uXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG15Q2hpbGQ6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlTmFtZXMgPSBjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlTmFtZXMoKTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIGF0dHJpYnV0ZU5hbWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0bXlDaGlsZFthdHRyaWJ1dGVOYW1lXSA9IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0b091dE9iamVjdHMucHVzaChteUNoaWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NBZ2dyZWdhdGlvbk5hbWVdID0gb091dE9iamVjdHM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9OZXh0Q2hpbGQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQWdncmVnYXRpb25zO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzU2xvdHMoXG5cdG9BZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnQ+LFxuXHRvTWV0YWRhdGFBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24+LFxuXHRvTm9kZTogRWxlbWVudCxcblx0cHJvY2Vzc0N1c3RvbURhdGEgPSBmYWxzZVxuKTogdm9pZCB7XG5cdGlmIChPYmplY3Qua2V5cyhvQWdncmVnYXRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0T2JqZWN0LmtleXMob0FnZ3JlZ2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBvQWdncmVnYXRpb25FbGVtZW50ID0gb0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXTtcblx0XHRcdGlmIChvTm9kZSAhPT0gbnVsbCAmJiBvTm9kZSAhPT0gdW5kZWZpbmVkICYmIG9BZ2dyZWdhdGlvbkVsZW1lbnQpIHtcblx0XHRcdFx0Ly8gc2xvdHMgY2FuIGhhdmUgOjogYXMga2V5cyB3aGljaCBpcyBub3QgYSB2YWxpZCBhZ2dyZWdhdGlvbiBuYW1lIHRoZXJlZm9yZSByZXBsYWNpbmcgdGhlbVxuXHRcdFx0XHRjb25zdCBvRWxlbWVudENoaWxkID0gb0FnZ3JlZ2F0aW9uRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0aWYgKCFbXCJkZXBlbmRlbnRzXCIsIFwiY3VzdG9tRGF0YVwiLCBcImxheW91dERhdGFcIl0uaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0XHRjb25zdCBzU2xvdE5hbWUgPVxuXHRcdFx0XHRcdFx0KG9NZXRhZGF0YUFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkICYmIG9NZXRhZGF0YUFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5zbG90KSB8fFxuXHRcdFx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZTtcblx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0RWxlbWVudCA9IG9Ob2RlLnF1ZXJ5U2VsZWN0b3IoYHNsb3RbbmFtZT0nJHtzU2xvdE5hbWV9J11gKTtcblx0XHRcdFx0XHRpZiAob1RhcmdldEVsZW1lbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IHByZXBhcmVBZ2dyZWdhdGlvbkVsZW1lbnQob05vZGUsIHNBZ2dyZWdhdGlvbk5hbWUsIG9FbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdFx0b1RhcmdldEVsZW1lbnQucmVwbGFjZVdpdGgoLi4uKG9OZXdDaGlsZC5jaGlsZHJlbiBhcyB1bmtub3duIGFzIE5vZGVbXSkpOyAvLyBTb21laG93IFRTIGRvZXNuJ3QgbGlrZSB0aGlzIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlzIHNob3VsZCB3b3JrXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHByb2Nlc3NDdXN0b21EYXRhICYmIG9FbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRjb25zdCBzU2xvdE5hbWUgPVxuXHRcdFx0XHRcdFx0KG9NZXRhZGF0YUFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkICYmIG9NZXRhZGF0YUFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5zbG90KSB8fFxuXHRcdFx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZTtcblx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0RWxlbWVudCA9IG9Ob2RlLnF1ZXJ5U2VsZWN0b3IoYHNsb3RbbmFtZT0nJHtzU2xvdE5hbWV9J11gKTtcblx0XHRcdFx0XHRjb25zdCBvTmV3Q2hpbGQgPSBwcmVwYXJlQWdncmVnYXRpb25FbGVtZW50KG9Ob2RlLCBzQWdncmVnYXRpb25OYW1lLCBvRWxlbWVudENoaWxkKTtcblx0XHRcdFx0XHRpZiAob1RhcmdldEVsZW1lbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdG9UYXJnZXRFbGVtZW50LnJlcGxhY2VXaXRoKC4uLihvTmV3Q2hpbGQuY2hpbGRyZW4gYXMgdW5rbm93biBhcyBOb2RlW10pKTsgLy8gU29tZWhvdyBUUyBkb2Vzbid0IGxpa2UgdGhpcyBidXQgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBpcyBzaG91bGQgd29ya1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvTm9kZS5hcHBlbmRDaGlsZChvTmV3Q2hpbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBZ2dyZWdhdGlvbkVsZW1lbnQob05vZGU6IEVsZW1lbnQsIHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZywgb0VsZW1lbnRDaGlsZDogRWxlbWVudCB8IG51bGwpOiBFbGVtZW50IHtcblx0Y29uc3Qgb05ld0NoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG9Ob2RlLm5hbWVzcGFjZVVSSSwgc0FnZ3JlZ2F0aW9uTmFtZS5yZXBsYWNlKC86L2dpLCBcIl9cIikpO1xuXHR3aGlsZSAob0VsZW1lbnRDaGlsZCkge1xuXHRcdGNvbnN0IG9OZXh0Q2hpbGQgPSBvRWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRvTmV3Q2hpbGQuYXBwZW5kQ2hpbGQob0VsZW1lbnRDaGlsZCk7XG5cdFx0b0VsZW1lbnRDaGlsZCA9IG9OZXh0Q2hpbGQ7XG5cdH1cblx0cmV0dXJuIG9OZXdDaGlsZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0J1aWxkaW5nQmxvY2soXG5cdEJ1aWxkaW5nQmxvY2tDbGFzczogdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSxcblx0b05vZGU6IEVsZW1lbnQsXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRpc1B1YmxpYyA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb01ldGFkYXRhID0gdHJhbnNmb3JtTWV0YWRhdGEoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhKTtcblxuXHRjb25zdCBzRnJhZ21lbnROYW1lID0gb01ldGFkYXRhLmZyYWdtZW50ID8/IGAke29NZXRhZGF0YS5uYW1lc3BhY2UgPz8gb01ldGFkYXRhLnB1YmxpY05hbWVzcGFjZX0uJHtvTWV0YWRhdGEueG1sVGFnID8/IG9NZXRhZGF0YS5uYW1lfWA7XG5cblx0Y29uc3QgbUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0PiA9IHt9O1xuXHRjb25zdCBvU2V0dGluZ3MgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXG5cdC8vIEFkZCBhbiBlbXB0eSBjb252ZXJ0ZXIgY29udGV4dCBpZiB0aGVyZSBpcyBub25lIGluIG9yZGVyIHRvIGhhdmUgYSBwbGFjZSB0byBzdG9yZSBvYmplY3QgdmFsdWVzXG5cdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dCA/Pz0gbmV3IEpTT05Nb2RlbCgpO1xuXG5cdC8vSW5qZWN0IHN0b3JhZ2UgZm9yIG1hY3Jvc1xuXHRpZiAoIW9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSkge1xuXHRcdG9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSA9IHt9O1xuXHR9XG5cblx0Ly8gRmlyc3Qgb2YgYWxsIHdlIG5lZWQgdG8gdmlzaXQgdGhlIGF0dHJpYnV0ZXMgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydGllcyBhbmQgdGhlIG1ldGFkYXRhIGNvbnRleHRzXG5cdGNvbnN0IHByb3BlcnR5VmFsdWVzID0gYXdhaXQgcHJvY2Vzc1Byb3BlcnRpZXMob01ldGFkYXRhLCBvTm9kZSwgaXNQdWJsaWMsIG9WaXNpdG9yKTtcblx0Y29uc3QgaW5pdGlhbEtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlcyk7XG5cdGNvbnN0IG1NaXNzaW5nQ29udGV4dCA9IHByb2Nlc3NDb250ZXh0cyhvTWV0YWRhdGEsIG9TZXR0aW5ncywgb05vZGUsIGlzUHVibGljLCBvVmlzaXRvciwgbUNvbnRleHRzLCBwcm9wZXJ0eVZhbHVlcyk7XG5cblx0dHJ5IHtcblx0XHQvLyBBZ2dyZWdhdGlvbiBhbmQgY29tcGxleCB0eXBlIHN1cHBvcnRcblx0XHRjb25zdCBvQWdncmVnYXRpb25zID0gYXdhaXQgcHJvY2Vzc0NoaWxkcmVuKG9Ob2RlLCBvVmlzaXRvciwgb01ldGFkYXRhLCBpc1B1YmxpYywgcHJvcGVydHlWYWx1ZXMpO1xuXHRcdGxldCBvQ29udHJvbENvbmZpZyA9IHt9O1xuXG5cdFx0aWYgKG9TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEpIHtcblx0XHRcdC8vIE9ubHkgdXNlZCBpbiB0aGUgRmllbGQgbWFjcm8gYW5kIGV2ZW4gdGhlbiBtYXliZSBub3QgcmVhbGx5IHVzZWZ1bFxuXHRcdFx0b0NvbnRyb2xDb25maWcgPSBvU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhLmdldFByb3BlcnR5KFwiL2NvbnRyb2xDb25maWd1cmF0aW9uXCIpO1xuXHRcdH1cblx0XHRsZXQgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblxuXHRcdE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0bGV0IG9EYXRhID0gcHJvcGVydHlWYWx1ZXNbcHJvcE5hbWVdIGFzIHVua25vd24gYXMgQ29udGV4dDtcblx0XHRcdC8vY2hlY2sgZm9yIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBmdW5jdGlvbiB0byB2YWxpZGF0ZSAvIG92ZXJ3cml0ZSBwYXJhbWV0ZXJzXG5cdFx0XHRjb25zdCBvcmlnaW5hbERlZmluaXRpb24gPSBCdWlsZGluZ0Jsb2NrQ2xhc3M/Lm1ldGFkYXRhPy5wcm9wZXJ0aWVzW3Byb3BOYW1lXTtcblx0XHRcdGlmIChvcmlnaW5hbERlZmluaXRpb24/LnZhbGlkYXRlKSB7XG5cdFx0XHRcdG9EYXRhID0gb3JpZ2luYWxEZWZpbml0aW9uLnZhbGlkYXRlKG9EYXRhKSB8fCBvRGF0YTtcblx0XHRcdH1cblx0XHRcdGlmIChvRGF0YT8uaXNBPy4oU0FQX1VJX01PREVMX0NPTlRFWFQpICYmICFvRGF0YS5nZXRNb2RlbCgpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKSkge1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1twcm9wTmFtZV0gPSBvRGF0YS5nZXRPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0eVZhbHVlcy5pc1B1YmxpYyA9IGlzUHVibGljO1xuXG5cdFx0Y29uc3Qgb0luc3RhbmNlID0gbmV3IEJ1aWxkaW5nQmxvY2tDbGFzcyh7IC4uLnByb3BlcnR5VmFsdWVzLCAuLi5vQWdncmVnYXRpb25zIH0sIG9Db250cm9sQ29uZmlnLCBvU2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzID0gb0luc3RhbmNlLmdldFByb3BlcnRpZXMoKTtcblx0XHRPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0NvbnRleHROYW1lOiBzdHJpbmcpIHtcblx0XHRcdGlmIChwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcy5oYXNPd25Qcm9wZXJ0eShzQ29udGV4dE5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzW3NDb250ZXh0TmFtZV07XG5cdFx0XHRcdGlmIChpc0NvbnRleHQodGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0XHRcdG1Db250ZXh0c1tzQ29udGV4dE5hbWVdID0gdGFyZ2V0T2JqZWN0IGFzIENvbnRleHQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldE9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gc3RvcmVPYmplY3RWYWx1ZSh0YXJnZXRPYmplY3QpO1xuXHRcdFx0XHRcdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVWYWx1ZSwgdGFyZ2V0T2JqZWN0KTtcblx0XHRcdFx0XHRjb25zdCBuZXdDb250ZXh0ID0gb1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGF0dHJpYnV0ZVZhbHVlKSE7XG5cdFx0XHRcdFx0dW5zdG9yZU9iamVjdFZhbHVlKGF0dHJpYnV0ZVZhbHVlKTtcblx0XHRcdFx0XHRtQ29udGV4dHNbc0NvbnRleHROYW1lXSA9IG5ld0NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IG9BdHRyaWJ1dGVzTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBBdHRyaWJ1dGVNb2RlbChvTm9kZSwgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMsIEJ1aWxkaW5nQmxvY2tDbGFzcyk7XG5cdFx0bUNvbnRleHRzW1widGhpc1wiXSA9IG9BdHRyaWJ1dGVzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHRcdGxldCBvUHJldmlvdXNNYWNyb0luZm86IE1hY3JvSW5mbyB8IHVuZGVmaW5lZDtcblx0XHQvLyBjb3JlOnJlcXVpcmUgbmVlZCB0byBiZSBkZWZpbmVkIG9uIHRoZSBub2RlIGl0c2VsZiB0byBiZSBwaWNrZWQgdXAgZHVlIHRvIHRoZSB0ZW1wbGF0aW5nIHN0ZXBcblx0XHRjb25zdCBjb3JlUmVxdWlyZSA9IG9Ob2RlPy5nZXRBdHRyaWJ1dGUoXCJjb3JlOnJlcXVpcmVcIikgfHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gS2VlcCB0cmFja1xuXHRcdGlmIChUcmFjZUluZm8uaXNUcmFjZUluZm9BY3RpdmUoKSkge1xuXHRcdFx0Y29uc3Qgb1RyYWNlSW5mbyA9IFRyYWNlSW5mby50cmFjZU1hY3JvQ2FsbHMoc0ZyYWdtZW50TmFtZSwgb01ldGFkYXRhLCBtQ29udGV4dHMsIG9Ob2RlLCBvVmlzaXRvcik7XG5cdFx0XHRpZiAob1RyYWNlSW5mbz8ubWFjcm9JbmZvKSB7XG5cdFx0XHRcdG9QcmV2aW91c01hY3JvSW5mbyA9IG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl07XG5cdFx0XHRcdG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl0gPSBvVHJhY2VJbmZvLm1hY3JvSW5mbztcblx0XHRcdH1cblx0XHR9XG5cdFx0dmFsaWRhdGVNYWNyb1NpZ25hdHVyZShzRnJhZ21lbnROYW1lLCBvTWV0YWRhdGEsIG1Db250ZXh0cywgb05vZGUpO1xuXG5cdFx0Y29uc3Qgb0NvbnRleHRWaXNpdG9yID0gb1Zpc2l0b3Iud2l0aChtQ29udGV4dHMsIG9NZXRhZGF0YS5pc09wZW4gIT09IHVuZGVmaW5lZCA/ICFvTWV0YWRhdGEuaXNPcGVuIDogdHJ1ZSk7XG5cdFx0Y29uc3Qgb1BhcmVudCA9IG9Ob2RlLnBhcmVudE5vZGU7XG5cblx0XHRsZXQgaUNoaWxkSW5kZXg6IG51bWJlcjtcblx0XHRsZXQgb1Byb21pc2U7XG5cdFx0aWYgKG9QYXJlbnQpIHtcblx0XHRcdGlDaGlsZEluZGV4ID0gQXJyYXkuZnJvbShvUGFyZW50LmNoaWxkcmVuKS5pbmRleE9mKG9Ob2RlKTtcblxuXHRcdFx0aWYgKG9NZXRhZGF0YS5mcmFnbWVudCkge1xuXHRcdFx0XHRvUHJvbWlzZSA9IG9Db250ZXh0VmlzaXRvci5pbnNlcnRGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvTm9kZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvbGRLZXlzID0gT2JqZWN0LmtleXModGVtcG9yYXJ5T2JqZWN0U3RvcmUpO1xuXHRcdFx0XHRsZXQgdGVtcGxhdGVTdHJpbmc7XG5cdFx0XHRcdGlmICgob0luc3RhbmNlIGFzIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrKS5nZXRSdW50aW1lQnVpbGRpbmdCbG9ja1RlbXBsYXRlKSB7XG5cdFx0XHRcdFx0dGVtcGxhdGVTdHJpbmcgPSBhd2FpdCBqc3gucmVuZGVyQXNYTUwoYXN5bmMgKCkgPT5cblx0XHRcdFx0XHRcdChvSW5zdGFuY2UgYXMgUnVudGltZUJ1aWxkaW5nQmxvY2spLmdldFJ1bnRpbWVCdWlsZGluZ0Jsb2NrVGVtcGxhdGUob05vZGUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0ZW1wbGF0ZVN0cmluZyA9IGF3YWl0IGpzeC5yZW5kZXJBc1hNTChhc3luYyAoKSA9PiBvSW5zdGFuY2UuZ2V0VGVtcGxhdGUhKG9Ob2RlKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLmlzUnVudGltZSkge1xuXHRcdFx0XHRcdC8vIEZvciBydW50aW1lIGJ1aWxkaW5nIGJsb2Nrcywgd2UgbmVlZCB0byBhdHRhY2ggYWxsIG9iamVjdHMgdG8gdGhlIGNvbnZlcnRlckNvbnRleHQgZGlyZWN0bHksIGFzIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRha2VzIHBsYWNlIGF0IHJ1bnRpbWVcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHN0b3JlS2V5IGluIHRlbXBvcmFyeU9iamVjdFN0b3JlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW9sZEtleXMuaW5jbHVkZXMoc3RvcmVLZXkpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB1bnN0b3JlT2JqZWN0VmFsdWUoc3RvcmVLZXkpO1xuXHRcdFx0XHRcdFx0XHRvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuc2V0UHJvcGVydHkoc3RvcmVLZXksIGRhdGEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBoYXNFcnJvciA9IFwiXCI7XG5cdFx0XHRcdGlmICh0ZW1wbGF0ZVN0cmluZykge1xuXHRcdFx0XHRcdGxldCBoYXNQYXJzZUVycm9yID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV0IHBhcnNlZFRlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcodGVtcGxhdGVTdHJpbmcsIHRydWUpO1xuXHRcdFx0XHRcdC8vIEZvciBzYWZldHkgcHVycG9zZSB3ZSB0cnkgdG8gZGV0ZWN0IHRyYWlsaW5nIHRleHQgaW4gYmV0d2VlbiBYTUwgVGFnc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJzZWRUZW1wbGF0ZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG5cdFx0XHRcdFx0XHRsZXQgdGV4dG5vZGUgPSBpdGVyLm5leHROb2RlKCk7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09IFwicGFyc2VyZXJyb3JcIikge1xuXHRcdFx0XHRcdFx0XHRoYXNQYXJzZUVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHdoaWxlICh0ZXh0bm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGV4dG5vZGUudGV4dENvbnRlbnQgJiYgdGV4dG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFcnJvciA9IHRleHRub2RlLnRleHRDb250ZW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRleHRub2RlID0gaXRlci5uZXh0Tm9kZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChoYXNQYXJzZUVycm9yKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIHBhcnNlZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgWE1MIGl0IG1lYW5zIHRoZSBYTUwgaXRzZWxmIGlzIG1hbGZvcm1lZCwgYXMgc3VjaCB3ZSByZXJ1biB0aGUgdGVtcGxhdGUgcHJvY2Vzc1xuXHRcdFx0XHRcdFx0Ly8gU2V0dGluZyBpc1RyYWNlTW9kZSB0cnVlIHdpbGwgbWFrZSBpdCBzbyB0aGF0IGVhY2ggeG1sYCBleHByZXNzaW9uIGlzIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGZyb20gWE1MIHBlcnNwZWN0aXZlXG5cdFx0XHRcdFx0XHQvLyBJZiBhbiBlcnJvciBpcyBmb3VuZCBpdCdzIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBmcmFnbWVudFxuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7b01ldGFkYXRhLnhtbFRhZyB8fCBvTWV0YWRhdGEubmFtZX1gKTtcblx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlID0gKGF3YWl0IHByb2Nlc3NYbWxJblRyYWNlKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdFx0bGV0IGluaXRpYWxUZW1wbGF0ZTtcblx0XHRcdFx0XHRcdFx0aWYgKChvSW5zdGFuY2UgYXMgUnVudGltZUJ1aWxkaW5nQmxvY2spLmdldFJ1bnRpbWVCdWlsZGluZ0Jsb2NrVGVtcGxhdGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsVGVtcGxhdGUgPSBhd2FpdCBqc3gucmVuZGVyQXNYTUwoYXN5bmMgKCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdChvSW5zdGFuY2UgYXMgUnVudGltZUJ1aWxkaW5nQmxvY2spLmdldFJ1bnRpbWVCdWlsZGluZ0Jsb2NrVGVtcGxhdGUob05vZGUpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsVGVtcGxhdGUgPSBhd2FpdCBqc3gucmVuZGVyQXNYTUwoYXN5bmMgKCkgPT4gb0luc3RhbmNlLmdldFRlbXBsYXRlIShvTm9kZSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXJzZVhNTFN0cmluZyhpbml0aWFsVGVtcGxhdGUgPz8gXCJcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9KSkgYXMgRWxlbWVudFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaGFzRXJyb3IubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgdHJhaWxpbmcgdGV4dCB3ZSBjcmVhdGUgYSBzdGFuZGFyZCBlcnJvciBhbmQgZGlzcGxheSBpdC5cblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS54bWxUYWcgfHwgb01ldGFkYXRhLm5hbWV9YCk7XG5cdFx0XHRcdFx0XHRjb25zdCBvRXJyb3JUZXh0ID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS54bWxUYWcgfHwgb01ldGFkYXRhLm5hbWV9YCxcblx0XHRcdFx0XHRcdFx0XHRgVHJhaWxpbmcgdGV4dCB3YXMgZm91bmQgaW4gdGhlIFhNTDogJHtoYXNFcnJvcn1gXG5cdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlLm1hcCgodGVtcGxhdGUpID0+IHRlbXBsYXRlLm91dGVySFRNTCkuam9pbihcIlxcblwiKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yVGV4dCwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9Ob2RlLnJlcGxhY2VXaXRoKC4uLnBhcnNlZFRlbXBsYXRlKTtcblxuXHRcdFx0XHRcdGNvbnN0IHZpc2l0ZWROb2RlcyA9IHBhcnNlZFRlbXBsYXRlLm1hcChhc3luYyAoaW50ZXJuYWxOb2RlKSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9jZXNzU2xvdHMob0FnZ3JlZ2F0aW9ucywgb01ldGFkYXRhLmFnZ3JlZ2F0aW9ucywgaW50ZXJuYWxOb2RlLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHRWaXNpdG9yLnZpc2l0Tm9kZShpbnRlcm5hbE5vZGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9Qcm9taXNlID0gUHJvbWlzZS5hbGwodmlzaXRlZE5vZGVzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvTm9kZS5yZW1vdmUoKTtcblx0XHRcdFx0XHRvUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlO1xuXHRcdFx0Y29uc3Qgb01hY3JvRWxlbWVudCA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdO1xuXHRcdFx0cHJvY2Vzc1Nsb3RzKG9BZ2dyZWdhdGlvbnMsIG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnMsIG9NYWNyb0VsZW1lbnQsIHRydWUpO1xuXHRcdFx0aWYgKG9NYWNyb0VsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBvUmVtYWluaW5nU2xvdHMgPSBvTWFjcm9FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRcdFx0XHRvUmVtYWluaW5nU2xvdHMuZm9yRWFjaChmdW5jdGlvbiAob1Nsb3RFbGVtZW50KSB7XG5cdFx0XHRcdFx0b1Nsb3RFbGVtZW50LnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGNvcmVSZXF1aXJlKSB7XG5cdFx0XHRcdFx0bGV0IHJlcXVpcmVPbk1hY3JvID0gb01hY3JvRWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhcInNhcC51aS5jb3JlXCIsIFwicmVxdWlyZVwiKTtcblx0XHRcdFx0XHRpZiAocmVxdWlyZU9uTWFjcm8pIHtcblx0XHRcdFx0XHRcdHJlcXVpcmVPbk1hY3JvID0gcmVxdWlyZU9uTWFjcm8uc3Vic3RyaW5nKDAsIHJlcXVpcmVPbk1hY3JvLmxlbmd0aCAtIDEpICsgXCIsXCIgKyBjb3JlUmVxdWlyZS5zdWJzdHJpbmcoMSk7IC8vIFJlbW92ZSBsYXN0IH0gYW5kIGZpcnN0IHtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWlyZU9uTWFjcm8gPSBjb3JlUmVxdWlyZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b01hY3JvRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhcInNhcC51aS5jb3JlXCIsIFwicmVxdWlyZVwiLCByZXF1aXJlT25NYWNybyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG9QcmV2aW91c01hY3JvSW5mbykge1xuXHRcdFx0Ly9yZXN0b3JlIG1hY3JvIGluZm8gaWYgYXZhaWxhYmxlXG5cdFx0XHRvU2V0dGluZ3NbXCJfbWFjcm9JbmZvXCJdID0gb1ByZXZpb3VzTWFjcm9JbmZvO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxldGUgb1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXTtcblx0XHR9XG5cdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIGEgZ2VuZXJpYyBlcnJvciAodXN1YWxseSBjb2RlIGVycm9yKSwgd2UgcmV0cmlldmUgdGhlIGN1cnJlbnQgY29udGV4dCBpbmZvcm1hdGlvbiBhbmQgY3JlYXRlIGEgZGVkaWNhdGVkIGVycm9yIG1lc3NhZ2Vcblx0XHRjb25zdCB0cmFjZURldGFpbHMgPSB7XG5cdFx0XHRpbml0aWFsUHJvcGVydGllczoge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRyZXNvbHZlZFByb3BlcnRpZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0bWlzc2luZ0NvbnRleHRzOiBtTWlzc2luZ0NvbnRleHRcblx0XHR9O1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIGluaXRpYWxLZXlzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0dHJhY2VEZXRhaWxzLmluaXRpYWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0cGF0aDogcHJvcGVydHlWYWx1ZS5nZXRQYXRoKCksXG5cdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5VmFsdWUuZ2V0T2JqZWN0KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyYWNlRGV0YWlscy5pbml0aWFsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydHlWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKCFpbml0aWFsS2V5cy5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRwYXRoOiBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLmdldE9iamVjdCgpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0Y29uc3Qgb0Vycm9yID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRbYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtvTWV0YWRhdGEubmFtZX1gXSxcblx0XHRcdG9Ob2RlLm91dGVySFRNTCxcblx0XHRcdHRyYWNlRGV0YWlscyxcblx0XHRcdChlIGFzIEVycm9yKS5zdGFja1xuXHRcdCk7XG5cdFx0Y29uc3Qgb1RlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yLCB0cnVlKTtcblx0XHRvTm9kZS5yZXBsYWNlV2l0aCguLi5vVGVtcGxhdGUpO1xuXHR9XG59XG5mdW5jdGlvbiBhZGRTaW5nbGVDb250ZXh0KFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQgfCB1bmRlZmluZWQ+LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b0N0eDoge1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsPzogc3RyaW5nO1xuXHR9XG4pOiB2b2lkIHtcblx0Y29uc3Qgc0tleSA9IChvQ3R4Lm5hbWUgfHwgb0N0eC5tb2RlbCB8fCB1bmRlZmluZWQpIGFzIHN0cmluZztcblx0aWYgKG1Db250ZXh0c1tzS2V5XSkge1xuXHRcdHJldHVybjsgLy8gZG8gbm90IGFkZCB0d2ljZVxuXHR9XG5cdHRyeSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9DdHgucGF0aDtcblx0XHRpZiAob0N0eC5tb2RlbCAhPT0gbnVsbCkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gYCR7b0N0eC5tb2RlbH0+JHtzQ29udGV4dFBhdGh9YDtcblx0XHR9XG5cdFx0Y29uc3QgbVNldHRpbmcgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXHRcdGlmIChvQ3R4Lm1vZGVsID09PSBcImNvbnZlcnRlckNvbnRleHRcIiAmJiBvQ3R4LnBhdGgubGVuZ3RoID4gMCkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWxdLmdldENvbnRleHQob0N0eC5wYXRoIC8qLCBtU2V0dGluZy5iaW5kaW5nQ29udGV4dHNbb0N0eC5tb2RlbF0qLyk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSBpZiAoIW1TZXR0aW5nLmJpbmRpbmdDb250ZXh0c1tvQ3R4Lm1vZGVsIV0gJiYgbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXSkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXS5nZXRDb250ZXh0KG9DdHgucGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtQ29udGV4dHNbc0tleV0gPSBvVmlzaXRvci5nZXRDb250ZXh0KHNDb250ZXh0UGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH1cblx0fSBjYXRjaCAoZXgpIHtcblx0XHQvLyBpZ25vcmUgdGhlIGNvbnRleHQgYXMgdGhpcyBjYW4gb25seSBiZSB0aGUgY2FzZSBpZiB0aGUgbW9kZWwgaXMgbm90IHJlYWR5LFxuXHRcdC8vIGkuZS4gbm90IGEgcHJlcHJvY2Vzc2luZyBtb2RlbCBidXQgbWF5YmUgYSBtb2RlbCBmb3IgcHJvdmlkaW5nIGFmdGVyd2FyZHNcblx0fVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqXG4gKiBAcGFyYW0gQnVpbGRpbmdCbG9ja0NsYXNzIFRoZSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckJ1aWxkaW5nQmxvY2soQnVpbGRpbmdCbG9ja0NsYXNzOiB0eXBlb2YgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlKTogdm9pZCB7XG5cdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRcdFx0YXN5bmMgKG9Ob2RlOiBFbGVtZW50LCBvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjaykgPT4gcHJvY2Vzc0J1aWxkaW5nQmxvY2soQnVpbGRpbmdCbG9ja0NsYXNzLCBvTm9kZSwgb1Zpc2l0b3IpLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVzcGFjZSxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS54bWxUYWcgfHwgQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVcblx0XHQpO1xuXHR9XG5cdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRcdFx0YXN5bmMgKG9Ob2RlOiBFbGVtZW50LCBvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjaykgPT4gcHJvY2Vzc0J1aWxkaW5nQmxvY2soQnVpbGRpbmdCbG9ja0NsYXNzLCBvTm9kZSwgb1Zpc2l0b3IsIHRydWUpLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnB1YmxpY05hbWVzcGFjZSxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS54bWxUYWcgfHwgQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogVW5SZWdpc3RlciBhIGJ1aWxkaW5nIGJsb2NrIGRlZmluaXRpb24gc28gdGhhdCBpdCBpcyBubyBsb25nZXIgdXNlZCBpbnNpZGUgdGhlIHhtbCB0ZW1wbGF0ZSBwcm9jZXNzb3IuXG4gKlxuICogQHBhcmFtIEJ1aWxkaW5nQmxvY2tDbGFzcyBUaGUgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckJ1aWxkaW5nQmxvY2soQnVpbGRpbmdCbG9ja0NsYXNzOiB0eXBlb2YgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlKTogdm9pZCB7XG5cdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRcdFx0bnVsbCxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UsXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEueG1sVGFnIHx8IEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lXG5cdFx0KTtcblx0fVxuXHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnB1YmxpY05hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihcblx0XHRcdG51bGwsXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRXJyb3JYTUwoZXJyb3JNZXNzYWdlczogc3RyaW5nW10sIHhtbEZyYWdtZW50OiBzdHJpbmcsIGFkZGl0aW9uYWxEYXRhPzogb2JqZWN0LCBzdGFjaz86IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IGVycm9yTGFiZWxzID0gZXJyb3JNZXNzYWdlcy5tYXAoKGVycm9yTWVzc2FnZSkgPT4geG1sYDxtOkxhYmVsIHRleHQ9XCIke2VzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKGVycm9yTWVzc2FnZSl9XCIvPmApO1xuXHRsZXQgZXJyb3JTdGFjayA9IFwiXCI7XG5cdGlmIChzdGFjaykge1xuXHRcdGNvbnN0IHN0YWNrRm9ybWF0dGVkID0gYnRvYShgPHByZT4ke3N0YWNrfTwvcHJlPmApO1xuXHRcdGVycm9yU3RhY2sgPSB4bWxgPG06Rm9ybWF0dGVkVGV4dCBodG1sVGV4dD1cIns9IEJCRi5iYXNlNjREZWNvZGUoJyR7c3RhY2tGb3JtYXR0ZWR9JykgfVwiIC8+YDtcblx0fVxuXHRsZXQgYWRkaXRpb25hbFRleHQgPSBcIlwiO1xuXHRpZiAoYWRkaXRpb25hbERhdGEpIHtcblx0XHRhZGRpdGlvbmFsVGV4dCA9IHhtbGA8bTpWQm94PlxuXHRcdFx0XHRcdFx0PG06TGFiZWwgdGV4dD1cIlRyYWNlIEluZm9cIi8+XG5cdFx0XHRcdFx0XHQ8Y29kZTpDb2RlRWRpdG9yIHR5cGU9XCJqc29uXCIgIHZhbHVlPVwiJHtgez0gQkJGLmJhc2U2NERlY29kZSgnJHtidG9hKEpTT04uc3RyaW5naWZ5KGFkZGl0aW9uYWxEYXRhLCBudWxsLCA0KSl9JykgfWB9XCIgaGVpZ2h0PVwiMzAwcHhcIiAvPlxuXHRcdFx0XHRcdDwvbTpWQm94PmA7XG5cdH1cblx0cmV0dXJuIHhtbGA8Y29udHJvbHM6Rm9ybUVsZW1lbnRXcmFwcGVyIHhtbG5zOmNvbnRyb2xzPVwic2FwLmZlLmNvcmUuY29udHJvbHNcIj5cblx0XHRcdFx0XHQ8bTpWQm94IHhtbG5zOm09XCJzYXAubVwiIHhtbG5zOmNvZGU9XCJzYXAudWkuY29kZWVkaXRvclwiIGNvcmU6cmVxdWlyZT1cIntCQkY6J3NhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja0Zvcm1hdHRlcid9XCI+XG5cdFx0XHRcdFx0JHtlcnJvckxhYmVsc31cblx0XHRcdFx0XHQke2Vycm9yU3RhY2t9XG5cdFx0XHRcdFx0XHQ8Z3JpZDpDU1NHcmlkIGdyaWRUZW1wbGF0ZVJvd3M9XCJmclwiIGdyaWRUZW1wbGF0ZUNvbHVtbnM9XCJyZXBlYXQoMiwxZnIpXCIgZ3JpZEdhcD1cIjFyZW1cIiB4bWxuczpncmlkPVwic2FwLnVpLmxheW91dC5jc3NncmlkXCIgPlxuXHRcdFx0XHRcdFx0XHQ8bTpWQm94PlxuXHRcdFx0XHRcdFx0XHRcdDxtOkxhYmVsIHRleHQ9XCJIb3cgdGhlIGJ1aWxkaW5nIGJsb2NrIHdhcyBjYWxsZWRcIi8+XG5cdFx0XHRcdFx0XHRcdFx0PGNvZGU6Q29kZUVkaXRvciB0eXBlPVwieG1sXCIgdmFsdWU9XCIke2B7PSBCQkYuYmFzZTY0RGVjb2RlKCcke2J0b2EoeG1sRnJhZ21lbnQucmVwbGFjZUFsbChcIiZndDtcIiwgXCI+XCIpKX0nKSB9YH1cIiBoZWlnaHQ9XCIzMDBweFwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvbTpWQm94PlxuXHRcdFx0XHRcdFx0XHQke2FkZGl0aW9uYWxUZXh0fVxuXHRcdFx0XHRcdFx0PC9ncmlkOkNTU0dyaWQ+XG5cdFx0XHRcdFx0PC9tOlZCb3g+XG5cdFx0XHRcdDwvY29udHJvbHM6Rm9ybUVsZW1lbnRXcmFwcGVyPmA7XG59XG5cbmNvbnN0IHRlbXBvcmFyeU9iamVjdFN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4vKipcbiAqIFN0b3JlcyBhbiBvYmplY3QgdmFsdWUgaW4gYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhbmQgcmV0dXJucyBhbiBJRCB1c2VkIHRvIHJldHJpZXZlIHRoaXMgdmFsdWUgYXQgYSBsYXRlciBwb2ludCBpbiB0aW1lLlxuICpcbiAqIFJlcXVpcmVkIGFzIHRoZXJlIGlzIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aGUgeG1sYCBmdW5jdGlvbiwgd2hpY2ggbWlnaHQgdGFrZSBvYmplY3RzIGFzIHBhcmFtZXRlcnMgYnV0IG5lZWRzIHRvIHJldHVybiBhIHNlcmlhbGl6ZWQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBzdG9yZVxuICogQHJldHVybnMgSUQgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZVxuICovXG5mdW5jdGlvbiBzdG9yZU9iamVjdFZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydHlVSUQgPSBgL3VpZC0tJHt1aWQoKX1gO1xuXHR0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF0gPSB2YWx1ZTtcblx0cmV0dXJuIHByb3BlcnR5VUlEO1xufVxuXG4vKipcbiAqIFVuc3RvcmVzIGFuIG9iamVjdCBmcm9tIGEgdGVtcG9yYXJ5IHN0b3JlIGJ5IHJlbW92aW5nIGl0IGFuZCByZXR1cm5pbmcgaXRzIG9iamVjdCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlVSUQgSUQgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZVxuICogQHJldHVybnMgT2JqZWN0IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHVuc3RvcmVPYmplY3RWYWx1ZShwcm9wZXJ0eVVJRDogc3RyaW5nKTogdW5rbm93biB7XG5cdGNvbnN0IHZhbHVlID0gdGVtcG9yYXJ5T2JqZWN0U3RvcmVbcHJvcGVydHlVSURdO1xuXHRkZWxldGUgdGVtcG9yYXJ5T2JqZWN0U3RvcmVbcHJvcGVydHlVSURdO1xuXHRyZXR1cm4gdmFsdWU7XG59XG5cbmxldCBwcm9jZXNzTmV4dFhtbEluVHJhY2UgPSBmYWxzZTtcbi8qKlxuICogTWFrZXMgc3VyZSB0aGF0IGFsbCB4bWxgIGNhbGxzIGluc2lkZSB0aGUgZ2l2ZW4gbWV0aG9kIGFyZSBwcm9jZXNzZWQgaW4gdHJhY2UgbW9kZS5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gZXhlY3V0ZVxuICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZ2l2ZW4gbWV0aG9kXG4gKi9cbmNvbnN0IHByb2Nlc3NYbWxJblRyYWNlID0gYXN5bmMgZnVuY3Rpb24gKG1ldGhvZDogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUHJvbWlzZTx1bmtub3duPik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRwcm9jZXNzTmV4dFhtbEluVHJhY2UgPSB0cnVlO1xuXHRsZXQgcmV0dXJuVmFsdWU7XG5cdHRyeSB7XG5cdFx0cmV0dXJuVmFsdWUgPSBtZXRob2QoKTtcblx0fSBmaW5hbGx5IHtcblx0XHRwcm9jZXNzTmV4dFhtbEluVHJhY2UgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG4vKipcbiAqIFBhcnNlIGFuIFhNTCBzdHJpbmcgYW5kIHJldHVybiB0aGUgYXNzb2NpYXRlZCBkb2N1bWVudC5cbiAqXG4gKiBAcGFyYW0geG1sU3RyaW5nIFRoZSB4bWwgc3RyaW5nXG4gKiBAcGFyYW0gW2FkZERlZmF1bHROYW1lc3BhY2VzXSBXaGV0aGVyIG9yIG5vdCBkZWZhdWx0IG5hbWVzcGFjZXMgc2hvdWxkIGJlIGFkZGVkXG4gKiBAcmV0dXJucyBUaGUgWE1MIGRvY3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VYTUxTdHJpbmcoeG1sU3RyaW5nOiBzdHJpbmcsIGFkZERlZmF1bHROYW1lc3BhY2VzID0gZmFsc2UpOiBFbGVtZW50W10ge1xuXHRpZiAoYWRkRGVmYXVsdE5hbWVzcGFjZXMpIHtcblx0XHR4bWxTdHJpbmcgPSBgPHRlbXBsYXRlXG5cdFx0XHRcdFx0XHR4bWxuczp0ZW1wbGF0ZT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS50ZW1wbGF0ZS8xXCJcblx0XHRcdFx0XHRcdHhtbG5zOm09XCJzYXAubVwiXG5cdFx0XHRcdFx0XHR4bWxuczptYWNyb3M9XCJzYXAuZmUubWFjcm9zXCJcblx0XHRcdFx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHRcdFx0XHR4bWxuczptZGM9XCJzYXAudWkubWRjXCJcblx0XHRcdFx0XHRcdHhtbG5zOmN1c3RvbURhdGE9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCI+JHt4bWxTdHJpbmd9PC90ZW1wbGF0ZT5gO1xuXHR9XG5cdGNvbnN0IHhtbERvY3VtZW50ID0gRE9NUGFyc2VySW5zdGFuY2UucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0bGV0IG91dHB1dCA9IHhtbERvY3VtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHR3aGlsZSAob3V0cHV0Py5sb2NhbE5hbWUgPT09IFwidGVtcGxhdGVcIikge1xuXHRcdG91dHB1dCA9IG91dHB1dC5maXJzdEVsZW1lbnRDaGlsZDtcblx0fVxuXHRjb25zdCBjaGlsZHJlbiA9IG91dHB1dD8ucGFyZW50RWxlbWVudCA/IG91dHB1dD8ucGFyZW50RWxlbWVudC5jaGlsZHJlbiA6IFtvdXRwdXQgYXMgRWxlbWVudF07XG5cdHJldHVybiBBcnJheS5mcm9tKGNoaWxkcmVuKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYW4gWE1MIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSh2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiB2YWx1ZT8ucmVwbGFjZSgvJi9nLCBcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpLnJlcGxhY2UoLycvZywgXCImYXBvcztcIik7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckluVHJhY2VNb2RlKG91dFN0cjogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgeG1sUmVzdWx0ID0gcGFyc2VYTUxTdHJpbmcob3V0U3RyLCB0cnVlKTtcblx0aWYgKHhtbFJlc3VsdD8ubGVuZ3RoID4gMCAmJiB4bWxSZXN1bHRbMF0/LmxvY2FsTmFtZSA9PT0gXCJwYXJzZXJlcnJvclwiKSB7XG5cdFx0Y29uc3QgZXJyb3JNZXNzYWdlID0gKHhtbFJlc3VsdFswXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0IHx8ICh4bWxSZXN1bHRbMF0gYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTDtcblx0XHRyZXR1cm4gY3JlYXRlRXJyb3JYTUwoW2Vycm9yTWVzc2FnZS5zcGxpdChcIlxcblwiKVswXV0sIG91dFN0cik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG91dFN0cjtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBYTUxQcm9jZXNzb3JUeXBlVmFsdWUgPVxuXHR8IHN0cmluZ1xuXHR8IGJvb2xlYW5cblx0fCBudW1iZXJcblx0fCB1bmRlZmluZWRcblx0fCBudWxsXG5cdHwgb2JqZWN0XG5cdHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblx0fCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcj5cblx0fCBBcnJheTxzdHJpbmc+XG5cdHwgQXJyYXk8RnVuY3Rpb24+XG5cdHwgRnVuY3Rpb25cblx0fCBDb250ZXh0O1xuLyoqXG4gKiBDcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRlbXBsYXRlIGxpdGVyYWwgd2hpbGUgaGFuZGxpbmcgc3BlY2lhbCBvYmplY3QgY2FzZS5cbiAqXG4gKiBAcGFyYW0gc3RyaW5ncyBUaGUgc3RyaW5nIHBhcnRzIG9mIHRoZSB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcGFyYW0gdmFsdWVzIFRoZSB2YWx1ZXMgcGFydCBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZG9jdW1lbnQgcmVwcmVzZW50aW5nIHRoZSBzdHJpbmcgdGhhdCB3YXMgdXNlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHhtbCA9IChzdHJpbmdzOiBUZW1wbGF0ZVN0cmluZ3NBcnJheSwgLi4udmFsdWVzOiBYTUxQcm9jZXNzb3JUeXBlVmFsdWVbXSk6IHN0cmluZyA9PiB7XG5cdGxldCBvdXRTdHIgPSBcIlwiO1xuXHRsZXQgaTtcblx0Zm9yIChpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuXHRcdG91dFN0ciArPSBzdHJpbmdzW2ldO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBkaWZmZXJlbnQgY2FzZSBvZiBvYmplY3QsIGlmIGl0J3MgYW4gYXJyYXkgd2Ugam9pbiB0aGVtLCBpZiBpdCdzIGEgYmluZGluZyBleHByZXNzaW9uIHRoZW4gd2UgY29tcGlsZSBpdC5cblx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcblxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlLmZsYXQoNSkuam9pbihcIlxcblwiKS50cmltKCk7XG5cdFx0fSBlbHNlIGlmIChpc0Z1bmN0aW9uQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWUubWFwKCh2YWx1ZWZuKSA9PiB2YWx1ZWZuKCkpLmpvaW4oXCJcXG5cIik7XG5cdFx0fSBlbHNlIGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGNvbXBpbGVkRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKHZhbHVlKTtcblx0XHRcdG91dFN0ciArPSBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShjb21waWxlZEV4cHJlc3Npb24pO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRvdXRTdHIgKz0gXCJ7dGhpcz51bmRlZmluZWRWYWx1ZX1cIjtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWUoKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0aWYgKGlzQ29udGV4dCh2YWx1ZSkpIHtcblx0XHRcdFx0b3V0U3RyICs9IHZhbHVlLmdldFBhdGgoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5VUlkID0gc3RvcmVPYmplY3RWYWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdG91dFN0ciArPSBgJHtwcm9wZXJ0eVVJZH1gO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICF2YWx1ZS5zdGFydHNXaXRoKFwiPFwiKSAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIiZsdDtcIikpIHtcblx0XHRcdG91dFN0ciArPSBlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZTtcblx0XHR9XG5cdH1cblx0b3V0U3RyICs9IHN0cmluZ3NbaV07XG5cdG91dFN0ciA9IG91dFN0ci50cmltKCk7XG5cdGlmIChwcm9jZXNzTmV4dFhtbEluVHJhY2UpIHtcblx0XHRyZXR1cm4gcmVuZGVySW5UcmFjZU1vZGUob3V0U3RyKTtcblx0fVxuXHRyZXR1cm4gb3V0U3RyO1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7OztFQWdDQSxNQUFNQSxZQUFZLEdBQUcsc0VBQXNFO0VBQzNGLE1BQU1DLGdCQUFnQixHQUFHLGdF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
|
|
947
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0dHRVJfU0NPUEUiLCJYTUxURU1QTEFUSU5HX05TIiwiRE9NUGFyc2VySW5zdGFuY2UiLCJET01QYXJzZXIiLCJ2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0Iiwic05hbWUiLCJtQ29udGV4dHMiLCJvQ29udGV4dFNldHRpbmdzIiwic0tleSIsIm9Db250ZXh0Iiwib0NvbnRleHRPYmplY3QiLCJnZXRPYmplY3QiLCJyZXF1aXJlZCIsIkVycm9yIiwiaGFzT3duUHJvcGVydHkiLCIka2luZCIsInVuZGVmaW5lZCIsImV4cGVjdGVkVHlwZXMiLCJpbmNsdWRlcyIsImdldFBhdGgiLCIkVHlwZSIsImV4cGVjdGVkQW5ub3RhdGlvblR5cGVzIiwidmFsaWRhdGVNYWNyb1NpZ25hdHVyZSIsIm9NZXRhZGF0YSIsIm9Ob2RlIiwiYU1ldGFkYXRhQ29udGV4dEtleXMiLCJtZXRhZGF0YUNvbnRleHRzIiwiT2JqZWN0Iiwia2V5cyIsImFQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIm9BdHRyaWJ1dGVOYW1lcyIsImF0dHJpYnV0ZU5hbWVzIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJhdHRyaWJ1dGVOYW1lIiwiZm9yRWFjaCIsIm9Qcm9wZXJ0eVNldHRpbmdzIiwiaGFzQXR0cmlidXRlIiwic3RhcnRzV2l0aCIsIkxvZyIsIndhcm5pbmciLCJTQVBfVUlfQ09SRV9FTEVNRU5UIiwiU0FQX1VJX01PREVMX0NPTlRFWFQiLCJ0cmFuc2Zvcm1NZXRhZGF0YSIsImJ1aWxkaW5nQmxvY2tNZXRhZGF0YSIsImFnZ3JlZ2F0aW9ucyIsImRlcGVuZGVudHMiLCJ0eXBlIiwic2xvdCIsImlzUHVibGljIiwiY3VzdG9tRGF0YSIsImxheW91dERhdGEiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eVR5cGUiLCJfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyIsIm9TZXR0aW5ncyIsInNBdHRyaWJ1dGVWYWx1ZSIsInNNZXRhUGF0aCIsInNDb250ZXh0UGF0aCIsImN1cnJlbnRDb250ZXh0UGF0aCIsImVuZHNXaXRoIiwibW9kZWwiLCJwYXRoIiwiX2NyZWF0ZUluaXRpYWxNZXRhZGF0YUNvbnRleHQiLCJzQXR0cmlidXRlTmFtZSIsInJldHVybkNvbnRleHQiLCJtb2RlbHMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJkYXRhIiwidW5zdG9yZU9iamVjdFZhbHVlIiwic2V0UHJvcGVydHkiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJfZ2V0TWV0YWRhdGFDb250ZXh0Iiwib1Zpc2l0b3IiLCJiRG9Ob3RSZXNvbHZlIiwiaXNPcGVuIiwib01ldGFkYXRhQ29udGV4dCIsImdldEF0dHJpYnV0ZSIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiZ2V0Q29udGV4dCIsImUiLCJwcm9jZXNzUHJvcGVydGllcyIsImRlZmluaXRpb25Qcm9wZXJ0aWVzIiwiYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyIsInByb3BlcnR5VmFsdWVzIiwic0tleVZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiZGVlcENsb25lIiwiZXJyb3IiLCJ2aXNpdEF0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJnZXROYW1lZEl0ZW0iLCJ2YWx1ZSIsIk51bWJlciIsInByb2Nlc3NDb250ZXh0cyIsImNvbnRleHRQYXRoIiwibU1pc3NpbmdDb250ZXh0Iiwib0RlZmluaXRpb25Db250ZXh0cyIsImFEZWZpbml0aW9uQ29udGV4dHNLZXlzIiwiY29udGV4dFBhdGhJbmRleCIsImluZGV4T2YiLCJjb250ZXh0UGF0aERlZmluaXRpb24iLCJzcGxpY2UiLCJwcm9wZXJ0eVZhbHVlIiwibGVuZ3RoIiwibmFtZSIsImFkZFNpbmdsZUNvbnRleHQiLCJwYXJzZUFnZ3JlZ2F0aW9uIiwib0FnZ3JlZ2F0aW9uIiwicHJvY2Vzc0FnZ3JlZ2F0aW9ucyIsIm9PdXRPYmplY3RzIiwiY2hpbGRyZW4iLCJjaGlsZElkeCIsImNoaWxkRGVmaW5pdGlvbiIsImNoaWxkS2V5Iiwic2V0QXR0cmlidXRlIiwiYWdncmVnYXRpb25PYmplY3QiLCJrZXkiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkFmdGVyIiwiYW5jaG9yIiwidGFnTmFtZSIsIm5vZGVOYW1lIiwicHJvY2Vzc0NoaWxkcmVuIiwib0FnZ3JlZ2F0aW9ucyIsImZpcnN0RWxlbWVudENoaWxkIiwib0ZpcnN0RWxlbWVudENoaWxkIiwibmFtZXNwYWNlVVJJIiwib1BhcmVudCIsInBhcmVudE5vZGUiLCJpQ2hpbGRJbmRleCIsIkFycmF5IiwiZnJvbSIsInZpc2l0Tm9kZSIsIm5leHRFbGVtZW50U2libGluZyIsInNDaGlsZE5hbWUiLCJsb2NhbE5hbWUiLCJzQWdncmVnYXRpb25OYW1lIiwidG9VcHBlckNhc2UiLCJkZWZhdWx0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJwYXJzZWRBZ2dyZWdhdGlvbiIsInBhcnNlZEFnZ3JlZ2F0aW9uS2V5Iiwib05leHRDaGlsZCIsIm5leHRDaGlsZCIsImhhc1ZpcnR1YWxOb2RlIiwiY2hpbGRXcmFwcGVyIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsIm9OZXdDaGlsZCIsImNsb25lTm9kZSIsImFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXMiLCJjaGlsZEluZGV4Iiwic3ViQ2hpbGQiLCJzdWJPYmplY3RLZXkiLCJzdWJPYmplY3QiLCJzdWJDaGlsZEF0dHJpYnV0ZU5hbWVzIiwic3ViQ2hpbGRBdHRyaWJ1dGVOYW1lIiwibXlDaGlsZCIsInB1c2giLCJwcm9jZXNzU2xvdHMiLCJvTWV0YWRhdGFBZ2dyZWdhdGlvbnMiLCJwcm9jZXNzQ3VzdG9tRGF0YSIsIm9BZ2dyZWdhdGlvbkVsZW1lbnQiLCJvRWxlbWVudENoaWxkIiwic1Nsb3ROYW1lIiwib1RhcmdldEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudCIsInJlcGxhY2VXaXRoIiwicmVwbGFjZSIsInByb2Nlc3NCdWlsZGluZ0Jsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJzRnJhZ21lbnROYW1lIiwiZnJhZ21lbnQiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJ4bWxUYWciLCJnZXRTZXR0aW5ncyIsIkpTT05Nb2RlbCIsImluaXRpYWxLZXlzIiwib0NvbnRyb2xDb25maWciLCJ2aWV3RGF0YSIsInByb2Nlc3NlZFByb3BlcnR5VmFsdWVzIiwicHJvcE5hbWUiLCJvRGF0YSIsIm9yaWdpbmFsRGVmaW5pdGlvbiIsInZhbGlkYXRlIiwiaXNBIiwiZ2V0TW9kZWwiLCJvSW5zdGFuY2UiLCJnZXRQcm9wZXJ0aWVzIiwic0NvbnRleHROYW1lIiwidGFyZ2V0T2JqZWN0IiwiaXNDb250ZXh0IiwiYXR0cmlidXRlVmFsdWUiLCJzdG9yZU9iamVjdFZhbHVlIiwibmV3Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib0F0dHJpYnV0ZXNNb2RlbCIsIkF0dHJpYnV0ZU1vZGVsIiwib1ByZXZpb3VzTWFjcm9JbmZvIiwiY29yZVJlcXVpcmUiLCJUcmFjZUluZm8iLCJpc1RyYWNlSW5mb0FjdGl2ZSIsIm9UcmFjZUluZm8iLCJ0cmFjZU1hY3JvQ2FsbHMiLCJtYWNyb0luZm8iLCJvQ29udGV4dFZpc2l0b3IiLCJ3aXRoIiwib1Byb21pc2UiLCJpbnNlcnRGcmFnbWVudCIsIm9sZEtleXMiLCJ0ZW1wb3JhcnlPYmplY3RTdG9yZSIsInRlbXBsYXRlU3RyaW5nIiwiZ2V0UnVudGltZUJ1aWxkaW5nQmxvY2tUZW1wbGF0ZSIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0VGVtcGxhdGUiLCJpc1J1bnRpbWUiLCJzdG9yZUtleSIsImhhc0Vycm9yIiwiaGFzUGFyc2VFcnJvciIsInBhcnNlZFRlbXBsYXRlIiwicGFyc2VYTUxTdHJpbmciLCJlbGVtZW50IiwiaXRlciIsImNyZWF0ZU5vZGVJdGVyYXRvciIsIk5vZGVGaWx0ZXIiLCJTSE9XX1RFWFQiLCJ0ZXh0bm9kZSIsIm5leHROb2RlIiwidGV4dENvbnRlbnQiLCJ0cmltIiwicHJvY2Vzc1htbEluVHJhY2UiLCJpbml0aWFsVGVtcGxhdGUiLCJvRXJyb3JUZXh0IiwiY3JlYXRlRXJyb3JYTUwiLCJtYXAiLCJ0ZW1wbGF0ZSIsIm91dGVySFRNTCIsImpvaW4iLCJ2aXNpdGVkTm9kZXMiLCJpbnRlcm5hbE5vZGUiLCJQcm9taXNlIiwiYWxsIiwicmVtb3ZlIiwicmVzb2x2ZSIsIm9NYWNyb0VsZW1lbnQiLCJvUmVtYWluaW5nU2xvdHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwib1Nsb3RFbGVtZW50IiwicmVxdWlyZU9uTWFjcm8iLCJnZXRBdHRyaWJ1dGVOUyIsInN1YnN0cmluZyIsInNldEF0dHJpYnV0ZU5TIiwidHJhY2VEZXRhaWxzIiwiaW5pdGlhbFByb3BlcnRpZXMiLCJyZXNvbHZlZFByb3BlcnRpZXMiLCJtaXNzaW5nQ29udGV4dHMiLCJvRXJyb3IiLCJzdGFjayIsIm9UZW1wbGF0ZSIsIm9DdHgiLCJtU2V0dGluZyIsImV4IiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwiWE1MUHJlcHJvY2Vzc29yIiwicGx1Z0luIiwidW5yZWdpc3RlckJ1aWxkaW5nQmxvY2siLCJlcnJvck1lc3NhZ2VzIiwieG1sRnJhZ21lbnQiLCJhZGRpdGlvbmFsRGF0YSIsImVycm9yTGFiZWxzIiwiZXJyb3JNZXNzYWdlIiwieG1sIiwiZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUiLCJlcnJvclN0YWNrIiwic3RhY2tGb3JtYXR0ZWQiLCJidG9hIiwiYWRkaXRpb25hbFRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVwbGFjZUFsbCIsInByb3BlcnR5VUlEIiwidWlkIiwicHJvY2Vzc05leHRYbWxJblRyYWNlIiwibWV0aG9kIiwicmV0dXJuVmFsdWUiLCJ4bWxTdHJpbmciLCJhZGREZWZhdWx0TmFtZXNwYWNlcyIsInhtbERvY3VtZW50IiwicGFyc2VGcm9tU3RyaW5nIiwib3V0cHV0IiwicGFyZW50RWxlbWVudCIsInJlbmRlckluVHJhY2VNb2RlIiwib3V0U3RyIiwieG1sUmVzdWx0IiwiaW5uZXJUZXh0IiwiaW5uZXJIVE1MIiwic3BsaXQiLCJzdHJpbmdzIiwiaSIsInZhbHVlcyIsImlzQXJyYXkiLCJmbGF0IiwiaXNGdW5jdGlvbkFycmF5IiwidmFsdWVmbiIsImlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwiY29tcGlsZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9wZXJ0eVVJZCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEF0dHJpYnV0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0F0dHJpYnV0ZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0QnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24sXG5cdE9iamVjdFZhbHVlLFxuXHRPYmplY3RWYWx1ZTJcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL1J1bnRpbWVCdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNDb250ZXh0LCBpc0Z1bmN0aW9uQXJyYXkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQganN4IGZyb20gXCJzYXAvZmUvY29yZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYWNyb0luZm8gfSBmcm9tIFwiLi4vVHJhY2VJbmZvXCI7XG5pbXBvcnQgVHJhY2VJbmZvIGZyb20gXCIuLi9UcmFjZUluZm9cIjtcblxuY29uc3QgTE9HR0VSX1NDT1BFID0gXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuY29uc3QgWE1MVEVNUExBVElOR19OUyA9IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIjtcbmNvbnN0IERPTVBhcnNlckluc3RhbmNlID0gbmV3IERPTVBhcnNlcigpO1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSA9IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSAmIHtcblx0bWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+O1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgbWV0YSBkYXRhIGNvbnRleHRcbiAqL1xudHlwZSBNZXRhRGF0YUNvbnRleHQgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdG1vZGVsOiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGN1cnJlbnRDb250ZXh0UGF0aDogQ29udGV4dDtcblx0aXNQdWJsaWM6IGJvb2xlYW47XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRpc1J1bnRpbWVJbnN0YW50aWF0aW9uPzogYm9vbGVhbjtcblx0bW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbD4gJiB7XG5cdFx0Y29udmVydGVyQ29udGV4dDogSlNPTk1vZGVsO1xuXHRcdHZpZXdEYXRhOiBKU09OTW9kZWw7XG5cdFx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcblx0XHRcInNhcC5mZS5pMThuXCI/OiBSZXNvdXJjZU1vZGVsO1xuXHR9O1xuXHRiaW5kaW5nQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+O1xuXHRfbWFjcm9JbmZvPzogTWFjcm9JbmZvO1xuXHRbazogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIElWaXNpdG9yQ2FsbGJhY2sgPSB7XG5cdGdldFNldHRpbmdzKCk6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdC8qKlxuXHQgKiBWaXNpdHMgdGhlIGdpdmVuIG5vZGUgYW5kIGVpdGhlciBwcm9jZXNzZXMgYSB0ZW1wbGF0ZSBpbnN0cnVjdGlvbiwgY2FsbHNcblx0ICogYSB2aXNpdG9yLCBvciBzaW1wbHkgY2FsbHMgYm90aCB7QGxpbmtcblx0ICogc2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3IuSUNhbGxiYWNrLnZpc2l0QXR0cmlidXRlcyB2aXNpdEF0dHJpYnV0ZXN9XG5cdCAqIGFuZCB7QGxpbmsgc2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3IuSUNhbGxiYWNrLnZpc2l0Q2hpbGROb2Rlc1xuXHQgKiB2aXNpdENoaWxkTm9kZXN9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb05vZGVcblx0ICogICBUaGUgWE1MIERPTSBub2RlXG5cdCAqIEByZXR1cm5zXG5cdCAqICAgQSB0aGVuYWJsZSB3aGljaCByZXNvbHZlcyB3aXRoIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gYXMgc29vbiBhcyB2aXNpdGluZ1xuXHQgKiAgIGlzIGRvbmUsIG9yIGlzIHJlamVjdGVkIHdpdGggYSBjb3JyZXNwb25kaW5nIGVycm9yIGlmIHZpc2l0aW5nIGZhaWxzXG5cdCAqL1xuXHR2aXNpdE5vZGUob05vZGU6IE5vZGUpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKlxuXHQgKiBJbnNlcnRzIHRoZSBmcmFnbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHBsYWNlIG9mIHRoZSBnaXZlbiBlbGVtZW50LiBMb2FkcyB0aGVcblx0ICogZnJhZ21lbnQsIHRha2VzIGNhcmUgb2YgY2FjaGluZyAoZm9yIHRoZSBjdXJyZW50IHByZS1wcm9jZXNzb3IgcnVuKSBhbmQgdmlzaXRzIHRoZVxuXHQgKiBmcmFnbWVudCdzIGNvbnRlbnQgb25jZSBpdCBoYXMgYmVlbiBpbXBvcnRlZCBpbnRvIHRoZSBlbGVtZW50J3Mgb3duZXIgZG9jdW1lbnQgYW5kXG5cdCAqIHB1dCBpbnRvIHBsYWNlLiBMb2FkaW5nIG9mIGZyYWdtZW50cyBpcyBhc3luY2hyb25vdXMgaWYgdGhlIHRlbXBsYXRlIHZpZXcgaXNcblx0ICogYXN5bmNocm9ub3VzLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0ZyYWdtZW50XG5cdCAqICAgdGhlIGZyYWdtZW50J3MgcmVzb2x2ZWQgbmFtZVxuXHQgKiBAcGFyYW0gb0VsZW1lbnRcblx0ICogICB0aGUgWE1MIERPTSBlbGVtZW50LCBlLmcuIDxzYXAudWkuY29yZTpGcmFnbWVudD4gb3IgPGNvcmU6RXh0ZW5zaW9uUG9pbnQ+XG5cdCAqIEBwYXJhbSBvV2l0aFxuXHQgKiAgIHRoZSBwYXJlbnQncyBcIndpdGhcIiBjb250cm9sXG5cdCAqIEByZXR1cm5zXG5cdCAqIEEgc3luYyBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBhcyBzb29uIGFzIHRoZSBmcmFnbWVudFxuXHQgKiAgIGhhcyBiZWVuIGluc2VydGVkLCBvciBpcyByZWplY3RlZCB3aXRoIGEgY29ycmVzcG9uZGluZyBlcnJvciBpZiBsb2FkaW5nIG9yIHZpc2l0aW5nXG5cdCAqICAgZmFpbHMuXG5cdCAqL1xuXHRpbnNlcnRGcmFnbWVudChzRnJhZ21lbnQ6IHN0cmluZywgb0VsZW1lbnQ6IEVsZW1lbnQsIG9XaXRoPzogQ29udHJvbCk6IFByb21pc2U8dm9pZD47XG5cdHZpc2l0QXR0cmlidXRlKG9Ob2RlOiBFbGVtZW50LCBvQXR0cmlidXRlOiBBdHRyKTogUHJvbWlzZTx2b2lkPjtcblx0dmlzaXRBdHRyaWJ1dGVzKG9Ob2RlOiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPjtcblx0Z2V0Vmlld0luZm8oKTogUHJvbWlzZTx1bmtub3duPjtcblx0dmlzaXRDaGlsZE5vZGVzKG9Ob2RlOiBOb2RlKTogUHJvbWlzZTx2b2lkPjtcblx0LyoqXG5cdCAqIEludGVycHJldHMgdGhlIGdpdmVuIFhNTCBET00gYXR0cmlidXRlIHZhbHVlIGFzIGEgYmluZGluZyBhbmQgcmV0dXJucyB0aGVcblx0ICogcmVzdWx0aW5nIHZhbHVlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1ZhbHVlXG5cdCAqICAgQW4gWE1MIERPTSBhdHRyaWJ1dGUgdmFsdWVcblx0ICogQHBhcmFtIFtlbGVtZW50XVxuXHQgKiAgIFRoZSBYTUwgRE9NIGVsZW1lbnQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiZWxvbmdzIHRvIChuZWVkZWQgb25seSBmb3Jcblx0ICogICB3YXJuaW5ncyB3aGljaCBhcmUgbG9nZ2VkIHRvIHRoZSBjb25zb2xlKVxuXHQgKiBAcmV0dXJuc1xuXHQgKiAgIEEgdGhlbmFibGUgd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0aW5nIHZhbHVlLCBvciBpcyByZWplY3RlZCB3aXRoIGFcblx0ICogICBjb3JyZXNwb25kaW5nIGVycm9yIChmb3IgZXhhbXBsZSwgYW4gZXJyb3IgdGhyb3duIGJ5IGEgZm9ybWF0dGVyKSBvclxuXHQgKiAgIDxjb2RlPm51bGw8L2NvZGU+IGluIGNhc2UgdGhlIGJpbmRpbmcgaXMgbm90IHJlYWR5IChiZWNhdXNlIGl0IHJlZmVycyB0byBhXG5cdCAqICAgbW9kZWwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSkgKHNpbmNlIDEuNTcuMClcblx0ICovXG5cdGdldFJlc3VsdChzVmFsdWU6IHN0cmluZywgZWxlbWVudD86IEVsZW1lbnQpOiBQcm9taXNlPENvbnRleHQ+IHwgbnVsbDtcblx0Z2V0Q29udGV4dChzUGF0aD86IHN0cmluZyk6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgY2FsbGJhY2sgaW50ZXJmYWNlIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gbWFwIG9mIHZhcmlhYmxlcyB3aGljaFxuXHQgKiBvdmVycmlkZSBjdXJyZW50bHkga25vd24gdmFyaWFibGVzIG9mIHRoZSBzYW1lIG5hbWUgaW4gPGNvZGU+dGhpczwvY29kZT5cblx0ICogcGFyZW50IGludGVyZmFjZSBvciByZXBsYWNlIHRoZW0gYWx0b2dldGhlci4gRWFjaCB2YXJpYWJsZSBuYW1lIGJlY29tZXMgYVxuXHQgKiBuYW1lZCBtb2RlbCB3aXRoIGEgY29ycmVzcG9uZGluZyBvYmplY3QgYmluZGluZyBhbmQgY2FuIGJlIHVzZWQgaW5zaWRlIHRoZVxuXHQgKiBYTUwgdGVtcGxhdGUgaW4gdGhlIHVzdWFsIHdheSwgdGhhdCBpcywgd2l0aCBhIGJpbmRpbmcgZXhwcmVzc2lvbiBsaWtlXG5cdCAqIDxjb2RlPlwie3Zhcj5zb21lL3JlbGF0aXZlL3BhdGh9XCI8L2NvZGU+IChzZWUgZXhhbXBsZSkuXG5cdCAqXG5cdCAqIEBwYXJhbSBbbVZhcmlhYmxlcz17fV1cblx0ICogICBNYXAgZnJvbSB2YXJpYWJsZSBuYW1lIChzdHJpbmcpIHRvIHZhbHVlXG5cdCAqIEBwYXJhbSBbYlJlcGxhY2VdXG5cdCAqICAgV2hldGhlciBvbmx5IHRoZSBnaXZlbiB2YXJpYWJsZXMgYXJlIGtub3duIGluIHRoZSBuZXcgY2FsbGJhY2sgaW50ZXJmYWNlXG5cdCAqICAgaW5zdGFuY2UsIG5vIGluaGVyaXRlZCBvbmVzXG5cdCAqIEByZXR1cm5zXG5cdCAqICAgQSBjYWxsYmFjayBpbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG1WYXJpYWJsZXNcblx0ICogQHBhcmFtIGJSZXBsYWNlXG5cdCAqL1xuXHRcIndpdGhcIihtVmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sIGJSZXBsYWNlPzogYm9vbGVhbik6IElWaXNpdG9yQ2FsbGJhY2s7XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0KFxuXHRzTmFtZTogc3RyaW5nLFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+LFxuXHRvQ29udGV4dFNldHRpbmdzOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbixcblx0c0tleTogc3RyaW5nXG4pOiB2b2lkIHtcblx0Y29uc3Qgb0NvbnRleHQgPSBtQ29udGV4dHNbc0tleV07XG5cdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gb0NvbnRleHQ/LmdldE9iamVjdCgpIGFzIHtcblx0XHQkVHlwZT86IHN0cmluZztcblx0XHQka2luZD86IHN0cmluZztcblx0fTtcblxuXHRpZiAob0NvbnRleHRTZXR0aW5ncy5yZXF1aXJlZCA9PT0gdHJ1ZSAmJiAoIW9Db250ZXh0IHx8IG9Db250ZXh0T2JqZWN0ID09PSBudWxsKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgJHtzTmFtZX06IFJlcXVpcmVkIG1ldGFkYXRhQ29udGV4dCAnJHtzS2V5fScgaXMgbWlzc2luZ2ApO1xuXHR9IGVsc2UgaWYgKG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0Ly8gSWYgY29udGV4dCBvYmplY3QgaGFzICRraW5kIHByb3BlcnR5LCAkVHlwZSBzaG91bGQgbm90IGJlIGNoZWNrZWRcblx0XHQvLyBUaGVyZWZvcmUgcmVtb3ZlIGZyb20gY29udGV4dCBzZXR0aW5nc1xuXHRcdGlmIChvQ29udGV4dE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcIiRraW5kXCIpICYmIG9Db250ZXh0T2JqZWN0LiRraW5kICE9PSB1bmRlZmluZWQgJiYgb0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZFR5cGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSAka2luZCBpcyBwYXJ0IG9mIHRoZSBhbGxvd2VkIG9uZXNcblx0XHRcdGlmICghb0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZFR5cGVzLmluY2x1ZGVzKG9Db250ZXh0T2JqZWN0LiRraW5kKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YCR7c05hbWV9OiAnJHtzS2V5fScgbXVzdCBiZSAnJGtpbmQnICcke29Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRUeXBlc30nIGJ1dCBpcyAnJHtcblx0XHRcdFx0XHRcdG9Db250ZXh0T2JqZWN0LiRraW5kXG5cdFx0XHRcdFx0fSc6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b0NvbnRleHRPYmplY3QuaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSAmJlxuXHRcdFx0b0NvbnRleHRPYmplY3QuJFR5cGUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZEFubm90YXRpb25UeXBlc1xuXHRcdCkge1xuXHRcdFx0Ly8gQ2hlY2sgb25seSAkVHlwZVxuXHRcdFx0aWYgKCFvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkQW5ub3RhdGlvblR5cGVzLmluY2x1ZGVzKG9Db250ZXh0T2JqZWN0LiRUeXBlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YCR7c05hbWV9OiAnJHtzS2V5fScgbXVzdCBiZSAnJFR5cGUnICcke29Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXN9JyBidXQgaXMgJyR7XG5cdFx0XHRcdFx0XHRvQ29udGV4dE9iamVjdC4kVHlwZVxuXHRcdFx0XHRcdH0nOiAke29Db250ZXh0LmdldFBhdGgoKX1gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNYWNyb1NpZ25hdHVyZShcblx0c05hbWU6IHN0cmluZyxcblx0b01ldGFkYXRhOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0bUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0Pixcblx0b05vZGU6IEVsZW1lbnRcbik6IHZvaWQge1xuXHRjb25zdCBhTWV0YWRhdGFDb250ZXh0S2V5cyA9IChvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cyAmJiBPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykpIHx8IFtdLFxuXHRcdGFQcm9wZXJ0aWVzID0gKG9NZXRhZGF0YS5wcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5wcm9wZXJ0aWVzKSkgfHwgW10sXG5cdFx0b0F0dHJpYnV0ZU5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdC8vIGNvbGxlY3QgYWxsIGF0dHJpYnV0ZXMgdG8gZmluZCB1bmNoZWNrZWQgcHJvcGVydGllc1xuXHRjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IG9Ob2RlLmdldEF0dHJpYnV0ZU5hbWVzKCk7XG5cdGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBvZiBhdHRyaWJ1dGVOYW1lcykge1xuXHRcdG9BdHRyaWJ1dGVOYW1lc1thdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cdH1cblxuXHQvL0NoZWNrIG1ldGFkYXRhQ29udGV4dHNcblx0YU1ldGFkYXRhQ29udGV4dEtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdGNvbnN0IG9Db250ZXh0U2V0dGluZ3MgPSBvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0c1tzS2V5XTtcblxuXHRcdHZhbGlkYXRlTWFjcm9NZXRhZGF0YUNvbnRleHQoc05hbWUsIG1Db250ZXh0cywgb0NvbnRleHRTZXR0aW5ncywgc0tleSk7XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVOYW1lc1tzS2V5XTtcblx0fSk7XG5cdC8vQ2hlY2sgcHJvcGVydGllc1xuXHRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5U2V0dGluZ3MgPSBvTWV0YWRhdGEucHJvcGVydGllc1tzS2V5XTtcblx0XHRpZiAoIW9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5KSkge1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eVNldHRpbmdzLnJlcXVpcmVkICYmICFvUHJvcGVydHlTZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7c05hbWV9OiBgICsgYFJlcXVpcmVkIHByb3BlcnR5ICcke3NLZXl9JyBpcyBtaXNzaW5nYCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlTmFtZXNbc0tleV07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBVbmNoZWNrZWQgcHJvcGVydGllc1xuXHRPYmplY3Qua2V5cyhvQXR0cmlidXRlTmFtZXMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdC8vIG5vIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdoaWNoIGNvbnRhaW4gYSBjb2xvbiBcIjpcIiAoZGlmZmVyZW50IG5hbWVzcGFjZSksIGUuZy4geG1sbnM6dHJhY2UsIHRyYWNlOm1hY3JvSUQsIHVuaXR0ZXN0OmlkXG5cdFx0aWYgKCFzS2V5LmluY2x1ZGVzKFwiOlwiKSAmJiAhc0tleS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdExvZy53YXJuaW5nKGBVbmNoZWNrZWQgcGFyYW1ldGVyOiAke3NOYW1lfTogJHtzS2V5fWAsIHVuZGVmaW5lZCwgTE9HR0VSX1NDT1BFKTtcblx0XHR9XG5cdH0pO1xufVxuXG5jb25zdCBTQVBfVUlfQ09SRV9FTEVNRU5UID0gXCJzYXAudWkuY29yZS5FbGVtZW50XCI7XG5cbmV4cG9ydCBjb25zdCBTQVBfVUlfTU9ERUxfQ09OVEVYVCA9IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIjtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBtZXRhZGF0YSBvZiBhIGJ1aWxkaW5nIGJsb2NrIGJ5IGFkZGluZyBhZGRpdGlvbmFsIGFnZ3JlZ2F0aW9ucyxcbiAqIGFuZCBzcGxpdHRpbmcgcHJvcGVydGllcyBpbnRvIGFjdHVhbCBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSBjb250ZXh0cy5cbiAqXG4gKiBAcGFyYW0gYnVpbGRpbmdCbG9ja01ldGFkYXRhIFRoZSBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBpbnB1dFxuICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybU1ldGFkYXRhKGJ1aWxkaW5nQmxvY2tNZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhKTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEge1xuXHRjb25zdCBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uPiA9IHt9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24+ID0ge1xuXHRcdGRlcGVuZGVudHM6IHtcblx0XHRcdHR5cGU6IFNBUF9VSV9DT1JFX0VMRU1FTlQsXG5cdFx0XHRzbG90OiBcImRlcGVuZGVudHNcIixcblx0XHRcdGlzUHVibGljOiB0cnVlXG5cdFx0fSxcblx0XHRjdXN0b21EYXRhOiB7XG5cdFx0XHR0eXBlOiBTQVBfVUlfQ09SRV9FTEVNRU5ULFxuXHRcdFx0c2xvdDogXCJjdXN0b21EYXRhXCIsXG5cdFx0XHRpc1B1YmxpYzogdHJ1ZVxuXHRcdH0sXG5cdFx0bGF5b3V0RGF0YToge1xuXHRcdFx0dHlwZTogU0FQX1VJX0NPUkVfRUxFTUVOVCxcblx0XHRcdHNsb3Q6IFwibGF5b3V0RGF0YVwiLFxuXHRcdFx0aXNQdWJsaWM6IHRydWVcblx0XHR9LFxuXHRcdC4uLmJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5hZ2dyZWdhdGlvbnNcblx0fTtcblx0Y29uc3QgbWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+ID0ge307XG5cblx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmtleXMoYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXMpKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXS50eXBlO1xuXG5cdFx0aWYgKHByb3BlcnR5VHlwZSAhPT0gU0FQX1VJX01PREVMX0NPTlRFWFQpIHtcblx0XHRcdHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0fVxuXG5cdFx0aWYgKFtTQVBfVUlfTU9ERUxfQ09OVEVYVCwgXCJvYmplY3RcIiwgXCJhcnJheVwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHQvLyBFeHBsaWNpdGx5IGRlZmluZWQgY29udGV4dHMsIG9iamVjdHMsIGFuZCBhcnJheXMgbWF5IGNvbWUgZnJvbSB0aGUgbWV0YWRhdGFDb250ZXh0XG5cdFx0XHRtZXRhZGF0YUNvbnRleHRzW3Byb3BlcnR5TmFtZV0gPSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdIGFzIEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Li4uYnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0bWV0YWRhdGFDb250ZXh0cyxcblx0XHRhZ2dyZWdhdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGFic29sdXRlIG9yIGNvbnRleHQgcGF0aHMgYW5kIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgTWV0YUNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9TZXR0aW5ncyBBZGRpdGlvbmFsIHNldHRpbmdzXG4gKiBAcGFyYW0gc0F0dHJpYnV0ZVZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWVcbiAqIEByZXR1cm5zIFRoZSBtZXRhIGRhdGEgY29udGV4dCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2NoZWNrQWJzb2x1dGVBbmRDb250ZXh0UGF0aHMob1NldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLCBzQXR0cmlidXRlVmFsdWU6IHN0cmluZyk6IE1ldGFEYXRhQ29udGV4dCB7XG5cdGxldCBzTWV0YVBhdGg6IHN0cmluZztcblx0aWYgKHNBdHRyaWJ1dGVWYWx1ZSAmJiBzQXR0cmlidXRlVmFsdWUuc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHQvLyBhYnNvbHV0ZSBwYXRoIC0gd2UganVzdCB1c2UgdGhpcyBvbmVcblx0XHRzTWV0YVBhdGggPSBzQXR0cmlidXRlVmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGguZ2V0UGF0aCgpO1xuXHRcdGlmICghc0NvbnRleHRQYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuXHRcdFx0c0NvbnRleHRQYXRoICs9IFwiL1wiO1xuXHRcdH1cblx0XHRzTWV0YVBhdGggPSBzQ29udGV4dFBhdGggKyBzQXR0cmlidXRlVmFsdWU7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRtb2RlbDogXCJtZXRhTW9kZWxcIixcblx0XHRwYXRoOiBzTWV0YVBhdGhcblx0fTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBoZWxwcyB0byBjcmVhdGUgdGhlIG1ldGFkYXRhIGNvbnRleHQgaW4gY2FzZSBpdCBpcyBub3QgeWV0IGF2YWlsYWJsZSBpbiB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIG9TZXR0aW5ncyBBZGRpdGlvbmFsIHNldHRpbmdzXG4gKiBAcGFyYW0gc0F0dHJpYnV0ZU5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lXG4gKiBAcGFyYW0gc0F0dHJpYnV0ZVZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWVcbiAqIEByZXR1cm5zIFRoZSBtZXRhIGRhdGEgY29udGV4dCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2NyZWF0ZUluaXRpYWxNZXRhZGF0YUNvbnRleHQoXG5cdG9TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0c0F0dHJpYnV0ZU5hbWU6IHN0cmluZyxcblx0c0F0dHJpYnV0ZVZhbHVlOiBzdHJpbmdcbik6IE1ldGFEYXRhQ29udGV4dCB7XG5cdGxldCByZXR1cm5Db250ZXh0OiBNZXRhRGF0YUNvbnRleHQ7XG5cdGlmIChzQXR0cmlidXRlVmFsdWUuc3RhcnRzV2l0aChcIi91aWQtLVwiKSAmJiAhb1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LmdldFByb3BlcnR5KHNBdHRyaWJ1dGVWYWx1ZSkpIHtcblx0XHRjb25zdCBkYXRhID0gdW5zdG9yZU9iamVjdFZhbHVlKHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdFx0b1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LnNldFByb3BlcnR5KHNBdHRyaWJ1dGVWYWx1ZSwgZGF0YSk7XG5cdFx0cmV0dXJuQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBcImNvbnZlcnRlckNvbnRleHRcIixcblx0XHRcdHBhdGg6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdH07XG5cdH0gZWxzZSBpZiAoKHNBdHRyaWJ1dGVOYW1lID09PSBcIm1ldGFQYXRoXCIgJiYgb1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCkgfHwgc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIikge1xuXHRcdHJldHVybkNvbnRleHQgPSBfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyhvU2V0dGluZ3MsIHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdH0gZWxzZSBpZiAoc0F0dHJpYnV0ZVZhbHVlICYmIHNBdHRyaWJ1dGVWYWx1ZS5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdC8vIGFic29sdXRlIHBhdGggLSB3ZSBqdXN0IHVzZSB0aGlzIG9uZVxuXHRcdHJldHVybkNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogXCJtZXRhTW9kZWxcIixcblx0XHRcdHBhdGg6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdFx0cGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlTZXQgPyBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmVudGl0eVNldC5nZXRQYXRoKHNBdHRyaWJ1dGVWYWx1ZSkgOiBzQXR0cmlidXRlVmFsdWVcblx0XHR9O1xuXHR9XG5cdHJldHVybiByZXR1cm5Db250ZXh0O1xufVxuXG5mdW5jdGlvbiBfZ2V0TWV0YWRhdGFDb250ZXh0KFxuXHRvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRzQXR0cmlidXRlTmFtZTogc3RyaW5nLFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0YkRvTm90UmVzb2x2ZTogYm9vbGVhbixcblx0aXNPcGVuOiBib29sZWFuXG4pOiBNZXRhRGF0YUNvbnRleHQgfCB1bmRlZmluZWQge1xuXHRsZXQgb01ldGFkYXRhQ29udGV4dDogTWV0YURhdGFDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRpZiAoIWJEb05vdFJlc29sdmUgJiYgb05vZGUuaGFzQXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKSkge1xuXHRcdGNvbnN0IHNBdHRyaWJ1dGVWYWx1ZSA9IG9Ob2RlLmdldEF0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSkgYXMgc3RyaW5nO1xuXHRcdG9NZXRhZGF0YUNvbnRleHQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoc0F0dHJpYnV0ZVZhbHVlKTtcblx0XHRpZiAoIW9NZXRhZGF0YUNvbnRleHQpIHtcblx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSBfY3JlYXRlSW5pdGlhbE1ldGFkYXRhQ29udGV4dChvU2V0dGluZ3MsIHNBdHRyaWJ1dGVOYW1lLCBzQXR0cmlidXRlVmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmhhc093blByb3BlcnR5KHNBdHRyaWJ1dGVOYW1lKSkge1xuXHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogc0F0dHJpYnV0ZU5hbWUsXG5cdFx0XHRwYXRoOiBcIlwiXG5cdFx0fTtcblx0fSBlbHNlIGlmIChpc09wZW4pIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKG9WaXNpdG9yLmdldENvbnRleHQoYCR7c0F0dHJpYnV0ZU5hbWV9PmApKSB7XG5cdFx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRcdFx0bW9kZWw6IHNBdHRyaWJ1dGVOYW1lLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCJcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb01ldGFkYXRhQ29udGV4dDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgaW5jb21pbmcgWE1MIG5vZGUgYW5kIHRyeSB0byByZXNvbHZlIHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgdGhlcmUuXG4gKlxuICogQHBhcmFtIG9NZXRhZGF0YSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIG9Ob2RlIFRoZSBYTUwgbm9kZSB0byBwYXJzZVxuICogQHBhcmFtIGlzUHVibGljIFdoZXRoZXIgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW4gYSBwdWJsaWMgY29udGV4dCBvciBub3RcbiAqIEBwYXJhbSBvVmlzaXRvciBUaGUgdmlzaXRvciBpbnN0YW5jZVxuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBwcm9wZXJ0aWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRvTm9kZTogRWxlbWVudCxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPj4ge1xuXHRjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IG9NZXRhZGF0YS5wcm9wZXJ0aWVzO1xuXG5cdC8vIFJldHJpZXZlIHByb3BlcnRpZXMgdmFsdWVzXG5cdGNvbnN0IGFEZWZpbml0aW9uUHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhkZWZpbml0aW9uUHJvcGVydGllcyk7XG5cblx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPiA9IHt9O1xuXHRmb3IgKGNvbnN0IHNLZXlWYWx1ZSBvZiBhRGVmaW5pdGlvblByb3BlcnRpZXNLZXlzKSB7XG5cdFx0aWYgKGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0udHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0cHJvcGVydHlWYWx1ZXNbc0tleVZhbHVlXSA9XG5cdFx0XHRcdGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0uZGVmYXVsdFZhbHVlICYmIGRlZXBDbG9uZShkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmRlZmF1bHRWYWx1ZSk7IC8vIFRvIGF2b2lkIHZhbHVlcyBiZWluZyByZXVzZWQgYWNyb3NzIG1hY3Jvc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID0gZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAob05vZGUuaGFzQXR0cmlidXRlKHNLZXlWYWx1ZSkgJiYgaXNQdWJsaWMgJiYgZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5pc1B1YmxpYyA9PT0gZmFsc2UpIHtcblx0XHRcdExvZy5lcnJvcihgUHJvcGVydHkgJHtzS2V5VmFsdWV9IHdhcyBpZ25vcmVkIGFzIGl0IGlzIG5vdCBpbnRlbmRlZCBmb3IgcHVibGljIHVzYWdlYCk7XG5cdFx0fSBlbHNlIGlmIChvTm9kZS5oYXNBdHRyaWJ1dGUoc0tleVZhbHVlKSkge1xuXHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXRBdHRyaWJ1dGUob05vZGUsIG9Ob2RlLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKHNLZXlWYWx1ZSkgYXMgQXR0cik7XG5cdFx0XHRsZXQgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkID0gb05vZGUuZ2V0QXR0cmlidXRlKHNLZXlWYWx1ZSk7XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICF2YWx1ZS5zdGFydHNXaXRoKFwie1wiKSkge1xuXHRcdFx0XHRcdHN3aXRjaCAoZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBcInRydWVcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiB2YWx1ZTtcblx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0tleVZhbHVlXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydHlWYWx1ZXM7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGluY29taW5nIFhNTCBub2RlIGFuZCB0cnkgdG8gcmVzb2x2ZSB0aGUgYmluZGluZyBjb250ZXh0cyBkZWZpbmVkIGluc2lkZS5cbiAqXG4gKiBAcGFyYW0gb01ldGFkYXRhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gb1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvYmplY3RcbiAqIEBwYXJhbSBvTm9kZSBUaGUgWE1MIG5vZGUgdG8gcGFyc2VcbiAqIEBwYXJhbSBpc1B1YmxpYyBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGluIGEgcHVibGljIGNvbnRleHQgb3Igbm90XG4gKiBAcGFyYW0gb1Zpc2l0b3IgVGhlIHZpc2l0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSBtQ29udGV4dHMgVGhlIGNvbnRleHRzIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlcyBUaGUgY3VycmVudCBwcm9wZXJ0eSB2YWx1ZXNcbiAqIEByZXR1cm5zIFRoZSBwcm9jZXNzZWQgYW5kIG1pc3NpbmcgY29udGV4dHNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0NvbnRleHRzKFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRpc1B1YmxpYzogYm9vbGVhbixcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2ssXG5cdG1Db250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sXG5cdHByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZT5cbik6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcblx0b1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuY29udGV4dFBhdGg7XG5cdGNvbnN0IG1NaXNzaW5nQ29udGV4dDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0Y29uc3Qgb0RlZmluaXRpb25Db250ZXh0cyA9IG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzO1xuXHRjb25zdCBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cyA9IE9iamVjdC5rZXlzKG9EZWZpbml0aW9uQ29udGV4dHMpO1xuXHQvLyBTaW5jZSB0aGUgbWV0YVBhdGggYW5kIG90aGVyIHByb3BlcnR5IGNhbiBiZSByZWxhdGl2ZSB0byB0aGUgY29udGV4dFBhdGggd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgY3VycmVudCBjb250ZXh0UGF0aCBmaXJzdFxuXHRjb25zdCBjb250ZXh0UGF0aEluZGV4ID0gYURlZmluaXRpb25Db250ZXh0c0tleXMuaW5kZXhPZihcImNvbnRleHRQYXRoXCIpO1xuXHRpZiAoY29udGV4dFBhdGhJbmRleCAhPT0gLTEpIHtcblx0XHQvLyBJZiBpdCBpcyBkZWZpbmVkIHdlIGV4dHJhY3QgaXQgYW5kIHJlaW5zZXJ0IGl0IGluIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgYXJyYXlcblx0XHRjb25zdCBjb250ZXh0UGF0aERlZmluaXRpb24gPSBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cy5zcGxpY2UoY29udGV4dFBhdGhJbmRleCwgMSk7XG5cdFx0YURlZmluaXRpb25Db250ZXh0c0tleXMuc3BsaWNlKDAsIDAsIGNvbnRleHRQYXRoRGVmaW5pdGlvblswXSk7XG5cdH1cblx0Zm9yIChjb25zdCBzQXR0cmlidXRlTmFtZSBvZiBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cykge1xuXHRcdC8vIElmIHRoZSBjb250ZXh0IHdhcyByZXNvbHZlZCBhcyBhIHByb3BlcnR5IChiaW5kaW5nIC8geG1sIGFnZ3JlZ2F0aW9uKSB0aGVuIHdlIGRvbid0IG5lZWQgdG8gcmVzb2x2ZSBpdCBoZXJlLlxuXHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1tzQXR0cmlidXRlTmFtZV07XG5cdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlIGFzIG9iamVjdCkubGVuZ3RoID4gMCkge1xuXHRcdFx0ZGVsZXRlIG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBiRG9Ob3RSZXNvbHZlID0gaXNQdWJsaWMgJiYgb0RlZmluaXRpb25Db250ZXh0c1tzQXR0cmlidXRlTmFtZV0uaXNQdWJsaWMgPT09IGZhbHNlICYmIG9Ob2RlLmhhc0F0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSk7XG5cdFx0Y29uc3Qgb01ldGFkYXRhQ29udGV4dCA9IF9nZXRNZXRhZGF0YUNvbnRleHQob1NldHRpbmdzLCBvTm9kZSwgc0F0dHJpYnV0ZU5hbWUsIG9WaXNpdG9yLCBiRG9Ob3RSZXNvbHZlLCBvTWV0YWRhdGEuaXNPcGVuID8/IGZhbHNlKTtcblx0XHRpZiAob01ldGFkYXRhQ29udGV4dCkge1xuXHRcdFx0b01ldGFkYXRhQ29udGV4dC5uYW1lID0gc0F0dHJpYnV0ZU5hbWU7XG5cdFx0XHRhZGRTaW5nbGVDb250ZXh0KG1Db250ZXh0cywgb1Zpc2l0b3IsIG9NZXRhZGF0YUNvbnRleHQpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoc0F0dHJpYnV0ZU5hbWUgPT09IFwiZW50aXR5U2V0XCIgfHwgc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIikgJiZcblx0XHRcdFx0IW9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuaGFzT3duUHJvcGVydHkoc0F0dHJpYnV0ZU5hbWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0b1NldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzQXR0cmlidXRlTmFtZV0gPSBtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNBdHRyaWJ1dGVOYW1lID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRcdFx0b1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0XHRpZiAobUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NBdHRyaWJ1dGVOYW1lXSA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlc1tzQXR0cmlidXRlTmFtZV0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIGJpbmRpbmcgY291bGRuJ3QgYmUgcmVzb2x2ZWQgY29uc2lkZXIgdGhhdCB0aGVyZSB3YXMgbm8gdmFsdWUgaGVyZVxuXHRcdFx0XHRkZWxldGUgb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtTWlzc2luZ0NvbnRleHRbc0F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1NaXNzaW5nQ29udGV4dDtcbn1cblxuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0cG9zaXRpb246IFBvc2l0aW9uO1xuXHR0eXBlOiBcIlNsb3RcIjtcbn07XG5mdW5jdGlvbiBwYXJzZUFnZ3JlZ2F0aW9uKG9BZ2dyZWdhdGlvbj86IEVsZW1lbnQsIHByb2Nlc3NBZ2dyZWdhdGlvbnM/OiBGdW5jdGlvbik6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbj4ge1xuXHRjb25zdCBvT3V0T2JqZWN0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uPiA9IHt9O1xuXHRpZiAob0FnZ3JlZ2F0aW9uICYmIG9BZ2dyZWdhdGlvbi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY2hpbGRyZW4gPSBvQWdncmVnYXRpb24uY2hpbGRyZW47XG5cdFx0Zm9yIChsZXQgY2hpbGRJZHggPSAwOyBjaGlsZElkeCA8IGNoaWxkcmVuLmxlbmd0aDsgY2hpbGRJZHgrKykge1xuXHRcdFx0Y29uc3QgY2hpbGREZWZpbml0aW9uID0gY2hpbGRyZW5bY2hpbGRJZHhdO1xuXHRcdFx0bGV0IGNoaWxkS2V5ID0gY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImtleVwiKSB8fCBjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cdFx0XHRpZiAoY2hpbGRLZXkpIHtcblx0XHRcdFx0Y2hpbGRLZXkgPSBgSW5saW5lWE1MXyR7Y2hpbGRLZXl9YDtcblx0XHRcdFx0Y2hpbGREZWZpbml0aW9uLnNldEF0dHJpYnV0ZShcImtleVwiLCBjaGlsZEtleSk7XG5cdFx0XHRcdGxldCBhZ2dyZWdhdGlvbk9iamVjdDogQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uID0ge1xuXHRcdFx0XHRcdGtleTogY2hpbGRLZXksXG5cdFx0XHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0XHRcdHBsYWNlbWVudDogKGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJwbGFjZW1lbnRcIikgYXMgUGxhY2VtZW50KSB8fCBQbGFjZW1lbnQuQWZ0ZXIsXG5cdFx0XHRcdFx0XHRhbmNob3I6IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJhbmNob3JcIikgfHwgdW5kZWZpbmVkXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0eXBlOiBcIlNsb3RcIlxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAocHJvY2Vzc0FnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRcdGFnZ3JlZ2F0aW9uT2JqZWN0ID0gcHJvY2Vzc0FnZ3JlZ2F0aW9ucyhjaGlsZERlZmluaXRpb24sIGFnZ3JlZ2F0aW9uT2JqZWN0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvT3V0T2JqZWN0c1thZ2dyZWdhdGlvbk9iamVjdC5rZXldID0gYWdncmVnYXRpb25PYmplY3Q7XG5cdFx0XHR9IGVsc2UgaWYgKGNoaWxkRGVmaW5pdGlvbi50YWdOYW1lICE9PSBcInNsb3RcIikge1xuXHRcdFx0XHRMb2cuZXJyb3IoYFRoZSBhZ2dyZWdhdGlvbiAke2NoaWxkRGVmaW5pdGlvbi5ub2RlTmFtZX0gaXMgbWlzc2luZyBhIEtleSBhdHRyaWJ1dGUuIEl0IGlzIG5vdCBkaXNwbGF5ZWRgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9PdXRPYmplY3RzO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrIGFuZCBwYXJzZXMgdGhlbSBhcyBlaXRoZXIgYWdncmVnYXRpb25zIG9yIG9iamVjdC0vYXJyYXktYmFzZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSBvTm9kZSBUaGUgWE1MIG5vZGUgZm9yIHdoaWNoIHRvIHByb2Nlc3MgdGhlIGNoaWxkcmVuXG4gKiBAcGFyYW0gb1Zpc2l0b3IgVGhlIHZpc2l0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSBvTWV0YWRhdGEgVGhlIG1ldGFkYXRhIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBpc1B1YmxpYyBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGluIGEgcHVibGljIGNvbnRleHQgb3Igbm90XG4gKiBAcGFyYW0gcHJvcGVydHlWYWx1ZXMgVGhlIHZhbHVlcyBvZiBhbHJlYWR5IHBhcnNlZCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBjaGlsZHJlblxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRyZW4oXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b01ldGFkYXRhOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdHByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZT5cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgRWxlbWVudD4+IHtcblx0Y29uc3Qgb0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgRWxlbWVudD4gPSB7fTtcblx0aWYgKG9Ob2RlLmZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0bGV0IG9GaXJzdEVsZW1lbnRDaGlsZDogRWxlbWVudCB8IG51bGwgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZCBhcyBFbGVtZW50IHwgbnVsbDtcblxuXHRcdHdoaWxlIChvRmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHRcdGlmIChvRmlyc3RFbGVtZW50Q2hpbGQubmFtZXNwYWNlVVJJID09PSBYTUxURU1QTEFUSU5HX05TKSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugd2UgZW5jb3VudGVyIGEgdGVtcGxhdGluZyB0YWcsIHJ1biB0aGUgdmlzaXRvciBvbiBpdCBhbmQgY29udGludWUgd2l0aCB0aGUgcmVzdWx0aW5nIGNoaWxkXG5cdFx0XHRcdGNvbnN0IG9QYXJlbnQgPSBvRmlyc3RFbGVtZW50Q2hpbGQucGFyZW50Tm9kZTtcblx0XHRcdFx0aWYgKG9QYXJlbnQpIHtcblx0XHRcdFx0XHRjb25zdCBpQ2hpbGRJbmRleCA9IEFycmF5LmZyb20ob1BhcmVudC5jaGlsZHJlbikuaW5kZXhPZihvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdID8gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF0gOiBudWxsO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE5vdCBzdXJlIGhvdyB0aGlzIGNvdWxkIGhhcHBlbiBidXQgSSBhbHNvIGRvbid0IHdhbnQgdG8gY3JlYXRlIGluZmluaXRlIGxvb3BzXG5cdFx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc0NoaWxkTmFtZSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRcdGxldCBzQWdncmVnYXRpb25OYW1lID0gc0NoaWxkTmFtZTtcblx0XHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWVbMF0udG9VcHBlckNhc2UoKSA9PT0gc0FnZ3JlZ2F0aW9uTmFtZVswXSkge1xuXHRcdFx0XHRcdC8vIG5vdCBhIHN1YiBhZ2dyZWdhdGlvbiwgZ28gYmFjayB0byBkZWZhdWx0IEFnZ3JlZ2F0aW9uXG5cdFx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZSA9IG9NZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gfHwgXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZmluaXRpb24gPSBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uICE9PSB1bmRlZmluZWQgJiYgIWFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5zbG90KSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyc2VkQWdncmVnYXRpb24gPSBwYXJzZUFnZ3JlZ2F0aW9uKG9GaXJzdEVsZW1lbnRDaGlsZCwgYWdncmVnYXRpb25EZWZpbml0aW9uLnByb2Nlc3NBZ2dyZWdhdGlvbnMpO1xuXHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NBZ2dyZWdhdGlvbk5hbWVdID0gcGFyc2VkQWdncmVnYXRpb247XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYXJzZWRBZ2dyZWdhdGlvbktleSBpbiBwYXJzZWRBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0b01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1twYXJzZWRBZ2dyZWdhdGlvbktleV0gPSBwYXJzZWRBZ2dyZWdhdGlvbltwYXJzZWRBZ2dyZWdhdGlvbktleV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb05vZGUuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0d2hpbGUgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3Qgb05leHRDaGlsZDogRWxlbWVudCB8IG51bGwgPSBvRmlyc3RFbGVtZW50Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0Y29uc3Qgc0NoaWxkTmFtZSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRsZXQgc0FnZ3JlZ2F0aW9uTmFtZSA9IHNDaGlsZE5hbWU7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZVswXS50b1VwcGVyQ2FzZSgpID09PSBzQWdncmVnYXRpb25OYW1lWzBdKSB7XG5cdFx0XHRcdC8vIG5vdCBhIHN1YiBhZ2dyZWdhdGlvbiwgZ28gYmFjayB0byBkZWZhdWx0IEFnZ3JlZ2F0aW9uXG5cdFx0XHRcdHNBZ2dyZWdhdGlvbk5hbWUgPSBvTWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uIHx8IFwiXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdE9iamVjdC5rZXlzKG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnMpLmluY2x1ZGVzKHNBZ2dyZWdhdGlvbk5hbWUpICYmXG5cdFx0XHRcdCghaXNQdWJsaWMgfHwgb01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5pc1B1YmxpYyA9PT0gdHJ1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZmluaXRpb24gPSBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0XHRpZiAoIWFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5zbG90ICYmIG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCAmJiBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdGxldCBjaGlsZERlZmluaXRpb24gPSBvRmlyc3RFbGVtZW50Q2hpbGQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdFx0d2hpbGUgKGNoaWxkRGVmaW5pdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV4dENoaWxkID0gY2hpbGREZWZpbml0aW9uLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0XHRcdGlmICghYWdncmVnYXRpb25EZWZpbml0aW9uLmhhc1ZpcnR1YWxOb2RlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoaWxkV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvTm9kZS5uYW1lc3BhY2VVUkksIGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJrZXlcIikhKTtcblx0XHRcdFx0XHRcdFx0Y2hpbGRXcmFwcGVyLmFwcGVuZENoaWxkKGNoaWxkRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0XHRcdG9BZ2dyZWdhdGlvbnNbY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImtleVwiKSFdID0gY2hpbGRXcmFwcGVyO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIV0gPSBjaGlsZERlZmluaXRpb247XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNoaWxkRGVmaW5pdGlvbi5yZW1vdmVBdHRyaWJ1dGUoXCJrZXlcIik7XG5cdFx0XHRcdFx0XHRjaGlsZERlZmluaXRpb24gPSBuZXh0Q2hpbGQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5zbG90KSB7XG5cdFx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWUgIT09IHNDaGlsZE5hbWUpIHtcblx0XHRcdFx0XHRcdGlmICghb0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3Q2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMob05vZGUubmFtZXNwYWNlVVJJLCBzQWdncmVnYXRpb25OYW1lKTtcblx0XHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSA9IG9OZXdDaGlsZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9BZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV0uYXBwZW5kQ2hpbGQob0ZpcnN0RWxlbWVudENoaWxkLmNsb25lTm9kZSh0cnVlKSBhcyBFbGVtZW50KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5jbG9uZU5vZGUodHJ1ZSkgYXMgRWxlbWVudDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoT2JqZWN0LmtleXMob01ldGFkYXRhLnByb3BlcnRpZXMpLmluY2x1ZGVzKHNBZ2dyZWdhdGlvbk5hbWUpKSB7XG5cdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRpZiAob01ldGFkYXRhLnByb3BlcnRpZXNbc0FnZ3JlZ2F0aW9uTmFtZV0udHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdC8vIE9iamVjdCBUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvblByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZTIgfCBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZTI+PiA9IHt9O1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZU5hbWVzID0gb0ZpcnN0RWxlbWVudENoaWxkLmdldEF0dHJpYnV0ZU5hbWVzKCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIGF0dHJpYnV0ZU5hbWVzKSB7XG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvblByb3BlcnR5VmFsdWVzW2F0dHJpYnV0ZU5hbWVdID0gb0ZpcnN0RWxlbWVudENoaWxkLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vcmV0cmlldmUgb25lIGxldmVsIHN1Yk9iamVjdCBwcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbi5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJDaGlsZCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbltjaGlsZEluZGV4XTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3ViT2JqZWN0S2V5ID0gc3ViQ2hpbGQubG9jYWxOYW1lO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdWJPYmplY3Q6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc3ViQ2hpbGRBdHRyaWJ1dGVOYW1lcyA9IHN1YkNoaWxkLmdldEF0dHJpYnV0ZU5hbWVzKCk7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3Qgc3ViQ2hpbGRBdHRyaWJ1dGVOYW1lIG9mIHN1YkNoaWxkQXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRzdWJPYmplY3Rbc3ViQ2hpbGRBdHRyaWJ1dGVOYW1lXSA9IHN1YkNoaWxkLmdldEF0dHJpYnV0ZShzdWJDaGlsZEF0dHJpYnV0ZU5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXNbc3ViT2JqZWN0S2V5XSA9IHN1Yk9iamVjdDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBhZ2dyZWdhdGlvblByb3BlcnR5VmFsdWVzO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9NZXRhZGF0YS5wcm9wZXJ0aWVzW3NBZ2dyZWdhdGlvbk5hbWVdLnR5cGUgPT09IFwiYXJyYXlcIikge1xuXHRcdFx0XHRcdGlmIChvRmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwgJiYgb0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnN0IGNoaWxkcmVuID0gb0ZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb091dE9iamVjdHM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMj5bXSA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgY2hpbGRJZHggPSAwOyBjaGlsZElkeCA8IGNoaWxkcmVuLmxlbmd0aDsgY2hpbGRJZHgrKykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjaGlsZERlZmluaXRpb24gPSBjaGlsZHJlbltjaGlsZElkeF07XG5cdFx0XHRcdFx0XHRcdC8vIG5vbiBrZXllZCBjaGlsZCwganVzdCBhZGQgaXQgdG8gdGhlIGFnZ3JlZ2F0aW9uXG5cdFx0XHRcdFx0XHRcdGNvbnN0IG15Q2hpbGQ6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlMj4gPSB7fTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlTmFtZXMgPSBjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlTmFtZXMoKTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIGF0dHJpYnV0ZU5hbWVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0bXlDaGlsZFthdHRyaWJ1dGVOYW1lXSA9IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0b091dE9iamVjdHMucHVzaChteUNoaWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NBZ2dyZWdhdGlvbk5hbWVdID0gb091dE9iamVjdHM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9OZXh0Q2hpbGQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQWdncmVnYXRpb25zO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzU2xvdHMoXG5cdG9BZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnQ+LFxuXHRvTWV0YWRhdGFBZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24+LFxuXHRvTm9kZTogRWxlbWVudCxcblx0cHJvY2Vzc0N1c3RvbURhdGEgPSBmYWxzZVxuKTogdm9pZCB7XG5cdGlmIChPYmplY3Qua2V5cyhvQWdncmVnYXRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0T2JqZWN0LmtleXMob0FnZ3JlZ2F0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBvQWdncmVnYXRpb25FbGVtZW50ID0gb0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXTtcblx0XHRcdGlmIChvTm9kZSAhPT0gbnVsbCAmJiBvTm9kZSAhPT0gdW5kZWZpbmVkICYmIG9BZ2dyZWdhdGlvbkVsZW1lbnQpIHtcblx0XHRcdFx0Ly8gc2xvdHMgY2FuIGhhdmUgOjogYXMga2V5cyB3aGljaCBpcyBub3QgYSB2YWxpZCBhZ2dyZWdhdGlvbiBuYW1lIHRoZXJlZm9yZSByZXBsYWNpbmcgdGhlbVxuXHRcdFx0XHRjb25zdCBvRWxlbWVudENoaWxkID0gb0FnZ3JlZ2F0aW9uRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0aWYgKCFbXCJkZXBlbmRlbnRzXCIsIFwiY3VzdG9tRGF0YVwiLCBcImxheW91dERhdGFcIl0uaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0XHRjb25zdCBzU2xvdE5hbWUgPVxuXHRcdFx0XHRcdFx0KG9NZXRhZGF0YUFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkICYmIG9NZXRhZGF0YUFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5zbG90KSB8fFxuXHRcdFx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZTtcblx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0RWxlbWVudCA9IG9Ob2RlLnF1ZXJ5U2VsZWN0b3IoYHNsb3RbbmFtZT0nJHtzU2xvdE5hbWV9J11gKTtcblx0XHRcdFx0XHRpZiAob1RhcmdldEVsZW1lbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IHByZXBhcmVBZ2dyZWdhdGlvbkVsZW1lbnQob05vZGUsIHNBZ2dyZWdhdGlvbk5hbWUsIG9FbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdFx0b1RhcmdldEVsZW1lbnQucmVwbGFjZVdpdGgoLi4uKG9OZXdDaGlsZC5jaGlsZHJlbiBhcyB1bmtub3duIGFzIE5vZGVbXSkpOyAvLyBTb21laG93IFRTIGRvZXNuJ3QgbGlrZSB0aGlzIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlzIHNob3VsZCB3b3JrXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHByb2Nlc3NDdXN0b21EYXRhICYmIG9FbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRjb25zdCBzU2xvdE5hbWUgPVxuXHRcdFx0XHRcdFx0KG9NZXRhZGF0YUFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXSAhPT0gdW5kZWZpbmVkICYmIG9NZXRhZGF0YUFnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5zbG90KSB8fFxuXHRcdFx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZTtcblx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0RWxlbWVudCA9IG9Ob2RlLnF1ZXJ5U2VsZWN0b3IoYHNsb3RbbmFtZT0nJHtzU2xvdE5hbWV9J11gKTtcblx0XHRcdFx0XHRjb25zdCBvTmV3Q2hpbGQgPSBwcmVwYXJlQWdncmVnYXRpb25FbGVtZW50KG9Ob2RlLCBzQWdncmVnYXRpb25OYW1lLCBvRWxlbWVudENoaWxkKTtcblx0XHRcdFx0XHRpZiAob1RhcmdldEVsZW1lbnQgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdG9UYXJnZXRFbGVtZW50LnJlcGxhY2VXaXRoKC4uLihvTmV3Q2hpbGQuY2hpbGRyZW4gYXMgdW5rbm93biBhcyBOb2RlW10pKTsgLy8gU29tZWhvdyBUUyBkb2Vzbid0IGxpa2UgdGhpcyBidXQgdGhlIGRvY3VtZW50YXRpb24gc2F5cyBpcyBzaG91bGQgd29ya1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvTm9kZS5hcHBlbmRDaGlsZChvTmV3Q2hpbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBZ2dyZWdhdGlvbkVsZW1lbnQob05vZGU6IEVsZW1lbnQsIHNBZ2dyZWdhdGlvbk5hbWU6IHN0cmluZywgb0VsZW1lbnRDaGlsZDogRWxlbWVudCB8IG51bGwpOiBFbGVtZW50IHtcblx0Y29uc3Qgb05ld0NoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG9Ob2RlLm5hbWVzcGFjZVVSSSwgc0FnZ3JlZ2F0aW9uTmFtZS5yZXBsYWNlKC86L2dpLCBcIl9cIikpO1xuXHR3aGlsZSAob0VsZW1lbnRDaGlsZCkge1xuXHRcdGNvbnN0IG9OZXh0Q2hpbGQgPSBvRWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRvTmV3Q2hpbGQuYXBwZW5kQ2hpbGQob0VsZW1lbnRDaGlsZCk7XG5cdFx0b0VsZW1lbnRDaGlsZCA9IG9OZXh0Q2hpbGQ7XG5cdH1cblx0cmV0dXJuIG9OZXdDaGlsZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0J1aWxkaW5nQmxvY2soXG5cdEJ1aWxkaW5nQmxvY2tDbGFzczogdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSxcblx0b05vZGU6IEVsZW1lbnQsXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRpc1B1YmxpYyA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb01ldGFkYXRhID0gdHJhbnNmb3JtTWV0YWRhdGEoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhKTtcblxuXHRjb25zdCBzRnJhZ21lbnROYW1lID0gb01ldGFkYXRhLmZyYWdtZW50ID8/IGAke29NZXRhZGF0YS5uYW1lc3BhY2UgPz8gb01ldGFkYXRhLnB1YmxpY05hbWVzcGFjZX0uJHtvTWV0YWRhdGEueG1sVGFnID8/IG9NZXRhZGF0YS5uYW1lfWA7XG5cblx0Y29uc3QgbUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0PiA9IHt9O1xuXHRjb25zdCBvU2V0dGluZ3MgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXG5cdC8vIEFkZCBhbiBlbXB0eSBjb252ZXJ0ZXIgY29udGV4dCBpZiB0aGVyZSBpcyBub25lIGluIG9yZGVyIHRvIGhhdmUgYSBwbGFjZSB0byBzdG9yZSBvYmplY3QgdmFsdWVzXG5cdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dCA/Pz0gbmV3IEpTT05Nb2RlbCgpO1xuXG5cdC8vSW5qZWN0IHN0b3JhZ2UgZm9yIG1hY3Jvc1xuXHRpZiAoIW9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSkge1xuXHRcdG9TZXR0aW5nc1tzRnJhZ21lbnROYW1lXSA9IHt9O1xuXHR9XG5cblx0Ly8gRmlyc3Qgb2YgYWxsIHdlIG5lZWQgdG8gdmlzaXQgdGhlIGF0dHJpYnV0ZXMgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydGllcyBhbmQgdGhlIG1ldGFkYXRhIGNvbnRleHRzXG5cdGNvbnN0IHByb3BlcnR5VmFsdWVzID0gYXdhaXQgcHJvY2Vzc1Byb3BlcnRpZXMob01ldGFkYXRhLCBvTm9kZSwgaXNQdWJsaWMsIG9WaXNpdG9yKTtcblx0Y29uc3QgaW5pdGlhbEtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlcyk7XG5cdGNvbnN0IG1NaXNzaW5nQ29udGV4dCA9IHByb2Nlc3NDb250ZXh0cyhvTWV0YWRhdGEsIG9TZXR0aW5ncywgb05vZGUsIGlzUHVibGljLCBvVmlzaXRvciwgbUNvbnRleHRzLCBwcm9wZXJ0eVZhbHVlcyk7XG5cblx0dHJ5IHtcblx0XHQvLyBBZ2dyZWdhdGlvbiBhbmQgY29tcGxleCB0eXBlIHN1cHBvcnRcblx0XHRjb25zdCBvQWdncmVnYXRpb25zID0gYXdhaXQgcHJvY2Vzc0NoaWxkcmVuKG9Ob2RlLCBvVmlzaXRvciwgb01ldGFkYXRhLCBpc1B1YmxpYywgcHJvcGVydHlWYWx1ZXMpO1xuXHRcdGxldCBvQ29udHJvbENvbmZpZyA9IHt9O1xuXG5cdFx0aWYgKG9TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEpIHtcblx0XHRcdC8vIE9ubHkgdXNlZCBpbiB0aGUgRmllbGQgbWFjcm8gYW5kIGV2ZW4gdGhlbiBtYXliZSBub3QgcmVhbGx5IHVzZWZ1bFxuXHRcdFx0b0NvbnRyb2xDb25maWcgPSBvU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhLmdldFByb3BlcnR5KFwiL2NvbnRyb2xDb25maWd1cmF0aW9uXCIpO1xuXHRcdH1cblx0XHRsZXQgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMgPSBwcm9wZXJ0eVZhbHVlcztcblxuXHRcdE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWVzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0bGV0IG9EYXRhID0gcHJvcGVydHlWYWx1ZXNbcHJvcE5hbWVdIGFzIHVua25vd24gYXMgQ29udGV4dDtcblx0XHRcdC8vY2hlY2sgZm9yIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBmdW5jdGlvbiB0byB2YWxpZGF0ZSAvIG92ZXJ3cml0ZSBwYXJhbWV0ZXJzXG5cdFx0XHRjb25zdCBvcmlnaW5hbERlZmluaXRpb24gPSBCdWlsZGluZ0Jsb2NrQ2xhc3M/Lm1ldGFkYXRhPy5wcm9wZXJ0aWVzW3Byb3BOYW1lXTtcblx0XHRcdGlmIChvcmlnaW5hbERlZmluaXRpb24/LnZhbGlkYXRlKSB7XG5cdFx0XHRcdG9EYXRhID0gb3JpZ2luYWxEZWZpbml0aW9uLnZhbGlkYXRlKG9EYXRhKSB8fCBvRGF0YTtcblx0XHRcdH1cblx0XHRcdGlmIChvRGF0YT8uaXNBPy4oU0FQX1VJX01PREVMX0NPTlRFWFQpICYmICFvRGF0YS5nZXRNb2RlbCgpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKSkge1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1twcm9wTmFtZV0gPSBvRGF0YS5nZXRPYmplY3QoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRwcm9wZXJ0eVZhbHVlcy5pc1B1YmxpYyA9IGlzUHVibGljO1xuXG5cdFx0Y29uc3Qgb0luc3RhbmNlID0gbmV3IEJ1aWxkaW5nQmxvY2tDbGFzcyh7IC4uLnByb3BlcnR5VmFsdWVzLCAuLi5vQWdncmVnYXRpb25zIH0sIG9Db250cm9sQ29uZmlnLCBvU2V0dGluZ3MpO1xuXHRcdHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzID0gb0luc3RhbmNlLmdldFByb3BlcnRpZXMoKTtcblx0XHRPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0NvbnRleHROYW1lOiBzdHJpbmcpIHtcblx0XHRcdGlmIChwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcy5oYXNPd25Qcm9wZXJ0eShzQ29udGV4dE5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzW3NDb250ZXh0TmFtZV07XG5cdFx0XHRcdGlmIChpc0NvbnRleHQodGFyZ2V0T2JqZWN0KSkge1xuXHRcdFx0XHRcdG1Db250ZXh0c1tzQ29udGV4dE5hbWVdID0gdGFyZ2V0T2JqZWN0IGFzIENvbnRleHQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHRhcmdldE9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gc3RvcmVPYmplY3RWYWx1ZSh0YXJnZXRPYmplY3QpO1xuXHRcdFx0XHRcdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5zZXRQcm9wZXJ0eShhdHRyaWJ1dGVWYWx1ZSwgdGFyZ2V0T2JqZWN0KTtcblx0XHRcdFx0XHRjb25zdCBuZXdDb250ZXh0ID0gb1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGF0dHJpYnV0ZVZhbHVlKSE7XG5cdFx0XHRcdFx0dW5zdG9yZU9iamVjdFZhbHVlKGF0dHJpYnV0ZVZhbHVlKTtcblx0XHRcdFx0XHRtQ29udGV4dHNbc0NvbnRleHROYW1lXSA9IG5ld0NvbnRleHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IG9BdHRyaWJ1dGVzTW9kZWw6IEpTT05Nb2RlbCA9IG5ldyBBdHRyaWJ1dGVNb2RlbChvTm9kZSwgcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMsIEJ1aWxkaW5nQmxvY2tDbGFzcyk7XG5cdFx0bUNvbnRleHRzW1widGhpc1wiXSA9IG9BdHRyaWJ1dGVzTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHRcdGxldCBvUHJldmlvdXNNYWNyb0luZm86IE1hY3JvSW5mbyB8IHVuZGVmaW5lZDtcblx0XHQvLyBjb3JlOnJlcXVpcmUgbmVlZCB0byBiZSBkZWZpbmVkIG9uIHRoZSBub2RlIGl0c2VsZiB0byBiZSBwaWNrZWQgdXAgZHVlIHRvIHRoZSB0ZW1wbGF0aW5nIHN0ZXBcblx0XHRjb25zdCBjb3JlUmVxdWlyZSA9IG9Ob2RlPy5nZXRBdHRyaWJ1dGUoXCJjb3JlOnJlcXVpcmVcIikgfHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gS2VlcCB0cmFja1xuXHRcdGlmIChUcmFjZUluZm8uaXNUcmFjZUluZm9BY3RpdmUoKSkge1xuXHRcdFx0Y29uc3Qgb1RyYWNlSW5mbyA9IFRyYWNlSW5mby50cmFjZU1hY3JvQ2FsbHMoc0ZyYWdtZW50TmFtZSwgb01ldGFkYXRhLCBtQ29udGV4dHMsIG9Ob2RlLCBvVmlzaXRvcik7XG5cdFx0XHRpZiAob1RyYWNlSW5mbz8ubWFjcm9JbmZvKSB7XG5cdFx0XHRcdG9QcmV2aW91c01hY3JvSW5mbyA9IG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl07XG5cdFx0XHRcdG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl0gPSBvVHJhY2VJbmZvLm1hY3JvSW5mbztcblx0XHRcdH1cblx0XHR9XG5cdFx0dmFsaWRhdGVNYWNyb1NpZ25hdHVyZShzRnJhZ21lbnROYW1lLCBvTWV0YWRhdGEsIG1Db250ZXh0cywgb05vZGUpO1xuXG5cdFx0Y29uc3Qgb0NvbnRleHRWaXNpdG9yID0gb1Zpc2l0b3Iud2l0aChtQ29udGV4dHMsIG9NZXRhZGF0YS5pc09wZW4gIT09IHVuZGVmaW5lZCA/ICFvTWV0YWRhdGEuaXNPcGVuIDogdHJ1ZSk7XG5cdFx0Y29uc3Qgb1BhcmVudCA9IG9Ob2RlLnBhcmVudE5vZGU7XG5cblx0XHRsZXQgaUNoaWxkSW5kZXg6IG51bWJlcjtcblx0XHRsZXQgb1Byb21pc2U7XG5cdFx0aWYgKG9QYXJlbnQpIHtcblx0XHRcdGlDaGlsZEluZGV4ID0gQXJyYXkuZnJvbShvUGFyZW50LmNoaWxkcmVuKS5pbmRleE9mKG9Ob2RlKTtcblxuXHRcdFx0aWYgKG9NZXRhZGF0YS5mcmFnbWVudCkge1xuXHRcdFx0XHRvUHJvbWlzZSA9IG9Db250ZXh0VmlzaXRvci5pbnNlcnRGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvTm9kZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvbGRLZXlzID0gT2JqZWN0LmtleXModGVtcG9yYXJ5T2JqZWN0U3RvcmUpO1xuXHRcdFx0XHRsZXQgdGVtcGxhdGVTdHJpbmc7XG5cdFx0XHRcdGlmICgob0luc3RhbmNlIGFzIFJ1bnRpbWVCdWlsZGluZ0Jsb2NrKS5nZXRSdW50aW1lQnVpbGRpbmdCbG9ja1RlbXBsYXRlKSB7XG5cdFx0XHRcdFx0dGVtcGxhdGVTdHJpbmcgPSBhd2FpdCBqc3gucmVuZGVyQXNYTUwoYXN5bmMgKCkgPT5cblx0XHRcdFx0XHRcdChvSW5zdGFuY2UgYXMgUnVudGltZUJ1aWxkaW5nQmxvY2spLmdldFJ1bnRpbWVCdWlsZGluZ0Jsb2NrVGVtcGxhdGUob05vZGUpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0ZW1wbGF0ZVN0cmluZyA9IGF3YWl0IGpzeC5yZW5kZXJBc1hNTChhc3luYyAoKSA9PiBvSW5zdGFuY2UuZ2V0VGVtcGxhdGUhKG9Ob2RlKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLmlzUnVudGltZSkge1xuXHRcdFx0XHRcdC8vIEZvciBydW50aW1lIGJ1aWxkaW5nIGJsb2Nrcywgd2UgbmVlZCB0byBhdHRhY2ggYWxsIG9iamVjdHMgdG8gdGhlIGNvbnZlcnRlckNvbnRleHQgZGlyZWN0bHksIGFzIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRha2VzIHBsYWNlIGF0IHJ1bnRpbWVcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHN0b3JlS2V5IGluIHRlbXBvcmFyeU9iamVjdFN0b3JlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW9sZEtleXMuaW5jbHVkZXMoc3RvcmVLZXkpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB1bnN0b3JlT2JqZWN0VmFsdWUoc3RvcmVLZXkpO1xuXHRcdFx0XHRcdFx0XHRvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuc2V0UHJvcGVydHkoc3RvcmVLZXksIGRhdGEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBoYXNFcnJvciA9IFwiXCI7XG5cdFx0XHRcdGlmICh0ZW1wbGF0ZVN0cmluZykge1xuXHRcdFx0XHRcdGxldCBoYXNQYXJzZUVycm9yID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV0IHBhcnNlZFRlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcodGVtcGxhdGVTdHJpbmcsIHRydWUpO1xuXHRcdFx0XHRcdC8vIEZvciBzYWZldHkgcHVycG9zZSB3ZSB0cnkgdG8gZGV0ZWN0IHRyYWlsaW5nIHRleHQgaW4gYmV0d2VlbiBYTUwgVGFnc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJzZWRUZW1wbGF0ZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG5cdFx0XHRcdFx0XHRsZXQgdGV4dG5vZGUgPSBpdGVyLm5leHROb2RlKCk7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09IFwicGFyc2VyZXJyb3JcIikge1xuXHRcdFx0XHRcdFx0XHRoYXNQYXJzZUVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHdoaWxlICh0ZXh0bm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGV4dG5vZGUudGV4dENvbnRlbnQgJiYgdGV4dG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFcnJvciA9IHRleHRub2RlLnRleHRDb250ZW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRleHRub2RlID0gaXRlci5uZXh0Tm9kZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChoYXNQYXJzZUVycm9yKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIHBhcnNlZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgWE1MIGl0IG1lYW5zIHRoZSBYTUwgaXRzZWxmIGlzIG1hbGZvcm1lZCwgYXMgc3VjaCB3ZSByZXJ1biB0aGUgdGVtcGxhdGUgcHJvY2Vzc1xuXHRcdFx0XHRcdFx0Ly8gU2V0dGluZyBpc1RyYWNlTW9kZSB0cnVlIHdpbGwgbWFrZSBpdCBzbyB0aGF0IGVhY2ggeG1sYCBleHByZXNzaW9uIGlzIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGZyb20gWE1MIHBlcnNwZWN0aXZlXG5cdFx0XHRcdFx0XHQvLyBJZiBhbiBlcnJvciBpcyBmb3VuZCBpdCdzIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBmcmFnbWVudFxuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7b01ldGFkYXRhLnhtbFRhZyB8fCBvTWV0YWRhdGEubmFtZX1gKTtcblx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlID0gKGF3YWl0IHByb2Nlc3NYbWxJblRyYWNlKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRcdFx0bGV0IGluaXRpYWxUZW1wbGF0ZTtcblx0XHRcdFx0XHRcdFx0aWYgKChvSW5zdGFuY2UgYXMgUnVudGltZUJ1aWxkaW5nQmxvY2spLmdldFJ1bnRpbWVCdWlsZGluZ0Jsb2NrVGVtcGxhdGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsVGVtcGxhdGUgPSBhd2FpdCBqc3gucmVuZGVyQXNYTUwoYXN5bmMgKCkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdChvSW5zdGFuY2UgYXMgUnVudGltZUJ1aWxkaW5nQmxvY2spLmdldFJ1bnRpbWVCdWlsZGluZ0Jsb2NrVGVtcGxhdGUob05vZGUpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpbml0aWFsVGVtcGxhdGUgPSBhd2FpdCBqc3gucmVuZGVyQXNYTUwoYXN5bmMgKCkgPT4gb0luc3RhbmNlLmdldFRlbXBsYXRlIShvTm9kZSkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXJzZVhNTFN0cmluZyhpbml0aWFsVGVtcGxhdGUgPz8gXCJcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9KSkgYXMgRWxlbWVudFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaGFzRXJyb3IubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgdHJhaWxpbmcgdGV4dCB3ZSBjcmVhdGUgYSBzdGFuZGFyZCBlcnJvciBhbmQgZGlzcGxheSBpdC5cblx0XHRcdFx0XHRcdExvZy5lcnJvcihgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS54bWxUYWcgfHwgb01ldGFkYXRhLm5hbWV9YCk7XG5cdFx0XHRcdFx0XHRjb25zdCBvRXJyb3JUZXh0ID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRcdFx0XHRcdFtcblx0XHRcdFx0XHRcdFx0XHRgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS54bWxUYWcgfHwgb01ldGFkYXRhLm5hbWV9YCxcblx0XHRcdFx0XHRcdFx0XHRgVHJhaWxpbmcgdGV4dCB3YXMgZm91bmQgaW4gdGhlIFhNTDogJHtoYXNFcnJvcn1gXG5cdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlLm1hcCgodGVtcGxhdGUpID0+IHRlbXBsYXRlLm91dGVySFRNTCkuam9pbihcIlxcblwiKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHBhcnNlZFRlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yVGV4dCwgdHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9Ob2RlLnJlcGxhY2VXaXRoKC4uLnBhcnNlZFRlbXBsYXRlKTtcblxuXHRcdFx0XHRcdGNvbnN0IHZpc2l0ZWROb2RlcyA9IHBhcnNlZFRlbXBsYXRlLm1hcChhc3luYyAoaW50ZXJuYWxOb2RlKSA9PiB7XG5cdFx0XHRcdFx0XHRwcm9jZXNzU2xvdHMob0FnZ3JlZ2F0aW9ucywgb01ldGFkYXRhLmFnZ3JlZ2F0aW9ucywgaW50ZXJuYWxOb2RlLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHRWaXNpdG9yLnZpc2l0Tm9kZShpbnRlcm5hbE5vZGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9Qcm9taXNlID0gUHJvbWlzZS5hbGwodmlzaXRlZE5vZGVzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvTm9kZS5yZW1vdmUoKTtcblx0XHRcdFx0XHRvUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlO1xuXHRcdFx0Y29uc3Qgb01hY3JvRWxlbWVudCA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdO1xuXHRcdFx0cHJvY2Vzc1Nsb3RzKG9BZ2dyZWdhdGlvbnMsIG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnMsIG9NYWNyb0VsZW1lbnQsIHRydWUpO1xuXHRcdFx0aWYgKG9NYWNyb0VsZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBvUmVtYWluaW5nU2xvdHMgPSBvTWFjcm9FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRcdFx0XHRvUmVtYWluaW5nU2xvdHMuZm9yRWFjaChmdW5jdGlvbiAob1Nsb3RFbGVtZW50KSB7XG5cdFx0XHRcdFx0b1Nsb3RFbGVtZW50LnJlbW92ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKGNvcmVSZXF1aXJlKSB7XG5cdFx0XHRcdFx0bGV0IHJlcXVpcmVPbk1hY3JvID0gb01hY3JvRWxlbWVudC5nZXRBdHRyaWJ1dGVOUyhcInNhcC51aS5jb3JlXCIsIFwicmVxdWlyZVwiKTtcblx0XHRcdFx0XHRpZiAocmVxdWlyZU9uTWFjcm8pIHtcblx0XHRcdFx0XHRcdHJlcXVpcmVPbk1hY3JvID0gcmVxdWlyZU9uTWFjcm8uc3Vic3RyaW5nKDAsIHJlcXVpcmVPbk1hY3JvLmxlbmd0aCAtIDEpICsgXCIsXCIgKyBjb3JlUmVxdWlyZS5zdWJzdHJpbmcoMSk7IC8vIFJlbW92ZSBsYXN0IH0gYW5kIGZpcnN0IHtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWlyZU9uTWFjcm8gPSBjb3JlUmVxdWlyZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b01hY3JvRWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhcInNhcC51aS5jb3JlXCIsIFwiY29yZTpyZXF1aXJlXCIsIHJlcXVpcmVPbk1hY3JvKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAob1ByZXZpb3VzTWFjcm9JbmZvKSB7XG5cdFx0XHQvL3Jlc3RvcmUgbWFjcm8gaW5mbyBpZiBhdmFpbGFibGVcblx0XHRcdG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl0gPSBvUHJldmlvdXNNYWNyb0luZm87XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSBvU2V0dGluZ3NbXCJfbWFjcm9JbmZvXCJdO1xuXHRcdH1cblx0fSBjYXRjaCAoZTogdW5rbm93bikge1xuXHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgYSBnZW5lcmljIGVycm9yICh1c3VhbGx5IGNvZGUgZXJyb3IpLCB3ZSByZXRyaWV2ZSB0aGUgY3VycmVudCBjb250ZXh0IGluZm9ybWF0aW9uIGFuZCBjcmVhdGUgYSBkZWRpY2F0ZWQgZXJyb3IgbWVzc2FnZVxuXHRcdGNvbnN0IHRyYWNlRGV0YWlscyA9IHtcblx0XHRcdGluaXRpYWxQcm9wZXJ0aWVzOiB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHJlc29sdmVkUHJvcGVydGllczoge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRtaXNzaW5nQ29udGV4dHM6IG1NaXNzaW5nQ29udGV4dFxuXHRcdH07XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgaW5pdGlhbEtleXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKGlzQ29udGV4dChwcm9wZXJ0eVZhbHVlKSkge1xuXHRcdFx0XHR0cmFjZURldGFpbHMuaW5pdGlhbFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHtcblx0XHRcdFx0XHRwYXRoOiBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKSxcblx0XHRcdFx0XHR2YWx1ZTogcHJvcGVydHlWYWx1ZS5nZXRPYmplY3QoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJhY2VEZXRhaWxzLmluaXRpYWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0eVZhbHVlcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAoIWluaXRpYWxLZXlzLmluY2x1ZGVzKHByb3BlcnR5TmFtZSkpIHtcblx0XHRcdFx0aWYgKGlzQ29udGV4dChwcm9wZXJ0eVZhbHVlKSkge1xuXHRcdFx0XHRcdHRyYWNlRGV0YWlscy5yZXNvbHZlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHtcblx0XHRcdFx0XHRcdHBhdGg6IHByb3BlcnR5VmFsdWUuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5VmFsdWUuZ2V0T2JqZWN0KClcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRyYWNlRGV0YWlscy5yZXNvbHZlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHRjb25zdCBvRXJyb3IgPSBjcmVhdGVFcnJvclhNTChcblx0XHRcdFtgRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBidWlsZGluZyBibG9jayAke29NZXRhZGF0YS5uYW1lfWBdLFxuXHRcdFx0b05vZGUub3V0ZXJIVE1MLFxuXHRcdFx0dHJhY2VEZXRhaWxzLFxuXHRcdFx0KGUgYXMgRXJyb3IpLnN0YWNrXG5cdFx0KTtcblx0XHRjb25zdCBvVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyhvRXJyb3IsIHRydWUpO1xuXHRcdG9Ob2RlLnJlcGxhY2VXaXRoKC4uLm9UZW1wbGF0ZSk7XG5cdH1cbn1cbmZ1bmN0aW9uIGFkZFNpbmdsZUNvbnRleHQoXG5cdG1Db250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dCB8IHVuZGVmaW5lZD4sXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRvQ3R4OiB7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHRwYXRoOiBzdHJpbmc7XG5cdFx0bW9kZWw/OiBzdHJpbmc7XG5cdH1cbik6IHZvaWQge1xuXHRjb25zdCBzS2V5ID0gKG9DdHgubmFtZSB8fCBvQ3R4Lm1vZGVsIHx8IHVuZGVmaW5lZCkgYXMgc3RyaW5nO1xuXHRpZiAobUNvbnRleHRzW3NLZXldKSB7XG5cdFx0cmV0dXJuOyAvLyBkbyBub3QgYWRkIHR3aWNlXG5cdH1cblx0dHJ5IHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb0N0eC5wYXRoO1xuXHRcdGlmIChvQ3R4Lm1vZGVsICE9PSBudWxsKSB7XG5cdFx0XHRzQ29udGV4dFBhdGggPSBgJHtvQ3R4Lm1vZGVsfT4ke3NDb250ZXh0UGF0aH1gO1xuXHRcdH1cblx0XHRjb25zdCBtU2V0dGluZyA9IG9WaXNpdG9yLmdldFNldHRpbmdzKCk7XG5cdFx0aWYgKG9DdHgubW9kZWwgPT09IFwiY29udmVydGVyQ29udGV4dFwiICYmIG9DdHgucGF0aC5sZW5ndGggPiAwKSB7XG5cdFx0XHRtQ29udGV4dHNbc0tleV0gPSBtU2V0dGluZy5tb2RlbHNbb0N0eC5tb2RlbF0uZ2V0Q29udGV4dChvQ3R4LnBhdGggLyosIG1TZXR0aW5nLmJpbmRpbmdDb250ZXh0c1tvQ3R4Lm1vZGVsXSovKTsgLy8gYWRkIHRoZSBjb250ZXh0IHRvIHRoZSB2aXNpdG9yXG5cdFx0fSBlbHNlIGlmICghbVNldHRpbmcuYmluZGluZ0NvbnRleHRzW29DdHgubW9kZWwhXSAmJiBtU2V0dGluZy5tb2RlbHNbb0N0eC5tb2RlbCFdKSB7XG5cdFx0XHRtQ29udGV4dHNbc0tleV0gPSBtU2V0dGluZy5tb2RlbHNbb0N0eC5tb2RlbCFdLmdldENvbnRleHQob0N0eC5wYXRoKTsgLy8gYWRkIHRoZSBjb250ZXh0IHRvIHRoZSB2aXNpdG9yXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1Db250ZXh0c1tzS2V5XSA9IG9WaXNpdG9yLmdldENvbnRleHQoc0NvbnRleHRQYXRoKTsgLy8gYWRkIHRoZSBjb250ZXh0IHRvIHRoZSB2aXNpdG9yXG5cdFx0fVxuXHR9IGNhdGNoIChleCkge1xuXHRcdC8vIGlnbm9yZSB0aGUgY29udGV4dCBhcyB0aGlzIGNhbiBvbmx5IGJlIHRoZSBjYXNlIGlmIHRoZSBtb2RlbCBpcyBub3QgcmVhZHksXG5cdFx0Ly8gaS5lLiBub3QgYSBwcmVwcm9jZXNzaW5nIG1vZGVsIGJ1dCBtYXliZSBhIG1vZGVsIGZvciBwcm92aWRpbmcgYWZ0ZXJ3YXJkc1xuXHR9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB4bWwgdGVtcGxhdGUgcHJvY2Vzc29yLlxuICpcbiAqIEBwYXJhbSBCdWlsZGluZ0Jsb2NrQ2xhc3MgVGhlIGJ1aWxkaW5nIGJsb2NrIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3M6IHR5cGVvZiBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UpOiB2b2lkIHtcblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciwgdHJ1ZSksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBVblJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlciB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqXG4gKiBAcGFyYW0gQnVpbGRpbmdCbG9ja0NsYXNzIFRoZSBidWlsZGluZyBibG9jayBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3M6IHR5cGVvZiBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UpOiB2b2lkIHtcblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRudWxsLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVzcGFjZSxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS54bWxUYWcgfHwgQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVcblx0XHQpO1xuXHR9XG5cdGlmIChCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKFxuXHRcdFx0bnVsbCxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UsXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEueG1sVGFnIHx8IEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lXG5cdFx0KTtcblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclhNTChlcnJvck1lc3NhZ2VzOiBzdHJpbmdbXSwgeG1sRnJhZ21lbnQ6IHN0cmluZywgYWRkaXRpb25hbERhdGE/OiBvYmplY3QsIHN0YWNrPzogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgZXJyb3JMYWJlbHMgPSBlcnJvck1lc3NhZ2VzLm1hcCgoZXJyb3JNZXNzYWdlKSA9PiB4bWxgPG06TGFiZWwgdGV4dD1cIiR7ZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUoZXJyb3JNZXNzYWdlKX1cIi8+YCk7XG5cdGxldCBlcnJvclN0YWNrID0gXCJcIjtcblx0aWYgKHN0YWNrKSB7XG5cdFx0Y29uc3Qgc3RhY2tGb3JtYXR0ZWQgPSBidG9hKGA8cHJlPiR7c3RhY2t9PC9wcmU+YCk7XG5cdFx0ZXJyb3JTdGFjayA9IHhtbGA8bTpGb3JtYXR0ZWRUZXh0IGh0bWxUZXh0PVwiez0gQkJGLmJhc2U2NERlY29kZSgnJHtzdGFja0Zvcm1hdHRlZH0nKSB9XCIgLz5gO1xuXHR9XG5cdGxldCBhZGRpdGlvbmFsVGV4dCA9IFwiXCI7XG5cdGlmIChhZGRpdGlvbmFsRGF0YSkge1xuXHRcdGFkZGl0aW9uYWxUZXh0ID0geG1sYDxtOlZCb3g+XG5cdFx0XHRcdFx0XHQ8bTpMYWJlbCB0ZXh0PVwiVHJhY2UgSW5mb1wiLz5cblx0XHRcdFx0XHRcdDxjb2RlOkNvZGVFZGl0b3IgdHlwZT1cImpzb25cIiAgdmFsdWU9XCIke2B7PSBCQkYuYmFzZTY0RGVjb2RlKCcke2J0b2EoSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbERhdGEsIG51bGwsIDQpKX0nKSB9YH1cIiBoZWlnaHQ9XCIzMDBweFwiIC8+XG5cdFx0XHRcdFx0PC9tOlZCb3g+YDtcblx0fVxuXHRyZXR1cm4geG1sYDxjb250cm9sczpGb3JtRWxlbWVudFdyYXBwZXIgeG1sbnM6Y29udHJvbHM9XCJzYXAuZmUuY29yZS5jb250cm9sc1wiPlxuXHRcdFx0XHRcdDxtOlZCb3ggeG1sbnM6bT1cInNhcC5tXCIgeG1sbnM6Y29kZT1cInNhcC51aS5jb2RlZWRpdG9yXCIgY29yZTpyZXF1aXJlPVwie0JCRjonc2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrRm9ybWF0dGVyJ31cIj5cblx0XHRcdFx0XHQke2Vycm9yTGFiZWxzfVxuXHRcdFx0XHRcdCR7ZXJyb3JTdGFja31cblx0XHRcdFx0XHRcdDxncmlkOkNTU0dyaWQgZ3JpZFRlbXBsYXRlUm93cz1cImZyXCIgZ3JpZFRlbXBsYXRlQ29sdW1ucz1cInJlcGVhdCgyLDFmcilcIiBncmlkR2FwPVwiMXJlbVwiIHhtbG5zOmdyaWQ9XCJzYXAudWkubGF5b3V0LmNzc2dyaWRcIiA+XG5cdFx0XHRcdFx0XHRcdDxtOlZCb3g+XG5cdFx0XHRcdFx0XHRcdFx0PG06TGFiZWwgdGV4dD1cIkhvdyB0aGUgYnVpbGRpbmcgYmxvY2sgd2FzIGNhbGxlZFwiLz5cblx0XHRcdFx0XHRcdFx0XHQ8Y29kZTpDb2RlRWRpdG9yIHR5cGU9XCJ4bWxcIiB2YWx1ZT1cIiR7YHs9IEJCRi5iYXNlNjREZWNvZGUoJyR7YnRvYSh4bWxGcmFnbWVudC5yZXBsYWNlQWxsKFwiJmd0O1wiLCBcIj5cIikpfScpIH1gfVwiIGhlaWdodD1cIjMwMHB4XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9tOlZCb3g+XG5cdFx0XHRcdFx0XHRcdCR7YWRkaXRpb25hbFRleHR9XG5cdFx0XHRcdFx0XHQ8L2dyaWQ6Q1NTR3JpZD5cblx0XHRcdFx0XHQ8L206VkJveD5cblx0XHRcdFx0PC9jb250cm9sczpGb3JtRWxlbWVudFdyYXBwZXI+YDtcbn1cblxuY29uc3QgdGVtcG9yYXJ5T2JqZWN0U3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbi8qKlxuICogU3RvcmVzIGFuIG9iamVjdCB2YWx1ZSBpbiBhIHRlbXBvcmFyeSBzdG9yYWdlIGFuZCByZXR1cm5zIGFuIElEIHVzZWQgdG8gcmV0cmlldmUgdGhpcyB2YWx1ZSBhdCBhIGxhdGVyIHBvaW50IGluIHRpbWUuXG4gKlxuICogUmVxdWlyZWQgYXMgdGhlcmUgaXMgZnVuY3Rpb25hbGl0eSBsaWtlIHRoZSB4bWxgIGZ1bmN0aW9uLCB3aGljaCBtaWdodCB0YWtlIG9iamVjdHMgYXMgcGFyYW1ldGVycyBidXQgbmVlZHMgdG8gcmV0dXJuIGEgc2VyaWFsaXplZCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHN0b3JlXG4gKiBAcmV0dXJucyBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHN0b3JlT2JqZWN0VmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuXHRjb25zdCBwcm9wZXJ0eVVJRCA9IGAvdWlkLS0ke3VpZCgpfWA7XG5cdHRlbXBvcmFyeU9iamVjdFN0b3JlW3Byb3BlcnR5VUlEXSA9IHZhbHVlO1xuXHRyZXR1cm4gcHJvcGVydHlVSUQ7XG59XG5cbi8qKlxuICogVW5zdG9yZXMgYW4gb2JqZWN0IGZyb20gYSB0ZW1wb3Jhcnkgc3RvcmUgYnkgcmVtb3ZpbmcgaXQgYW5kIHJldHVybmluZyBpdHMgb2JqZWN0IHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVVJRCBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKiBAcmV0dXJucyBPYmplY3QgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdW5zdG9yZU9iamVjdFZhbHVlKHByb3BlcnR5VUlEOiBzdHJpbmcpOiB1bmtub3duIHtcblx0Y29uc3QgdmFsdWUgPSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdGRlbGV0ZSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdHJldHVybiB2YWx1ZTtcbn1cblxubGV0IHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IGZhbHNlO1xuLyoqXG4gKiBNYWtlcyBzdXJlIHRoYXQgYWxsIHhtbGAgY2FsbHMgaW5zaWRlIHRoZSBnaXZlbiBtZXRob2QgYXJlIHByb2Nlc3NlZCBpbiB0cmFjZSBtb2RlLlxuICpcbiAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byBleGVjdXRlXG4gKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBnaXZlbiBtZXRob2RcbiAqL1xuY29uc3QgcHJvY2Vzc1htbEluVHJhY2UgPSBhc3luYyBmdW5jdGlvbiAobWV0aG9kOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiBQcm9taXNlPHVua25vd24+KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IHRydWU7XG5cdGxldCByZXR1cm5WYWx1ZTtcblx0dHJ5IHtcblx0XHRyZXR1cm5WYWx1ZSA9IG1ldGhvZCgpO1xuXHR9IGZpbmFsbHkge1xuXHRcdHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbi8qKlxuICogUGFyc2UgYW4gWE1MIHN0cmluZyBhbmQgcmV0dXJuIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB4bWxTdHJpbmcgVGhlIHhtbCBzdHJpbmdcbiAqIEBwYXJhbSBbYWRkRGVmYXVsdE5hbWVzcGFjZXNdIFdoZXRoZXIgb3Igbm90IGRlZmF1bHQgbmFtZXNwYWNlcyBzaG91bGQgYmUgYWRkZWRcbiAqIEByZXR1cm5zIFRoZSBYTUwgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVhNTFN0cmluZyh4bWxTdHJpbmc6IHN0cmluZywgYWRkRGVmYXVsdE5hbWVzcGFjZXMgPSBmYWxzZSk6IEVsZW1lbnRbXSB7XG5cdGlmIChhZGREZWZhdWx0TmFtZXNwYWNlcykge1xuXHRcdHhtbFN0cmluZyA9IGA8dGVtcGxhdGVcblx0XHRcdFx0XHRcdHhtbG5zOnRlbXBsYXRlPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIlxuXHRcdFx0XHRcdFx0eG1sbnM6bT1cInNhcC5tXCJcblx0XHRcdFx0XHRcdHhtbG5zOm1hY3Jvcz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0XHRcdFx0eG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCJcblx0XHRcdFx0XHRcdHhtbG5zOm1kYz1cInNhcC51aS5tZGNcIlxuXHRcdFx0XHRcdFx0eG1sbnM6Y3VzdG9tRGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIj4ke3htbFN0cmluZ308L3RlbXBsYXRlPmA7XG5cdH1cblx0Y29uc3QgeG1sRG9jdW1lbnQgPSBET01QYXJzZXJJbnN0YW5jZS5wYXJzZUZyb21TdHJpbmcoeG1sU3RyaW5nLCBcInRleHQveG1sXCIpO1xuXHRsZXQgb3V0cHV0ID0geG1sRG9jdW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdHdoaWxlIChvdXRwdXQ/LmxvY2FsTmFtZSA9PT0gXCJ0ZW1wbGF0ZVwiKSB7XG5cdFx0b3V0cHV0ID0gb3V0cHV0LmZpcnN0RWxlbWVudENoaWxkO1xuXHR9XG5cdGNvbnN0IGNoaWxkcmVuID0gb3V0cHV0Py5wYXJlbnRFbGVtZW50ID8gb3V0cHV0Py5wYXJlbnRFbGVtZW50LmNoaWxkcmVuIDogW291dHB1dCBhcyBFbGVtZW50XTtcblx0cmV0dXJuIEFycmF5LmZyb20oY2hpbGRyZW4pO1xufVxuXG4vKipcbiAqIEVzY2FwZSBhbiBYTUwgYXR0cmlidXRlIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHZhbHVlPy5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLCBcIiZhcG9zO1wiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVySW5UcmFjZU1vZGUob3V0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB4bWxSZXN1bHQgPSBwYXJzZVhNTFN0cmluZyhvdXRTdHIsIHRydWUpO1xuXHRpZiAoeG1sUmVzdWx0Py5sZW5ndGggPiAwICYmIHhtbFJlc3VsdFswXT8ubG9jYWxOYW1lID09PSBcInBhcnNlcmVycm9yXCIpIHtcblx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoeG1sUmVzdWx0WzBdIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQgfHwgKHhtbFJlc3VsdFswXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MO1xuXHRcdHJldHVybiBjcmVhdGVFcnJvclhNTChbZXJyb3JNZXNzYWdlLnNwbGl0KFwiXFxuXCIpWzBdXSwgb3V0U3RyKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gb3V0U3RyO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFhNTFByb2Nlc3NvclR5cGVWYWx1ZSA9XG5cdHwgc3RyaW5nXG5cdHwgYm9vbGVhblxuXHR8IG51bWJlclxuXHR8IHVuZGVmaW5lZFxuXHR8IG51bGxcblx0fCBvYmplY3Rcblx0fCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXHR8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyPlxuXHR8IEFycmF5PHN0cmluZz5cblx0fCBBcnJheTxGdW5jdGlvbj5cblx0fCBGdW5jdGlvblxuXHR8IENvbnRleHQ7XG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbCB3aGlsZSBoYW5kbGluZyBzcGVjaWFsIG9iamVjdCBjYXNlLlxuICpcbiAqIEBwYXJhbSBzdHJpbmdzIFRoZSBzdHJpbmcgcGFydHMgb2YgdGhlIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEBwYXJhbSB2YWx1ZXMgVGhlIHZhbHVlcyBwYXJ0IG9mIHRoZSB0ZW1wbGF0ZSBsaXRlcmFsXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBkb2N1bWVudCByZXByZXNlbnRpbmcgdGhlIHN0cmluZyB0aGF0IHdhcyB1c2VkLlxuICovXG5leHBvcnQgY29uc3QgeG1sID0gKHN0cmluZ3M6IFRlbXBsYXRlU3RyaW5nc0FycmF5LCAuLi52YWx1ZXM6IFhNTFByb2Nlc3NvclR5cGVWYWx1ZVtdKTogc3RyaW5nID0+IHtcblx0bGV0IG91dFN0ciA9IFwiXCI7XG5cdGxldCBpO1xuXHRmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0b3V0U3RyICs9IHN0cmluZ3NbaV07XG5cblx0XHQvLyBIYW5kbGUgdGhlIGRpZmZlcmVudCBjYXNlIG9mIG9iamVjdCwgaWYgaXQncyBhbiBhcnJheSB3ZSBqb2luIHRoZW0sIGlmIGl0J3MgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhlbiB3ZSBjb21waWxlIGl0LlxuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2ldO1xuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHZhbHVlWzBdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWUuZmxhdCg1KS5qb2luKFwiXFxuXCIpLnRyaW0oKTtcblx0XHR9IGVsc2UgaWYgKGlzRnVuY3Rpb25BcnJheSh2YWx1ZSkpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZS5tYXAoKHZhbHVlZm4pID0+IHZhbHVlZm4oKSkuam9pbihcIlxcblwiKTtcblx0XHR9IGVsc2UgaWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgY29tcGlsZWRFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWUpO1xuXHRcdFx0b3V0U3RyICs9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKGNvbXBpbGVkRXhwcmVzc2lvbik7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdG91dFN0ciArPSBcInt0aGlzPnVuZGVmaW5lZFZhbHVlfVwiO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZSgpO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRpZiAoaXNDb250ZXh0KHZhbHVlKSkge1xuXHRcdFx0XHRvdXRTdHIgKz0gdmFsdWUuZ2V0UGF0aCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlVSWQgPSBzdG9yZU9iamVjdFZhbHVlKHZhbHVlKTtcblx0XHRcdFx0b3V0U3RyICs9IGAke3Byb3BlcnR5VUlkfWA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCI8XCIpICYmICF2YWx1ZS5zdGFydHNXaXRoKFwiJmx0O1wiKSkge1xuXHRcdFx0b3V0U3RyICs9IGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlO1xuXHRcdH1cblx0fVxuXHRvdXRTdHIgKz0gc3RyaW5nc1tpXTtcblx0b3V0U3RyID0gb3V0U3RyLnRyaW0oKTtcblx0aWYgKHByb2Nlc3NOZXh0WG1sSW5UcmFjZSkge1xuXHRcdHJldHVybiByZW5kZXJJblRyYWNlTW9kZShvdXRTdHIpO1xuXHR9XG5cdHJldHVybiBvdXRTdHI7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBZ0NBLE1BQU1BLFlBQVksR0FBRyxzRUFBc0U7RUFDM0YsTUFBTUMsZ0JBQWdCLEdB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
|
|
@@ -912,7 +912,7 @@ async function processBuildingBlock(
|
|
|
912
912
|
} else {
|
|
913
913
|
requireOnMacro = coreRequire;
|
|
914
914
|
}
|
|
915
|
-
oMacroElement.setAttributeNS("sap.ui.core", "require", requireOnMacro);
|
|
915
|
+
oMacroElement.setAttributeNS("sap.ui.core", "core:require", requireOnMacro);
|
|
916
916
|
}
|
|
917
917
|
}
|
|
918
918
|
}
|