@sapui5/sap.fe.core 1.141.2 → 1.142.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +4 -1
- package/src/sap/fe/core/ActionRuntime.js +48 -23
- package/src/sap/fe/core/ActionRuntime.ts +61 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +94 -8
- package/src/sap/fe/core/AppStateHandler.js +9 -8
- package/src/sap/fe/core/AppStateHandler.ts +13 -9
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -10
- package/src/sap/fe/core/ExtensionAPI.ts +2 -14
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +20 -1
- package/src/sap/fe/core/TemplateComponent.ts +24 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
- package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
- package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
- package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
- package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/Component.js +8 -1
- package/src/sap/fe/core/fpm/Component.ts +8 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
- package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.ts +28 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -339,6 +339,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/uid", "
|
|
|
339
339
|
for (let childIdx = 0; childIdx < children.length; childIdx++) {
|
|
340
340
|
const childDefinition = children[childIdx];
|
|
341
341
|
let childKey = childDefinition.getAttribute("key") || childDefinition.getAttribute("id") || definition?.skipKey && definition.multiple === false && uid();
|
|
342
|
+
if (!childKey && definition?.reallySkipKey) {
|
|
343
|
+
childKey = uid();
|
|
344
|
+
}
|
|
342
345
|
if (childKey) {
|
|
343
346
|
childKey = `InlineXML_${childKey}`;
|
|
344
347
|
childDefinition.setAttribute("key", childKey);
|
|
@@ -992,4 +995,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/base/util/uid", "
|
|
|
992
995
|
_exports.addAttributeToXML = addAttributeToXML;
|
|
993
996
|
return _exports;
|
|
994
997
|
}, false);
|
|
995
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0dHRVJfU0NPUEUiLCJYTUxURU1QTEFUSU5HX05TIiwiRE9NUGFyc2VySW5zdGFuY2UiLCJET01QYXJzZXIiLCJ2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0Iiwic05hbWUiLCJtQ29udGV4dHMiLCJvQ29udGV4dFNldHRpbmdzIiwic0tleSIsIm9Db250ZXh0Iiwib0NvbnRleHRPYmplY3QiLCJnZXRPYmplY3QiLCJyZXF1aXJlZCIsIkVycm9yIiwiaGFzT3duUHJvcGVydHkiLCIka2luZCIsInVuZGVmaW5lZCIsImV4cGVjdGVkVHlwZXMiLCJpbmNsdWRlcyIsImdldFBhdGgiLCIkVHlwZSIsImV4cGVjdGVkQW5ub3RhdGlvblR5cGVzIiwidmFsaWRhdGVNYWNyb1NpZ25hdHVyZSIsIm9NZXRhZGF0YSIsIm9Ob2RlIiwiYU1ldGFkYXRhQ29udGV4dEtleXMiLCJtZXRhZGF0YUNvbnRleHRzIiwiT2JqZWN0Iiwia2V5cyIsImFQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIm9BdHRyaWJ1dGVOYW1lcyIsImF0dHJpYnV0ZU5hbWVzIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJhdHRyaWJ1dGVOYW1lIiwiZm9yRWFjaCIsIm9Qcm9wZXJ0eVNldHRpbmdzIiwiaGFzQXR0cmlidXRlIiwic3RhcnRzV2l0aCIsIkxvZyIsIndhcm5pbmciLCJfZXhwb3J0cyIsIlNBUF9VSV9DT1JFX0VMRU1FTlQiLCJTQVBfVUlfTU9ERUxfQ09OVEVYVCIsInRyYW5zZm9ybU1ldGFkYXRhIiwiYnVpbGRpbmdCbG9ja01ldGFkYXRhIiwiY2xhc3MiLCJ0eXBlIiwiaXNQdWJsaWMiLCJhZ2dyZWdhdGlvbnMiLCJkZXBlbmRlbnRzIiwic2xvdCIsImN1c3RvbURhdGEiLCJsYXlvdXREYXRhIiwicHJvcGVydHlOYW1lIiwicHJvcGVydHlUeXBlIiwiX2NoZWNrQWJzb2x1dGVBbmRDb250ZXh0UGF0aHMiLCJvU2V0dGluZ3MiLCJzQXR0cmlidXRlVmFsdWUiLCJzTWV0YVBhdGgiLCJzQ29udGV4dFBhdGgiLCJjdXJyZW50Q29udGV4dFBhdGgiLCJlbmRzV2l0aCIsIm1vZGVsIiwicGF0aCIsIl9jcmVhdGVJbml0aWFsTWV0YWRhdGFDb250ZXh0Iiwic0F0dHJpYnV0ZU5hbWUiLCJyZXR1cm5Db250ZXh0IiwibW9kZWxzIiwiY29udmVydGVyQ29udGV4dCIsImdldFByb3BlcnR5IiwiZGF0YSIsInVuc3RvcmVPYmplY3RWYWx1ZSIsInNldFByb3BlcnR5IiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwiX2dldE1ldGFkYXRhQ29udGV4dCIsIm9WaXNpdG9yIiwiYkRvTm90UmVzb2x2ZSIsImlzT3BlbiIsIm9NZXRhZGF0YUNvbnRleHQiLCJnZXRBdHRyaWJ1dGUiLCJCaW5kaW5nSW5mbyIsInBhcnNlIiwibWV0YUNvbnRleHRQYXRoIiwiY29udGV4dCIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImlzQSIsImUiLCJwcm9jZXNzUHJvcGVydGllcyIsImRlZmluaXRpb25Qcm9wZXJ0aWVzIiwiYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyIsInByb3BlcnR5VmFsdWVzIiwic0tleVZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiZGVlcENsb25lIiwiZXJyb3IiLCJ2aXNpdEF0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJnZXROYW1lZEl0ZW0iLCJ2YWx1ZSIsIk51bWJlciIsInByb2Nlc3NDb250ZXh0cyIsImNvbnRleHRQYXRoIiwibU1pc3NpbmdDb250ZXh0Iiwib0RlZmluaXRpb25Db250ZXh0cyIsImFEZWZpbml0aW9uQ29udGV4dHNLZXlzIiwiY29udGV4dFBhdGhJbmRleCIsImluZGV4T2YiLCJjb250ZXh0UGF0aERlZmluaXRpb24iLCJzcGxpY2UiLCJwcm9wZXJ0eVZhbHVlIiwibGVuZ3RoIiwibmFtZSIsImFkZFNpbmdsZUNvbnRleHQiLCJwYXJzZUFnZ3JlZ2F0aW9uIiwib0FnZ3JlZ2F0aW9uIiwiZGVmaW5pdGlvbiIsIm9PdXRPYmplY3RzIiwiY2hpbGRyZW4iLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm5hbWVzcGFjZVVSSSIsIm9QYXJlbnQiLCJwYXJlbnROb2RlIiwidmlzaXROb2RlIiwiY2hpbGRJZHgiLCJjaGlsZERlZmluaXRpb24iLCJjaGlsZEtleSIsInNraXBLZXkiLCJtdWx0aXBsZSIsInVpZCIsInNldEF0dHJpYnV0ZSIsImFnZ3JlZ2F0aW9uT2JqZWN0Iiwia2V5IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImFuY2hvciIsInByb2Nlc3NBZ2dyZWdhdGlvbnMiLCJ0YWdOYW1lIiwibm9kZU5hbWUiLCJwcm9jZXNzT2JqZWN0IiwiZWxlbWVudCIsIm15QXJyYXkiLCJteU9iamVjdCIsImNoaWxkTm9kZU5hbWVzIiwibWFwIiwibG9jYWxOYW1lIiwiY2hpbGRJc0FycmF5IiwiU2V0Iiwic2l6ZSIsInB1c2giLCJwcm9jZXNzQ2hpbGRyZW4iLCJvQWdncmVnYXRpb25zIiwib0ZpcnN0RWxlbWVudENoaWxkIiwiaUNoaWxkSW5kZXgiLCJBcnJheSIsImZyb20iLCJuZXh0RWxlbWVudFNpYmxpbmciLCJzQ2hpbGROYW1lIiwic0FnZ3JlZ2F0aW9uTmFtZSIsInRvVXBwZXJDYXNlIiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25EZWZpbml0aW9uIiwicGFyc2VkQWdncmVnYXRpb24iLCJwYXJzZWRBZ2dyZWdhdGlvbktleSIsIm9OZXh0Q2hpbGQiLCJuZXh0Q2hpbGQiLCJoYXNWaXJ0dWFsTm9kZSIsImNoaWxkV3JhcHBlciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVBdHRyaWJ1dGUiLCJvTmV3Q2hpbGQiLCJjbG9uZU5vZGUiLCJhZ2dyZWdhdGlvblByb3BlcnR5VmFsdWVzIiwibXlDaGlsZCIsInByb2Nlc3NTbG90cyIsIm9NZXRhZGF0YUFnZ3JlZ2F0aW9ucyIsInByb2Nlc3NDdXN0b21EYXRhIiwiYXJndW1lbnRzIiwib0FnZ3JlZ2F0aW9uRWxlbWVudCIsIm9FbGVtZW50Q2hpbGQiLCJzU2xvdE5hbWUiLCJvVGFyZ2V0RWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJwcmVwYXJlQWdncmVnYXRpb25FbGVtZW50IiwicmVwbGFjZVdpdGgiLCJyZXBsYWNlIiwicHJvY2Vzc0J1aWxkaW5nQmxvY2siLCJCdWlsZGluZ0Jsb2NrQ2xhc3MiLCJtZXRhZGF0YSIsInNGcmFnbWVudE5hbWUiLCJmcmFnbWVudCIsIm5hbWVzcGFjZSIsInB1YmxpY05hbWVzcGFjZSIsInhtbFRhZyIsImdldFNldHRpbmdzIiwiSlNPTk1vZGVsIiwiaW5pdGlhbEtleXMiLCJvQ29udHJvbENvbmZpZyIsInZpZXdEYXRhIiwicHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMiLCJwcm9wTmFtZSIsIm9EYXRhIiwib3JpZ2luYWxEZWZpbml0aW9uIiwidmFsaWRhdGUiLCJvSW5zdGFuY2UiLCJnZXRQcm9wZXJ0aWVzIiwic0NvbnRleHROYW1lIiwidGFyZ2V0T2JqZWN0IiwiaXNDb250ZXh0IiwiYXR0cmlidXRlVmFsdWUiLCJzdG9yZU9iamVjdFZhbHVlIiwibmV3Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib0F0dHJpYnV0ZXNNb2RlbCIsIkF0dHJpYnV0ZU1vZGVsIiwib1ByZXZpb3VzTWFjcm9JbmZvIiwiY29yZVJlcXVpcmUiLCJUcmFjZUluZm8iLCJpc1RyYWNlSW5mb0FjdGl2ZSIsIm9UcmFjZUluZm8iLCJ0cmFjZU1hY3JvQ2FsbHMiLCJtYWNyb0luZm8iLCJvQ29udGV4dFZpc2l0b3IiLCJ3aXRoIiwib1Byb21pc2UiLCJpbnNlcnRGcmFnbWVudCIsIm9sZEtleXMiLCJ0ZW1wb3JhcnlPYmplY3RTdG9yZSIsInRlbXBsYXRlU3RyaW5nIiwianN4IiwicmVuZGVyQXNYTUwiLCJnZXRUZW1wbGF0ZSIsImlzUnVudGltZSIsInN0b3JlS2V5IiwiaGFzRXJyb3IiLCJoYXNQYXJzZUVycm9yIiwicGFyc2VkVGVtcGxhdGUiLCJwYXJzZVhNTFN0cmluZyIsIml0ZXIiLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJOb2RlRmlsdGVyIiwiU0hPV19URVhUIiwidGV4dG5vZGUiLCJuZXh0Tm9kZSIsInRleHRDb250ZW50IiwidHJpbSIsInByb2Nlc3NYbWxJblRyYWNlIiwiaW5pdGlhbFRlbXBsYXRlIiwib0Vycm9yVGV4dCIsImNyZWF0ZUVycm9yWE1MIiwidGVtcGxhdGUiLCJvdXRlckhUTUwiLCJqb2luIiwidmlzaXRlZE5vZGVzIiwiaW50ZXJuYWxOb2RlIiwiUHJvbWlzZSIsImFsbCIsInJlbW92ZSIsInJlc29sdmUiLCJvTWFjcm9FbGVtZW50Iiwib1JlbWFpbmluZ1Nsb3RzIiwicXVlcnlTZWxlY3RvckFsbCIsIm9TbG90RWxlbWVudCIsInJlcXVpcmVPbk1hY3JvIiwiZ2V0QXR0cmlidXRlTlMiLCJzdWJzdHJpbmciLCJzZXRBdHRyaWJ1dGVOUyIsImNsYXNzTGlzdCIsImFkZCIsInRyYWNlRGV0YWlscyIsImluaXRpYWxQcm9wZXJ0aWVzIiwicmVzb2x2ZWRQcm9wZXJ0aWVzIiwibWlzc2luZ0NvbnRleHRzIiwib0Vycm9yIiwic3RhY2siLCJvVGVtcGxhdGUiLCJvQ3R4IiwibVNldHRpbmciLCJleCIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsIlhNTFByZXByb2Nlc3NvciIsInBsdWdJbiIsInVucmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwiZXJyb3JNZXNzYWdlcyIsInhtbEZyYWdtZW50IiwiYWRkaXRpb25hbERhdGEiLCJlcnJvckxhYmVscyIsImVycm9yTWVzc2FnZSIsInhtbCIsImVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlIiwiZXJyb3JTdGFjayIsInN0YWNrRm9ybWF0dGVkIiwiYnRvYSIsImFkZGl0aW9uYWxUZXh0IiwianNvblZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcGxhY2VBbGwiLCJwcm9wZXJ0eVVJRCIsInByb2Nlc3NOZXh0WG1sSW5UcmFjZSIsIm1ldGhvZCIsInJldHVyblZhbHVlIiwieG1sU3RyaW5nIiwiYWRkRGVmYXVsdE5hbWVzcGFjZXMiLCJ4bWxEb2N1bWVudCIsInBhcnNlRnJvbVN0cmluZyIsIm91dHB1dCIsInBhcmVudEVsZW1lbnQiLCJyZW5kZXJJblRyYWNlTW9kZSIsIm91dFN0ciIsInhtbFJlc3VsdCIsImlubmVyVGV4dCIsImlubmVySFRNTCIsInNwbGl0Iiwic3RyaW5ncyIsImkiLCJfbGVuIiwidmFsdWVzIiwiX2tleSIsImlzQXJyYXkiLCJmbGF0IiwiaXNGdW5jdGlvbkFycmF5IiwidmFsdWVmbiIsImlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwiY29tcGlsZWRFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwcm9wZXJ0eVVJZCIsImFkZENvbmRpdGlvbmFsbHlUb1hNTCIsImNvbmRpdGlvbiIsInBhcnRUb0FkZCIsImFkZEF0dHJpYnV0ZVRvWE1MIiwiaXNVbmRlZmluZWRFeHByZXNzaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIGlzVW5kZWZpbmVkRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IEF0dHJpYnV0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0F0dHJpYnV0ZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0QnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24sXG5cdEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24sXG5cdE9iamVjdFZhbHVlLFxuXHRPYmplY3RWYWx1ZTJcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIHsgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgRGVmaW5pdGlvbkNvbnRleHQsIERlZmluaXRpb25QYWdlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgeyBpc0NvbnRleHQsIGlzRnVuY3Rpb25BcnJheSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IE1hY3JvSW5mbyB9IGZyb20gXCIuLi9UcmFjZUluZm9cIjtcbmltcG9ydCBUcmFjZUluZm8gZnJvbSBcIi4uL1RyYWNlSW5mb1wiO1xuXG5jb25zdCBMT0dHRVJfU0NPUEUgPSBcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmcuQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5jb25zdCBYTUxURU1QTEFUSU5HX05TID0gXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUudGVtcGxhdGUvMVwiO1xuY29uc3QgRE9NUGFyc2VySW5zdGFuY2UgPSBuZXcgRE9NUGFyc2VyKCk7XG5cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhID0gQnVpbGRpbmdCbG9ja01ldGFkYXRhICYge1xuXHRtZXRhZGF0YUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbj47XG59O1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBtZXRhIGRhdGEgY29udGV4dFxuICovXG50eXBlIE1ldGFEYXRhQ29udGV4dCA9IHtcblx0bmFtZT86IHN0cmluZztcblx0bW9kZWw6IHN0cmluZztcblx0cGF0aDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0Y3VycmVudENvbnRleHRQYXRoOiBDb250ZXh0O1xuXHRpc1B1YmxpYzogYm9vbGVhbjtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdGlzUnVudGltZUluc3RhbnRpYXRpb24/OiBib29sZWFuO1xuXHRtb2RlbHM6IFJlY29yZDxzdHJpbmcsIE1vZGVsPiAmIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0OiBKU09OTW9kZWw7XG5cdFx0dmlld0RhdGE6IEpTT05Nb2RlbDtcblx0XHRpbnRlcm5hbDogSlNPTk1vZGVsO1xuXHRcdG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWw7XG5cdFx0XCJzYXAuZmUuaTE4blwiPzogUmVzb3VyY2VNb2RlbDtcblx0fTtcblx0Z2V0RGVmaW5pdGlvbkNvbnRleHQoKTogRGVmaW5pdGlvbkNvbnRleHQ7XG5cdGdldERlZmluaXRpb25Gb3JQYWdlKCk6IERlZmluaXRpb25QYWdlO1xuXHRiaW5kaW5nQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+O1xuXHRfbWFjcm9JbmZvPzogTWFjcm9JbmZvO1xuXHRbazogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIElWaXNpdG9yQ2FsbGJhY2sgPSB7XG5cdGdldFNldHRpbmdzKCk6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3M7XG5cdC8qKlxuXHQgKiBWaXNpdHMgdGhlIGdpdmVuIG5vZGUgYW5kIGVpdGhlciBwcm9jZXNzZXMgYSB0ZW1wbGF0ZSBpbnN0cnVjdGlvbiwgY2FsbHNcblx0ICogYSB2aXNpdG9yLCBvciBzaW1wbHkgY2FsbHMgYm90aCB7QGxpbmtcblx0ICogc2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3IuSUNhbGxiYWNrLnZpc2l0QXR0cmlidXRlcyB2aXNpdEF0dHJpYnV0ZXN9XG5cdCAqIGFuZCB7QGxpbmsgc2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3IuSUNhbGxiYWNrLnZpc2l0Q2hpbGROb2Rlc1xuXHQgKiB2aXNpdENoaWxkTm9kZXN9LlxuXHQgKiBAcGFyYW0gb05vZGVcblx0ICogICBUaGUgWE1MIERPTSBub2RlXG5cdCAqIEByZXR1cm5zXG5cdCAqICAgQSB0aGVuYWJsZSB3aGljaCByZXNvbHZlcyB3aXRoIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gYXMgc29vbiBhcyB2aXNpdGluZ1xuXHQgKiAgIGlzIGRvbmUsIG9yIGlzIHJlamVjdGVkIHdpdGggYSBjb3JyZXNwb25kaW5nIGVycm9yIGlmIHZpc2l0aW5nIGZhaWxzXG5cdCAqL1xuXHR2aXNpdE5vZGUob05vZGU6IE5vZGUpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdC8qKlxuXHQgKiBJbnNlcnRzIHRoZSBmcmFnbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHBsYWNlIG9mIHRoZSBnaXZlbiBlbGVtZW50LiBMb2FkcyB0aGVcblx0ICogZnJhZ21lbnQsIHRha2VzIGNhcmUgb2YgY2FjaGluZyAoZm9yIHRoZSBjdXJyZW50IHByZS1wcm9jZXNzb3IgcnVuKSBhbmQgdmlzaXRzIHRoZVxuXHQgKiBmcmFnbWVudCdzIGNvbnRlbnQgb25jZSBpdCBoYXMgYmVlbiBpbXBvcnRlZCBpbnRvIHRoZSBlbGVtZW50J3Mgb3duZXIgZG9jdW1lbnQgYW5kXG5cdCAqIHB1dCBpbnRvIHBsYWNlLiBMb2FkaW5nIG9mIGZyYWdtZW50cyBpcyBhc3luY2hyb25vdXMgaWYgdGhlIHRlbXBsYXRlIHZpZXcgaXNcblx0ICogYXN5bmNocm9ub3VzLlxuXHQgKiBAcGFyYW0gc0ZyYWdtZW50XG5cdCAqICAgdGhlIGZyYWdtZW50J3MgcmVzb2x2ZWQgbmFtZVxuXHQgKiBAcGFyYW0gb0VsZW1lbnRcblx0ICogICB0aGUgWE1MIERPTSBlbGVtZW50LCBlLmcuIDxzYXAudWkuY29yZTpGcmFnbWVudD4gb3IgPGNvcmU6RXh0ZW5zaW9uUG9pbnQ+XG5cdCAqIEBwYXJhbSBvV2l0aFxuXHQgKiAgIHRoZSBwYXJlbnQncyBcIndpdGhcIiBjb250cm9sXG5cdCAqIEByZXR1cm5zXG5cdCAqIEEgc3luYyBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHdpdGggPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBhcyBzb29uIGFzIHRoZSBmcmFnbWVudFxuXHQgKiAgIGhhcyBiZWVuIGluc2VydGVkLCBvciBpcyByZWplY3RlZCB3aXRoIGEgY29ycmVzcG9uZGluZyBlcnJvciBpZiBsb2FkaW5nIG9yIHZpc2l0aW5nXG5cdCAqICAgZmFpbHMuXG5cdCAqL1xuXHRpbnNlcnRGcmFnbWVudChzRnJhZ21lbnQ6IHN0cmluZywgb0VsZW1lbnQ6IEVsZW1lbnQsIG9XaXRoPzogQ29udHJvbCk6IFByb21pc2U8dm9pZD47XG5cdHZpc2l0QXR0cmlidXRlKG9Ob2RlOiBFbGVtZW50LCBvQXR0cmlidXRlOiBBdHRyKTogUHJvbWlzZTx2b2lkPjtcblx0dmlzaXRBdHRyaWJ1dGVzKG9Ob2RlOiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPjtcblx0Z2V0Vmlld0luZm8oKTogUHJvbWlzZTx1bmtub3duPjtcblx0dmlzaXRDaGlsZE5vZGVzKG9Ob2RlOiBOb2RlKTogUHJvbWlzZTx2b2lkPjtcblx0LyoqXG5cdCAqIEludGVycHJldHMgdGhlIGdpdmVuIFhNTCBET00gYXR0cmlidXRlIHZhbHVlIGFzIGEgYmluZGluZyBhbmQgcmV0dXJucyB0aGVcblx0ICogcmVzdWx0aW5nIHZhbHVlLlxuXHQgKiBAcGFyYW0gc1ZhbHVlXG5cdCAqICAgQW4gWE1MIERPTSBhdHRyaWJ1dGUgdmFsdWVcblx0ICogQHBhcmFtIFtlbGVtZW50XVxuXHQgKiAgIFRoZSBYTUwgRE9NIGVsZW1lbnQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBiZWxvbmdzIHRvIChuZWVkZWQgb25seSBmb3Jcblx0ICogICB3YXJuaW5ncyB3aGljaCBhcmUgbG9nZ2VkIHRvIHRoZSBjb25zb2xlKVxuXHQgKiBAcmV0dXJuc1xuXHQgKiAgIEEgdGhlbmFibGUgd2hpY2ggcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0aW5nIHZhbHVlLCBvciBpcyByZWplY3RlZCB3aXRoIGFcblx0ICogICBjb3JyZXNwb25kaW5nIGVycm9yIChmb3IgZXhhbXBsZSwgYW4gZXJyb3IgdGhyb3duIGJ5IGEgZm9ybWF0dGVyKSBvclxuXHQgKiAgIDxjb2RlPm51bGw8L2NvZGU+IGluIGNhc2UgdGhlIGJpbmRpbmcgaXMgbm90IHJlYWR5IChiZWNhdXNlIGl0IHJlZmVycyB0byBhXG5cdCAqICAgbW9kZWwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSkgKHNpbmNlIDEuNTcuMClcblx0ICovXG5cdGdldFJlc3VsdChzVmFsdWU6IHN0cmluZywgZWxlbWVudD86IEVsZW1lbnQpOiBQcm9taXNlPENvbnRleHQ+IHwgbnVsbDtcblx0Z2V0Q29udGV4dChzUGF0aD86IHN0cmluZyk6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgY2FsbGJhY2sgaW50ZXJmYWNlIGluc3RhbmNlIGZvciB0aGUgZ2l2ZW4gbWFwIG9mIHZhcmlhYmxlcyB3aGljaFxuXHQgKiBvdmVycmlkZSBjdXJyZW50bHkga25vd24gdmFyaWFibGVzIG9mIHRoZSBzYW1lIG5hbWUgaW4gPGNvZGU+dGhpczwvY29kZT5cblx0ICogcGFyZW50IGludGVyZmFjZSBvciByZXBsYWNlIHRoZW0gYWx0b2dldGhlci4gRWFjaCB2YXJpYWJsZSBuYW1lIGJlY29tZXMgYVxuXHQgKiBuYW1lZCBtb2RlbCB3aXRoIGEgY29ycmVzcG9uZGluZyBvYmplY3QgYmluZGluZyBhbmQgY2FuIGJlIHVzZWQgaW5zaWRlIHRoZVxuXHQgKiBYTUwgdGVtcGxhdGUgaW4gdGhlIHVzdWFsIHdheSwgdGhhdCBpcywgd2l0aCBhIGJpbmRpbmcgZXhwcmVzc2lvbiBsaWtlXG5cdCAqIDxjb2RlPlwie3Zhcj5zb21lL3JlbGF0aXZlL3BhdGh9XCI8L2NvZGU+IChzZWUgZXhhbXBsZSkuXG5cdCAqIEBwYXJhbSBbbVZhcmlhYmxlcz17fV1cblx0ICogICBNYXAgZnJvbSB2YXJpYWJsZSBuYW1lIChzdHJpbmcpIHRvIHZhbHVlXG5cdCAqIEBwYXJhbSBbYlJlcGxhY2VdXG5cdCAqICAgV2hldGhlciBvbmx5IHRoZSBnaXZlbiB2YXJpYWJsZXMgYXJlIGtub3duIGluIHRoZSBuZXcgY2FsbGJhY2sgaW50ZXJmYWNlXG5cdCAqICAgaW5zdGFuY2UsIG5vIGluaGVyaXRlZCBvbmVzXG5cdCAqIEByZXR1cm5zXG5cdCAqICAgQSBjYWxsYmFjayBpbnRlcmZhY2UgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG1WYXJpYWJsZXNcblx0ICogQHBhcmFtIGJSZXBsYWNlXG5cdCAqL1xuXHRcIndpdGhcIihtVmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sIGJSZXBsYWNlPzogYm9vbGVhbik6IElWaXNpdG9yQ2FsbGJhY2s7XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0KFxuXHRzTmFtZTogc3RyaW5nLFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+LFxuXHRvQ29udGV4dFNldHRpbmdzOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbixcblx0c0tleTogc3RyaW5nXG4pOiB2b2lkIHtcblx0Y29uc3Qgb0NvbnRleHQgPSBtQ29udGV4dHNbc0tleV07XG5cdGNvbnN0IG9Db250ZXh0T2JqZWN0ID0gb0NvbnRleHQ/LmdldE9iamVjdCgpIGFzIHtcblx0XHQkVHlwZT86IHN0cmluZztcblx0XHQka2luZD86IHN0cmluZztcblx0fTtcblxuXHRpZiAob0NvbnRleHRTZXR0aW5ncy5yZXF1aXJlZCA9PT0gdHJ1ZSAmJiAoIW9Db250ZXh0IHx8IG9Db250ZXh0T2JqZWN0ID09PSBudWxsKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgJHtzTmFtZX06IFJlcXVpcmVkIG1ldGFkYXRhQ29udGV4dCAnJHtzS2V5fScgaXMgbWlzc2luZ2ApO1xuXHR9IGVsc2UgaWYgKG9Db250ZXh0T2JqZWN0KSB7XG5cdFx0Ly8gSWYgY29udGV4dCBvYmplY3QgaGFzICRraW5kIHByb3BlcnR5LCAkVHlwZSBzaG91bGQgbm90IGJlIGNoZWNrZWRcblx0XHQvLyBUaGVyZWZvcmUgcmVtb3ZlIGZyb20gY29udGV4dCBzZXR0aW5nc1xuXHRcdGlmIChvQ29udGV4dE9iamVjdC5oYXNPd25Qcm9wZXJ0eShcIiRraW5kXCIpICYmIG9Db250ZXh0T2JqZWN0LiRraW5kICE9PSB1bmRlZmluZWQgJiYgb0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZFR5cGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSAka2luZCBpcyBwYXJ0IG9mIHRoZSBhbGxvd2VkIG9uZXNcblx0XHRcdGlmICghb0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZFR5cGVzLmluY2x1ZGVzKG9Db250ZXh0T2JqZWN0LiRraW5kKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YCR7c05hbWV9OiAnJHtzS2V5fScgbXVzdCBiZSAnJGtpbmQnICcke29Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRUeXBlc30nIGJ1dCBpcyAnJHtcblx0XHRcdFx0XHRcdG9Db250ZXh0T2JqZWN0LiRraW5kXG5cdFx0XHRcdFx0fSc6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b0NvbnRleHRPYmplY3QuaGFzT3duUHJvcGVydHkoXCIkVHlwZVwiKSAmJlxuXHRcdFx0b0NvbnRleHRPYmplY3QuJFR5cGUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0b0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZEFubm90YXRpb25UeXBlc1xuXHRcdCkge1xuXHRcdFx0Ly8gQ2hlY2sgb25seSAkVHlwZVxuXHRcdFx0aWYgKCFvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkQW5ub3RhdGlvblR5cGVzLmluY2x1ZGVzKG9Db250ZXh0T2JqZWN0LiRUeXBlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0YCR7c05hbWV9OiAnJHtzS2V5fScgbXVzdCBiZSAnJFR5cGUnICcke29Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXN9JyBidXQgaXMgJyR7XG5cdFx0XHRcdFx0XHRvQ29udGV4dE9iamVjdC4kVHlwZVxuXHRcdFx0XHRcdH0nOiAke29Db250ZXh0LmdldFBhdGgoKX1gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNYWNyb1NpZ25hdHVyZShcblx0c05hbWU6IHN0cmluZyxcblx0b01ldGFkYXRhOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0bUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0Pixcblx0b05vZGU6IEVsZW1lbnRcbik6IHZvaWQge1xuXHRjb25zdCBhTWV0YWRhdGFDb250ZXh0S2V5cyA9IChvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cyAmJiBPYmplY3Qua2V5cyhvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cykpIHx8IFtdLFxuXHRcdGFQcm9wZXJ0aWVzID0gKG9NZXRhZGF0YS5wcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9NZXRhZGF0YS5wcm9wZXJ0aWVzKSkgfHwgW10sXG5cdFx0b0F0dHJpYnV0ZU5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdC8vIGNvbGxlY3QgYWxsIGF0dHJpYnV0ZXMgdG8gZmluZCB1bmNoZWNrZWQgcHJvcGVydGllc1xuXHRjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IG9Ob2RlLmdldEF0dHJpYnV0ZU5hbWVzKCk7XG5cdGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBvZiBhdHRyaWJ1dGVOYW1lcykge1xuXHRcdG9BdHRyaWJ1dGVOYW1lc1thdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cdH1cblxuXHQvL0NoZWNrIG1ldGFkYXRhQ29udGV4dHNcblx0YU1ldGFkYXRhQ29udGV4dEtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdGNvbnN0IG9Db250ZXh0U2V0dGluZ3MgPSBvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0c1tzS2V5XTtcblxuXHRcdHZhbGlkYXRlTWFjcm9NZXRhZGF0YUNvbnRleHQoc05hbWUsIG1Db250ZXh0cywgb0NvbnRleHRTZXR0aW5ncywgc0tleSk7XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVOYW1lc1tzS2V5XTtcblx0fSk7XG5cdC8vQ2hlY2sgcHJvcGVydGllc1xuXHRhUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5KSB7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5U2V0dGluZ3MgPSBvTWV0YWRhdGEucHJvcGVydGllc1tzS2V5XTtcblx0XHRpZiAoIW9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5KSkge1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eVNldHRpbmdzLnJlcXVpcmVkICYmICFvUHJvcGVydHlTZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRWYWx1ZVwiKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7c05hbWV9OiBgICsgYFJlcXVpcmVkIHByb3BlcnR5ICcke3NLZXl9JyBpcyBtaXNzaW5nYCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlTmFtZXNbc0tleV07XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBVbmNoZWNrZWQgcHJvcGVydGllc1xuXHRPYmplY3Qua2V5cyhvQXR0cmlidXRlTmFtZXMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdC8vIG5vIGNoZWNrIGZvciBwcm9wZXJ0aWVzIHdoaWNoIGNvbnRhaW4gYSBjb2xvbiBcIjpcIiAoZGlmZmVyZW50IG5hbWVzcGFjZSksIGUuZy4geG1sbnM6dHJhY2UsIHRyYWNlOm1hY3JvSUQsIHVuaXR0ZXN0OmlkXG5cdFx0aWYgKCFzS2V5LmluY2x1ZGVzKFwiOlwiKSAmJiAhc0tleS5zdGFydHNXaXRoKFwieG1sbnNcIikpIHtcblx0XHRcdExvZy53YXJuaW5nKGBVbmNoZWNrZWQgcGFyYW1ldGVyOiAke3NOYW1lfTogJHtzS2V5fWAsIHVuZGVmaW5lZCwgTE9HR0VSX1NDT1BFKTtcblx0XHR9XG5cdH0pO1xufVxuXG5jb25zdCBTQVBfVUlfQ09SRV9FTEVNRU5UID0gXCJzYXAudWkuY29yZS5FbGVtZW50XCI7XG5cbmV4cG9ydCBjb25zdCBTQVBfVUlfTU9ERUxfQ09OVEVYVCA9IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIjtcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBtZXRhZGF0YSBvZiBhIGJ1aWxkaW5nIGJsb2NrIGJ5IGFkZGluZyBhZGRpdGlvbmFsIGFnZ3JlZ2F0aW9ucyxcbiAqIGFuZCBzcGxpdHRpbmcgcHJvcGVydGllcyBpbnRvIGFjdHVhbCBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSBjb250ZXh0cy5cbiAqIEBwYXJhbSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEgVGhlIG1ldGFkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGlucHV0XG4gKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtTWV0YWRhdGEoYnVpbGRpbmdCbG9ja01ldGFkYXRhOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEpOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGNvbnN0IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24+ID0ge1xuXHRcdGNsYXNzOiB7XG5cdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0aXNQdWJsaWM6IHRydWVcblx0XHR9XG5cdH07XG5cdGNvbnN0IGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj4gPSB7XG5cdFx0ZGVwZW5kZW50czoge1xuXHRcdFx0dHlwZTogU0FQX1VJX0NPUkVfRUxFTUVOVCxcblx0XHRcdHNsb3Q6IFwiZGVwZW5kZW50c1wiLFxuXHRcdFx0aXNQdWJsaWM6IHRydWVcblx0XHR9LFxuXHRcdGN1c3RvbURhdGE6IHtcblx0XHRcdHR5cGU6IFNBUF9VSV9DT1JFX0VMRU1FTlQsXG5cdFx0XHRzbG90OiBcImN1c3RvbURhdGFcIixcblx0XHRcdGlzUHVibGljOiB0cnVlXG5cdFx0fSxcblx0XHRsYXlvdXREYXRhOiB7XG5cdFx0XHR0eXBlOiBTQVBfVUlfQ09SRV9FTEVNRU5ULFxuXHRcdFx0c2xvdDogXCJsYXlvdXREYXRhXCIsXG5cdFx0XHRpc1B1YmxpYzogdHJ1ZVxuXHRcdH0sXG5cdFx0Li4uYnVpbGRpbmdCbG9ja01ldGFkYXRhLmFnZ3JlZ2F0aW9uc1xuXHR9O1xuXHRjb25zdCBtZXRhZGF0YUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBPYmplY3Qua2V5cyhidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllcykpIHtcblx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdLnR5cGU7XG5cblx0XHRpZiAocHJvcGVydHlUeXBlICE9PSBTQVBfVUlfTU9ERUxfQ09OVEVYVCkge1xuXHRcdFx0cHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcblx0XHR9XG5cblx0XHRpZiAoW1NBUF9VSV9NT0RFTF9DT05URVhULCBcIm9iamVjdFwiLCBcImFycmF5XCJdLmluY2x1ZGVzKHByb3BlcnR5VHlwZSkpIHtcblx0XHRcdC8vIEV4cGxpY2l0bHkgZGVmaW5lZCBjb250ZXh0cywgb2JqZWN0cywgYW5kIGFycmF5cyBtYXkgY29tZSBmcm9tIHRoZSBtZXRhZGF0YUNvbnRleHRcblx0XHRcdG1ldGFkYXRhQ29udGV4dHNbcHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gYXMgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb247XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQuLi5idWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdFx0cHJvcGVydGllcyxcblx0XHRtZXRhZGF0YUNvbnRleHRzLFxuXHRcdGFnZ3JlZ2F0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgYWJzb2x1dGUgb3IgY29udGV4dCBwYXRocyBhbmQgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSBNZXRhQ29udGV4dC5cbiAqIEBwYXJhbSBvU2V0dGluZ3MgQWRkaXRpb25hbCBzZXR0aW5nc1xuICogQHBhcmFtIHNBdHRyaWJ1dGVWYWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlXG4gKiBAcmV0dXJucyBUaGUgbWV0YSBkYXRhIGNvbnRleHQgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIF9jaGVja0Fic29sdXRlQW5kQ29udGV4dFBhdGhzKG9TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncywgc0F0dHJpYnV0ZVZhbHVlOiBzdHJpbmcpOiBNZXRhRGF0YUNvbnRleHQge1xuXHRsZXQgc01ldGFQYXRoOiBzdHJpbmc7XG5cdGlmIChzQXR0cmlidXRlVmFsdWUgJiYgc0F0dHJpYnV0ZVZhbHVlLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0Ly8gYWJzb2x1dGUgcGF0aCAtIHdlIGp1c3QgdXNlIHRoaXMgb25lXG5cdFx0c01ldGFQYXRoID0gc0F0dHJpYnV0ZVZhbHVlO1xuXHR9IGVsc2Uge1xuXHRcdGxldCBzQ29udGV4dFBhdGggPSBvU2V0dGluZ3MuY3VycmVudENvbnRleHRQYXRoLmdldFBhdGgoKTtcblx0XHRpZiAoIXNDb250ZXh0UGF0aC5lbmRzV2l0aChcIi9cIikpIHtcblx0XHRcdHNDb250ZXh0UGF0aCArPSBcIi9cIjtcblx0XHR9XG5cdFx0c01ldGFQYXRoID0gc0NvbnRleHRQYXRoICsgc0F0dHJpYnV0ZVZhbHVlO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0bW9kZWw6IFwibWV0YU1vZGVsXCIsXG5cdFx0cGF0aDogc01ldGFQYXRoXG5cdH07XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaGVscHMgdG8gY3JlYXRlIHRoZSBtZXRhZGF0YSBjb250ZXh0IGluIGNhc2UgaXQgaXMgbm90IHlldCBhdmFpbGFibGUgaW4gdGhlIHN0b3JlLlxuICogQHBhcmFtIG9TZXR0aW5ncyBBZGRpdGlvbmFsIHNldHRpbmdzXG4gKiBAcGFyYW0gc0F0dHJpYnV0ZU5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lXG4gKiBAcGFyYW0gc0F0dHJpYnV0ZVZhbHVlIFRoZSBhdHRyaWJ1dGUgdmFsdWVcbiAqIEByZXR1cm5zIFRoZSBtZXRhIGRhdGEgY29udGV4dCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2NyZWF0ZUluaXRpYWxNZXRhZGF0YUNvbnRleHQoXG5cdG9TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0c0F0dHJpYnV0ZU5hbWU6IHN0cmluZyxcblx0c0F0dHJpYnV0ZVZhbHVlOiBzdHJpbmdcbik6IE1ldGFEYXRhQ29udGV4dCB7XG5cdGxldCByZXR1cm5Db250ZXh0OiBNZXRhRGF0YUNvbnRleHQ7XG5cdGlmIChzQXR0cmlidXRlVmFsdWUuc3RhcnRzV2l0aChcIi91aWQtLVwiKSAmJiAhb1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LmdldFByb3BlcnR5KHNBdHRyaWJ1dGVWYWx1ZSkpIHtcblx0XHRjb25zdCBkYXRhID0gdW5zdG9yZU9iamVjdFZhbHVlKHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdFx0b1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LnNldFByb3BlcnR5KHNBdHRyaWJ1dGVWYWx1ZSwgZGF0YSk7XG5cdFx0cmV0dXJuQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBcImNvbnZlcnRlckNvbnRleHRcIixcblx0XHRcdHBhdGg6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdH07XG5cdH0gZWxzZSBpZiAoKHNBdHRyaWJ1dGVOYW1lID09PSBcIm1ldGFQYXRoXCIgJiYgb1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCkgfHwgc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIikge1xuXHRcdHJldHVybkNvbnRleHQgPSBfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyhvU2V0dGluZ3MsIHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdH0gZWxzZSBpZiAoc0F0dHJpYnV0ZVZhbHVlICYmIHNBdHRyaWJ1dGVWYWx1ZS5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdC8vIGFic29sdXRlIHBhdGggLSB3ZSBqdXN0IHVzZSB0aGlzIG9uZVxuXHRcdHJldHVybkNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogXCJtZXRhTW9kZWxcIixcblx0XHRcdHBhdGg6IHNBdHRyaWJ1dGVWYWx1ZVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuQ29udGV4dCA9IHtcblx0XHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdFx0cGF0aDogb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlTZXQgPyBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmVudGl0eVNldC5nZXRQYXRoKHNBdHRyaWJ1dGVWYWx1ZSkgOiBzQXR0cmlidXRlVmFsdWVcblx0XHR9O1xuXHR9XG5cdHJldHVybiByZXR1cm5Db250ZXh0O1xufVxuXG5mdW5jdGlvbiBfZ2V0TWV0YWRhdGFDb250ZXh0KFxuXHRvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRzQXR0cmlidXRlTmFtZTogc3RyaW5nLFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0YkRvTm90UmVzb2x2ZTogYm9vbGVhbixcblx0aXNPcGVuOiBib29sZWFuXG4pOiBNZXRhRGF0YUNvbnRleHQgfCB1bmRlZmluZWQge1xuXHRsZXQgb01ldGFkYXRhQ29udGV4dDogTWV0YURhdGFDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRpZiAoIWJEb05vdFJlc29sdmUgJiYgb05vZGUuaGFzQXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKSkge1xuXHRcdGxldCBzQXR0cmlidXRlVmFsdWUgPSBvTm9kZS5nZXRBdHRyaWJ1dGUoc0F0dHJpYnV0ZU5hbWUpIGFzIHN0cmluZztcblx0XHRvTWV0YWRhdGFDb250ZXh0ID0gQmluZGluZ0luZm8ucGFyc2Uoc0F0dHJpYnV0ZVZhbHVlKTtcblx0XHRpZiAob01ldGFkYXRhQ29udGV4dCAmJiBzQXR0cmlidXRlTmFtZSA9PT0gXCJtZXRhUGF0aFwiICYmIG9NZXRhZGF0YUNvbnRleHQubW9kZWwgJiYgb01ldGFkYXRhQ29udGV4dC5wYXRoKSB7XG5cdFx0XHQvLyBpZiB0aGUgbWV0YVBhdGggaXMgZmlsbGVkIHRocm91Z2ggYSBKU09OIG1vZGVsLCB3ZSBjYW4ndCB1c2UgdGhpcyBjb250ZXh0IGFzIHRoZSBtZXRhZGF0YUNvbnRleHQsXG5cdFx0XHQvLyBidXQgaW5zdGVhZCB3ZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGUgYWN0dWFsIHZhbHVlXG5cdFx0XHRjb25zdCBtZXRhQ29udGV4dFBhdGggPSBgJHtvTWV0YWRhdGFDb250ZXh0Lm1vZGVsfT4ke29NZXRhZGF0YUNvbnRleHQucGF0aH1gO1xuXHRcdFx0Y29uc3QgY29udGV4dCA9IG9WaXNpdG9yLmdldENvbnRleHQobWV0YUNvbnRleHRQYXRoKTtcblx0XHRcdGlmIChjb250ZXh0Py5nZXRNb2RlbCgpPy5pc0EoXCJzYXAudWkubW9kZWwuanNvbi5KU09OTW9kZWxcIikpIHtcblx0XHRcdFx0c0F0dHJpYnV0ZVZhbHVlID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0b01ldGFkYXRhQ29udGV4dCA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIW9NZXRhZGF0YUNvbnRleHQpIHtcblx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSBfY3JlYXRlSW5pdGlhbE1ldGFkYXRhQ29udGV4dChvU2V0dGluZ3MsIHNBdHRyaWJ1dGVOYW1lLCBzQXR0cmlidXRlVmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmhhc093blByb3BlcnR5KHNBdHRyaWJ1dGVOYW1lKSkge1xuXHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogc0F0dHJpYnV0ZU5hbWUsXG5cdFx0XHRwYXRoOiBcIlwiXG5cdFx0fTtcblx0fSBlbHNlIGlmIChpc09wZW4pIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKG9WaXNpdG9yLmdldENvbnRleHQoYCR7c0F0dHJpYnV0ZU5hbWV9PmApKSB7XG5cdFx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSB7XG5cdFx0XHRcdFx0bW9kZWw6IHNBdHRyaWJ1dGVOYW1lLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCJcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb01ldGFkYXRhQ29udGV4dDtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgaW5jb21pbmcgWE1MIG5vZGUgYW5kIHRyeSB0byByZXNvbHZlIHRoZSBwcm9wZXJ0aWVzIGRlZmluZWQgdGhlcmUuXG4gKiBAcGFyYW0gb01ldGFkYXRhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gb05vZGUgVGhlIFhNTCBub2RlIHRvIHBhcnNlXG4gKiBAcGFyYW0gaXNQdWJsaWMgV2hldGhlciB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpbiBhIHB1YmxpYyBjb250ZXh0IG9yIG5vdFxuICogQHBhcmFtIG9WaXNpdG9yIFRoZSB2aXNpdG9yIGluc3RhbmNlXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIHByb3BlcnRpZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1Byb3BlcnRpZXMoXG5cdG9NZXRhZGF0YTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRpc1B1YmxpYzogYm9vbGVhbixcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2tcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+PiB7XG5cdGNvbnN0IGRlZmluaXRpb25Qcm9wZXJ0aWVzID0gb01ldGFkYXRhLnByb3BlcnRpZXM7XG5cblx0Ly8gUmV0cmlldmUgcHJvcGVydGllcyB2YWx1ZXNcblx0Y29uc3QgYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyA9IE9iamVjdC5rZXlzKGRlZmluaXRpb25Qcm9wZXJ0aWVzKTtcblxuXHRjb25zdCBwcm9wZXJ0eVZhbHVlczogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+ID0ge307XG5cdGZvciAoY29uc3Qgc0tleVZhbHVlIG9mIGFEZWZpbml0aW9uUHJvcGVydGllc0tleXMpIHtcblx0XHRpZiAoZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS50eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID1cblx0XHRcdFx0ZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5kZWZhdWx0VmFsdWUgJiYgZGVlcENsb25lKGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0uZGVmYXVsdFZhbHVlKTsgLy8gVG8gYXZvaWQgdmFsdWVzIGJlaW5nIHJldXNlZCBhY3Jvc3MgbWFjcm9zXG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BlcnR5VmFsdWVzW3NLZXlWYWx1ZV0gPSBkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmRlZmF1bHRWYWx1ZSBhcyBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuXHRcdH1cblxuXHRcdGlmIChvTm9kZS5oYXNBdHRyaWJ1dGUoc0tleVZhbHVlKSAmJiBpc1B1YmxpYyAmJiBkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmlzUHVibGljICE9PSB0cnVlKSB7XG5cdFx0XHRMb2cuZXJyb3IoYFByb3BlcnR5ICR7c0tleVZhbHVlfSB3YXMgaWdub3JlZCBhcyBpdCBpcyBub3QgaW50ZW5kZWQgZm9yIHB1YmxpYyB1c2FnZWApO1xuXHRcdH0gZWxzZSBpZiAob05vZGUuaGFzQXR0cmlidXRlKHNLZXlWYWx1ZSkpIHtcblx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0QXR0cmlidXRlKG9Ob2RlLCBvTm9kZS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShzS2V5VmFsdWUpIGFzIEF0dHIpO1xuXHRcdFx0bGV0IHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG9Ob2RlLmdldEF0dHJpYnV0ZShzS2V5VmFsdWUpO1xuXHRcdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0udHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogdmFsdWU7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NLZXlWYWx1ZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5VmFsdWVzO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBpbmNvbWluZyBYTUwgbm9kZSBhbmQgdHJ5IHRvIHJlc29sdmUgdGhlIGJpbmRpbmcgY29udGV4dHMgZGVmaW5lZCBpbnNpZGUuXG4gKiBAcGFyYW0gb01ldGFkYXRhIFRoZSBtZXRhZGF0YSBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gb1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvYmplY3RcbiAqIEBwYXJhbSBvTm9kZSBUaGUgWE1MIG5vZGUgdG8gcGFyc2VcbiAqIEBwYXJhbSBpc1B1YmxpYyBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGluIGEgcHVibGljIGNvbnRleHQgb3Igbm90XG4gKiBAcGFyYW0gb1Zpc2l0b3IgVGhlIHZpc2l0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSBtQ29udGV4dHMgVGhlIGNvbnRleHRzIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlcyBUaGUgY3VycmVudCBwcm9wZXJ0eSB2YWx1ZXNcbiAqIEByZXR1cm5zIFRoZSBwcm9jZXNzZWQgYW5kIG1pc3NpbmcgY29udGV4dHNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0NvbnRleHRzKFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRpc1B1YmxpYzogYm9vbGVhbixcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2ssXG5cdG1Db250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sXG5cdHByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZT5cbik6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcblx0b1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuY29udGV4dFBhdGg7XG5cdGNvbnN0IG1NaXNzaW5nQ29udGV4dDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0Y29uc3Qgb0RlZmluaXRpb25Db250ZXh0cyA9IG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzO1xuXHRjb25zdCBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cyA9IE9iamVjdC5rZXlzKG9EZWZpbml0aW9uQ29udGV4dHMpO1xuXHQvLyBTaW5jZSB0aGUgbWV0YVBhdGggYW5kIG90aGVyIHByb3BlcnR5IGNhbiBiZSByZWxhdGl2ZSB0byB0aGUgY29udGV4dFBhdGggd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgY3VycmVudCBjb250ZXh0UGF0aCBmaXJzdFxuXHRjb25zdCBjb250ZXh0UGF0aEluZGV4ID0gYURlZmluaXRpb25Db250ZXh0c0tleXMuaW5kZXhPZihcImNvbnRleHRQYXRoXCIpO1xuXHRpZiAoY29udGV4dFBhdGhJbmRleCAhPT0gLTEpIHtcblx0XHQvLyBJZiBpdCBpcyBkZWZpbmVkIHdlIGV4dHJhY3QgaXQgYW5kIHJlaW5zZXJ0IGl0IGluIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgYXJyYXlcblx0XHRjb25zdCBjb250ZXh0UGF0aERlZmluaXRpb24gPSBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cy5zcGxpY2UoY29udGV4dFBhdGhJbmRleCwgMSk7XG5cdFx0YURlZmluaXRpb25Db250ZXh0c0tleXMuc3BsaWNlKDAsIDAsIGNvbnRleHRQYXRoRGVmaW5pdGlvblswXSk7XG5cdH1cblx0Zm9yIChjb25zdCBzQXR0cmlidXRlTmFtZSBvZiBhRGVmaW5pdGlvbkNvbnRleHRzS2V5cykge1xuXHRcdC8vIElmIHRoZSBjb250ZXh0IHdhcyByZXNvbHZlZCBhcyBhIHByb3BlcnR5IChiaW5kaW5nIC8geG1sIGFnZ3JlZ2F0aW9uKSB0aGVuIHdlIGRvbid0IG5lZWQgdG8gcmVzb2x2ZSBpdCBoZXJlLlxuXHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1tzQXR0cmlidXRlTmFtZV07XG5cdFx0aWYgKHByb3BlcnR5VmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlIGFzIG9iamVjdCkubGVuZ3RoID4gMCkge1xuXHRcdFx0ZGVsZXRlIG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBiRG9Ob3RSZXNvbHZlID0gaXNQdWJsaWMgJiYgb0RlZmluaXRpb25Db250ZXh0c1tzQXR0cmlidXRlTmFtZV0uaXNQdWJsaWMgPT09IGZhbHNlICYmIG9Ob2RlLmhhc0F0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSk7XG5cdFx0Y29uc3Qgb01ldGFkYXRhQ29udGV4dCA9IF9nZXRNZXRhZGF0YUNvbnRleHQob1NldHRpbmdzLCBvTm9kZSwgc0F0dHJpYnV0ZU5hbWUsIG9WaXNpdG9yLCBiRG9Ob3RSZXNvbHZlLCBvTWV0YWRhdGEuaXNPcGVuID8/IGZhbHNlKTtcblx0XHRpZiAob01ldGFkYXRhQ29udGV4dCkge1xuXHRcdFx0b01ldGFkYXRhQ29udGV4dC5uYW1lID0gc0F0dHJpYnV0ZU5hbWU7XG5cdFx0XHRhZGRTaW5nbGVDb250ZXh0KG1Db250ZXh0cywgb1Zpc2l0b3IsIG9NZXRhZGF0YUNvbnRleHQpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoc0F0dHJpYnV0ZU5hbWUgPT09IFwiZW50aXR5U2V0XCIgfHwgc0F0dHJpYnV0ZU5hbWUgPT09IFwiY29udGV4dFBhdGhcIikgJiZcblx0XHRcdFx0IW9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuaGFzT3duUHJvcGVydHkoc0F0dHJpYnV0ZU5hbWUpXG5cdFx0XHQpIHtcblx0XHRcdFx0b1NldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzQXR0cmlidXRlTmFtZV0gPSBtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNBdHRyaWJ1dGVOYW1lID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRcdFx0b1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aCA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9XG5cdFx0XHRpZiAobUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NBdHRyaWJ1dGVOYW1lXSA9IG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlc1tzQXR0cmlidXRlTmFtZV0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIGJpbmRpbmcgY291bGRuJ3QgYmUgcmVzb2x2ZWQgY29uc2lkZXIgdGhhdCB0aGVyZSB3YXMgbm8gdmFsdWUgaGVyZVxuXHRcdFx0XHRkZWxldGUgb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtTWlzc2luZ0NvbnRleHRbc0F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1NaXNzaW5nQ29udGV4dDtcbn1cblxuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0cG9zaXRpb246IFBvc2l0aW9uO1xuXHR0eXBlOiBcIlNsb3RcIjtcbn07XG5hc3luYyBmdW5jdGlvbiBwYXJzZUFnZ3JlZ2F0aW9uKFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b0FnZ3JlZ2F0aW9uPzogRWxlbWVudCxcblx0ZGVmaW5pdGlvbj86IEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb25cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uPj4ge1xuXHRjb25zdCBvT3V0T2JqZWN0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uPiA9IHt9O1xuXHRpZiAob0FnZ3JlZ2F0aW9uICYmIG9BZ2dyZWdhdGlvbi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgZmlyc3RFbGVtZW50Q2hpbGQgPSBvQWdncmVnYXRpb24uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0aWYgKGZpcnN0RWxlbWVudENoaWxkPy5uYW1lc3BhY2VVUkkgPT09IFhNTFRFTVBMQVRJTkdfTlMpIHtcblx0XHRcdC8vIEluIGNhc2Ugd2UgZW5jb3VudGVyIGEgdGVtcGxhdGluZyB0YWcsIHJ1biB0aGUgdmlzaXRvciBvbiBpdCBhbmQgY29udGludWUgd2l0aCB0aGUgcmVzdWx0aW5nIGNoaWxkXG5cdFx0XHRjb25zdCBvUGFyZW50ID0gZmlyc3RFbGVtZW50Q2hpbGQucGFyZW50Tm9kZTtcblx0XHRcdGlmIChvUGFyZW50KSB7XG5cdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShmaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGNoaWxkcmVuID0gb0FnZ3JlZ2F0aW9uLmNoaWxkcmVuO1xuXHRcdGZvciAobGV0IGNoaWxkSWR4ID0gMDsgY2hpbGRJZHggPCBjaGlsZHJlbi5sZW5ndGg7IGNoaWxkSWR4KyspIHtcblx0XHRcdGNvbnN0IGNoaWxkRGVmaW5pdGlvbiA9IGNoaWxkcmVuW2NoaWxkSWR4XTtcblx0XHRcdGxldCBjaGlsZEtleSA9XG5cdFx0XHRcdGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJrZXlcIikgfHxcblx0XHRcdFx0Y2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImlkXCIpIHx8XG5cdFx0XHRcdChkZWZpbml0aW9uPy5za2lwS2V5ICYmIGRlZmluaXRpb24ubXVsdGlwbGUgPT09IGZhbHNlICYmIHVpZCgpKTtcblx0XHRcdGlmIChjaGlsZEtleSkge1xuXHRcdFx0XHRjaGlsZEtleSA9IGBJbmxpbmVYTUxfJHtjaGlsZEtleX1gO1xuXHRcdFx0XHRjaGlsZERlZmluaXRpb24uc2V0QXR0cmlidXRlKFwia2V5XCIsIGNoaWxkS2V5KTtcblx0XHRcdFx0bGV0IGFnZ3JlZ2F0aW9uT2JqZWN0OiBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb24gPSB7XG5cdFx0XHRcdFx0a2V5OiBjaGlsZEtleSxcblx0XHRcdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRcdFx0cGxhY2VtZW50OiAoY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcInBsYWNlbWVudFwiKSBhcyBQbGFjZW1lbnQpIHx8IFBsYWNlbWVudC5BZnRlcixcblx0XHRcdFx0XHRcdGFuY2hvcjogY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImFuY2hvclwiKSB8fCB1bmRlZmluZWRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHR5cGU6IFwiU2xvdFwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChkZWZpbml0aW9uPy5wcm9jZXNzQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25PYmplY3QgPSBkZWZpbml0aW9uLnByb2Nlc3NBZ2dyZWdhdGlvbnMoY2hpbGREZWZpbml0aW9uLCBhZ2dyZWdhdGlvbk9iamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0b091dE9iamVjdHNbYWdncmVnYXRpb25PYmplY3Qua2V5XSA9IGFnZ3JlZ2F0aW9uT2JqZWN0O1xuXHRcdFx0fSBlbHNlIGlmIChjaGlsZERlZmluaXRpb24udGFnTmFtZSAhPT0gXCJzbG90XCIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBUaGUgYWdncmVnYXRpb24gJHtjaGlsZERlZmluaXRpb24ubm9kZU5hbWV9IGlzIG1pc3NpbmcgYSBLZXkgYXR0cmlidXRlLiBJdCBpcyBub3QgZGlzcGxheWVkYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvT3V0T2JqZWN0cztcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBidWlsZGluZyBibG9jayBwcm9wZXJ0aWVzIHdoZW4gdGhlIHR5cGUgaXMgYW4gb2JqZWN0LlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIFhNTCBlbGVtZW50IHRvIHBhcnNlXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIG9iamVjdFxuICovXG5mdW5jdGlvbiBwcm9jZXNzT2JqZWN0KGVsZW1lbnQ6IEVsZW1lbnQpOiBvYmplY3Qge1xuXHRjb25zdCBjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG5cdGNvbnN0IG15QXJyYXk6IEFycmF5PHVua25vd24+ID0gW107XG5cdGNvbnN0IG15T2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgZWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XG5cdFx0bXlPYmplY3RbYXR0cmlidXRlTmFtZV0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0fVxuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNoaWxkTm9kZU5hbWVzID0gT2JqZWN0LmtleXMoY2hpbGRyZW4pLm1hcCgoa2V5KSA9PiBjaGlsZHJlbltrZXkgYXMgdW5rbm93biBhcyBudW1iZXJdLmxvY2FsTmFtZSk7XG5cdFx0Y29uc3QgY2hpbGRJc0FycmF5ID0gY2hpbGROb2RlTmFtZXMubGVuZ3RoICE9PSBuZXcgU2V0KGNoaWxkTm9kZU5hbWVzKS5zaXplO1xuXHRcdGZvciAoY29uc3QgY2hpbGREZWZpbml0aW9uIG9mIGNoaWxkcmVuIGFzIHVua25vd24gYXMgQXJyYXk8RWxlbWVudD4pIHtcblx0XHRcdGlmIChjaGlsZElzQXJyYXkpIHtcblx0XHRcdFx0bXlBcnJheS5wdXNoKHByb2Nlc3NPYmplY3QoY2hpbGREZWZpbml0aW9uKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRteU9iamVjdFtjaGlsZERlZmluaXRpb24ubG9jYWxOYW1lXSA9IHByb2Nlc3NPYmplY3QoY2hpbGREZWZpbml0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNoaWxkSXNBcnJheSkge1xuXHRcdFx0cmV0dXJuIG15QXJyYXk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBteU9iamVjdDtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBidWlsZGluZyBibG9jayBhbmQgcGFyc2VzIHRoZW0gYXMgZWl0aGVyIGFnZ3JlZ2F0aW9ucyBvciBvYmplY3QtL2FycmF5LWJhc2VkIHZhbHVlcy5cbiAqIEBwYXJhbSBvTm9kZSBUaGUgWE1MIG5vZGUgZm9yIHdoaWNoIHRvIHByb2Nlc3MgdGhlIGNoaWxkcmVuXG4gKiBAcGFyYW0gb1Zpc2l0b3IgVGhlIHZpc2l0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSBvTWV0YWRhdGEgVGhlIG1ldGFkYXRhIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBpc1B1YmxpYyBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGluIGEgcHVibGljIGNvbnRleHQgb3Igbm90XG4gKiBAcGFyYW0gcHJvcGVydHlWYWx1ZXMgVGhlIHZhbHVlcyBvZiBhbHJlYWR5IHBhcnNlZCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBjaGlsZHJlblxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRyZW4oXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b01ldGFkYXRhOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdHByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZT5cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgRWxlbWVudD4+IHtcblx0Y29uc3Qgb0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgRWxlbWVudD4gPSB7fTtcblx0aWYgKG9Ob2RlLmZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0bGV0IG9GaXJzdEVsZW1lbnRDaGlsZDogRWxlbWVudCB8IG51bGwgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZCBhcyBFbGVtZW50IHwgbnVsbDtcblxuXHRcdHdoaWxlIChvRmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHRcdGlmIChvRmlyc3RFbGVtZW50Q2hpbGQubmFtZXNwYWNlVVJJID09PSBYTUxURU1QTEFUSU5HX05TKSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugd2UgZW5jb3VudGVyIGEgdGVtcGxhdGluZyB0YWcsIHJ1biB0aGUgdmlzaXRvciBvbiBpdCBhbmQgY29udGludWUgd2l0aCB0aGUgcmVzdWx0aW5nIGNoaWxkXG5cdFx0XHRcdGNvbnN0IG9QYXJlbnQgPSBvRmlyc3RFbGVtZW50Q2hpbGQucGFyZW50Tm9kZTtcblx0XHRcdFx0aWYgKG9QYXJlbnQpIHtcblx0XHRcdFx0XHRjb25zdCBpQ2hpbGRJbmRleCA9IEFycmF5LmZyb20ob1BhcmVudC5jaGlsZHJlbikuaW5kZXhPZihvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdID8gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF0gOiBudWxsO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE5vdCBzdXJlIGhvdyB0aGlzIGNvdWxkIGhhcHBlbiBidXQgSSBhbHNvIGRvbid0IHdhbnQgdG8gY3JlYXRlIGluZmluaXRlIGxvb3BzXG5cdFx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc0NoaWxkTmFtZSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRcdGxldCBzQWdncmVnYXRpb25OYW1lID0gc0NoaWxkTmFtZTtcblx0XHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWVbMF0udG9VcHBlckNhc2UoKSA9PT0gc0FnZ3JlZ2F0aW9uTmFtZVswXSkge1xuXHRcdFx0XHRcdC8vIG5vdCBhIHN1YiBhZ2dyZWdhdGlvbiwgZ28gYmFjayB0byBkZWZhdWx0IEFnZ3JlZ2F0aW9uXG5cdFx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZSA9IG9NZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gfHwgXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZmluaXRpb24gPSBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uICE9PSB1bmRlZmluZWQgJiYgIWFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5zbG90KSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyc2VkQWdncmVnYXRpb24gPSBhd2FpdCBwYXJzZUFnZ3JlZ2F0aW9uKG9WaXNpdG9yLCBvRmlyc3RFbGVtZW50Q2hpbGQsIGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBwYXJzZWRBZ2dyZWdhdGlvbjtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcnNlZEFnZ3JlZ2F0aW9uS2V5IGluIHBhcnNlZEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRvTWV0YWRhdGEuYWdncmVnYXRpb25zW3BhcnNlZEFnZ3JlZ2F0aW9uS2V5XSA9IHBhcnNlZEFnZ3JlZ2F0aW9uW3BhcnNlZEFnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvRmlyc3RFbGVtZW50Q2hpbGQgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHR3aGlsZSAob0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBvTmV4dENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHRjb25zdCBzQ2hpbGROYW1lID0gb0ZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZTtcblx0XHRcdGxldCBzQWdncmVnYXRpb25OYW1lID0gc0NoaWxkTmFtZTtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lWzBdLnRvVXBwZXJDYXNlKCkgPT09IHNBZ2dyZWdhdGlvbk5hbWVbMF0pIHtcblx0XHRcdFx0Ly8gbm90IGEgc3ViIGFnZ3JlZ2F0aW9uLCBnbyBiYWNrIHRvIGRlZmF1bHQgQWdncmVnYXRpb25cblx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZSA9IG9NZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0T2JqZWN0LmtleXMob01ldGFkYXRhLmFnZ3JlZ2F0aW9ucykuaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkgJiZcblx0XHRcdFx0KCFpc1B1YmxpYyB8fCBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLmlzUHVibGljID09PSB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHRcdGlmICghYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QgJiYgb0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsICYmIG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0bGV0IGNoaWxkRGVmaW5pdGlvbiA9IG9GaXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0XHR3aGlsZSAoY2hpbGREZWZpbml0aW9uKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXh0Q2hpbGQgPSBjaGlsZERlZmluaXRpb24ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkRlZmluaXRpb24uaGFzVmlydHVhbE5vZGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG9Ob2RlLm5hbWVzcGFjZVVSSSwgY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImtleVwiKSEpO1xuXHRcdFx0XHRcdFx0XHRjaGlsZFdyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGREZWZpbml0aW9uKTtcblx0XHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIV0gPSBjaGlsZFdyYXBwZXI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW2NoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJrZXlcIikhXSA9IGNoaWxkRGVmaW5pdGlvbjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y2hpbGREZWZpbml0aW9uLnJlbW92ZUF0dHJpYnV0ZShcImtleVwiKTtcblx0XHRcdFx0XHRcdGNoaWxkRGVmaW5pdGlvbiA9IG5leHRDaGlsZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QpIHtcblx0XHRcdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdE5vZGUob0ZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSAhPT0gc0NoaWxkTmFtZSkge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvTm9kZS5uYW1lc3BhY2VVUkksIHNBZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdID0gb05ld0NoaWxkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5hcHBlbmRDaGlsZChvRmlyc3RFbGVtZW50Q2hpbGQuY2xvbmVOb2RlKHRydWUpIGFzIEVsZW1lbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdID0gb0ZpcnN0RWxlbWVudENoaWxkLmNsb25lTm9kZSh0cnVlKSBhcyBFbGVtZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhvTWV0YWRhdGEucHJvcGVydGllcykuaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdGlmIChvTWV0YWRhdGEucHJvcGVydGllc1tzQWdncmVnYXRpb25OYW1lXS50eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Qcm9wZXJ0eVZhbHVlcyA9IHByb2Nlc3NPYmplY3Qob0ZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzQWdncmVnYXRpb25OYW1lXSA9IGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXM7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01ldGFkYXRhLnByb3BlcnRpZXNbc0FnZ3JlZ2F0aW9uTmFtZV0udHlwZSA9PT0gXCJhcnJheVwiKSB7XG5cdFx0XHRcdFx0aWYgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCAmJiBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW47XG5cdFx0XHRcdFx0XHRjb25zdCBvT3V0T2JqZWN0czogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPltdID0gW107XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgY2hpbGRyZW4ubGVuZ3RoOyBjaGlsZElkeCsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoaWxkRGVmaW5pdGlvbiA9IGNoaWxkcmVuW2NoaWxkSWR4XTtcblx0XHRcdFx0XHRcdFx0Ly8gbm9uIGtleWVkIGNoaWxkLCBqdXN0IGFkZCBpdCB0byB0aGUgYWdncmVnYXRpb25cblx0XHRcdFx0XHRcdFx0Y29uc3QgbXlDaGlsZDogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPiA9IHt9O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgYXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRteUNoaWxkW2F0dHJpYnV0ZU5hbWVdID0gY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvT3V0T2JqZWN0cy5wdXNoKG15Q2hpbGQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBvT3V0T2JqZWN0cztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb05leHRDaGlsZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9BZ2dyZWdhdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTbG90cyhcblx0b0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgRWxlbWVudD4sXG5cdG9NZXRhZGF0YUFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj4sXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRwcm9jZXNzQ3VzdG9tRGF0YSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0aWYgKE9iamVjdC5rZXlzKG9BZ2dyZWdhdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRPYmplY3Qua2V5cyhvQWdncmVnYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IG9BZ2dyZWdhdGlvbkVsZW1lbnQgPSBvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0aWYgKG9Ob2RlICE9PSBudWxsICYmIG9Ob2RlICE9PSB1bmRlZmluZWQgJiYgb0FnZ3JlZ2F0aW9uRWxlbWVudCkge1xuXHRcdFx0XHQvLyBzbG90cyBjYW4gaGF2ZSA6OiBhcyBrZXlzIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGFnZ3JlZ2F0aW9uIG5hbWUgdGhlcmVmb3JlIHJlcGxhY2luZyB0aGVtXG5cdFx0XHRcdGNvbnN0IG9FbGVtZW50Q2hpbGQgPSBvQWdncmVnYXRpb25FbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRpZiAoIVtcImRlcGVuZGVudHNcIiwgXCJjdXN0b21EYXRhXCIsIFwibGF5b3V0RGF0YVwiXS5pbmNsdWRlcyhzQWdncmVnYXRpb25OYW1lKSkge1xuXHRcdFx0XHRcdGNvbnN0IHNTbG90TmFtZSA9XG5cdFx0XHRcdFx0XHQob01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQgJiYgb01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLnNsb3QpIHx8XG5cdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRFbGVtZW50ID0gb05vZGUucXVlcnlTZWxlY3Rvcihgc2xvdFtuYW1lPScke3NTbG90TmFtZX0nXWApO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0RWxlbWVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb05ld0NoaWxkID0gcHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudChvTm9kZSwgc0FnZ3JlZ2F0aW9uTmFtZSwgb0VsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0XHRvVGFyZ2V0RWxlbWVudC5yZXBsYWNlV2l0aCguLi4ob05ld0NoaWxkLmNoaWxkcmVuIGFzIHVua25vd24gYXMgTm9kZVtdKSk7IC8vIFNvbWVob3cgVFMgZG9lc24ndCBsaWtlIHRoaXMgYnV0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXMgc2hvdWxkIHdvcmtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvY2Vzc0N1c3RvbURhdGEgJiYgb0VsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbnN0IHNTbG90TmFtZSA9XG5cdFx0XHRcdFx0XHQob01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQgJiYgb01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLnNsb3QpIHx8XG5cdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRFbGVtZW50ID0gb05vZGUucXVlcnlTZWxlY3Rvcihgc2xvdFtuYW1lPScke3NTbG90TmFtZX0nXWApO1xuXHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IHByZXBhcmVBZ2dyZWdhdGlvbkVsZW1lbnQob05vZGUsIHNBZ2dyZWdhdGlvbk5hbWUsIG9FbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0RWxlbWVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0b1RhcmdldEVsZW1lbnQucmVwbGFjZVdpdGgoLi4uKG9OZXdDaGlsZC5jaGlsZHJlbiBhcyB1bmtub3duIGFzIE5vZGVbXSkpOyAvLyBTb21laG93IFRTIGRvZXNuJ3QgbGlrZSB0aGlzIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlzIHNob3VsZCB3b3JrXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9Ob2RlLmFwcGVuZENoaWxkKG9OZXdDaGlsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudChvTm9kZTogRWxlbWVudCwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLCBvRWxlbWVudENoaWxkOiBFbGVtZW50IHwgbnVsbCk6IEVsZW1lbnQge1xuXHRjb25zdCBvTmV3Q2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMob05vZGUubmFtZXNwYWNlVVJJLCBzQWdncmVnYXRpb25OYW1lLnJlcGxhY2UoLzovZ2ksIFwiX1wiKSk7XG5cdHdoaWxlIChvRWxlbWVudENoaWxkKSB7XG5cdFx0Y29uc3Qgb05leHRDaGlsZCA9IG9FbGVtZW50Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdG9OZXdDaGlsZC5hcHBlbmRDaGlsZChvRWxlbWVudENoaWxkKTtcblx0XHRvRWxlbWVudENoaWxkID0gb05leHRDaGlsZDtcblx0fVxuXHRyZXR1cm4gb05ld0NoaWxkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQnVpbGRpbmdCbG9jayhcblx0QnVpbGRpbmdCbG9ja0NsYXNzOiB0eXBlb2YgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlLFxuXHRvTm9kZTogRWxlbWVudCxcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2ssXG5cdGlzUHVibGljID0gZmFsc2Vcbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBvTWV0YWRhdGEgPSB0cmFuc2Zvcm1NZXRhZGF0YShCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEpO1xuXG5cdGNvbnN0IHNGcmFnbWVudE5hbWUgPSBvTWV0YWRhdGEuZnJhZ21lbnQgPz8gYCR7b01ldGFkYXRhLm5hbWVzcGFjZSA/PyBvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlfS4ke29NZXRhZGF0YS54bWxUYWcgPz8gb01ldGFkYXRhLm5hbWV9YDtcblxuXHRjb25zdCBtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+ID0ge307XG5cdGNvbnN0IG9TZXR0aW5ncyA9IG9WaXNpdG9yLmdldFNldHRpbmdzKCk7XG5cblx0Ly8gQWRkIGFuIGVtcHR5IGNvbnZlcnRlciBjb250ZXh0IGlmIHRoZXJlIGlzIG5vbmUgaW4gb3JkZXIgdG8gaGF2ZSBhIHBsYWNlIHRvIHN0b3JlIG9iamVjdCB2YWx1ZXNcblx0b1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0ID8/PSBuZXcgSlNPTk1vZGVsKCk7XG5cblx0Ly9JbmplY3Qgc3RvcmFnZSBmb3IgbWFjcm9zXG5cdGlmICghb1NldHRpbmdzW3NGcmFnbWVudE5hbWVdKSB7XG5cdFx0b1NldHRpbmdzW3NGcmFnbWVudE5hbWVdID0ge307XG5cdH1cblxuXHQvLyBGaXJzdCBvZiBhbGwgd2UgbmVlZCB0byB2aXNpdCB0aGUgYXR0cmlidXRlcyB0byByZXNvbHZlIHRoZSBwcm9wZXJ0aWVzIGFuZCB0aGUgbWV0YWRhdGEgY29udGV4dHNcblx0Y29uc3QgcHJvcGVydHlWYWx1ZXMgPSBhd2FpdCBwcm9jZXNzUHJvcGVydGllcyhvTWV0YWRhdGEsIG9Ob2RlLCBpc1B1YmxpYywgb1Zpc2l0b3IpO1xuXHRjb25zdCBpbml0aWFsS2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWVzKTtcblx0Y29uc3QgbU1pc3NpbmdDb250ZXh0ID0gcHJvY2Vzc0NvbnRleHRzKG9NZXRhZGF0YSwgb1NldHRpbmdzLCBvTm9kZSwgaXNQdWJsaWMsIG9WaXNpdG9yLCBtQ29udGV4dHMsIHByb3BlcnR5VmFsdWVzKTtcblxuXHR0cnkge1xuXHRcdC8vIEFnZ3JlZ2F0aW9uIGFuZCBjb21wbGV4IHR5cGUgc3VwcG9ydFxuXHRcdGNvbnN0IG9BZ2dyZWdhdGlvbnMgPSBhd2FpdCBwcm9jZXNzQ2hpbGRyZW4ob05vZGUsIG9WaXNpdG9yLCBvTWV0YWRhdGEsIGlzUHVibGljLCBwcm9wZXJ0eVZhbHVlcyk7XG5cdFx0bGV0IG9Db250cm9sQ29uZmlnID0ge307XG5cblx0XHRpZiAob1NldHRpbmdzLm1vZGVscy52aWV3RGF0YSkge1xuXHRcdFx0Ly8gT25seSB1c2VkIGluIHRoZSBGaWVsZCBtYWNybyBhbmQgZXZlbiB0aGVuIG1heWJlIG5vdCByZWFsbHkgdXNlZnVsXG5cdFx0XHRvQ29udHJvbENvbmZpZyA9IG9TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEuZ2V0UHJvcGVydHkoXCIvY29udHJvbENvbmZpZ3VyYXRpb25cIik7XG5cdFx0fVxuXHRcdGxldCBwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXG5cdFx0T2JqZWN0LmtleXMocHJvcGVydHlWYWx1ZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG5cdFx0XHRsZXQgb0RhdGEgPSBwcm9wZXJ0eVZhbHVlc1twcm9wTmFtZV0gYXMgdW5rbm93biBhcyBDb250ZXh0O1xuXHRcdFx0Ly9jaGVjayBmb3IgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIC8gb3ZlcndyaXRlIHBhcmFtZXRlcnNcblx0XHRcdGNvbnN0IG9yaWdpbmFsRGVmaW5pdGlvbiA9IEJ1aWxkaW5nQmxvY2tDbGFzcz8ubWV0YWRhdGE/LnByb3BlcnRpZXNbcHJvcE5hbWVdO1xuXHRcdFx0aWYgKG9yaWdpbmFsRGVmaW5pdGlvbj8udmFsaWRhdGUpIHtcblx0XHRcdFx0b0RhdGEgPSBvcmlnaW5hbERlZmluaXRpb24udmFsaWRhdGUob0RhdGEpIHx8IG9EYXRhO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9EYXRhPy5pc0E/LihTQVBfVUlfTU9ERUxfQ09OVEVYVCkgJiYgIW9EYXRhLmdldE1vZGVsKCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpKSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzW3Byb3BOYW1lXSA9IG9EYXRhLmdldE9iamVjdCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHByb3BlcnR5VmFsdWVzLmlzUHVibGljID0gaXNQdWJsaWM7XG5cblx0XHRjb25zdCBvSW5zdGFuY2UgPSBuZXcgQnVpbGRpbmdCbG9ja0NsYXNzKHsgLi4ucHJvcGVydHlWYWx1ZXMsIC4uLm9BZ2dyZWdhdGlvbnMgfSwgb0NvbnRyb2xDb25maWcsIG9TZXR0aW5ncyk7XG5cdFx0cHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMgPSBvSW5zdGFuY2UuZ2V0UHJvcGVydGllcygpO1xuXHRcdE9iamVjdC5rZXlzKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzQ29udGV4dE5hbWU6IHN0cmluZykge1xuXHRcdFx0aWYgKHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzLmhhc093blByb3BlcnR5KHNDb250ZXh0TmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXNbc0NvbnRleHROYW1lXTtcblx0XHRcdFx0aWYgKGlzQ29udGV4dCh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRcdFx0bUNvbnRleHRzW3NDb250ZXh0TmFtZV0gPSB0YXJnZXRPYmplY3QgYXMgQ29udGV4dDtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgdGFyZ2V0T2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlVmFsdWUgPSBzdG9yZU9iamVjdFZhbHVlKHRhcmdldE9iamVjdCk7XG5cdFx0XHRcdFx0b1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LnNldFByb3BlcnR5KGF0dHJpYnV0ZVZhbHVlLCB0YXJnZXRPYmplY3QpO1xuXHRcdFx0XHRcdGNvbnN0IG5ld0NvbnRleHQgPSBvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuY3JlYXRlQmluZGluZ0NvbnRleHQoYXR0cmlidXRlVmFsdWUpITtcblx0XHRcdFx0XHR1bnN0b3JlT2JqZWN0VmFsdWUoYXR0cmlidXRlVmFsdWUpO1xuXHRcdFx0XHRcdG1Db250ZXh0c1tzQ29udGV4dE5hbWVdID0gbmV3Q29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb0F0dHJpYnV0ZXNNb2RlbDogSlNPTk1vZGVsID0gbmV3IEF0dHJpYnV0ZU1vZGVsKG9Ob2RlLCBwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcywgQnVpbGRpbmdCbG9ja0NsYXNzKTtcblx0XHRtQ29udGV4dHNbXCJ0aGlzXCJdID0gb0F0dHJpYnV0ZXNNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdFx0bGV0IG9QcmV2aW91c01hY3JvSW5mbzogTWFjcm9JbmZvIHwgdW5kZWZpbmVkO1xuXHRcdC8vIGNvcmU6cmVxdWlyZSBuZWVkIHRvIGJlIGRlZmluZWQgb24gdGhlIG5vZGUgaXRzZWxmIHRvIGJlIHBpY2tlZCB1cCBkdWUgdG8gdGhlIHRlbXBsYXRpbmcgc3RlcFxuXHRcdGNvbnN0IGNvcmVSZXF1aXJlID0gb05vZGU/LmdldEF0dHJpYnV0ZShcImNvcmU6cmVxdWlyZVwiKSB8fCB1bmRlZmluZWQ7XG5cblx0XHQvLyBLZWVwIHRyYWNrXG5cdFx0aWYgKFRyYWNlSW5mby5pc1RyYWNlSW5mb0FjdGl2ZSgpKSB7XG5cdFx0XHRjb25zdCBvVHJhY2VJbmZvID0gVHJhY2VJbmZvLnRyYWNlTWFjcm9DYWxscyhzRnJhZ21lbnROYW1lLCBvTWV0YWRhdGEsIG1Db250ZXh0cywgb05vZGUsIG9WaXNpdG9yKTtcblx0XHRcdGlmIChvVHJhY2VJbmZvPy5tYWNyb0luZm8pIHtcblx0XHRcdFx0b1ByZXZpb3VzTWFjcm9JbmZvID0gb1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXTtcblx0XHRcdFx0b1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXSA9IG9UcmFjZUluZm8ubWFjcm9JbmZvO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR2YWxpZGF0ZU1hY3JvU2lnbmF0dXJlKHNGcmFnbWVudE5hbWUsIG9NZXRhZGF0YSwgbUNvbnRleHRzLCBvTm9kZSk7XG5cblx0XHRjb25zdCBvQ29udGV4dFZpc2l0b3IgPSBvVmlzaXRvci53aXRoKG1Db250ZXh0cywgb01ldGFkYXRhLmlzT3BlbiAhPT0gdW5kZWZpbmVkID8gIW9NZXRhZGF0YS5pc09wZW4gOiB0cnVlKTtcblx0XHRjb25zdCBvUGFyZW50ID0gb05vZGUucGFyZW50Tm9kZTtcblxuXHRcdGxldCBpQ2hpbGRJbmRleDogbnVtYmVyO1xuXHRcdGxldCBvUHJvbWlzZTtcblx0XHRpZiAob1BhcmVudCkge1xuXHRcdFx0aUNoaWxkSW5kZXggPSBBcnJheS5mcm9tKG9QYXJlbnQuY2hpbGRyZW4pLmluZGV4T2Yob05vZGUpO1xuXG5cdFx0XHRpZiAob01ldGFkYXRhLmZyYWdtZW50KSB7XG5cdFx0XHRcdG9Qcm9taXNlID0gb0NvbnRleHRWaXNpdG9yLmluc2VydEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9Ob2RlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9sZEtleXMgPSBPYmplY3Qua2V5cyh0ZW1wb3JhcnlPYmplY3RTdG9yZSk7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlU3RyaW5nID0gYXdhaXQganN4LnJlbmRlckFzWE1MKGFzeW5jICgpID0+IG9JbnN0YW5jZS5nZXRUZW1wbGF0ZSEob05vZGUpKTtcblxuXHRcdFx0XHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLmlzUnVudGltZSkge1xuXHRcdFx0XHRcdC8vIEZvciBydW50aW1lIGJ1aWxkaW5nIGJsb2Nrcywgd2UgbmVlZCB0byBhdHRhY2ggYWxsIG9iamVjdHMgdG8gdGhlIGNvbnZlcnRlckNvbnRleHQgZGlyZWN0bHksIGFzIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRha2VzIHBsYWNlIGF0IHJ1bnRpbWVcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHN0b3JlS2V5IGluIHRlbXBvcmFyeU9iamVjdFN0b3JlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW9sZEtleXMuaW5jbHVkZXMoc3RvcmVLZXkpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB1bnN0b3JlT2JqZWN0VmFsdWUoc3RvcmVLZXkpO1xuXHRcdFx0XHRcdFx0XHRvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuc2V0UHJvcGVydHkoc3RvcmVLZXksIGRhdGEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBoYXNFcnJvciA9IFwiXCI7XG5cdFx0XHRcdGlmICh0ZW1wbGF0ZVN0cmluZykge1xuXHRcdFx0XHRcdGxldCBoYXNQYXJzZUVycm9yID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV0IHBhcnNlZFRlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcodGVtcGxhdGVTdHJpbmcsIHRydWUpO1xuXHRcdFx0XHRcdC8vIEZvciBzYWZldHkgcHVycG9zZSB3ZSB0cnkgdG8gZGV0ZWN0IHRyYWlsaW5nIHRleHQgaW4gYmV0d2VlbiBYTUwgVGFnc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJzZWRUZW1wbGF0ZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG5cdFx0XHRcdFx0XHRsZXQgdGV4dG5vZGUgPSBpdGVyLm5leHROb2RlKCk7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09IFwicGFyc2VyZXJyb3JcIikge1xuXHRcdFx0XHRcdFx0XHRoYXNQYXJzZUVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHdoaWxlICh0ZXh0bm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGV4dG5vZGUudGV4dENvbnRlbnQgJiYgdGV4dG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFcnJvciA9IHRleHRub2RlLnRleHRDb250ZW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRleHRub2RlID0gaXRlci5uZXh0Tm9kZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChoYXNQYXJzZUVycm9yKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIHBhcnNlZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgWE1MIGl0IG1lYW5zIHRoZSBYTUwgaXRzZWxmIGlzIG1hbGZvcm1lZCwgYXMgc3VjaCB3ZSByZXJ1biB0aGUgdGVtcGxhdGUgcHJvY2Vzc1xuXHRcdFx0XHRcdFx0Ly8gU2V0dGluZyBpc1RyYWNlTW9kZSB0cnVlIHdpbGwgbWFrZSBpdCBzbyB0aGF0IGVhY2ggeG1sYCBleHByZXNzaW9uIGlzIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGZyb20gWE1MIHBlcnNwZWN0aXZlXG5cdFx0XHRcdFx0XHQvLyBJZiBhbiBlcnJvciBpcyBmb3VuZCBpdCdzIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBmcmFnbWVudFxuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7b01ldGFkYXRhLnhtbFRhZyB8fCBvTWV0YWRhdGEubmFtZX1gLCBoYXNFcnJvcik7XG5cdFx0XHRcdFx0XHRwYXJzZWRUZW1wbGF0ZSA9IChhd2FpdCBwcm9jZXNzWG1sSW5UcmFjZShhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGluaXRpYWxUZW1wbGF0ZSA9IGF3YWl0IGpzeC5yZW5kZXJBc1hNTChhc3luYyAoKSA9PiBvSW5zdGFuY2UuZ2V0VGVtcGxhdGUhKG9Ob2RlKSk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhcnNlWE1MU3RyaW5nKGluaXRpYWxUZW1wbGF0ZSA/PyBcIlwiLCB0cnVlKTtcblx0XHRcdFx0XHRcdH0pKSBhcyBFbGVtZW50W107XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChoYXNFcnJvci5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyB0cmFpbGluZyB0ZXh0IHdlIGNyZWF0ZSBhIHN0YW5kYXJkIGVycm9yIGFuZCBkaXNwbGF5IGl0LlxuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7b01ldGFkYXRhLnhtbFRhZyB8fCBvTWV0YWRhdGEubmFtZX1gKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9FcnJvclRleHQgPSBjcmVhdGVFcnJvclhNTChcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7b01ldGFkYXRhLnhtbFRhZyB8fCBvTWV0YWRhdGEubmFtZX1gLFxuXHRcdFx0XHRcdFx0XHRcdGBUcmFpbGluZyB0ZXh0IHdhcyBmb3VuZCBpbiB0aGUgWE1MOiAke2hhc0Vycm9yfWBcblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0cGFyc2VkVGVtcGxhdGUubWFwKCh0ZW1wbGF0ZSkgPT4gdGVtcGxhdGUub3V0ZXJIVE1MKS5qb2luKFwiXFxuXCIpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cGFyc2VkVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyhvRXJyb3JUZXh0LCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b05vZGUucmVwbGFjZVdpdGgoLi4ucGFyc2VkVGVtcGxhdGUpO1xuXG5cdFx0XHRcdFx0Y29uc3QgdmlzaXRlZE5vZGVzID0gcGFyc2VkVGVtcGxhdGUubWFwKGFzeW5jIChpbnRlcm5hbE5vZGUpID0+IHtcblx0XHRcdFx0XHRcdHByb2Nlc3NTbG90cyhvQWdncmVnYXRpb25zLCBvTWV0YWRhdGEuYWdncmVnYXRpb25zLCBpbnRlcm5hbE5vZGUsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dFZpc2l0b3IudmlzaXROb2RlKGludGVybmFsTm9kZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b1Byb21pc2UgPSBQcm9taXNlLmFsbCh2aXNpdGVkTm9kZXMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Ob2RlLnJlbW92ZSgpO1xuXHRcdFx0XHRcdG9Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgb1Byb21pc2U7XG5cdFx0XHRjb25zdCBvTWFjcm9FbGVtZW50ID0gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF07XG5cdFx0XHRwcm9jZXNzU2xvdHMob0FnZ3JlZ2F0aW9ucywgb01ldGFkYXRhLmFnZ3JlZ2F0aW9ucywgb01hY3JvRWxlbWVudCwgdHJ1ZSk7XG5cdFx0XHRpZiAob01hY3JvRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IG9SZW1haW5pbmdTbG90cyA9IG9NYWNyb0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdFx0XHRcdG9SZW1haW5pbmdTbG90cy5mb3JFYWNoKGZ1bmN0aW9uIChvU2xvdEVsZW1lbnQpIHtcblx0XHRcdFx0XHRvU2xvdEVsZW1lbnQucmVtb3ZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoY29yZVJlcXVpcmUpIHtcblx0XHRcdFx0XHRsZXQgcmVxdWlyZU9uTWFjcm8gPSBvTWFjcm9FbGVtZW50LmdldEF0dHJpYnV0ZU5TKFwic2FwLnVpLmNvcmVcIiwgXCJyZXF1aXJlXCIpO1xuXHRcdFx0XHRcdGlmIChyZXF1aXJlT25NYWNybykge1xuXHRcdFx0XHRcdFx0cmVxdWlyZU9uTWFjcm8gPSByZXF1aXJlT25NYWNyby5zdWJzdHJpbmcoMCwgcmVxdWlyZU9uTWFjcm8ubGVuZ3RoIC0gMSkgKyBcIixcIiArIGNvcmVSZXF1aXJlLnN1YnN0cmluZygxKTsgLy8gUmVtb3ZlIGxhc3QgfSBhbmQgZmlyc3Qge1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlT25NYWNybyA9IGNvcmVSZXF1aXJlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvTWFjcm9FbGVtZW50LnNldEF0dHJpYnV0ZU5TKFwic2FwLnVpLmNvcmVcIiwgXCJjb3JlOnJlcXVpcmVcIiwgcmVxdWlyZU9uTWFjcm8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm9wZXJ0eVZhbHVlcy5jbGFzcyAmJiAhQnVpbGRpbmdCbG9ja0NsYXNzLmlzUnVudGltZSkge1xuXHRcdFx0XHRcdG9NYWNyb0VsZW1lbnQuY2xhc3NMaXN0LmFkZChwcm9wZXJ0eVZhbHVlcy5jbGFzcyBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChvUHJldmlvdXNNYWNyb0luZm8pIHtcblx0XHRcdC8vcmVzdG9yZSBtYWNybyBpbmZvIGlmIGF2YWlsYWJsZVxuXHRcdFx0b1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXSA9IG9QcmV2aW91c01hY3JvSW5mbztcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZXRlIG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl07XG5cdFx0fVxuXHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBhIGdlbmVyaWMgZXJyb3IgKHVzdWFsbHkgY29kZSBlcnJvciksIHdlIHJldHJpZXZlIHRoZSBjdXJyZW50IGNvbnRleHQgaW5mb3JtYXRpb24gYW5kIGNyZWF0ZSBhIGRlZGljYXRlZCBlcnJvciBtZXNzYWdlXG5cblx0XHRjb25zdCB0cmFjZURldGFpbHMgPSB7XG5cdFx0XHRpbml0aWFsUHJvcGVydGllczoge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRyZXNvbHZlZFByb3BlcnRpZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0bWlzc2luZ0NvbnRleHRzOiBtTWlzc2luZ0NvbnRleHRcblx0XHR9O1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIGluaXRpYWxLZXlzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0dHJhY2VEZXRhaWxzLmluaXRpYWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0cGF0aDogcHJvcGVydHlWYWx1ZS5nZXRQYXRoKCksXG5cdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5VmFsdWUuZ2V0T2JqZWN0KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyYWNlRGV0YWlscy5pbml0aWFsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydHlWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKCFpbml0aWFsS2V5cy5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRwYXRoOiBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLmdldE9iamVjdCgpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0Y29uc3Qgb0Vycm9yID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRbYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtvTWV0YWRhdGEubmFtZX1gXSxcblx0XHRcdG9Ob2RlLm91dGVySFRNTCxcblx0XHRcdHRyYWNlRGV0YWlscyxcblx0XHRcdChlIGFzIEVycm9yKS5zdGFja1xuXHRcdCk7XG5cdFx0Y29uc3Qgb1RlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yLCB0cnVlKTtcblx0XHRvTm9kZS5yZXBsYWNlV2l0aCguLi5vVGVtcGxhdGUpO1xuXHR9XG59XG5mdW5jdGlvbiBhZGRTaW5nbGVDb250ZXh0KFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQgfCB1bmRlZmluZWQ+LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b0N0eDoge1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsPzogc3RyaW5nO1xuXHR9XG4pOiB2b2lkIHtcblx0Y29uc3Qgc0tleSA9IChvQ3R4Lm5hbWUgfHwgb0N0eC5tb2RlbCB8fCB1bmRlZmluZWQpIGFzIHN0cmluZztcblx0aWYgKG1Db250ZXh0c1tzS2V5XSkge1xuXHRcdHJldHVybjsgLy8gZG8gbm90IGFkZCB0d2ljZVxuXHR9XG5cdHRyeSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9DdHgucGF0aDtcblx0XHRpZiAob0N0eC5tb2RlbCAhPT0gbnVsbCkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gYCR7b0N0eC5tb2RlbH0+JHtzQ29udGV4dFBhdGh9YDtcblx0XHR9XG5cdFx0Y29uc3QgbVNldHRpbmcgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXHRcdGlmIChvQ3R4Lm1vZGVsID09PSBcImNvbnZlcnRlckNvbnRleHRcIiAmJiBvQ3R4LnBhdGgubGVuZ3RoID4gMCkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWxdLmdldENvbnRleHQob0N0eC5wYXRoIC8qLCBtU2V0dGluZy5iaW5kaW5nQ29udGV4dHNbb0N0eC5tb2RlbF0qLyk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSBpZiAoIW1TZXR0aW5nLmJpbmRpbmdDb250ZXh0c1tvQ3R4Lm1vZGVsIV0gJiYgbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXSkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXS5nZXRDb250ZXh0KG9DdHgucGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtQ29udGV4dHNbc0tleV0gPSBvVmlzaXRvci5nZXRDb250ZXh0KHNDb250ZXh0UGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH1cblx0fSBjYXRjaCAoZXgpIHtcblx0XHQvLyBpZ25vcmUgdGhlIGNvbnRleHQgYXMgdGhpcyBjYW4gb25seSBiZSB0aGUgY2FzZSBpZiB0aGUgbW9kZWwgaXMgbm90IHJlYWR5LFxuXHRcdC8vIGkuZS4gbm90IGEgcHJlcHJvY2Vzc2luZyBtb2RlbCBidXQgbWF5YmUgYSBtb2RlbCBmb3IgcHJvdmlkaW5nIGFmdGVyd2FyZHNcblx0fVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqIEBwYXJhbSBCdWlsZGluZ0Jsb2NrQ2xhc3MgVGhlIGJ1aWxkaW5nIGJsb2NrIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3M6IHR5cGVvZiBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UpOiB2b2lkIHtcblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciwgdHJ1ZSksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBVblJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlciB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqIEBwYXJhbSBCdWlsZGluZ0Jsb2NrQ2xhc3MgVGhlIGJ1aWxkaW5nIGJsb2NrIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJCdWlsZGluZ0Jsb2NrKEJ1aWxkaW5nQmxvY2tDbGFzczogdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSk6IHZvaWQge1xuXHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihcblx0XHRcdG51bGwsXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRudWxsLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnB1YmxpY05hbWVzcGFjZSxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS54bWxUYWcgfHwgQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yWE1MKGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdLCB4bWxGcmFnbWVudDogc3RyaW5nLCBhZGRpdGlvbmFsRGF0YT86IG9iamVjdCwgc3RhY2s/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBlcnJvckxhYmVscyA9IGVycm9yTWVzc2FnZXMubWFwKChlcnJvck1lc3NhZ2UpID0+IHhtbGA8bTpMYWJlbCB0ZXh0PVwiJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShlcnJvck1lc3NhZ2UpfVwiLz5gKTtcblx0bGV0IGVycm9yU3RhY2sgPSBcIlwiO1xuXHRpZiAoc3RhY2spIHtcblx0XHRjb25zdCBzdGFja0Zvcm1hdHRlZCA9IGJ0b2EoYDxwcmU+JHtzdGFja308L3ByZT5gKTtcblx0XHRlcnJvclN0YWNrID0geG1sYDxtOkZvcm1hdHRlZFRleHQgaHRtbFRleHQ9XCJ7PSBCQkYuYmFzZTY0RGVjb2RlKCcke3N0YWNrRm9ybWF0dGVkfScpIH1cIiAvPmA7XG5cdH1cblx0bGV0IGFkZGl0aW9uYWxUZXh0ID0gXCJcIjtcblx0aWYgKGFkZGl0aW9uYWxEYXRhKSB7XG5cdFx0bGV0IGpzb25WYWx1ZSA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGpzb25WYWx1ZSA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbERhdGEsIG51bGwsIDQpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRqc29uVmFsdWUgPSBidG9hKEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6IFwiQ291bGQgbm90IHN0cmluZ2lmeSBhZGRpdGlvbmFsRGF0YSBkdWUgdG8gY2lyY3VsYXIgc3RydWN0dXJlLlwiIH0sIG51bGwsIDQpKTtcblx0XHR9XG5cblx0XHRhZGRpdGlvbmFsVGV4dCA9IHhtbGA8bTpWQm94PlxuXHRcdFx0PG06TGFiZWwgdGV4dD1cIlRyYWNlIEluZm9cIi8+XG5cdFx0XHQ8Y29kZTpDb2RlRWRpdG9yIHR5cGU9XCJqc29uXCIgIHZhbHVlPVwiJHtgez0gQkJGLmJhc2U2NERlY29kZSgnJHtqc29uVmFsdWV9JykgfWB9XCIgaGVpZ2h0PVwiMzAwcHhcIiAvPlxuXHRcdDwvbTpWQm94PmA7XG5cdH1cblx0cmV0dXJuIHhtbGA8Y29udHJvbHM6Rm9ybUVsZW1lbnRXcmFwcGVyIHhtbG5zOmNvbnRyb2xzPVwic2FwLmZlLmNvcmUuY29udHJvbHNcIj5cblx0XHRcdFx0XHQ8bTpWQm94IHhtbG5zOm09XCJzYXAubVwiIHhtbG5zOmNvZGU9XCJzYXAudWkuY29kZWVkaXRvclwiIGNvcmU6cmVxdWlyZT1cIntCQkY6J3NhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja0Zvcm1hdHRlcid9XCI+XG5cdFx0XHRcdFx0JHtlcnJvckxhYmVsc31cblx0XHRcdFx0XHQke2Vycm9yU3RhY2t9XG5cdFx0XHRcdFx0XHQ8Z3JpZDpDU1NHcmlkIGdyaWRUZW1wbGF0ZVJvd3M9XCJmclwiIGdyaWRUZW1wbGF0ZUNvbHVtbnM9XCJyZXBlYXQoMiwxZnIpXCIgZ3JpZEdhcD1cIjFyZW1cIiB4bWxuczpncmlkPVwic2FwLnVpLmxheW91dC5jc3NncmlkXCIgPlxuXHRcdFx0XHRcdFx0XHQ8bTpWQm94PlxuXHRcdFx0XHRcdFx0XHRcdDxtOkxhYmVsIHRleHQ9XCJIb3cgdGhlIGJ1aWxkaW5nIGJsb2NrIHdhcyBjYWxsZWRcIi8+XG5cdFx0XHRcdFx0XHRcdFx0PGNvZGU6Q29kZUVkaXRvciB0eXBlPVwieG1sXCIgdmFsdWU9XCIke2B7PSBCQkYuYmFzZTY0RGVjb2RlKCcke2J0b2EoeG1sRnJhZ21lbnQucmVwbGFjZUFsbChcIiZndDtcIiwgXCI+XCIpKX0nKSB9YH1cIiBoZWlnaHQ9XCIzMDBweFwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvbTpWQm94PlxuXHRcdFx0XHRcdFx0XHQke2FkZGl0aW9uYWxUZXh0fVxuXHRcdFx0XHRcdFx0PC9ncmlkOkNTU0dyaWQ+XG5cdFx0XHRcdFx0PC9tOlZCb3g+XG5cdFx0XHRcdDwvY29udHJvbHM6Rm9ybUVsZW1lbnRXcmFwcGVyPmA7XG59XG5cbmNvbnN0IHRlbXBvcmFyeU9iamVjdFN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4vKipcbiAqIFN0b3JlcyBhbiBvYmplY3QgdmFsdWUgaW4gYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhbmQgcmV0dXJucyBhbiBJRCB1c2VkIHRvIHJldHJpZXZlIHRoaXMgdmFsdWUgYXQgYSBsYXRlciBwb2ludCBpbiB0aW1lLlxuICpcbiAqIFJlcXVpcmVkIGFzIHRoZXJlIGlzIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aGUgeG1sYCBmdW5jdGlvbiwgd2hpY2ggbWlnaHQgdGFrZSBvYmplY3RzIGFzIHBhcmFtZXRlcnMgYnV0IG5lZWRzIHRvIHJldHVybiBhIHNlcmlhbGl6ZWQgc3RyaW5nLlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHN0b3JlXG4gKiBAcmV0dXJucyBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9yZU9iamVjdFZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydHlVSUQgPSBgL3VpZC0tJHt1aWQoKX1gO1xuXHR0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF0gPSB2YWx1ZTtcblx0cmV0dXJuIHByb3BlcnR5VUlEO1xufVxuXG4vKipcbiAqIFVuc3RvcmVzIGFuIG9iamVjdCBmcm9tIGEgdGVtcG9yYXJ5IHN0b3JlIGJ5IHJlbW92aW5nIGl0IGFuZCByZXR1cm5pbmcgaXRzIG9iamVjdCB2YWx1ZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eVVJRCBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKiBAcmV0dXJucyBPYmplY3QgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdW5zdG9yZU9iamVjdFZhbHVlKHByb3BlcnR5VUlEOiBzdHJpbmcpOiB1bmtub3duIHtcblx0Y29uc3QgdmFsdWUgPSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdGRlbGV0ZSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdHJldHVybiB2YWx1ZTtcbn1cblxubGV0IHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IGZhbHNlO1xuLyoqXG4gKiBNYWtlcyBzdXJlIHRoYXQgYWxsIHhtbGAgY2FsbHMgaW5zaWRlIHRoZSBnaXZlbiBtZXRob2QgYXJlIHByb2Nlc3NlZCBpbiB0cmFjZSBtb2RlLlxuICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGV4ZWN1dGVcbiAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGdpdmVuIG1ldGhvZFxuICovXG5jb25zdCBwcm9jZXNzWG1sSW5UcmFjZSA9IGFzeW5jIGZ1bmN0aW9uIChtZXRob2Q6ICguLi5hcmdzOiB1bmtub3duW10pID0+IFByb21pc2U8dW5rbm93bj4pOiBQcm9taXNlPHVua25vd24+IHtcblx0cHJvY2Vzc05leHRYbWxJblRyYWNlID0gdHJ1ZTtcblx0bGV0IHJldHVyblZhbHVlO1xuXHR0cnkge1xuXHRcdHJldHVyblZhbHVlID0gbWV0aG9kKCk7XG5cdH0gZmluYWxseSB7XG5cdFx0cHJvY2Vzc05leHRYbWxJblRyYWNlID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLyoqXG4gKiBQYXJzZSBhbiBYTUwgc3RyaW5nIGFuZCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgZG9jdW1lbnQuXG4gKiBAcGFyYW0geG1sU3RyaW5nIFRoZSB4bWwgc3RyaW5nXG4gKiBAcGFyYW0gW2FkZERlZmF1bHROYW1lc3BhY2VzXSBXaGV0aGVyIG9yIG5vdCBkZWZhdWx0IG5hbWVzcGFjZXMgc2hvdWxkIGJlIGFkZGVkXG4gKiBAcmV0dXJucyBUaGUgWE1MIGRvY3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VYTUxTdHJpbmcoeG1sU3RyaW5nOiBzdHJpbmcsIGFkZERlZmF1bHROYW1lc3BhY2VzID0gZmFsc2UpOiBFbGVtZW50W10ge1xuXHRpZiAoYWRkRGVmYXVsdE5hbWVzcGFjZXMpIHtcblx0XHR4bWxTdHJpbmcgPSBgPHRlbXBsYXRlXG5cdFx0XHRcdFx0XHR4bWxuczp0ZW1wbGF0ZT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS50ZW1wbGF0ZS8xXCJcblx0XHRcdFx0XHRcdHhtbG5zOm09XCJzYXAubVwiXG5cdFx0XHRcdFx0XHR4bWxuczptYWNyb3M9XCJzYXAuZmUubWFjcm9zXCJcblx0XHRcdFx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHRcdFx0XHR4bWxuczptZGM9XCJzYXAudWkubWRjXCJcblx0XHRcdFx0XHRcdHhtbG5zOmN1c3RvbURhdGE9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCI+JHt4bWxTdHJpbmd9PC90ZW1wbGF0ZT5gO1xuXHR9XG5cdGNvbnN0IHhtbERvY3VtZW50ID0gRE9NUGFyc2VySW5zdGFuY2UucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0bGV0IG91dHB1dCA9IHhtbERvY3VtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHR3aGlsZSAob3V0cHV0Py5sb2NhbE5hbWUgPT09IFwidGVtcGxhdGVcIikge1xuXHRcdG91dHB1dCA9IG91dHB1dC5maXJzdEVsZW1lbnRDaGlsZDtcblx0fVxuXHRjb25zdCBjaGlsZHJlbiA9IG91dHB1dD8ucGFyZW50RWxlbWVudCA/IG91dHB1dD8ucGFyZW50RWxlbWVudC5jaGlsZHJlbiA6IFtvdXRwdXQgYXMgRWxlbWVudF07XG5cdHJldHVybiBBcnJheS5mcm9tKGNoaWxkcmVuKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYW4gWE1MIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHZhbHVlPy5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLCBcIiZhcG9zO1wiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVySW5UcmFjZU1vZGUob3V0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB4bWxSZXN1bHQgPSBwYXJzZVhNTFN0cmluZyhvdXRTdHIsIHRydWUpO1xuXHRpZiAoeG1sUmVzdWx0Py5sZW5ndGggPiAwICYmIHhtbFJlc3VsdFswXT8ubG9jYWxOYW1lID09PSBcInBhcnNlcmVycm9yXCIpIHtcblx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoeG1sUmVzdWx0WzBdIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQgfHwgKHhtbFJlc3VsdFswXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MO1xuXHRcdHJldHVybiBjcmVhdGVFcnJvclhNTChbZXJyb3JNZXNzYWdlLnNwbGl0KFwiXFxuXCIpWzBdXSwgb3V0U3RyKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gb3V0U3RyO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFhNTFByb2Nlc3NvclR5cGVWYWx1ZSA9XG5cdHwgc3RyaW5nXG5cdHwgYm9vbGVhblxuXHR8IG51bWJlclxuXHR8IHVuZGVmaW5lZFxuXHR8IG51bGxcblx0fCBvYmplY3Rcblx0fCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXHR8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyPlxuXHR8IEFycmF5PHN0cmluZz5cblx0fCBBcnJheTxGdW5jdGlvbj5cblx0fCBGdW5jdGlvblxuXHR8IENvbnRleHQ7XG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbCB3aGlsZSBoYW5kbGluZyBzcGVjaWFsIG9iamVjdCBjYXNlLlxuICogQHBhcmFtIHN0cmluZ3MgVGhlIHN0cmluZyBwYXJ0cyBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHBhcnQgb2YgdGhlIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGRvY3VtZW50IHJlcHJlc2VudGluZyB0aGUgc3RyaW5nIHRoYXQgd2FzIHVzZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB4bWwgPSAoc3RyaW5nczogVGVtcGxhdGVTdHJpbmdzQXJyYXksIC4uLnZhbHVlczogWE1MUHJvY2Vzc29yVHlwZVZhbHVlW10pOiBzdHJpbmcgPT4ge1xuXHRsZXQgb3V0U3RyID0gXCJcIjtcblx0bGV0IGk7XG5cdGZvciAoaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRvdXRTdHIgKz0gc3RyaW5nc1tpXTtcblxuXHRcdC8vIEhhbmRsZSB0aGUgZGlmZmVyZW50IGNhc2Ugb2Ygb2JqZWN0LCBpZiBpdCdzIGFuIGFycmF5IHdlIGpvaW4gdGhlbSwgaWYgaXQncyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGVuIHdlIGNvbXBpbGUgaXQuXG5cdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdmFsdWVbMF0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZS5mbGF0KDUpLmpvaW4oXCJcXG5cIikudHJpbSgpO1xuXHRcdH0gZWxzZSBpZiAoaXNGdW5jdGlvbkFycmF5KHZhbHVlKSkge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlLm1hcCgodmFsdWVmbikgPT4gdmFsdWVmbigpKS5qb2luKFwiXFxuXCIpO1xuXHRcdH0gZWxzZSBpZiAoaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24odmFsdWUpKSB7XG5cdFx0XHRjb25zdCBjb21waWxlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSk7XG5cdFx0XHRvdXRTdHIgKz0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUoY29tcGlsZWRFeHByZXNzaW9uKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0b3V0U3RyICs9IFwie3RoaXM+dW5kZWZpbmVkVmFsdWV9XCI7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcblx0XHRcdGlmIChpc0NvbnRleHQodmFsdWUpKSB7XG5cdFx0XHRcdG91dFN0ciArPSB2YWx1ZS5nZXRQYXRoKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVVJZCA9IHN0b3JlT2JqZWN0VmFsdWUodmFsdWUpO1xuXHRcdFx0XHRvdXRTdHIgKz0gYCR7cHJvcGVydHlVSWR9YDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIjxcIikgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCImbHQ7XCIpKSB7XG5cdFx0XHRvdXRTdHIgKz0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUodmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWU7XG5cdFx0fVxuXHR9XG5cdG91dFN0ciArPSBzdHJpbmdzW2ldO1xuXHRvdXRTdHIgPSBvdXRTdHIudHJpbSgpO1xuXHRpZiAocHJvY2Vzc05leHRYbWxJblRyYWNlKSB7XG5cdFx0cmV0dXJuIHJlbmRlckluVHJhY2VNb2RlKG91dFN0cik7XG5cdH1cblx0cmV0dXJuIG91dFN0cjtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRDb25kaXRpb25hbGx5VG9YTUwgPSBmdW5jdGlvbiAoY29uZGl0aW9uOiBib29sZWFuLCBwYXJ0VG9BZGQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmIChjb25kaXRpb24pIHtcblx0XHRyZXR1cm4gcGFydFRvQWRkO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG4vKipcbiAqIEFkZCBhbiBhdHRyaWJ1dGUgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIElmIGl0J3MgdW5kZWZpbmVkIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGFkZGVkLlxuICogQHBhcmFtIGF0dHJpYnV0ZU5hbWVcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMgVGhlIGF0dHJpYnV0ZSB0byBhZGQgaWYgdGhlIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEF0dHJpYnV0ZVRvWE1MID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU/OiBYTUxQcm9jZXNzb3JUeXBlVmFsdWUpOiAoKSA9PiBzdHJpbmcge1xuXHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhaXNVbmRlZmluZWRFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdHJldHVybiAoKSA9PiB4bWxgJHthdHRyaWJ1dGVOYW1lfT1cIiR7dmFsdWV9XCJgO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAoKSA9PiBcIlwiO1xuXHR9XG59O1xuIl0sIm1hcHBpbmdz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
|
|
998
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0dHRVJfU0NPUEUiLCJYTUxURU1QTEFUSU5HX05TIiwiRE9NUGFyc2VySW5zdGFuY2UiLCJET01QYXJzZXIiLCJ2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0Iiwic05hbWUiLCJtQ29udGV4dHMiLCJvQ29udGV4dFNldHRpbmdzIiwic0tleSIsIm9Db250ZXh0Iiwib0NvbnRleHRPYmplY3QiLCJnZXRPYmplY3QiLCJyZXF1aXJlZCIsIkVycm9yIiwiaGFzT3duUHJvcGVydHkiLCIka2luZCIsInVuZGVmaW5lZCIsImV4cGVjdGVkVHlwZXMiLCJpbmNsdWRlcyIsImdldFBhdGgiLCIkVHlwZSIsImV4cGVjdGVkQW5ub3RhdGlvblR5cGVzIiwidmFsaWRhdGVNYWNyb1NpZ25hdHVyZSIsIm9NZXRhZGF0YSIsIm9Ob2RlIiwiYU1ldGFkYXRhQ29udGV4dEtleXMiLCJtZXRhZGF0YUNvbnRleHRzIiwiT2JqZWN0Iiwia2V5cyIsImFQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIm9BdHRyaWJ1dGVOYW1lcyIsImF0dHJpYnV0ZU5hbWVzIiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJhdHRyaWJ1dGVOYW1lIiwiZm9yRWFjaCIsIm9Qcm9wZXJ0eVNldHRpbmdzIiwiaGFzQXR0cmlidXRlIiwic3RhcnRzV2l0aCIsIkxvZyIsIndhcm5pbmciLCJfZXhwb3J0cyIsIlNBUF9VSV9DT1JFX0VMRU1FTlQiLCJTQVBfVUlfTU9ERUxfQ09OVEVYVCIsInRyYW5zZm9ybU1ldGFkYXRhIiwiYnVpbGRpbmdCbG9ja01ldGFkYXRhIiwiY2xhc3MiLCJ0eXBlIiwiaXNQdWJsaWMiLCJhZ2dyZWdhdGlvbnMiLCJkZXBlbmRlbnRzIiwic2xvdCIsImN1c3RvbURhdGEiLCJsYXlvdXREYXRhIiwicHJvcGVydHlOYW1lIiwicHJvcGVydHlUeXBlIiwiX2NoZWNrQWJzb2x1dGVBbmRDb250ZXh0UGF0aHMiLCJvU2V0dGluZ3MiLCJzQXR0cmlidXRlVmFsdWUiLCJzTWV0YVBhdGgiLCJzQ29udGV4dFBhdGgiLCJjdXJyZW50Q29udGV4dFBhdGgiLCJlbmRzV2l0aCIsIm1vZGVsIiwicGF0aCIsIl9jcmVhdGVJbml0aWFsTWV0YWRhdGFDb250ZXh0Iiwic0F0dHJpYnV0ZU5hbWUiLCJyZXR1cm5Db250ZXh0IiwibW9kZWxzIiwiY29udmVydGVyQ29udGV4dCIsImdldFByb3BlcnR5IiwiZGF0YSIsInVuc3RvcmVPYmplY3RWYWx1ZSIsInNldFByb3BlcnR5IiwiYmluZGluZ0NvbnRleHRzIiwiZW50aXR5U2V0IiwiX2dldE1ldGFkYXRhQ29udGV4dCIsIm9WaXNpdG9yIiwiYkRvTm90UmVzb2x2ZSIsImlzT3BlbiIsIm9NZXRhZGF0YUNvbnRleHQiLCJnZXRBdHRyaWJ1dGUiLCJCaW5kaW5nSW5mbyIsInBhcnNlIiwibWV0YUNvbnRleHRQYXRoIiwiY29udGV4dCIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImlzQSIsImUiLCJwcm9jZXNzUHJvcGVydGllcyIsImRlZmluaXRpb25Qcm9wZXJ0aWVzIiwiYURlZmluaXRpb25Qcm9wZXJ0aWVzS2V5cyIsInByb3BlcnR5VmFsdWVzIiwic0tleVZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiZGVlcENsb25lIiwiZXJyb3IiLCJ2aXNpdEF0dHJpYnV0ZSIsImF0dHJpYnV0ZXMiLCJnZXROYW1lZEl0ZW0iLCJ2YWx1ZSIsIk51bWJlciIsInByb2Nlc3NDb250ZXh0cyIsImNvbnRleHRQYXRoIiwibU1pc3NpbmdDb250ZXh0Iiwib0RlZmluaXRpb25Db250ZXh0cyIsImFEZWZpbml0aW9uQ29udGV4dHNLZXlzIiwiY29udGV4dFBhdGhJbmRleCIsImluZGV4T2YiLCJjb250ZXh0UGF0aERlZmluaXRpb24iLCJzcGxpY2UiLCJwcm9wZXJ0eVZhbHVlIiwibGVuZ3RoIiwibmFtZSIsImFkZFNpbmdsZUNvbnRleHQiLCJwYXJzZUFnZ3JlZ2F0aW9uIiwib0FnZ3JlZ2F0aW9uIiwiZGVmaW5pdGlvbiIsIm9PdXRPYmplY3RzIiwiY2hpbGRyZW4iLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm5hbWVzcGFjZVVSSSIsIm9QYXJlbnQiLCJwYXJlbnROb2RlIiwidmlzaXROb2RlIiwiY2hpbGRJZHgiLCJjaGlsZERlZmluaXRpb24iLCJjaGlsZEtleSIsInNraXBLZXkiLCJtdWx0aXBsZSIsInVpZCIsInJlYWxseVNraXBLZXkiLCJzZXRBdHRyaWJ1dGUiLCJhZ2dyZWdhdGlvbk9iamVjdCIsImtleSIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJhbmNob3IiLCJwcm9jZXNzQWdncmVnYXRpb25zIiwidGFnTmFtZSIsIm5vZGVOYW1lIiwicHJvY2Vzc09iamVjdCIsImVsZW1lbnQiLCJteUFycmF5IiwibXlPYmplY3QiLCJjaGlsZE5vZGVOYW1lcyIsIm1hcCIsImxvY2FsTmFtZSIsImNoaWxkSXNBcnJheSIsIlNldCIsInNpemUiLCJwdXNoIiwicHJvY2Vzc0NoaWxkcmVuIiwib0FnZ3JlZ2F0aW9ucyIsIm9GaXJzdEVsZW1lbnRDaGlsZCIsImlDaGlsZEluZGV4IiwiQXJyYXkiLCJmcm9tIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwic0NoaWxkTmFtZSIsInNBZ2dyZWdhdGlvbk5hbWUiLCJ0b1VwcGVyQ2FzZSIsImRlZmF1bHRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiIsInBhcnNlZEFnZ3JlZ2F0aW9uIiwicGFyc2VkQWdncmVnYXRpb25LZXkiLCJvTmV4dENoaWxkIiwibmV4dENoaWxkIiwiaGFzVmlydHVhbE5vZGUiLCJjaGlsZFdyYXBwZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnROUyIsImFwcGVuZENoaWxkIiwicmVtb3ZlQXR0cmlidXRlIiwib05ld0NoaWxkIiwiY2xvbmVOb2RlIiwiYWdncmVnYXRpb25Qcm9wZXJ0eVZhbHVlcyIsIm15Q2hpbGQiLCJwcm9jZXNzU2xvdHMiLCJvTWV0YWRhdGFBZ2dyZWdhdGlvbnMiLCJwcm9jZXNzQ3VzdG9tRGF0YSIsImFyZ3VtZW50cyIsIm9BZ2dyZWdhdGlvbkVsZW1lbnQiLCJvRWxlbWVudENoaWxkIiwic1Nsb3ROYW1lIiwib1RhcmdldEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudCIsInJlcGxhY2VXaXRoIiwicmVwbGFjZSIsInByb2Nlc3NCdWlsZGluZ0Jsb2NrIiwiQnVpbGRpbmdCbG9ja0NsYXNzIiwibWV0YWRhdGEiLCJzRnJhZ21lbnROYW1lIiwiZnJhZ21lbnQiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJ4bWxUYWciLCJnZXRTZXR0aW5ncyIsIkpTT05Nb2RlbCIsImluaXRpYWxLZXlzIiwib0NvbnRyb2xDb25maWciLCJ2aWV3RGF0YSIsInByb2Nlc3NlZFByb3BlcnR5VmFsdWVzIiwicHJvcE5hbWUiLCJvRGF0YSIsIm9yaWdpbmFsRGVmaW5pdGlvbiIsInZhbGlkYXRlIiwib0luc3RhbmNlIiwiZ2V0UHJvcGVydGllcyIsInNDb250ZXh0TmFtZSIsInRhcmdldE9iamVjdCIsImlzQ29udGV4dCIsImF0dHJpYnV0ZVZhbHVlIiwic3RvcmVPYmplY3RWYWx1ZSIsIm5ld0NvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIm9BdHRyaWJ1dGVzTW9kZWwiLCJBdHRyaWJ1dGVNb2RlbCIsIm9QcmV2aW91c01hY3JvSW5mbyIsImNvcmVSZXF1aXJlIiwiVHJhY2VJbmZvIiwiaXNUcmFjZUluZm9BY3RpdmUiLCJvVHJhY2VJbmZvIiwidHJhY2VNYWNyb0NhbGxzIiwibWFjcm9JbmZvIiwib0NvbnRleHRWaXNpdG9yIiwid2l0aCIsIm9Qcm9taXNlIiwiaW5zZXJ0RnJhZ21lbnQiLCJvbGRLZXlzIiwidGVtcG9yYXJ5T2JqZWN0U3RvcmUiLCJ0ZW1wbGF0ZVN0cmluZyIsImpzeCIsInJlbmRlckFzWE1MIiwiZ2V0VGVtcGxhdGUiLCJpc1J1bnRpbWUiLCJzdG9yZUtleSIsImhhc0Vycm9yIiwiaGFzUGFyc2VFcnJvciIsInBhcnNlZFRlbXBsYXRlIiwicGFyc2VYTUxTdHJpbmciLCJpdGVyIiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwiTm9kZUZpbHRlciIsIlNIT1dfVEVYVCIsInRleHRub2RlIiwibmV4dE5vZGUiLCJ0ZXh0Q29udGVudCIsInRyaW0iLCJwcm9jZXNzWG1sSW5UcmFjZSIsImluaXRpYWxUZW1wbGF0ZSIsIm9FcnJvclRleHQiLCJjcmVhdGVFcnJvclhNTCIsInRlbXBsYXRlIiwib3V0ZXJIVE1MIiwiam9pbiIsInZpc2l0ZWROb2RlcyIsImludGVybmFsTm9kZSIsIlByb21pc2UiLCJhbGwiLCJyZW1vdmUiLCJyZXNvbHZlIiwib01hY3JvRWxlbWVudCIsIm9SZW1haW5pbmdTbG90cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJvU2xvdEVsZW1lbnQiLCJyZXF1aXJlT25NYWNybyIsImdldEF0dHJpYnV0ZU5TIiwic3Vic3RyaW5nIiwic2V0QXR0cmlidXRlTlMiLCJjbGFzc0xpc3QiLCJhZGQiLCJ0cmFjZURldGFpbHMiLCJpbml0aWFsUHJvcGVydGllcyIsInJlc29sdmVkUHJvcGVydGllcyIsIm1pc3NpbmdDb250ZXh0cyIsIm9FcnJvciIsInN0YWNrIiwib1RlbXBsYXRlIiwib0N0eCIsIm1TZXR0aW5nIiwiZXgiLCJyZWdpc3RlckJ1aWxkaW5nQmxvY2siLCJYTUxQcmVwcm9jZXNzb3IiLCJwbHVnSW4iLCJ1bnJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsImVycm9yTWVzc2FnZXMiLCJ4bWxGcmFnbWVudCIsImFkZGl0aW9uYWxEYXRhIiwiZXJyb3JMYWJlbHMiLCJlcnJvck1lc3NhZ2UiLCJ4bWwiLCJlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZSIsImVycm9yU3RhY2siLCJzdGFja0Zvcm1hdHRlZCIsImJ0b2EiLCJhZGRpdGlvbmFsVGV4dCIsImpzb25WYWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXBsYWNlQWxsIiwicHJvcGVydHlVSUQiLCJwcm9jZXNzTmV4dFhtbEluVHJhY2UiLCJtZXRob2QiLCJyZXR1cm5WYWx1ZSIsInhtbFN0cmluZyIsImFkZERlZmF1bHROYW1lc3BhY2VzIiwieG1sRG9jdW1lbnQiLCJwYXJzZUZyb21TdHJpbmciLCJvdXRwdXQiLCJwYXJlbnRFbGVtZW50IiwicmVuZGVySW5UcmFjZU1vZGUiLCJvdXRTdHIiLCJ4bWxSZXN1bHQiLCJpbm5lclRleHQiLCJpbm5lckhUTUwiLCJzcGxpdCIsInN0cmluZ3MiLCJpIiwiX2xlbiIsInZhbHVlcyIsIl9rZXkiLCJpc0FycmF5IiwiZmxhdCIsImlzRnVuY3Rpb25BcnJheSIsInZhbHVlZm4iLCJpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiIsImNvbXBpbGVkRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwicHJvcGVydHlVSWQiLCJhZGRDb25kaXRpb25hbGx5VG9YTUwiLCJjb25kaXRpb24iLCJwYXJ0VG9BZGQiLCJhZGRBdHRyaWJ1dGVUb1hNTCIsImlzVW5kZWZpbmVkRXhwcmVzc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBpc1VuZGVmaW5lZEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBBdHRyaWJ1dGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9BdHRyaWJ1dGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuXHRCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uLFxuXHRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uLFxuXHRCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uLFxuXHRPYmplY3RWYWx1ZSxcblx0T2JqZWN0VmFsdWUyXG59IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IFBvc2l0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IERlZmluaXRpb25Db250ZXh0LCBEZWZpbml0aW9uUGFnZSB9IGZyb20gXCJzYXAvZmUvY29yZS9kZWZpbml0aW9uL0ZFRGVmaW5pdGlvblwiO1xuaW1wb3J0IHsgaXNDb250ZXh0LCBpc0Z1bmN0aW9uQXJyYXkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgQmluZGluZ0luZm8gZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdJbmZvXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBNYWNyb0luZm8gfSBmcm9tIFwiLi4vVHJhY2VJbmZvXCI7XG5pbXBvcnQgVHJhY2VJbmZvIGZyb20gXCIuLi9UcmFjZUluZm9cIjtcblxuY29uc3QgTE9HR0VSX1NDT1BFID0gXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrcy50ZW1wbGF0aW5nLkJ1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuY29uc3QgWE1MVEVNUExBVElOR19OUyA9IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLnRlbXBsYXRlLzFcIjtcbmNvbnN0IERPTVBhcnNlckluc3RhbmNlID0gbmV3IERPTVBhcnNlcigpO1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSA9IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSAmIHtcblx0bWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+O1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgbWV0YSBkYXRhIGNvbnRleHRcbiAqL1xudHlwZSBNZXRhRGF0YUNvbnRleHQgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdG1vZGVsOiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGN1cnJlbnRDb250ZXh0UGF0aDogQ29udGV4dDtcblx0aXNQdWJsaWM6IGJvb2xlYW47XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRpc1J1bnRpbWVJbnN0YW50aWF0aW9uPzogYm9vbGVhbjtcblx0bW9kZWxzOiBSZWNvcmQ8c3RyaW5nLCBNb2RlbD4gJiB7XG5cdFx0Y29udmVydGVyQ29udGV4dDogSlNPTk1vZGVsO1xuXHRcdHZpZXdEYXRhOiBKU09OTW9kZWw7XG5cdFx0aW50ZXJuYWw6IEpTT05Nb2RlbDtcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRcdFwic2FwLmZlLmkxOG5cIj86IFJlc291cmNlTW9kZWw7XG5cdH07XG5cdGdldERlZmluaXRpb25Db250ZXh0KCk6IERlZmluaXRpb25Db250ZXh0O1xuXHRnZXREZWZpbml0aW9uRm9yUGFnZSgpOiBEZWZpbml0aW9uUGFnZTtcblx0YmluZGluZ0NvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0Pjtcblx0X21hY3JvSW5mbz86IE1hY3JvSW5mbztcblx0W2s6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBJVmlzaXRvckNhbGxiYWNrID0ge1xuXHRnZXRTZXR0aW5ncygpOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzO1xuXHQvKipcblx0ICogVmlzaXRzIHRoZSBnaXZlbiBub2RlIGFuZCBlaXRoZXIgcHJvY2Vzc2VzIGEgdGVtcGxhdGUgaW5zdHJ1Y3Rpb24sIGNhbGxzXG5cdCAqIGEgdmlzaXRvciwgb3Igc2ltcGx5IGNhbGxzIGJvdGgge0BsaW5rXG5cdCAqIHNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yLklDYWxsYmFjay52aXNpdEF0dHJpYnV0ZXMgdmlzaXRBdHRyaWJ1dGVzfVxuXHQgKiBhbmQge0BsaW5rIHNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yLklDYWxsYmFjay52aXNpdENoaWxkTm9kZXNcblx0ICogdmlzaXRDaGlsZE5vZGVzfS5cblx0ICogQHBhcmFtIG9Ob2RlXG5cdCAqICAgVGhlIFhNTCBET00gbm9kZVxuXHQgKiBAcmV0dXJuc1xuXHQgKiAgIEEgdGhlbmFibGUgd2hpY2ggcmVzb2x2ZXMgd2l0aCA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IGFzIHNvb24gYXMgdmlzaXRpbmdcblx0ICogICBpcyBkb25lLCBvciBpcyByZWplY3RlZCB3aXRoIGEgY29ycmVzcG9uZGluZyBlcnJvciBpZiB2aXNpdGluZyBmYWlsc1xuXHQgKi9cblx0dmlzaXROb2RlKG9Ob2RlOiBOb2RlKTogUHJvbWlzZTx2b2lkPjtcblxuXHQvKipcblx0ICogSW5zZXJ0cyB0aGUgZnJhZ21lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiBwbGFjZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudC4gTG9hZHMgdGhlXG5cdCAqIGZyYWdtZW50LCB0YWtlcyBjYXJlIG9mIGNhY2hpbmcgKGZvciB0aGUgY3VycmVudCBwcmUtcHJvY2Vzc29yIHJ1bikgYW5kIHZpc2l0cyB0aGVcblx0ICogZnJhZ21lbnQncyBjb250ZW50IG9uY2UgaXQgaGFzIGJlZW4gaW1wb3J0ZWQgaW50byB0aGUgZWxlbWVudCdzIG93bmVyIGRvY3VtZW50IGFuZFxuXHQgKiBwdXQgaW50byBwbGFjZS4gTG9hZGluZyBvZiBmcmFnbWVudHMgaXMgYXN5bmNocm9ub3VzIGlmIHRoZSB0ZW1wbGF0ZSB2aWV3IGlzXG5cdCAqIGFzeW5jaHJvbm91cy5cblx0ICogQHBhcmFtIHNGcmFnbWVudFxuXHQgKiAgIHRoZSBmcmFnbWVudCdzIHJlc29sdmVkIG5hbWVcblx0ICogQHBhcmFtIG9FbGVtZW50XG5cdCAqICAgdGhlIFhNTCBET00gZWxlbWVudCwgZS5nLiA8c2FwLnVpLmNvcmU6RnJhZ21lbnQ+IG9yIDxjb3JlOkV4dGVuc2lvblBvaW50PlxuXHQgKiBAcGFyYW0gb1dpdGhcblx0ICogICB0aGUgcGFyZW50J3MgXCJ3aXRoXCIgY29udHJvbFxuXHQgKiBAcmV0dXJuc1xuXHQgKiBBIHN5bmMgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB3aXRoIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gYXMgc29vbiBhcyB0aGUgZnJhZ21lbnRcblx0ICogICBoYXMgYmVlbiBpbnNlcnRlZCwgb3IgaXMgcmVqZWN0ZWQgd2l0aCBhIGNvcnJlc3BvbmRpbmcgZXJyb3IgaWYgbG9hZGluZyBvciB2aXNpdGluZ1xuXHQgKiAgIGZhaWxzLlxuXHQgKi9cblx0aW5zZXJ0RnJhZ21lbnQoc0ZyYWdtZW50OiBzdHJpbmcsIG9FbGVtZW50OiBFbGVtZW50LCBvV2l0aD86IENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+O1xuXHR2aXNpdEF0dHJpYnV0ZShvTm9kZTogRWxlbWVudCwgb0F0dHJpYnV0ZTogQXR0cik6IFByb21pc2U8dm9pZD47XG5cdHZpc2l0QXR0cmlidXRlcyhvTm9kZTogRWxlbWVudCk6IFByb21pc2U8dm9pZD47XG5cdGdldFZpZXdJbmZvKCk6IFByb21pc2U8dW5rbm93bj47XG5cdHZpc2l0Q2hpbGROb2RlcyhvTm9kZTogTm9kZSk6IFByb21pc2U8dm9pZD47XG5cdC8qKlxuXHQgKiBJbnRlcnByZXRzIHRoZSBnaXZlbiBYTUwgRE9NIGF0dHJpYnV0ZSB2YWx1ZSBhcyBhIGJpbmRpbmcgYW5kIHJldHVybnMgdGhlXG5cdCAqIHJlc3VsdGluZyB2YWx1ZS5cblx0ICogQHBhcmFtIHNWYWx1ZVxuXHQgKiAgIEFuIFhNTCBET00gYXR0cmlidXRlIHZhbHVlXG5cdCAqIEBwYXJhbSBbZWxlbWVudF1cblx0ICogICBUaGUgWE1MIERPTSBlbGVtZW50IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYmVsb25ncyB0byAobmVlZGVkIG9ubHkgZm9yXG5cdCAqICAgd2FybmluZ3Mgd2hpY2ggYXJlIGxvZ2dlZCB0byB0aGUgY29uc29sZSlcblx0ICogQHJldHVybnNcblx0ICogICBBIHRoZW5hYmxlIHdoaWNoIHJlc29sdmVzIHdpdGggdGhlIHJlc3VsdGluZyB2YWx1ZSwgb3IgaXMgcmVqZWN0ZWQgd2l0aCBhXG5cdCAqICAgY29ycmVzcG9uZGluZyBlcnJvciAoZm9yIGV4YW1wbGUsIGFuIGVycm9yIHRocm93biBieSBhIGZvcm1hdHRlcikgb3Jcblx0ICogICA8Y29kZT5udWxsPC9jb2RlPiBpbiBjYXNlIHRoZSBiaW5kaW5nIGlzIG5vdCByZWFkeSAoYmVjYXVzZSBpdCByZWZlcnMgdG8gYVxuXHQgKiAgIG1vZGVsIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUpIChzaW5jZSAxLjU3LjApXG5cdCAqL1xuXHRnZXRSZXN1bHQoc1ZhbHVlOiBzdHJpbmcsIGVsZW1lbnQ/OiBFbGVtZW50KTogUHJvbWlzZTxDb250ZXh0PiB8IG51bGw7XG5cdGdldENvbnRleHQoc1BhdGg/OiBzdHJpbmcpOiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHQvKipcblx0ICogUmV0dXJucyBhIGNhbGxiYWNrIGludGVyZmFjZSBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIG1hcCBvZiB2YXJpYWJsZXMgd2hpY2hcblx0ICogb3ZlcnJpZGUgY3VycmVudGx5IGtub3duIHZhcmlhYmxlcyBvZiB0aGUgc2FtZSBuYW1lIGluIDxjb2RlPnRoaXM8L2NvZGU+XG5cdCAqIHBhcmVudCBpbnRlcmZhY2Ugb3IgcmVwbGFjZSB0aGVtIGFsdG9nZXRoZXIuIEVhY2ggdmFyaWFibGUgbmFtZSBiZWNvbWVzIGFcblx0ICogbmFtZWQgbW9kZWwgd2l0aCBhIGNvcnJlc3BvbmRpbmcgb2JqZWN0IGJpbmRpbmcgYW5kIGNhbiBiZSB1c2VkIGluc2lkZSB0aGVcblx0ICogWE1MIHRlbXBsYXRlIGluIHRoZSB1c3VhbCB3YXksIHRoYXQgaXMsIHdpdGggYSBiaW5kaW5nIGV4cHJlc3Npb24gbGlrZVxuXHQgKiA8Y29kZT5cInt2YXI+c29tZS9yZWxhdGl2ZS9wYXRofVwiPC9jb2RlPiAoc2VlIGV4YW1wbGUpLlxuXHQgKiBAcGFyYW0gW21WYXJpYWJsZXM9e31dXG5cdCAqICAgTWFwIGZyb20gdmFyaWFibGUgbmFtZSAoc3RyaW5nKSB0byB2YWx1ZVxuXHQgKiBAcGFyYW0gW2JSZXBsYWNlXVxuXHQgKiAgIFdoZXRoZXIgb25seSB0aGUgZ2l2ZW4gdmFyaWFibGVzIGFyZSBrbm93biBpbiB0aGUgbmV3IGNhbGxiYWNrIGludGVyZmFjZVxuXHQgKiAgIGluc3RhbmNlLCBubyBpbmhlcml0ZWQgb25lc1xuXHQgKiBAcmV0dXJuc1xuXHQgKiAgIEEgY2FsbGJhY2sgaW50ZXJmYWNlIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBtVmFyaWFibGVzXG5cdCAqIEBwYXJhbSBiUmVwbGFjZVxuXHQgKi9cblx0XCJ3aXRoXCIobVZhcmlhYmxlcz86IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+LCBiUmVwbGFjZT86IGJvb2xlYW4pOiBJVmlzaXRvckNhbGxiYWNrO1xufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVNYWNyb01ldGFkYXRhQ29udGV4dChcblx0c05hbWU6IHN0cmluZyxcblx0bUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCBDb250ZXh0Pixcblx0b0NvbnRleHRTZXR0aW5nczogQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24sXG5cdHNLZXk6IHN0cmluZ1xuKTogdm9pZCB7XG5cdGNvbnN0IG9Db250ZXh0ID0gbUNvbnRleHRzW3NLZXldO1xuXHRjb25zdCBvQ29udGV4dE9iamVjdCA9IG9Db250ZXh0Py5nZXRPYmplY3QoKSBhcyB7XG5cdFx0JFR5cGU/OiBzdHJpbmc7XG5cdFx0JGtpbmQ/OiBzdHJpbmc7XG5cdH07XG5cblx0aWYgKG9Db250ZXh0U2V0dGluZ3MucmVxdWlyZWQgPT09IHRydWUgJiYgKCFvQ29udGV4dCB8fCBvQ29udGV4dE9iamVjdCA9PT0gbnVsbCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7c05hbWV9OiBSZXF1aXJlZCBtZXRhZGF0YUNvbnRleHQgJyR7c0tleX0nIGlzIG1pc3NpbmdgKTtcblx0fSBlbHNlIGlmIChvQ29udGV4dE9iamVjdCkge1xuXHRcdC8vIElmIGNvbnRleHQgb2JqZWN0IGhhcyAka2luZCBwcm9wZXJ0eSwgJFR5cGUgc2hvdWxkIG5vdCBiZSBjaGVja2VkXG5cdFx0Ly8gVGhlcmVmb3JlIHJlbW92ZSBmcm9tIGNvbnRleHQgc2V0dGluZ3Ncblx0XHRpZiAob0NvbnRleHRPYmplY3QuaGFzT3duUHJvcGVydHkoXCIka2luZFwiKSAmJiBvQ29udGV4dE9iamVjdC4ka2luZCAhPT0gdW5kZWZpbmVkICYmIG9Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRUeXBlcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgJGtpbmQgaXMgcGFydCBvZiB0aGUgYWxsb3dlZCBvbmVzXG5cdFx0XHRpZiAoIW9Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRUeXBlcy5pbmNsdWRlcyhvQ29udGV4dE9iamVjdC4ka2luZCkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGAke3NOYW1lfTogJyR7c0tleX0nIG11c3QgYmUgJyRraW5kJyAnJHtvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkVHlwZXN9JyBidXQgaXMgJyR7XG5cdFx0XHRcdFx0XHRvQ29udGV4dE9iamVjdC4ka2luZFxuXHRcdFx0XHRcdH0nOiAke29Db250ZXh0LmdldFBhdGgoKX1gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG9Db250ZXh0T2JqZWN0Lmhhc093blByb3BlcnR5KFwiJFR5cGVcIikgJiZcblx0XHRcdG9Db250ZXh0T2JqZWN0LiRUeXBlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdG9Db250ZXh0U2V0dGluZ3MuZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXNcblx0XHQpIHtcblx0XHRcdC8vIENoZWNrIG9ubHkgJFR5cGVcblx0XHRcdGlmICghb0NvbnRleHRTZXR0aW5ncy5leHBlY3RlZEFubm90YXRpb25UeXBlcy5pbmNsdWRlcyhvQ29udGV4dE9iamVjdC4kVHlwZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGAke3NOYW1lfTogJyR7c0tleX0nIG11c3QgYmUgJyRUeXBlJyAnJHtvQ29udGV4dFNldHRpbmdzLmV4cGVjdGVkQW5ub3RhdGlvblR5cGVzfScgYnV0IGlzICcke1xuXHRcdFx0XHRcdFx0b0NvbnRleHRPYmplY3QuJFR5cGVcblx0XHRcdFx0XHR9JzogJHtvQ29udGV4dC5nZXRQYXRoKCl9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWFjcm9TaWduYXR1cmUoXG5cdHNOYW1lOiBzdHJpbmcsXG5cdG9NZXRhZGF0YTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEsXG5cdG1Db250ZXh0czogUmVjb3JkPHN0cmluZywgQ29udGV4dD4sXG5cdG9Ob2RlOiBFbGVtZW50XG4pOiB2b2lkIHtcblx0Y29uc3QgYU1ldGFkYXRhQ29udGV4dEtleXMgPSAob01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHMgJiYgT2JqZWN0LmtleXMob01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHMpKSB8fCBbXSxcblx0XHRhUHJvcGVydGllcyA9IChvTWV0YWRhdGEucHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhvTWV0YWRhdGEucHJvcGVydGllcykpIHx8IFtdLFxuXHRcdG9BdHRyaWJ1dGVOYW1lczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHQvLyBjb2xsZWN0IGFsbCBhdHRyaWJ1dGVzIHRvIGZpbmQgdW5jaGVja2VkIHByb3BlcnRpZXNcblx0Y29uc3QgYXR0cmlidXRlTmFtZXMgPSBvTm9kZS5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuXHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgYXR0cmlidXRlTmFtZXMpIHtcblx0XHRvQXR0cmlidXRlTmFtZXNbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuXHR9XG5cblx0Ly9DaGVjayBtZXRhZGF0YUNvbnRleHRzXG5cdGFNZXRhZGF0YUNvbnRleHRLZXlzLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHRjb25zdCBvQ29udGV4dFNldHRpbmdzID0gb01ldGFkYXRhLm1ldGFkYXRhQ29udGV4dHNbc0tleV07XG5cblx0XHR2YWxpZGF0ZU1hY3JvTWV0YWRhdGFDb250ZXh0KHNOYW1lLCBtQ29udGV4dHMsIG9Db250ZXh0U2V0dGluZ3MsIHNLZXkpO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlTmFtZXNbc0tleV07XG5cdH0pO1xuXHQvL0NoZWNrIHByb3BlcnRpZXNcblx0YVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdGNvbnN0IG9Qcm9wZXJ0eVNldHRpbmdzID0gb01ldGFkYXRhLnByb3BlcnRpZXNbc0tleV07XG5cdFx0aWYgKCFvTm9kZS5oYXNBdHRyaWJ1dGUoc0tleSkpIHtcblx0XHRcdGlmIChvUHJvcGVydHlTZXR0aW5ncy5yZXF1aXJlZCAmJiAhb1Byb3BlcnR5U2V0dGluZ3MuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0VmFsdWVcIikpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGAke3NOYW1lfTogYCArIGBSZXF1aXJlZCBwcm9wZXJ0eSAnJHtzS2V5fScgaXMgbWlzc2luZ2ApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWxldGUgb0F0dHJpYnV0ZU5hbWVzW3NLZXldO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gVW5jaGVja2VkIHByb3BlcnRpZXNcblx0T2JqZWN0LmtleXMob0F0dHJpYnV0ZU5hbWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHQvLyBubyBjaGVjayBmb3IgcHJvcGVydGllcyB3aGljaCBjb250YWluIGEgY29sb24gXCI6XCIgKGRpZmZlcmVudCBuYW1lc3BhY2UpLCBlLmcuIHhtbG5zOnRyYWNlLCB0cmFjZTptYWNyb0lELCB1bml0dGVzdDppZFxuXHRcdGlmICghc0tleS5pbmNsdWRlcyhcIjpcIikgJiYgIXNLZXkuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRMb2cud2FybmluZyhgVW5jaGVja2VkIHBhcmFtZXRlcjogJHtzTmFtZX06ICR7c0tleX1gLCB1bmRlZmluZWQsIExPR0dFUl9TQ09QRSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuY29uc3QgU0FQX1VJX0NPUkVfRUxFTUVOVCA9IFwic2FwLnVpLmNvcmUuRWxlbWVudFwiO1xuXG5leHBvcnQgY29uc3QgU0FQX1VJX01PREVMX0NPTlRFWFQgPSBcInNhcC51aS5tb2RlbC5Db250ZXh0XCI7XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgbWV0YWRhdGEgb2YgYSBidWlsZGluZyBibG9jayBieSBhZGRpbmcgYWRkaXRpb25hbCBhZ2dyZWdhdGlvbnMsXG4gKiBhbmQgc3BsaXR0aW5nIHByb3BlcnRpZXMgaW50byBhY3R1YWwgcHJvcGVydGllcyBhbmQgbWV0YWRhdGEgY29udGV4dHMuXG4gKiBAcGFyYW0gYnVpbGRpbmdCbG9ja01ldGFkYXRhIFRoZSBtZXRhZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBpbnB1dFxuICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybU1ldGFkYXRhKGJ1aWxkaW5nQmxvY2tNZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhKTogVHJhbnNmb3JtZWRCdWlsZGluZ0Jsb2NrTWV0YWRhdGEge1xuXHRjb25zdCBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uPiA9IHtcblx0XHRjbGFzczoge1xuXHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdGlzUHVibGljOiB0cnVlXG5cdFx0fVxuXHR9O1xuXHRjb25zdCBhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24+ID0ge1xuXHRcdGRlcGVuZGVudHM6IHtcblx0XHRcdHR5cGU6IFNBUF9VSV9DT1JFX0VMRU1FTlQsXG5cdFx0XHRzbG90OiBcImRlcGVuZGVudHNcIixcblx0XHRcdGlzUHVibGljOiB0cnVlXG5cdFx0fSxcblx0XHRjdXN0b21EYXRhOiB7XG5cdFx0XHR0eXBlOiBTQVBfVUlfQ09SRV9FTEVNRU5ULFxuXHRcdFx0c2xvdDogXCJjdXN0b21EYXRhXCIsXG5cdFx0XHRpc1B1YmxpYzogdHJ1ZVxuXHRcdH0sXG5cdFx0bGF5b3V0RGF0YToge1xuXHRcdFx0dHlwZTogU0FQX1VJX0NPUkVfRUxFTUVOVCxcblx0XHRcdHNsb3Q6IFwibGF5b3V0RGF0YVwiLFxuXHRcdFx0aXNQdWJsaWM6IHRydWVcblx0XHR9LFxuXHRcdC4uLmJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5hZ2dyZWdhdGlvbnNcblx0fTtcblx0Y29uc3QgbWV0YWRhdGFDb250ZXh0czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja01ldGFkYXRhQ29udGV4dERlZmluaXRpb24+ID0ge307XG5cblx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmtleXMoYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXMpKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gYnVpbGRpbmdCbG9ja01ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlOYW1lXS50eXBlO1xuXG5cdFx0aWYgKHByb3BlcnR5VHlwZSAhPT0gU0FQX1VJX01PREVMX0NPTlRFWFQpIHtcblx0XHRcdHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IGJ1aWxkaW5nQmxvY2tNZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0fVxuXG5cdFx0aWYgKFtTQVBfVUlfTU9ERUxfQ09OVEVYVCwgXCJvYmplY3RcIiwgXCJhcnJheVwiXS5pbmNsdWRlcyhwcm9wZXJ0eVR5cGUpKSB7XG5cdFx0XHQvLyBFeHBsaWNpdGx5IGRlZmluZWQgY29udGV4dHMsIG9iamVjdHMsIGFuZCBhcnJheXMgbWF5IGNvbWUgZnJvbSB0aGUgbWV0YWRhdGFDb250ZXh0XG5cdFx0XHRtZXRhZGF0YUNvbnRleHRzW3Byb3BlcnR5TmFtZV0gPSBidWlsZGluZ0Jsb2NrTWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdIGFzIEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Li4uYnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0bWV0YWRhdGFDb250ZXh0cyxcblx0XHRhZ2dyZWdhdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGFic29sdXRlIG9yIGNvbnRleHQgcGF0aHMgYW5kIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgTWV0YUNvbnRleHQuXG4gKiBAcGFyYW0gb1NldHRpbmdzIEFkZGl0aW9uYWwgc2V0dGluZ3NcbiAqIEBwYXJhbSBzQXR0cmlidXRlVmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZVxuICogQHJldHVybnMgVGhlIG1ldGEgZGF0YSBjb250ZXh0IG9iamVjdFxuICovXG5mdW5jdGlvbiBfY2hlY2tBYnNvbHV0ZUFuZENvbnRleHRQYXRocyhvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsIHNBdHRyaWJ1dGVWYWx1ZTogc3RyaW5nKTogTWV0YURhdGFDb250ZXh0IHtcblx0bGV0IHNNZXRhUGF0aDogc3RyaW5nO1xuXHRpZiAoc0F0dHJpYnV0ZVZhbHVlICYmIHNBdHRyaWJ1dGVWYWx1ZS5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdC8vIGFic29sdXRlIHBhdGggLSB3ZSBqdXN0IHVzZSB0aGlzIG9uZVxuXHRcdHNNZXRhUGF0aCA9IHNBdHRyaWJ1dGVWYWx1ZTtcblx0fSBlbHNlIHtcblx0XHRsZXQgc0NvbnRleHRQYXRoID0gb1NldHRpbmdzLmN1cnJlbnRDb250ZXh0UGF0aC5nZXRQYXRoKCk7XG5cdFx0aWYgKCFzQ29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRzQ29udGV4dFBhdGggKz0gXCIvXCI7XG5cdFx0fVxuXHRcdHNNZXRhUGF0aCA9IHNDb250ZXh0UGF0aCArIHNBdHRyaWJ1dGVWYWx1ZTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdG1vZGVsOiBcIm1ldGFNb2RlbFwiLFxuXHRcdHBhdGg6IHNNZXRhUGF0aFxuXHR9O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGhlbHBzIHRvIGNyZWF0ZSB0aGUgbWV0YWRhdGEgY29udGV4dCBpbiBjYXNlIGl0IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGluIHRoZSBzdG9yZS5cbiAqIEBwYXJhbSBvU2V0dGluZ3MgQWRkaXRpb25hbCBzZXR0aW5nc1xuICogQHBhcmFtIHNBdHRyaWJ1dGVOYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZVxuICogQHBhcmFtIHNBdHRyaWJ1dGVWYWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlXG4gKiBAcmV0dXJucyBUaGUgbWV0YSBkYXRhIGNvbnRleHQgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIF9jcmVhdGVJbml0aWFsTWV0YWRhdGFDb250ZXh0KFxuXHRvU2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MsXG5cdHNBdHRyaWJ1dGVOYW1lOiBzdHJpbmcsXG5cdHNBdHRyaWJ1dGVWYWx1ZTogc3RyaW5nXG4pOiBNZXRhRGF0YUNvbnRleHQge1xuXHRsZXQgcmV0dXJuQ29udGV4dDogTWV0YURhdGFDb250ZXh0O1xuXHRpZiAoc0F0dHJpYnV0ZVZhbHVlLnN0YXJ0c1dpdGgoXCIvdWlkLS1cIikgJiYgIW9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5nZXRQcm9wZXJ0eShzQXR0cmlidXRlVmFsdWUpKSB7XG5cdFx0Y29uc3QgZGF0YSA9IHVuc3RvcmVPYmplY3RWYWx1ZShzQXR0cmlidXRlVmFsdWUpO1xuXHRcdG9TZXR0aW5ncy5tb2RlbHMuY29udmVydGVyQ29udGV4dC5zZXRQcm9wZXJ0eShzQXR0cmlidXRlVmFsdWUsIGRhdGEpO1xuXHRcdHJldHVybkNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogXCJjb252ZXJ0ZXJDb250ZXh0XCIsXG5cdFx0XHRwYXRoOiBzQXR0cmlidXRlVmFsdWVcblx0XHR9O1xuXHR9IGVsc2UgaWYgKChzQXR0cmlidXRlTmFtZSA9PT0gXCJtZXRhUGF0aFwiICYmIG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGgpIHx8IHNBdHRyaWJ1dGVOYW1lID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRyZXR1cm5Db250ZXh0ID0gX2NoZWNrQWJzb2x1dGVBbmRDb250ZXh0UGF0aHMob1NldHRpbmdzLCBzQXR0cmlidXRlVmFsdWUpO1xuXHR9IGVsc2UgaWYgKHNBdHRyaWJ1dGVWYWx1ZSAmJiBzQXR0cmlidXRlVmFsdWUuc3RhcnRzV2l0aChcIi9cIikpIHtcblx0XHQvLyBhYnNvbHV0ZSBwYXRoIC0gd2UganVzdCB1c2UgdGhpcyBvbmVcblx0XHRyZXR1cm5Db250ZXh0ID0ge1xuXHRcdFx0bW9kZWw6IFwibWV0YU1vZGVsXCIsXG5cdFx0XHRwYXRoOiBzQXR0cmlidXRlVmFsdWVcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybkNvbnRleHQgPSB7XG5cdFx0XHRtb2RlbDogXCJtZXRhTW9kZWxcIixcblx0XHRcdHBhdGg6IG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHMuZW50aXR5U2V0ID8gb1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5lbnRpdHlTZXQuZ2V0UGF0aChzQXR0cmlidXRlVmFsdWUpIDogc0F0dHJpYnV0ZVZhbHVlXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gcmV0dXJuQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gX2dldE1ldGFkYXRhQ29udGV4dChcblx0b1NldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHRvTm9kZTogRWxlbWVudCxcblx0c0F0dHJpYnV0ZU5hbWU6IHN0cmluZyxcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2ssXG5cdGJEb05vdFJlc29sdmU6IGJvb2xlYW4sXG5cdGlzT3BlbjogYm9vbGVhblxuKTogTWV0YURhdGFDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0bGV0IG9NZXRhZGF0YUNvbnRleHQ6IE1ldGFEYXRhQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0aWYgKCFiRG9Ob3RSZXNvbHZlICYmIG9Ob2RlLmhhc0F0dHJpYnV0ZShzQXR0cmlidXRlTmFtZSkpIHtcblx0XHRsZXQgc0F0dHJpYnV0ZVZhbHVlID0gb05vZGUuZ2V0QXR0cmlidXRlKHNBdHRyaWJ1dGVOYW1lKSBhcyBzdHJpbmc7XG5cdFx0b01ldGFkYXRhQ29udGV4dCA9IEJpbmRpbmdJbmZvLnBhcnNlKHNBdHRyaWJ1dGVWYWx1ZSk7XG5cdFx0aWYgKG9NZXRhZGF0YUNvbnRleHQgJiYgc0F0dHJpYnV0ZU5hbWUgPT09IFwibWV0YVBhdGhcIiAmJiBvTWV0YWRhdGFDb250ZXh0Lm1vZGVsICYmIG9NZXRhZGF0YUNvbnRleHQucGF0aCkge1xuXHRcdFx0Ly8gaWYgdGhlIG1ldGFQYXRoIGlzIGZpbGxlZCB0aHJvdWdoIGEgSlNPTiBtb2RlbCwgd2UgY2FuJ3QgdXNlIHRoaXMgY29udGV4dCBhcyB0aGUgbWV0YWRhdGFDb250ZXh0LFxuXHRcdFx0Ly8gYnV0IGluc3RlYWQgd2UgaGF2ZSB0byBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlIGFjdHVhbCB2YWx1ZVxuXHRcdFx0Y29uc3QgbWV0YUNvbnRleHRQYXRoID0gYCR7b01ldGFkYXRhQ29udGV4dC5tb2RlbH0+JHtvTWV0YWRhdGFDb250ZXh0LnBhdGh9YDtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvVmlzaXRvci5nZXRDb250ZXh0KG1ldGFDb250ZXh0UGF0aCk7XG5cdFx0XHRpZiAoY29udGV4dD8uZ2V0TW9kZWwoKT8uaXNBKFwic2FwLnVpLm1vZGVsLmpzb24uSlNPTk1vZGVsXCIpKSB7XG5cdFx0XHRcdHNBdHRyaWJ1dGVWYWx1ZSA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdG9NZXRhZGF0YUNvbnRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFvTWV0YWRhdGFDb250ZXh0KSB7XG5cdFx0XHRvTWV0YWRhdGFDb250ZXh0ID0gX2NyZWF0ZUluaXRpYWxNZXRhZGF0YUNvbnRleHQob1NldHRpbmdzLCBzQXR0cmlidXRlTmFtZSwgc0F0dHJpYnV0ZVZhbHVlKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob1NldHRpbmdzLmJpbmRpbmdDb250ZXh0cy5oYXNPd25Qcm9wZXJ0eShzQXR0cmlidXRlTmFtZSkpIHtcblx0XHRvTWV0YWRhdGFDb250ZXh0ID0ge1xuXHRcdFx0bW9kZWw6IHNBdHRyaWJ1dGVOYW1lLFxuXHRcdFx0cGF0aDogXCJcIlxuXHRcdH07XG5cdH0gZWxzZSBpZiAoaXNPcGVuKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChvVmlzaXRvci5nZXRDb250ZXh0KGAke3NBdHRyaWJ1dGVOYW1lfT5gKSkge1xuXHRcdFx0XHRvTWV0YWRhdGFDb250ZXh0ID0ge1xuXHRcdFx0XHRcdG1vZGVsOiBzQXR0cmlidXRlTmFtZSxcblx0XHRcdFx0XHRwYXRoOiBcIlwiXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9NZXRhZGF0YUNvbnRleHQ7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGluY29taW5nIFhNTCBub2RlIGFuZCB0cnkgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIHRoZXJlLlxuICogQHBhcmFtIG9NZXRhZGF0YSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIG9Ob2RlIFRoZSBYTUwgbm9kZSB0byBwYXJzZVxuICogQHBhcmFtIGlzUHVibGljIFdoZXRoZXIgdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW4gYSBwdWJsaWMgY29udGV4dCBvciBub3RcbiAqIEBwYXJhbSBvVmlzaXRvciBUaGUgdmlzaXRvciBpbnN0YW5jZVxuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBwcm9wZXJ0aWVzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NQcm9wZXJ0aWVzKFxuXHRvTWV0YWRhdGE6IFRyYW5zZm9ybWVkQnVpbGRpbmdCbG9ja01ldGFkYXRhLFxuXHRvTm9kZTogRWxlbWVudCxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPj4ge1xuXHRjb25zdCBkZWZpbml0aW9uUHJvcGVydGllcyA9IG9NZXRhZGF0YS5wcm9wZXJ0aWVzO1xuXG5cdC8vIFJldHJpZXZlIHByb3BlcnRpZXMgdmFsdWVzXG5cdGNvbnN0IGFEZWZpbml0aW9uUHJvcGVydGllc0tleXMgPSBPYmplY3Qua2V5cyhkZWZpbml0aW9uUHJvcGVydGllcyk7XG5cblx0Y29uc3QgcHJvcGVydHlWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIE9iamVjdFZhbHVlPiA9IHt9O1xuXHRmb3IgKGNvbnN0IHNLZXlWYWx1ZSBvZiBhRGVmaW5pdGlvblByb3BlcnRpZXNLZXlzKSB7XG5cdFx0aWYgKGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0udHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0cHJvcGVydHlWYWx1ZXNbc0tleVZhbHVlXSA9XG5cdFx0XHRcdGRlZmluaXRpb25Qcm9wZXJ0aWVzW3NLZXlWYWx1ZV0uZGVmYXVsdFZhbHVlICYmIGRlZXBDbG9uZShkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLmRlZmF1bHRWYWx1ZSk7IC8vIFRvIGF2b2lkIHZhbHVlcyBiZWluZyByZXVzZWQgYWNyb3NzIG1hY3Jvc1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID0gZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5kZWZhdWx0VmFsdWUgYXMgc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAob05vZGUuaGFzQXR0cmlidXRlKHNLZXlWYWx1ZSkgJiYgaXNQdWJsaWMgJiYgZGVmaW5pdGlvblByb3BlcnRpZXNbc0tleVZhbHVlXS5pc1B1YmxpYyAhPT0gdHJ1ZSkge1xuXHRcdFx0TG9nLmVycm9yKGBQcm9wZXJ0eSAke3NLZXlWYWx1ZX0gd2FzIGlnbm9yZWQgYXMgaXQgaXMgbm90IGludGVuZGVkIGZvciBwdWJsaWMgdXNhZ2VgKTtcblx0XHR9IGVsc2UgaWYgKG9Ob2RlLmhhc0F0dHJpYnV0ZShzS2V5VmFsdWUpKSB7XG5cdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdEF0dHJpYnV0ZShvTm9kZSwgb05vZGUuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oc0tleVZhbHVlKSBhcyBBdHRyKTtcblx0XHRcdGxldCB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSBvTm9kZS5nZXRBdHRyaWJ1dGUoc0tleVZhbHVlKTtcblx0XHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0XHRcdFx0c3dpdGNoIChkZWZpbml0aW9uUHJvcGVydGllc1tzS2V5VmFsdWVdLnR5cGUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzS2V5VmFsdWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVZhbHVlcztcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgaW5jb21pbmcgWE1MIG5vZGUgYW5kIHRyeSB0byByZXNvbHZlIHRoZSBiaW5kaW5nIGNvbnRleHRzIGRlZmluZWQgaW5zaWRlLlxuICogQHBhcmFtIG9NZXRhZGF0YSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIG9TZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2JqZWN0XG4gKiBAcGFyYW0gb05vZGUgVGhlIFhNTCBub2RlIHRvIHBhcnNlXG4gKiBAcGFyYW0gaXNQdWJsaWMgV2hldGhlciB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpbiBhIHB1YmxpYyBjb250ZXh0IG9yIG5vdFxuICogQHBhcmFtIG9WaXNpdG9yIFRoZSB2aXNpdG9yIGluc3RhbmNlXG4gKiBAcGFyYW0gbUNvbnRleHRzIFRoZSBjb250ZXh0cyB0byBiZSB1c2VkXG4gKiBAcGFyYW0gcHJvcGVydHlWYWx1ZXMgVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWVzXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIGFuZCBtaXNzaW5nIGNvbnRleHRzXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDb250ZXh0cyhcblx0b01ldGFkYXRhOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0b1NldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHRvTm9kZTogRWxlbWVudCxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrLFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+LFxuXHRwcm9wZXJ0eVZhbHVlczogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWU+XG4pOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG5cdG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGggPSBvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmNvbnRleHRQYXRoO1xuXHRjb25zdCBtTWlzc2luZ0NvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IG9EZWZpbml0aW9uQ29udGV4dHMgPSBvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0cztcblx0Y29uc3QgYURlZmluaXRpb25Db250ZXh0c0tleXMgPSBPYmplY3Qua2V5cyhvRGVmaW5pdGlvbkNvbnRleHRzKTtcblx0Ly8gU2luY2UgdGhlIG1ldGFQYXRoIGFuZCBvdGhlciBwcm9wZXJ0eSBjYW4gYmUgcmVsYXRpdmUgdG8gdGhlIGNvbnRleHRQYXRoIHdlIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGN1cnJlbnQgY29udGV4dFBhdGggZmlyc3Rcblx0Y29uc3QgY29udGV4dFBhdGhJbmRleCA9IGFEZWZpbml0aW9uQ29udGV4dHNLZXlzLmluZGV4T2YoXCJjb250ZXh0UGF0aFwiKTtcblx0aWYgKGNvbnRleHRQYXRoSW5kZXggIT09IC0xKSB7XG5cdFx0Ly8gSWYgaXQgaXMgZGVmaW5lZCB3ZSBleHRyYWN0IGl0IGFuZCByZWluc2VydCBpdCBpbiB0aGUgZmlyc3QgcG9zaXRpb24gb2YgdGhlIGFycmF5XG5cdFx0Y29uc3QgY29udGV4dFBhdGhEZWZpbml0aW9uID0gYURlZmluaXRpb25Db250ZXh0c0tleXMuc3BsaWNlKGNvbnRleHRQYXRoSW5kZXgsIDEpO1xuXHRcdGFEZWZpbml0aW9uQ29udGV4dHNLZXlzLnNwbGljZSgwLCAwLCBjb250ZXh0UGF0aERlZmluaXRpb25bMF0pO1xuXHR9XG5cdGZvciAoY29uc3Qgc0F0dHJpYnV0ZU5hbWUgb2YgYURlZmluaXRpb25Db250ZXh0c0tleXMpIHtcblx0XHQvLyBJZiB0aGUgY29udGV4dCB3YXMgcmVzb2x2ZWQgYXMgYSBwcm9wZXJ0eSAoYmluZGluZyAvIHhtbCBhZ2dyZWdhdGlvbikgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHJlc29sdmUgaXQgaGVyZS5cblx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZXNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdGlmIChwcm9wZXJ0eVZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgT2JqZWN0LmtleXMocHJvcGVydHlWYWx1ZSBhcyBvYmplY3QpLmxlbmd0aCA+IDApIHtcblx0XHRcdGRlbGV0ZSBvTWV0YWRhdGEubWV0YWRhdGFDb250ZXh0c1tzQXR0cmlidXRlTmFtZV07XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgYkRvTm90UmVzb2x2ZSA9IGlzUHVibGljICYmIG9EZWZpbml0aW9uQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdLmlzUHVibGljID09PSBmYWxzZSAmJiBvTm9kZS5oYXNBdHRyaWJ1dGUoc0F0dHJpYnV0ZU5hbWUpO1xuXHRcdGNvbnN0IG9NZXRhZGF0YUNvbnRleHQgPSBfZ2V0TWV0YWRhdGFDb250ZXh0KG9TZXR0aW5ncywgb05vZGUsIHNBdHRyaWJ1dGVOYW1lLCBvVmlzaXRvciwgYkRvTm90UmVzb2x2ZSwgb01ldGFkYXRhLmlzT3BlbiA/PyBmYWxzZSk7XG5cdFx0aWYgKG9NZXRhZGF0YUNvbnRleHQpIHtcblx0XHRcdG9NZXRhZGF0YUNvbnRleHQubmFtZSA9IHNBdHRyaWJ1dGVOYW1lO1xuXHRcdFx0YWRkU2luZ2xlQ29udGV4dChtQ29udGV4dHMsIG9WaXNpdG9yLCBvTWV0YWRhdGFDb250ZXh0KTtcblx0XHRcdGlmIChcblx0XHRcdFx0KHNBdHRyaWJ1dGVOYW1lID09PSBcImVudGl0eVNldFwiIHx8IHNBdHRyaWJ1dGVOYW1lID09PSBcImNvbnRleHRQYXRoXCIpICYmXG5cdFx0XHRcdCFvU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzLmhhc093blByb3BlcnR5KHNBdHRyaWJ1dGVOYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdG9TZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdID0gbUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmIChzQXR0cmlidXRlTmFtZSA9PT0gXCJjb250ZXh0UGF0aFwiKSB7XG5cdFx0XHRcdG9TZXR0aW5ncy5jdXJyZW50Q29udGV4dFBhdGggPSBtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1Db250ZXh0c1tzQXR0cmlidXRlTmFtZV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzQXR0cmlidXRlTmFtZV0gPSBtQ29udGV4dHNbc0F0dHJpYnV0ZU5hbWVdO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZXNbc0F0dHJpYnV0ZU5hbWVdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBiaW5kaW5nIGNvdWxkbid0IGJlIHJlc29sdmVkIGNvbnNpZGVyIHRoYXQgdGhlcmUgd2FzIG5vIHZhbHVlIGhlcmVcblx0XHRcdFx0ZGVsZXRlIG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzW3NBdHRyaWJ1dGVOYW1lXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0bU1pc3NpbmdDb250ZXh0W3NBdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtTWlzc2luZ0NvbnRleHQ7XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdHBvc2l0aW9uOiBQb3NpdGlvbjtcblx0dHlwZTogXCJTbG90XCI7XG59O1xuYXN5bmMgZnVuY3Rpb24gcGFyc2VBZ2dyZWdhdGlvbihcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2ssXG5cdG9BZ2dyZWdhdGlvbj86IEVsZW1lbnQsXG5cdGRlZmluaXRpb24/OiBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbj4+IHtcblx0Y29uc3Qgb091dE9iamVjdHM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbj4gPSB7fTtcblx0aWYgKG9BZ2dyZWdhdGlvbiAmJiBvQWdncmVnYXRpb24uY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGZpcnN0RWxlbWVudENoaWxkID0gb0FnZ3JlZ2F0aW9uLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGlmIChmaXJzdEVsZW1lbnRDaGlsZD8ubmFtZXNwYWNlVVJJID09PSBYTUxURU1QTEFUSU5HX05TKSB7XG5cdFx0XHQvLyBJbiBjYXNlIHdlIGVuY291bnRlciBhIHRlbXBsYXRpbmcgdGFnLCBydW4gdGhlIHZpc2l0b3Igb24gaXQgYW5kIGNvbnRpbnVlIHdpdGggdGhlIHJlc3VsdGluZyBjaGlsZFxuXHRcdFx0Y29uc3Qgb1BhcmVudCA9IGZpcnN0RWxlbWVudENoaWxkLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAob1BhcmVudCkge1xuXHRcdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdE5vZGUoZmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBjaGlsZHJlbiA9IG9BZ2dyZWdhdGlvbi5jaGlsZHJlbjtcblx0XHRmb3IgKGxldCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgY2hpbGRyZW4ubGVuZ3RoOyBjaGlsZElkeCsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZERlZmluaXRpb24gPSBjaGlsZHJlbltjaGlsZElkeF07XG5cdFx0XHRsZXQgY2hpbGRLZXkgPVxuXHRcdFx0XHRjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIHx8XG5cdFx0XHRcdGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJpZFwiKSB8fFxuXHRcdFx0XHQoZGVmaW5pdGlvbj8uc2tpcEtleSAmJiBkZWZpbml0aW9uLm11bHRpcGxlID09PSBmYWxzZSAmJiB1aWQoKSk7XG5cdFx0XHRpZiAoIWNoaWxkS2V5ICYmIGRlZmluaXRpb24/LnJlYWxseVNraXBLZXkpIHtcblx0XHRcdFx0Y2hpbGRLZXkgPSB1aWQoKTtcblx0XHRcdH1cblx0XHRcdGlmIChjaGlsZEtleSkge1xuXHRcdFx0XHRjaGlsZEtleSA9IGBJbmxpbmVYTUxfJHtjaGlsZEtleX1gO1xuXHRcdFx0XHRjaGlsZERlZmluaXRpb24uc2V0QXR0cmlidXRlKFwia2V5XCIsIGNoaWxkS2V5KTtcblx0XHRcdFx0bGV0IGFnZ3JlZ2F0aW9uT2JqZWN0OiBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb24gPSB7XG5cdFx0XHRcdFx0a2V5OiBjaGlsZEtleSxcblx0XHRcdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRcdFx0cGxhY2VtZW50OiAoY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcInBsYWNlbWVudFwiKSBhcyBQbGFjZW1lbnQpIHx8IFBsYWNlbWVudC5BZnRlcixcblx0XHRcdFx0XHRcdGFuY2hvcjogY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImFuY2hvclwiKSB8fCB1bmRlZmluZWRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHR5cGU6IFwiU2xvdFwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChkZWZpbml0aW9uPy5wcm9jZXNzQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdFx0YWdncmVnYXRpb25PYmplY3QgPSBkZWZpbml0aW9uLnByb2Nlc3NBZ2dyZWdhdGlvbnMoY2hpbGREZWZpbml0aW9uLCBhZ2dyZWdhdGlvbk9iamVjdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0b091dE9iamVjdHNbYWdncmVnYXRpb25PYmplY3Qua2V5XSA9IGFnZ3JlZ2F0aW9uT2JqZWN0O1xuXHRcdFx0fSBlbHNlIGlmIChjaGlsZERlZmluaXRpb24udGFnTmFtZSAhPT0gXCJzbG90XCIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBUaGUgYWdncmVnYXRpb24gJHtjaGlsZERlZmluaXRpb24ubm9kZU5hbWV9IGlzIG1pc3NpbmcgYSBLZXkgYXR0cmlidXRlLiBJdCBpcyBub3QgZGlzcGxheWVkYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvT3V0T2JqZWN0cztcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBidWlsZGluZyBibG9jayBwcm9wZXJ0aWVzIHdoZW4gdGhlIHR5cGUgaXMgYW4gb2JqZWN0LlxuICogQHBhcmFtIGVsZW1lbnQgVGhlIFhNTCBlbGVtZW50IHRvIHBhcnNlXG4gKiBAcmV0dXJucyBUaGUgcHJvY2Vzc2VkIG9iamVjdFxuICovXG5mdW5jdGlvbiBwcm9jZXNzT2JqZWN0KGVsZW1lbnQ6IEVsZW1lbnQpOiBvYmplY3Qge1xuXHRjb25zdCBjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG5cdGNvbnN0IG15QXJyYXk6IEFycmF5PHVua25vd24+ID0gW107XG5cdGNvbnN0IG15T2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgZWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpKSB7XG5cdFx0bXlPYmplY3RbYXR0cmlidXRlTmFtZV0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0fVxuXHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGNoaWxkTm9kZU5hbWVzID0gT2JqZWN0LmtleXMoY2hpbGRyZW4pLm1hcCgoa2V5KSA9PiBjaGlsZHJlbltrZXkgYXMgdW5rbm93biBhcyBudW1iZXJdLmxvY2FsTmFtZSk7XG5cdFx0Y29uc3QgY2hpbGRJc0FycmF5ID0gY2hpbGROb2RlTmFtZXMubGVuZ3RoICE9PSBuZXcgU2V0KGNoaWxkTm9kZU5hbWVzKS5zaXplO1xuXHRcdGZvciAoY29uc3QgY2hpbGREZWZpbml0aW9uIG9mIGNoaWxkcmVuIGFzIHVua25vd24gYXMgQXJyYXk8RWxlbWVudD4pIHtcblx0XHRcdGlmIChjaGlsZElzQXJyYXkpIHtcblx0XHRcdFx0bXlBcnJheS5wdXNoKHByb2Nlc3NPYmplY3QoY2hpbGREZWZpbml0aW9uKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRteU9iamVjdFtjaGlsZERlZmluaXRpb24ubG9jYWxOYW1lXSA9IHByb2Nlc3NPYmplY3QoY2hpbGREZWZpbml0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNoaWxkSXNBcnJheSkge1xuXHRcdFx0cmV0dXJuIG15QXJyYXk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBteU9iamVjdDtcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIGNoaWxkIG5vZGVzIG9mIHRoZSBidWlsZGluZyBibG9jayBhbmQgcGFyc2VzIHRoZW0gYXMgZWl0aGVyIGFnZ3JlZ2F0aW9ucyBvciBvYmplY3QtL2FycmF5LWJhc2VkIHZhbHVlcy5cbiAqIEBwYXJhbSBvTm9kZSBUaGUgWE1MIG5vZGUgZm9yIHdoaWNoIHRvIHByb2Nlc3MgdGhlIGNoaWxkcmVuXG4gKiBAcGFyYW0gb1Zpc2l0b3IgVGhlIHZpc2l0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSBvTWV0YWRhdGEgVGhlIG1ldGFkYXRhIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBpc1B1YmxpYyBXaGV0aGVyIHRoZSBidWlsZGluZyBibG9jayBpcyB1c2VkIGluIGEgcHVibGljIGNvbnRleHQgb3Igbm90XG4gKiBAcGFyYW0gcHJvcGVydHlWYWx1ZXMgVGhlIHZhbHVlcyBvZiBhbHJlYWR5IHBhcnNlZCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHByb2Nlc3NlZCBjaGlsZHJlblxuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQ2hpbGRyZW4oXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b01ldGFkYXRhOiBUcmFuc2Zvcm1lZEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSxcblx0aXNQdWJsaWM6IGJvb2xlYW4sXG5cdHByb3BlcnR5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RWYWx1ZT5cbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgRWxlbWVudD4+IHtcblx0Y29uc3Qgb0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgRWxlbWVudD4gPSB7fTtcblx0aWYgKG9Ob2RlLmZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0bGV0IG9GaXJzdEVsZW1lbnRDaGlsZDogRWxlbWVudCB8IG51bGwgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZCBhcyBFbGVtZW50IHwgbnVsbDtcblxuXHRcdHdoaWxlIChvRmlyc3RFbGVtZW50Q2hpbGQgIT09IG51bGwpIHtcblx0XHRcdGlmIChvRmlyc3RFbGVtZW50Q2hpbGQubmFtZXNwYWNlVVJJID09PSBYTUxURU1QTEFUSU5HX05TKSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugd2UgZW5jb3VudGVyIGEgdGVtcGxhdGluZyB0YWcsIHJ1biB0aGUgdmlzaXRvciBvbiBpdCBhbmQgY29udGludWUgd2l0aCB0aGUgcmVzdWx0aW5nIGNoaWxkXG5cdFx0XHRcdGNvbnN0IG9QYXJlbnQgPSBvRmlyc3RFbGVtZW50Q2hpbGQucGFyZW50Tm9kZTtcblx0XHRcdFx0aWYgKG9QYXJlbnQpIHtcblx0XHRcdFx0XHRjb25zdCBpQ2hpbGRJbmRleCA9IEFycmF5LmZyb20ob1BhcmVudC5jaGlsZHJlbikuaW5kZXhPZihvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdGF3YWl0IG9WaXNpdG9yLnZpc2l0Tm9kZShvRmlyc3RFbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdG9GaXJzdEVsZW1lbnRDaGlsZCA9IG9QYXJlbnQuY2hpbGRyZW5baUNoaWxkSW5kZXhdID8gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF0gOiBudWxsO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE5vdCBzdXJlIGhvdyB0aGlzIGNvdWxkIGhhcHBlbiBidXQgSSBhbHNvIGRvbid0IHdhbnQgdG8gY3JlYXRlIGluZmluaXRlIGxvb3BzXG5cdFx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgc0NoaWxkTmFtZSA9IG9GaXJzdEVsZW1lbnRDaGlsZC5sb2NhbE5hbWU7XG5cdFx0XHRcdGxldCBzQWdncmVnYXRpb25OYW1lID0gc0NoaWxkTmFtZTtcblx0XHRcdFx0aWYgKHNBZ2dyZWdhdGlvbk5hbWVbMF0udG9VcHBlckNhc2UoKSA9PT0gc0FnZ3JlZ2F0aW9uTmFtZVswXSkge1xuXHRcdFx0XHRcdC8vIG5vdCBhIHN1YiBhZ2dyZWdhdGlvbiwgZ28gYmFjayB0byBkZWZhdWx0IEFnZ3JlZ2F0aW9uXG5cdFx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZSA9IG9NZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gfHwgXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkRlZmluaXRpb24gPSBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uICE9PSB1bmRlZmluZWQgJiYgIWFnZ3JlZ2F0aW9uRGVmaW5pdGlvbi5zbG90KSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyc2VkQWdncmVnYXRpb24gPSBhd2FpdCBwYXJzZUFnZ3JlZ2F0aW9uKG9WaXNpdG9yLCBvRmlyc3RFbGVtZW50Q2hpbGQsIGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbik7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBwYXJzZWRBZ2dyZWdhdGlvbjtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcnNlZEFnZ3JlZ2F0aW9uS2V5IGluIHBhcnNlZEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRvTWV0YWRhdGEuYWdncmVnYXRpb25zW3BhcnNlZEFnZ3JlZ2F0aW9uS2V5XSA9IHBhcnNlZEFnZ3JlZ2F0aW9uW3BhcnNlZEFnZ3JlZ2F0aW9uS2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb0ZpcnN0RWxlbWVudENoaWxkLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvRmlyc3RFbGVtZW50Q2hpbGQgPSBvTm9kZS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHR3aGlsZSAob0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBvTmV4dENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG9GaXJzdEVsZW1lbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cdFx0XHRjb25zdCBzQ2hpbGROYW1lID0gb0ZpcnN0RWxlbWVudENoaWxkLmxvY2FsTmFtZTtcblx0XHRcdGxldCBzQWdncmVnYXRpb25OYW1lID0gc0NoaWxkTmFtZTtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lWzBdLnRvVXBwZXJDYXNlKCkgPT09IHNBZ2dyZWdhdGlvbk5hbWVbMF0pIHtcblx0XHRcdFx0Ly8gbm90IGEgc3ViIGFnZ3JlZ2F0aW9uLCBnbyBiYWNrIHRvIGRlZmF1bHQgQWdncmVnYXRpb25cblx0XHRcdFx0c0FnZ3JlZ2F0aW9uTmFtZSA9IG9NZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0T2JqZWN0LmtleXMob01ldGFkYXRhLmFnZ3JlZ2F0aW9ucykuaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkgJiZcblx0XHRcdFx0KCFpc1B1YmxpYyB8fCBvTWV0YWRhdGEuYWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLmlzUHVibGljID09PSB0cnVlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IG9NZXRhZGF0YS5hZ2dyZWdhdGlvbnNbc0FnZ3JlZ2F0aW9uTmFtZV07XG5cdFx0XHRcdGlmICghYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QgJiYgb0ZpcnN0RWxlbWVudENoaWxkICE9PSBudWxsICYmIG9GaXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0bGV0IGNoaWxkRGVmaW5pdGlvbiA9IG9GaXJzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0XHR3aGlsZSAoY2hpbGREZWZpbml0aW9uKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXh0Q2hpbGQgPSBjaGlsZERlZmluaXRpb24ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRcdFx0aWYgKCFhZ2dyZWdhdGlvbkRlZmluaXRpb24uaGFzVmlydHVhbE5vZGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG9Ob2RlLm5hbWVzcGFjZVVSSSwgY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShcImtleVwiKSEpO1xuXHRcdFx0XHRcdFx0XHRjaGlsZFdyYXBwZXIuYXBwZW5kQ2hpbGQoY2hpbGREZWZpbml0aW9uKTtcblx0XHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tjaGlsZERlZmluaXRpb24uZ2V0QXR0cmlidXRlKFwia2V5XCIpIV0gPSBjaGlsZFdyYXBwZXI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW2NoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGUoXCJrZXlcIikhXSA9IGNoaWxkRGVmaW5pdGlvbjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y2hpbGREZWZpbml0aW9uLnJlbW92ZUF0dHJpYnV0ZShcImtleVwiKTtcblx0XHRcdFx0XHRcdGNoaWxkRGVmaW5pdGlvbiA9IG5leHRDaGlsZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWdncmVnYXRpb25EZWZpbml0aW9uLnNsb3QpIHtcblx0XHRcdFx0XHRhd2FpdCBvVmlzaXRvci52aXNpdE5vZGUob0ZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSAhPT0gc0NoaWxkTmFtZSkge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvTm9kZS5uYW1lc3BhY2VVUkksIHNBZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdID0gb05ld0NoaWxkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b0FnZ3JlZ2F0aW9uc1tzQWdncmVnYXRpb25OYW1lXS5hcHBlbmRDaGlsZChvRmlyc3RFbGVtZW50Q2hpbGQuY2xvbmVOb2RlKHRydWUpIGFzIEVsZW1lbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdID0gb0ZpcnN0RWxlbWVudENoaWxkLmNsb25lTm9kZSh0cnVlKSBhcyBFbGVtZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhvTWV0YWRhdGEucHJvcGVydGllcykuaW5jbHVkZXMoc0FnZ3JlZ2F0aW9uTmFtZSkpIHtcblx0XHRcdFx0YXdhaXQgb1Zpc2l0b3IudmlzaXROb2RlKG9GaXJzdEVsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdGlmIChvTWV0YWRhdGEucHJvcGVydGllc1tzQWdncmVnYXRpb25OYW1lXS50eXBlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Qcm9wZXJ0eVZhbHVlcyA9IHByb2Nlc3NPYmplY3Qob0ZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1tzQWdncmVnYXRpb25OYW1lXSA9IGFnZ3JlZ2F0aW9uUHJvcGVydHlWYWx1ZXM7XG5cdFx0XHRcdH0gZWxzZSBpZiAob01ldGFkYXRhLnByb3BlcnRpZXNbc0FnZ3JlZ2F0aW9uTmFtZV0udHlwZSA9PT0gXCJhcnJheVwiKSB7XG5cdFx0XHRcdFx0aWYgKG9GaXJzdEVsZW1lbnRDaGlsZCAhPT0gbnVsbCAmJiBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBvRmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW47XG5cdFx0XHRcdFx0XHRjb25zdCBvT3V0T2JqZWN0czogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPltdID0gW107XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBjaGlsZElkeCA9IDA7IGNoaWxkSWR4IDwgY2hpbGRyZW4ubGVuZ3RoOyBjaGlsZElkeCsrKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoaWxkRGVmaW5pdGlvbiA9IGNoaWxkcmVuW2NoaWxkSWR4XTtcblx0XHRcdFx0XHRcdFx0Ly8gbm9uIGtleWVkIGNoaWxkLCBqdXN0IGFkZCBpdCB0byB0aGUgYWdncmVnYXRpb25cblx0XHRcdFx0XHRcdFx0Y29uc3QgbXlDaGlsZDogUmVjb3JkPHN0cmluZywgT2JqZWN0VmFsdWUyPiA9IHt9O1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVOYW1lcyA9IGNoaWxkRGVmaW5pdGlvbi5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGF0dHJpYnV0ZU5hbWUgb2YgYXR0cmlidXRlTmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRteUNoaWxkW2F0dHJpYnV0ZU5hbWVdID0gY2hpbGREZWZpbml0aW9uLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvT3V0T2JqZWN0cy5wdXNoKG15Q2hpbGQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbc0FnZ3JlZ2F0aW9uTmFtZV0gPSBvT3V0T2JqZWN0cztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0b0ZpcnN0RWxlbWVudENoaWxkID0gb05leHRDaGlsZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9BZ2dyZWdhdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTbG90cyhcblx0b0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgRWxlbWVudD4sXG5cdG9NZXRhZGF0YUFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj4sXG5cdG9Ob2RlOiBFbGVtZW50LFxuXHRwcm9jZXNzQ3VzdG9tRGF0YSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0aWYgKE9iamVjdC5rZXlzKG9BZ2dyZWdhdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRPYmplY3Qua2V5cyhvQWdncmVnYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IG9BZ2dyZWdhdGlvbkVsZW1lbnQgPSBvQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdO1xuXHRcdFx0aWYgKG9Ob2RlICE9PSBudWxsICYmIG9Ob2RlICE9PSB1bmRlZmluZWQgJiYgb0FnZ3JlZ2F0aW9uRWxlbWVudCkge1xuXHRcdFx0XHQvLyBzbG90cyBjYW4gaGF2ZSA6OiBhcyBrZXlzIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGFnZ3JlZ2F0aW9uIG5hbWUgdGhlcmVmb3JlIHJlcGxhY2luZyB0aGVtXG5cdFx0XHRcdGNvbnN0IG9FbGVtZW50Q2hpbGQgPSBvQWdncmVnYXRpb25FbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHRpZiAoIVtcImRlcGVuZGVudHNcIiwgXCJjdXN0b21EYXRhXCIsIFwibGF5b3V0RGF0YVwiXS5pbmNsdWRlcyhzQWdncmVnYXRpb25OYW1lKSkge1xuXHRcdFx0XHRcdGNvbnN0IHNTbG90TmFtZSA9XG5cdFx0XHRcdFx0XHQob01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQgJiYgb01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLnNsb3QpIHx8XG5cdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRFbGVtZW50ID0gb05vZGUucXVlcnlTZWxlY3Rvcihgc2xvdFtuYW1lPScke3NTbG90TmFtZX0nXWApO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0RWxlbWVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb05ld0NoaWxkID0gcHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudChvTm9kZSwgc0FnZ3JlZ2F0aW9uTmFtZSwgb0VsZW1lbnRDaGlsZCk7XG5cdFx0XHRcdFx0XHRvVGFyZ2V0RWxlbWVudC5yZXBsYWNlV2l0aCguLi4ob05ld0NoaWxkLmNoaWxkcmVuIGFzIHVua25vd24gYXMgTm9kZVtdKSk7IC8vIFNvbWVob3cgVFMgZG9lc24ndCBsaWtlIHRoaXMgYnV0IHRoZSBkb2N1bWVudGF0aW9uIHNheXMgaXMgc2hvdWxkIHdvcmtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJvY2Vzc0N1c3RvbURhdGEgJiYgb0VsZW1lbnRDaGlsZCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbnN0IHNTbG90TmFtZSA9XG5cdFx0XHRcdFx0XHQob01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdICE9PSB1bmRlZmluZWQgJiYgb01ldGFkYXRhQWdncmVnYXRpb25zW3NBZ2dyZWdhdGlvbk5hbWVdLnNsb3QpIHx8XG5cdFx0XHRcdFx0XHRzQWdncmVnYXRpb25OYW1lO1xuXHRcdFx0XHRcdGNvbnN0IG9UYXJnZXRFbGVtZW50ID0gb05vZGUucXVlcnlTZWxlY3Rvcihgc2xvdFtuYW1lPScke3NTbG90TmFtZX0nXWApO1xuXHRcdFx0XHRcdGNvbnN0IG9OZXdDaGlsZCA9IHByZXBhcmVBZ2dyZWdhdGlvbkVsZW1lbnQob05vZGUsIHNBZ2dyZWdhdGlvbk5hbWUsIG9FbGVtZW50Q2hpbGQpO1xuXHRcdFx0XHRcdGlmIChvVGFyZ2V0RWxlbWVudCAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0b1RhcmdldEVsZW1lbnQucmVwbGFjZVdpdGgoLi4uKG9OZXdDaGlsZC5jaGlsZHJlbiBhcyB1bmtub3duIGFzIE5vZGVbXSkpOyAvLyBTb21laG93IFRTIGRvZXNuJ3QgbGlrZSB0aGlzIGJ1dCB0aGUgZG9jdW1lbnRhdGlvbiBzYXlzIGlzIHNob3VsZCB3b3JrXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9Ob2RlLmFwcGVuZENoaWxkKG9OZXdDaGlsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJlcGFyZUFnZ3JlZ2F0aW9uRWxlbWVudChvTm9kZTogRWxlbWVudCwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLCBvRWxlbWVudENoaWxkOiBFbGVtZW50IHwgbnVsbCk6IEVsZW1lbnQge1xuXHRjb25zdCBvTmV3Q2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMob05vZGUubmFtZXNwYWNlVVJJLCBzQWdncmVnYXRpb25OYW1lLnJlcGxhY2UoLzovZ2ksIFwiX1wiKSk7XG5cdHdoaWxlIChvRWxlbWVudENoaWxkKSB7XG5cdFx0Y29uc3Qgb05leHRDaGlsZCA9IG9FbGVtZW50Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdG9OZXdDaGlsZC5hcHBlbmRDaGlsZChvRWxlbWVudENoaWxkKTtcblx0XHRvRWxlbWVudENoaWxkID0gb05leHRDaGlsZDtcblx0fVxuXHRyZXR1cm4gb05ld0NoaWxkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzQnVpbGRpbmdCbG9jayhcblx0QnVpbGRpbmdCbG9ja0NsYXNzOiB0eXBlb2YgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlLFxuXHRvTm9kZTogRWxlbWVudCxcblx0b1Zpc2l0b3I6IElWaXNpdG9yQ2FsbGJhY2ssXG5cdGlzUHVibGljID0gZmFsc2Vcbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBvTWV0YWRhdGEgPSB0cmFuc2Zvcm1NZXRhZGF0YShCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEpO1xuXG5cdGNvbnN0IHNGcmFnbWVudE5hbWUgPSBvTWV0YWRhdGEuZnJhZ21lbnQgPz8gYCR7b01ldGFkYXRhLm5hbWVzcGFjZSA/PyBvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlfS4ke29NZXRhZGF0YS54bWxUYWcgPz8gb01ldGFkYXRhLm5hbWV9YDtcblxuXHRjb25zdCBtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQ+ID0ge307XG5cdGNvbnN0IG9TZXR0aW5ncyA9IG9WaXNpdG9yLmdldFNldHRpbmdzKCk7XG5cblx0Ly8gQWRkIGFuIGVtcHR5IGNvbnZlcnRlciBjb250ZXh0IGlmIHRoZXJlIGlzIG5vbmUgaW4gb3JkZXIgdG8gaGF2ZSBhIHBsYWNlIHRvIHN0b3JlIG9iamVjdCB2YWx1ZXNcblx0b1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0ID8/PSBuZXcgSlNPTk1vZGVsKCk7XG5cblx0Ly9JbmplY3Qgc3RvcmFnZSBmb3IgbWFjcm9zXG5cdGlmICghb1NldHRpbmdzW3NGcmFnbWVudE5hbWVdKSB7XG5cdFx0b1NldHRpbmdzW3NGcmFnbWVudE5hbWVdID0ge307XG5cdH1cblxuXHQvLyBGaXJzdCBvZiBhbGwgd2UgbmVlZCB0byB2aXNpdCB0aGUgYXR0cmlidXRlcyB0byByZXNvbHZlIHRoZSBwcm9wZXJ0aWVzIGFuZCB0aGUgbWV0YWRhdGEgY29udGV4dHNcblx0Y29uc3QgcHJvcGVydHlWYWx1ZXMgPSBhd2FpdCBwcm9jZXNzUHJvcGVydGllcyhvTWV0YWRhdGEsIG9Ob2RlLCBpc1B1YmxpYywgb1Zpc2l0b3IpO1xuXHRjb25zdCBpbml0aWFsS2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnR5VmFsdWVzKTtcblx0Y29uc3QgbU1pc3NpbmdDb250ZXh0ID0gcHJvY2Vzc0NvbnRleHRzKG9NZXRhZGF0YSwgb1NldHRpbmdzLCBvTm9kZSwgaXNQdWJsaWMsIG9WaXNpdG9yLCBtQ29udGV4dHMsIHByb3BlcnR5VmFsdWVzKTtcblxuXHR0cnkge1xuXHRcdC8vIEFnZ3JlZ2F0aW9uIGFuZCBjb21wbGV4IHR5cGUgc3VwcG9ydFxuXHRcdGNvbnN0IG9BZ2dyZWdhdGlvbnMgPSBhd2FpdCBwcm9jZXNzQ2hpbGRyZW4ob05vZGUsIG9WaXNpdG9yLCBvTWV0YWRhdGEsIGlzUHVibGljLCBwcm9wZXJ0eVZhbHVlcyk7XG5cdFx0bGV0IG9Db250cm9sQ29uZmlnID0ge307XG5cblx0XHRpZiAob1NldHRpbmdzLm1vZGVscy52aWV3RGF0YSkge1xuXHRcdFx0Ly8gT25seSB1c2VkIGluIHRoZSBGaWVsZCBtYWNybyBhbmQgZXZlbiB0aGVuIG1heWJlIG5vdCByZWFsbHkgdXNlZnVsXG5cdFx0XHRvQ29udHJvbENvbmZpZyA9IG9TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEuZ2V0UHJvcGVydHkoXCIvY29udHJvbENvbmZpZ3VyYXRpb25cIik7XG5cdFx0fVxuXHRcdGxldCBwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcyA9IHByb3BlcnR5VmFsdWVzO1xuXG5cdFx0T2JqZWN0LmtleXMocHJvcGVydHlWYWx1ZXMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG5cdFx0XHRsZXQgb0RhdGEgPSBwcm9wZXJ0eVZhbHVlc1twcm9wTmFtZV0gYXMgdW5rbm93biBhcyBDb250ZXh0O1xuXHRcdFx0Ly9jaGVjayBmb3IgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIC8gb3ZlcndyaXRlIHBhcmFtZXRlcnNcblx0XHRcdGNvbnN0IG9yaWdpbmFsRGVmaW5pdGlvbiA9IEJ1aWxkaW5nQmxvY2tDbGFzcz8ubWV0YWRhdGE/LnByb3BlcnRpZXNbcHJvcE5hbWVdO1xuXHRcdFx0aWYgKG9yaWdpbmFsRGVmaW5pdGlvbj8udmFsaWRhdGUpIHtcblx0XHRcdFx0b0RhdGEgPSBvcmlnaW5hbERlZmluaXRpb24udmFsaWRhdGUob0RhdGEpIHx8IG9EYXRhO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9EYXRhPy5pc0E/LihTQVBfVUlfTU9ERUxfQ09OVEVYVCkgJiYgIW9EYXRhLmdldE1vZGVsKCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTWV0YU1vZGVsXCIpKSB7XG5cdFx0XHRcdHByb3BlcnR5VmFsdWVzW3Byb3BOYW1lXSA9IG9EYXRhLmdldE9iamVjdCgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHByb3BlcnR5VmFsdWVzLmlzUHVibGljID0gaXNQdWJsaWM7XG5cblx0XHRjb25zdCBvSW5zdGFuY2UgPSBuZXcgQnVpbGRpbmdCbG9ja0NsYXNzKHsgLi4ucHJvcGVydHlWYWx1ZXMsIC4uLm9BZ2dyZWdhdGlvbnMgfSwgb0NvbnRyb2xDb25maWcsIG9TZXR0aW5ncyk7XG5cdFx0cHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXMgPSBvSW5zdGFuY2UuZ2V0UHJvcGVydGllcygpO1xuXHRcdE9iamVjdC5rZXlzKG9NZXRhZGF0YS5tZXRhZGF0YUNvbnRleHRzKS5mb3JFYWNoKGZ1bmN0aW9uIChzQ29udGV4dE5hbWU6IHN0cmluZykge1xuXHRcdFx0aWYgKHByb2Nlc3NlZFByb3BlcnR5VmFsdWVzLmhhc093blByb3BlcnR5KHNDb250ZXh0TmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gcHJvY2Vzc2VkUHJvcGVydHlWYWx1ZXNbc0NvbnRleHROYW1lXTtcblx0XHRcdFx0aWYgKGlzQ29udGV4dCh0YXJnZXRPYmplY3QpKSB7XG5cdFx0XHRcdFx0bUNvbnRleHRzW3NDb250ZXh0TmFtZV0gPSB0YXJnZXRPYmplY3QgYXMgQ29udGV4dDtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgdGFyZ2V0T2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXR0cmlidXRlVmFsdWUgPSBzdG9yZU9iamVjdFZhbHVlKHRhcmdldE9iamVjdCk7XG5cdFx0XHRcdFx0b1NldHRpbmdzLm1vZGVscy5jb252ZXJ0ZXJDb250ZXh0LnNldFByb3BlcnR5KGF0dHJpYnV0ZVZhbHVlLCB0YXJnZXRPYmplY3QpO1xuXHRcdFx0XHRcdGNvbnN0IG5ld0NvbnRleHQgPSBvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuY3JlYXRlQmluZGluZ0NvbnRleHQoYXR0cmlidXRlVmFsdWUpITtcblx0XHRcdFx0XHR1bnN0b3JlT2JqZWN0VmFsdWUoYXR0cmlidXRlVmFsdWUpO1xuXHRcdFx0XHRcdG1Db250ZXh0c1tzQ29udGV4dE5hbWVdID0gbmV3Q29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb0F0dHJpYnV0ZXNNb2RlbDogSlNPTk1vZGVsID0gbmV3IEF0dHJpYnV0ZU1vZGVsKG9Ob2RlLCBwcm9jZXNzZWRQcm9wZXJ0eVZhbHVlcywgQnVpbGRpbmdCbG9ja0NsYXNzKTtcblx0XHRtQ29udGV4dHNbXCJ0aGlzXCJdID0gb0F0dHJpYnV0ZXNNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIik7XG5cdFx0bGV0IG9QcmV2aW91c01hY3JvSW5mbzogTWFjcm9JbmZvIHwgdW5kZWZpbmVkO1xuXHRcdC8vIGNvcmU6cmVxdWlyZSBuZWVkIHRvIGJlIGRlZmluZWQgb24gdGhlIG5vZGUgaXRzZWxmIHRvIGJlIHBpY2tlZCB1cCBkdWUgdG8gdGhlIHRlbXBsYXRpbmcgc3RlcFxuXHRcdGNvbnN0IGNvcmVSZXF1aXJlID0gb05vZGU/LmdldEF0dHJpYnV0ZShcImNvcmU6cmVxdWlyZVwiKSB8fCB1bmRlZmluZWQ7XG5cblx0XHQvLyBLZWVwIHRyYWNrXG5cdFx0aWYgKFRyYWNlSW5mby5pc1RyYWNlSW5mb0FjdGl2ZSgpKSB7XG5cdFx0XHRjb25zdCBvVHJhY2VJbmZvID0gVHJhY2VJbmZvLnRyYWNlTWFjcm9DYWxscyhzRnJhZ21lbnROYW1lLCBvTWV0YWRhdGEsIG1Db250ZXh0cywgb05vZGUsIG9WaXNpdG9yKTtcblx0XHRcdGlmIChvVHJhY2VJbmZvPy5tYWNyb0luZm8pIHtcblx0XHRcdFx0b1ByZXZpb3VzTWFjcm9JbmZvID0gb1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXTtcblx0XHRcdFx0b1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXSA9IG9UcmFjZUluZm8ubWFjcm9JbmZvO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR2YWxpZGF0ZU1hY3JvU2lnbmF0dXJlKHNGcmFnbWVudE5hbWUsIG9NZXRhZGF0YSwgbUNvbnRleHRzLCBvTm9kZSk7XG5cblx0XHRjb25zdCBvQ29udGV4dFZpc2l0b3IgPSBvVmlzaXRvci53aXRoKG1Db250ZXh0cywgb01ldGFkYXRhLmlzT3BlbiAhPT0gdW5kZWZpbmVkID8gIW9NZXRhZGF0YS5pc09wZW4gOiB0cnVlKTtcblx0XHRjb25zdCBvUGFyZW50ID0gb05vZGUucGFyZW50Tm9kZTtcblxuXHRcdGxldCBpQ2hpbGRJbmRleDogbnVtYmVyO1xuXHRcdGxldCBvUHJvbWlzZTtcblx0XHRpZiAob1BhcmVudCkge1xuXHRcdFx0aUNoaWxkSW5kZXggPSBBcnJheS5mcm9tKG9QYXJlbnQuY2hpbGRyZW4pLmluZGV4T2Yob05vZGUpO1xuXG5cdFx0XHRpZiAob01ldGFkYXRhLmZyYWdtZW50KSB7XG5cdFx0XHRcdG9Qcm9taXNlID0gb0NvbnRleHRWaXNpdG9yLmluc2VydEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9Ob2RlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9sZEtleXMgPSBPYmplY3Qua2V5cyh0ZW1wb3JhcnlPYmplY3RTdG9yZSk7XG5cdFx0XHRcdGNvbnN0IHRlbXBsYXRlU3RyaW5nID0gYXdhaXQganN4LnJlbmRlckFzWE1MKGFzeW5jICgpID0+IG9JbnN0YW5jZS5nZXRUZW1wbGF0ZSEob05vZGUpKTtcblxuXHRcdFx0XHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLmlzUnVudGltZSkge1xuXHRcdFx0XHRcdC8vIEZvciBydW50aW1lIGJ1aWxkaW5nIGJsb2Nrcywgd2UgbmVlZCB0byBhdHRhY2ggYWxsIG9iamVjdHMgdG8gdGhlIGNvbnZlcnRlckNvbnRleHQgZGlyZWN0bHksIGFzIHRoZSBhY3R1YWwgcmVuZGVyaW5nIHRha2VzIHBsYWNlIGF0IHJ1bnRpbWVcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHN0b3JlS2V5IGluIHRlbXBvcmFyeU9iamVjdFN0b3JlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW9sZEtleXMuaW5jbHVkZXMoc3RvcmVLZXkpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB1bnN0b3JlT2JqZWN0VmFsdWUoc3RvcmVLZXkpO1xuXHRcdFx0XHRcdFx0XHRvU2V0dGluZ3MubW9kZWxzLmNvbnZlcnRlckNvbnRleHQuc2V0UHJvcGVydHkoc3RvcmVLZXksIGRhdGEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBoYXNFcnJvciA9IFwiXCI7XG5cdFx0XHRcdGlmICh0ZW1wbGF0ZVN0cmluZykge1xuXHRcdFx0XHRcdGxldCBoYXNQYXJzZUVycm9yID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV0IHBhcnNlZFRlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcodGVtcGxhdGVTdHJpbmcsIHRydWUpO1xuXHRcdFx0XHRcdC8vIEZvciBzYWZldHkgcHVycG9zZSB3ZSB0cnkgdG8gZGV0ZWN0IHRyYWlsaW5nIHRleHQgaW4gYmV0d2VlbiBYTUwgVGFnc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJzZWRUZW1wbGF0ZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXRlciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihlbGVtZW50LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCk7XG5cdFx0XHRcdFx0XHRsZXQgdGV4dG5vZGUgPSBpdGVyLm5leHROb2RlKCk7XG5cdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09IFwicGFyc2VyZXJyb3JcIikge1xuXHRcdFx0XHRcdFx0XHRoYXNQYXJzZUVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHdoaWxlICh0ZXh0bm9kZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAodGV4dG5vZGUudGV4dENvbnRlbnQgJiYgdGV4dG5vZGUudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFcnJvciA9IHRleHRub2RlLnRleHRDb250ZW50O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRleHRub2RlID0gaXRlci5uZXh0Tm9kZSgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChoYXNQYXJzZUVycm9yKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIHBhcnNlZXJyb3Igd2hpbGUgcHJvY2Vzc2luZyB0aGUgWE1MIGl0IG1lYW5zIHRoZSBYTUwgaXRzZWxmIGlzIG1hbGZvcm1lZCwgYXMgc3VjaCB3ZSByZXJ1biB0aGUgdGVtcGxhdGUgcHJvY2Vzc1xuXHRcdFx0XHRcdFx0Ly8gU2V0dGluZyBpc1RyYWNlTW9kZSB0cnVlIHdpbGwgbWFrZSBpdCBzbyB0aGF0IGVhY2ggeG1sYCBleHByZXNzaW9uIGlzIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGZyb20gWE1MIHBlcnNwZWN0aXZlXG5cdFx0XHRcdFx0XHQvLyBJZiBhbiBlcnJvciBpcyBmb3VuZCBpdCdzIHJldHVybmVkIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBmcmFnbWVudFxuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7b01ldGFkYXRhLnhtbFRhZyB8fCBvTWV0YWRhdGEubmFtZX1gLCBoYXNFcnJvcik7XG5cdFx0XHRcdFx0XHRwYXJzZWRUZW1wbGF0ZSA9IChhd2FpdCBwcm9jZXNzWG1sSW5UcmFjZShhc3luYyAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGluaXRpYWxUZW1wbGF0ZSA9IGF3YWl0IGpzeC5yZW5kZXJBc1hNTChhc3luYyAoKSA9PiBvSW5zdGFuY2UuZ2V0VGVtcGxhdGUhKG9Ob2RlKSk7XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhcnNlWE1MU3RyaW5nKGluaXRpYWxUZW1wbGF0ZSA/PyBcIlwiLCB0cnVlKTtcblx0XHRcdFx0XHRcdH0pKSBhcyBFbGVtZW50W107XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChoYXNFcnJvci5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyB0cmFpbGluZyB0ZXh0IHdlIGNyZWF0ZSBhIHN0YW5kYXJkIGVycm9yIGFuZCBkaXNwbGF5IGl0LlxuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7b01ldGFkYXRhLnhtbFRhZyB8fCBvTWV0YWRhdGEubmFtZX1gKTtcblx0XHRcdFx0XHRcdGNvbnN0IG9FcnJvclRleHQgPSBjcmVhdGVFcnJvclhNTChcblx0XHRcdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0XHRcdGBFcnJvciB3aGlsZSBwcm9jZXNzaW5nIGJ1aWxkaW5nIGJsb2NrICR7b01ldGFkYXRhLnhtbFRhZyB8fCBvTWV0YWRhdGEubmFtZX1gLFxuXHRcdFx0XHRcdFx0XHRcdGBUcmFpbGluZyB0ZXh0IHdhcyBmb3VuZCBpbiB0aGUgWE1MOiAke2hhc0Vycm9yfWBcblx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0cGFyc2VkVGVtcGxhdGUubWFwKCh0ZW1wbGF0ZSkgPT4gdGVtcGxhdGUub3V0ZXJIVE1MKS5qb2luKFwiXFxuXCIpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cGFyc2VkVGVtcGxhdGUgPSBwYXJzZVhNTFN0cmluZyhvRXJyb3JUZXh0LCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b05vZGUucmVwbGFjZVdpdGgoLi4ucGFyc2VkVGVtcGxhdGUpO1xuXG5cdFx0XHRcdFx0Y29uc3QgdmlzaXRlZE5vZGVzID0gcGFyc2VkVGVtcGxhdGUubWFwKGFzeW5jIChpbnRlcm5hbE5vZGUpID0+IHtcblx0XHRcdFx0XHRcdHByb2Nlc3NTbG90cyhvQWdncmVnYXRpb25zLCBvTWV0YWRhdGEuYWdncmVnYXRpb25zLCBpbnRlcm5hbE5vZGUsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dFZpc2l0b3IudmlzaXROb2RlKGludGVybmFsTm9kZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b1Byb21pc2UgPSBQcm9taXNlLmFsbCh2aXNpdGVkTm9kZXMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9Ob2RlLnJlbW92ZSgpO1xuXHRcdFx0XHRcdG9Qcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgb1Byb21pc2U7XG5cdFx0XHRjb25zdCBvTWFjcm9FbGVtZW50ID0gb1BhcmVudC5jaGlsZHJlbltpQ2hpbGRJbmRleF07XG5cdFx0XHRwcm9jZXNzU2xvdHMob0FnZ3JlZ2F0aW9ucywgb01ldGFkYXRhLmFnZ3JlZ2F0aW9ucywgb01hY3JvRWxlbWVudCwgdHJ1ZSk7XG5cdFx0XHRpZiAob01hY3JvRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IG9SZW1haW5pbmdTbG90cyA9IG9NYWNyb0VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNsb3RcIik7XG5cdFx0XHRcdG9SZW1haW5pbmdTbG90cy5mb3JFYWNoKGZ1bmN0aW9uIChvU2xvdEVsZW1lbnQpIHtcblx0XHRcdFx0XHRvU2xvdEVsZW1lbnQucmVtb3ZlKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAoY29yZVJlcXVpcmUpIHtcblx0XHRcdFx0XHRsZXQgcmVxdWlyZU9uTWFjcm8gPSBvTWFjcm9FbGVtZW50LmdldEF0dHJpYnV0ZU5TKFwic2FwLnVpLmNvcmVcIiwgXCJyZXF1aXJlXCIpO1xuXHRcdFx0XHRcdGlmIChyZXF1aXJlT25NYWNybykge1xuXHRcdFx0XHRcdFx0cmVxdWlyZU9uTWFjcm8gPSByZXF1aXJlT25NYWNyby5zdWJzdHJpbmcoMCwgcmVxdWlyZU9uTWFjcm8ubGVuZ3RoIC0gMSkgKyBcIixcIiArIGNvcmVSZXF1aXJlLnN1YnN0cmluZygxKTsgLy8gUmVtb3ZlIGxhc3QgfSBhbmQgZmlyc3Qge1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlT25NYWNybyA9IGNvcmVSZXF1aXJlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvTWFjcm9FbGVtZW50LnNldEF0dHJpYnV0ZU5TKFwic2FwLnVpLmNvcmVcIiwgXCJjb3JlOnJlcXVpcmVcIiwgcmVxdWlyZU9uTWFjcm8pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwcm9wZXJ0eVZhbHVlcy5jbGFzcyAmJiAhQnVpbGRpbmdCbG9ja0NsYXNzLmlzUnVudGltZSkge1xuXHRcdFx0XHRcdG9NYWNyb0VsZW1lbnQuY2xhc3NMaXN0LmFkZChwcm9wZXJ0eVZhbHVlcy5jbGFzcyBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChvUHJldmlvdXNNYWNyb0luZm8pIHtcblx0XHRcdC8vcmVzdG9yZSBtYWNybyBpbmZvIGlmIGF2YWlsYWJsZVxuXHRcdFx0b1NldHRpbmdzW1wiX21hY3JvSW5mb1wiXSA9IG9QcmV2aW91c01hY3JvSW5mbztcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZXRlIG9TZXR0aW5nc1tcIl9tYWNyb0luZm9cIl07XG5cdFx0fVxuXHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0Ly8gSW4gY2FzZSB0aGVyZSBpcyBhIGdlbmVyaWMgZXJyb3IgKHVzdWFsbHkgY29kZSBlcnJvciksIHdlIHJldHJpZXZlIHRoZSBjdXJyZW50IGNvbnRleHQgaW5mb3JtYXRpb24gYW5kIGNyZWF0ZSBhIGRlZGljYXRlZCBlcnJvciBtZXNzYWdlXG5cblx0XHRjb25zdCB0cmFjZURldGFpbHMgPSB7XG5cdFx0XHRpbml0aWFsUHJvcGVydGllczoge30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRyZXNvbHZlZFByb3BlcnRpZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0bWlzc2luZ0NvbnRleHRzOiBtTWlzc2luZ0NvbnRleHRcblx0XHR9O1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIGluaXRpYWxLZXlzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZXNbcHJvcGVydHlOYW1lXTtcblx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0dHJhY2VEZXRhaWxzLmluaXRpYWxQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0cGF0aDogcHJvcGVydHlWYWx1ZS5nZXRQYXRoKCksXG5cdFx0XHRcdFx0dmFsdWU6IHByb3BlcnR5VmFsdWUuZ2V0T2JqZWN0KClcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyYWNlRGV0YWlscy5pbml0aWFsUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydHlWYWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydHlWYWx1ZXMpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKCFpbml0aWFsS2V5cy5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRcdGlmIChpc0NvbnRleHQocHJvcGVydHlWYWx1ZSkpIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRwYXRoOiBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdHZhbHVlOiBwcm9wZXJ0eVZhbHVlLmdldE9iamVjdCgpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cmFjZURldGFpbHMucmVzb2x2ZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0Y29uc3Qgb0Vycm9yID0gY3JlYXRlRXJyb3JYTUwoXG5cdFx0XHRbYEVycm9yIHdoaWxlIHByb2Nlc3NpbmcgYnVpbGRpbmcgYmxvY2sgJHtvTWV0YWRhdGEubmFtZX1gXSxcblx0XHRcdG9Ob2RlLm91dGVySFRNTCxcblx0XHRcdHRyYWNlRGV0YWlscyxcblx0XHRcdChlIGFzIEVycm9yKS5zdGFja1xuXHRcdCk7XG5cdFx0Y29uc3Qgb1RlbXBsYXRlID0gcGFyc2VYTUxTdHJpbmcob0Vycm9yLCB0cnVlKTtcblx0XHRvTm9kZS5yZXBsYWNlV2l0aCguLi5vVGVtcGxhdGUpO1xuXHR9XG59XG5mdW5jdGlvbiBhZGRTaW5nbGVDb250ZXh0KFxuXHRtQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIENvbnRleHQgfCB1bmRlZmluZWQ+LFxuXHRvVmlzaXRvcjogSVZpc2l0b3JDYWxsYmFjayxcblx0b0N0eDoge1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0cGF0aDogc3RyaW5nO1xuXHRcdG1vZGVsPzogc3RyaW5nO1xuXHR9XG4pOiB2b2lkIHtcblx0Y29uc3Qgc0tleSA9IChvQ3R4Lm5hbWUgfHwgb0N0eC5tb2RlbCB8fCB1bmRlZmluZWQpIGFzIHN0cmluZztcblx0aWYgKG1Db250ZXh0c1tzS2V5XSkge1xuXHRcdHJldHVybjsgLy8gZG8gbm90IGFkZCB0d2ljZVxuXHR9XG5cdHRyeSB7XG5cdFx0bGV0IHNDb250ZXh0UGF0aCA9IG9DdHgucGF0aDtcblx0XHRpZiAob0N0eC5tb2RlbCAhPT0gbnVsbCkge1xuXHRcdFx0c0NvbnRleHRQYXRoID0gYCR7b0N0eC5tb2RlbH0+JHtzQ29udGV4dFBhdGh9YDtcblx0XHR9XG5cdFx0Y29uc3QgbVNldHRpbmcgPSBvVmlzaXRvci5nZXRTZXR0aW5ncygpO1xuXHRcdGlmIChvQ3R4Lm1vZGVsID09PSBcImNvbnZlcnRlckNvbnRleHRcIiAmJiBvQ3R4LnBhdGgubGVuZ3RoID4gMCkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWxdLmdldENvbnRleHQob0N0eC5wYXRoIC8qLCBtU2V0dGluZy5iaW5kaW5nQ29udGV4dHNbb0N0eC5tb2RlbF0qLyk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSBpZiAoIW1TZXR0aW5nLmJpbmRpbmdDb250ZXh0c1tvQ3R4Lm1vZGVsIV0gJiYgbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXSkge1xuXHRcdFx0bUNvbnRleHRzW3NLZXldID0gbVNldHRpbmcubW9kZWxzW29DdHgubW9kZWwhXS5nZXRDb250ZXh0KG9DdHgucGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtQ29udGV4dHNbc0tleV0gPSBvVmlzaXRvci5nZXRDb250ZXh0KHNDb250ZXh0UGF0aCk7IC8vIGFkZCB0aGUgY29udGV4dCB0byB0aGUgdmlzaXRvclxuXHRcdH1cblx0fSBjYXRjaCAoZXgpIHtcblx0XHQvLyBpZ25vcmUgdGhlIGNvbnRleHQgYXMgdGhpcyBjYW4gb25seSBiZSB0aGUgY2FzZSBpZiB0aGUgbW9kZWwgaXMgbm90IHJlYWR5LFxuXHRcdC8vIGkuZS4gbm90IGEgcHJlcHJvY2Vzc2luZyBtb2RlbCBidXQgbWF5YmUgYSBtb2RlbCBmb3IgcHJvdmlkaW5nIGFmdGVyd2FyZHNcblx0fVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqIEBwYXJhbSBCdWlsZGluZ0Jsb2NrQ2xhc3MgVGhlIGJ1aWxkaW5nIGJsb2NrIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3M6IHR5cGVvZiBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UpOiB2b2lkIHtcblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRhc3luYyAob05vZGU6IEVsZW1lbnQsIG9WaXNpdG9yOiBJVmlzaXRvckNhbGxiYWNrKSA9PiBwcm9jZXNzQnVpbGRpbmdCbG9jayhCdWlsZGluZ0Jsb2NrQ2xhc3MsIG9Ob2RlLCBvVmlzaXRvciwgdHJ1ZSksXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEucHVibGljTmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBVblJlZ2lzdGVyIGEgYnVpbGRpbmcgYmxvY2sgZGVmaW5pdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlciB1c2VkIGluc2lkZSB0aGUgeG1sIHRlbXBsYXRlIHByb2Nlc3Nvci5cbiAqIEBwYXJhbSBCdWlsZGluZ0Jsb2NrQ2xhc3MgVGhlIGJ1aWxkaW5nIGJsb2NrIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJCdWlsZGluZ0Jsb2NrKEJ1aWxkaW5nQmxvY2tDbGFzczogdHlwZW9mIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSk6IHZvaWQge1xuXHRpZiAoQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihcblx0XHRcdG51bGwsXG5cdFx0XHRCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZXNwYWNlLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnhtbFRhZyB8fCBCdWlsZGluZ0Jsb2NrQ2xhc3MubWV0YWRhdGEubmFtZVxuXHRcdCk7XG5cdH1cblx0aWYgKEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4oXG5cdFx0XHRudWxsLFxuXHRcdFx0QnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLnB1YmxpY05hbWVzcGFjZSxcblx0XHRcdEJ1aWxkaW5nQmxvY2tDbGFzcy5tZXRhZGF0YS54bWxUYWcgfHwgQnVpbGRpbmdCbG9ja0NsYXNzLm1ldGFkYXRhLm5hbWVcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yWE1MKGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdLCB4bWxGcmFnbWVudDogc3RyaW5nLCBhZGRpdGlvbmFsRGF0YT86IG9iamVjdCwgc3RhY2s/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBlcnJvckxhYmVscyA9IGVycm9yTWVzc2FnZXMubWFwKChlcnJvck1lc3NhZ2UpID0+IHhtbGA8bTpMYWJlbCB0ZXh0PVwiJHtlc2NhcGVYTUxBdHRyaWJ1dGVWYWx1ZShlcnJvck1lc3NhZ2UpfVwiLz5gKTtcblx0bGV0IGVycm9yU3RhY2sgPSBcIlwiO1xuXHRpZiAoc3RhY2spIHtcblx0XHRjb25zdCBzdGFja0Zvcm1hdHRlZCA9IGJ0b2EoYDxwcmU+JHtzdGFja308L3ByZT5gKTtcblx0XHRlcnJvclN0YWNrID0geG1sYDxtOkZvcm1hdHRlZFRleHQgaHRtbFRleHQ9XCJ7PSBCQkYuYmFzZTY0RGVjb2RlKCcke3N0YWNrRm9ybWF0dGVkfScpIH1cIiAvPmA7XG5cdH1cblx0bGV0IGFkZGl0aW9uYWxUZXh0ID0gXCJcIjtcblx0aWYgKGFkZGl0aW9uYWxEYXRhKSB7XG5cdFx0bGV0IGpzb25WYWx1ZSA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGpzb25WYWx1ZSA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoYWRkaXRpb25hbERhdGEsIG51bGwsIDQpKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRqc29uVmFsdWUgPSBidG9hKEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6IFwiQ291bGQgbm90IHN0cmluZ2lmeSBhZGRpdGlvbmFsRGF0YSBkdWUgdG8gY2lyY3VsYXIgc3RydWN0dXJlLlwiIH0sIG51bGwsIDQpKTtcblx0XHR9XG5cblx0XHRhZGRpdGlvbmFsVGV4dCA9IHhtbGA8bTpWQm94PlxuXHRcdFx0PG06TGFiZWwgdGV4dD1cIlRyYWNlIEluZm9cIi8+XG5cdFx0XHQ8Y29kZTpDb2RlRWRpdG9yIHR5cGU9XCJqc29uXCIgIHZhbHVlPVwiJHtgez0gQkJGLmJhc2U2NERlY29kZSgnJHtqc29uVmFsdWV9JykgfWB9XCIgaGVpZ2h0PVwiMzAwcHhcIiAvPlxuXHRcdDwvbTpWQm94PmA7XG5cdH1cblx0cmV0dXJuIHhtbGA8Y29udHJvbHM6Rm9ybUVsZW1lbnRXcmFwcGVyIHhtbG5zOmNvbnRyb2xzPVwic2FwLmZlLmNvcmUuY29udHJvbHNcIj5cblx0XHRcdFx0XHQ8bTpWQm94IHhtbG5zOm09XCJzYXAubVwiIHhtbG5zOmNvZGU9XCJzYXAudWkuY29kZWVkaXRvclwiIGNvcmU6cmVxdWlyZT1cIntCQkY6J3NhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja0Zvcm1hdHRlcid9XCI+XG5cdFx0XHRcdFx0JHtlcnJvckxhYmVsc31cblx0XHRcdFx0XHQke2Vycm9yU3RhY2t9XG5cdFx0XHRcdFx0XHQ8Z3JpZDpDU1NHcmlkIGdyaWRUZW1wbGF0ZVJvd3M9XCJmclwiIGdyaWRUZW1wbGF0ZUNvbHVtbnM9XCJyZXBlYXQoMiwxZnIpXCIgZ3JpZEdhcD1cIjFyZW1cIiB4bWxuczpncmlkPVwic2FwLnVpLmxheW91dC5jc3NncmlkXCIgPlxuXHRcdFx0XHRcdFx0XHQ8bTpWQm94PlxuXHRcdFx0XHRcdFx0XHRcdDxtOkxhYmVsIHRleHQ9XCJIb3cgdGhlIGJ1aWxkaW5nIGJsb2NrIHdhcyBjYWxsZWRcIi8+XG5cdFx0XHRcdFx0XHRcdFx0PGNvZGU6Q29kZUVkaXRvciB0eXBlPVwieG1sXCIgdmFsdWU9XCIke2B7PSBCQkYuYmFzZTY0RGVjb2RlKCcke2J0b2EoeG1sRnJhZ21lbnQucmVwbGFjZUFsbChcIiZndDtcIiwgXCI+XCIpKX0nKSB9YH1cIiBoZWlnaHQ9XCIzMDBweFwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvbTpWQm94PlxuXHRcdFx0XHRcdFx0XHQke2FkZGl0aW9uYWxUZXh0fVxuXHRcdFx0XHRcdFx0PC9ncmlkOkNTU0dyaWQ+XG5cdFx0XHRcdFx0PC9tOlZCb3g+XG5cdFx0XHRcdDwvY29udHJvbHM6Rm9ybUVsZW1lbnRXcmFwcGVyPmA7XG59XG5cbmNvbnN0IHRlbXBvcmFyeU9iamVjdFN0b3JlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4vKipcbiAqIFN0b3JlcyBhbiBvYmplY3QgdmFsdWUgaW4gYSB0ZW1wb3Jhcnkgc3RvcmFnZSBhbmQgcmV0dXJucyBhbiBJRCB1c2VkIHRvIHJldHJpZXZlIHRoaXMgdmFsdWUgYXQgYSBsYXRlciBwb2ludCBpbiB0aW1lLlxuICpcbiAqIFJlcXVpcmVkIGFzIHRoZXJlIGlzIGZ1bmN0aW9uYWxpdHkgbGlrZSB0aGUgeG1sYCBmdW5jdGlvbiwgd2hpY2ggbWlnaHQgdGFrZSBvYmplY3RzIGFzIHBhcmFtZXRlcnMgYnV0IG5lZWRzIHRvIHJldHVybiBhIHNlcmlhbGl6ZWQgc3RyaW5nLlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHN0b3JlXG4gKiBAcmV0dXJucyBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9yZU9iamVjdFZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydHlVSUQgPSBgL3VpZC0tJHt1aWQoKX1gO1xuXHR0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF0gPSB2YWx1ZTtcblx0cmV0dXJuIHByb3BlcnR5VUlEO1xufVxuXG4vKipcbiAqIFVuc3RvcmVzIGFuIG9iamVjdCBmcm9tIGEgdGVtcG9yYXJ5IHN0b3JlIGJ5IHJlbW92aW5nIGl0IGFuZCByZXR1cm5pbmcgaXRzIG9iamVjdCB2YWx1ZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eVVJRCBJRCB0byByZXRyaWV2ZSB0aGlzIHZhbHVlXG4gKiBAcmV0dXJucyBPYmplY3QgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdW5zdG9yZU9iamVjdFZhbHVlKHByb3BlcnR5VUlEOiBzdHJpbmcpOiB1bmtub3duIHtcblx0Y29uc3QgdmFsdWUgPSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdGRlbGV0ZSB0ZW1wb3JhcnlPYmplY3RTdG9yZVtwcm9wZXJ0eVVJRF07XG5cdHJldHVybiB2YWx1ZTtcbn1cblxubGV0IHByb2Nlc3NOZXh0WG1sSW5UcmFjZSA9IGZhbHNlO1xuLyoqXG4gKiBNYWtlcyBzdXJlIHRoYXQgYWxsIHhtbGAgY2FsbHMgaW5zaWRlIHRoZSBnaXZlbiBtZXRob2QgYXJlIHByb2Nlc3NlZCBpbiB0cmFjZSBtb2RlLlxuICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGV4ZWN1dGVcbiAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGdpdmVuIG1ldGhvZFxuICovXG5jb25zdCBwcm9jZXNzWG1sSW5UcmFjZSA9IGFzeW5jIGZ1bmN0aW9uIChtZXRob2Q6ICguLi5hcmdzOiB1bmtub3duW10pID0+IFByb21pc2U8dW5rbm93bj4pOiBQcm9taXNlPHVua25vd24+IHtcblx0cHJvY2Vzc05leHRYbWxJblRyYWNlID0gdHJ1ZTtcblx0bGV0IHJldHVyblZhbHVlO1xuXHR0cnkge1xuXHRcdHJldHVyblZhbHVlID0gbWV0aG9kKCk7XG5cdH0gZmluYWxseSB7XG5cdFx0cHJvY2Vzc05leHRYbWxJblRyYWNlID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuLyoqXG4gKiBQYXJzZSBhbiBYTUwgc3RyaW5nIGFuZCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgZG9jdW1lbnQuXG4gKiBAcGFyYW0geG1sU3RyaW5nIFRoZSB4bWwgc3RyaW5nXG4gKiBAcGFyYW0gW2FkZERlZmF1bHROYW1lc3BhY2VzXSBXaGV0aGVyIG9yIG5vdCBkZWZhdWx0IG5hbWVzcGFjZXMgc2hvdWxkIGJlIGFkZGVkXG4gKiBAcmV0dXJucyBUaGUgWE1MIGRvY3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VYTUxTdHJpbmcoeG1sU3RyaW5nOiBzdHJpbmcsIGFkZERlZmF1bHROYW1lc3BhY2VzID0gZmFsc2UpOiBFbGVtZW50W10ge1xuXHRpZiAoYWRkRGVmYXVsdE5hbWVzcGFjZXMpIHtcblx0XHR4bWxTdHJpbmcgPSBgPHRlbXBsYXRlXG5cdFx0XHRcdFx0XHR4bWxuczp0ZW1wbGF0ZT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS50ZW1wbGF0ZS8xXCJcblx0XHRcdFx0XHRcdHhtbG5zOm09XCJzYXAubVwiXG5cdFx0XHRcdFx0XHR4bWxuczptYWNyb3M9XCJzYXAuZmUubWFjcm9zXCJcblx0XHRcdFx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHRcdFx0XHR4bWxuczptZGM9XCJzYXAudWkubWRjXCJcblx0XHRcdFx0XHRcdHhtbG5zOmN1c3RvbURhdGE9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCI+JHt4bWxTdHJpbmd9PC90ZW1wbGF0ZT5gO1xuXHR9XG5cdGNvbnN0IHhtbERvY3VtZW50ID0gRE9NUGFyc2VySW5zdGFuY2UucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcblx0bGV0IG91dHB1dCA9IHhtbERvY3VtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHR3aGlsZSAob3V0cHV0Py5sb2NhbE5hbWUgPT09IFwidGVtcGxhdGVcIikge1xuXHRcdG91dHB1dCA9IG91dHB1dC5maXJzdEVsZW1lbnRDaGlsZDtcblx0fVxuXHRjb25zdCBjaGlsZHJlbiA9IG91dHB1dD8ucGFyZW50RWxlbWVudCA/IG91dHB1dD8ucGFyZW50RWxlbWVudC5jaGlsZHJlbiA6IFtvdXRwdXQgYXMgRWxlbWVudF07XG5cdHJldHVybiBBcnJheS5mcm9tKGNoaWxkcmVuKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgYW4gWE1MIGF0dHJpYnV0ZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhNTEF0dHJpYnV0ZVZhbHVlKHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHZhbHVlPy5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIikucmVwbGFjZSgvPC9nLCBcIiZsdDtcIikucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikucmVwbGFjZSgvJy9nLCBcIiZhcG9zO1wiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVySW5UcmFjZU1vZGUob3V0U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCB4bWxSZXN1bHQgPSBwYXJzZVhNTFN0cmluZyhvdXRTdHIsIHRydWUpO1xuXHRpZiAoeG1sUmVzdWx0Py5sZW5ndGggPiAwICYmIHhtbFJlc3VsdFswXT8ubG9jYWxOYW1lID09PSBcInBhcnNlcmVycm9yXCIpIHtcblx0XHRjb25zdCBlcnJvck1lc3NhZ2UgPSAoeG1sUmVzdWx0WzBdIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQgfHwgKHhtbFJlc3VsdFswXSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MO1xuXHRcdHJldHVybiBjcmVhdGVFcnJvclhNTChbZXJyb3JNZXNzYWdlLnNwbGl0KFwiXFxuXCIpWzBdXSwgb3V0U3RyKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gb3V0U3RyO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFhNTFByb2Nlc3NvclR5cGVWYWx1ZSA9XG5cdHwgc3RyaW5nXG5cdHwgYm9vbGVhblxuXHR8IG51bWJlclxuXHR8IHVuZGVmaW5lZFxuXHR8IG51bGxcblx0fCBvYmplY3Rcblx0fCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXHR8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyPlxuXHR8IEFycmF5PHN0cmluZz5cblx0fCBBcnJheTxGdW5jdGlvbj5cblx0fCBGdW5jdGlvblxuXHR8IENvbnRleHQ7XG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbCB3aGlsZSBoYW5kbGluZyBzcGVjaWFsIG9iamVjdCBjYXNlLlxuICogQHBhcmFtIHN0cmluZ3MgVGhlIHN0cmluZyBwYXJ0cyBvZiB0aGUgdGVtcGxhdGUgbGl0ZXJhbFxuICogQHBhcmFtIHZhbHVlcyBUaGUgdmFsdWVzIHBhcnQgb2YgdGhlIHRlbXBsYXRlIGxpdGVyYWxcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGRvY3VtZW50IHJlcHJlc2VudGluZyB0aGUgc3RyaW5nIHRoYXQgd2FzIHVzZWQuXG4gKi9cbmV4cG9ydCBjb25zdCB4bWwgPSAoc3RyaW5nczogVGVtcGxhdGVTdHJpbmdzQXJyYXksIC4uLnZhbHVlczogWE1MUHJvY2Vzc29yVHlwZVZhbHVlW10pOiBzdHJpbmcgPT4ge1xuXHRsZXQgb3V0U3RyID0gXCJcIjtcblx0bGV0IGk7XG5cdGZvciAoaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRvdXRTdHIgKz0gc3RyaW5nc1tpXTtcblxuXHRcdC8vIEhhbmRsZSB0aGUgZGlmZmVyZW50IGNhc2Ugb2Ygb2JqZWN0LCBpZiBpdCdzIGFuIGFycmF5IHdlIGpvaW4gdGhlbSwgaWYgaXQncyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGVuIHdlIGNvbXBpbGUgaXQuXG5cdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB0eXBlb2YgdmFsdWVbMF0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdG91dFN0ciArPSB2YWx1ZS5mbGF0KDUpLmpvaW4oXCJcXG5cIikudHJpbSgpO1xuXHRcdH0gZWxzZSBpZiAoaXNGdW5jdGlvbkFycmF5KHZhbHVlKSkge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlLm1hcCgodmFsdWVmbikgPT4gdmFsdWVmbigpKS5qb2luKFwiXFxuXCIpO1xuXHRcdH0gZWxzZSBpZiAoaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24odmFsdWUpKSB7XG5cdFx0XHRjb25zdCBjb21waWxlZEV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSk7XG5cdFx0XHRvdXRTdHIgKz0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUoY29tcGlsZWRFeHByZXNzaW9uKTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0b3V0U3RyICs9IFwie3RoaXM+dW5kZWZpbmVkVmFsdWV9XCI7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0b3V0U3RyICs9IHZhbHVlKCk7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcblx0XHRcdGlmIChpc0NvbnRleHQodmFsdWUpKSB7XG5cdFx0XHRcdG91dFN0ciArPSB2YWx1ZS5nZXRQYXRoKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVVJZCA9IHN0b3JlT2JqZWN0VmFsdWUodmFsdWUpO1xuXHRcdFx0XHRvdXRTdHIgKz0gYCR7cHJvcGVydHlVSWR9YDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhdmFsdWUuc3RhcnRzV2l0aChcIjxcIikgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoXCImbHQ7XCIpKSB7XG5cdFx0XHRvdXRTdHIgKz0gZXNjYXBlWE1MQXR0cmlidXRlVmFsdWUodmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRTdHIgKz0gdmFsdWU7XG5cdFx0fVxuXHR9XG5cdG91dFN0ciArPSBzdHJpbmdzW2ldO1xuXHRvdXRTdHIgPSBvdXRTdHIudHJpbSgpO1xuXHRpZiAocHJvY2Vzc05leHRYbWxJblRyYWNlKSB7XG5cdFx0cmV0dXJuIHJlbmRlckluVHJhY2VNb2RlKG91dFN0cik7XG5cdH1cblx0cmV0dXJuIG91dFN0cjtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRDb25kaXRpb25hbGx5VG9YTUwgPSBmdW5jdGlvbiAoY29uZGl0aW9uOiBib29sZWFuLCBwYXJ0VG9BZGQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmIChjb25kaXRpb24pIHtcblx0XHRyZXR1cm4gcGFydFRvQWRkO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG59O1xuXG4vKipcbiAqIEFkZCBhbiBhdHRyaWJ1dGUgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIElmIGl0J3MgdW5kZWZpbmVkIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGFkZGVkLlxuICogQHBhcmFtIGF0dHJpYnV0ZU5hbWVcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMgVGhlIGF0dHJpYnV0ZSB0byBhZGQgaWYgdGhlIHZhbHVlIGlzIG5vdCB1bmRlZmluZWQsIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEF0dHJpYnV0ZVRvWE1MID0gZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU/OiBYTUxQcm9jZXNzb3JUeXBlVmFsdWUpOiAoKSA9PiBzdHJpbmcge1xuXHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhaXNVbmRlZmluZWRFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdHJldHVybiAoKSA9PiB4bWxgJHthdHRyaWJ1dGVOYW1lfT1cIiR7dmFsdWV9XCJgO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiAoKSA9PiBcIlwiO1xuXHR9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztFQWdDQSxNQUFNQSxZQUFZLEdBQUcsc0VBQXNFO0VBQzNGLE1BQU1DLGdCQUFnQixHQUFHLGdFQUFnRTtFQUN6RixNQUFNQyxpQkFBaUIsR0FBRyxJQUFJQyxTQUFTLENBQUMsQ0FBQzs7RUFNekM7QUFDQTtBQUNBOztFQW9HQSxTQUFTQyw0QkFBNEJBLENBQ3BDQyxLQUFhLEVBQ2JDLFNBQWtDLEVBQ2xDQyxnQkFBd0QsRUFDeERDLElBQVksRUFDTDtJQUNQLE1BQU1DLFFBQVEsR0FBR0gsU0FBUyxDQUFDRSxJQUFJLENBQUM7SUFDaEMsTUFBTUUsY0FBYyxHQUFHRCxRQUFRLEVBQUVFLFNBQVMsQ0FBQyxDQUcxQztJQUVELElBQUlKLGdCQUFnQixDQUFDSyxRQUFRLEtBQUssSUFBSSxLQUFLLENBQUNILFFBQVEsSUFBSUMsY0FBYyxLQUFLLElBQUksQ0FBQyxFQUFFO01BQ2pGLE1BQU0sSUFBSUcsS0FBSyxDQUFDLEdBQUdSLEtBQUssK0JBQStCRyxJQUFJLGNBQWMsQ0FBQztJQUMzRSxDQUFDLE1BQU0sSUFBSUUsY0FBYyxFQUFFO01BQzFCO01BQ0E7TUFDQSxJQUFJQSxjQUFjLENBQUNJLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSUosY0FBYyxDQUFDSyxLQUFLLEtBQUtDLFNBQVMsSUFBSVQsZ0JBQWdCLENBQUNVLGFBQWEsS0FBS0QsU0FBUyxFQUFFO1FBQ2pJO1FBQ0EsSUFBSSxDQUFDVCxnQkFBZ0IsQ0FBQ1UsYUFBYSxDQUFDQyxRQUFRLENBQUNSLGNBQWMsQ0FBQ0ssS0FBSyxDQUFDLEVBQUU7VUFDbkUsTUFBTSxJQUFJRixLQUFLLENBQ2QsR0FBR1IsS0FBSyxNQUFNRyxJQUFJLHNCQUFzQkQsZ0JBQWdCLENBQUNVLGFBQWEsYUFDckVQLGNBQWMsQ0FBQ0ssS0FBSyxN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
|
|
@@ -535,6 +535,9 @@ async function parseAggregation(
|
|
|
535
535
|
childDefinition.getAttribute("key") ||
|
|
536
536
|
childDefinition.getAttribute("id") ||
|
|
537
537
|
(definition?.skipKey && definition.multiple === false && uid());
|
|
538
|
+
if (!childKey && definition?.reallySkipKey) {
|
|
539
|
+
childKey = uid();
|
|
540
|
+
}
|
|
538
541
|
if (childKey) {
|
|
539
542
|
childKey = `InlineXML_${childKey}`;
|
|
540
543
|
childDefinition.setAttribute("key", childKey);
|