@sapui5/sap.fe.macros 1.138.0 → 1.140.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +85 -58
- package/src/sap/fe/macros/Field.ts +104 -60
- package/src/sap/fe/macros/FooterContent.js +44 -11
- package/src/sap/fe/macros/FooterContent.tsx +48 -9
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MessageButton.js +1 -2
- package/src/sap/fe/macros/MessageButton.tsx +0 -1
- package/src/sap/fe/macros/MultiValueField.js +17 -6
- package/src/sap/fe/macros/MultiValueField.tsx +7 -4
- package/src/sap/fe/macros/RichTextEditor.js +30 -5
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
- package/src/sap/fe/macros/Share.js +85 -40
- package/src/sap/fe/macros/Share.tsx +42 -1
- package/src/sap/fe/macros/Status.js +226 -0
- package/src/sap/fe/macros/Status.tsx +192 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -29
- package/src/sap/fe/macros/ValueHelp.tsx +2 -43
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
- package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
- package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
- package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +49 -2
- package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/Form.js +1 -4
- package/src/sap/fe/macros/form/Form.tsx +0 -3
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
- package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/form/FormHelper.js +1 -2
- package/src/sap/fe/macros/form/FormHelper.ts +0 -1
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
- package/src/sap/fe/macros/messagebundle.properties +42 -32
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
- package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
- package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
- package/src/sap/fe/macros/messagebundle_da.properties +11 -3
- package/src/sap/fe/macros/messagebundle_de.properties +18 -10
- package/src/sap/fe/macros/messagebundle_el.properties +13 -5
- package/src/sap/fe/macros/messagebundle_en.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
- package/src/sap/fe/macros/messagebundle_es.properties +13 -5
- package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
- package/src/sap/fe/macros/messagebundle_et.properties +13 -5
- package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
- package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
- package/src/sap/fe/macros/messagebundle_id.properties +18 -10
- package/src/sap/fe/macros/messagebundle_it.properties +10 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
- package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
- package/src/sap/fe/macros/messagebundle_no.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -3
- package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
- package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
- package/src/sap/fe/macros/messages/MessageButton.js +55 -36
- package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
- package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
- package/src/sap/fe/macros/share/ShareAPI.js +4 -29
- package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
- package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
- package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/TableAPI.js +143 -133
- package/src/sap/fe/macros/table/TableAPI.ts +5 -1
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableHelper.js +1 -2
- package/src/sap/fe/macros/table/TableHelper.ts +0 -1
- package/src/sap/fe/macros/table/TableRuntime.js +26 -7
- package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
- package/src/sap/fe/macros/table/Utils.js +6 -2
- package/src/sap/fe/macros/table/Utils.ts +5 -1
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
|
@@ -26,7 +26,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
26
26
|
/**
|
|
27
27
|
* Helper class used by the control library for OData-specific handling (OData V4)
|
|
28
28
|
* @private
|
|
29
|
-
* @experimental This module is only for internal/experimental use!
|
|
30
29
|
*/
|
|
31
30
|
const TableHelper = {
|
|
32
31
|
/**
|
|
@@ -673,4 +672,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
673
672
|
TableHelper.getTextOnActionField.requiresIContext = true;
|
|
674
673
|
return TableHelper;
|
|
675
674
|
}, false);
|
|
676
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsImFjdGlvbk9iamVjdCIsImFjdGlvbk5hbWUiLCJhY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJlbnRpdHlUeXBlIiwiX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZSIsInRvU3RyaW5nIiwiZmluZCIsIl9hY3Rpb24iLCIkSXNCb3VuZCIsIiRQYXJhbWV0ZXIiLCIkVHlwZSIsIiRpc0NvbGxlY3Rpb24iLCJzQWN0aW9uTmFtZSIsImluY2x1ZGVzIiwiYVBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJyZXBsYWNlQWxsIiwidW5kZWZpbmVkIiwiX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUiLCJzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUiLCJzRW50aXR5VHlwZSIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJsaW5lSXRlbUNvbGxlY3Rpb24iLCJvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCIsImZvckVhY2giLCJyZWNvcmQiLCJzS2V5IiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJJbmxpbmUiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoIiwiT2JqZWN0Iiwia2V5cyIsImdldFVpTGluZUl0ZW1PYmplY3QiLCJsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dCIsImNvbnZlcnRlZE1ldGFEYXRhIiwibGluZUl0ZW1PclByZXNlbnRhdGlvbk9iamVjdCIsInJlc29sdmVQYXRoIiwiZ2V0UGF0aCIsInRhcmdldCIsInZpc3VhbGl6YXRpb25zIiwiVmlzdWFsaXphdGlvbnMiLCJsaW5lSXRlbU9iamVjdCIsIml0ZW0iLCJ2YWx1ZSIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZUJpbmRpbmdUb0xvYWRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInByb3BlcnR5QmluZGluZ3MiLCJtYXAiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsImdldENvbHVtbldpZHRoIiwib1RoaXMiLCJjb2x1bW4iLCJkYXRhRmllbGQiLCJkYXRhRmllbGRBY3Rpb25UZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInVzZVJlbVVuaXQiLCJtaWNyb0NoYXJ0VGl0bGUiLCJ3aWR0aCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImdldENvbHVtbldpZHRoRm9ySW1hZ2UiLCJnZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZCIsIm5hbWUiLCJfc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uIiwic29ydGFibGUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInJlcXVpcmVkIiwiVGFibGVGb3JtYXR0ZXIiLCJhbm5vdGF0aW9ucyIsInRhcmdldE9iamVjdCIsIlZhbHVlIiwiZGF0YVR5cGUiLCJ0eXBlIiwiZ2V0RWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsImhhc1RleHRBbm5vdGF0aW9uIiwiaGFzVGV4dCIsIkNvcmUiLCJNZWRpYVR5cGUiLCJpc0ltYWdlVVJMIiwidGFibGUiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsIlRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsIm5UbXBUZXh0V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsIm5UbXBWaXN1YWxpemF0aW9uV2lkdGgiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJwcm9wZXJ0eVdpZHRoIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZ2V0Q29sdW1uV2lkdGhGb3JDaGFydCIsImNvbHVtbkxhYmVsV2lkdGgiLCJjaGFydFNpemUiLCJnZXRDaGFydFNpemUiLCJnZXRTaG93T25seUNoYXJ0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInRtcFRleHQiLCJ0aXRsZVNpemUiLCJ0bXBXaWR0aCIsImdldE1hcmdpbkNsYXNzIiwic1Zpc3VhbGl6YXRpb24iLCJpc0xhc3RGaWVsZCIsInNDbGFzcyIsImdldFZCb3hWaXNpYmlsaXR5IiwiY29sbGVjdGlvbiIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImZpZWxkR3JvdXAiLCJhbGxTdGF0aWMiLCJoaWRkZW5QYXRocyIsImhpZGRlbkFubm90YXRpb25WYWx1ZSIsInB1c2giLCIkUGF0aCIsImhhc0FueVBhdGhFeHByZXNzaW9ucyIsImNvbnN0YW50IiwiaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMiLCJpZkVsc2UiLCJnZXRFbGVtZW50U3RhYmxlSWQiLCJ0YWJsZUlkIiwiZWxlbWVudElkIiwiZGF0YUZpZWxkUGFydCIsImdlbmVyYXRlIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJpZCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwicHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsInRhYmxlUHJvcGVydGllcyIsImVudGl0eVNldE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJpc05hdmlnYWJsZSIsImFyZ3VtZW50cyIsImVuYWJsZUF1dG9TY3JvbGwiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJmb3JDb250ZXh0TWVudSIsInRhcmdldEVudGl0eVR5cGVOYW1lIiwiY29udGV4dE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic3RhdGljQWN0aW9uIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiY29udGV4dE1lbnVQYXRoIiwiY29udGV4dCIsInBhcmFtcyIsImNvbnRleHRzIiwiYlN0YXRpY0FjdGlvbiIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsImNvbnRlbnRJZCIsImxhYmVsIiwiZm4iLCJyZWYiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQiLCJ0YWJsZURlZmluaXRpb24iLCJpc0JvdW5kIiwiZW5hYmxlT25TZWxlY3QiLCJhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSIsImlzQ29weSIsImlzU3RhdGljQWN0aW9uIiwib09wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsImhhc093blByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uSGVscGVyIiwiZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24iLCJkYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsInJlcXVpcmVzQ29udGV4dCIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgiLCJpc0FuYWx5dGljYWxUYWJsZSIsImVuYWJsZUFuYWx5dGljcyIsImVudGl0eVNldCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiTG9nIiwid2FybmluZyIsImdldE9iamVjdCIsInN1YnN0cmluZyIsImRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHkiLCJvciIsInJlYWRPbmx5IiwiYW5kIiwiVUkiLCJJc0luYWN0aXZlIiwiY3JlYXRpb25Nb2RlIiwiZXF1YWwiLCJmaWVsZE1vZGUiLCJzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkiLCJkYXRhZmllbGQiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic29tZSIsIm9EQyIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwib0RhdGFGaWVsZCIsIm9Db250ZXh0Iiwic1BhdGhEYXRhRmllbGRzIiwiYU11bHRpcGxlTGFiZWxzIiwiaSIsInJlZHVjZSIsImEiLCJiIiwiX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzIiwib0NvbHVtbiIsInRhYmxlVHlwZSIsInNldHRpbmdzIiwibWljcm9DaGFydFNpemUiLCJzaG93TWljcm9DaGFydExhYmVsIiwiZ2V0RGVsZWdhdGUiLCJpc0FMUCIsImVudGl0eU5hbWUiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZGVsZWdhdGUiLCJjb250cm9sIiwiRXJyb3IiLCJwYXlsb2FkIiwiY29sbGVjdGlvbk5hbWUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJhbm5vdGF0aW9uIiwiY3JlYXRlSW5QbGFjZSIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbiIsImxlYWZMZXZlbCIsInN0cmluZ2lmeSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJzUGF0aCIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uQ29udGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsImlzRGVsZXRlZCIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwic2V0QmluZGluZ0NvbnRleHQiLCJjcmVhdGVkIiwiZSIsInRyYWNlIiwib0Vycm9yIiwiZXJyb3IiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkVHlwZXMiLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwic291cmNlRW50aXR5VHlwZSIsInZhbHVlT2YiLCJyZXF1aXJlc1NlbGVjdGlvbiIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmbixcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5TZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNUZXh0LCBpc0ltYWdlVVJMIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldEVkaXRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgVGFibGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZS5ibG9ja1wiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBCYXNlQ29udGV4dCwgZGVmYXVsdCBhcyBDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB2NENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIEhpZGRlbiA9IHsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI6IGJvb2xlYW4gfCB7ICRQYXRoPzogc3RyaW5nIH0gfTtcbnR5cGUgQ29sdW1uV2lkdGhUaGlzID0geyBlbmFibGVBdXRvQ29sdW1uV2lkdGg/OiBib29sZWFuOyB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47IHRhYmxlVHlwZTogc3RyaW5nIH07XG50eXBlIE1pY3JvQ2hhcnRJbmZvID0geyB0aXRsZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH07XG4vKipcbiAqIEhlbHBlciBjbGFzcyB1c2VkIGJ5IHRoZSBjb250cm9sIGxpYnJhcnkgZm9yIE9EYXRhLXNwZWNpZmljIGhhbmRsaW5nIChPRGF0YSBWNClcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGludGVybmFsL2V4cGVyaW1lbnRhbCB1c2UhXG4gKi9cbmNvbnN0IFRhYmxlSGVscGVyID0ge1xuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBnaXZlbiBhY3Rpb24gaXMgc3RhdGljLlxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0IFRoZSBpbnN0YW5jZSBvciB0aGUgcGF0aCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgYWN0aW9uIGlzIHN0YXRpYywgZWxzZSAnZmFsc2UnXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaXNTdGF0aWNBY3Rpb246IGZ1bmN0aW9uIChhY3Rpb25PYmplY3Q6IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBhY3Rpb25OYW1lOiBTdHJpbmcpOiBib29sZWFuIHtcblx0XHRsZXQgYWN0aW9uOiBNZXRhTW9kZWxBY3Rpb24gfCB1bmRlZmluZWQgfCBzdHJpbmc7XG5cdFx0aWYgKGFjdGlvbk9iamVjdCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gdGhpcy5fZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0YWN0aW9uID0gYWN0aW9uT2JqZWN0LmZpbmQoZnVuY3Rpb24gKF9hY3Rpb246IE1ldGFNb2RlbEFjdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF9hY3Rpb24uJElzQm91bmQgJiYgX2FjdGlvbi4kUGFyYW1ldGVyWzBdLiRUeXBlID09PSBlbnRpdHlUeXBlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoaXMgaXMganVzdCBvbmUgLSBPSyB3ZSB0YWtlIGl0LiBJZiBpdCdzIG1vcmUgaXQncyBhY3R1YWxseSBhIHdyb25nIHVzYWdlIGJ5IHRoZSBhcHBcblx0XHRcdFx0XHQvLyBhcyB3ZSB1c2VkIHRoZSBmaXJzdCBvbmUgYWxsIHRoZSB0aW1lIHdlIGtlZXAgaXQgYXMgaXQgaXNcblx0XHRcdFx0XHRhY3Rpb24gPSBhY3Rpb25PYmplY3RbMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFjdGlvbiA9IGFjdGlvbk9iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gISFhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBhY3Rpb24uJElzQm91bmQgJiYgISFhY3Rpb24uJFBhcmFtZXRlclswXS4kaXNDb2xsZWN0aW9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGVudGl0eSB0eXBlIG9mIGFuIGFjdGlvbiBvdmVybG9hZC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZSB1c2VkIGluIHRoZSBhY3Rpb24gb3ZlcmxvYWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Y29uc3QgYVBhcnRzID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpO1xuXHRcdFx0cmV0dXJuIGFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0ucmVwbGFjZUFsbChcIilcIiwgXCJcIik7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgb3ZlcmxvYWRlZCBvbiBhIGRpZmZlcmVudCBlbnRpdHkgdHlwZS5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIG9mIHRoZSBhbm5vdGF0aW9uIHRhcmdldC5cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgdGhlIGFjdGlvbiBpcyBvdmVybG9hZGVkIHdpdGggYSBkaWZmZXJlbnQgZW50aXR5IHR5cGUsIGVsc2UgJ2ZhbHNlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZywgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoaXMuX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZShzQWN0aW9uTmFtZSk7XG5cdFx0cmV0dXJuICEhc0VudGl0eVR5cGUgJiYgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZTtcblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwOiBmdW5jdGlvbiAobGluZUl0ZW1Db2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0lCTk5hdmlnYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0bGluZUl0ZW1Db2xsZWN0aW9uPy5mb3JFYWNoKChyZWNvcmQpID0+IHtcblx0XHRcdGlmIChcIlNlbWFudGljT2JqZWN0XCIgaW4gcmVjb3JkKSB7XG5cdFx0XHRcdGNvbnN0IHNLZXkgPSBgJHtyZWNvcmQuU2VtYW50aWNPYmplY3R9LSR7cmVjb3JkLkFjdGlvbn1gO1xuXHRcdFx0XHRpZiAocmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiYgIXJlY29yZC5JbmxpbmUgJiYgcmVjb3JkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdFx0XHRcdGlmIChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcFtzS2V5XSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHJlY29yZC5OYXZpZ2F0aW9uQXZhaWxhYmxlKVxuXHRcdFx0XHRcdFx0XHQ/IChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pLnBhdGhcblx0XHRcdFx0XHRcdFx0OiByZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCkubGVuZ3RoID4gMCA/IG9JQk5OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldFVpTGluZUl0ZW1PYmplY3Q6IGZ1bmN0aW9uIChcblx0XHRsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dDogQ29udGV4dCxcblx0XHRjb252ZXJ0ZWRNZXRhRGF0YTogQ29udmVydGVkTWV0YWRhdGFcblx0KTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0ID0gY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXNcblx0XHRcdHwgUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0fCBMaW5lSXRlbTtcblx0XHRpZiAoIWxpbmVJdGVtT3JQcmVzZW50YXRpb25PYmplY3QpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAoY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXMgUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpXG5cdFx0XHQuVmlzdWFsaXphdGlvbnM7XG5cblx0XHRjb25zdCBsaW5lSXRlbU9iamVjdCA9IChcblx0XHRcdHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdD8gdmlzdWFsaXphdGlvbnM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSA9PT0gMCk/LiR0YXJnZXRcblx0XHRcdFx0OiBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0XG5cdFx0KSBhcyBMaW5lSXRlbTtcblx0XHRyZXR1cm4gbGluZUl0ZW1PYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtID8gbGluZUl0ZW1PYmplY3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCBhIGdpdmVuIGxpc3Qgb2YgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgTGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgb24gYSBjdXN0b20gY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCB0aGUgZ2l2ZW4gbGlzdCBvZiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRjcmVhdGVCaW5kaW5nVG9Mb2FkUHJvcGVydGllczogZnVuY3Rpb24gKHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmdzID0gcHJvcGVydGllcz8ubWFwKChwcm9wKSA9PiBwYXRoSW5Nb2RlbChwcm9wKSkgPz8gW107XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChwcm9wZXJ0eUJpbmRpbmdzLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjbG9hZFByb3BlcnRpZXNcIikpO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCBjb2x1bW4ncyB3aWR0aCBpZiBkZWZpbmVkIGZyb20gbWFuaWZlc3Qgb3IgZnJvbSBjdXN0b21pemF0aW9uIHZpYSBhbm5vdGF0aW9ucy5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBvVGhpcy5lbmFibGVBdXRvQ29sdW1uV2lkdGggSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseVxuXHQgKiBAcGFyYW0gb1RoaXMud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKiBAcGFyYW0gY29sdW1uIERlZmluZWQgd2lkdGggb2YgdGhlIGNvbHVtbiwgd2hpY2ggaXMgdGFrZW4gd2l0aCBwcmlvcml0eSBpZiBub3QgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5XG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGRlZmluaXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBY3Rpb25UZXh0IERhdGFGaWVsZCdzIHRleHQgZnJvbSBidXR0b25cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIG9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSB1c2VSZW1Vbml0IEluZGljYXRlcyBpZiB0aGUgcmVtIHVuaXQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgY29sdW1uIHdpZHRoIHJlc3VsdFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlIFRoZSBvYmplY3QgY29udGFpbmluZyB0aXRsZSBhbmQgZGVzY3JpcHRpb24gb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZS50aXRsZSBUaGUgdGl0bGUgb2YgdGhlIG1pY3JvY2hhcnRcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZS5kZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG1pY3JvY2hhcnRcblx0ICogQHJldHVybnMgLSBDb2x1bW4gd2lkdGggaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIHdpZHRoIGlzIHNldCB0byBhdXRvXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gKFxuXHRcdG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsXG5cdFx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0ZGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZCB8IERhdGFGaWVsZEZvckFubm90YXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+LFxuXHRcdGRhdGFGaWVsZEFjdGlvblRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRcdHVzZVJlbVVuaXQ6IGJvb2xlYW4sXG5cdFx0bWljcm9DaGFydFRpdGxlPzogTWljcm9DaGFydEluZm9cblx0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdGlmIChjb2x1bW4ud2lkdGgpIHtcblx0XHRcdHJldHVybiBjb2x1bW4ud2lkdGg7XG5cdFx0fVxuXHRcdGlmIChvVGhpcy5lbmFibGVBdXRvQ29sdW1uV2lkdGggPT09IHRydWUpIHtcblx0XHRcdGxldCB3aWR0aDtcblx0XHRcdHdpZHRoID1cblx0XHRcdFx0dGhpcy5nZXRDb2x1bW5XaWR0aEZvckltYWdlKGRhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRUeXBlcz4pIHx8XG5cdFx0XHRcdHRoaXMuZ2V0Q29sdW1uV2lkdGhGb3JEYXRhRmllbGQob1RoaXMsIGNvbHVtbiwgZGF0YUZpZWxkLCBkYXRhRmllbGRBY3Rpb25UZXh0LCBkYXRhTW9kZWxPYmplY3RQYXRoLCBtaWNyb0NoYXJ0VGl0bGUpIHx8XG5cdFx0XHRcdHVuZGVmaW5lZDtcblx0XHRcdGlmICh3aWR0aCkge1xuXHRcdFx0XHRyZXR1cm4gdXNlUmVtVW5pdCA/IGAke3dpZHRofXJlbWAgOiB3aWR0aDtcblx0XHRcdH1cblx0XHRcdHdpZHRoID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIi9lZGl0TW9kZVwiLCBcInVpXCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0XHRcdGNvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0dXNlUmVtVW5pdCxcblx0XHRcdFx0XHRcdHRoaXMuX3Nob3VsZEluY2x1ZGVIZWFkZXJJbkNvbHVtbndpZGhDYWxjdWxhdGlvbihvVGhpcywgY29sdW1uKSxcblx0XHRcdFx0XHRcdGNvbHVtbi5zb3J0YWJsZSA/PyBmYWxzZSxcblx0XHRcdFx0XHRcdHJlc29sdmVCaW5kaW5nU3RyaW5nKGNvbHVtbi5yZXF1aXJlZCA/PyBmYWxzZSwgXCJib29sZWFuXCIpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxib29sZWFuPlxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0VGFibGVGb3JtYXR0ZXIuZ2V0Q29sdW1uV2lkdGhcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB3aWR0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIGFuIGltYWdlLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAodGhlIHdpZHRoIGlzIHRyZWF0ZWQgYXMgYSByZW0gdmFsdWUpXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aEZvckltYWdlOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRUeXBlcz4pOiBudW1iZXIgfCBudWxsIHtcblx0XHRsZXQgd2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGNvbnN0IGFubm90YXRpb25zID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucztcblx0XHRjb25zdCBkYXRhVHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZT8uJHRhcmdldD8udHlwZTtcblx0XHRpZiAoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uVmFsdWUgJiZcblx0XHRcdGdldEVkaXRNb2RlKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldCxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0KSA9PT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5ICYmXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBoYXNUZXh0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlLiR0YXJnZXQpO1xuXHRcdFx0aWYgKGRhdGFUeXBlID09PSBcIkVkbS5TdHJlYW1cIiAmJiAhaGFzVGV4dEFubm90YXRpb24gJiYgYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8uaW5jbHVkZXM/LihcImltYWdlL1wiKSkge1xuXHRcdFx0XHR3aWR0aCA9IDYuMjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0YW5ub3RhdGlvbnMgJiZcblx0XHRcdChpc0ltYWdlVVJMKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZT8uJHRhcmdldCkgfHwgYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8uaW5jbHVkZXM/LihcImltYWdlL1wiKSlcblx0XHQpIHtcblx0XHRcdHdpZHRoID0gNi4yO1xuXHRcdH1cblx0XHRyZXR1cm4gd2lkdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBjb2x1bW4gaGVhZGVyIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgY29sdW1uIHdpZHRoLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSB0YWJsZS53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBjb25maWd1cmF0aW9uXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29sdW1uIHdpZHRoIHNob3VsZCBpbmNsdWRlIHRoZSBoZWFkZXJcblx0ICovXG5cdF9zaG91bGRJbmNsdWRlSGVhZGVySW5Db2x1bW53aWRoQ2FsY3VsYXRpb24odGFibGU6IENvbHVtbldpZHRoVGhpcywgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gY29sdW1uLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyICE9PSB1bmRlZmluZWQgPyBjb2x1bW4ud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgOiB0YWJsZS53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBEYXRhRmllbGQuXG5cdCAqIEBwYXJhbSBvVGhpcyBUaGUgaW5zdGFuY2Ugb2YgdGhlIGlubmVyIG1vZGVsIG9mIHRoZSBUYWJsZSBidWlsZGluZyBibG9ja1xuXHQgKiBAcGFyYW0gb1RoaXMud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKiBAcGFyYW0gY29sdW1uIERlZmluZWQgd2lkdGggb2YgdGhlIGNvbHVtbiwgd2hpY2ggaXMgdGFrZW4gd2l0aCBwcmlvcml0eSBpZiBub3QgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5XG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YSBGaWVsZFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQWN0aW9uVGV4dCBEYXRhRmllbGQncyB0ZXh0IGZyb20gYnV0dG9uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0aXRsZSBhbmQgZGVzY3JpcHRpb24gb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHJldHVybnMgLSBDb2x1bW4gd2lkdGggaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIG51bGwgKCB0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9yRGF0YUZpZWxkOiBmdW5jdGlvbiAoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQWN0aW9uVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdFx0bWljcm9DaGFydFRpdGxlPzogTWljcm9DaGFydEluZm9cblx0KTogbnVtYmVyIHwgbnVsbCB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgZGF0YVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uJFR5cGU7XG5cdFx0bGV0IHdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblx0XHRpZiAoXG5cdFx0XHRkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHQoZGF0YVR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0IShkYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPikuVGFyZ2V0Py4kQW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXB9YCkpXG5cdFx0KSB7XG5cdFx0XHRsZXQgblRtcFRleHRXaWR0aDtcblx0XHRcdG5UbXBUZXh0V2lkdGggPVxuXHRcdFx0XHRTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKGRhdGFGaWVsZEFjdGlvblRleHQpIHx8XG5cdFx0XHRcdFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgoZGF0YUZpZWxkPy5MYWJlbD8udG9TdHJpbmcoKSkgfHxcblx0XHRcdFx0U2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCgoYW5ub3RhdGlvbnMgYXMgeyBMYWJlbD86IHN0cmluZyB9KT8uTGFiZWwpOyAvLyBSRVZJRVcgOiBUaGlzIG1ha2VzIG5vIHNlbnNlIDopXG5cblx0XHRcdC8vIGdldCB3aWR0aCBmb3IgcmF0aW5nIG9yIHByb2dyZXNzIGJhciBkYXRhZmllbGRcblx0XHRcdGNvbnN0IG5UbXBWaXN1YWxpemF0aW9uV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRcdFx0dGhpcy5fc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uKG9UaGlzLCBjb2x1bW4pXG5cdFx0XHQpLnByb3BlcnR5V2lkdGg7XG5cblx0XHRcdGlmIChuVG1wVmlzdWFsaXphdGlvbldpZHRoID4gblRtcFRleHRXaWR0aCkge1xuXHRcdFx0XHR3aWR0aCA9IG5UbXBWaXN1YWxpemF0aW9uV2lkdGg7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRkYXRhRmllbGRBY3Rpb25UZXh0IHx8XG5cdFx0XHRcdChhbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdChpc0Fubm90YXRpb25PZlR5cGUoYW5ub3RhdGlvbnMsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgfHxcblx0XHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZShhbm5vdGF0aW9ucywgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQWRkIGFkZGl0aW9uYWwgMS44IHJlbSB0byBhdm9pZCBzaG93aW5nIGVsbGlwc2lzIGluIHNvbWUgY2FzZXMuXG5cdFx0XHRcdG5UbXBUZXh0V2lkdGggKz0gMS44O1xuXHRcdFx0XHR3aWR0aCA9IG5UbXBUZXh0V2lkdGg7XG5cdFx0XHR9XG5cdFx0XHR3aWR0aCA9IHdpZHRoID8/IHRoaXMuZ2V0Q29sdW1uV2lkdGhGb3JDaGFydChvVGhpcywgY29sdW1uLCBkYXRhRmllbGQsIG5UbXBUZXh0V2lkdGgsIG1pY3JvQ2hhcnRUaXRsZSk7XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBDaGFydC5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhIEZpZWxkXG5cdCAqIEBwYXJhbSBjb2x1bW5MYWJlbFdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGxhYmVsIG9yIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlIFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgdGl0bGUgYW5kIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAodGhlIHdpZHRoIGlzIHRyZWF0ZWQgYXMgYSByZW0gdmFsdWUpXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aEZvckNoYXJ0KFxuXHRcdG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsXG5cdFx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0ZGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZCB8IERhdGFGaWVsZEZvckFubm90YXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+LFxuXHRcdGNvbHVtbkxhYmVsV2lkdGg6IG51bWJlcixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBudW1iZXIgfCBudWxsIHtcblx0XHRsZXQgY2hhcnRTaXplLFxuXHRcdFx0d2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGlmICgoZGF0YUZpZWxkIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4pLlRhcmdldD8uJEFubm90YXRpb25QYXRoPy5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YCkpIHtcblx0XHRcdHN3aXRjaCAodGhpcy5nZXRDaGFydFNpemUob1RoaXMsIGNvbHVtbikpIHtcblx0XHRcdFx0Y2FzZSBcIlhTXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNC40O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiU1wiOlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDQuNjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk1cIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA1LjU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJMXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNi45O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDUuMztcblx0XHRcdH1cblx0XHRcdGNvbHVtbkxhYmVsV2lkdGggKz0gMS44O1xuXHRcdFx0aWYgKCF0aGlzLmdldFNob3dPbmx5Q2hhcnQob1RoaXMsIGNvbHVtbikgJiYgKG1pY3JvQ2hhcnRUaXRsZT8udGl0bGUubGVuZ3RoIHx8IG1pY3JvQ2hhcnRUaXRsZT8uZGVzY3JpcHRpb24ubGVuZ3RoKSkge1xuXHRcdFx0XHRjb25zdCB0bXBUZXh0ID1cblx0XHRcdFx0XHRtaWNyb0NoYXJ0VGl0bGUudGl0bGUubGVuZ3RoID4gbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uLmxlbmd0aCA/IG1pY3JvQ2hhcnRUaXRsZS50aXRsZSA6IG1pY3JvQ2hhcnRUaXRsZS5kZXNjcmlwdGlvbjtcblx0XHRcdFx0Y29uc3QgdGl0bGVTaXplID0gU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0bXBUZXh0KSArIDc7XG5cdFx0XHRcdGNvbnN0IHRtcFdpZHRoID0gdGl0bGVTaXplID4gY29sdW1uTGFiZWxXaWR0aCA/IHRpdGxlU2l6ZSA6IGNvbHVtbkxhYmVsV2lkdGg7XG5cdFx0XHRcdHdpZHRoID0gdG1wV2lkdGg7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbHVtbkxhYmVsV2lkdGggPiBjaGFydFNpemUpIHtcblx0XHRcdFx0d2lkdGggPSBjb2x1bW5MYWJlbFdpZHRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2lkdGggPSBjaGFydFNpemU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhZGQgYSBtYXJnaW4gY2xhc3MgYXQgdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBzVmlzdWFsaXphdGlvblxuXHQgKiBAcGFyYW0gaXNMYXN0RmllbGQgSW5kaWNhdGVzIGlmIHRoZSBmaWVsZCBpcyB0aGUgbGFzdCBmaWVsZCBpbiB0aGUgZmllbGQgZ3JvdXBcblx0ICogQHJldHVybnMgQWRqdXN0aW5nIHRoZSBtYXJnaW5cblx0ICovXG5cdGdldE1hcmdpbkNsYXNzOiBmdW5jdGlvbiAoc1Zpc3VhbGl6YXRpb246IHN0cmluZywgaXNMYXN0RmllbGQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGxldCBzQ2xhc3MgPSBcIlwiO1xuXHRcdGlmIChpc0xhc3RGaWVsZCkge1xuXHRcdFx0Ly9JZiByYXRpbmcgaW5kaWNhdG9yIGlzIGxhc3QgZWxlbWVudCBpbiBmaWVsZGdyb3VwLCB0aGVuIHRoZSAwLjVyZW0gbWFyZ2luIGFkZGVkIGJ5IHNhcE1SSSBjbGFzcyBvZiBpbnRlcmFjdGl2ZSByYXRpbmcgaW5kaWNhdG9yIG9uIHRvcCBhbmQgYm90dG9tIG11c3QgYmUgbnVsbGlmaWVkLlxuXHRcdFx0aWYgKHNWaXN1YWxpemF0aW9uID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdFx0c0NsYXNzID0gXCJzYXBVaU5vTWFyZ2luQm90dG9tIHNhcFVpTm9NYXJnaW5Ub3BcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNWaXN1YWxpemF0aW9uID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKSB7XG5cdFx0XHQvL0lmIHJhdGluZyBpbmRpY2F0b3IgaXMgTk9UIHRoZSBsYXN0IGVsZW1lbnQgaW4gZmllbGRncm91cCwgdGhlbiB0byBtYWludGFpbiB0aGUgMC41cmVtIHNwYWNpbmcgYmV0d2VlbiBjb2dldE1hcmdpbkNsYXNzbnRyb2xzIChhcyBwZXIgVVggc3BlYyksXG5cdFx0XHQvL29ubHkgdGhlIHRvcCBtYXJnaW4gYWRkZWQgYnkgc2FwTVJJIGNsYXNzIG9mIGludGVyYWN0aXZlIHJhdGluZyBpbmRpY2F0b3IgbXVzdCBiZSBudWxsaWZpZWQuXG5cblx0XHRcdHNDbGFzcyA9IFwic2FwVWlOb01hcmdpblRvcFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ2xhc3MgPSBcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NsYXNzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IFZCb3ggdmlzaWJpbGl0eS5cblx0ICogQHBhcmFtIGNvbGxlY3Rpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBpbiBWQm94XG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgSGlkZGVuIGV4cHJlc3Npb24gY29udGFpbmVkIGluIEZpZWxkR3JvdXBcblx0ICogQHBhcmFtIGZpZWxkR3JvdXAgRGF0YSBmaWVsZCBjb250YWluaW5nIHRoZSBWQm94XG5cdCAqIEByZXR1cm5zIFZpc2liaWxpdHkgZXhwcmVzc2lvblxuXHQgKi9cblx0Z2V0VkJveFZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRjb2xsZWN0aW9uOiBBcnJheTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uICYgSGlkZGVuPixcblx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdGZpZWxkR3JvdXA6IEZpZWxkR3JvdXAgJiBIaWRkZW5cblx0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGxldCBhbGxTdGF0aWMgPSB0cnVlO1xuXHRcdGNvbnN0IGhpZGRlblBhdGhzID0gW107XG5cblx0XHRpZiAoZmllbGRHcm91cFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGNvbGxlY3Rpb24pIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25WYWx1ZSA9IGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdO1xuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0aGlkZGVuUGF0aHMucHVzaChmYWxzZSk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKHRydWUpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmIChoaWRkZW5Bbm5vdGF0aW9uVmFsdWUuJFBhdGgpIHtcblx0XHRcdFx0aGlkZGVuUGF0aHMucHVzaChwYXRoSW5Nb2RlbChoaWRkZW5Bbm5vdGF0aW9uVmFsdWUuJFBhdGgpKTtcblx0XHRcdFx0YWxsU3RhdGljID0gZmFsc2U7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBoaWRkZW5Bbm5vdGF0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0Ly8gRHluYW1pYyBleHByZXNzaW9uIGZvdW5kIGluIGEgZmllbGRcblx0XHRcdFx0cmV0dXJuIGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBoYXNBbnlQYXRoRXhwcmVzc2lvbnMgPSBjb25zdGFudChoaWRkZW5QYXRocy5sZW5ndGggPiAwICYmIGFsbFN0YXRpYyAhPT0gdHJ1ZSk7XG5cdFx0Y29uc3QgaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMgPSBjb25zdGFudChoaWRkZW5QYXRocy5sZW5ndGggPiAwICYmICFoaWRkZW5QYXRocy5pbmNsdWRlcyhmYWxzZSkgJiYgYWxsU3RhdGljKTtcblxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0aGFzQW55UGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHRmb3JtYXRSZXN1bHQoaGlkZGVuUGF0aHMsIFRhYmxlRm9ybWF0dGVyLmdldFZCb3hWaXNpYmlsaXR5KSxcblx0XHRcdFx0aWZFbHNlKGhhc0FsbEhpZGRlblN0YXRpY0V4cHJlc3Npb25zLCBjb25zdGFudChmYWxzZSksIGNvbnN0YW50KHRydWUpKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHN0YWJsZSBJRCBvZiBhIHRhYmxlIGVsZW1lbnQgKGNvbHVtbiBvciBGaWVsZEdyb3VwIGxhYmVsKS5cblx0ICogQHBhcmFtIHRhYmxlSWQgQ3VycmVudCBvYmplY3QgSURcblx0ICogQHBhcmFtIGVsZW1lbnRJZCBFbGVtZW50IElkIG9yIHN1ZmZpeFxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBkYXRhRmllbGRcblx0ICogQHJldHVybnMgVGhlIHN0YWJsZSBJRCBmb3IgYSBnaXZlbiBjb2x1bW5cblx0ICovXG5cdGdldEVsZW1lbnRTdGFibGVJZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRlbGVtZW50SWQ6IHN0cmluZyxcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+XG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0YWJsZUlkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0XHRsZXQgZGF0YUZpZWxkUGFydDogc3RyaW5nIHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0ZGF0YUZpZWxkUGFydCA9IGRhdGFGaWVsZC5UYXJnZXQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdFx0ZGF0YUZpZWxkUGFydCA9IGRhdGFGaWVsZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy5wYXRoID8/IFwiXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2VuZXJhdGUoW3RhYmxlSWQsIGVsZW1lbnRJZCwgZGF0YUZpZWxkUGFydF0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBzdGFibGUgSUQgb2YgdGhlIGNvbHVtbi5cblx0ICogQHBhcmFtIGlkIEN1cnJlbnQgb2JqZWN0IElEXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIGRhdGFGaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgc3RhYmxlIElEIGZvciBhIGdpdmVuIGNvbHVtblxuXHQgKi9cblx0Z2V0Q29sdW1uU3RhYmxlSWQ6IGZ1bmN0aW9uIChpZDogc3RyaW5nLCBkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gVGFibGVIZWxwZXIuZ2V0RWxlbWVudFN0YWJsZUlkKGlkLCBcIkNcIiwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH0sXG5cblx0Z2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQ6IGZ1bmN0aW9uIChcblx0XHRpZDogc3RyaW5nLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gVGFibGVIZWxwZXIuZ2V0RWxlbWVudFN0YWJsZUlkKGlkLCBcIkZHTGFiZWxcIiwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSAncHJlc3MnIGV2ZW50IGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uLlxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGggVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMuY29udGVudElkIFRoZSBpZCBvZiB0aGUgTURDIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBWYWx1ZSBvZiB0aGUgRGF0YVBvaW50XG5cdCAqIEBwYXJhbSBlbnRpdHlTZXROYW1lIE5hbWUgb2YgdGhlIEVudGl0eVNldFxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwIE9wZXJhdGlvbkF2YWlsYWJsZU1hcCBhcyBzdHJpbmdpZmllZCBKU09OIG9iamVjdFxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0XG5cdCAqIEBwYXJhbSBpc05hdmlnYWJsZSBBY3Rpb24gZWl0aGVyIHRyaWdnZXJzIG5hdmlnYXRpb24gb3Igbm90XG5cdCAqIEBwYXJhbSBlbmFibGVBdXRvU2Nyb2xsIEFjdGlvbiBlaXRoZXIgdHJpZ2dlcnMgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW1zIGluIHRoZSByZWxhdGVkIHRhYmxlIG9yIG5vdFxuXHQgKiBAcGFyYW0gZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIEZ1bmN0aW9uIG5hbWUgdG8gcHJlZmlsbCBkaWFsb2cgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdHByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b246IGZ1bmN0aW9uIChcblx0XHR0YWJsZVByb3BlcnRpZXM6IHtcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+O1xuXHRcdFx0Y29udGVudElkOiBzdHJpbmc7XG5cdFx0fSxcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRlbnRpdHlTZXROYW1lOiBzdHJpbmcsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmcsXG5cdFx0YWN0aW9uT2JqZWN0PzogTWV0YU1vZGVsQWN0aW9uIHwgTWV0YU1vZGVsQWN0aW9uW10gfCBzdHJpbmcsXG5cdFx0aXNOYXZpZ2FibGUgPSBmYWxzZSxcblx0XHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbixcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmcsXG5cdFx0Zm9yQ29udGV4dE1lbnU/OiBib29sZWFuXG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAoIWRhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlTmFtZSA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdHN0YXRpY0FjdGlvbiA9XG5cdFx0XHRcdHR5cGVvZiBhY3Rpb25PYmplY3QgIT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KHRoaXMuX2lzU3RhdGljQWN0aW9uKGFjdGlvbk9iamVjdCwgc0FjdGlvbk5hbWUpIHx8XG5cdFx0XHRcdFx0dGhpcy5faXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZShzQWN0aW9uTmFtZS50b1N0cmluZygpLCB0YXJnZXRFbnRpdHlUeXBlTmFtZSkpLFxuXHRcdFx0YXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0XHRub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIixcblx0XHRcdGNvbnRleHRNZW51UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiLFxuXHRcdFx0Y29udGV4dCA9IHBhdGhJbk1vZGVsKGAke2NvbnRleHRNZW51UGF0aH1zZWxlY3RlZENvbnRleHRzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdHBhcmFtcyA9IHtcblx0XHRcdFx0Y29udGV4dHM6ICFzdGF0aWNBY3Rpb24gPyBjb250ZXh0IDogbnVsbCxcblx0XHRcdFx0YlN0YXRpY0FjdGlvbjogc3RhdGljQWN0aW9uID8gc3RhdGljQWN0aW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lOiBlbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM6ICFzdGF0aWNBY3Rpb25cblx0XHRcdFx0XHQ/IHBhdGhJbk1vZGVsKGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS9gLCBcImludGVybmFsXCIpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6ICFzdGF0aWNBY3Rpb25cblx0XHRcdFx0XHQ/IHBhdGhJbk1vZGVsKGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS9gLCBcImludGVybmFsXCIpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogaXNOYXZpZ2FibGUsXG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IGVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IGRhdGFGaWVsZD8uSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCIsXG5cdFx0XHRcdGNvbnRyb2xJZDogdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCxcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBvcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWxcblx0XHRcdH07XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZuKFwiQVBJLm9uQWN0aW9uUHJlc3NcIiwgW3JlZihcIiRldmVudFwiKSwgcmVmKFwiJGNvbnRyb2xsZXJcIiksIGRhdGFGaWVsZC5BY3Rpb24sIHBhcmFtc10pKTtcblx0XHQvL3JldHVybiBBY3Rpb25IZWxwZXIuZ2V0UHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbih0YWJsZS5pZCEsIGRhdGFGaWVsZCwgcGFyYW1zLCBvcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYWN0aW9ucy5cblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gaXNCb3VuZCBJc0JvdW5kIGZvciBBY3Rpb25cblx0ICogQHBhcmFtIGFjdGlvbk9iamVjdFxuXHQgKiBAcGFyYW0gZW5hYmxlT25TZWxlY3QgRGVmaW5lIHRoZSBlbmFibGluZyBvZiB0aGUgYWN0aW9uIChzaW5nbGUgb3IgbXVsdGlzZWxlY3QpXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgb2YgdGhlIGFubm90YXRpb24gdGFyZ2V0XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHBhcmFtIGlzQ29weVxuXHQgKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXG5cdCAqL1xuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0XHRhY3Rpb25OYW1lOiBzdHJpbmcgfCBTdHJpbmcsXG5cdFx0aXNCb3VuZDogYm9vbGVhbixcblx0XHRhY3Rpb25PYmplY3Q/OiBNZXRhTW9kZWxBY3Rpb24gfCBNZXRhTW9kZWxBY3Rpb25bXSB8IHN0cmluZyxcblx0XHRlbmFibGVPblNlbGVjdD86IHN0cmluZyxcblx0XHRhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGUsXG5cdFx0Zm9yQ29udGV4dE1lbnU/OiBib29sZWFuLFxuXHRcdGlzQ29weT86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgYm9vbGVhbiB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0Y29uc3QgaXNTdGF0aWNBY3Rpb24gPSB0aGlzLl9pc1N0YXRpY0FjdGlvbihhY3Rpb25PYmplY3QsIGFjdGlvbk5hbWUpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFjdGlvbiBvdmVybG9hZCBvbiBhIGRpZmZlcmVudCBFbnRpdHkgdHlwZS5cblx0XHQvLyBJZiB5ZXMsIHRhYmxlIHJvdyBzZWxlY3Rpb24gaXMgbm90IHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGFjdGlvbi5cblx0XHRpZiAodGhpcy5faXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZShhY3Rpb25OYW1lLnRvU3RyaW5nKCksIGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdC8vIEFjdGlvbiBvdmVybG9hZCBkZWZpbmVkIG9uIGRpZmZlcmVudCBlbnRpdHkgdHlwZVxuXHRcdFx0Y29uc3Qgb09wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlRGVmaW5pdGlvbiAmJiBKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0aWYgKG9PcGVyYXRpb25BdmFpbGFibGVNYXA/Lmhhc093blByb3BlcnR5KGFjdGlvbk5hbWUpKSB7XG5cdFx0XHRcdC8vIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gZGVmaW5lZCBmb3IgdGhlIGFjdGlvbi5cblx0XHRcdFx0Ly8gTmVlZCB0byByZWZlciB0byBpbnRlcm5hbCBtb2RlbCBmb3IgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24uXG5cdFx0XHRcdC8vIHJldHVybiBjb21waWxlQmluZGluZyhiaW5kaW5nRXhwcmVzc2lvbihcImR5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbk5hbWUgKyBcIi9iRW5hYmxlZFwiLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuICFmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdD8gYHs9IFxcJHtpbnRlcm5hbD5keW5hbWljQWN0aW9ucy8ke2FjdGlvbk5hbWV9L2JFbmFibGVkfSB9YFxuXHRcdFx0XHRcdDogYHs9IFxcJHtpbnRlcm5hbD5keW5hbWljQWN0aW9ucy8ke2FjdGlvbk5hbWV9L2JFbmFibGVkRm9yQ29udGV4dE1lbnV9IH1gO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ29uc2lkZXIgdGhlIGFjdGlvbiBqdXN0IGxpa2UgYW55IG90aGVyIHN0YXRpYyBEYXRhRmllbGRGb3JBY3Rpb24uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKCFpc0JvdW5kIHx8IGlzU3RhdGljQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gaXNDb3B5XG5cdFx0XHQ/IEFjdGlvbkhlbHBlci5nZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbihcInNpbmdsZVwiLCBmb3JDb250ZXh0TWVudSlcblx0XHRcdDogQWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKGVuYWJsZU9uU2VsZWN0ID8/IFwibXVsdGlzZWxlY3RcIiwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdFx0bGV0IGRhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9uID0gXCJcIjtcblxuXHRcdGNvbnN0IGFjdGlvbiA9ICFmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBgXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWR9YFxuXHRcdFx0OiBgXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX1gO1xuXHRcdGRhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9uID0gYCR7bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSAmJiAke2FjdGlvbn1gO1xuXG5cdFx0cmV0dXJuIGB7PSAke2RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9ufX1gO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9ySUJOIGFjdGlvbnMuXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uICBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHRvIGJlIHVzZWRcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24gVGhlIHRhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIHZhbHVlIG9mIHRoZSBkYXRhIGZpZWxkXG5cdCAqIEBwYXJhbSByZXF1aXJlc0NvbnRleHQgUmVxdWlyZXNDb250ZXh0IGZvciBJQk5cblx0ICogQHBhcmFtIGlzTmF2aWdhdGlvbkF2YWlsYWJsZSBEZWZpbmUgaWYgdGhlIG5hdmlnYXRpb24gaXMgYXZhaWxhYmxlXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXG5cdCAqL1xuXHRpc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZVByb3BlcnRpZXM6IHtcblx0XHRcdGNvbGxlY3Rpb246IENvbnRleHQ7XG5cdFx0XHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHR9LFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdHJlcXVpcmVzQ29udGV4dDogYm9vbGVhbiB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZT86IGJvb2xlYW4gfCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxCb29sZWFuPixcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgYm9vbGVhbiB7XG5cdFx0bGV0IGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggPSBudWxsO1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihpc05hdmlnYXRpb25BdmFpbGFibGUpKSB7XG5cdFx0XHRpc05hdmlnYXRpb25BdmFpbGFibGVQYXRoID0gaXNOYXZpZ2F0aW9uQXZhaWxhYmxlLnBhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IGlzQW5hbHl0aWNhbFRhYmxlID0gdGFibGVQcm9wZXJ0aWVzPy50YWJsZURlZmluaXRpb24/LmVuYWJsZUFuYWx5dGljcztcblxuXHRcdGlmICghcmVxdWlyZXNDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSB0YWJsZVByb3BlcnRpZXMuY29sbGVjdGlvbi5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0YWJsZVByb3BlcnRpZXMuY29sbGVjdGlvbi5nZXRNb2RlbCgpO1xuXHRcdFx0aWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gZmFsc2UgJiYgIWlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBmYWxzZSBpcyBpbmNvcnJlY3QgdXNhZ2VcIik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggJiZcblx0XHRcdFx0IWlzQW5hbHl0aWNhbFRhYmxlICYmXG5cdFx0XHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZD8uTmF2aWdhdGlvbkF2YWlsYWJsZSkgJiZcblx0XHRcdFx0bWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXQgKyBcIi8kUGFydG5lclwiKSA9PT0gZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUucGF0aC5zcGxpdChcIi9cIilbMF1cblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gYHs9IFxcJHske2lzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGguc3Vic3RyaW5nKFxuXHRcdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGguaW5kZXhPZihcIi9cIikgKyAxLFxuXHRcdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgubGVuZ3RoXG5cdFx0XHRcdCl9fX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gXCJcIixcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGFjdGlvbjtcblxuXHRcdGlmIChpc05hdmlnYXRpb25BdmFpbGFibGUgPT09IHRydWUgfHwgaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gIShmb3JDb250ZXh0TWVudSA/PyBmYWxzZSlcblx0XHRcdFx0PyBcIiV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxXCJcblx0XHRcdFx0OiBcIiV7aW50ZXJuYWw+Y29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxXCI7XG5cdFx0fSBlbHNlIGlmIChpc05hdmlnYXRpb25BdmFpbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRMb2cud2FybmluZyhcIk5hdmlnYXRpb25BdmFpbGFibGUgYXMgZmFsc2UgaXMgaW5jb3JyZWN0IHVzYWdlXCIpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSAhKGZvckNvbnRleHRNZW51ID8/IGZhbHNlKVxuXHRcdFx0XHQ/IFwiJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIlxuXHRcdFx0XHQ6IFwiJXtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIjtcblx0XHRcdGFjdGlvbiA9ICEoZm9yQ29udGV4dE1lbnUgPz8gZmFsc2UpXG5cdFx0XHRcdD8gYFxcJHtpbnRlcm5hbD5pYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vYkVuYWJsZWR9YFxuXHRcdFx0XHQ6IGBcXCR7aW50ZXJuYWw+aWJuLyR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke2RhdGFGaWVsZC5BY3Rpb259L2JFbmFibGVkRm9yQ29udGV4dE1lbnV9YDtcblx0XHRcdGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzICsgXCIgJiYgXCIgKyBhY3Rpb247XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGB7PSAke2RhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9ufX1gO1xuXHR9LFxuXG5cdGJ1aWxkRXhwcmVzc2lvbkZvck11bHRpVmFsdWVGaWVsZFJlYWRPbmx5OiBmdW5jdGlvbiAodGFibGU6IFRhYmxlQmxvY2spOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRvcih0YWJsZS5yZWFkT25seSA9PT0gdHJ1ZSwgYW5kKFVJLklzSW5hY3RpdmUsIHRhYmxlLmNyZWF0aW9uTW9kZS5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiKSksXG5cdFx0XHRcdGNvbnN0YW50KHRydWUpLFxuXHRcdFx0XHRlcXVhbCh0YWJsZS5maWVsZE1vZGUsIFwibm93cmFwcGVyXCIpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbGFiZWwgZm9yIHRoZSBjb2x1bW4gaGVhZGVyLlxuXHQgKiBAcGFyYW0gZGF0YWZpZWxkIERhdGFGaWVsZFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQ29sbGVjdGlvbiBMaXN0IG9mIGl0ZW1zIGluc2lkZSBhIGZpZWxkZ3JvdXAgKGlmIGFueSlcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBoZWFkZXIgbGFiZWwgbmVlZHMgdG8gYmUgdmlzaWJsZSBlbHNlIGZhbHNlLlxuXHQgKi9cblx0c2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5OiBmdW5jdGlvbiAoXG5cdFx0ZGF0YWZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbj86IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPltdXG5cdCk6IGJvb2xlYW4ge1xuXHRcdC8vIElmIElubGluZSBidXR0b24vbmF2aWdhdGlvbiBhY3Rpb24sIHJldHVybiBmYWxzZSwgZWxzZSB0cnVlO1xuXHRcdGlmICghZGF0YUZpZWxkQ29sbGVjdGlvbikge1xuXHRcdFx0aWYgKGRhdGFmaWVsZC4kVHlwZT8uaW5jbHVkZXMoXCJEYXRhRmllbGRGb3JBY3Rpb25cIikgJiYgZGF0YWZpZWxkLklubGluZSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGF0YWZpZWxkLiRUeXBlPy5pbmNsdWRlcyhcIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKSAmJiBkYXRhZmllbGQuSW5saW5lKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEluIEZpZWxkZ3JvdXAsIElmIE5PVCBhbGwgZGF0YWZpZWxkL2RhdGFmaWVsZEZvckFubm90YXRpb24gZXhpc3RzIHdpdGggaGlkZGVuLCByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gZGF0YUZpZWxkQ29sbGVjdGlvbi5zb21lKGZ1bmN0aW9uIChvREMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KG9EQy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8IG9EQy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikgJiZcblx0XHRcdFx0KG9EQyBhcyB1bmtub3duIGFzIEhpZGRlbilbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gaW50byB0aGUgY29sdW1uLlxuXHQgKiBAcGFyYW0gb0RhdGFGaWVsZCBEYXRhUG9pbnQncyBWYWx1ZVxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvYmplY3Qgb2YgdGhlIExpbmVJdGVtXG5cdCAqIEBwYXJhbSBvQ29udGV4dC5jb250ZXh0IENvbnRleHQgb2JqZWN0IG9mIHRoZSBMaW5lSXRlbVxuXHQgKiBAcmV0dXJucyBTdHJpbmcgZnJvbSBsYWJlbCByZWZlcnJpbmcgdG8gYWN0aW9uIHRleHRcblx0ICovXG5cdGdldFRleHRPbkFjdGlvbkZpZWxkOiBmdW5jdGlvbiAoXG5cdFx0b0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0XHRvQ29udGV4dDogeyBjb250ZXh0OiBCYXNlQ29udGV4dCB9XG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0XHQpIHtcblx0XHRcdHJldHVybiBvRGF0YUZpZWxkLkxhYmVsO1xuXHRcdH1cblx0XHQvLyBmb3IgRmllbGRHcm91cCBjb250YWluaW5nIERhdGFGaWVsZEZvckFubm90YXRpb25cblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0XHRvQ29udGV4dC5jb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApID4gLTFcblx0XHQpIHtcblx0XHRcdGNvbnN0IHNQYXRoRGF0YUZpZWxkcyA9IFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiO1xuXHRcdFx0Y29uc3QgYU11bHRpcGxlTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KHNQYXRoRGF0YUZpZWxkcykpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9LyRUeXBlYCkgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9LyRUeXBlYCkgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhTXVsdGlwbGVMYWJlbHMucHVzaChvQ29udGV4dC5jb250ZXh0LmdldE9iamVjdChgJHtzUGF0aERhdGFGaWVsZHMgKyBpfS9MYWJlbGApKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgYWN0aW9ucyBpbnNpZGUgYSBGaWVsZCBHcm91cCBzZWxlY3QgdGhlIGxhcmdlc3QgQWN0aW9uIExhYmVsXG5cdFx0XHRpZiAoYU11bHRpcGxlTGFiZWxzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0cmV0dXJuIGFNdWx0aXBsZUxhYmVscy5yZWR1Y2UoZnVuY3Rpb24gKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubGVuZ3RoID4gYi5sZW5ndGggPyBhIDogYjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYU11bHRpcGxlTGFiZWxzLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGFNdWx0aXBsZUxhYmVscy50b1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHRfZ2V0UmVzcG9uc2l2ZVRhYmxlQ29sdW1uU2V0dGluZ3M6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBUYWJsZUNvbHVtblNldHRpbmdzIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob1RoaXMudGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRyZXR1cm4gb0NvbHVtbi5zZXR0aW5ncztcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHRnZXRDaGFydFNpemU6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5fZ2V0UmVzcG9uc2l2ZVRhYmxlQ29sdW1uU2V0dGluZ3Mob1RoaXMsIG9Db2x1bW4pO1xuXHRcdGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5taWNyb0NoYXJ0U2l6ZSkge1xuXHRcdFx0cmV0dXJuIHNldHRpbmdzLm1pY3JvQ2hhcnRTaXplO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJYU1wiO1xuXHR9LFxuXHRnZXRTaG93T25seUNoYXJ0OiBmdW5jdGlvbiAob1RoaXM6IENvbHVtbldpZHRoVGhpcywgb0NvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5ncyhvVGhpcywgb0NvbHVtbik7XG5cdFx0aWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnNob3dNaWNyb0NoYXJ0TGFiZWwpIHtcblx0XHRcdHJldHVybiAhc2V0dGluZ3Muc2hvd01pY3JvQ2hhcnRMYWJlbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Z2V0RGVsZWdhdGU6IGZ1bmN0aW9uICh0YWJsZTogVGFibGVWaXN1YWxpemF0aW9uLCBpc0FMUDogYm9vbGVhbiwgZW50aXR5TmFtZTogc3RyaW5nLCBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRsZXQgZGVsZWdhdGU6IHtcblx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdHBheWxvYWQ/OlxuXHRcdFx0XHR8IHsgY29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7IGZpbHRlck9uQWN0aXZlRW50aXRpZXM/OiBib29sZWFuOyBhZ2dyZWdhdGlvbkNvbmZpZ3VyYXRpb24/OiB7IGxlYWZMZXZlbDogYm9vbGVhbiB9IH1cblx0XHRcdFx0fCB7XG5cdFx0XHRcdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI6IHN0cmluZztcblx0XHRcdFx0XHRcdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcblx0XHRcdFx0XHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGJvb2xlYW47XG5cdFx0XHRcdFx0XHRjcmVhdGVJblBsYWNlPzogYm9vbGVhbjtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbj86IHsgbGVhZkxldmVsOiBib29sZWFuIH07XG5cdFx0XHRcdCAgfTtcblx0XHR9O1xuXHRcdGlmIChpc0FMUCkge1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBUcmVlVGFibGUgaW4gQUxQXG5cdFx0XHRpZiAodGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRyZWVUYWJsZSBub3Qgc3VwcG9ydGVkIGluIEFuYWx5dGljYWwgTGlzdFBhZ2VcIik7XG5cdFx0XHR9XG5cdFx0XHRkZWxlZ2F0ZSA9IHtcblx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9BTFBUYWJsZURlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRjb2xsZWN0aW9uTmFtZTogZW50aXR5TmFtZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyAmJiBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKSB7XG5cdFx0XHRcdGRlbGVnYXRlLnBheWxvYWQhLmZpbHRlck9uQWN0aXZlRW50aXRpZXMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0XHRpZiAoIXRhYmxlLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgaGllcmFyY2h5IHF1YWxpZmllciBpcyBtYW5kYXRvcnkgd2l0aCBhIFRyZWVUYWJsZVwiKTtcblx0XHRcdH1cblx0XHRcdGRlbGVnYXRlID0ge1xuXHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL1RyZWVUYWJsZURlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI6IHRhYmxlLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyLFxuXHRcdFx0XHRcdGluaXRpYWxFeHBhbnNpb25MZXZlbDogdGFibGUuYW5ub3RhdGlvbi5pbml0aWFsRXhwYW5zaW9uTGV2ZWwsXG5cdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllcyxcblx0XHRcdFx0XHRjcmVhdGVJblBsYWNlOiB0YWJsZS5jb250cm9sLmNyZWF0ZUluUGxhY2UgPT09IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZWdhdGUgPSB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVGFibGVEZWxlZ2F0ZVwiXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyAmJiBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKSB7XG5cdFx0XHRcdGRlbGVnYXRlLnBheWxvYWQgPSB7XG5cdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllc1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0YWJsZS5lbmFibGVBbmFseXRpY3MgPT09IHRydWUgJiYgdGFibGUuY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCA9PT0gdHJ1ZSkge1xuXHRcdFx0ZGVsZWdhdGUucGF5bG9hZCA9IHsgLi4uZGVsZWdhdGUucGF5bG9hZCwgLi4ueyBhZ2dyZWdhdGlvbkNvbmZpZ3VyYXRpb246IHsgbGVhZkxldmVsOiB0cnVlIH0gfSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShkZWxlZ2F0ZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSBvRmFzdENyZWF0aW9uUm93XG5cdCAqIEBwYXJhbSBzUGF0aFxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9Nb2RlbFxuXHQgKiBAcGFyYW0gb0ZpbmFsVUlTdGF0ZVxuXHQgKi9cblx0ZW5hYmxlRmFzdENyZWF0aW9uUm93OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b0Zhc3RDcmVhdGlvblJvdzogQ3JlYXRpb25Sb3cgfCB1bmRlZmluZWQsXG5cdFx0c1BhdGg6IHN0cmluZyxcblx0XHRvQ29udGV4dDogdjRDb250ZXh0LFxuXHRcdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcsIG9GYXN0Q3JlYXRpb25Db250ZXh0O1xuXG5cdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IG9GaW5hbFVJU3RhdGU7XG5cdFx0XHRcdC8vIElmIGEgZHJhZnQgaXMgZGlzY2FyZGVkIHdoaWxlIGEgbWVzc2FnZSBzdHJpcCBmaWx0ZXIgaXMgYWN0aXZlIG9uIHRoZSB0YWJsZSB0aGVyZSBpcyBhIHRhYmxlIHJlYmluZCBjYXVzZWQgYnkgdGhlIERhdGFTdGF0ZUluZGljYXRvclxuXHRcdFx0XHQvLyBUbyBwcmV2ZW50IGEgbmV3IGNyZWF0aW9uIHJvdyBiaW5kaW5nIGJlaW5nIGNyZWF0ZWQgYXQgdGhhdCBtb21lbnQgd2UgY2hlY2sgaWYgdGhlIGNvbnRleHQgaXMgYWxyZWFkeSBkZWxldGVkXG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9GYXN0Q3JlYXRpb25Sb3cpICYmICFvQ29udGV4dC5pc0RlbGV0ZWQoKSkge1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyA9IG9Nb2RlbC5iaW5kTGlzdChzUGF0aCwgb0NvbnRleHQsIFtdLCBbXSwge1xuXHRcdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcImRvTm90U3VibWl0XCIsXG5cdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdC8vIFdvcmthcm91bmQgc3VnZ2VzdGVkIGJ5IE9EYXRhIG1vZGVsIHY0IGNvbGxlYWd1ZXNcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvKiBkbyBub3RoaW5nICovXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvRmFzdENyZWF0aW9uQ29udGV4dCA9IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG9GYXN0Q3JlYXRpb25Db250ZXh0KTtcblxuXHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3Jcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgb0Zhc3RDcmVhdGlvbkNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBmYXN0IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjb21wdXRpbmcgdGhlIGZpbmFsIFVJIHN0YXRlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRXZhbHVhdGVzLCBpZiBhY3Rpb24gc2hvdWxkIGJlIHNob3duIGluIHRoZSB0YWJsZSBjb250ZXh0IG1lbnUuXG5cdCAqIFNob3cgYWN0aW9uIG9ubHkgZm9yIGJvdW5kIGFjdGlvbnMsIHdoZW4gcmVxdWlyZXNTZWxlY3Rpb24gaXMgc2V0IGZvciBjdXN0b20gYWN0aW9ucyBvciB3aGVuIGNvbnRleHQgaXMgcmVxdWlyZWQgZm9yIElCTiBhY3Rpb25zLlxuXHQgKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUsIGlmIGFjdGlvbiBzaG91bGQgYmUgZGlzcGxheWVkIGluIGNvbnRleHQgbWVudSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0FjdGlvblNob3duSW5Db250ZXh0TWVudTogZnVuY3Rpb24gKFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdFx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkID0gYWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0XHQ/IChjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChhY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhc1xuXHRcdFx0XHRcdHwgRGF0YUZpZWxkRm9yQWN0aW9uXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjoge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGFjdGlvblRhcmdldD8uaXNCb3VuZCA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRcdCFhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXS5pc0NvbGxlY3Rpb24gJiZcblx0XHRcdFx0XHRhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG4oVGFibGVIZWxwZXIuZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZU1hcCBhcyB7IHJlcXVpcmVzSUNvbnRleHQ/OiBib29sZWFuIH0pLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuKFRhYmxlSGVscGVyLmdldFRleHRPbkFjdGlvbkZpZWxkIGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmV4cG9ydCBkZWZh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
|
|
675
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsImFjdGlvbk9iamVjdCIsImFjdGlvbk5hbWUiLCJhY3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJlbnRpdHlUeXBlIiwiX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZSIsInRvU3RyaW5nIiwiZmluZCIsIl9hY3Rpb24iLCIkSXNCb3VuZCIsIiRQYXJhbWV0ZXIiLCIkVHlwZSIsIiRpc0NvbGxlY3Rpb24iLCJzQWN0aW9uTmFtZSIsImluY2x1ZGVzIiwiYVBhcnRzIiwic3BsaXQiLCJsZW5ndGgiLCJyZXBsYWNlQWxsIiwidW5kZWZpbmVkIiwiX2lzQWN0aW9uT3ZlcmxvYWRPbkRpZmZlcmVudFR5cGUiLCJzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUiLCJzRW50aXR5VHlwZSIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJsaW5lSXRlbUNvbGxlY3Rpb24iLCJvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCIsImZvckVhY2giLCJyZWNvcmQiLCJzS2V5IiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJJbmxpbmUiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJwYXRoIiwiT2JqZWN0Iiwia2V5cyIsImdldFVpTGluZUl0ZW1PYmplY3QiLCJsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dCIsImNvbnZlcnRlZE1ldGFEYXRhIiwibGluZUl0ZW1PclByZXNlbnRhdGlvbk9iamVjdCIsInJlc29sdmVQYXRoIiwiZ2V0UGF0aCIsInRhcmdldCIsInZpc3VhbGl6YXRpb25zIiwiVmlzdWFsaXphdGlvbnMiLCJsaW5lSXRlbU9iamVjdCIsIml0ZW0iLCJ2YWx1ZSIsImluZGV4T2YiLCIkdGFyZ2V0IiwidGVybSIsImNyZWF0ZUJpbmRpbmdUb0xvYWRQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsInByb3BlcnR5QmluZGluZ3MiLCJtYXAiLCJwcm9wIiwicGF0aEluTW9kZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsImdldENvbHVtbldpZHRoIiwib1RoaXMiLCJjb2x1bW4iLCJkYXRhRmllbGQiLCJkYXRhRmllbGRBY3Rpb25UZXh0IiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsInVzZVJlbVVuaXQiLCJtaWNyb0NoYXJ0VGl0bGUiLCJ3aWR0aCIsImVuYWJsZUF1dG9Db2x1bW5XaWR0aCIsImdldENvbHVtbldpZHRoRm9ySW1hZ2UiLCJnZXRDb2x1bW5XaWR0aEZvckRhdGFGaWVsZCIsIm5hbWUiLCJfc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uIiwic29ydGFibGUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInJlcXVpcmVkIiwiVGFibGVGb3JtYXR0ZXIiLCJhbm5vdGF0aW9ucyIsInRhcmdldE9iamVjdCIsIlZhbHVlIiwiZGF0YVR5cGUiLCJ0eXBlIiwiZ2V0RWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsImhhc1RleHRBbm5vdGF0aW9uIiwiaGFzVGV4dCIsIkNvcmUiLCJNZWRpYVR5cGUiLCJpc0ltYWdlVVJMIiwidGFibGUiLCJ3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciIsIlRhcmdldCIsIiRBbm5vdGF0aW9uUGF0aCIsIm5UbXBUZXh0V2lkdGgiLCJTaXplSGVscGVyIiwiZ2V0QnV0dG9uV2lkdGgiLCJMYWJlbCIsIm5UbXBWaXN1YWxpemF0aW9uV2lkdGgiLCJUYWJsZVNpemVIZWxwZXIiLCJnZXRXaWR0aEZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCJwcm9wZXJ0eVdpZHRoIiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiZ2V0Q29sdW1uV2lkdGhGb3JDaGFydCIsImNvbHVtbkxhYmVsV2lkdGgiLCJjaGFydFNpemUiLCJnZXRDaGFydFNpemUiLCJnZXRTaG93T25seUNoYXJ0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInRtcFRleHQiLCJ0aXRsZVNpemUiLCJ0bXBXaWR0aCIsImdldE1hcmdpbkNsYXNzIiwic1Zpc3VhbGl6YXRpb24iLCJpc0xhc3RGaWVsZCIsInNDbGFzcyIsImdldFZCb3hWaXNpYmlsaXR5IiwiY29sbGVjdGlvbiIsImZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucyIsImZpZWxkR3JvdXAiLCJhbGxTdGF0aWMiLCJoaWRkZW5QYXRocyIsImhpZGRlbkFubm90YXRpb25WYWx1ZSIsInB1c2giLCIkUGF0aCIsImhhc0FueVBhdGhFeHByZXNzaW9ucyIsImNvbnN0YW50IiwiaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMiLCJpZkVsc2UiLCJnZXRFbGVtZW50U3RhYmxlSWQiLCJ0YWJsZUlkIiwiZWxlbWVudElkIiwiZGF0YUZpZWxkUGFydCIsImdlbmVyYXRlIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJpZCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwicHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbiIsInRhYmxlUHJvcGVydGllcyIsImVudGl0eVNldE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJpc05hdmlnYWJsZSIsImFyZ3VtZW50cyIsImVuYWJsZUF1dG9TY3JvbGwiLCJkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24iLCJmb3JDb250ZXh0TWVudSIsInRhcmdldEVudGl0eVR5cGVOYW1lIiwiY29udGV4dE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic3RhdGljQWN0aW9uIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiY29udGV4dE1lbnVQYXRoIiwiY29udGV4dCIsInBhcmFtcyIsImNvbnRleHRzIiwiYlN0YXRpY0FjdGlvbiIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5vdEFwcGxpY2FibGVDb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsIkludm9jYXRpb25Hcm91cGluZyIsImNvbnRyb2xJZCIsImNvbnRlbnRJZCIsImxhYmVsIiwiZm4iLCJyZWYiLCJpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQiLCJ0YWJsZURlZmluaXRpb24iLCJpc0JvdW5kIiwiZW5hYmxlT25TZWxlY3QiLCJhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSIsImlzQ29weSIsImlzU3RhdGljQWN0aW9uIiwib09wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsImhhc093blByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uSGVscGVyIiwiZ2V0TnVtYmVyT2ZDb250ZXh0c0V4cHJlc3Npb24iLCJkYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsInJlcXVpcmVzQ29udGV4dCIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgiLCJpc0FuYWx5dGljYWxUYWJsZSIsImVuYWJsZUFuYWx5dGljcyIsImVudGl0eVNldCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiTG9nIiwid2FybmluZyIsImdldE9iamVjdCIsInN1YnN0cmluZyIsImRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uIiwiYnVpbGRFeHByZXNzaW9uRm9yTXVsdGlWYWx1ZUZpZWxkUmVhZE9ubHkiLCJvciIsInJlYWRPbmx5IiwiYW5kIiwiVUkiLCJJc0luYWN0aXZlIiwiY3JlYXRpb25Nb2RlIiwiZXF1YWwiLCJmaWVsZE1vZGUiLCJzZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkiLCJkYXRhZmllbGQiLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwic29tZSIsIm9EQyIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwib0RhdGFGaWVsZCIsIm9Db250ZXh0Iiwic1BhdGhEYXRhRmllbGRzIiwiYU11bHRpcGxlTGFiZWxzIiwiaSIsInJlZHVjZSIsImEiLCJiIiwiX2dldFJlc3BvbnNpdmVUYWJsZUNvbHVtblNldHRpbmdzIiwib0NvbHVtbiIsInRhYmxlVHlwZSIsInNldHRpbmdzIiwibWljcm9DaGFydFNpemUiLCJzaG93TWljcm9DaGFydExhYmVsIiwiZ2V0RGVsZWdhdGUiLCJpc0FMUCIsImVudGl0eU5hbWUiLCJmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzIiwiZGVsZWdhdGUiLCJjb250cm9sIiwiRXJyb3IiLCJwYXlsb2FkIiwiY29sbGVjdGlvbk5hbWUiLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJpbml0aWFsRXhwYW5zaW9uTGV2ZWwiLCJhbm5vdGF0aW9uIiwiY3JlYXRlSW5QbGFjZSIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbiIsImxlYWZMZXZlbCIsInN0cmluZ2lmeSIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJzUGF0aCIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uQ29udGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsImlzRGVsZXRlZCIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwiJCRncm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwic2V0QmluZGluZ0NvbnRleHQiLCJjcmVhdGVkIiwiZSIsInRyYWNlIiwib0Vycm9yIiwiZXJyb3IiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFubm90YXRpb25QYXRoIiwiY29udmVydGVkVHlwZXMiLCJhY3Rpb25UYXJnZXQiLCJBY3Rpb25UYXJnZXQiLCJwYXJhbWV0ZXJzIiwiaXNDb2xsZWN0aW9uIiwic291cmNlRW50aXR5VHlwZSIsInZhbHVlT2YiLCJyZXF1aXJlc1NlbGVjdGlvbiIsInJlcXVpcmVzSUNvbnRleHQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVR5cGUsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0RGF0YUZpZWxkVHlwZXMsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRQcmVzZW50YXRpb25WYXJpYW50VHlwZSxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmbixcblx0Zm9ybWF0UmVzdWx0LFxuXHRpZkVsc2UsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVmLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb2x1bW5TZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25BY3Rpb24sIEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25UYWJsZUNvbHVtbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9Db2x1bW5zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBTaXplSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NpemVIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNUZXh0LCBpc0ltYWdlVVJMIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldEVkaXRNb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgVGFibGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IEFjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgVGFibGVCbG9jayBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZS5ibG9ja1wiO1xuaW1wb3J0IFRhYmxlU2l6ZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVNpemVIZWxwZXJcIjtcbmltcG9ydCBGaWVsZEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL0ZpZWxkRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBCYXNlQ29udGV4dCwgZGVmYXVsdCBhcyBDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB2NENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG50eXBlIEhpZGRlbiA9IHsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCI6IGJvb2xlYW4gfCB7ICRQYXRoPzogc3RyaW5nIH0gfTtcbnR5cGUgQ29sdW1uV2lkdGhUaGlzID0geyBlbmFibGVBdXRvQ29sdW1uV2lkdGg/OiBib29sZWFuOyB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcj86IGJvb2xlYW47IHRhYmxlVHlwZTogc3RyaW5nIH07XG50eXBlIE1pY3JvQ2hhcnRJbmZvID0geyB0aXRsZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nIH07XG4vKipcbiAqIEhlbHBlciBjbGFzcyB1c2VkIGJ5IHRoZSBjb250cm9sIGxpYnJhcnkgZm9yIE9EYXRhLXNwZWNpZmljIGhhbmRsaW5nIChPRGF0YSBWNClcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFRhYmxlSGVscGVyID0ge1xuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBnaXZlbiBhY3Rpb24gaXMgc3RhdGljLlxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0IFRoZSBpbnN0YW5jZSBvciB0aGUgcGF0aCBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBhY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgYWN0aW9uIGlzIHN0YXRpYywgZWxzZSAnZmFsc2UnXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfaXNTdGF0aWNBY3Rpb246IGZ1bmN0aW9uIChhY3Rpb25PYmplY3Q6IE1ldGFNb2RlbEFjdGlvbiB8IE1ldGFNb2RlbEFjdGlvbltdIHwgdW5kZWZpbmVkIHwgc3RyaW5nLCBhY3Rpb25OYW1lOiBTdHJpbmcpOiBib29sZWFuIHtcblx0XHRsZXQgYWN0aW9uOiBNZXRhTW9kZWxBY3Rpb24gfCB1bmRlZmluZWQgfCBzdHJpbmc7XG5cdFx0aWYgKGFjdGlvbk9iamVjdCkge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uT2JqZWN0KSkge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gdGhpcy5fZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlKGFjdGlvbk5hbWUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0YWN0aW9uID0gYWN0aW9uT2JqZWN0LmZpbmQoZnVuY3Rpb24gKF9hY3Rpb246IE1ldGFNb2RlbEFjdGlvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIF9hY3Rpb24uJElzQm91bmQgJiYgX2FjdGlvbi4kUGFyYW1ldGVyWzBdLiRUeXBlID09PSBlbnRpdHlUeXBlO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoaXMgaXMganVzdCBvbmUgLSBPSyB3ZSB0YWtlIGl0LiBJZiBpdCdzIG1vcmUgaXQncyBhY3R1YWxseSBhIHdyb25nIHVzYWdlIGJ5IHRoZSBhcHBcblx0XHRcdFx0XHQvLyBhcyB3ZSB1c2VkIHRoZSBmaXJzdCBvbmUgYWxsIHRoZSB0aW1lIHdlIGtlZXAgaXQgYXMgaXQgaXNcblx0XHRcdFx0XHRhY3Rpb24gPSBhY3Rpb25PYmplY3RbMF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFjdGlvbiA9IGFjdGlvbk9iamVjdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gISFhY3Rpb24gJiYgdHlwZW9mIGFjdGlvbiAhPT0gXCJzdHJpbmdcIiAmJiBhY3Rpb24uJElzQm91bmQgJiYgISFhY3Rpb24uJFBhcmFtZXRlclswXS4kaXNDb2xsZWN0aW9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGVudGl0eSB0eXBlIG9mIGFuIGFjdGlvbiBvdmVybG9hZC5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZSB1c2VkIGluIHRoZSBhY3Rpb24gb3ZlcmxvYWQuXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZ2V0QWN0aW9uT3ZlcmxvYWRFbnRpdHlUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNBY3Rpb25OYW1lICYmIHNBY3Rpb25OYW1lLmluY2x1ZGVzKFwiKFwiKSkge1xuXHRcdFx0Y29uc3QgYVBhcnRzID0gc0FjdGlvbk5hbWUuc3BsaXQoXCIoXCIpO1xuXHRcdFx0cmV0dXJuIGFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0ucmVwbGFjZUFsbChcIilcIiwgXCJcIik7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBhY3Rpb24gaXMgb3ZlcmxvYWRlZCBvbiBhIGRpZmZlcmVudCBlbnRpdHkgdHlwZS5cblx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBzQW5ub3RhdGlvblRhcmdldEVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlIG9mIHRoZSBhbm5vdGF0aW9uIHRhcmdldC5cblx0ICogQHJldHVybnMgUmV0dXJucyAndHJ1ZScgaWYgdGhlIGFjdGlvbiBpcyBvdmVybG9hZGVkIHdpdGggYSBkaWZmZXJlbnQgZW50aXR5IHR5cGUsIGVsc2UgJ2ZhbHNlJy5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdF9pc0FjdGlvbk92ZXJsb2FkT25EaWZmZXJlbnRUeXBlOiBmdW5jdGlvbiAoc0FjdGlvbk5hbWU6IHN0cmluZywgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoaXMuX2dldEFjdGlvbk92ZXJsb2FkRW50aXR5VHlwZShzQWN0aW9uTmFtZSk7XG5cdFx0cmV0dXJuICEhc0VudGl0eVR5cGUgJiYgc0Fubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZTtcblx0fSxcblxuXHRnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwOiBmdW5jdGlvbiAobGluZUl0ZW1Db2xsZWN0aW9uOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzW10gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb0lCTk5hdmlnYXRpb25BdmFpbGFibGVNYXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0bGluZUl0ZW1Db2xsZWN0aW9uPy5mb3JFYWNoKChyZWNvcmQpID0+IHtcblx0XHRcdGlmIChcIlNlbWFudGljT2JqZWN0XCIgaW4gcmVjb3JkKSB7XG5cdFx0XHRcdGNvbnN0IHNLZXkgPSBgJHtyZWNvcmQuU2VtYW50aWNPYmplY3R9LSR7cmVjb3JkLkFjdGlvbn1gO1xuXHRcdFx0XHRpZiAocmVjb3JkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiYgIXJlY29yZC5JbmxpbmUgJiYgcmVjb3JkLlJlcXVpcmVzQ29udGV4dCkge1xuXHRcdFx0XHRcdGlmIChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcFtzS2V5XSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHJlY29yZC5OYXZpZ2F0aW9uQXZhaWxhYmxlKVxuXHRcdFx0XHRcdFx0XHQ/IChyZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248Ym9vbGVhbj4pLnBhdGhcblx0XHRcdFx0XHRcdFx0OiByZWNvcmQuTmF2aWdhdGlvbkF2YWlsYWJsZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBPYmplY3Qua2V5cyhvSUJOTmF2aWdhdGlvbkF2YWlsYWJsZU1hcCkubGVuZ3RoID4gMCA/IG9JQk5OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGdldFVpTGluZUl0ZW1PYmplY3Q6IGZ1bmN0aW9uIChcblx0XHRsaW5lSXRlbU9yUHJlc2VudGF0aW9uQ29udGV4dDogQ29udGV4dCxcblx0XHRjb252ZXJ0ZWRNZXRhRGF0YTogQ29udmVydGVkTWV0YWRhdGFcblx0KTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1tdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0ID0gY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXNcblx0XHRcdHwgUHJlc2VudGF0aW9uVmFyaWFudFxuXHRcdFx0fCBMaW5lSXRlbTtcblx0XHRpZiAoIWxpbmVJdGVtT3JQcmVzZW50YXRpb25PYmplY3QpIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAoY29udmVydGVkTWV0YURhdGEucmVzb2x2ZVBhdGgobGluZUl0ZW1PclByZXNlbnRhdGlvbkNvbnRleHQuZ2V0UGF0aCgpKS50YXJnZXQgYXMgUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpXG5cdFx0XHQuVmlzdWFsaXphdGlvbnM7XG5cblx0XHRjb25zdCBsaW5lSXRlbU9iamVjdCA9IChcblx0XHRcdHZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdD8gdmlzdWFsaXphdGlvbnM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSA9PT0gMCk/LiR0YXJnZXRcblx0XHRcdFx0OiBsaW5lSXRlbU9yUHJlc2VudGF0aW9uT2JqZWN0XG5cdFx0KSBhcyBMaW5lSXRlbTtcblx0XHRyZXR1cm4gbGluZUl0ZW1PYmplY3Q/LnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtID8gbGluZUl0ZW1PYmplY3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuZCByZXR1cm5zIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCBhIGdpdmVuIGxpc3Qgb2YgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIHByb3BlcnRpZXMgTGlzdCBvZiBwcm9wZXJ0aWVzIHVzZWQgb24gYSBjdXN0b20gY29sdW1uXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gbG9hZCB0aGUgZ2l2ZW4gbGlzdCBvZiBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRjcmVhdGVCaW5kaW5nVG9Mb2FkUHJvcGVydGllczogZnVuY3Rpb24gKHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmdzID0gcHJvcGVydGllcz8ubWFwKChwcm9wKSA9PiBwYXRoSW5Nb2RlbChwcm9wKSkgPz8gW107XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChwcm9wZXJ0eUJpbmRpbmdzLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjbG9hZFByb3BlcnRpZXNcIikpO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCBjb2x1bW4ncyB3aWR0aCBpZiBkZWZpbmVkIGZyb20gbWFuaWZlc3Qgb3IgZnJvbSBjdXN0b21pemF0aW9uIHZpYSBhbm5vdGF0aW9ucy5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBvVGhpcy5lbmFibGVBdXRvQ29sdW1uV2lkdGggSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseVxuXHQgKiBAcGFyYW0gb1RoaXMud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKiBAcGFyYW0gY29sdW1uIERlZmluZWQgd2lkdGggb2YgdGhlIGNvbHVtbiwgd2hpY2ggaXMgdGFrZW4gd2l0aCBwcmlvcml0eSBpZiBub3QgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5XG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGRlZmluaXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSBkYXRhRmllbGRBY3Rpb25UZXh0IERhdGFGaWVsZCdzIHRleHQgZnJvbSBidXR0b25cblx0ICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIG9iamVjdCBwYXRoIG9mIHRoZSBkYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSB1c2VSZW1Vbml0IEluZGljYXRlcyBpZiB0aGUgcmVtIHVuaXQgbXVzdCBiZSBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgY29sdW1uIHdpZHRoIHJlc3VsdFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlIFRoZSBvYmplY3QgY29udGFpbmluZyB0aXRsZSBhbmQgZGVzY3JpcHRpb24gb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZS50aXRsZSBUaGUgdGl0bGUgb2YgdGhlIG1pY3JvY2hhcnRcblx0ICogQHBhcmFtIG1pY3JvQ2hhcnRUaXRsZS5kZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG1pY3JvY2hhcnRcblx0ICogQHJldHVybnMgLSBDb2x1bW4gd2lkdGggaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIHdpZHRoIGlzIHNldCB0byBhdXRvXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gKFxuXHRcdG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsXG5cdFx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0ZGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZCB8IERhdGFGaWVsZEZvckFubm90YXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+LFxuXHRcdGRhdGFGaWVsZEFjdGlvblRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRcdHVzZVJlbVVuaXQ6IGJvb2xlYW4sXG5cdFx0bWljcm9DaGFydFRpdGxlPzogTWljcm9DaGFydEluZm9cblx0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuXHRcdGlmIChjb2x1bW4ud2lkdGgpIHtcblx0XHRcdHJldHVybiBjb2x1bW4ud2lkdGg7XG5cdFx0fVxuXHRcdGlmIChvVGhpcy5lbmFibGVBdXRvQ29sdW1uV2lkdGggPT09IHRydWUpIHtcblx0XHRcdGxldCB3aWR0aDtcblx0XHRcdHdpZHRoID1cblx0XHRcdFx0dGhpcy5nZXRDb2x1bW5XaWR0aEZvckltYWdlKGRhdGFNb2RlbE9iamVjdFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRUeXBlcz4pIHx8XG5cdFx0XHRcdHRoaXMuZ2V0Q29sdW1uV2lkdGhGb3JEYXRhRmllbGQob1RoaXMsIGNvbHVtbiwgZGF0YUZpZWxkLCBkYXRhRmllbGRBY3Rpb25UZXh0LCBkYXRhTW9kZWxPYmplY3RQYXRoLCBtaWNyb0NoYXJ0VGl0bGUpIHx8XG5cdFx0XHRcdHVuZGVmaW5lZDtcblx0XHRcdGlmICh3aWR0aCkge1xuXHRcdFx0XHRyZXR1cm4gdXNlUmVtVW5pdCA/IGAke3dpZHRofXJlbWAgOiB3aWR0aDtcblx0XHRcdH1cblx0XHRcdHdpZHRoID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGZvcm1hdFJlc3VsdChcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIi9lZGl0TW9kZVwiLCBcInVpXCIpLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCJ0YWJsZVByb3BlcnRpZXNBdmFpbGFibGVcIiwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdFx0XHRcdGNvbHVtbi5uYW1lLFxuXHRcdFx0XHRcdFx0dXNlUmVtVW5pdCxcblx0XHRcdFx0XHRcdHRoaXMuX3Nob3VsZEluY2x1ZGVIZWFkZXJJbkNvbHVtbndpZGhDYWxjdWxhdGlvbihvVGhpcywgY29sdW1uKSxcblx0XHRcdFx0XHRcdGNvbHVtbi5zb3J0YWJsZSA/PyBmYWxzZSxcblx0XHRcdFx0XHRcdHJlc29sdmVCaW5kaW5nU3RyaW5nKGNvbHVtbi5yZXF1aXJlZCA/PyBmYWxzZSwgXCJib29sZWFuXCIpIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxib29sZWFuPlxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0VGFibGVGb3JtYXR0ZXIuZ2V0Q29sdW1uV2lkdGhcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB3aWR0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIGFuIGltYWdlLlxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAodGhlIHdpZHRoIGlzIHRyZWF0ZWQgYXMgYSByZW0gdmFsdWUpXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aEZvckltYWdlOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRUeXBlcz4pOiBudW1iZXIgfCBudWxsIHtcblx0XHRsZXQgd2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGNvbnN0IGFubm90YXRpb25zID0gZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3Q/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucztcblx0XHRjb25zdCBkYXRhVHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZT8uJHRhcmdldD8udHlwZTtcblx0XHRpZiAoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uVmFsdWUgJiZcblx0XHRcdGdldEVkaXRNb2RlKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldCxcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0KSA9PT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5ICYmXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdC5WYWx1ZT8uJHRhcmdldFxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaGFzVGV4dEFubm90YXRpb24gPSBoYXNUZXh0KGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LlZhbHVlLiR0YXJnZXQpO1xuXHRcdFx0aWYgKGRhdGFUeXBlID09PSBcIkVkbS5TdHJlYW1cIiAmJiAhaGFzVGV4dEFubm90YXRpb24gJiYgYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8uaW5jbHVkZXM/LihcImltYWdlL1wiKSkge1xuXHRcdFx0XHR3aWR0aCA9IDYuMjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0YW5ub3RhdGlvbnMgJiZcblx0XHRcdChpc0ltYWdlVVJMKGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5WYWx1ZT8uJHRhcmdldCkgfHwgYW5ub3RhdGlvbnM/LkNvcmU/Lk1lZGlhVHlwZT8uaW5jbHVkZXM/LihcImltYWdlL1wiKSlcblx0XHQpIHtcblx0XHRcdHdpZHRoID0gNi4yO1xuXHRcdH1cblx0XHRyZXR1cm4gd2lkdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIHRoZSBjb2x1bW4gaGVhZGVyIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgY29sdW1uIHdpZHRoLlxuXHQgKiBAcGFyYW0gdGFibGUgVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG5cdCAqIEBwYXJhbSB0YWJsZS53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciBJbmRpY2F0ZXMgaWYgdGhlIGNvbHVtbiB3aWR0aCBzaG91bGQgaW5jbHVkZSB0aGUgaGVhZGVyXG5cdCAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBjb25maWd1cmF0aW9uXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29sdW1uIHdpZHRoIHNob3VsZCBpbmNsdWRlIHRoZSBoZWFkZXJcblx0ICovXG5cdF9zaG91bGRJbmNsdWRlSGVhZGVySW5Db2x1bW53aWRoQ2FsY3VsYXRpb24odGFibGU6IENvbHVtbldpZHRoVGhpcywgY29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gY29sdW1uLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyICE9PSB1bmRlZmluZWQgPyBjb2x1bW4ud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgOiB0YWJsZS53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBEYXRhRmllbGQuXG5cdCAqIEBwYXJhbSBvVGhpcyBUaGUgaW5zdGFuY2Ugb2YgdGhlIGlubmVyIG1vZGVsIG9mIHRoZSBUYWJsZSBidWlsZGluZyBibG9ja1xuXHQgKiBAcGFyYW0gb1RoaXMud2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIgSW5kaWNhdGVzIGlmIHRoZSBjb2x1bW4gd2lkdGggc2hvdWxkIGluY2x1ZGUgdGhlIGhlYWRlclxuXHQgKiBAcGFyYW0gY29sdW1uIERlZmluZWQgd2lkdGggb2YgdGhlIGNvbHVtbiwgd2hpY2ggaXMgdGFrZW4gd2l0aCBwcmlvcml0eSBpZiBub3QgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5XG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YSBGaWVsZFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQWN0aW9uVGV4dCBEYXRhRmllbGQncyB0ZXh0IGZyb20gYnV0dG9uXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqIEBwYXJhbSBtaWNyb0NoYXJ0VGl0bGUgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0aXRsZSBhbmQgZGVzY3JpcHRpb24gb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHJldHVybnMgLSBDb2x1bW4gd2lkdGggaWYgZGVmaW5lZCwgb3RoZXJ3aXNlIG51bGwgKCB0aGUgd2lkdGggaXMgdHJlYXRlZCBhcyBhIHJlbSB2YWx1ZSlcblx0ICovXG5cdGdldENvbHVtbldpZHRoRm9yRGF0YUZpZWxkOiBmdW5jdGlvbiAoXG5cdFx0b1RoaXM6IENvbHVtbldpZHRoVGhpcyxcblx0XHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkIHwgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQWN0aW9uVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdFx0bWljcm9DaGFydFRpdGxlPzogTWljcm9DaGFydEluZm9cblx0KTogbnVtYmVyIHwgbnVsbCB7XG5cdFx0Y29uc3QgYW5ub3RhdGlvbnMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cdFx0Y29uc3QgZGF0YVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uJFR5cGU7XG5cdFx0bGV0IHdpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblx0XHRpZiAoXG5cdFx0XHRkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRkYXRhVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHx8XG5cdFx0XHQoZGF0YVR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0IShkYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPikuVGFyZ2V0Py4kQW5ub3RhdGlvblBhdGguaW5jbHVkZXMoYEAke1VJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXB9YCkpXG5cdFx0KSB7XG5cdFx0XHRsZXQgblRtcFRleHRXaWR0aDtcblx0XHRcdG5UbXBUZXh0V2lkdGggPVxuXHRcdFx0XHRTaXplSGVscGVyLmdldEJ1dHRvbldpZHRoKGRhdGFGaWVsZEFjdGlvblRleHQpIHx8XG5cdFx0XHRcdFNpemVIZWxwZXIuZ2V0QnV0dG9uV2lkdGgoZGF0YUZpZWxkPy5MYWJlbD8udG9TdHJpbmcoKSkgfHxcblx0XHRcdFx0U2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCgoYW5ub3RhdGlvbnMgYXMgeyBMYWJlbD86IHN0cmluZyB9KT8uTGFiZWwpOyAvLyBSRVZJRVcgOiBUaGlzIG1ha2VzIG5vIHNlbnNlIDopXG5cblx0XHRcdC8vIGdldCB3aWR0aCBmb3IgcmF0aW5nIG9yIHByb2dyZXNzIGJhciBkYXRhZmllbGRcblx0XHRcdGNvbnN0IG5UbXBWaXN1YWxpemF0aW9uV2lkdGggPSBUYWJsZVNpemVIZWxwZXIuZ2V0V2lkdGhGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCxcblx0XHRcdFx0dGhpcy5fc2hvdWxkSW5jbHVkZUhlYWRlckluQ29sdW1ud2lkaENhbGN1bGF0aW9uKG9UaGlzLCBjb2x1bW4pXG5cdFx0XHQpLnByb3BlcnR5V2lkdGg7XG5cblx0XHRcdGlmIChuVG1wVmlzdWFsaXphdGlvbldpZHRoID4gblRtcFRleHRXaWR0aCkge1xuXHRcdFx0XHR3aWR0aCA9IG5UbXBWaXN1YWxpemF0aW9uV2lkdGg7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRkYXRhRmllbGRBY3Rpb25UZXh0IHx8XG5cdFx0XHRcdChhbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdChpc0Fubm90YXRpb25PZlR5cGUoYW5ub3RhdGlvbnMsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgfHxcblx0XHRcdFx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZShhbm5vdGF0aW9ucywgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gQWRkIGFkZGl0aW9uYWwgMS44IHJlbSB0byBhdm9pZCBzaG93aW5nIGVsbGlwc2lzIGluIHNvbWUgY2FzZXMuXG5cdFx0XHRcdG5UbXBUZXh0V2lkdGggKz0gMS44O1xuXHRcdFx0XHR3aWR0aCA9IG5UbXBUZXh0V2lkdGg7XG5cdFx0XHR9XG5cdFx0XHR3aWR0aCA9IHdpZHRoID8/IHRoaXMuZ2V0Q29sdW1uV2lkdGhGb3JDaGFydChvVGhpcywgY29sdW1uLCBkYXRhRmllbGQsIG5UbXBUZXh0V2lkdGgsIG1pY3JvQ2hhcnRUaXRsZSk7XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBDaGFydC5cblx0ICogQHBhcmFtIG9UaGlzIFRoZSBpbnN0YW5jZSBvZiB0aGUgaW5uZXIgbW9kZWwgb2YgdGhlIFRhYmxlIGJ1aWxkaW5nIGJsb2NrXG5cdCAqIEBwYXJhbSBjb2x1bW4gRGVmaW5lZCB3aWR0aCBvZiB0aGUgY29sdW1uLCB3aGljaCBpcyB0YWtlbiB3aXRoIHByaW9yaXR5IGlmIG5vdCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHlcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhIEZpZWxkXG5cdCAqIEBwYXJhbSBjb2x1bW5MYWJlbFdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGxhYmVsIG9yIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcGFyYW0gbWljcm9DaGFydFRpdGxlIFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgdGl0bGUgYW5kIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgTWljcm9DaGFydFxuXHQgKiBAcmV0dXJucyAtIENvbHVtbiB3aWR0aCBpZiBkZWZpbmVkLCBvdGhlcndpc2UgbnVsbCAodGhlIHdpZHRoIGlzIHRyZWF0ZWQgYXMgYSByZW0gdmFsdWUpXG5cdCAqL1xuXHRnZXRDb2x1bW5XaWR0aEZvckNoYXJ0KFxuXHRcdG9UaGlzOiBDb2x1bW5XaWR0aFRoaXMsXG5cdFx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdFx0ZGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZCB8IERhdGFGaWVsZEZvckFubm90YXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+LFxuXHRcdGNvbHVtbkxhYmVsV2lkdGg6IG51bWJlcixcblx0XHRtaWNyb0NoYXJ0VGl0bGU/OiBNaWNyb0NoYXJ0SW5mb1xuXHQpOiBudW1iZXIgfCBudWxsIHtcblx0XHRsZXQgY2hhcnRTaXplLFxuXHRcdFx0d2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXHRcdGlmICgoZGF0YUZpZWxkIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4pLlRhcmdldD8uJEFubm90YXRpb25QYXRoPy5pbmNsdWRlcyhgQCR7VUlBbm5vdGF0aW9uVGVybXMuQ2hhcnR9YCkpIHtcblx0XHRcdHN3aXRjaCAodGhpcy5nZXRDaGFydFNpemUob1RoaXMsIGNvbHVtbikpIHtcblx0XHRcdFx0Y2FzZSBcIlhTXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNC40O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiU1wiOlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDQuNjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIk1cIjpcblx0XHRcdFx0XHRjaGFydFNpemUgPSA1LjU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJMXCI6XG5cdFx0XHRcdFx0Y2hhcnRTaXplID0gNi45O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNoYXJ0U2l6ZSA9IDUuMztcblx0XHRcdH1cblx0XHRcdGNvbHVtbkxhYmVsV2lkdGggKz0gMS44O1xuXHRcdFx0aWYgKCF0aGlzLmdldFNob3dPbmx5Q2hhcnQob1RoaXMsIGNvbHVtbikgJiYgKG1pY3JvQ2hhcnRUaXRsZT8udGl0bGUubGVuZ3RoIHx8IG1pY3JvQ2hhcnRUaXRsZT8uZGVzY3JpcHRpb24ubGVuZ3RoKSkge1xuXHRcdFx0XHRjb25zdCB0bXBUZXh0ID1cblx0XHRcdFx0XHRtaWNyb0NoYXJ0VGl0bGUudGl0bGUubGVuZ3RoID4gbWljcm9DaGFydFRpdGxlLmRlc2NyaXB0aW9uLmxlbmd0aCA/IG1pY3JvQ2hhcnRUaXRsZS50aXRsZSA6IG1pY3JvQ2hhcnRUaXRsZS5kZXNjcmlwdGlvbjtcblx0XHRcdFx0Y29uc3QgdGl0bGVTaXplID0gU2l6ZUhlbHBlci5nZXRCdXR0b25XaWR0aCh0bXBUZXh0KSArIDc7XG5cdFx0XHRcdGNvbnN0IHRtcFdpZHRoID0gdGl0bGVTaXplID4gY29sdW1uTGFiZWxXaWR0aCA/IHRpdGxlU2l6ZSA6IGNvbHVtbkxhYmVsV2lkdGg7XG5cdFx0XHRcdHdpZHRoID0gdG1wV2lkdGg7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbHVtbkxhYmVsV2lkdGggPiBjaGFydFNpemUpIHtcblx0XHRcdFx0d2lkdGggPSBjb2x1bW5MYWJlbFdpZHRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2lkdGggPSBjaGFydFNpemU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB3aWR0aDtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhZGQgYSBtYXJnaW4gY2xhc3MgYXQgdGhlIGNvbnRyb2wuXG5cdCAqIEBwYXJhbSBzVmlzdWFsaXphdGlvblxuXHQgKiBAcGFyYW0gaXNMYXN0RmllbGQgSW5kaWNhdGVzIGlmIHRoZSBmaWVsZCBpcyB0aGUgbGFzdCBmaWVsZCBpbiB0aGUgZmllbGQgZ3JvdXBcblx0ICogQHJldHVybnMgQWRqdXN0aW5nIHRoZSBtYXJnaW5cblx0ICovXG5cdGdldE1hcmdpbkNsYXNzOiBmdW5jdGlvbiAoc1Zpc3VhbGl6YXRpb246IHN0cmluZywgaXNMYXN0RmllbGQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGxldCBzQ2xhc3MgPSBcIlwiO1xuXHRcdGlmIChpc0xhc3RGaWVsZCkge1xuXHRcdFx0Ly9JZiByYXRpbmcgaW5kaWNhdG9yIGlzIGxhc3QgZWxlbWVudCBpbiBmaWVsZGdyb3VwLCB0aGVuIHRoZSAwLjVyZW0gbWFyZ2luIGFkZGVkIGJ5IHNhcE1SSSBjbGFzcyBvZiBpbnRlcmFjdGl2ZSByYXRpbmcgaW5kaWNhdG9yIG9uIHRvcCBhbmQgYm90dG9tIG11c3QgYmUgbnVsbGlmaWVkLlxuXHRcdFx0aWYgKHNWaXN1YWxpemF0aW9uID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdFx0c0NsYXNzID0gXCJzYXBVaU5vTWFyZ2luQm90dG9tIHNhcFVpTm9NYXJnaW5Ub3BcIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHNWaXN1YWxpemF0aW9uID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZpc3VhbGl6YXRpb25UeXBlL1JhdGluZ1wiKSB7XG5cdFx0XHQvL0lmIHJhdGluZyBpbmRpY2F0b3IgaXMgTk9UIHRoZSBsYXN0IGVsZW1lbnQgaW4gZmllbGRncm91cCwgdGhlbiB0byBtYWludGFpbiB0aGUgMC41cmVtIHNwYWNpbmcgYmV0d2VlbiBjb2dldE1hcmdpbkNsYXNzbnRyb2xzIChhcyBwZXIgVVggc3BlYyksXG5cdFx0XHQvL29ubHkgdGhlIHRvcCBtYXJnaW4gYWRkZWQgYnkgc2FwTVJJIGNsYXNzIG9mIGludGVyYWN0aXZlIHJhdGluZyBpbmRpY2F0b3IgbXVzdCBiZSBudWxsaWZpZWQuXG5cblx0XHRcdHNDbGFzcyA9IFwic2FwVWlOb01hcmdpblRvcFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ2xhc3MgPSBcInNhcFVpVGlueU1hcmdpbkJvdHRvbVwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NsYXNzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IFZCb3ggdmlzaWJpbGl0eS5cblx0ICogQHBhcmFtIGNvbGxlY3Rpb24gQ29sbGVjdGlvbiBvZiBkYXRhIGZpZWxkcyBpbiBWQm94XG5cdCAqIEBwYXJhbSBmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnMgSGlkZGVuIGV4cHJlc3Npb24gY29udGFpbmVkIGluIEZpZWxkR3JvdXBcblx0ICogQHBhcmFtIGZpZWxkR3JvdXAgRGF0YSBmaWVsZCBjb250YWluaW5nIHRoZSBWQm94XG5cdCAqIEByZXR1cm5zIFZpc2liaWxpdHkgZXhwcmVzc2lvblxuXHQgKi9cblx0Z2V0VkJveFZpc2liaWxpdHk6IGZ1bmN0aW9uIChcblx0XHRjb2xsZWN0aW9uOiBBcnJheTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uICYgSGlkZGVuPixcblx0XHRmaWVsZEdyb3VwSGlkZGVuRXhwcmVzc2lvbnM6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdGZpZWxkR3JvdXA6IEZpZWxkR3JvdXAgJiBIaWRkZW5cblx0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGxldCBhbGxTdGF0aWMgPSB0cnVlO1xuXHRcdGNvbnN0IGhpZGRlblBhdGhzID0gW107XG5cblx0XHRpZiAoZmllbGRHcm91cFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdKSB7XG5cdFx0XHRyZXR1cm4gZmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGNvbGxlY3Rpb24pIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25WYWx1ZSA9IGRhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdO1xuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0aGlkZGVuUGF0aHMucHVzaChmYWxzZSk7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGhpZGRlbkFubm90YXRpb25WYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRoaWRkZW5QYXRocy5wdXNoKHRydWUpO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmIChoaWRkZW5Bbm5vdGF0aW9uVmFsdWUuJFBhdGgpIHtcblx0XHRcdFx0aGlkZGVuUGF0aHMucHVzaChwYXRoSW5Nb2RlbChoaWRkZW5Bbm5vdGF0aW9uVmFsdWUuJFBhdGgpKTtcblx0XHRcdFx0YWxsU3RhdGljID0gZmFsc2U7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHR5cGVvZiBoaWRkZW5Bbm5vdGF0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0Ly8gRHluYW1pYyBleHByZXNzaW9uIGZvdW5kIGluIGEgZmllbGRcblx0XHRcdFx0cmV0dXJuIGZpZWxkR3JvdXBIaWRkZW5FeHByZXNzaW9ucztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBoYXNBbnlQYXRoRXhwcmVzc2lvbnMgPSBjb25zdGFudChoaWRkZW5QYXRocy5sZW5ndGggPiAwICYmIGFsbFN0YXRpYyAhPT0gdHJ1ZSk7XG5cdFx0Y29uc3QgaGFzQWxsSGlkZGVuU3RhdGljRXhwcmVzc2lvbnMgPSBjb25zdGFudChoaWRkZW5QYXRocy5sZW5ndGggPiAwICYmICFoaWRkZW5QYXRocy5pbmNsdWRlcyhmYWxzZSkgJiYgYWxsU3RhdGljKTtcblxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0aGFzQW55UGF0aEV4cHJlc3Npb25zLFxuXHRcdFx0XHRmb3JtYXRSZXN1bHQoaGlkZGVuUGF0aHMsIFRhYmxlRm9ybWF0dGVyLmdldFZCb3hWaXNpYmlsaXR5KSxcblx0XHRcdFx0aWZFbHNlKGhhc0FsbEhpZGRlblN0YXRpY0V4cHJlc3Npb25zLCBjb25zdGFudChmYWxzZSksIGNvbnN0YW50KHRydWUpKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHN0YWJsZSBJRCBvZiBhIHRhYmxlIGVsZW1lbnQgKGNvbHVtbiBvciBGaWVsZEdyb3VwIGxhYmVsKS5cblx0ICogQHBhcmFtIHRhYmxlSWQgQ3VycmVudCBvYmplY3QgSURcblx0ICogQHBhcmFtIGVsZW1lbnRJZCBFbGVtZW50IElkIG9yIHN1ZmZpeFxuXHQgKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBkYXRhRmllbGRcblx0ICogQHJldHVybnMgVGhlIHN0YWJsZSBJRCBmb3IgYSBnaXZlbiBjb2x1bW5cblx0ICovXG5cdGdldEVsZW1lbnRTdGFibGVJZDogZnVuY3Rpb24gKFxuXHRcdHRhYmxlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRlbGVtZW50SWQ6IHN0cmluZyxcblx0XHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+XG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0YWJsZUlkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhRmllbGQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0XHRsZXQgZGF0YUZpZWxkUGFydDogc3RyaW5nIHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0ZGF0YUZpZWxkUGFydCA9IGRhdGFGaWVsZC5UYXJnZXQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdFx0ZGF0YUZpZWxkUGFydCA9IGRhdGFGaWVsZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRkYXRhRmllbGRQYXJ0ID0gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGQpLlZhbHVlPy5wYXRoID8/IFwiXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gZ2VuZXJhdGUoW3RhYmxlSWQsIGVsZW1lbnRJZCwgZGF0YUZpZWxkUGFydF0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBzdGFibGUgSUQgb2YgdGhlIGNvbHVtbi5cblx0ICogQHBhcmFtIGlkIEN1cnJlbnQgb2JqZWN0IElEXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoIERhdGFNb2RlbE9iamVjdFBhdGggb2YgdGhlIGRhdGFGaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgc3RhYmxlIElEIGZvciBhIGdpdmVuIGNvbHVtblxuXHQgKi9cblx0Z2V0Q29sdW1uU3RhYmxlSWQ6IGZ1bmN0aW9uIChpZDogc3RyaW5nLCBkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gVGFibGVIZWxwZXIuZ2V0RWxlbWVudFN0YWJsZUlkKGlkLCBcIkNcIiwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH0sXG5cblx0Z2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQ6IGZ1bmN0aW9uIChcblx0XHRpZDogc3RyaW5nLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz5cblx0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gVGFibGVIZWxwZXIuZ2V0RWxlbWVudFN0YWJsZUlkKGlkLCBcIkZHTGFiZWxcIiwgZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSAncHJlc3MnIGV2ZW50IGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uLlxuXHQgKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB0YWJsZSBjb250cm9sXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGggVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIHRhYmxlXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMuY29udGVudElkIFRoZSBpZCBvZiB0aGUgTURDIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIGRhdGFGaWVsZCBWYWx1ZSBvZiB0aGUgRGF0YVBvaW50XG5cdCAqIEBwYXJhbSBlbnRpdHlTZXROYW1lIE5hbWUgb2YgdGhlIEVudGl0eVNldFxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uQXZhaWxhYmxlTWFwIE9wZXJhdGlvbkF2YWlsYWJsZU1hcCBhcyBzdHJpbmdpZmllZCBKU09OIG9iamVjdFxuXHQgKiBAcGFyYW0gYWN0aW9uT2JqZWN0XG5cdCAqIEBwYXJhbSBpc05hdmlnYWJsZSBBY3Rpb24gZWl0aGVyIHRyaWdnZXJzIG5hdmlnYXRpb24gb3Igbm90XG5cdCAqIEBwYXJhbSBlbmFibGVBdXRvU2Nyb2xsIEFjdGlvbiBlaXRoZXIgdHJpZ2dlcnMgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW1zIGluIHRoZSByZWxhdGVkIHRhYmxlIG9yIG5vdFxuXHQgKiBAcGFyYW0gZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIEZ1bmN0aW9uIG5hbWUgdG8gcHJlZmlsbCBkaWFsb2cgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdHByZXNzRXZlbnREYXRhRmllbGRGb3JBY3Rpb25CdXR0b246IGZ1bmN0aW9uIChcblx0XHR0YWJsZVByb3BlcnRpZXM6IHtcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+O1xuXHRcdFx0Y29udGVudElkOiBzdHJpbmc7XG5cdFx0fSxcblx0XHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0XHRlbnRpdHlTZXROYW1lOiBzdHJpbmcsXG5cdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBzdHJpbmcsXG5cdFx0YWN0aW9uT2JqZWN0PzogTWV0YU1vZGVsQWN0aW9uIHwgTWV0YU1vZGVsQWN0aW9uW10gfCBzdHJpbmcsXG5cdFx0aXNOYXZpZ2FibGUgPSBmYWxzZSxcblx0XHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbixcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmcsXG5cdFx0Zm9yQ29udGV4dE1lbnU/OiBib29sZWFuXG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRpZiAoIWRhdGFGaWVsZCkgcmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHR0YXJnZXRFbnRpdHlUeXBlTmFtZSA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdHN0YXRpY0FjdGlvbiA9XG5cdFx0XHRcdHR5cGVvZiBhY3Rpb25PYmplY3QgIT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KHRoaXMuX2lzU3RhdGljQWN0aW9uKGFjdGlvbk9iamVjdCwgc0FjdGlvbk5hbWUpIHx8XG5cdFx0XHRcdFx0dGhpcy5faXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZShzQWN0aW9uTmFtZS50b1N0cmluZygpLCB0YXJnZXRFbnRpdHlUeXBlTmFtZSkpLFxuXHRcdFx0YXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0XHRub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIixcblx0XHRcdGNvbnRleHRNZW51UGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwiXCIgOiBcImNvbnRleHRtZW51L1wiLFxuXHRcdFx0Y29udGV4dCA9IHBhdGhJbk1vZGVsKGAke2NvbnRleHRNZW51UGF0aH1zZWxlY3RlZENvbnRleHRzYCwgXCJpbnRlcm5hbFwiKSxcblx0XHRcdHBhcmFtcyA9IHtcblx0XHRcdFx0Y29udGV4dHM6ICFzdGF0aWNBY3Rpb24gPyBjb250ZXh0IDogbnVsbCxcblx0XHRcdFx0YlN0YXRpY0FjdGlvbjogc3RhdGljQWN0aW9uID8gc3RhdGljQWN0aW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRlbnRpdHlTZXROYW1lOiBlbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRhcHBsaWNhYmxlQ29udGV4dHM6ICFzdGF0aWNBY3Rpb25cblx0XHRcdFx0XHQ/IHBhdGhJbk1vZGVsKGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7YXBwbGljYWJsZVByb3BlcnR5fS9gLCBcImludGVybmFsXCIpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6ICFzdGF0aWNBY3Rpb25cblx0XHRcdFx0XHQ/IHBhdGhJbk1vZGVsKGBkeW5hbWljQWN0aW9ucy8ke2RhdGFGaWVsZC5BY3Rpb259LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fS9gLCBcImludGVybmFsXCIpXG5cdFx0XHRcdFx0OiBudWxsLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogaXNOYXZpZ2FibGUsXG5cdFx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IGVuYWJsZUF1dG9TY3JvbGwsXG5cdFx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uLFxuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IGRhdGFGaWVsZD8uSW52b2NhdGlvbkdyb3VwaW5nID09PSBcIlVJLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCIsXG5cdFx0XHRcdGNvbnRyb2xJZDogdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCxcblx0XHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBvcGVyYXRpb25BdmFpbGFibGVNYXAsXG5cdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuTGFiZWxcblx0XHRcdH07XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZuKFwiQVBJLm9uQWN0aW9uUHJlc3NcIiwgW3JlZihcIiRldmVudFwiKSwgcmVmKFwiJGNvbnRyb2xsZXJcIiksIGRhdGFGaWVsZC5BY3Rpb24sIHBhcmFtc10pKTtcblx0XHQvL3JldHVybiBBY3Rpb25IZWxwZXIuZ2V0UHJlc3NFdmVudERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvbih0YWJsZS5pZCEsIGRhdGFGaWVsZCwgcGFyYW1zLCBvcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYWN0aW9ucy5cblx0ICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvbiBmcm9tIHRoZSB0YWJsZSBjb252ZXJ0ZXJcblx0ICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gaXNCb3VuZCBJc0JvdW5kIGZvciBBY3Rpb25cblx0ICogQHBhcmFtIGFjdGlvbk9iamVjdFxuXHQgKiBAcGFyYW0gZW5hYmxlT25TZWxlY3QgRGVmaW5lIHRoZSBlbmFibGluZyBvZiB0aGUgYWN0aW9uIChzaW5nbGUgb3IgbXVsdGlzZWxlY3QpXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSBUaGUgZW50aXR5IHR5cGUgb2YgdGhlIGFubm90YXRpb24gdGFyZ2V0XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHBhcmFtIGlzQ29weVxuXHQgKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXG5cdCAqL1xuXHRpc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0XHRhY3Rpb25OYW1lOiBzdHJpbmcgfCBTdHJpbmcsXG5cdFx0aXNCb3VuZDogYm9vbGVhbixcblx0XHRhY3Rpb25PYmplY3Q/OiBNZXRhTW9kZWxBY3Rpb24gfCBNZXRhTW9kZWxBY3Rpb25bXSB8IHN0cmluZyxcblx0XHRlbmFibGVPblNlbGVjdD86IHN0cmluZyxcblx0XHRhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZT86IEVudGl0eVR5cGUsXG5cdFx0Zm9yQ29udGV4dE1lbnU/OiBib29sZWFuLFxuXHRcdGlzQ29weT86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgYm9vbGVhbiB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uVGFyZ2V0RW50aXR5VHlwZSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0Y29uc3QgaXNTdGF0aWNBY3Rpb24gPSB0aGlzLl9pc1N0YXRpY0FjdGlvbihhY3Rpb25PYmplY3QsIGFjdGlvbk5hbWUpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGFjdGlvbiBvdmVybG9hZCBvbiBhIGRpZmZlcmVudCBFbnRpdHkgdHlwZS5cblx0XHQvLyBJZiB5ZXMsIHRhYmxlIHJvdyBzZWxlY3Rpb24gaXMgbm90IHJlcXVpcmVkIHRvIGVuYWJsZSB0aGlzIGFjdGlvbi5cblx0XHRpZiAodGhpcy5faXNBY3Rpb25PdmVybG9hZE9uRGlmZmVyZW50VHlwZShhY3Rpb25OYW1lLnRvU3RyaW5nKCksIGFubm90YXRpb25UYXJnZXRFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdC8vIEFjdGlvbiBvdmVybG9hZCBkZWZpbmVkIG9uIGRpZmZlcmVudCBlbnRpdHkgdHlwZVxuXHRcdFx0Y29uc3Qgb09wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IHRhYmxlRGVmaW5pdGlvbiAmJiBKU09OLnBhcnNlKHRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApO1xuXHRcdFx0aWYgKG9PcGVyYXRpb25BdmFpbGFibGVNYXA/Lmhhc093blByb3BlcnR5KGFjdGlvbk5hbWUpKSB7XG5cdFx0XHRcdC8vIENvcmUuT3BlcmF0aW9uQXZhaWxhYmxlIGFubm90YXRpb24gZGVmaW5lZCBmb3IgdGhlIGFjdGlvbi5cblx0XHRcdFx0Ly8gTmVlZCB0byByZWZlciB0byBpbnRlcm5hbCBtb2RlbCBmb3IgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24uXG5cdFx0XHRcdC8vIHJldHVybiBjb21waWxlQmluZGluZyhiaW5kaW5nRXhwcmVzc2lvbihcImR5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbk5hbWUgKyBcIi9iRW5hYmxlZFwiLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0XHRcdFx0cmV0dXJuICFmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdD8gYHs9IFxcJHtpbnRlcm5hbD5keW5hbWljQWN0aW9ucy8ke2FjdGlvbk5hbWV9L2JFbmFibGVkfSB9YFxuXHRcdFx0XHRcdDogYHs9IFxcJHtpbnRlcm5hbD5keW5hbWljQWN0aW9ucy8ke2FjdGlvbk5hbWV9L2JFbmFibGVkRm9yQ29udGV4dE1lbnV9IH1gO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQ29uc2lkZXIgdGhlIGFjdGlvbiBqdXN0IGxpa2UgYW55IG90aGVyIHN0YXRpYyBEYXRhRmllbGRGb3JBY3Rpb24uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKCFpc0JvdW5kIHx8IGlzU3RhdGljQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzID0gaXNDb3B5XG5cdFx0XHQ/IEFjdGlvbkhlbHBlci5nZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbihcInNpbmdsZVwiLCBmb3JDb250ZXh0TWVudSlcblx0XHRcdDogQWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKGVuYWJsZU9uU2VsZWN0ID8/IFwibXVsdGlzZWxlY3RcIiwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdFx0bGV0IGRhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9uID0gXCJcIjtcblxuXHRcdGNvbnN0IGFjdGlvbiA9ICFmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBgXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWR9YFxuXHRcdFx0OiBgXFwke2ludGVybmFsPmR5bmFtaWNBY3Rpb25zLyR7YWN0aW9uTmFtZX0vYkVuYWJsZWRGb3JDb250ZXh0TWVudX1gO1xuXHRcdGRhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9uID0gYCR7bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSAmJiAke2FjdGlvbn1gO1xuXG5cdFx0cmV0dXJuIGB7PSAke2RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWRFeHByZXNzaW9ufX1gO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9ySUJOIGFjdGlvbnMuXG5cdCAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIHRhYmxlIGNvbnRyb2xcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy5jb2xsZWN0aW9uICBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHRvIGJlIHVzZWRcblx0ICogQHBhcmFtIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24gVGhlIHRhYmxlIGRlZmluaXRpb24gZnJvbSB0aGUgdGFibGUgY29udmVydGVyXG5cdCAqIEBwYXJhbSBkYXRhRmllbGQgVGhlIHZhbHVlIG9mIHRoZSBkYXRhIGZpZWxkXG5cdCAqIEBwYXJhbSByZXF1aXJlc0NvbnRleHQgUmVxdWlyZXNDb250ZXh0IGZvciBJQk5cblx0ICogQHBhcmFtIGlzTmF2aWdhdGlvbkF2YWlsYWJsZSBEZWZpbmUgaWYgdGhlIG5hdmlnYXRpb24gaXMgYXZhaWxhYmxlXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKiBAcmV0dXJucyBBIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZWZpbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgYWN0aW9uXG5cdCAqL1xuXHRpc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQ6IGZ1bmN0aW9uIChcblx0XHR0YWJsZVByb3BlcnRpZXM6IHtcblx0XHRcdGNvbGxlY3Rpb246IENvbnRleHQ7XG5cdFx0XHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHR9LFxuXHRcdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdHJlcXVpcmVzQ29udGV4dDogYm9vbGVhbiB8IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPEJvb2xlYW4+LFxuXHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZT86IGJvb2xlYW4gfCBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxCb29sZWFuPixcblx0XHRmb3JDb250ZXh0TWVudT86IGJvb2xlYW5cblx0KTogc3RyaW5nIHwgYm9vbGVhbiB7XG5cdFx0bGV0IGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggPSBudWxsO1xuXHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihpc05hdmlnYXRpb25BdmFpbGFibGUpKSB7XG5cdFx0XHRpc05hdmlnYXRpb25BdmFpbGFibGVQYXRoID0gaXNOYXZpZ2F0aW9uQXZhaWxhYmxlLnBhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IGlzQW5hbHl0aWNhbFRhYmxlID0gdGFibGVQcm9wZXJ0aWVzPy50YWJsZURlZmluaXRpb24/LmVuYWJsZUFuYWx5dGljcztcblxuXHRcdGlmICghcmVxdWlyZXNDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSB0YWJsZVByb3BlcnRpZXMuY29sbGVjdGlvbi5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB0YWJsZVByb3BlcnRpZXMuY29sbGVjdGlvbi5nZXRNb2RlbCgpO1xuXHRcdFx0aWYgKGlzTmF2aWdhdGlvbkF2YWlsYWJsZSA9PT0gZmFsc2UgJiYgIWlzQW5hbHl0aWNhbFRhYmxlKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiTmF2aWdhdGlvbkF2YWlsYWJsZSBhcyBmYWxzZSBpcyBpbmNvcnJlY3QgdXNhZ2VcIik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGggJiZcblx0XHRcdFx0IWlzQW5hbHl0aWNhbFRhYmxlICYmXG5cdFx0XHRcdGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZD8uTmF2aWdhdGlvbkF2YWlsYWJsZSkgJiZcblx0XHRcdFx0bWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXQgKyBcIi8kUGFydG5lclwiKSA9PT0gZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUucGF0aC5zcGxpdChcIi9cIilbMF1cblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gYHs9IFxcJHske2lzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGguc3Vic3RyaW5nKFxuXHRcdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGguaW5kZXhPZihcIi9cIikgKyAxLFxuXHRcdFx0XHRcdGlzTmF2aWdhdGlvbkF2YWlsYWJsZVBhdGgubGVuZ3RoXG5cdFx0XHRcdCl9fX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gXCJcIixcblx0XHRcdG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGFjdGlvbjtcblxuXHRcdGlmIChpc05hdmlnYXRpb25BdmFpbGFibGUgPT09IHRydWUgfHwgaXNBbmFseXRpY2FsVGFibGUpIHtcblx0XHRcdGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gIShmb3JDb250ZXh0TWVudSA/PyBmYWxzZSlcblx0XHRcdFx0PyBcIiV7aW50ZXJuYWw+bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxXCJcblx0XHRcdFx0OiBcIiV7aW50ZXJuYWw+Y29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzfSA+PSAxXCI7XG5cdFx0fSBlbHNlIGlmIChpc05hdmlnYXRpb25BdmFpbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRMb2cud2FybmluZyhcIk5hdmlnYXRpb25BdmFpbGFibGUgYXMgZmFsc2UgaXMgaW5jb3JyZWN0IHVzYWdlXCIpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMgPSAhKGZvckNvbnRleHRNZW51ID8/IGZhbHNlKVxuXHRcdFx0XHQ/IFwiJXtpbnRlcm5hbD5udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIlxuXHRcdFx0XHQ6IFwiJXtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID49IDFcIjtcblx0XHRcdGFjdGlvbiA9ICEoZm9yQ29udGV4dE1lbnUgPz8gZmFsc2UpXG5cdFx0XHRcdD8gYFxcJHtpbnRlcm5hbD5pYm4vJHtkYXRhRmllbGQuU2VtYW50aWNPYmplY3R9LSR7ZGF0YUZpZWxkLkFjdGlvbn0vYkVuYWJsZWR9YFxuXHRcdFx0XHQ6IGBcXCR7aW50ZXJuYWw+aWJuLyR7ZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0fS0ke2RhdGFGaWVsZC5BY3Rpb259L2JFbmFibGVkRm9yQ29udGV4dE1lbnV9YDtcblx0XHRcdGRhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9uID0gbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzICsgXCIgJiYgXCIgKyBhY3Rpb247XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGB7PSAke2RhdGFGaWVsZEZvcklCTkVuYWJsZWRFeHByZXNzaW9ufX1gO1xuXHR9LFxuXG5cdGJ1aWxkRXhwcmVzc2lvbkZvck11bHRpVmFsdWVGaWVsZFJlYWRPbmx5OiBmdW5jdGlvbiAodGFibGU6IFRhYmxlQmxvY2spOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRvcih0YWJsZS5yZWFkT25seSA9PT0gdHJ1ZSwgYW5kKFVJLklzSW5hY3RpdmUsIHRhYmxlLmNyZWF0aW9uTW9kZS5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiKSksXG5cdFx0XHRcdGNvbnN0YW50KHRydWUpLFxuXHRcdFx0XHRlcXVhbCh0YWJsZS5maWVsZE1vZGUsIFwibm93cmFwcGVyXCIpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgbGFiZWwgZm9yIHRoZSBjb2x1bW4gaGVhZGVyLlxuXHQgKiBAcGFyYW0gZGF0YWZpZWxkIERhdGFGaWVsZFxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkQ29sbGVjdGlvbiBMaXN0IG9mIGl0ZW1zIGluc2lkZSBhIGZpZWxkZ3JvdXAgKGlmIGFueSlcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBoZWFkZXIgbGFiZWwgbmVlZHMgdG8gYmUgdmlzaWJsZSBlbHNlIGZhbHNlLlxuXHQgKi9cblx0c2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5OiBmdW5jdGlvbiAoXG5cdFx0ZGF0YWZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbiB8IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbj4sXG5cdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbj86IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPltdXG5cdCk6IGJvb2xlYW4ge1xuXHRcdC8vIElmIElubGluZSBidXR0b24vbmF2aWdhdGlvbiBhY3Rpb24sIHJldHVybiBmYWxzZSwgZWxzZSB0cnVlO1xuXHRcdGlmICghZGF0YUZpZWxkQ29sbGVjdGlvbikge1xuXHRcdFx0aWYgKGRhdGFmaWVsZC4kVHlwZT8uaW5jbHVkZXMoXCJEYXRhRmllbGRGb3JBY3Rpb25cIikgJiYgZGF0YWZpZWxkLklubGluZSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZGF0YWZpZWxkLiRUeXBlPy5pbmNsdWRlcyhcIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiKSAmJiBkYXRhZmllbGQuSW5saW5lKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIEluIEZpZWxkZ3JvdXAsIElmIE5PVCBhbGwgZGF0YWZpZWxkL2RhdGFmaWVsZEZvckFubm90YXRpb24gZXhpc3RzIHdpdGggaGlkZGVuLCByZXR1cm4gdHJ1ZTtcblx0XHRyZXR1cm4gZGF0YUZpZWxkQ29sbGVjdGlvbi5zb21lKGZ1bmN0aW9uIChvREMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KG9EQy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8IG9EQy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikgJiZcblx0XHRcdFx0KG9EQyBhcyB1bmtub3duIGFzIEhpZGRlbilbYEAke1VJQW5ub3RhdGlvblRlcm1zLkhpZGRlbn1gXSAhPT0gdHJ1ZVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSB0ZXh0IGZyb20gdGhlIERhdGFGaWVsZEZvckFubm90YXRpb24gaW50byB0aGUgY29sdW1uLlxuXHQgKiBAcGFyYW0gb0RhdGFGaWVsZCBEYXRhUG9pbnQncyBWYWx1ZVxuXHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvYmplY3Qgb2YgdGhlIExpbmVJdGVtXG5cdCAqIEBwYXJhbSBvQ29udGV4dC5jb250ZXh0IENvbnRleHQgb2JqZWN0IG9mIHRoZSBMaW5lSXRlbVxuXHQgKiBAcmV0dXJucyBTdHJpbmcgZnJvbSBsYWJlbCByZWZlcnJpbmcgdG8gYWN0aW9uIHRleHRcblx0ICovXG5cdGdldFRleHRPbkFjdGlvbkZpZWxkOiBmdW5jdGlvbiAoXG5cdFx0b0RhdGFGaWVsZDogTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0XHRvQ29udGV4dDogeyBjb250ZXh0OiBCYXNlQ29udGV4dCB9XG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKFxuXHRcdFx0b0RhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cblx0XHQpIHtcblx0XHRcdHJldHVybiBvRGF0YUZpZWxkLkxhYmVsO1xuXHRcdH1cblx0XHQvLyBmb3IgRmllbGRHcm91cCBjb250YWluaW5nIERhdGFGaWVsZEZvckFubm90YXRpb25cblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uICYmXG5cdFx0XHRvQ29udGV4dC5jb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikuaW5kZXhPZihcIkBcIiArIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApID4gLTFcblx0XHQpIHtcblx0XHRcdGNvbnN0IHNQYXRoRGF0YUZpZWxkcyA9IFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiO1xuXHRcdFx0Y29uc3QgYU11bHRpcGxlTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0Zm9yIChjb25zdCBpIGluIG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KHNQYXRoRGF0YUZpZWxkcykpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9LyRUeXBlYCkgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0XHRcdG9Db250ZXh0LmNvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXRoRGF0YUZpZWxkcyArIGl9LyRUeXBlYCkgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhTXVsdGlwbGVMYWJlbHMucHVzaChvQ29udGV4dC5jb250ZXh0LmdldE9iamVjdChgJHtzUGF0aERhdGFGaWVsZHMgKyBpfS9MYWJlbGApKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gSW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgYWN0aW9ucyBpbnNpZGUgYSBGaWVsZCBHcm91cCBzZWxlY3QgdGhlIGxhcmdlc3QgQWN0aW9uIExhYmVsXG5cdFx0XHRpZiAoYU11bHRpcGxlTGFiZWxzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0cmV0dXJuIGFNdWx0aXBsZUxhYmVscy5yZWR1Y2UoZnVuY3Rpb24gKGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubGVuZ3RoID4gYi5sZW5ndGggPyBhIDogYjtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYU11bHRpcGxlTGFiZWxzLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGFNdWx0aXBsZUxhYmVscy50b1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9LFxuXHRfZ2V0UmVzcG9uc2l2ZVRhYmxlQ29sdW1uU2V0dGluZ3M6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBUYWJsZUNvbHVtblNldHRpbmdzIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob1RoaXMudGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0XHRyZXR1cm4gb0NvbHVtbi5zZXR0aW5ncztcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHRnZXRDaGFydFNpemU6IGZ1bmN0aW9uIChvVGhpczogQ29sdW1uV2lkdGhUaGlzLCBvQ29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4pOiBzdHJpbmcge1xuXHRcdGNvbnN0IHNldHRpbmdzID0gdGhpcy5fZ2V0UmVzcG9uc2l2ZVRhYmxlQ29sdW1uU2V0dGluZ3Mob1RoaXMsIG9Db2x1bW4pO1xuXHRcdGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5taWNyb0NoYXJ0U2l6ZSkge1xuXHRcdFx0cmV0dXJuIHNldHRpbmdzLm1pY3JvQ2hhcnRTaXplO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJYU1wiO1xuXHR9LFxuXHRnZXRTaG93T25seUNoYXJ0OiBmdW5jdGlvbiAob1RoaXM6IENvbHVtbldpZHRoVGhpcywgb0NvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSB0aGlzLl9nZXRSZXNwb25zaXZlVGFibGVDb2x1bW5TZXR0aW5ncyhvVGhpcywgb0NvbHVtbik7XG5cdFx0aWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnNob3dNaWNyb0NoYXJ0TGFiZWwpIHtcblx0XHRcdHJldHVybiAhc2V0dGluZ3Muc2hvd01pY3JvQ2hhcnRMYWJlbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Z2V0RGVsZWdhdGU6IGZ1bmN0aW9uICh0YWJsZTogVGFibGVWaXN1YWxpemF0aW9uLCBpc0FMUDogYm9vbGVhbiwgZW50aXR5TmFtZTogc3RyaW5nLCBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRsZXQgZGVsZWdhdGU6IHtcblx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdHBheWxvYWQ/OlxuXHRcdFx0XHR8IHsgY29sbGVjdGlvbk5hbWU/OiBzdHJpbmc7IGZpbHRlck9uQWN0aXZlRW50aXRpZXM/OiBib29sZWFuOyBhZ2dyZWdhdGlvbkNvbmZpZ3VyYXRpb24/OiB7IGxlYWZMZXZlbDogYm9vbGVhbiB9IH1cblx0XHRcdFx0fCB7XG5cdFx0XHRcdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI6IHN0cmluZztcblx0XHRcdFx0XHRcdGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcjtcblx0XHRcdFx0XHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXM6IGJvb2xlYW47XG5cdFx0XHRcdFx0XHRjcmVhdGVJblBsYWNlPzogYm9vbGVhbjtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uQ29uZmlndXJhdGlvbj86IHsgbGVhZkxldmVsOiBib29sZWFuIH07XG5cdFx0XHRcdCAgfTtcblx0XHR9O1xuXHRcdGlmIChpc0FMUCkge1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBUcmVlVGFibGUgaW4gQUxQXG5cdFx0XHRpZiAodGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRyZWVUYWJsZSBub3Qgc3VwcG9ydGVkIGluIEFuYWx5dGljYWwgTGlzdFBhZ2VcIik7XG5cdFx0XHR9XG5cdFx0XHRkZWxlZ2F0ZSA9IHtcblx0XHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2RlbGVnYXRlcy9BTFBUYWJsZURlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRjb2xsZWN0aW9uTmFtZTogZW50aXR5TmFtZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyAmJiBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKSB7XG5cdFx0XHRcdGRlbGVnYXRlLnBheWxvYWQhLmZpbHRlck9uQWN0aXZlRW50aXRpZXMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGFibGUuY29udHJvbC50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0XHRpZiAoIXRhYmxlLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgaGllcmFyY2h5IHF1YWxpZmllciBpcyBtYW5kYXRvcnkgd2l0aCBhIFRyZWVUYWJsZVwiKTtcblx0XHRcdH1cblx0XHRcdGRlbGVnYXRlID0ge1xuXHRcdFx0XHRuYW1lOiBcInNhcC9mZS9tYWNyb3MvdGFibGUvZGVsZWdhdGVzL1RyZWVUYWJsZURlbGVnYXRlXCIsXG5cdFx0XHRcdHBheWxvYWQ6IHtcblx0XHRcdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI6IHRhYmxlLmNvbnRyb2wuaGllcmFyY2h5UXVhbGlmaWVyLFxuXHRcdFx0XHRcdGluaXRpYWxFeHBhbnNpb25MZXZlbDogdGFibGUuYW5ub3RhdGlvbi5pbml0aWFsRXhwYW5zaW9uTGV2ZWwsXG5cdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllcyxcblx0XHRcdFx0XHRjcmVhdGVJblBsYWNlOiB0YWJsZS5jb250cm9sLmNyZWF0ZUluUGxhY2UgPT09IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVsZWdhdGUgPSB7XG5cdFx0XHRcdG5hbWU6IFwic2FwL2ZlL21hY3Jvcy90YWJsZS9kZWxlZ2F0ZXMvVGFibGVEZWxlZ2F0ZVwiXG5cdFx0XHR9O1xuXHRcdFx0aWYgKHRhYmxlLmVuYWJsZUFuYWx5dGljcyAmJiBmaWx0ZXJPbkFjdGl2ZUVudGl0aWVzKSB7XG5cdFx0XHRcdGRlbGVnYXRlLnBheWxvYWQgPSB7XG5cdFx0XHRcdFx0ZmlsdGVyT25BY3RpdmVFbnRpdGllc1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0YWJsZS5lbmFibGVBbmFseXRpY3MgPT09IHRydWUgJiYgdGFibGUuY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCA9PT0gdHJ1ZSkge1xuXHRcdFx0ZGVsZWdhdGUucGF5bG9hZCA9IHsgLi4uZGVsZWdhdGUucGF5bG9hZCwgLi4ueyBhZ2dyZWdhdGlvbkNvbmZpZ3VyYXRpb246IHsgbGVhZkxldmVsOiB0cnVlIH0gfSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShkZWxlZ2F0ZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEBwYXJhbSBvRmFzdENyZWF0aW9uUm93XG5cdCAqIEBwYXJhbSBzUGF0aFxuXHQgKiBAcGFyYW0gb0NvbnRleHRcblx0ICogQHBhcmFtIG9Nb2RlbFxuXHQgKiBAcGFyYW0gb0ZpbmFsVUlTdGF0ZVxuXHQgKi9cblx0ZW5hYmxlRmFzdENyZWF0aW9uUm93OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b0Zhc3RDcmVhdGlvblJvdzogQ3JlYXRpb25Sb3cgfCB1bmRlZmluZWQsXG5cdFx0c1BhdGg6IHN0cmluZyxcblx0XHRvQ29udGV4dDogdjRDb250ZXh0LFxuXHRcdG9Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRvRmluYWxVSVN0YXRlOiBQcm9taXNlPHVua25vd24+XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcsIG9GYXN0Q3JlYXRpb25Db250ZXh0O1xuXG5cdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IG9GaW5hbFVJU3RhdGU7XG5cdFx0XHRcdC8vIElmIGEgZHJhZnQgaXMgZGlzY2FyZGVkIHdoaWxlIGEgbWVzc2FnZSBzdHJpcCBmaWx0ZXIgaXMgYWN0aXZlIG9uIHRoZSB0YWJsZSB0aGVyZSBpcyBhIHRhYmxlIHJlYmluZCBjYXVzZWQgYnkgdGhlIERhdGFTdGF0ZUluZGljYXRvclxuXHRcdFx0XHQvLyBUbyBwcmV2ZW50IGEgbmV3IGNyZWF0aW9uIHJvdyBiaW5kaW5nIGJlaW5nIGNyZWF0ZWQgYXQgdGhhdCBtb21lbnQgd2UgY2hlY2sgaWYgdGhlIGNvbnRleHQgaXMgYWxyZWFkeSBkZWxldGVkXG5cdFx0XHRcdGlmIChDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9GYXN0Q3JlYXRpb25Sb3cpICYmICFvQ29udGV4dC5pc0RlbGV0ZWQoKSkge1xuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZyA9IG9Nb2RlbC5iaW5kTGlzdChzUGF0aCwgb0NvbnRleHQsIFtdLCBbXSwge1xuXHRcdFx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcImRvTm90U3VibWl0XCIsXG5cdFx0XHRcdFx0XHQkJGdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdC8vIFdvcmthcm91bmQgc3VnZ2VzdGVkIGJ5IE9EYXRhIG1vZGVsIHY0IGNvbGxlYWd1ZXNcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0XHQvKiBkbyBub3RoaW5nICovXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvRmFzdENyZWF0aW9uQ29udGV4dCA9IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5jcmVhdGUoKTtcblx0XHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG9GYXN0Q3JlYXRpb25Db250ZXh0KTtcblxuXHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3Jcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgb0Zhc3RDcmVhdGlvbkNvbnRleHQuY3JlYXRlZCgpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdExvZy50cmFjZShcInRyYW5zaWVudCBmYXN0IGNyZWF0aW9uIGNvbnRleHQgZGVsZXRlZFwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjb21wdXRpbmcgdGhlIGZpbmFsIFVJIHN0YXRlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRXZhbHVhdGVzLCBpZiBhY3Rpb24gc2hvdWxkIGJlIHNob3duIGluIHRoZSB0YWJsZSBjb250ZXh0IG1lbnUuXG5cdCAqIFNob3cgYWN0aW9uIG9ubHkgZm9yIGJvdW5kIGFjdGlvbnMsIHdoZW4gcmVxdWlyZXNTZWxlY3Rpb24gaXMgc2V0IGZvciBjdXN0b20gYWN0aW9ucyBvciB3aGVuIGNvbnRleHQgaXMgcmVxdWlyZWQgZm9yIElCTiBhY3Rpb25zLlxuXHQgKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aCBUaGUgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUsIGlmIGFjdGlvbiBzaG91bGQgYmUgZGlzcGxheWVkIGluIGNvbnRleHQgbWVudSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0FjdGlvblNob3duSW5Db250ZXh0TWVudTogZnVuY3Rpb24gKFxuXHRcdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdFx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8dW5rbm93bj5cblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgZGF0YUZpZWxkID0gYWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0XHQ/IChjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aChhY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhc1xuXHRcdFx0XHRcdHwgRGF0YUZpZWxkRm9yQWN0aW9uXG5cdFx0XHRcdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZD8uJFR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjoge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdGFjdGlvblRhcmdldD8uaXNCb3VuZCA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHRcdCFhY3Rpb25UYXJnZXQucGFyYW1ldGVyc1swXS5pc0NvbGxlY3Rpb24gJiZcblx0XHRcdFx0XHRhY3Rpb25UYXJnZXQuc291cmNlRW50aXR5VHlwZSA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRyZXR1cm4gZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dD8udmFsdWVPZigpID09PSB0cnVlO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG4oVGFibGVIZWxwZXIuZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZU1hcCBhcyB7IHJlcXVpcmVzSUNvbnRleHQ/OiBib29sZWFuIH0pLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuKFRhYmxlSGVscGVyLmdldFRleHRPbkFjdGlvbkZpZWxkIGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeURBO0FBQ0E7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
|
|
@@ -58,7 +58,6 @@ type MicroChartInfo = { title: string; description: string };
|
|
|
58
58
|
/**
|
|
59
59
|
* Helper class used by the control library for OData-specific handling (OData V4)
|
|
60
60
|
* @private
|
|
61
|
-
* @experimental This module is only for internal/experimental use!
|
|
62
61
|
*/
|
|
63
62
|
const TableHelper = {
|
|
64
63
|
/**
|