@sapui5/sap.fe.macros 1.139.0 → 1.141.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/Chart.js +53 -2
- package/src/sap/fe/macros/Chart.tsx +55 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +230 -0
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +218 -0
- package/src/sap/fe/macros/CommonHelper.js +59 -15
- package/src/sap/fe/macros/CommonHelper.ts +65 -14
- package/src/sap/fe/macros/ConditionalSwitch.js +174 -0
- package/src/sap/fe/macros/ConditionalSwitch.tsx +141 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +78 -0
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +62 -0
- package/src/sap/fe/macros/Field.js +78 -64
- package/src/sap/fe/macros/Field.ts +97 -68
- package/src/sap/fe/macros/FooterContent.js +5 -2
- package/src/sap/fe/macros/FooterContent.tsx +4 -1
- package/src/sap/fe/macros/MacroAPI.js +9 -4
- package/src/sap/fe/macros/MacroAPI.ts +9 -4
- 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 +10 -7
- package/src/sap/fe/macros/MultiValueField.tsx +7 -3
- package/src/sap/fe/macros/Page.js +5 -7
- package/src/sap/fe/macros/Page.tsx +4 -6
- package/src/sap/fe/macros/Paginator.js +9 -4
- package/src/sap/fe/macros/Paginator.tsx +12 -3
- package/src/sap/fe/macros/RichTextEditor.js +3 -2
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -1
- package/src/sap/fe/macros/Share.js +14 -2
- package/src/sap/fe/macros/Share.tsx +13 -0
- package/src/sap/fe/macros/Status.js +251 -0
- package/src/sap/fe/macros/Status.tsx +212 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -28
- package/src/sap/fe/macros/ValueHelp.tsx +2 -42
- package/src/sap/fe/macros/ai/EasyFillDialog.js +11 -17
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +11 -16
- package/src/sap/fe/macros/ai/EasyFilterBar.js +246 -97
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +302 -106
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +76 -33
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +89 -40
- 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/Chart.js +2 -2
- package/src/sap/fe/macros/chart/Chart.tsx +1 -1
- 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 +5 -5
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +5 -5
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.js +9 -2
- package/src/sap/fe/macros/contentSwitcher/ContentSwitcher.tsx +8 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +4 -2
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +3 -1
- package/src/sap/fe/macros/controls/FilterBar.js +14 -5
- package/src/sap/fe/macros/controls/FilterBar.ts +3 -0
- 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/RadioButtons.js +61 -38
- package/src/sap/fe/macros/controls/RadioButtons.tsx +39 -18
- package/src/sap/fe/macros/controls/Section.js +4 -3
- package/src/sap/fe/macros/controls/Section.ts +3 -2
- package/src/sap/fe/macros/controls/section/SubSection.js +63 -8
- package/src/sap/fe/macros/controls/section/SubSection.ts +67 -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 +28 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +27 -0
- package/src/sap/fe/macros/field/Field.js +2 -2
- package/src/sap/fe/macros/field/Field.tsx +1 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +13 -7
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +12 -8
- package/src/sap/fe/macros/field/FieldFormatOptions.js +25 -2
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +13 -0
- package/src/sap/fe/macros/field/FieldHelper.js +2 -2
- package/src/sap/fe/macros/field/FieldHelper.ts +1 -4
- 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/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/FieldTemplating.ts +4 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +233 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +291 -7
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +4 -2
- package/src/sap/fe/macros/filterBar/FilterBar.js +2 -2
- package/src/sap/fe/macros/filterBar/FilterBar.tsx +1 -1
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +63 -27
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +49 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +5 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +7 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +6 -1
- package/src/sap/fe/macros/form/Form.block.js +7 -8
- package/src/sap/fe/macros/form/Form.block.ts +4 -6
- 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/FormContainer.block.js +555 -5
- package/src/sap/fe/macros/form/FormContainer.block.ts +665 -7
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +1 -0
- package/src/sap/fe/macros/form/FormDelegate.js +24 -8
- package/src/sap/fe/macros/form/FormDelegate.ts +29 -7
- 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/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- 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 +3 -2
- package/src/sap/fe/macros/internal/DataPoint.tsx +10 -1
- package/src/sap/fe/macros/internal/FilterField.block.js +19 -5
- package/src/sap/fe/macros/internal/FilterField.block.ts +16 -4
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +9 -3
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +10 -2
- package/src/sap/fe/macros/internal/field/EditStyle.js +21 -4
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +18 -4
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +3 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +5 -1
- package/src/sap/fe/macros/internal/filterField/FilterFieldTemplate.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +36 -5
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +34 -4
- 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 +1 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +10 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +13 -2
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.js +2 -1
- package/src/sap/fe/macros/mdc/adapter/StateFilterToSelectionVariant.ts +1 -0
- package/src/sap/fe/macros/messagebundle.properties +24 -4
- package/src/sap/fe/macros/messagebundle_ar.properties +8 -2
- package/src/sap/fe/macros/messagebundle_bg.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ca.properties +11 -5
- package/src/sap/fe/macros/messagebundle_cnr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_cs.properties +7 -1
- package/src/sap/fe/macros/messagebundle_cy.properties +9 -3
- package/src/sap/fe/macros/messagebundle_da.properties +8 -2
- package/src/sap/fe/macros/messagebundle_de.properties +13 -7
- package/src/sap/fe/macros/messagebundle_el.properties +7 -1
- package/src/sap/fe/macros/messagebundle_en.properties +11 -5
- package/src/sap/fe/macros/messagebundle_en_GB.properties +9 -3
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +11 -5
- package/src/sap/fe/macros/messagebundle_es.properties +10 -4
- package/src/sap/fe/macros/messagebundle_es_MX.properties +11 -5
- package/src/sap/fe/macros/messagebundle_et.properties +9 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +7 -1
- package/src/sap/fe/macros/messagebundle_fr.properties +9 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hi.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_hu.properties +7 -1
- package/src/sap/fe/macros/messagebundle_id.properties +15 -9
- package/src/sap/fe/macros/messagebundle_it.properties +7 -1
- package/src/sap/fe/macros/messagebundle_iw.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -7
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -5
- package/src/sap/fe/macros/messagebundle_ko.properties +8 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +9 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +8 -2
- package/src/sap/fe/macros/messagebundle_mk.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ms.properties +7 -1
- package/src/sap/fe/macros/messagebundle_nl.properties +7 -1
- package/src/sap/fe/macros/messagebundle_no.properties +7 -1
- package/src/sap/fe/macros/messagebundle_pl.properties +8 -2
- package/src/sap/fe/macros/messagebundle_pt.properties +7 -1
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +7 -1
- package/src/sap/fe/macros/messagebundle_ro.properties +8 -2
- package/src/sap/fe/macros/messagebundle_ru.properties +10 -4
- package/src/sap/fe/macros/messagebundle_sh.properties +8 -2
- package/src/sap/fe/macros/messagebundle_sk.properties +7 -1
- package/src/sap/fe/macros/messagebundle_sl.properties +7 -1
- package/src/sap/fe/macros/messagebundle_sr.properties +8 -2
- package/src/sap/fe/macros/messagebundle_sv.properties +7 -1
- package/src/sap/fe/macros/messagebundle_th.properties +8 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +7 -1
- package/src/sap/fe/macros/messagebundle_uk.properties +10 -4
- package/src/sap/fe/macros/messagebundle_vi.properties +10 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +7 -1
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +8 -2
- package/src/sap/fe/macros/messages/MessageButton.js +39 -18
- package/src/sap/fe/macros/messages/MessageButton.ts +42 -19
- package/src/sap/fe/macros/messages/MessagePopover.js +4 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +6 -4
- package/src/sap/fe/macros/microchart/MicroChart.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChart.tsx +1 -1
- 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 +2 -3
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +1 -2
- 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/ActionsTemplating.js +4 -8
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +5 -8
- package/src/sap/fe/macros/table/BasicSearch.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.ts +2 -1
- package/src/sap/fe/macros/table/Column.js +14 -2
- package/src/sap/fe/macros/table/Column.ts +7 -0
- package/src/sap/fe/macros/table/ColumnExportSettings.js +83 -15
- package/src/sap/fe/macros/table/ColumnExportSettings.ts +44 -0
- package/src/sap/fe/macros/table/ColumnOverride.js +14 -2
- package/src/sap/fe/macros/table/ColumnOverride.ts +7 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +7 -5
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +21 -11
- package/src/sap/fe/macros/table/QuickFilterSelector.js +12 -3
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +15 -2
- package/src/sap/fe/macros/table/Table.block.js +188 -147
- package/src/sap/fe/macros/table/Table.block.tsx +41 -11
- package/src/sap/fe/macros/table/Table.js +16 -10
- package/src/sap/fe/macros/table/Table.tsx +16 -10
- package/src/sap/fe/macros/table/TableAPI.js +224 -184
- package/src/sap/fe/macros/table/TableAPI.ts +63 -19
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -6
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +5 -4
- package/src/sap/fe/macros/table/TableHelper.js +2 -3
- package/src/sap/fe/macros/table/TableHelper.ts +1 -2
- package/src/sap/fe/macros/table/TableRuntime.js +24 -5
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -3
- package/src/sap/fe/macros/table/TreeTable.js +16 -10
- package/src/sap/fe/macros/table/TreeTable.tsx +16 -10
- package/src/sap/fe/macros/table/Utils.js +8 -3
- package/src/sap/fe/macros/table/Utils.ts +12 -3
- 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 +69 -34
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +75 -33
- 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/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +14 -12
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +11 -10
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +34 -4
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +45 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +55 -12
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +71 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +53 -2
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +55 -0
- package/src/sap/fe/macros/table/mixin/TableExport.js +22 -3
- package/src/sap/fe/macros/table/mixin/TableExport.ts +25 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +5 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +7 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +4 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +10 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +36 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +44 -9
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +5 -4
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +3 -2
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +2 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +1 -2
|
@@ -53,6 +53,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
53
53
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/cutEnablement", false);
|
|
54
54
|
internalContext.setProperty("nodeUpdatesInfo/copyEnablement", false);
|
|
55
55
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/copyEnablement", false);
|
|
56
|
+
const pasteButton = table.getActions().find(toolbarAction => /::Paste$/.test(toolbarAction.getAction().getId()));
|
|
57
|
+
setTimeout(() => {
|
|
58
|
+
pasteButton?.focus();
|
|
59
|
+
}, 0);
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
/**
|
|
@@ -494,4 +498,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
494
498
|
_exports = TableHierarchy;
|
|
495
499
|
return _exports;
|
|
496
500
|
}, false);
|
|
497
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsIl9vbkRyYWdFbnRlckRvY3VtZW50IiwidWk1RXZlbnQiLCJkcmFnZ2VkQ29udGV4dCIsImdldFBhcmFtZXRlciIsImdldENvbnRlbnQiLCJnZXRSb3dCaW5kaW5nIiwiZ2V0QmluZGluZyIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0Q29udGV4dCIsImlzQW5jZXN0b3JPZiIsImRpc2FibGVkQmV0d2VlbiIsImRpc2FibGVkT24iLCJ0YWJsZURlZmluaXRpb24iLCJnZXRUYWJsZURlZmluaXRpb24iLCJpc01vdmVBbGxvd2VkSW5mbyIsImNvbnRyb2wiLCJpc01vdmVUb1Bvc2l0aW9uQWxsb3dlZCIsImN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsInVuZGVmaW5lZCIsInNhZmVJc01vdmVBbGxvd2VkIiwiYW5ub3RhdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsIk1hdGgiLCJhYnMiLCJnZXRJbmRleCIsImdldExlbmd0aCIsImNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCIsImlzRHJvcEJldHdlZW5BbGxvd2VkRm9yRHJhZyIsImFsbG93ZWREcm9wUG9zaXRpb24iLCJPbk9yQmV0d2VlbiIsIk9uIiwiQmV0d2VlbiIsInNldERyb3BQb3NpdGlvbiIsIl9vbkRyYWdTdGFydERvY3VtZW50IiwiY29udGV4dCIsInVwZGF0YWJsZVByb3BlcnR5UGF0aCIsImRpc2FibGVEcmFnIiwiaXNSZWxhdGl2ZSIsImlzTW92YWJsZUluZm8iLCJpc05vZGVNb3ZhYmxlIiwiX2Vycm9yIiwiX29uRHJvcERvY3VtZW50IiwiQnVzeUxvY2tlciIsImxvY2siLCJkcm9wcGVkT25Db250ZXh0IiwiZHJvcEluZm8iLCJwb3NpdGlvbiIsInBhcmVudENvbnRleHQiLCJjb250ZXh0QmVmb3JlIiwiY29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEFmdGVyIiwiZ2V0Q29udGV4dEJlZm9yZSIsIm1vdmVkQ29udGV4dCIsIlByb21pc2UiLCJhbGwiLCJkcm9wQ29udGV4dCIsInJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJtZXNzYWdlIiwidW5sb2NrIiwiX29uQ29sbGFwc2VFeHBhbmROb2RlIiwiX3VpNUV2ZW50IiwiZXhwYW5kIiwicHJvbWlzZUFycmF5IiwibWFwIiwic2luZ2xlQ29udGV4dCIsImlzRXhwYW5kZWQiLCJjb2xsYXBzZSIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJfb25Nb3ZlVXBEb3duIiwibW92ZVVwIiwiYXJndW1lbnRzIiwibWRjVGFibGUiLCJzZXRCdXN5IiwicmVxdWVzdFBhcmVudCIsImNvbnRleHRNb3ZlZCIsIm1vdmVQcm9taXNlIiwicHJldmlvdXNTaWJsaW5nIiwicmVxdWVzdFNpYmxpbmciLCJtb3ZlIiwibmV4dFNpYmxpbmciLCJwYXJlbnQiLCJuZXdJbmRleCIsInNjcm9sbFRvSW5kZXgiLCJmb2N1c1JvdyIsIl9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbiIsImVudGl0eVBhdGgiLCJkYXRhIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJnZXRDb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJlbnRpdHlUeXBlIiwidGFyZ2V0VHlwZSIsImFjdGlvbk5hbWUiLCJhbm5vdGF0aW9ucyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsImFwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwic2lkZUVmZmVjdHMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yT0RhdGFBY3Rpb24iLCJhbGxvd2VkIiwiaXNBbGxvd2VkIiwicGFyZW50QmVmb3JlIiwicGFyYW1zQmVmb3JlIiwiZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzIiwicGFyZW50QWZ0ZXIiLCJwYXJhbXNBZnRlciIsImNvbnRleHRJbmRleCIsIkVycm9yIiwibGlzdEJpbmRpbmciLCJnZXRBbGxDdXJyZW50Q29udGV4dHMiLCJmaW5kIiwiY3R4IiwiaW5mbyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiaXNUYWJsZVNvcnRlZCIsIm1vdmVDb250ZXh0IiwiZmluYWxseSIsInBhcmFtcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVIaWVyYXJjaHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIElJbnRlcmZhY2VXaXRoTWl4aW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIERyYWdEcm9wSW5mbyBmcm9tIFwic2FwL3VpL2NvcmUvZG5kL0RyYWdEcm9wSW5mb1wiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBJVGFibGVCbG9jayB9IGZyb20gXCIuLi9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlUnVudGltZSBmcm9tIFwiLi4vVGFibGVSdW50aW1lXCI7XG5cbmVudW0gRHJvcFBvc2l0aW9uIHtcblx0T24gPSBcIk9uXCIsXG5cdEJldHdlZW4gPSBcIkJldHdlZW5cIixcblx0T25PckJldHdlZW4gPSBcIk9uT3JCZXR3ZWVuXCJcbn1cblxudHlwZSBEcm9wSW5mb3JtYXRpb24gPVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5PbjsgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwgfVxuXHR8IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuOyBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDsgY29udGV4dEFmdGVyOiBDb250ZXh0IHwgbnVsbCB9O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYWJsZUhpZXJhcmNoeSBpbXBsZW1lbnRzIElJbnRlcmZhY2VXaXRoTWl4aW4ge1xuXHRzZXR1cE1peGluKF9iYXNlQ2xhc3M6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0Ly8gVGhpcyBtZXRob2QgaXMgbmVlZGVkIHRvIGltcGxlbWVudCBpbnRlcmZhY2UgSUludGVyZmFjZVdpdGhNaXhpblxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIEN1dC9Db3B5IG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGV2dCBUaGUgVUk1IGV2ZW50XG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0X29uQ29weUN1dCh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBldnQ6IFVJNUV2ZW50PHt9LCBVSTVFbGVtZW50PiwgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sIGFjdGlvbjogXCJDb3B5XCIgfCBcIkN1dFwiKTogdm9pZCB7XG5cdFx0bGV0IHRhYmxlOiBNRENUYWJsZTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHR0YWJsZSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbWVudSA9IGV2dC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKSBhcyBNZW51O1xuXHRcdFx0dGFibGUgPSBtZW51LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHR9XG5cdFx0Y29uc3QgaW50ZXJuYWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0TG9nLmVycm9yKGBNdWx0aSAke2FjdGlvbiA9PT0gXCJDdXRcIiA/IFwiY3V0dGluZ1wiIDogXCJjb3B5aW5nXCJ9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vcGFzdGFibGVDb250ZXh0c1wiLCBzZWxlY3RlZENvbnRleHRzKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vbGFzdEFjdGlvblwiLCBhY3Rpb24pO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh0YWJsZSkuZ2V0VGV4dChcIk1fQ1VUQ09QWV9SRUFEWVwiKSk7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSB8fCBpbnRlcm5hbENvbnRleHQuZ2V0UHJvcGVydHkoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIikgPiAwKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2xlYXJTZWxlY3Rpb24odGFibGUpO1xuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH0gZWxzZSBpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdC8vIFVzaW5nIHRoZSBjb250ZXh0IG1lbnUgaW1wbGljaXRseSBkZWZpbmVzIGEgY29udGV4dCBmb3IgdGhlIGFjdGlvblxuXHRcdFx0dGFibGUuZmlyZVNlbGVjdGlvbkNoYW5nZSgpO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY3V0RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb250ZXh0bWVudS9ub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFxQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lB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
|
|
501
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEcm9wUG9zaXRpb24iLCJUYWJsZUhpZXJhcmNoeSIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0dXBNaXhpbiIsIl9iYXNlQ2xhc3MiLCJfb25Db3B5Q3V0IiwiZXZ0IiwiZm9yQ29udGV4dE1lbnUiLCJhY3Rpb24iLCJ0YWJsZSIsImdldFNvdXJjZSIsImdldFBhcmVudCIsIm1lbnUiLCJpbnRlcm5hbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiTG9nIiwiZXJyb3IiLCJzZXRQcm9wZXJ0eSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJnZXRQcm9wZXJ0eSIsIlRhYmxlUnVudGltZSIsImNsZWFyU2VsZWN0aW9uIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsInBhc3RlQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImZpbmQiLCJ0b29sYmFyQWN0aW9uIiwidGVzdCIsImdldEFjdGlvbiIsImdldElkIiwic2V0VGltZW91dCIsImZvY3VzIiwiX29uRHJhZ0VudGVyRG9jdW1lbnQiLCJ1aTVFdmVudCIsImRyYWdnZWRDb250ZXh0IiwiZ2V0UGFyYW1ldGVyIiwiZ2V0Q29udGVudCIsImdldFJvd0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXRDb250ZXh0IiwiaXNBbmNlc3Rvck9mIiwiZGlzYWJsZWRCZXR3ZWVuIiwiZGlzYWJsZWRPbiIsInRhYmxlRGVmaW5pdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTW92ZUFsbG93ZWRJbmZvIiwiY29udHJvbCIsImlzTW92ZVRvUG9zaXRpb25BbGxvd2VkIiwiY3VzdG9tRnVuY3Rpb24iLCJGUE1IZWxwZXIiLCJnZXRDdXN0b21GdW5jdGlvbiIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwic2FmZUlzTW92ZUFsbG93ZWQiLCJhbm5vdGF0aW9uIiwiYWxsb3dEcm9wQmV0d2Vlbk5vZGVzIiwiTWF0aCIsImFicyIsImdldEluZGV4IiwiZ2V0TGVuZ3RoIiwiY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkIiwiaXNEcm9wQmV0d2VlbkFsbG93ZWRGb3JEcmFnIiwiYWxsb3dlZERyb3BQb3NpdGlvbiIsIk9uT3JCZXR3ZWVuIiwiT24iLCJCZXR3ZWVuIiwic2V0RHJvcFBvc2l0aW9uIiwiX29uRHJhZ1N0YXJ0RG9jdW1lbnQiLCJjb250ZXh0IiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiZGlzYWJsZURyYWciLCJpc1JlbGF0aXZlIiwiaXNNb3ZhYmxlSW5mbyIsImlzTm9kZU1vdmFibGUiLCJfZXJyb3IiLCJfb25Ecm9wRG9jdW1lbnQiLCJCdXN5TG9ja2VyIiwibG9jayIsImRyb3BwZWRPbkNvbnRleHQiLCJkcm9wSW5mbyIsInBvc2l0aW9uIiwicGFyZW50Q29udGV4dCIsImNvbnRleHRCZWZvcmUiLCJjb250ZXh0QWZ0ZXIiLCJnZXRDb250ZXh0QWZ0ZXIiLCJnZXRDb250ZXh0QmVmb3JlIiwibW92ZWRDb250ZXh0IiwiUHJvbWlzZSIsImFsbCIsImRyb3BDb250ZXh0IiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24iLCJnZXRUcmFuc2xhdGVkVGV4dCIsIm1lc3NhZ2UiLCJ1bmxvY2siLCJfb25Db2xsYXBzZUV4cGFuZE5vZGUiLCJfdWk1RXZlbnQiLCJleHBhbmQiLCJwcm9taXNlQXJyYXkiLCJtYXAiLCJzaW5nbGVDb250ZXh0IiwiaXNFeHBhbmRlZCIsImNvbGxhcHNlIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsIl9vbk1vdmVVcERvd24iLCJtb3ZlVXAiLCJhcmd1bWVudHMiLCJtZGNUYWJsZSIsInNldEJ1c3kiLCJyZXF1ZXN0UGFyZW50IiwiY29udGV4dE1vdmVkIiwibW92ZVByb21pc2UiLCJwcmV2aW91c1NpYmxpbmciLCJyZXF1ZXN0U2libGluZyIsIm1vdmUiLCJuZXh0U2libGluZyIsInBhcmVudCIsIm5ld0luZGV4Iiwic2Nyb2xsVG9JbmRleCIsImZvY3VzUm93IiwiX3JlcXVlc3RTaWRlRWZmZWN0c0ZvckhpZXJhcmNoeUFjdGlvbnMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JDb3B5QWN0aW9uIiwiZW50aXR5UGF0aCIsImRhdGEiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsInRhcmdldE9iamVjdCIsImdldENvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImVudGl0eVR5cGUiLCJ0YXJnZXRUeXBlIiwiYWN0aW9uTmFtZSIsImFubm90YXRpb25zIiwiSGllcmFyY2h5IiwiaGllcmFyY2h5UXVhbGlmaWVyIiwiYXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJzaWRlRWZmZWN0cyIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbiIsImFsbG93ZWQiLCJpc0FsbG93ZWQiLCJwYXJlbnRCZWZvcmUiLCJwYXJhbXNCZWZvcmUiLCJnZXREcm9wQmV0d2VlblBhcmFtZXRlcnMiLCJwYXJlbnRBZnRlciIsInBhcmFtc0FmdGVyIiwiY29udGV4dEluZGV4IiwiRXJyb3IiLCJsaXN0QmluZGluZyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImN0eCIsImluZm8iLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImlzVGFibGVTb3J0ZWQiLCJtb3ZlQ29udGV4dCIsImZpbmFsbHkiLCJwYXJhbXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlSGllcmFyY2h5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgdHlwZSBJSW50ZXJmYWNlV2l0aE1peGluIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgeyB0eXBlIEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBEcmFnRHJvcEluZm8gZnJvbSBcInNhcC91aS9jb3JlL2RuZC9EcmFnRHJvcEluZm9cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVSdW50aW1lIGZyb20gXCIuLi9UYWJsZVJ1bnRpbWVcIjtcblxuZW51bSBEcm9wUG9zaXRpb24ge1xuXHRPbiA9IFwiT25cIixcblx0QmV0d2VlbiA9IFwiQmV0d2VlblwiLFxuXHRPbk9yQmV0d2VlbiA9IFwiT25PckJldHdlZW5cIlxufVxuXG50eXBlIERyb3BJbmZvcm1hdGlvbiA9XG5cdHwgeyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLk9uOyBwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCB9XG5cdHwgeyBwb3NpdGlvbjogRHJvcFBvc2l0aW9uLkJldHdlZW47IGNvbnRleHRCZWZvcmU6IENvbnRleHQgfCBudWxsOyBjb250ZXh0QWZ0ZXI6IENvbnRleHQgfCBudWxsIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhYmxlSGllcmFyY2h5IGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyBuZWVkZWQgdG8gaW1wbGVtZW50IGludGVyZmFjZSBJSW50ZXJmYWNlV2l0aE1peGluXG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgQ3V0L0NvcHkgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gZXZ0IFRoZSBVSTUgZXZlbnRcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHRfb25Db3B5Q3V0KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksIGV2dDogVUk1RXZlbnQ8e30sIFVJNUVsZW1lbnQ+LCBmb3JDb250ZXh0TWVudTogYm9vbGVhbiwgYWN0aW9uOiBcIkNvcHlcIiB8IFwiQ3V0XCIpOiB2b2lkIHtcblx0XHRsZXQgdGFibGU6IE1EQ1RhYmxlO1xuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdHRhYmxlID0gZXZ0LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBtZW51ID0gZXZ0LmdldFNvdXJjZSgpLmdldFBhcmVudCgpIGFzIE1lbnU7XG5cdFx0XHR0YWJsZSA9IG1lbnUuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE1EQ1RhYmxlO1xuXHRcdH1cblx0XHRjb25zdCBpbnRlcm5hbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNlbGVjdGVkQ29udGV4dHMgPSB0aGlzLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHRpZiAoc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRMb2cuZXJyb3IoYE11bHRpICR7YWN0aW9uID09PSBcIkN1dFwiID8gXCJjdXR0aW5nXCIgOiBcImNvcHlpbmdcIn0gaXMgbm90IHN1cHBvcnRlZGApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9wYXN0YWJsZUNvbnRleHRzXCIsIHNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm5vZGVVcGRhdGVzSW5mby9sYXN0QWN0aW9uXCIsIGFjdGlvbik7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3coUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRhYmxlKS5nZXRUZXh0KFwiTV9DVVRDT1BZX1JFQURZXCIpKTtcblx0XHRpZiAoIWZvckNvbnRleHRNZW51IHx8IGludGVybmFsQ29udGV4dC5nZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiKSA+IDApIHtcblx0XHRcdFRhYmxlUnVudGltZS5jbGVhclNlbGVjdGlvbih0YWJsZSk7XG5cdFx0XHR0YWJsZS5maXJlU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fSBlbHNlIGlmIChmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0Ly8gVXNpbmcgdGhlIGNvbnRleHQgbWVudSBpbXBsaWNpdGx5IGRlZmluZXMgYSBjb250ZXh0IGZvciB0aGUgYWN0aW9uXG5cdFx0XHR0YWJsZS5maXJlU2VsZWN0aW9uQ2hhbmdlKCk7XG5cdFx0fVxuXG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KFwibm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jdXRFbmFibGVtZW50XCIsIGZhbHNlKTtcblx0XHRpbnRlcm5hbENvbnRleHQuc2V0UHJvcGVydHkoXCJub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiwgZmFsc2UpO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRleHRtZW51L25vZGVVcGRhdGVzSW5mby9jb3B5RW5hYmxlbWVudFwiLCBmYWxzZSk7XG5cdFx0Y29uc3QgcGFzdGVCdXR0b24gPSAodGFibGUuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXSkuZmluZCgodG9vbGJhckFjdGlvbikgPT5cblx0XHRcdC86OlBhc3RlJC8udGVzdCh0b29sYmFyQWN0aW9uLmdldEFjdGlvbigpLmdldElkKCkpXG5cdFx0KTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHBhc3RlQnV0dG9uPy5mb2N1cygpO1xuXHRcdH0sIDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdGFibGUgcm93LlxuXHQgKiBAcGFyYW0gdWk1RXZlbnQgVUk1IGV2ZW50IGNvbWluZyBmcm9tIHRoZSBNREMgZHJhZyBhbmQgZHJvcCBjb25maWdcblx0ICovXG5cdF9vbkRyYWdFbnRlckRvY3VtZW50KFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0dWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQ7IGRyYWdTb3VyY2U6IENvbnRleHQ7IGRyb3BQb3NpdGlvbjogXCJCZWZvcmVcIiB8IFwiQWZ0ZXJcIiB8IFwiT25cIiB9LCBEcmFnRHJvcEluZm8+XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGRyYWdnZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRpZiAodGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpICE9PSBkcmFnZ2VkQ29udGV4dC5nZXRCaW5kaW5nKCkpIHtcblx0XHRcdC8vIFRoZSBkcmFnIGlzIGRvbmUgb24gYSBkaWZmZXJlbnQgdGFibGUgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dDogQ29udGV4dCB8IG51bGwgPSB1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJiaW5kaW5nQ29udGV4dFwiKTtcblx0XHRpZiAoZHJhZ2dlZENvbnRleHQuaXNBbmNlc3Rvck9mKHRhcmdldENvbnRleHQpKSB7XG5cdFx0XHQvLyBUaGUgYW5jZXN0b3IgaXMgZHJvcHBlZCBvbiBhIGRlc2NlbmRhbnQgLT4gbm90IGF1dGhvcml6ZWRcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkQmV0d2VlbiA9IGZhbHNlO1xuXHRcdGxldCBkaXNhYmxlZE9uID0gZmFsc2U7XG5cdFx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKTtcblx0XHRjb25zdCBpc01vdmVBbGxvd2VkSW5mbyA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzTW92ZVRvUG9zaXRpb25BbGxvd2VkO1xuXHRcdGNvbnN0IGN1c3RvbUZ1bmN0aW9uID0gaXNNb3ZlQWxsb3dlZEluZm9cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlOiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc01vdmVBbGxvd2VkSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCkgYXMgQ29udHJvbFxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdGlmICh0YXJnZXRDb250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBUaGUgZHJhZyBpcyBkb25lIG9uIHRoZSB0YWJsZSBpdHNlbGYgLT4gZHJvcCBhcyByb290IG5vZGUpXG5cdFx0XHRkaXNhYmxlZE9uID0gIXRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCBudWxsKTtcblx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpc2FibGVkT24gPSAhdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHRhcmdldENvbnRleHQpO1xuXHRcdFx0ZGlzYWJsZWRCZXR3ZWVuID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uYWxsb3dEcm9wQmV0d2Vlbk5vZGVzICE9PSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdE1hdGguYWJzKHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSEgLSBkcmFnZ2VkQ29udGV4dC5nZXRJbmRleCgpISkgPT09IDEgJiZcblx0XHRcdFx0ISh0YXJnZXRDb250ZXh0LmdldEluZGV4KCkgPT09IDAgJiYgdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBcIkJlZm9yZVwiKSAmJlxuXHRcdFx0XHQhKFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuZ2V0SW5kZXgoKSA9PT0gdGhpcy5nZXRDb250ZW50KCkuZ2V0Um93QmluZGluZygpLmdldExlbmd0aCgpIC0gMSAmJlxuXHRcdFx0XHRcdHVpNUV2ZW50LmdldFBhcmFtZXRlcihcImRyb3BQb3NpdGlvblwiKSA9PT0gXCJBZnRlclwiXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGUgZHJvcCBiZXR3ZWVuIG5vZGUgaXMgYWxsb3dlZCwgd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGEgcm9vdCBub2RlIGFuZCBpZiB0aGUgdGFibGUgc3VwcG9ydHMgY2hhbmdlU2libGluZ0ZvclJvb3RzXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFkaXNhYmxlZEJldHdlZW4gJiZcblx0XHRcdFx0IXRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNoYW5nZVNpYmxpbmdGb3JSb290c1N1cHBvcnRlZCAmJlxuXHRcdFx0XHR0YXJnZXRDb250ZXh0LmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMVxuXHRcdFx0KSB7XG5cdFx0XHRcdGRpc2FibGVkQmV0d2VlbiA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGN1c3RvbSBsb2dpYyBmb3IgZHJvcCBiZXR3ZWVuIGlmIHRoZXJlJ3Mgc29tZSwgYW5kIGlmIGl0J3Mgbm90IGFscmVhZHkgZGlzYWJsZWQgYXQgdGhlIHRhYmxlIGxldmVsXG5cdFx0XHRpZiAoY3VzdG9tRnVuY3Rpb24gJiYgIWRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0XHRkaXNhYmxlZEJldHdlZW4gPSAhdGhpcy5pc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoY3VzdG9tRnVuY3Rpb24sIGRyYWdnZWRDb250ZXh0LCB0YXJnZXRDb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZERyb3BQb3NpdGlvbjogRHJvcFBvc2l0aW9uID0gRHJvcFBvc2l0aW9uLk9uT3JCZXR3ZWVuO1xuXHRcdGlmIChkaXNhYmxlZEJldHdlZW4gJiYgZGlzYWJsZWRPbikge1xuXHRcdFx0Ly9TZXQgdGhlIGVsZW1lbnQgYXMgbm9uIGRyb3BwYWJsZVxuXHRcdFx0dWk1RXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGRpc2FibGVkQmV0d2Vlbikge1xuXHRcdFx0YWxsb3dlZERyb3BQb3NpdGlvbiA9IERyb3BQb3NpdGlvbi5Pbjtcblx0XHR9IGVsc2UgaWYgKGRpc2FibGVkT24pIHtcblx0XHRcdGFsbG93ZWREcm9wUG9zaXRpb24gPSBEcm9wUG9zaXRpb24uQmV0d2Vlbjtcblx0XHR9XG5cdFx0dWk1RXZlbnQuZ2V0U291cmNlKCkuc2V0RHJvcFBvc2l0aW9uKGFsbG93ZWREcm9wUG9zaXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0cyB0aGUgZHJhZyBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqIEBwYXJhbSB1aTVFdmVudCBVSTUgZXZlbnQgY29taW5nIGZyb20gdGhlIE1EQyBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuXHQgKi9cblx0X29uRHJhZ1N0YXJ0RG9jdW1lbnQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgdWk1RXZlbnQ6IFVJNUV2ZW50PHsgYmluZGluZ0NvbnRleHQ6IENvbnRleHQgfSwgQ29udHJvbD4pOiB2b2lkIHtcblx0XHRjb25zdCBjb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0Y29uc3QgdXBkYXRhYmxlUHJvcGVydHlQYXRoID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5hbm5vdGF0aW9uLnVwZGF0YWJsZVByb3BlcnR5UGF0aDtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IGNhbiBiZSB1cGRhdGVkIGFjY29yZGluZyB0byB1cGRhdGUgcmVzdHJpY3Rpb25zXG5cdFx0bGV0IGRpc2FibGVEcmFnID0gISF1cGRhdGFibGVQcm9wZXJ0eVBhdGggJiYgIWNvbnRleHQuZ2V0UHJvcGVydHkodXBkYXRhYmxlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0IHdpdGggZHJhZnQsIGNoZWNrIHRoYXQgdGhlIGNvbnRleHQgaGFzIG5vIGFzc29jaWF0ZWQgZHJhZnRcblx0XHRpZiAoIWRpc2FibGVEcmFnICYmICEoY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZykuaXNSZWxhdGl2ZSgpKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSA9PT0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBjdXN0b20gbG9naWMgaWYgdGhlcmUncyBvbmVcblx0XHRjb25zdCBpc01vdmFibGVJbmZvID0gdGhpcy5nZXRUYWJsZURlZmluaXRpb24oKS5jb250cm9sLmlzTm9kZU1vdmFibGU7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChpc01vdmFibGVJbmZvICYmICFkaXNhYmxlRHJhZykge1xuXHRcdFx0XHRkaXNhYmxlRHJhZyA9XG5cdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0aXNNb3ZhYmxlSW5mby5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRpc01vdmFibGVJbmZvLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdHVpNUV2ZW50LmdldFNvdXJjZSgpXG5cdFx0XHRcdFx0XHQpIGFzIEZ1bmN0aW9uXG5cdFx0XHRcdFx0KShjb250ZXh0KSA9PT0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRkaXNhYmxlRHJhZyA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoZGlzYWJsZURyYWcpIHtcblx0XHRcdC8vU2V0IHRoZSBlbGVtZW50IGFzIG5vbiBkcmFnZ2FibGVcblx0XHRcdHVpNUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERyb3BzIHRoZSBkb2N1bWVudC5cblx0ICogQHBhcmFtIHVpNUV2ZW50IFVJNSBldmVudCBjb21pbmcgZnJvbSB0aGUgTURDIGRyYWcgYW5kIGRyb3AgY29uZmlnXG5cdCAqIEByZXR1cm5zIFRoZSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfb25Ecm9wRG9jdW1lbnQoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSxcblx0XHR1aTVFdmVudDogVUk1RXZlbnQ8e1xuXHRcdFx0YmluZGluZ0NvbnRleHQ6IENvbnRleHQ7XG5cdFx0XHRkcmFnU291cmNlOiBDb250ZXh0O1xuXHRcdFx0ZHJvcFBvc2l0aW9uOiBzdHJpbmc7XG5cdFx0fT5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMuZ2V0Q29udGVudCgpKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcm9wcGVkT25Db250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiYmluZGluZ0NvbnRleHRcIik7XG5cdFx0XHRsZXQgZHJvcEluZm86IERyb3BJbmZvcm1hdGlvbjtcblx0XHRcdGlmIChkcm9wcGVkT25Db250ZXh0ID09PSB0aGlzLmdldENvbnRlbnQoKS5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0XHRcdC8vIFRoZSBkcm9wIGlzIGRvbmUgb24gdGhlIHRhYmxlIGl0c2VsZiAtPiBkcm9wIGFzIHJvb3Qgbm9kZSlcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IG51bGwgfTtcblx0XHRcdH0gZWxzZSBpZiAodWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJvcFBvc2l0aW9uXCIpID09PSBEcm9wUG9zaXRpb24uT24pIHtcblx0XHRcdFx0Ly8gRHJvcCBvbiBhIG5vZGVcblx0XHRcdFx0ZHJvcEluZm8gPSB7IHBvc2l0aW9uOiBEcm9wUG9zaXRpb24uT24sIHBhcmVudENvbnRleHQ6IGRyb3BwZWRPbkNvbnRleHQgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRcdGxldCBjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbDtcblx0XHRcdFx0bGV0IGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGw7XG5cdFx0XHRcdGlmICh1aTVFdmVudC5nZXRQYXJhbWV0ZXIoXCJkcm9wUG9zaXRpb25cIikgPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSBkcm9wcGVkT25Db250ZXh0O1xuXHRcdFx0XHRcdGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKGRyb3BwZWRPbkNvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRleHRCZWZvcmUgPSB0aGlzLmdldENvbnRleHRCZWZvcmUoZHJvcHBlZE9uQ29udGV4dCk7XG5cdFx0XHRcdFx0Y29udGV4dEFmdGVyID0gZHJvcHBlZE9uQ29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRkcm9wSW5mbyA9IHsgcG9zaXRpb246IERyb3BQb3NpdGlvbi5CZXR3ZWVuLCBjb250ZXh0QWZ0ZXIsIGNvbnRleHRCZWZvcmUgfTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbW92ZWRDb250ZXh0ID0gdWk1RXZlbnQuZ2V0UGFyYW1ldGVyKFwiZHJhZ1NvdXJjZVwiKTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmRyb3BDb250ZXh0KG1vdmVkQ29udGV4dCwgZHJvcEluZm8pLCB0aGlzLnJlcXVlc3RTaWRlRWZmZWN0c0ZvckNoYW5nZU5leHRTaWJsaW5nQWN0aW9uKG1vdmVkQ29udGV4dCldKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVEFCTEVEUk9QX0ZBSUxFRFwiLCBbXCJcIl0pKTtcblx0XHRcdExvZy5lcnJvcihcIlRoZSBvcGVyYXRpb24gaXMgdW5zdWNjZXNzZnVsLiBcIiArIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyBcIlwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBjb2xsYXBzZS9leHBhbmQgZnJvbSB0aGUgY29udGV4dCBtZW51LlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gX3VpNUV2ZW50XG5cdCAqIEBwYXJhbSBleHBhbmRcblx0ICovXG5cdGFzeW5jIF9vbkNvbGxhcHNlRXhwYW5kTm9kZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBleHBhbmQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKGV4cGFuZCkge1xuXHRcdFx0Y29uc3QgcHJvbWlzZUFycmF5ID0gc2VsZWN0ZWRDb250ZXh0cy5tYXAoYXN5bmMgKHNpbmdsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2tpbmcgZm9yIGZhbHNlIHNwZWNpZmljYWxseTsgdW5kZWZpbmVkIG1lYW5zIHRoZSBub2RlIGNhbm5vdCBleHBhbmQvY29sbGFwc2Vcblx0XHRcdFx0aWYgKHNpbmdsZUNvbnRleHQuaXNFeHBhbmRlZCgpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBkdWUgdG8gbW9kZWwgbGltaXRhdGlvbi5cblx0XHRcdFx0XHQvLyBXZSBuZWVkIHRvIGNvbGxhcHNlIGEgbm9kZSBiZWZvcmUgZXhwYW5kaW5nIGl0IHRvIGVuc3VyZSB3ZSBleHBhbmQgaXQgY29tcGxldGVseS5cblx0XHRcdFx0XHQvLyBXaWxsIGJlIGNoYW5nZWQgb25jZSB0aGUgbW9kZWwgZml4ZXMgdGhlIGlzc3VlLlxuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0YXdhaXQgc2luZ2xlQ29udGV4dC5jb2xsYXBzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gc2luZ2xlQ29udGV4dC5leHBhbmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLm1hcChhc3luYyAoc2luZ2xlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVDb250ZXh0LmlzRXhwYW5kZWQoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNpbmdsZUNvbnRleHQuY29sbGFwc2UodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgbWV0aG9kIHRvIG1vdmUgYSByb3cgdXAgb3IgZG93biBpbiBhIFRyZWUgdGFibGUuXG5cdCAqIEBwYXJhbSBfdWk1RXZlbnRcblx0ICogQHBhcmFtIG1vdmVVcCBUcnVlIGZvciBtb3ZlIHVwLCBmYWxzZSBmb3IgbW92ZSBkb3duXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuXHQgKi9cblx0YXN5bmMgX29uTW92ZVVwRG93bih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBfdWk1RXZlbnQ6IFVJNUV2ZW50LCBtb3ZlVXA6IGJvb2xlYW4sIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzZWxlY3RlZENvbnRleHRzID0gdGhpcy5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0aWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICE9PSAxKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IG1kY1RhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0bWRjVGFibGUuc2V0QnVzeSh0cnVlKTtcblxuXHRcdC8vIE1vdmUgdGhlIGNvbnRleHQgdXAgb3IgZG93blxuXHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IGF3YWl0IG1vdmVkQ29udGV4dC5yZXF1ZXN0UGFyZW50KCk7XG5cdFx0bGV0IGNvbnRleHRNb3ZlZCA9IGZhbHNlO1xuXHRcdGxldCBtb3ZlUHJvbWlzZSA9IG51bGw7XG5cdFx0aWYgKG1vdmVVcCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNTaWJsaW5nID0gYXdhaXQgbW92ZWRDb250ZXh0LnJlcXVlc3RTaWJsaW5nKC0xKTtcblx0XHRcdGlmIChwcmV2aW91c1NpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBtb3ZlZENvbnRleHQubW92ZSh7IG5leHRTaWJsaW5nOiBwcmV2aW91c1NpYmxpbmcsIHBhcmVudDogcGFyZW50Q29udGV4dCB9KTtcblx0XHRcdFx0Y29udGV4dE1vdmVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgbmV4dFNpYmxpbmcgPSBhd2FpdCBtb3ZlZENvbnRleHQucmVxdWVzdFNpYmxpbmcoMSk7XG5cdFx0XHRpZiAobmV4dFNpYmxpbmcpIHtcblx0XHRcdFx0bW92ZVByb21pc2UgPSBuZXh0U2libGluZy5tb3ZlKHsgbmV4dFNpYmxpbmc6IG1vdmVkQ29udGV4dCwgcGFyZW50OiBwYXJlbnRDb250ZXh0IH0pO1xuXHRcdFx0XHRjb250ZXh0TW92ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFttb3ZlUHJvbWlzZSwgdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbihtb3ZlZENvbnRleHQpXSk7XG5cblx0XHQvLyBTY3JvbGwgdG8gdGhlIG5ldyBwb3NpdGlvblxuXHRcdGNvbnN0IG5ld0luZGV4ID0gbW92ZWRDb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRNb3ZlZCAmJiBuZXdJbmRleCAhPT0gdW5kZWZpbmVkICYmIG5ld0luZGV4ID49IDApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0bWRjVGFibGUuc2Nyb2xsVG9JbmRleChuZXdJbmRleCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZGNUYWJsZS5mb2N1c1JvdyhuZXdJbmRleCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1kY1RhYmxlLnNldEJ1c3koZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdCBmb3IgdGhlIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHJldHVybnMgQSBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0U2lkZUVmZmVjdHNGb3JDaGFuZ2VOZXh0U2libGluZ0FjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICogUmVxdWVzdHMgdGhlIHNpZGUgZWZmZWN0IGZvciB0aGUgQ29weUFjdGlvbi5cblx0ICogQHBhcmFtIG1vdmVkQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGhhcyBiZWVuIG1vdmVkXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzRm9yQ29weUFjdGlvbih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlSGllcmFyY2h5LCBtb3ZlZENvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdFNpZGVFZmZlY3RzRm9ySGllcmFyY2h5QWN0aW9ucyhtb3ZlZENvbnRleHQsIFwiQ29weUFjdGlvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3QgZm9yIHRoZSBDb3B5QWN0aW9uIG9yIENoYW5nZU5leHRTaWJsaW5nQWN0aW9uLlxuXHQgKiBAcGFyYW0gbW92ZWRDb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gbW92ZWRcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcmV0dXJucyBBIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9yZXF1ZXN0U2lkZUVmZmVjdHNGb3JIaWVyYXJjaHlBY3Rpb25zKFxuXHRcdHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVIaWVyYXJjaHksXG5cdFx0bW92ZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdGFjdGlvbjogXCJDaGFuZ2VOZXh0U2libGluZ0FjdGlvblwiIHwgXCJDb3B5QWN0aW9uXCJcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgZW50aXR5UGF0aCA9IHRoaXMuZ2V0Q29udGVudCgpLmRhdGEoXCJtZXRhUGF0aFwiKTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBtb3ZlZENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblxuXHRcdGNvbnN0IHRhcmdldE9iamVjdCA9IG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KHRhcmdldE9iamVjdCkgYXMgTmF2aWdhdGlvblByb3BlcnR5IHwgRW50aXR5U2V0O1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSAoY29udmVydE1ldGFNb2RlbENvbnRleHQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlID8/IChjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCBhcyBFbnRpdHlTZXQpLmVudGl0eVR5cGU7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0XHRgUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9ucyMke3RoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uW2FjdGlvbl0gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFjdGlvbk5hbWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0cyA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG1vdmVkQ29udGV4dCk7XG5cdFx0XHRpZiAoc2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0YXdhaXQgc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKHNpZGVFZmZlY3RzLCBtb3ZlZENvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYWZlbHkgY2hlY2tzIGlmIG1vdmluZyBhIG5vZGUgaXMgYWxsb3dlZC5cblx0ICogQHBhcmFtIGN1c3RvbUZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBtb3ZlZENvbnRleHRcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhbGxvd2VkXG5cdCAqL1xuXHRwcml2YXRlIHNhZmVJc01vdmVBbGxvd2VkKFxuXHRcdGN1c3RvbUZ1bmN0aW9uOiAoKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkLFxuXHRcdG1vdmVkQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbFxuXHQpOiBib29sZWFuIHtcblx0XHRpZiAoIWN1c3RvbUZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgYWxsb3dlZCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGFsbG93ZWQgPSBjdXN0b21GdW5jdGlvbihtb3ZlZENvbnRleHQsIHBhcmVudENvbnRleHQpID09PSB0cnVlO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZXhlY3V0ZSBmdW5jdGlvbiByZWxhdGVkIHRvIGlzTW92ZVRvUG9zaXRpb25BbGxvd2VkXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRhbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaXMgZHJvcCBcImJldHdlZW5cIiBpcyBhbGxvd2VkIGJ5IGN1c3RvbSBsb2dpYyBmb3IgYSBnaXZlbiB0YXJnZXRDb250ZXh0LlxuXHQgKiBAcGFyYW0gY3VzdG9tRnVuY3Rpb25cblx0ICogQHBhcmFtIGRyYWdnZWRDb250ZXh0XG5cdCAqIEBwYXJhbSB0YXJnZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYWxsb3dlZFxuXHQgKi9cblx0cHJpdmF0ZSBpc0Ryb3BCZXR3ZWVuQWxsb3dlZEZvckRyYWcoXG5cdFx0Y3VzdG9tRnVuY3Rpb246IChjb250ZXh0OiBDb250ZXh0LCBwYXJlbnQ6IENvbnRleHQgfCBudWxsKSA9PiBib29sZWFuLFxuXHRcdGRyYWdnZWRDb250ZXh0OiBDb250ZXh0LFxuXHRcdHRhcmdldENvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzQWxsb3dlZCA9IHRydWU7XG5cblx0XHQvLyBEZXRlcm1pbmUgd2hhdCB0byBkbyBpZiB3ZSBkcm9wIGJlZm9yZSB0YXJnZXRDb250ZXh0XG5cdFx0Y29uc3QgY29udGV4dEJlZm9yZSA9IHRoaXMuZ2V0Q29udGV4dEJlZm9yZSh0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBwYXJlbnRCZWZvcmUgPSBjb250ZXh0QmVmb3JlID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRCZWZvcmUuZ2V0UGFyZW50KCk7XG5cdFx0Y29uc3QgcGFyYW1zQmVmb3JlID0gdGhpcy5nZXREcm9wQmV0d2VlblBhcmFtZXRlcnMoY29udGV4dEJlZm9yZSwgcGFyZW50QmVmb3JlLCB0YXJnZXRDb250ZXh0LCB0YXJnZXRDb250ZXh0LmdldFBhcmVudCgpKTtcblxuXHRcdC8vIERldGVybWluZSB3aGF0IHRvIGRvIGlmIHdlIGRyb3AgYWZ0ZXIgdGFyZ2V0Q29udGV4dFxuXHRcdGNvbnN0IGNvbnRleHRBZnRlciA9IHRoaXMuZ2V0Q29udGV4dEFmdGVyKHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHBhcmVudEFmdGVyID0gY29udGV4dEFmdGVyID09PSBudWxsID8gbnVsbCA6IGNvbnRleHRBZnRlci5nZXRQYXJlbnQoKTtcblx0XHRjb25zdCBwYXJhbXNBZnRlciA9IHRoaXMuZ2V0RHJvcEJldHdlZW5QYXJhbWV0ZXJzKHRhcmdldENvbnRleHQsIHRhcmdldENvbnRleHQuZ2V0UGFyZW50KCksIGNvbnRleHRBZnRlciwgcGFyZW50QWZ0ZXIpO1xuXG5cdFx0Ly8gSWYgcGFyYW1zQmVmb3JlIG9yIHBhcmFtc0FmdGVyIGNhbm5vdCBiZSBkZXRlcm1pbmVkIChiZWNhdXNlIHBhcmVudHMgYXJlIG5vdCBsb2FkZWQpLCB3ZSBhbGxvdyBkcm9wIGJldHdlZW4gYW5kIGRvIHRoZSByZWFsIGNoZWNrIGluIG9uRHJvcERvY3VtZW50XG5cdFx0aWYgKHBhcmFtc0JlZm9yZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc0FmdGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChwYXJhbXNCZWZvcmUucGFyZW50ID09PSBwYXJhbXNBZnRlci5wYXJlbnQpIHtcblx0XHRcdFx0Ly8gRHJvcHBpbmcgYmVmb3JlIG9yIGFmdGVyIHdpbGwgbW92ZSB1bmRlciB0aGUgc2FtZSBwYXJlbnQgLS0+IHdlIGNhbGwgdGhlIGN1c3RvbSBsb2dpYyBvbmx5IG9uY2Vcblx0XHRcdFx0aXNBbGxvd2VkID0gdGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQXMgdGhlIE1EQyB0YWJsZSBjYW5ub3QgZGlzYWJsZSBkcm9wIGJlZm9yZSBhbmQgYWZ0ZXIgc2VwYXJhdGVseSwgd2UgZGlzYWJsZSBkcm9wIGJldHdlZW4gb25seSBpZiBib3RoIGRyb3AgYmVmb3JlIGFuZCBhZnRlciBhcmUgZm9yYmlkZGVuXG5cdFx0XHRcdGlzQWxsb3dlZCA9XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0JlZm9yZS5wYXJlbnQpIHx8XG5cdFx0XHRcdFx0dGhpcy5zYWZlSXNNb3ZlQWxsb3dlZChjdXN0b21GdW5jdGlvbiwgZHJhZ2dlZENvbnRleHQsIHBhcmFtc0FmdGVyLnBhcmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHRoYXQgaXMgcGxhY2VkIGJlZm9yZSBhIGdpdmVuIGNvbnRleHQgaW4gYSBMaXN0QmluZGluZy5cblx0ICogQHBhcmFtIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgYmVmb3JlLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRCZWZvcmUoY29udGV4dDogQ29udGV4dCk6IENvbnRleHQgfCBudWxsIHtcblx0XHRjb25zdCBjb250ZXh0SW5kZXggPSBjb250ZXh0LmdldEluZGV4KCk7XG5cdFx0aWYgKGNvbnRleHRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGVycm9yXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gY29udGV4dC5nZXRCaW5kaW5nKCkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRyZXR1cm4gY29udGV4dEluZGV4ID09PSAwXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogbGlzdEJpbmRpbmcuZ2V0QWxsQ3VycmVudENvbnRleHRzKCkuZmluZCgoY3R4KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggLSAxO1xuXHRcdFx0ICB9KSA/PyBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGNvbnRleHQgdGhhdCBpcyBwbGFjZWQgYWZ0ZXIgYSBnaXZlbiBjb250ZXh0IGluIGEgTGlzdEJpbmRpbmcuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IGFmdGVyLCBvciBudWxsXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbnRleHRBZnRlcihjb250ZXh0OiBDb250ZXh0KTogQ29udGV4dCB8IG51bGwge1xuXHRcdGNvbnN0IGNvbnRleHRJbmRleCA9IGNvbnRleHQuZ2V0SW5kZXgoKTtcblx0XHRpZiAoY29udGV4dEluZGV4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXJyb3JcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSBjb250ZXh0LmdldEJpbmRpbmcoKSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdHJldHVybiAoXG5cdFx0XHRsaXN0QmluZGluZy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjdHgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGN0eC5nZXRJbmRleCgpID09PSBjb250ZXh0SW5kZXggKyAxO1xuXHRcdFx0fSkgPz8gbnVsbFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBpbmZvcm1hdGlvbiB0byBwZXJmb3JtIGEgZHJvcCBiZXR3ZWVuIDIgbm9kZXM6IHRoZSBuZXcgcGFyZW50IGFuZCB0aGUgbmV4dCBzaWJsaW5nLlxuXHQgKiBAcGFyYW0gY29udGV4dEJlZm9yZSBDb250ZXh0IGFmdGVyIHdoaWNoIHRoZSBkcm9wIGlzIGRvbmVcblx0ICogQHBhcmFtIHBhcmVudEJlZm9yZSBQYXJlbnQgb2YgY29udGV4dEJlZm9yZSAodW5kZWZpbmVkIGlmIG5vdCBrbm93bilcblx0ICogQHBhcmFtIGNvbnRleHRBZnRlciBDb250ZXh0IGJlZm9yZSB3aGljaCB0aGUgZHJvcCBpcyBkb25lXG5cdCAqIEBwYXJhbSBwYXJlbnRBZnRlciBQYXJlbnQgb2YgY29udGV4dEFmdGVyICh1bmRlZmluZWQgaWYgbm90IGtub3duKVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHBhcmVudCBhbmQgdGhlIG5leHQgc2libGluZywgb3IgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkXG5cdCAqL1xuXHRwcml2YXRlIGdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhcblx0XHRjb250ZXh0QmVmb3JlOiBDb250ZXh0IHwgbnVsbCxcblx0XHRwYXJlbnRCZWZvcmU6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRleHRBZnRlcjogQ29udGV4dCB8IG51bGwsXG5cdFx0cGFyZW50QWZ0ZXI6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkXG5cdCk6IHsgcGFyZW50OiBDb250ZXh0IHwgbnVsbDsgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCB9IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoY29udGV4dEJlZm9yZSA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gRHJvcCBiZWZvcmUgZmlyc3Qgbm9kZSAtLT4gbW92ZSBhcyBmaXJzdCByb290IG5vZGVcblx0XHRcdHJldHVybiB7IHBhcmVudDogbnVsbCwgbmV4dFNpYmxpbmc6IGNvbnRleHRBZnRlciB9O1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dEFmdGVyID09PSBudWxsKSB7XG5cdFx0XHQvLyBEcm9wIGFmdGVyIGxhc3Qgbm9kZSAtLT4gbW92ZSBhcyBuZXh0IHNpYmxpbmcgb2YgdGhlIGxhc3Qgbm9kZVxuXHRcdFx0cmV0dXJuIHBhcmVudEJlZm9yZSAhPT0gdW5kZWZpbmVkID8geyBwYXJlbnQ6IHBhcmVudEJlZm9yZSwgbmV4dFNpYmxpbmc6IG51bGwgfSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEFmdGVyID09PSBjb250ZXh0QmVmb3JlKSB7XG5cdFx0XHQvLyBEcm9wIGJldHdlZW4gYSBwYXJlbnQgYW5kIGl0cyBmaXJzdCBjaGlsZCAtLT4gbW92ZSBhcyBmaXJzdCBjaGlsZCBvZiB0aGUgcGFyZW50XG5cdFx0XHRyZXR1cm4geyBwYXJlbnQ6IGNvbnRleHRCZWZvcmUsIG5leHRTaWJsaW5nOiBjb250ZXh0QWZ0ZXIgfTtcblx0XHR9IGVsc2UgaWYgKHBhcmVudEJlZm9yZSA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudEFmdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIElmIG9uZSBvZiB0aGUgcGFyZW50IGlzIG5vdCBrbm93biwgd2UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAocGFyZW50QmVmb3JlID09PSBwYXJlbnRBZnRlcikge1xuXHRcdFx0Ly8gRHJvcCBiZXR3ZWVuIDIgc2libGluZ3Ncblx0XHRcdHJldHVybiB7IHBhcmVudDogcGFyZW50QmVmb3JlLCBuZXh0U2libGluZzogY29udGV4dEFmdGVyIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vZGVYXG5cdFx0XHQvLyAgLi4uLlxuXHRcdFx0Ly8gICAgIHwtLSBjb250ZXh0QmVmb3JlXG5cdFx0XHQvLyBjb250ZXh0QWZ0ZXJcblx0XHRcdC8vIC0tPiBNb3ZlIGFzIHRoZSBuZXh0IHNpYmxpbmcgb2YgY29udGV4dEJlZm9yZVxuXHRcdFx0cmV0dXJuIHsgcGFyZW50OiBwYXJlbnRCZWZvcmUsIG5leHRTaWJsaW5nOiBudWxsIH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIG1ldGhvZCB0byBkcm9wIGEgY29udGV4dCBvbiBvciBiZXR3ZWVuIDIgbm9kZXMuXG5cdCAqIEBwYXJhbSBjb250ZXh0XG5cdCAqIEBwYXJhbSBpbmZvXG5cdCAqIEByZXR1cm5zIFRoZSBtb3ZlIFByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZHJvcENvbnRleHQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZUhpZXJhcmNoeSwgY29udGV4dDogQ29udGV4dCwgaW5mbzogRHJvcEluZm9ybWF0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgaXNNb3ZlQWxsb3dlZEluZm8gPSB0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQ7XG5cdFx0Y29uc3QgY3VzdG9tRnVuY3Rpb24gPSBpc01vdmVBbGxvd2VkSW5mb1xuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KG5vZGU6IENvbnRleHQsIHBhcmVudDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTW92ZUFsbG93ZWRJbmZvLm1vZHVsZU5hbWUsXG5cdFx0XHRcdFx0aXNNb3ZlQWxsb3dlZEluZm8ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdHRhYmxlLnNldEJ1c3kodHJ1ZSk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGlzVGFibGVTb3J0ZWQgPSBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImlzU29ydGVkXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgbW92ZUNvbnRleHQgPSBhc3luYyAocGFyZW50OiBDb250ZXh0IHwgbnVsbCwgbmV4dFNpYmxpbmc/OiBDb250ZXh0IHwgbnVsbCk6IFByb21pc2U8dm9pZD4gPT4ge1xuXHRcdFx0Ly8gV2UgY2hlY2sgaWYgdGhlIG1vdmUgaXMgYWxsb3dlZCBieSBjdXN0b20gbG9naWMgKGlmIGFueSksIGFzIHRoaXMgY2hlY2sgbWlnaHRcblx0XHRcdC8vIG5vdCBoYXZlIGJlZW4gZG9uZSBpbiBvbkRyYWdFbnRlckRvY3VtZW50IGlmIHRoZSBwYXJlbnQgd2FzIG5vdCBsb2FkZWQgeWV0LlxuXHRcdFx0aWYgKHRoaXMuc2FmZUlzTW92ZUFsbG93ZWQoY3VzdG9tRnVuY3Rpb24sIGNvbnRleHQsIHBhcmVudCkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHRhYmxlIGlzIHNvcnRlZCwgd2UgaWdub3JlIHRoZSBzaWJsaW5nIGFzIHRoZSBwb3NpdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXJ2ZXJcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQubW92ZSh7IHBhcmVudCwgbmV4dFNpYmxpbmc6IGlzVGFibGVTb3J0ZWQgPyB1bmRlZmluZWQgOiBuZXh0U2libGluZyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1RBQkxFX0RST1BfTk9UX0FMTE9XRURcIikpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoaW5mby5wb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk9uKSB7XG5cdFx0XHQvLyBEcm9wIG9uIGEgbm9kZVxuXHRcdFx0cmV0dXJuIG1vdmVDb250ZXh0KGluZm8ucGFyZW50Q29udGV4dCkuZmluYWxseSgoKSA9PiB0YWJsZS5zZXRCdXN5KGZhbHNlKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIERyb3AgYmV0d2VlbiAyIG5vZGVzXG5cdFx0XHRjb25zdCBbcGFyZW50QmVmb3JlLCBwYXJlbnRBZnRlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG5cdFx0XHRcdGluZm8uY29udGV4dEJlZm9yZT8ucmVxdWVzdFBhcmVudCgpID8/IG51bGwsXG5cdFx0XHRcdGluZm8uY29udGV4dEFmdGVyPy5yZXF1ZXN0UGFyZW50KCkgPz8gbnVsbFxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBwYXJhbXMgPSB0aGlzLmdldERyb3BCZXR3ZWVuUGFyYW1ldGVycyhpbmZvLmNvbnRleHRCZWZvcmUsIHBhcmVudEJlZm9yZSwgaW5mby5jb250ZXh0QWZ0ZXIsIHBhcmVudEFmdGVyKSE7XG5cdFx0XHRyZXR1cm4gbW92ZUNvbnRleHQocGFyYW1zLnBhcmVudCwgcGFyYW1zLm5leHRTaWJsaW5nKS5maW5hbGx5KCgpID0+IHRhYmxlLnNldEJ1c3koZmFsc2UpKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7TUFzQktBLFlBQVksMEJBQVpBLFlBQVk7SUFBWkEsWUFBWTtJQUFaQSxZQUFZO0lBQVpBLFlBQVk7SUFBQSxPQUFaQSxZQUFZO0VBQUEsRUFBWkEsWUFBWTtFQUFBLElBVUlDLGNBQWM7SUFBQSxTQUFBQSxlQUFBO0lBQUFDLFFBQUEsR0FBQUQsY0FBQTtJQUFBLElBQUFFLE1BQUEsR0FBQUYsY0FBQSxDQUFBRyxTQUFBO0lBQUFELE1BQUEsQ0FDbENFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDQyxVQUFvQixFQUFRO01BQ3RDO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFILE1BQUEsQ0FLQUksVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQXFDQyxHQUE2QixFQUFFQyxjQUF1QixFQUFFQyxNQUFzQixFQUFRO01BQ3BJLElBQUlDLEtBQWU7TUFDbkIsSUFBSSxDQUFDRixjQUFjLEVBQUU7UUFDcEJFLEtBQUssR0FBR0gsR0FBRyxDQUFDSSxTQUFTLENBQUMsQ0FBQyxDQUFDQyxTQUFTLENBQUMsQ0FBYTtNQUNoRCxDQUFDLE1BQU07UUFDTixNQUFNQyxJQUFJLEdBQUdOLEdBQUcsQ0FBQ0ksU0FBUyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQVM7UUFDaERGLEtBQUssR0FBR0csSUFBSSxDQUFDRCxTQUFTLENBQUMsQ0FBQyxFQUFFQSxTQUFTLENBQUMsQ0FBYTtNQUNsRDtNQUNBLE1BQU1FLGVBQWUsR0FBR0osS0FBSyxDQUFDSyxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO01BQ25GLE1BQU1DLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQztNQUNuRCxJQUFJRCxnQkFBZ0IsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNoQ0MsR0FBRyxDQUFDQyxLQUFLLENBQUMsU0FBU1gsTUFBTSxLQUFLLEtBQUssR0FBRyxTQUFTLEdBQUcsU0FBUyxtQkFBbUIsQ0FBQztRQUMvRTtNQUNEO01BRUFLLGVBQWUsQ0FBQ08sV0FBVyxDQUFDLGtDQUFrQyxFQUFFTCxnQkFBZ0IsQ0FBQztNQUNqRkYsZUFBZSxDQUFDTyxXQUFXLENBQUMsNEJBQTRCLEVBQUVaLE1BQU0sQ0FBQztNQUNqRWEsWUFBWSxDQUFDQyxJQUFJLENBQUNDLG1CQUFtQixDQUFDQyxnQkFBZ0IsQ0FBQ2YsS0FBSyxDQUFDLENBQUNnQixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztNQUN6RixJQUFJLENBQUNsQixjQUFjLElBQUlNLGVBQWUsQ0FBQ2EsV0FBVyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25GQyxZQUFZLENBQUNDLGNBQWMsQ0FBQ25CLEtBQUssQ0FBQztRQUNsQ0EsS0FBSyxDQUFDb0IsbUJBQW1CLENBQUMsQ0FBQztNQUM1QixDQUFDLE1BQU0sSUFBSXRCLGNBQWMsRUFBRTtRQUMxQjtRQUNBRSxLQUFLLENBQUNvQixtQkFBbUIsQ0FBQyxDQUFDO01BQzVCO01BRUFoQixlQUFlLENBQUNPLFdBQVcsQ0FBQywrQkFBK0IsRUFBRSxLQUFLLENBQUM7TUFDbkVQLGVBQWUsQ0FBQ08sV0FBVyxDQUFDLDJDQUEyQyxFQUFFLEtBQUssQ0FBQztNQUMvRVAsZUFBZSxDQUFDTyxXQUFXLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDO01BQ3BFUCxlQUFlLENBQUNPLFdBQVcsQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLENBQUM7TUFDaEYsTUFBTVUsV0FBVyxHQUFJckIsS0FBSyxDQUFDc0IsVUFBVSxDQUFDLENBQUMsQ0FBMkJDLElBQUksQ0FBRUMsYUFBYSxJQUNwRixVQUFVLENBQUNDLElBQUksQ0FBQ0QsYUFBYSxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUNsRCxDQUFDO01BQ0RDLFVBQVUsQ0FBQyxNQUFNO1FBQ2hCUCxXQUFXLEVBQUVRLEtBQUssQ0FBQyxDQUFDO01BQ3JCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDTjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFyQyxNQUFBLENBSUFzQyxvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUVuQkMsUUFBMkgsRUFDcEg7TUFDUCxNQUFNQyxjQUFjLEdBQUdELFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLFlBQVksQ0FBQztNQUMxRCxJQUFJLElBQUksQ0FBQ0MsVUFBVSxDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQUMsS0FBS0gsY0FBYyxDQUFDSSxVQUFVLENBQUMsQ0FBQyxFQUFFO1FBQ3RFO1FBQ0FMLFFBQVEsQ0FBQ00sY0FBYyxDQUFDLENBQUM7UUFDekI7TUFDRDtNQUVBLE1BQU1DLGFBQTZCLEdBQUdQLFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLGdCQUFnQixDQUFDO01BQzdFLElBQUlELGNBQWMsQ0FBQ08sWUFBWSxDQUFDRCxhQUFhLENBQUMsRUFBRTtRQUMvQztRQUNBUCxRQUFRLENBQUNNLGNBQWMsQ0FBQyxDQUFDO1FBQ3pCO01BQ0Q7TUFFQSxJQUFJRyxlQUFlLEdBQUcsS0FBSztNQUMzQixJQUFJQyxVQUFVLEdBQUcsS0FBSztNQUN0QixNQUFNQyxlQUFlLEdBQUcsSUFBSSxDQUFDQyxrQkFBa0IsQ0FBQyxDQUFDO01BQ2pELE1BQU1DLGlCQUFpQixHQUFHRixlQUFlLENBQUNHLE9BQU8sQ0FBQ0MsdUJBQXVCO01BQ3pFLE1BQU1DLGNBQWMsR0FBR0gsaUJBQWlCLEdBQ3JDSSxTQUFTLENBQUNDLGlCQUFpQixDQUMzQkwsaUJBQWlCLENBQUNNLFVBQVUsRUFDNUJOLGlCQUFpQixDQUFDTyxVQUFVLEVBQzVCcEIsUUFBUSxDQUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQy9CLENBQUMsR0FDRGtELFNBQVM7TUFFWixJQUFJZCxhQUFhLEtBQUssSUFBSSxDQUFDSixVQUFVLENBQUMsQ0FBQyxDQUFDN0IsaUJBQWlCLENBQUMsQ0FBQyxFQUFFO1FBQzVEO1FBQ0FvQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUNZLGlCQUFpQixDQUFDTixjQUFjLEVBQUVmLGNBQWMsRUFBRSxJQUFJLENBQUM7UUFDMUVRLGVBQWUsR0FBRyxJQUFJO01BQ3ZCLENBQUMsTUFBTTtRQUNOQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUNZLGlCQUFpQixDQUFDTixjQUFjLEVBQUVmLGNBQWMsRUFBRU0sYUFBYSxDQUFDO1FBQ25GRSxlQUFlLEdBQUdFLGVBQWUsQ0FBQ1ksVUFBVSxDQUFDQyxxQkFBcUIsS0FBSyxJQUFJO1FBRTNFLElBQ0NDLElBQUksQ0FBQ0MsR0FBRyxDQUFDbkIsYUFBYSxDQUFDb0IsUUFBUSxDQUFDLENBQUMsR0FBSTFCLGNBQWMsQ0FBQzBCLFFBQVEsQ0FBQyxDQUFFLENBQUMsS0FBSyxDQUFDLElBQ3RFLEVBQUVwQixhQUFhLENBQUNvQixRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSTNCLFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxJQUN2RixFQUNDSyxhQUFhLENBQUNvQixRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQ3hCLFVBQVUsQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQUN3QixTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFDOUU1QixRQUFRLENBQUNFLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxPQUFPLENBQ2pELEVBQ0E7VUFDRDtVQUNBTyxlQUFlLEdBQUcsSUFBSTtRQUN2Qjs7UUFFQTtRQUNBLElBQ0MsQ0FBQ0EsZUFBZSxJQUNoQixDQUFDRSxlQUFlLENBQUNZLFVBQVUsQ0FBQ00sOEJBQThCLElBQzFEdEIsYUFBYSxDQUFDckIsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUNsRDtVQUNEdUIsZUFBZSxHQUFHLElBQUk7UUFDdkI7O1FBRUE7UUFDQSxJQUFJTyxjQUFjLElBQUksQ0FBQ1AsZUFBZSxFQUFFO1VBQ3ZDQSxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUNxQiwyQkFBMkIsQ0FBQ2QsY0FBYyxFQUFFZixjQUFjLEVBQUVNLGFBQWEsQ0FBQztRQUNuRztNQUNEO01BRUEsSUFBSXdCLG1CQUFpQyxHQUFHekUsWUFBWSxDQUFDMEUsV0FBVztNQUNoRSxJQUFJdkIsZUFBZSxJQUFJQyxVQUFVLEVBQUU7UUFDbEM7UUFDQVYsUUFBUSxDQUFDTSxjQUFjLENBQUMsQ0FBQztRQUN6QjtNQUNEO01BQ0EsSUFBSUcsZUFBZSxFQUFFO1FBQ3BCc0IsbUJBQW1CLEdBQUd6RSxZQUFZLENBQUMyRSxFQUFFO01BQ3RDLENBQUMsTUFBTSxJQUFJdkIsVUFBVSxFQUFFO1FBQ3RCcUIsbUJBQW1CLEdBQUd6RSxZQUFZLENBQUM0RSxPQUFPO01BQzNDO01BQ0FsQyxRQUFRLENBQUM5QixTQUFTLENBQUMsQ0FBQyxDQUFDaUUsZUFBZSxDQUFDSixtQkFBbUIsQ0FBQztJQUMxRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF0RSxNQUFBLENBSUEyRSxvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFxQ3BDLFFBQXdELEVBQVE7TUFDeEgsTUFBTXFDLE9BQU8sR0FBR3JDLFFBQVEsQ0FBQ0UsWUFBWSxDQUFDLGdCQUFnQixDQUFDO01BQ3ZELE1BQU1vQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMxQixrQkFBa0IsQ0FBQyxDQUFDLENBQUNXLFVBQVUsQ0FBQ2UscUJBQXFCOztNQUV4RjtNQUNBLElBQUlDLFdBQVcsR0FBRyxDQUFDLENBQUNELHFCQUFxQixJQUFJLENBQUNELE9BQU8sQ0FBQ25ELFdBQVcsQ0FBQ29ELHFCQUFxQixDQUFDOztNQUV4RjtNQUNBLElBQUksQ0FBQ0MsV0FBVyxJQUFJLENBQUVGLE9BQU8sQ0FBQ2hDLFVBQVUsQ0FBQyxDQUFDLENBQXNCbUMsVUFBVSxDQUFDLENBQUMsRUFBRTtRQUM3RUQsV0FBVyxHQUFHRixPQUFPLENBQUNuRCxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUFJO01BQzdEOztNQUVBO01BQ0EsTUFBTXVELGFBQWEsR0FBRyxJQUFJLENBQUM3QixrQkFBa0IsQ0FBQyxDQUFDLENBQUNFLE9BQU8sQ0FBQzRCLGFBQWE7TUFDckUsSUFBSTtRQUNILElBQUlELGFBQWEsSUFBSSxDQUFDRixXQUFXLEVBQUU7VUFDbENBLFdBQVcsR0FFVHRCLFNBQVMsQ0FBQ0MsaUJBQWlCLENBQzFCdUIsYUFBYSxDQUFDdEIsVUFBVSxFQUN4QnNCLGFBQWEsQ0FBQ3JCLFVBQVUsRUFDeEJwQixRQUFRLENBQUM5QixTQUFTLENBQUMsQ0FDcEIsQ0FBQyxDQUNBbUUsT0FBTyxDQUFDLEtBQUssS0FBSztRQUN0QjtNQUNELENBQUMsQ0FBQyxPQUFPTSxNQUFNLEVBQUU7UUFDaEJKLFdBQVcsR0FBRyxLQUFLO01BQ3BCO01BQ0EsSUFBSUEsV0FBVyxFQUFFO1FBQ2hCO1FBQ0F2QyxRQUFRLENBQUNNLGNBQWMsQ0FBQyxDQUFDO01BQzFCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUE3QyxNQUFBLENBS01tRixlQUFlLEdBQXJCLGVBQU1BLGVBQWVBLENBRXBCNUMsUUFJRSxFQUNjO01BQ2hCNkMsVUFBVSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDM0MsVUFBVSxDQUFDLENBQUMsQ0FBQztNQUVsQyxJQUFJO1FBQ0gsTUFBTTRDLGdCQUFnQixHQUFHL0MsUUFBUSxDQUFDRSxZQUFZLENBQUMsZ0JBQWdCLENBQUM7UUFDaEUsSUFBSThDLFFBQXlCO1FBQzdCLElBQUlELGdCQUFnQixLQUFLLElBQUksQ0FBQzVDLFVBQVUsQ0FBQyxDQUFDLENBQUM3QixpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7VUFDL0Q7VUFDQTBFLFFBQVEsR0FBRztZQUFFQyxRQUFRLEVBQUUzRixZQUFZLENBQUMyRSxFQUFFO1lBQUVpQixhQUFhLEVBQUU7VUFBSyxDQUFDO1FBQzlELENBQUMsTUFBTSxJQUFJbEQsUUFBUSxDQUFDRSxZQUFZLENBQUMsY0FBYyxDQUFDLEtBQUs1QyxZQUFZLENBQUMyRSxFQUFFLEVBQUU7VUFDckU7VUFDQWUsUUFBUSxHQUFHO1lBQUVDLFFBQVEsRUFBRTNGLFlBQVksQ0FBQzJFLEVBQUU7WUFBRWlCLGFBQWEsRUFBRUg7VUFBaUIsQ0FBQztRQUMxRSxDQUFDLE1BQU07VUFDTjtVQUNBLElBQUlJLGFBQTZCO1VBQ2pDLElBQUlDLFlBQTRCO1VBQ2hDLElBQUlwRCxRQUFRLENBQUNFLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxPQUFPLEVBQUU7WUFDdERpRCxhQUFhLEdBQUdKLGdCQUFnQjtZQUNoQ0ssWUFBWSxHQUFHLElBQUksQ0FBQ0MsZUFBZSxDQUFDTixnQkFBZ0IsQ0FBQztVQUN0RCxDQUFDLE1BQU07WUFDTkksYUFBYSxHQUFHLElBQUksQ0FBQ0csZ0JBQWdCLENBQUNQLGdCQUFnQixDQUFDO1lBQ3ZESyxZQUFZLEdBQUdMLGdCQUFnQjtVQUNoQztVQUNBQyxRQUFRLEdBQUc7WUFBRUMsUUFBUSxFQUFFM0YsWUFBWSxDQUFDNEUsT0FBTztZQUFFa0IsWUFBWTtZQUFFRDtVQUFjLENBQUM7UUFDM0U7UUFFQSxNQUFNSSxZQUFZLEdBQUd2RCxRQUFRLENBQUNFLFlBQVksQ0FBQyxZQUFZLENBQUM7UUFDeEQsTUFBTXNELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUNILFlBQVksRUFBRVAsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDVyw0Q0FBNEMsQ0FBQ0osWUFBWSxDQUFDLENBQUMsQ0FBQztNQUMvSCxDQUFDLENBQUMsT0FBTzVFLEtBQUssRUFBRTtRQUNmRSxZQUFZLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUM4RSxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckVsRixHQUFHLENBQUNDLEtBQUssQ0FBQyxpQ0FBaUMsR0FBSUEsS0FBSyxDQUFXa0YsT0FBTyxJQUFJLEVBQUUsQ0FBQztNQUM5RSxDQUFDLFNBQVM7UUFDVGhCLFVBQVUsQ0FBQ2lCLE1BQU0sQ0FBQyxJQUFJLENBQUMzRCxVQUFVLENBQUMsQ0FBQyxDQUFDO01BQ3JDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTFDLE1BQUEsQ0FNTXNHLHFCQUFxQixHQUEzQixlQUFNQSxxQkFBcUJBLENBQXFDQyxTQUFtQixFQUFFQyxNQUFlLEVBQWlCO01BQ3BILE1BQU0xRixnQkFBZ0IsR0FBRyxJQUFJLENBQUNDLG1CQUFtQixDQUFDLENBQUM7TUFDbkQsSUFBSXlGLE1BQU0sRUFBRTtRQUNYLE1BQU1DLFlBQVksR0FBRzNGLGdCQUFnQixDQUFDNEYsR0FBRyxDQUFDLE1BQU9DLGFBQXNCLElBQUs7VUFDM0U7VUFDQSxJQUFJQSxhQUFhLENBQUNDLFVBQVUsQ0FBQyxDQUFDLEtBQUtoRCxTQUFTLEVBQUU7WUFDN0M7WUFDQTtZQUNBO1lBQ0EsSUFBSStDLGFBQWEsQ0FBQ0MsVUFBVSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7Y0FDeEMsTUFBTUQsYUFBYSxDQUFDRSxRQUFRLENBQUMsQ0FBQztZQUMvQjtZQUNBLE9BQU9GLGFBQWEsQ0FBQ0gsTUFBTSxDQUFDTSxNQUFNLENBQUNDLGdCQUFnQixDQUFDO1VBQ3JEO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YsTUFBTWhCLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDUyxZQUFZLENBQUM7TUFDaEMsQ0FBQyxNQUFNO1FBQ04sTUFBTVYsT0FBTyxDQUFDQyxHQUFHLENBQ2hCbEYsZ0JBQWdCLENBQUM0RixHQUFHLENBQUMsTUFBT0MsYUFBc0IsSUFBSztVQUN0RCxJQUFJQSxhQUFhLENBQUNDLFVBQVUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE9BQU9ELGFBQWEsQ0FBQ0UsUUFBUSxDQUFDLElBQUksQ0FBQztVQUNwQztRQUNELENBQUMsQ0FDRixDQUFDO01BQ0Y7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBN0csTUFBQSxDQU1NZ0gsYUFBYSxHQUFuQixlQUFNQSxhQUFhQSxDQUFxQ1QsU0FBbUIsRUFBRVUsTUFBZSxFQUF5QztNQUFBLElBQXZDM0csY0FBYyxHQUFBNEcsU0FBQSxDQUFBbEcsTUFBQSxRQUFBa0csU0FBQSxRQUFBdEQsU0FBQSxHQUFBc0QsU0FBQSxNQUFHLEtBQUs7TUFDbkgsTUFBTXBHLGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQztNQUNuRCxJQUFJRCxnQkFBZ0IsQ0FBQ0UsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNsQztNQUNEO01BQ0EsTUFBTW1HLFFBQVEsR0FBRyxJQUFJLENBQUN6RSxVQUFVLENBQUMsQ0FBQztNQUNsQ3lFLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQzs7TUFFdEI7TUFDQSxNQUFNdEIsWUFBWSxHQUFHaEYsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO01BQ3hDLE1BQU0yRSxhQUFhLEdBQUcsTUFBTUssWUFBWSxDQUFDdUIsYUFBYSxDQUFDLENBQUM7TUFDeEQsSUFBSUMsWUFBWSxHQUFHLEtBQUs7TUFDeEIsSUFBSUMsV0FBVyxHQUFHLElBQUk7TUFDdEIsSUFBSU4sTUFBTSxFQUFFO1FBQ1gsTUFBTU8sZUFBZSxHQUFHLE1BQU0xQixZQUFZLENBQUMyQixjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSUQsZUFBZSxFQUFFO1VBQ3BCRCxXQUFXLEdBQUd6QixZQUFZLENBQUM0QixJQUFJLENBQUM7WUFBRUMsV0FBVyxFQUFFSCxlQUFlO1lBQUVJLE1BQU0sRUFBRW5DO1VBQWMsQ0FBQyxDQUFDO1VBQ3hGNkIsWUFBWSxHQUFHLElBQUk7UUFDcEI7TUFDRCxDQUFDLE1BQU07UUFDTixNQUFNSyxXQUFXLEdBQUcsTUFBTTdCLFlBQVksQ0FBQzJCLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSUUsV0FBVyxFQUFFO1VBQ2hCSixXQUFXLEdBQUdJLFdBQVcsQ0FBQ0QsSUFBSSxDQUFDO1lBQUVDLFdBQVcsRUFBRTdCLFlBQVk7WUFBRThCLE1BQU0sRUFBRW5DO1VBQWMsQ0FBQyxDQUFDO1VBQ3BGNkIsWUFBWSxHQUFHLElBQUk7UUFDcEI7TUFDRDtNQUVBLE1BQU12QixPQUFPLENBQUNDLEdBQUcsQ0FBQyxDQUFDdUIsV0FBVyxFQUFFLElBQUksQ0FBQ3JCLDRDQUE0QyxDQUFDSixZQUFZLENBQUMsQ0FBQyxDQUFDOztNQUVqRztNQUNBLE1BQU0rQixRQUFRLEdBQUcvQixZQUFZLENBQUM1QixRQUFRLENBQUMsQ0FBQztNQUN4QyxJQUFJb0QsWUFBWSxJQUFJTyxRQUFRLEtBQUtqRSxTQUFTLElBQUlpRSxRQUFRLElBQUksQ0FBQyxFQUFFO1FBQzVELElBQUksQ0FBQ3ZILGNBQWMsRUFBRTtVQUNwQjZHLFFBQVEsQ0FBQ1csYUFBYSxDQUFDRCxRQUFRLENBQUM7UUFDakMsQ0FBQyxNQUFNO1VBQ05WLFFBQVEsQ0FBQ1ksUUFBUSxDQUFDRixRQUFRLENBQUM7UUFDNUI7TUFDRDtNQUNBVixRQUFRLENBQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDeEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFwSCxNQUFBLENBS01rRyw0Q0FBNEMsR0FBbEQsZUFBTUEsNENBQTRDQSxDQUFxQ0osWUFBcUIsRUFBaUI7TUFDNUgsT0FBTyxJQUFJLENBQUNrQyxzQ0FBc0MsQ0FBQ2xDLFlBQVksRUFBRSx5QkFBeUIsQ0FBQztJQUM1Rjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTlGLE1BQUEsQ0FLTWlJLCtCQUErQixHQUFyQyxlQUFNQSwrQkFBK0JBLENBQXFDbkMsWUFBcUIsRUFBaUI7TUFDL0csT0FBTyxJQUFJLENBQUNrQyxzQ0FBc0MsQ0FBQ2xDLFlBQVksRUFBRSxZQUFZLENBQUM7SUFDL0U7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTlGLE1BQUEsQ0FNTWdJLHNDQUFzQyxHQUE1QyxlQUFNQSxzQ0FBc0NBLENBRTNDbEMsWUFBcUIsRUFDckJ2RixNQUFnRCxFQUNoQztNQUNoQixNQUFNMkgsVUFBVSxHQUFHLElBQUksQ0FBQ3hGLFVBQVUsQ0FBQyxDQUFDLENBQUN5RixJQUFJLENBQUMsVUFBVSxDQUFDO01BQ3JELE1BQU1DLFNBQVMsR0FBR3RDLFlBQVksQ0FBQ3VDLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDO01BRXhELE1BQU1DLFlBQVksR0FBR0gsU0FBUyxDQUFDSSxVQUFVLENBQUNOLFVBQVUsQ0FBQztNQUNyRCxNQUFNTyx1QkFBdUIsR0FBR0Msa0JBQWtCLENBQUNELHVCQUF1QixDQUFDRixZQUFZLENBQW1DO01BQzFILE1BQU1JLFVBQVUsR0FBSUYsdUJBQXVCLENBQXdCRyxVQUFVLElBQUtILHVCQUF1QixDQUFlRSxVQUFVO01BQ2xJLE1BQU1FLFVBQVUsR0FBR0YsVUFBVSxDQUFDRyxXQUFXLENBQUNDLFNBQVMsR0FDbEQsNkJBQTZCLElBQUksQ0FBQzVGLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0UsT0FBTyxDQUFDMkYsa0JBQWtCLElBQUksRUFBRSxFQUFFLENBQ3pGLEdBQUd6SSxNQUFNLENBQXVCO01BRWpDLElBQUlzSSxVQUFVLEVBQUU7UUFDZixNQUFNSSxZQUFZLEdBQUdDLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDLElBQUksQ0FBQ3pHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTTBHLGtCQUFrQixHQUFHSCxZQUFZLENBQUNJLHFCQUFxQixDQUFDLENBQUM7UUFDL0QsTUFBTUMsV0FBVyxHQUFHRixrQkFBa0IsQ0FBQ0cseUJBQXlCLENBQUNWLFVBQVUsRUFBRS9DLFlBQVksQ0FBQztRQUMxRixJQUFJd0QsV0FBVyxFQUFFO1VBQ2hCLE1BQU1GLGtCQUFrQixDQUFDSSxnQ0FBZ0MsQ0FBQ0YsV0FBVyxFQUFFeEQsWUFBWSxDQUFDO1FBQ3JGO01BQ0Q7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUE5RixNQUFBLENBT1E2RCxpQkFBaUIsR0FBekIsU0FBUUEsaUJBQWlCQSxDQUN4Qk4sY0FBbUYsRUFDbkZ1QyxZQUFxQixFQUNyQkwsYUFBNkIsRUFDbkI7TUFDVixJQUFJLENBQUNsQyxjQUFjLEVBQUU7UUFDcEIsT0FBTyxJQUFJO01BQ1o7TUFFQSxJQUFJa0csT0FBTyxHQUFHLElBQUk7TUFDbEIsSUFBSTtRQUNIQSxPQUFPLEdBQUdsRyxjQUFjLENBQUN1QyxZQUFZLEVBQUVMLGFBQWEsQ0FBQyxLQUFLLElBQUk7TUFDL0QsQ0FBQyxDQUFDLE9BQU92RSxLQUFLLEVBQUU7UUFDZkQsR0FBRyxDQUFDQyxLQUFLLENBQUMsNERBQTRELEVBQUVBLEtBQWUsQ0FBQztRQUN4RnVJLE9BQU8sR0FBRyxJQUFJO01BQ2Y7TUFFQSxPQUFPQSxPQUFPO0lBQ2Y7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBekosTUFBQSxDQU9RcUUsMkJBQTJCLEdBQW5DLFNBQVFBLDJCQUEyQkEsQ0FDbENkLGNBQXFFLEVBQ3JFZixjQUF1QixFQUN2Qk0sYUFBc0IsRUFDWjtNQUNWLElBQUk0RyxTQUFTLEdBQUcsSUFBSTs7TUFFcEI7TUFDQSxNQUFNaEUsYUFBYSxHQUFHLElBQUksQ0FBQ0csZ0JBQWdCLENBQUMvQyxhQUFhLENBQUM7TUFDMUQsTUFBTTZHLFlBQVksR0FBR2pFLGFBQWEsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHQSxhQUFhLENBQUNoRixTQUFTLENBQUMsQ0FBQztNQUM5RSxNQUFNa0osWUFBWSxHQUFHLElBQUksQ0FBQ0Msd0JBQXdCLENBQUNuRSxhQUFhLEVBQUVpRSxZQUFZLEVBQUU3RyxhQUFhLEVBQUVBLGFBQWEsQ0FBQ3BDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O01BRXpIO01BQ0EsTUFBTWlGLFlBQVksR0FBRyxJQUFJLENBQUNDLGVBQWUsQ0FBQzlDLGFBQWEsQ0FBQztNQUN4RCxNQUFNZ0gsV0FBVyxHQUFHbkUsWUFBWSxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUdBLFlBQVksQ0FBQ2pGLFNBQVMsQ0FBQyxDQUFDO01BQzNFLE1BQU1xSixXQUFXLEdBQUcsSUFBSSxDQUFDRix3QkFBd0IsQ0FBQy9HLGFBQWEsRUFBRUEsYUFBYSxDQUFDcEMsU0FBUyxDQUFDLENBQUMsRUFBRWlGLFlBQVksRUFBRW1FLFdBQVcsQ0FBQzs7TUFFdEg7TUFDQSxJQUFJRixZQUFZLEtBQUtoRyxTQUFTLElBQUltRyxXQUFXLEtBQUtuRyxTQUFTLEVBQUU7UUFDNUQsSUFBSWdHLFlBQVksQ0FBQ2hDLE1BQU0sS0FBS21DLFdBQVcsQ0FBQ25DLE1BQU0sRUFBRTtVQUMvQztVQUNBOEIsU0FBUyxHQUFHLElBQUksQ0FBQzdGLGlCQUFpQixDQUFDTixjQUFjLEVBQUVmLGNBQWMsRUFBRW9ILFlBQVksQ0FBQ2hDLE1BQU0sQ0FBQztRQUN4RixDQUFDLE1BQU07VUFDTjtVQUNBOEIsU0FBUyxHQUNSLElBQUksQ0FBQzdGLGlCQUFpQixDQUFDTixjQUFjLEVBQUVmLGNBQWMsRUFBRW9ILFlBQVksQ0FBQ2hDLE1BQU0sQ0FBQyxJQUMzRSxJQUFJLENBQUMvRCxpQkFBaUIsQ0FBQ04sY0FBYyxFQUFFZixjQUFjLEVBQUV1SCxXQUFXLENBQUNuQyxNQUFNLENBQUM7UUFDNUU7TUFDRDtNQUVBLE9BQU84QixTQUFTO0lBQ2pCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBMUosTUFBQSxDQUtRNkYsZ0JBQWdCLEdBQXhCLFNBQVFBLGdCQUFnQkEsQ0FBQ2pCLE9BQWdCLEVBQWtCO01BQzFELE1BQU1vRixZQUFZLEdBQUdwRixPQUFPLENBQUNWLFFBQVEsQ0FBQyxDQUFDO01BQ3ZDLElBQUk4RixZQUFZLEtBQUtwRyxTQUFTLEVBQUU7UUFDL0IsTUFBTSxJQUFJcUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO01BQ3BDO01BRUEsTUFBTUMsV0FBVyxHQUFHdEYsT0FBTyxDQUFDaEMsVUFBVSxDQUFDLENBQXFCO01BQzVELE9BQU9vSCxZQUFZLEtBQUssQ0FBQyxHQUN0QixJQUFJLEdBQ0pFLFdBQVcsQ0FBQ0MscUJBQXFCLENBQUMsQ0FBQyxDQUFDcEksSUFBSSxDQUFFcUksR0FBRyxJQUFLO1FBQ2xELE9BQU9BLEdBQUcsQ0FBQ2xHLFFBQVEsQ0FBQyxDQUFDLEtBQUs4RixZQUFZLEdBQUcsQ0FBQztNQUMxQyxDQUFDLENBQUMsSUFBSSxJQUFJO0lBQ2Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFoSyxNQUFBLENBS1E0RixlQUFlLEdBQXZCLFNBQVFBLGVBQWVBLENBQUNoQixPQUFnQixFQUFrQjtNQUN6RCxNQUFNb0YsWUFBWSxHQUFHcEYsT0FBTyxDQUFDVixRQUFRLENBQUMsQ0FBQztNQUN2QyxJQUFJOEYsWUFBWSxLQUFLcEcsU0FBUyxFQUFFO1FBQy9CLE1BQU0sSUFBSXFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztNQUNwQztNQUVBLE1BQU1DLFdBQVcsR0FBR3RGLE9BQU8sQ0FBQ2hDLFVBQVUsQ0FBQyxDQUFxQjtNQUM1RCxPQUNDc0gsV0FBVyxDQUFDQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNwSSxJQUFJLENBQUVxSSxHQUFHLElBQUs7UUFDakQsT0FBT0EsR0FBRyxDQUFDbEcsUUFBUSxDQUFDLENBQUMsS0FBSzhGLFlBQVksR0FBRyxDQUFDO01BQzNDLENBQUMsQ0FBQyxJQUFJLElBQUk7SUFFWjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUEM7SUFBQWhLLE1BQUEsQ0FRUTZKLHdCQUF3QixHQUFoQyxTQUFRQSx3QkFBd0JBLENBQy9CbkUsYUFBNkIsRUFDN0JpRSxZQUF3QyxFQUN4Q2hFLFlBQTRCLEVBQzVCbUUsV0FBdUMsRUFDZ0M7TUFDdkUsSUFBSXBFLGFBQWEsS0FBSyxJQUFJLEVBQUU7UUFDM0I7UUFDQSxPQUFPO1VBQUVrQyxNQUFNLEVBQUUsSUFBSTtVQUFFRCxXQUFXLEVBQUVoQztRQUFhLENBQUM7TUFDbkQsQ0FBQyxNQUFNLElBQUlBLFlBQVksS0FBSyxJQUFJLEVBQUU7UUFDakM7UUFDQSxPQUFPZ0UsWUFBWSxLQUFLL0YsU0FBUyxHQUFHO1VBQUVnRSxNQUFNLEVBQUUrQixZQUFZO1VBQUVoQyxXQUFXLEVBQUU7UUFBSyxDQUFDLEdBQUcvRCxTQUFTO01BQzVGLENBQUMsTUFBTSxJQUFJa0csV0FBVyxLQUFLcEUsYUFBYSxFQUFFO1FBQ3pDO1FBQ0EsT0FBTztVQUFFa0MsTUFBTSxFQUFFbEMsYUFBYTtVQUFFaUMsV0FBVyxFQUFFaEM7UUFBYSxDQUFDO01BQzVELENBQUMsTUFBTSxJQUFJZ0UsWUFBWSxLQUFLL0YsU0FBUyxJQUFJa0csV0FBVyxLQUFLbEcsU0FBUyxFQUFFO1FBQ25FO1FBQ0EsT0FBT0EsU0FBUztNQUNqQixDQUFDLE1BQU0sSUFBSStGLFlBQVksS0FBS0csV0FBVyxFQUFFO1FBQ3hDO1FBQ0EsT0FBTztVQUFFbEMsTUFBTSxFQUFFK0IsWUFBWTtVQUFFaEMsV0FBVyxFQUFFaEM7UUFBYSxDQUFDO01BQzNELENBQUMsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxPQUFPO1VBQUVpQyxNQUFNLEVBQUUrQixZQUFZO1VBQUVoQyxXQUFXLEVBQUU7UUFBSyxDQUFDO01BQ25EO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQTNILE1BQUEsQ0FNY2lHLFdBQVcsR0FBekIsZUFBY0EsV0FBV0EsQ0FBcUNyQixPQUFnQixFQUFFeUYsSUFBcUIsRUFBaUI7TUFDckgsTUFBTWpILGlCQUFpQixHQUFHLElBQUksQ0FBQ0Qsa0JBQWtCLENBQUMsQ0FBQyxDQUFDRSxPQUFPLENBQUNDLHVCQUF1QjtNQUNuRixNQUFNQyxjQUFjLEdBQUdILGlCQUFpQixHQUNyQ0ksU0FBUyxDQUFDQyxpQkFBaUIsQ0FDM0JMLGlCQUFpQixDQUFDTSxVQUFVLEVBQzVCTixpQkFBaUIsQ0FBQ08sVUFBVSxFQUM1QixJQUFJLENBQUNqQixVQUFVLENBQUMsQ0FDaEIsQ0FBQyxHQUNEa0IsU0FBUztNQUNaLE1BQU1wRCxLQUFLLEdBQUcsSUFBSSxDQUFDa0MsVUFBVSxDQUFDLENBQUM7TUFDL0JsQyxLQUFLLENBQUM0RyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQ25CLE1BQU1rRCxvQkFBb0IsR0FBRzlKLEtBQUssQ0FBQ0ssaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtNQUN4RixNQUFNMEosYUFBYSxHQUFHRCxvQkFBb0IsQ0FBQzdJLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJO01BRTNFLE1BQU0rSSxXQUFXLEdBQUcsTUFBQUEsQ0FBTzVDLE1BQXNCLEVBQUVELFdBQTRCLEtBQW9CO1FBQ2xHO1FBQ0E7UUFDQSxJQUFJLElBQUksQ0FBQzlELGlCQUFpQixDQUFDTixjQUFjLEVBQUVxQixPQUFPLEVBQUVnRCxNQUFNLENBQUMsRUFBRTtVQUM1RDtVQUNBLE9BQU9oRCxPQUFPLENBQUM4QyxJQUFJLENBQUM7WUFBRUUsTUFBTTtZQUFFRCxXQUFXLEVBQUU0QyxhQUFhLEdBQUczRyxTQUFTLEdBQUcrRDtVQUFZLENBQUMsQ0FBQztRQUN0RixDQUFDLE1BQU07VUFDTnZHLFlBQVksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQzhFLGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdEU7TUFDRCxDQUFDO01BRUQsSUFBSWtFLElBQUksQ0FBQzdFLFFBQVEsS0FBSzNGLFlBQVksQ0FBQzJFLEVBQUUsRUFBRTtRQUN0QztRQUNBLE9BQU9nRyxXQUFXLENBQUNILElBQUksQ0FBQzVFLGFBQWEsQ0FBQyxDQUFDZ0YsT0FBTyxDQUFDLE1BQU1qSyxLQUFLLENBQUM0RyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDM0UsQ0FBQyxNQUFNO1FBQ047UUFDQSxNQUFNLENBQUN1QyxZQUFZLEVBQUVHLFdBQVcsQ0FBQyxHQUFHLE1BQU0vRCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxDQUNyRHFFLElBQUksQ0FBQzNFLGFBQWEsRUFBRTJCLGFBQWEsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUMzQ2dELElBQUksQ0FBQzFFLFlBQVksRUFBRTBCLGFBQWEsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUMxQyxDQUFDO1FBQ0YsTUFBTXFELE1BQU0sR0FBRyxJQUFJLENBQUNiLHdCQUF3QixDQUFDUSxJQUFJLENBQUMzRSxhQUFhLEVBQUVpRSxZQUFZLEVBQUVVLElBQUksQ0FBQzFFLFlBQVksRUFBRW1FLFdBQVcsQ0FBRTtRQUMvRyxPQUFPVSxXQUFXLENBQUNFLE1BQU0sQ0FBQzlDLE1BQU0sRUFBRThDLE1BQU0sQ0FBQy9DLFdBQVcsQ0FBQyxDQUFDOEMsT0FBTyxDQUFDLE1BQU1qSyxLQUFLLENBQUM0RyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7TUFDMUY7SUFDRCxDQUFDO0lBQUEsT0FBQXRILGNBQUE7RUFBQTtFQUFBQyxRQUFBLEdBQUFELGNBQUE7RUFBQSxPQUFBQyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -14,6 +14,7 @@ import type Control from "sap/ui/core/Control";
|
|
|
14
14
|
import type UI5Element from "sap/ui/core/Element";
|
|
15
15
|
import type DragDropInfo from "sap/ui/core/dnd/DragDropInfo";
|
|
16
16
|
import type MDCTable from "sap/ui/mdc/Table";
|
|
17
|
+
import type ActionToolbarAction from "sap/ui/mdc/actiontoolbar/ActionToolbarAction";
|
|
17
18
|
import type Context from "sap/ui/model/odata/v4/Context";
|
|
18
19
|
import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
19
20
|
import { type ITableBlock } from "../TableAPI";
|
|
@@ -69,6 +70,12 @@ export default class TableHierarchy implements IInterfaceWithMixin {
|
|
|
69
70
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/cutEnablement", false);
|
|
70
71
|
internalContext.setProperty("nodeUpdatesInfo/copyEnablement", false);
|
|
71
72
|
internalContext.setProperty("contextmenu/nodeUpdatesInfo/copyEnablement", false);
|
|
73
|
+
const pasteButton = (table.getActions() as ActionToolbarAction[]).find((toolbarAction) =>
|
|
74
|
+
/::Paste$/.test(toolbarAction.getAction().getId())
|
|
75
|
+
);
|
|
76
|
+
setTimeout(() => {
|
|
77
|
+
pasteButton?.focus();
|
|
78
|
+
}, 0);
|
|
72
79
|
}
|
|
73
80
|
|
|
74
81
|
/**
|
|
@@ -97,7 +97,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/HookSupport", "sap/fe/core/CommonUti
|
|
|
97
97
|
};
|
|
98
98
|
_proto.collectAvailableCards = async function collectAvailableCards(cards) {
|
|
99
99
|
const actionToolbarItems = this.getContent().getActions();
|
|
100
|
-
|
|
100
|
+
const appComponent = this.getPageController()?.getAppComponent();
|
|
101
|
+
const isFclModeObjectPageOpen = appComponent?._isFclEnabled() ? appComponent?.getRootViewController()?.getRightmostView?.()?.getViewData()?.converterType === "ObjectPage" : false;
|
|
102
|
+
if (hasInsightActionEnabled(actionToolbarItems, this.getContent().getFilter(), TableInsightsHelper.getInsightsRelevantColumns(this)) && !isFclModeObjectPageOpen) {
|
|
101
103
|
const card = await this.getCardManifestTable();
|
|
102
104
|
if (Object.keys(card).length > 0) {
|
|
103
105
|
cards.push({
|
|
@@ -219,4 +221,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/HookSupport", "sap/fe/core/CommonUti
|
|
|
219
221
|
_exports = TableSharing;
|
|
220
222
|
return _exports;
|
|
221
223
|
}, false);
|
|
222
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZVNoYXJpbmciLCJfZGVjIiwiY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIiLCJfY2xhc3MiLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsInNldHVwTWl4aW4iLCJfYmFzZUNsYXNzIiwiX29uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MiLCJjb250cm9sbGVyIiwiY29udGV4dHMiLCJtYXhOdW1iZXJvZlNlbGVjdGVkSXRlbXMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiY29udGV4dCIsInRhcmdldFBhdGgiLCJnZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlciIsImlzVGFibGVSb3dOYXZpZ2F0aW9uUG9zc2libGUiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJhcHBUaXRsZSIsImdldE1hbmlmZXN0RW50cnkiLCJ0aXRsZSIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiY29sbGFib3JhdGlvblNlcnZpY2UiLCJjbUhlbHBlclNlcnZpY2UiLCJ0cmlnZ2VySDJIQ2hhdCIsIk1lc3NhZ2VCb3giLCJ3YXJuaW5nIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRDb250ZW50IiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZ2V0Q29udHJvbGxlciIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNEcmFmdCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImdldFBhdGgiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJ1bmRlZmluZWQiLCJwYXRoIiwicm9vdFBhdGgiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwicm9vdENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInNpYmxpbmdJbmZvIiwiZHJhZnQiLCJjb21wdXRlU2libGluZ0luZm9ybWF0aW9uIiwidGFyZ2V0Q29udGV4dCIsIl9pc0ZjbEVuYWJsZWQiLCJsYXlvdXQiLCJnZXRGQ0xMYXlvdXRGb3JDTSIsImhhc2hDaGFuZ2VySW5zdGFuY2UiLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwic0Jhc2VQYXRoIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwicGF0aG5hbWUiLCJzZWFyY2giLCJGQ0xMZXZlbCIsIl9yb3V0aW5nIiwiZ2V0RkNMTGV2ZWwiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRGY2xDb25maWciLCJtYXhDb2x1bW5zQ291bnQiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjYXJkcyIsImFjdGlvblRvb2xiYXJJdGVtcyIsImdldEFjdGlvbnMiLCJoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCIsImdldEZpbHRlciIsIlRhYmxlSW5zaWdodHNIZWxwZXIiLCJnZXRJbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyIsImNhcmQiLCJnZXRDYXJkTWFuaWZlc3RUYWJsZSIsIk9iamVjdCIsImtleXMiLCJwdXNoIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiaGVhZGVySW5mb1R5cGVOYW1lIiwiY2FsbGJhY2siLCJvbkFkZENhcmRUb0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FsbGJhY2siLCJiaW5kIiwiaW5zaWdodHNSZWxldmFudENvbHVtbnMiLCJpbnNpZ2h0c1BhcmFtcyIsImNyZWF0ZVRhYmxlQ2FyZFBhcmFtcyIsImdldFNvcnRDb25kaXRpb25zUXVlcnkiLCJJbnNpZ2h0c1NlcnZpY2UiLCJnZXRDYXJkTWFuaWZlc3QiLCJzaG93Q29sbGFib3JhdGlvbk1hbmFnZXJDYXJkUHJldmlldyIsImdldFBhZ2VDb250cm9sbGVyIiwiY29sbGFib3JhdGlvbk1hbmFnZXIiLCJnZXRTZXJ2aWNlIiwiZSIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlIiwiTG9nIiwiZXJyb3IiLCJfb25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQiLCJtZXNzYWdlIiwicGFyYW1ldGVycyIsImlzTmF2aWdhdGlvbkVuYWJsZWQiLCJ0eXBlIiwidGV4dCIsImNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UiLCJzaG93SW5zaWdodHNDYXJkUHJldmlldyIsInNjb3BlIiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0RG93bmxvYWRVcmxXaXRoRmlsdGVycyIsInRhYmxlIiwiZmlsdGVyQmFyIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiRXJyb3IiLCJiaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsIm1vZGVsIiwiZmlsdGVyUHJvcFNWIiwiZ2V0UGFyZW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFNlbWFudGljT3BzRmlsdGVyUHJvcGVydGllcyIsIl9nZXRTZWxlY3RPcHRpb25zIiwiZmlsdGVyc1dpdGhvdXRTZW1hbnRpY0RhdGVPcHMiLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsIm1hcCIsImZpbHRlckluZm8iLCJmaWx0ZXJOYW1lIiwicHJvcGVydGllc0luZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJmbHBNYXBwZWRQbGFjZWhvbGRlcnMiLCJzZW1hbnRpY0RhdGVGaWx0ZXJzIiwiZ2V0U2VtYW50aWNEYXRlRmlsdGVyc1dpdGhGbHBQbGFjZWhvbGRlcnMiLCJhbGxSZWxldmFudEZpbHRlcnMiLCJmaWx0ZXJzIiwiY29uY2F0IiwiYWxsRmlsdGVycyIsIkZpbHRlciIsImFuZCIsIiRzZWFyY2giLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiZ2V0U2VhcmNoIiwidGVtcFRhYmxlQmluZGluZyIsImJpbmRMaXN0IiwidXJsIiwicmVxdWVzdERvd25sb2FkVXJsIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZSIsImVudHJpZXMiLCJyZXBsYWNlIiwic29ydENvbmRpdGlvbnMiLCJnZXRTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzb3J0Q29uZGl0aW9uIiwic29ydENvbmRpdGlvbnNQYXRoIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSIsIm5hbWUiLCJkZXNjZW5kaW5nIiwiam9pbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlU2hhcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0eXBlIFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgeyBoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCwgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnNpZ2h0cy9Db21tb25JbnNpZ2h0c0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnNpZ2h0c1BhcmFtcywgVGFibGVDb250ZW50IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBJbnNpZ2h0c1NlcnZpY2UgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBUYWJsZUluc2lnaHRzSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL1RhYmxlSW5zaWdodHNIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENhcmRNYW5pZmVzdCwgQ2FyZE1lc3NhZ2UgfSBmcm9tIFwic2FwL2luc2lnaHRzL0NhcmRIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCIuLi8uLi9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbnR5cGUgU29ydENvbmRpdGlvbnMgPSB7XG5cdHNvcnRlcnM6IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0ZGVzY2VuZGluZzogYm9vbGVhbjtcblx0fVtdO1xufTtcblxuLyoqXG4gKiBBIG1peGluIHRvIG1hbmFnZSBhbGwgc2hhcmluZyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhYmxlIChpbmNsdWRpbmcgaW5zaWdodCBjYXJkcylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVTaGFyaW5nIGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHt9XG5cblx0X29uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsXG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0Y29udGV4dHM6IENvbnRleHRbXSxcblx0XHRtYXhOdW1iZXJvZlNlbGVjdGVkSXRlbXM6IG51bWJlclxuXHQpOiB2b2lkIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoIDw9IG1heE51bWJlcm9mU2VsZWN0ZWRJdGVtcykge1xuXHRcdFx0Y29udGV4dHMuZm9yRWFjaChhc3luYyAoY29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gYXdhaXQgdGhpcy5nZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlcihjb250ZXh0KTtcblx0XHRcdFx0aWYgKHRoaXMuaXNUYWJsZVJvd05hdmlnYXRpb25Qb3NzaWJsZShjb250ZXh0KSAmJiB0YXJnZXRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdFx0XHRjb25zdCBhcHBUaXRsZSA9IGFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS50aXRsZTtcblx0XHRcdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlID0gY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZT8uY29sbGFib3JhdGlvblNlcnZpY2UuY21IZWxwZXJTZXJ2aWNlO1xuXHRcdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZT8udHJpZ2dlckgySENoYXQoYXBwVGl0bGUsIHRhcmdldFBhdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhcblx0XHRcdFx0XHRcdExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIlRfVEFCTEVfU0hBUkVfVE9fQ09MTEFCT1JBVElPTl9NQU5BR0VSX05PX05BVklHQVRJT05fUE9TU0lCTEVcIlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoXG5cdFx0XHRcdExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFwiVF9UQUJMRV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJfVE9PX01BTllfSVRFTVNfU0VMRUNURURcIiwgW1xuXHRcdFx0XHRcdG1heE51bWJlcm9mU2VsZWN0ZWRJdGVtc1xuXHRcdFx0XHRdKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBVUkwgZm9yIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXIuIFdlIGFsd2F5cyBnbyB0byB0aGUgYWN0aXZlIHZlcnNpb24sIGFsc28gZnJvbSBkcmFmdCB2ZXJzaW9uLiBJZiB0aGVyZSBpcyBubyBhY3RpdmUgdmVyc2lvbiB5ZXQsIHdlIGRvIG5vdCBzaGFyZSBhIGxpbmsuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB3aGljaCB0aGUgVVJMIGlzIHRvIGJlIGdlbmVyYXRlZFxuXHQgKiBAcmV0dXJucyBUaGUgVVJMIGZvciBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyXG5cdCAqL1xuXHRhc3luYyBnZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlcih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZywgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHRhcmdldFBhdGg7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGlzRHJhZnQgPSBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChpc0RyYWZ0ICYmICFjb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpICYmIGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgYSBkcmFmdCBlbnRpdHkgd2l0aCBubyBhY3RpdmUgdmVyc2lvblxuXHRcdFx0XHQvLyB3ZSBkbyBub3Qgc3VwcG9ydCB0aGlzIGZvciBDb2xsYWJvcmF0aW9uIE1hbmFnZXJcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgYSBkcmFmdCBlbnRpdHkgd2l0aCBhbiBhY3RpdmUgdmVyc2lvbiBhbmQgbmVlZCB0byBjb252ZXJ0IHRoZSBwYXRoIHRvIGFuIGFjdGl2ZSBwYXRoXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3Qgcm9vdFBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmluZGV4T2YoXCIvXCIsIDEpKTtcblx0XHRcdFx0Y29uc3Qgcm9vdENvbnRleHQgPSByb290UGF0aCA/IGNvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChyb290UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCkgOiBjb250ZXh0O1xuXHRcdFx0XHRjb25zdCBzaWJsaW5nSW5mbyA9IGF3YWl0IGRyYWZ0LmNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24ocm9vdENvbnRleHQsIGNvbnRleHQpO1xuXHRcdFx0XHR0YXJnZXRQYXRoID0gc2libGluZ0luZm8/LnRhcmdldENvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2UgaGF2ZSBhbiBhY3RpdmUgZW50aXR5IG9yIGEgY29sbGFib3JhdGl2ZSBkcmFmdCBvciBhIG5vbi1kcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuXHRcdFx0dGFyZ2V0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdH1cblxuXHRcdGlmICh0YXJnZXRQYXRoKSB7XG5cdFx0XHRpZiAodGFyZ2V0UGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0dGFyZ2V0UGF0aCA9IHRhcmdldFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRcdGlmIChhcHBDb21wb25lbnQuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGNvbnN0IGxheW91dCA9IHRoaXMuZ2V0RkNMTGF5b3V0Rm9yQ00oYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0dGFyZ2V0UGF0aCArPSBgP2xheW91dD0ke2xheW91dH1gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaGFzaENoYW5nZXJJbnN0YW5jZSA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0XHRjb25zdCBzQmFzZVBhdGggPSBoYXNoQ2hhbmdlckluc3RhbmNlLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ggPyBoYXNoQ2hhbmdlckluc3RhbmNlLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIikgOiBcIlwiO1xuXHRcdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgc0Jhc2VQYXRoICsgdGFyZ2V0UGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgJ1NoYXJlIHRvIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXInLCB3ZSBhbHdheXMgd2FudCB0aGUgVVJMIHRvIGdvIHRvIGZ1bGwgc2NyZWVuLlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFRoZSBGQ0wgbGF5b3V0IGZvciB0aGUgU2hhcmUgdG8gU0FQIENvbGxhYm9yYXRpb24gTWFuYWdlclxuXHQgKi9cblx0Z2V0RkNMTGF5b3V0Rm9yQ00odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBGQ0xMZXZlbCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy5nZXRDb250ZW50KCkpLmdldENvbnRyb2xsZXIoKS5fcm91dGluZy5nZXRGQ0xMZXZlbCgpO1xuXHRcdGlmICgoYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLmdldEZjbENvbmZpZygpLm1heENvbHVtbnNDb3VudCA9PT0gMikge1xuXHRcdFx0cmV0dXJuIFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBGQ0xMZXZlbCA9PT0gMCA/IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiIDogXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdH1cblxuXHRAY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIoXCJjb2xsYWJvcmF0aW9uTWFuYWdlclwiLCBcImNvbGxlY3RBdmFpbGFibGVDYXJkc1wiKVxuXHRhc3luYyBjb2xsZWN0QXZhaWxhYmxlQ2FyZHModGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aW9uVG9vbGJhckl0ZW1zID0gdGhpcy5nZXRDb250ZW50KCkuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXTtcblx0XHRpZiAoXG5cdFx0XHRoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZChhY3Rpb25Ub29sYmFySXRlbXMsIHRoaXMuZ2V0Q29udGVudCgpLmdldEZpbHRlcigpLCBUYWJsZUluc2lnaHRzSGVscGVyLmdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKHRoaXMpKVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgY2FyZCA9IGF3YWl0IHRoaXMuZ2V0Q2FyZE1hbmlmZXN0VGFibGUoKTtcblx0XHRcdGlmIChPYmplY3Qua2V5cyhjYXJkKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNhcmRzLnB1c2goe1xuXHRcdFx0XHRcdGNhcmQ6IGNhcmQsXG5cdFx0XHRcdFx0dGl0bGU6ICh0aGlzLmdldFRhYmxlRGVmaW5pdGlvbigpLmhlYWRlckluZm9UeXBlTmFtZSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpID8/IFwiXCIsXG5cdFx0XHRcdFx0Y2FsbGJhY2s6IHRoaXMub25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrLmJpbmQodGhpcylcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNhcmQgbWFuaWZlc3Qgb3B0aW1pemVkIGZvciB0aGUgdGFibGUgY2FzZS5cblx0ICogQHJldHVybnMgUHJvbWlzZSBvZiBDYXJkTWFuaWZlc3Rcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZ2V0Q2FyZE1hbmlmZXN0VGFibGUodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcpOiBQcm9taXNlPENhcmRNYW5pZmVzdD4ge1xuXHRcdGNvbnN0IGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zID0gVGFibGVJbnNpZ2h0c0hlbHBlci5nZXRJbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyh0aGlzKTtcblx0XHRjb25zdCBpbnNpZ2h0c1BhcmFtcyA9IChhd2FpdCBUYWJsZUluc2lnaHRzSGVscGVyLmNyZWF0ZVRhYmxlQ2FyZFBhcmFtcyhcblx0XHRcdHRoaXMsXG5cdFx0XHRpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyxcblx0XHRcdHRoaXMuZ2V0U29ydENvbmRpdGlvbnNRdWVyeSgpXG5cdFx0KSkgYXMgSW5zaWdodHNQYXJhbXM8VGFibGVDb250ZW50Pjtcblx0XHRyZXR1cm4gSW5zaWdodHNTZXJ2aWNlLmdldENhcmRNYW5pZmVzdChpbnNpZ2h0c1BhcmFtcyk7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjcmVhdGUgaW5zaWdodHNQYXJhbXMgYW5kIGNhbGwgdGhlIEFQSSB0byBzaG93IGluc2lnaHRzIGNhcmQgcHJldmlldyBmb3IgdGFibGUuXG5cdCAqIEBwYXJhbSBjYXJkIFRoZSBjYXJkIG1hbmlmZXN0IHRvIGJlIHVzZWQgZm9yIHRoZSBjYWxsYmFja1xuXHQgKiBAcmV0dXJucyBVbmRlZmluZWQgaWYgY2FyZCBwcmV2aWV3IGlzIHJlbmRlcmVkLlxuXHQgKi9cblx0YXN5bmMgb25BZGRDYXJkVG9Db2xsYWJvcmF0aW9uTWFuYWdlckNhbGxiYWNrKHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVTaGFyaW5nLCBjYXJkOiBDYXJkTWFuaWZlc3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKGNhcmQpIHtcblx0XHRcdFx0YXdhaXQgSW5zaWdodHNTZXJ2aWNlLnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlckNhcmRQcmV2aWV3KGNhcmQsIHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5jb2xsYWJvcmF0aW9uTWFuYWdlci5nZXRTZXJ2aWNlKCkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjcmVhdGUgaW5zaWdodHNQYXJhbXMgYW5kIGNhbGwgdGhlIEFQSSB0byBzaG93IGluc2lnaHRzIGNhcmQgcHJldmlldyBmb3IgdGFibGUuXG5cdCAqIEByZXR1cm5zIFVuZGVmaW5lZCBpZiB0aGUgY2FyZCBwcmV2aWV3IGlzIHJlbmRlcmVkLlxuXHQgKi9cblx0YXN5bmMgX29uQWRkQ2FyZFRvSW5zaWdodHNQcmVzc2VkKHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVTaGFyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zID0gVGFibGVJbnNpZ2h0c0hlbHBlci5nZXRJbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyh0aGlzKTtcblx0XHRcdGNvbnN0IGluc2lnaHRzUGFyYW1zID0gYXdhaXQgVGFibGVJbnNpZ2h0c0hlbHBlci5jcmVhdGVUYWJsZUNhcmRQYXJhbXMoXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zLFxuXHRcdFx0XHR0aGlzLmdldFNvcnRDb25kaXRpb25zUXVlcnkoKVxuXHRcdFx0KTtcblx0XHRcdGlmIChpbnNpZ2h0c1BhcmFtcykge1xuXHRcdFx0XHRjb25zdCBtZXNzYWdlOiBDYXJkTWVzc2FnZSA9IGluc2lnaHRzUGFyYW1zLnBhcmFtZXRlcnMuaXNOYXZpZ2F0aW9uRW5hYmxlZFxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0XHRcdFx0XHR0ZXh0OiB0aGlzLmNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UodGhpcy5nZXRDb250ZW50KCkpXG5cdFx0XHRcdFx0ICB9O1xuXG5cdFx0XHRcdEluc2lnaHRzU2VydmljZS5zaG93SW5zaWdodHNDYXJkUHJldmlldyhpbnNpZ2h0c1BhcmFtcywgbWVzc2FnZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZSh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2Uoc2NvcGU6IENvbnRyb2wpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwoc2NvcGUpO1xuXHRcdHJldHVybiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX1JPV19MRVZFTF9OQVZJR0FUSU9OX0RJU0FCTEVEX01TR19SRUFTT05fRVhURVJOQUxfTkFWSUdBVElPTl9DT05GSUdVUkVEXCIpO1xuXHR9XG5cblx0YXN5bmMgZ2V0RG93bmxvYWRVcmxXaXRoRmlsdGVycyh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgdGFibGUgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlLmdldEZpbHRlcigpKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWZpbHRlckJhcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlsdGVyIGJhciBpcyBub3QgYXZhaWxhYmxlXCIpO1xuXHRcdH1cblx0XHRjb25zdCBiaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdGNvbnN0IG1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRcdGNvbnN0IGZpbHRlclByb3BTViA9IGF3YWl0IChmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJKS5nZXRTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0Ly8gaWdub3JlIGZpbHRlcnMgd2l0aCBzZW1hbnRpYyBvcGVyYXRvcnMgd2hpY2ggbmVlZHMgdG8gYmUgYWRkZWQgbGF0ZXIgYXMgZmlsdGVycyB3aXRoIGZscCBzZW1hbnRpYyBkYXRlIHBsYWNlaG9sZGVyc1xuXHRcdGNvbnN0IGZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY09wc0ZpbHRlclByb3BlcnRpZXMoZmlsdGVyUHJvcFNWLl9nZXRTZWxlY3RPcHRpb25zKCkpO1xuXHRcdGNvbnN0IGZpbHRlcnNXaXRob3V0U2VtYW50aWNEYXRlT3BzID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKFxuXHRcdFx0dGFibGUsXG5cdFx0XHRmaWx0ZXJzV2l0aFNlbWFudGljRGF0ZU9wc0luZm8ubWFwKChmaWx0ZXJJbmZvKSA9PiBmaWx0ZXJJbmZvLmZpbHRlck5hbWUpXG5cdFx0KTtcblx0XHRjb25zdCBwcm9wZXJ0aWVzSW5mbyA9IGZpbHRlckJhci5nZXRQcm9wZXJ0eUluZm9TZXQoKTtcblx0XHQvLyBnZXQgdGhlIGZpbHRlcnMgd2l0aCBzZW1hbnRpYyBkYXRlIG9wZXJhdG9ycyB3aXRoIGZscCBwbGFjZWhvbGRlciBmb3JtYXQgYW5kIGFwcGVuZCB0byB0aGUgZXhpc2l0aW5nIGZpbHRlcnNcblx0XHRjb25zdCBbZmxwTWFwcGVkUGxhY2Vob2xkZXJzLCBzZW1hbnRpY0RhdGVGaWx0ZXJzXSA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVGaWx0ZXJzV2l0aEZscFBsYWNlaG9sZGVycyhcblx0XHRcdGZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyxcblx0XHRcdHByb3BlcnRpZXNJbmZvXG5cdFx0KTtcblxuXHRcdGxldCBhbGxSZWxldmFudEZpbHRlcnM6IEZpbHRlcltdID0gW107XG5cdFx0aWYgKGZpbHRlcnNXaXRob3V0U2VtYW50aWNEYXRlT3BzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YWxsUmVsZXZhbnRGaWx0ZXJzID0gYWxsUmVsZXZhbnRGaWx0ZXJzLmNvbmNhdChmaWx0ZXJzV2l0aG91dFNlbWFudGljRGF0ZU9wcy5maWx0ZXJzKTtcblx0XHR9XG5cdFx0aWYgKHNlbWFudGljRGF0ZUZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YWxsUmVsZXZhbnRGaWx0ZXJzLnB1c2goLi4uc2VtYW50aWNEYXRlRmlsdGVycyk7XG5cdFx0fVxuXHRcdGNvbnN0IGFsbEZpbHRlcnMgPSBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IGFsbFJlbGV2YW50RmlsdGVycyxcblx0XHRcdGFuZDogdHJ1ZVxuXHRcdH0pO1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB7XG5cdFx0XHQkc2VhcmNoOiBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKGZpbHRlckJhci5nZXRTZWFyY2goKSkgfHwgdW5kZWZpbmVkXG5cdFx0fTtcblx0XHQvLyBjcmVhdGUgaGlkZGVuIGJpbmRpbmcgd2l0aCBhbGwgZmlsdGVycyBlLmcuIHN0YXRpYyBmaWx0ZXJzIGFuZCBmaWx0ZXJzIHdpdGggc2VtYW50aWMgb3BlcmF0b3JzXG5cdFx0Y29uc3QgdGVtcFRhYmxlQmluZGluZyA9IG1vZGVsLmJpbmRMaXN0KGJpbmRpbmcuZ2V0UGF0aCgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYWxsRmlsdGVycywgcGFyYW1ldGVycyk7XG5cdFx0bGV0IHVybCA9IChhd2FpdCB0ZW1wVGFibGVCaW5kaW5nLnJlcXVlc3REb3dubG9hZFVybCgpKSA/PyBcIlwiO1xuXHRcdGZvciAoY29uc3QgW3BsYWNlaG9sZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmxwTWFwcGVkUGxhY2Vob2xkZXJzKSkge1xuXHRcdFx0dXJsID0gdXJsLnJlcGxhY2UocGxhY2Vob2xkZXIsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNvcnQgY29uZGl0aW9ucyBxdWVyeSBzdHJpbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBzb3J0IGNvbmRpdGlvbnMgcXVlcnkgc3RyaW5nXG5cdCAqL1xuXHRnZXRTb3J0Q29uZGl0aW9uc1F1ZXJ5KHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVTaGFyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IHNvcnRDb25kaXRpb25zID0gKHRhYmxlLmdldFNvcnRDb25kaXRpb25zKCkgYXMgU29ydENvbmRpdGlvbnMpPy5zb3J0ZXJzO1xuXHRcdHJldHVybiBzb3J0Q29uZGl0aW9uc1xuXHRcdFx0PyBzb3J0Q29uZGl0aW9uc1xuXHRcdFx0XHRcdC5tYXAoZnVuY3Rpb24gKHNvcnRDb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNvcnRDb25kaXRpb25zUGF0aCA9IHRhYmxlLmdldFByb3BlcnR5SGVscGVyKCkuZ2V0UHJvcGVydHkoc29ydENvbmRpdGlvbi5uYW1lKT8ucGF0aDtcblx0XHRcdFx0XHRcdGlmIChzb3J0Q29uZGl0aW9uc1BhdGgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGAke3NvcnRDb25kaXRpb25zUGF0aH0ke3NvcnRDb25kaXRpb24uZGVzY2VuZGluZyA/IFwiIGRlc2NcIiA6IFwiXCJ9YDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oXCIsXCIpXG5cdFx0XHQ6IFwiXCI7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQXNDQTtBQUNB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
|
|
224
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUYWJsZVNoYXJpbmciLCJfZGVjIiwiY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIiLCJfY2xhc3MiLCJfZXhwb3J0cyIsIl9wcm90byIsInByb3RvdHlwZSIsInNldHVwTWl4aW4iLCJfYmFzZUNsYXNzIiwiX29uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MiLCJjb250cm9sbGVyIiwiY29udGV4dHMiLCJtYXhOdW1iZXJvZlNlbGVjdGVkSXRlbXMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiY29udGV4dCIsInRhcmdldFBhdGgiLCJnZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlciIsImlzVGFibGVSb3dOYXZpZ2F0aW9uUG9zc2libGUiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJhcHBUaXRsZSIsImdldE1hbmlmZXN0RW50cnkiLCJ0aXRsZSIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiY29sbGFib3JhdGlvblNlcnZpY2UiLCJjbUhlbHBlclNlcnZpY2UiLCJ0cmlnZ2VySDJIQ2hhdCIsIk1lc3NhZ2VCb3giLCJ3YXJuaW5nIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZ2V0VGV4dCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRDb250ZW50IiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiZ2V0Q29udHJvbGxlciIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaXNEcmFmdCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImdldFBhdGgiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiZ2V0T2JqZWN0IiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNBY3RpdmVFbnRpdHkiLCJ1bmRlZmluZWQiLCJwYXRoIiwicm9vdFBhdGgiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwicm9vdENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInNpYmxpbmdJbmZvIiwiZHJhZnQiLCJjb21wdXRlU2libGluZ0luZm9ybWF0aW9uIiwidGFyZ2V0Q29udGV4dCIsIl9pc0ZjbEVuYWJsZWQiLCJsYXlvdXQiLCJnZXRGQ0xMYXlvdXRGb3JDTSIsImhhc2hDaGFuZ2VySW5zdGFuY2UiLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwic0Jhc2VQYXRoIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwib3JpZ2luIiwicGF0aG5hbWUiLCJzZWFyY2giLCJGQ0xMZXZlbCIsIl9yb3V0aW5nIiwiZ2V0RkNMTGV2ZWwiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRGY2xDb25maWciLCJtYXhDb2x1bW5zQ291bnQiLCJjb2xsZWN0QXZhaWxhYmxlQ2FyZHMiLCJjYXJkcyIsImFjdGlvblRvb2xiYXJJdGVtcyIsImdldEFjdGlvbnMiLCJnZXRQYWdlQ29udHJvbGxlciIsImlzRmNsTW9kZU9iamVjdFBhZ2VPcGVuIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFZpZXdEYXRhIiwiY29udmVydGVyVHlwZSIsImhhc0luc2lnaHRBY3Rpb25FbmFibGVkIiwiZ2V0RmlsdGVyIiwiVGFibGVJbnNpZ2h0c0hlbHBlciIsImdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zIiwiY2FyZCIsImdldENhcmRNYW5pZmVzdFRhYmxlIiwiT2JqZWN0Iiwia2V5cyIsInB1c2giLCJnZXRUYWJsZURlZmluaXRpb24iLCJoZWFkZXJJbmZvVHlwZU5hbWUiLCJjYWxsYmFjayIsIm9uQWRkQ2FyZFRvQ29sbGFib3JhdGlvbk1hbmFnZXJDYWxsYmFjayIsImJpbmQiLCJpbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyIsImluc2lnaHRzUGFyYW1zIiwiY3JlYXRlVGFibGVDYXJkUGFyYW1zIiwiZ2V0U29ydENvbmRpdGlvbnNRdWVyeSIsIkluc2lnaHRzU2VydmljZSIsImdldENhcmRNYW5pZmVzdCIsInNob3dDb2xsYWJvcmF0aW9uTWFuYWdlckNhcmRQcmV2aWV3IiwiY29sbGFib3JhdGlvbk1hbmFnZXIiLCJnZXRTZXJ2aWNlIiwiZSIsInNob3dHZW5lcmljRXJyb3JNZXNzYWdlIiwiTG9nIiwiZXJyb3IiLCJfb25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQiLCJtZXNzYWdlIiwicGFyYW1ldGVycyIsImlzTmF2aWdhdGlvbkVuYWJsZWQiLCJ0eXBlIiwidGV4dCIsImNyZWF0ZU5hdmlnYXRpb25FcnJvck1lc3NhZ2UiLCJzaG93SW5zaWdodHNDYXJkUHJldmlldyIsInNjb3BlIiwicmVzb3VyY2VNb2RlbCIsIlJlc291cmNlTW9kZWxIZWxwZXIiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0RG93bmxvYWRVcmxXaXRoRmlsdGVycyIsInRhYmxlIiwiZmlsdGVyQmFyIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiRXJyb3IiLCJiaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsIm1vZGVsIiwiZmlsdGVyUHJvcFNWIiwiZ2V0UGFyZW50IiwiZ2V0U2VsZWN0aW9uVmFyaWFudCIsImZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mbyIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFNlbWFudGljT3BzRmlsdGVyUHJvcGVydGllcyIsIl9nZXRTZWxlY3RPcHRpb25zIiwiZmlsdGVyc1dpdGhvdXRTZW1hbnRpY0RhdGVPcHMiLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsIm1hcCIsImZpbHRlckluZm8iLCJmaWx0ZXJOYW1lIiwicHJvcGVydGllc0luZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJmbHBNYXBwZWRQbGFjZWhvbGRlcnMiLCJzZW1hbnRpY0RhdGVGaWx0ZXJzIiwiZ2V0U2VtYW50aWNEYXRlRmlsdGVyc1dpdGhGbHBQbGFjZWhvbGRlcnMiLCJhbGxSZWxldmFudEZpbHRlcnMiLCJmaWx0ZXJzIiwiY29uY2F0IiwiYWxsRmlsdGVycyIsIkZpbHRlciIsImFuZCIsIiRzZWFyY2giLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiZ2V0U2VhcmNoIiwidGVtcFRhYmxlQmluZGluZyIsImJpbmRMaXN0IiwidXJsIiwicmVxdWVzdERvd25sb2FkVXJsIiwicGxhY2Vob2xkZXIiLCJ2YWx1ZSIsImVudHJpZXMiLCJyZXBsYWNlIiwic29ydENvbmRpdGlvbnMiLCJnZXRTb3J0Q29uZGl0aW9ucyIsInNvcnRlcnMiLCJzb3J0Q29uZGl0aW9uIiwic29ydENvbmRpdGlvbnNQYXRoIiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSIsIm5hbWUiLCJkZXNjZW5kaW5nIiwiam9pbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlU2hhcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgSUludGVyZmFjZVdpdGhNaXhpbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGNvbnRyb2xsZXJFeHRlbnNpb25IYW5kbGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5pbXBvcnQgeyB0eXBlIFdyYXBwZWRDYXJkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgeyBoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZCwgc2hvd0dlbmVyaWNFcnJvck1lc3NhZ2UgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnNpZ2h0cy9Db21tb25JbnNpZ2h0c0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnNpZ2h0c1BhcmFtcywgVGFibGVDb250ZW50IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBJbnNpZ2h0c1NlcnZpY2UgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW5zaWdodHMvSW5zaWdodHNTZXJ2aWNlXCI7XG5pbXBvcnQgKiBhcyBUYWJsZUluc2lnaHRzSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2luc2lnaHRzL1RhYmxlSW5zaWdodHNIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENhcmRNYW5pZmVzdCwgQ2FyZE1lc3NhZ2UgfSBmcm9tIFwic2FwL2luc2lnaHRzL0NhcmRIZWxwZXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IEhhc2hDaGFuZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL0hhc2hDaGFuZ2VyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCIuLi8uLi9maWx0ZXJCYXIvU2VtYW50aWNEYXRlT3BlcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIElUYWJsZUJsb2NrIH0gZnJvbSBcIi4uL1RhYmxlQVBJXCI7XG5cbnR5cGUgU29ydENvbmRpdGlvbnMgPSB7XG5cdHNvcnRlcnM6IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0ZGVzY2VuZGluZzogYm9vbGVhbjtcblx0fVtdO1xufTtcblxuLyoqXG4gKiBBIG1peGluIHRvIG1hbmFnZSBhbGwgc2hhcmluZyByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRhYmxlIChpbmNsdWRpbmcgaW5zaWdodCBjYXJkcylcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVTaGFyaW5nIGltcGxlbWVudHMgSUludGVyZmFjZVdpdGhNaXhpbiB7XG5cdHNldHVwTWl4aW4oX2Jhc2VDbGFzczogRnVuY3Rpb24pOiB2b2lkIHt9XG5cblx0X29uU2hhcmVUb0NvbGxhYm9yYXRpb25NYW5hZ2VyUHJlc3MoXG5cdFx0dGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsXG5cdFx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdFx0Y29udGV4dHM6IENvbnRleHRbXSxcblx0XHRtYXhOdW1iZXJvZlNlbGVjdGVkSXRlbXM6IG51bWJlclxuXHQpOiB2b2lkIHtcblx0XHRpZiAoY29udGV4dHMubGVuZ3RoIDw9IG1heE51bWJlcm9mU2VsZWN0ZWRJdGVtcykge1xuXHRcdFx0Y29udGV4dHMuZm9yRWFjaChhc3luYyAoY29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gYXdhaXQgdGhpcy5nZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlcihjb250ZXh0KTtcblx0XHRcdFx0aWYgKHRoaXMuaXNUYWJsZVJvd05hdmlnYXRpb25Qb3NzaWJsZShjb250ZXh0KSAmJiB0YXJnZXRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRcdFx0XHRjb25zdCBhcHBUaXRsZSA9IGFwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS50aXRsZTtcblx0XHRcdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50Py5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlID0gY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZT8uY29sbGFib3JhdGlvblNlcnZpY2UuY21IZWxwZXJTZXJ2aWNlO1xuXHRcdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZT8udHJpZ2dlckgySENoYXQoYXBwVGl0bGUsIHRhcmdldFBhdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE1lc3NhZ2VCb3gud2FybmluZyhcblx0XHRcdFx0XHRcdExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIlRfVEFCTEVfU0hBUkVfVE9fQ09MTEFCT1JBVElPTl9NQU5BR0VSX05PX05BVklHQVRJT05fUE9TU0lCTEVcIlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoXG5cdFx0XHRcdExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpIS5nZXRUZXh0KFwiVF9UQUJMRV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJfVE9PX01BTllfSVRFTVNfU0VMRUNURURcIiwgW1xuXHRcdFx0XHRcdG1heE51bWJlcm9mU2VsZWN0ZWRJdGVtc1xuXHRcdFx0XHRdKVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBVUkwgZm9yIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXIuIFdlIGFsd2F5cyBnbyB0byB0aGUgYWN0aXZlIHZlcnNpb24sIGFsc28gZnJvbSBkcmFmdCB2ZXJzaW9uLiBJZiB0aGVyZSBpcyBubyBhY3RpdmUgdmVyc2lvbiB5ZXQsIHdlIGRvIG5vdCBzaGFyZSBhIGxpbmsuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IGZvciB3aGljaCB0aGUgVVJMIGlzIHRvIGJlIGdlbmVyYXRlZFxuXHQgKiBAcmV0dXJucyBUaGUgVVJMIGZvciBTQVAgQ29sbGFib3JhdGlvbiBNYW5hZ2VyXG5cdCAqL1xuXHRhc3luYyBnZXRVcmxGb3JDb2xsYWJvcmF0aW9uTWFuYWdlcih0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZywgY29udGV4dDogQ29udGV4dCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cdFx0bGV0IHRhcmdldFBhdGg7XG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy5nZXRDb250ZW50KCkpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdCA9IHZpZXcuZ2V0Q29udHJvbGxlcigpLmNvbGxhYm9yYXRpdmVEcmFmdDtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGlzRHJhZnQgPSBNb2RlbEhlbHBlci5pc0RyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbCwgY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdGlmIChpc0RyYWZ0ICYmICFjb2xsYWJvcmF0aXZlRHJhZnQuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpICYmIGNvbnRleHQuZ2V0T2JqZWN0KCkuSXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRpZiAoY29udGV4dC5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkgPT09IGZhbHNlKSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgYSBkcmFmdCBlbnRpdHkgd2l0aCBubyBhY3RpdmUgdmVyc2lvblxuXHRcdFx0XHQvLyB3ZSBkbyBub3Qgc3VwcG9ydCB0aGlzIGZvciBDb2xsYWJvcmF0aW9uIE1hbmFnZXJcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHdlIGhhdmUgYSBkcmFmdCBlbnRpdHkgd2l0aCBhbiBhY3RpdmUgdmVyc2lvbiBhbmQgbmVlZCB0byBjb252ZXJ0IHRoZSBwYXRoIHRvIGFuIGFjdGl2ZSBwYXRoXG5cdFx0XHRcdGNvbnN0IHBhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0Y29uc3Qgcm9vdFBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmluZGV4T2YoXCIvXCIsIDEpKTtcblx0XHRcdFx0Y29uc3Qgcm9vdENvbnRleHQgPSByb290UGF0aCA/IGNvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChyb290UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCkgOiBjb250ZXh0O1xuXHRcdFx0XHRjb25zdCBzaWJsaW5nSW5mbyA9IGF3YWl0IGRyYWZ0LmNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24ocm9vdENvbnRleHQsIGNvbnRleHQpO1xuXHRcdFx0XHR0YXJnZXRQYXRoID0gc2libGluZ0luZm8/LnRhcmdldENvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2UgaGF2ZSBhbiBhY3RpdmUgZW50aXR5IG9yIGEgY29sbGFib3JhdGl2ZSBkcmFmdCBvciBhIG5vbi1kcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuXHRcdFx0dGFyZ2V0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdH1cblxuXHRcdGlmICh0YXJnZXRQYXRoKSB7XG5cdFx0XHRpZiAodGFyZ2V0UGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0dGFyZ2V0UGF0aCA9IHRhcmdldFBhdGguc3Vic3RyaW5nKDEpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRcdGlmIChhcHBDb21wb25lbnQuX2lzRmNsRW5hYmxlZCgpKSB7XG5cdFx0XHRcdGNvbnN0IGxheW91dCA9IHRoaXMuZ2V0RkNMTGF5b3V0Rm9yQ00oYXBwQ29tcG9uZW50KTtcblx0XHRcdFx0dGFyZ2V0UGF0aCArPSBgP2xheW91dD0ke2xheW91dH1gO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaGFzaENoYW5nZXJJbnN0YW5jZSA9IEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCk7XG5cdFx0XHRjb25zdCBzQmFzZVBhdGggPSBoYXNoQ2hhbmdlckluc3RhbmNlLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2ggPyBoYXNoQ2hhbmdlckluc3RhbmNlLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2goXCJcIikgOiBcIlwiO1xuXHRcdFx0cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgc0Jhc2VQYXRoICsgdGFyZ2V0UGF0aDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb3IgJ1NoYXJlIHRvIFNBUCBDb2xsYWJvcmF0aW9uIE1hbmFnZXInLCB3ZSBhbHdheXMgd2FudCB0aGUgVVJMIHRvIGdvIHRvIGZ1bGwgc2NyZWVuLlxuXHQgKiBAcGFyYW0gdGhpc1xuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBhcHAgY29tcG9uZW50XG5cdCAqIEByZXR1cm5zIFRoZSBGQ0wgbGF5b3V0IGZvciB0aGUgU2hhcmUgdG8gU0FQIENvbGxhYm9yYXRpb24gTWFuYWdlclxuXHQgKi9cblx0Z2V0RkNMTGF5b3V0Rm9yQ00odGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBGQ0xMZXZlbCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGhpcy5nZXRDb250ZW50KCkpLmdldENvbnRyb2xsZXIoKS5fcm91dGluZy5nZXRGQ0xMZXZlbCgpO1xuXHRcdGlmICgoYXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLmdldEZjbENvbmZpZygpLm1heENvbHVtbnNDb3VudCA9PT0gMikge1xuXHRcdFx0cmV0dXJuIFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBGQ0xMZXZlbCA9PT0gMCA/IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiIDogXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdH1cblxuXHRAY29udHJvbGxlckV4dGVuc2lvbkhhbmRsZXIoXCJjb2xsYWJvcmF0aW9uTWFuYWdlclwiLCBcImNvbGxlY3RBdmFpbGFibGVDYXJkc1wiKVxuXHRhc3luYyBjb2xsZWN0QXZhaWxhYmxlQ2FyZHModGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGNhcmRzOiBXcmFwcGVkQ2FyZFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWN0aW9uVG9vbGJhckl0ZW1zID0gdGhpcy5nZXRDb250ZW50KCkuZ2V0QWN0aW9ucygpIGFzIEFjdGlvblRvb2xiYXJBY3Rpb25bXTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IGlzRmNsTW9kZU9iamVjdFBhZ2VPcGVuID0gYXBwQ29tcG9uZW50Py5faXNGY2xFbmFibGVkKClcblx0XHRcdD8gKGFwcENvbXBvbmVudD8uZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcik/LmdldFJpZ2h0bW9zdFZpZXc/LigpPy5nZXRWaWV3RGF0YSgpPy5jb252ZXJ0ZXJUeXBlID09PSBcIk9iamVjdFBhZ2VcIlxuXHRcdFx0OiBmYWxzZTtcblx0XHRpZiAoXG5cdFx0XHRoYXNJbnNpZ2h0QWN0aW9uRW5hYmxlZChcblx0XHRcdFx0YWN0aW9uVG9vbGJhckl0ZW1zLFxuXHRcdFx0XHR0aGlzLmdldENvbnRlbnQoKS5nZXRGaWx0ZXIoKSxcblx0XHRcdFx0VGFibGVJbnNpZ2h0c0hlbHBlci5nZXRJbnNpZ2h0c1JlbGV2YW50Q29sdW1ucyh0aGlzKVxuXHRcdFx0KSAmJlxuXHRcdFx0IWlzRmNsTW9kZU9iamVjdFBhZ2VPcGVuXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBjYXJkID0gYXdhaXQgdGhpcy5nZXRDYXJkTWFuaWZlc3RUYWJsZSgpO1xuXHRcdFx0aWYgKE9iamVjdC5rZXlzKGNhcmQpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2FyZHMucHVzaCh7XG5cdFx0XHRcdFx0Y2FyZDogY2FyZCxcblx0XHRcdFx0XHR0aXRsZTogKHRoaXMuZ2V0VGFibGVEZWZpbml0aW9uKCkuaGVhZGVySW5mb1R5cGVOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gXCJcIixcblx0XHRcdFx0XHRjYWxsYmFjazogdGhpcy5vbkFkZENhcmRUb0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FsbGJhY2suYmluZCh0aGlzKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY2FyZCBtYW5pZmVzdCBvcHRpbWl6ZWQgZm9yIHRoZSB0YWJsZSBjYXNlLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIENhcmRNYW5pZmVzdFxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBnZXRDYXJkTWFuaWZlc3RUYWJsZSh0aGlzOiBJVGFibGVCbG9jayAmIFRhYmxlU2hhcmluZyk6IFByb21pc2U8Q2FyZE1hbmlmZXN0PiB7XG5cdFx0Y29uc3QgaW5zaWdodHNSZWxldmFudENvbHVtbnMgPSBUYWJsZUluc2lnaHRzSGVscGVyLmdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKHRoaXMpO1xuXHRcdGNvbnN0IGluc2lnaHRzUGFyYW1zID0gKGF3YWl0IFRhYmxlSW5zaWdodHNIZWxwZXIuY3JlYXRlVGFibGVDYXJkUGFyYW1zKFxuXHRcdFx0dGhpcyxcblx0XHRcdGluc2lnaHRzUmVsZXZhbnRDb2x1bW5zLFxuXHRcdFx0dGhpcy5nZXRTb3J0Q29uZGl0aW9uc1F1ZXJ5KClcblx0XHQpKSBhcyBJbnNpZ2h0c1BhcmFtczxUYWJsZUNvbnRlbnQ+O1xuXHRcdHJldHVybiBJbnNpZ2h0c1NlcnZpY2UuZ2V0Q2FyZE1hbmlmZXN0KGluc2lnaHRzUGFyYW1zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBpbnNpZ2h0c1BhcmFtcyBhbmQgY2FsbCB0aGUgQVBJIHRvIHNob3cgaW5zaWdodHMgY2FyZCBwcmV2aWV3IGZvciB0YWJsZS5cblx0ICogQHBhcmFtIGNhcmQgVGhlIGNhcmQgbWFuaWZlc3QgdG8gYmUgdXNlZCBmb3IgdGhlIGNhbGxiYWNrXG5cdCAqIEByZXR1cm5zIFVuZGVmaW5lZCBpZiBjYXJkIHByZXZpZXcgaXMgcmVuZGVyZWQuXG5cdCAqL1xuXHRhc3luYyBvbkFkZENhcmRUb0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FsbGJhY2sodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcsIGNhcmQ6IENhcmRNYW5pZmVzdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoY2FyZCkge1xuXHRcdFx0XHRhd2FpdCBJbnNpZ2h0c1NlcnZpY2Uuc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyQ2FyZFByZXZpZXcoY2FyZCwgdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpLmNvbGxhYm9yYXRpb25NYW5hZ2VyLmdldFNlcnZpY2UoKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRzaG93R2VuZXJpY0Vycm9yTWVzc2FnZSh0aGlzLmdldENvbnRlbnQoKSk7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBpbnNpZ2h0c1BhcmFtcyBhbmQgY2FsbCB0aGUgQVBJIHRvIHNob3cgaW5zaWdodHMgY2FyZCBwcmV2aWV3IGZvciB0YWJsZS5cblx0ICogQHJldHVybnMgVW5kZWZpbmVkIGlmIHRoZSBjYXJkIHByZXZpZXcgaXMgcmVuZGVyZWQuXG5cdCAqL1xuXHRhc3luYyBfb25BZGRDYXJkVG9JbnNpZ2h0c1ByZXNzZWQodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaW5zaWdodHNSZWxldmFudENvbHVtbnMgPSBUYWJsZUluc2lnaHRzSGVscGVyLmdldEluc2lnaHRzUmVsZXZhbnRDb2x1bW5zKHRoaXMpO1xuXHRcdFx0Y29uc3QgaW5zaWdodHNQYXJhbXMgPSBhd2FpdCBUYWJsZUluc2lnaHRzSGVscGVyLmNyZWF0ZVRhYmxlQ2FyZFBhcmFtcyhcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0aW5zaWdodHNSZWxldmFudENvbHVtbnMsXG5cdFx0XHRcdHRoaXMuZ2V0U29ydENvbmRpdGlvbnNRdWVyeSgpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGluc2lnaHRzUGFyYW1zKSB7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2U6IENhcmRNZXNzYWdlID0gaW5zaWdodHNQYXJhbXMucGFyYW1ldGVycy5pc05hdmlnYXRpb25FbmFibGVkXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IHRoaXMuY3JlYXRlTmF2aWdhdGlvbkVycm9yTWVzc2FnZSh0aGlzLmdldENvbnRlbnQoKSlcblx0XHRcdFx0XHQgIH07XG5cblx0XHRcdFx0SW5zaWdodHNTZXJ2aWNlLnNob3dJbnNpZ2h0c0NhcmRQcmV2aWV3KGluc2lnaHRzUGFyYW1zLCBtZXNzYWdlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHNob3dHZW5lcmljRXJyb3JNZXNzYWdlKHRoaXMuZ2V0Q29udGVudCgpKTtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlTmF2aWdhdGlvbkVycm9yTWVzc2FnZShzY29wZTogQ29udHJvbCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbChzY29wZSk7XG5cdFx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fUk9XX0xFVkVMX05BVklHQVRJT05fRElTQUJMRURfTVNHX1JFQVNPTl9FWFRFUk5BTF9OQVZJR0FUSU9OX0NPTkZJR1VSRURcIik7XG5cdH1cblxuXHRhc3luYyBnZXREb3dubG9hZFVybFdpdGhGaWx0ZXJzKHRoaXM6IElUYWJsZUJsb2NrICYgVGFibGVTaGFyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCB0YWJsZSA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGUuZ2V0RmlsdGVyKCkpIGFzIEZpbHRlckJhciB8IHVuZGVmaW5lZDtcblxuXHRcdGlmICghZmlsdGVyQmFyKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJmaWx0ZXIgYmFyIGlzIG5vdCBhdmFpbGFibGVcIik7XG5cdFx0fVxuXHRcdGNvbnN0IGJpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0Y29uc3QgbW9kZWwgPSB0YWJsZS5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWw7XG5cdFx0Y29uc3QgZmlsdGVyUHJvcFNWID0gYXdhaXQgKGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEkpLmdldFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHQvLyBpZ25vcmUgZmlsdGVycyB3aXRoIHNlbWFudGljIG9wZXJhdG9ycyB3aGljaCBuZWVkcyB0byBiZSBhZGRlZCBsYXRlciBhcyBmaWx0ZXJzIHdpdGggZmxwIHNlbWFudGljIGRhdGUgcGxhY2Vob2xkZXJzXG5cdFx0Y29uc3QgZmlsdGVyc1dpdGhTZW1hbnRpY0RhdGVPcHNJbmZvID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljT3BzRmlsdGVyUHJvcGVydGllcyhmaWx0ZXJQcm9wU1YuX2dldFNlbGVjdE9wdGlvbnMoKSk7XG5cdFx0Y29uc3QgZmlsdGVyc1dpdGhvdXRTZW1hbnRpY0RhdGVPcHMgPSBUYWJsZVV0aWxzLmdldEFsbEZpbHRlckluZm8oXG5cdFx0XHR0YWJsZSxcblx0XHRcdGZpbHRlcnNXaXRoU2VtYW50aWNEYXRlT3BzSW5mby5tYXAoKGZpbHRlckluZm8pID0+IGZpbHRlckluZm8uZmlsdGVyTmFtZSlcblx0XHQpO1xuXHRcdGNvbnN0IHByb3BlcnRpZXNJbmZvID0gZmlsdGVyQmFyLmdldFByb3BlcnR5SW5mb1NldCgpO1xuXHRcdC8vIGdldCB0aGUgZmlsdGVycyB3aXRoIHNlbWFudGljIGRhdGUgb3BlcmF0b3JzIHdpdGggZmxwIHBsYWNlaG9sZGVyIGZvcm1hdCBhbmQgYXBwZW5kIHRvIHRoZSBleGlzaXRpbmcgZmlsdGVyc1xuXHRcdGNvbnN0IFtmbHBNYXBwZWRQbGFjZWhvbGRlcnMsIHNlbWFudGljRGF0ZUZpbHRlcnNdID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZUZpbHRlcnNXaXRoRmxwUGxhY2Vob2xkZXJzKFxuXHRcdFx0ZmlsdGVyc1dpdGhTZW1hbnRpY0RhdGVPcHNJbmZvLFxuXHRcdFx0cHJvcGVydGllc0luZm9cblx0XHQpO1xuXG5cdFx0bGV0IGFsbFJlbGV2YW50RmlsdGVyczogRmlsdGVyW10gPSBbXTtcblx0XHRpZiAoZmlsdGVyc1dpdGhvdXRTZW1hbnRpY0RhdGVPcHMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhbGxSZWxldmFudEZpbHRlcnMgPSBhbGxSZWxldmFudEZpbHRlcnMuY29uY2F0KGZpbHRlcnNXaXRob3V0U2VtYW50aWNEYXRlT3BzLmZpbHRlcnMpO1xuXHRcdH1cblx0XHRpZiAoc2VtYW50aWNEYXRlRmlsdGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhbGxSZWxldmFudEZpbHRlcnMucHVzaCguLi5zZW1hbnRpY0RhdGVGaWx0ZXJzKTtcblx0XHR9XG5cdFx0Y29uc3QgYWxsRmlsdGVycyA9IG5ldyBGaWx0ZXIoe1xuXHRcdFx0ZmlsdGVyczogYWxsUmVsZXZhbnRGaWx0ZXJzLFxuXHRcdFx0YW5kOiB0cnVlXG5cdFx0fSk7XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IHtcblx0XHRcdCRzZWFyY2g6IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oZmlsdGVyQmFyLmdldFNlYXJjaCgpKSB8fCB1bmRlZmluZWRcblx0XHR9O1xuXHRcdC8vIGNyZWF0ZSBoaWRkZW4gYmluZGluZyB3aXRoIGFsbCBmaWx0ZXJzIGUuZy4gc3RhdGljIGZpbHRlcnMgYW5kIGZpbHRlcnMgd2l0aCBzZW1hbnRpYyBvcGVyYXRvcnNcblx0XHRjb25zdCB0ZW1wVGFibGVCaW5kaW5nID0gbW9kZWwuYmluZExpc3QoYmluZGluZy5nZXRQYXRoKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhbGxGaWx0ZXJzLCBwYXJhbWV0ZXJzKTtcblx0XHRsZXQgdXJsID0gKGF3YWl0IHRlbXBUYWJsZUJpbmRpbmcucmVxdWVzdERvd25sb2FkVXJsKCkpID8/IFwiXCI7XG5cdFx0Zm9yIChjb25zdCBbcGxhY2Vob2xkZXIsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmbHBNYXBwZWRQbGFjZWhvbGRlcnMpKSB7XG5cdFx0XHR1cmwgPSB1cmwucmVwbGFjZShwbGFjZWhvbGRlciwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdXJsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc29ydCBjb25kaXRpb25zIHF1ZXJ5IHN0cmluZy5cblx0ICogQHJldHVybnMgVGhlIHNvcnQgY29uZGl0aW9ucyBxdWVyeSBzdHJpbmdcblx0ICovXG5cdGdldFNvcnRDb25kaXRpb25zUXVlcnkodGhpczogSVRhYmxlQmxvY2sgJiBUYWJsZVNoYXJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHRhYmxlID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0Y29uc3Qgc29ydENvbmRpdGlvbnMgPSAodGFibGUuZ2V0U29ydENvbmRpdGlvbnMoKSBhcyBTb3J0Q29uZGl0aW9ucyk/LnNvcnRlcnM7XG5cdFx0cmV0dXJuIHNvcnRDb25kaXRpb25zXG5cdFx0XHQ/IHNvcnRDb25kaXRpb25zXG5cdFx0XHRcdFx0Lm1hcChmdW5jdGlvbiAoc29ydENvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc29ydENvbmRpdGlvbnNQYXRoID0gdGFibGUuZ2V0UHJvcGVydHlIZWxwZXIoKS5nZXRQcm9wZXJ0eShzb3J0Q29uZGl0aW9uLm5hbWUpPy5wYXRoO1xuXHRcdFx0XHRcdFx0aWYgKHNvcnRDb25kaXRpb25zUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYCR7c29ydENvbmRpdGlvbnNQYXRofSR7c29ydENvbmRpdGlvbi5kZXNjZW5kaW5nID8gXCIgZGVzY1wiIDogXCJcIn1gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuam9pbihcIixcIilcblx0XHRcdDogXCJcIjtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBc0NBO0FBQ0E7QUFDQTtFQUZBLElBR3FCQSxZQUFZLElBQUFDLElBQUEsR0ErRi9CQywwQkFBMEIsQ0FBQyxzQkFBc0IsRUFBRSx1QkFBdUIsQ0FBQyxFQUFBQyxNQUFBO0lBQUEsU0FBQUgsYUFBQTtJQUFBSSxRQUFBLEdBQUFKLFlBQUE7SUFBQSxJQUFBSyxNQUFBLEdBQUFMLFlBQUEsQ0FBQU0sU0FBQTtJQUFBRCxNQUFBLENBOUY1RUUsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUNDLFVBQW9CLEVBQVEsQ0FBQyxDQUFDO0lBQUFILE1BQUEsQ0FFekNJLG1DQUFtQyxHQUFuQyxTQUFBQSxtQ0FBbUNBLENBRWxDQyxVQUEwQixFQUMxQkMsUUFBbUIsRUFDbkJDLHdCQUFnQyxFQUN6QjtNQUNQLElBQUlELFFBQVEsQ0FBQ0UsTUFBTSxJQUFJRCx3QkFBd0IsRUFBRTtRQUNoREQsUUFBUSxDQUFDRyxPQUFPLENBQUMsTUFBT0MsT0FBZ0IsSUFBSztVQUM1QyxNQUFNQyxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUNDLDZCQUE2QixDQUFD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
|
|
@@ -137,8 +137,17 @@ export default class TableSharing implements IInterfaceWithMixin {
|
|
|
137
137
|
@controllerExtensionHandler("collaborationManager", "collectAvailableCards")
|
|
138
138
|
async collectAvailableCards(this: ITableBlock & TableSharing, cards: WrappedCard[]): Promise<void> {
|
|
139
139
|
const actionToolbarItems = this.getContent().getActions() as ActionToolbarAction[];
|
|
140
|
+
const appComponent = this.getPageController()?.getAppComponent();
|
|
141
|
+
const isFclModeObjectPageOpen = appComponent?._isFclEnabled()
|
|
142
|
+
? (appComponent?.getRootViewController() as FclController)?.getRightmostView?.()?.getViewData()?.converterType === "ObjectPage"
|
|
143
|
+
: false;
|
|
140
144
|
if (
|
|
141
|
-
hasInsightActionEnabled(
|
|
145
|
+
hasInsightActionEnabled(
|
|
146
|
+
actionToolbarItems,
|
|
147
|
+
this.getContent().getFilter(),
|
|
148
|
+
TableInsightsHelper.getInsightsRelevantColumns(this)
|
|
149
|
+
) &&
|
|
150
|
+
!isFclModeObjectPageOpen
|
|
142
151
|
) {
|
|
143
152
|
const card = await this.getCardManifestTable();
|
|
144
153
|
if (Object.keys(card).length > 0) {
|