@sapui5/sap.fe.macros 1.138.0 → 1.139.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/Chart.js +1 -1
- package/src/sap/fe/macros/Chart.tsx +1 -1
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +21 -4
- package/src/sap/fe/macros/Field.ts +21 -3
- package/src/sap/fe/macros/FooterContent.js +40 -10
- package/src/sap/fe/macros/FooterContent.tsx +44 -8
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MultiValueField.js +17 -4
- package/src/sap/fe/macros/MultiValueField.tsx +7 -2
- package/src/sap/fe/macros/RichTextEditor.js +30 -6
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
- package/src/sap/fe/macros/Share.js +73 -40
- package/src/sap/fe/macros/Share.tsx +29 -1
- package/src/sap/fe/macros/ValueHelp.js +4 -29
- package/src/sap/fe/macros/ValueHelp.tsx +2 -43
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +86 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +97 -2
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/Section.js +3 -2
- package/src/sap/fe/macros/controls/Section.ts +2 -1
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
- package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/Form.block.js +6 -2
- package/src/sap/fe/macros/form/Form.block.ts +4 -1
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -6
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
- package/src/sap/fe/macros/messagebundle.properties +37 -29
- package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
- package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
- package/src/sap/fe/macros/messagebundle_da.properties +6 -4
- package/src/sap/fe/macros/messagebundle_de.properties +11 -9
- package/src/sap/fe/macros/messagebundle_el.properties +7 -5
- package/src/sap/fe/macros/messagebundle_en.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_es.properties +6 -4
- package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
- package/src/sap/fe/macros/messagebundle_et.properties +5 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
- package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
- package/src/sap/fe/macros/messagebundle_id.properties +8 -6
- package/src/sap/fe/macros/messagebundle_it.properties +4 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
- package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
- package/src/sap/fe/macros/messagebundle_no.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
- package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
- package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_th.properties +4 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
- package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
- package/src/sap/fe/macros/messages/MessageButton.js +17 -19
- package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +32 -6
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/Table.js +7 -1
- package/src/sap/fe/macros/table/Table.tsx +7 -1
- package/src/sap/fe/macros/table/TableAPI.js +150 -133
- package/src/sap/fe/macros/table/TableAPI.ts +20 -3
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableRuntime.js +3 -3
- package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
- package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
- package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
- package/src/sap/fe/macros/table/TreeTable.js +7 -1
- package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
|
@@ -9,13 +9,19 @@ import type {
|
|
|
9
9
|
} from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
10
10
|
import Log from "sap/base/Log";
|
|
11
11
|
import deepClone from "sap/base/util/deepClone";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
compileExpression,
|
|
14
|
+
isPathInModelExpression,
|
|
15
|
+
resolveBindingString,
|
|
16
|
+
type CompiledBindingToolkitExpression
|
|
17
|
+
} from "sap/fe/base/BindingToolkit";
|
|
13
18
|
import type { PropertiesOf, XMLEventHolder } from "sap/fe/base/ClassSupport";
|
|
14
19
|
import { aggregation, defineUI5Class, event, implementInterface, mixin, property, xmlEventHandler } from "sap/fe/base/ClassSupport";
|
|
15
20
|
import jsx from "sap/fe/base/jsx-runtime/jsx";
|
|
16
21
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
17
22
|
import type IRowBindingInterface from "sap/fe/core/IRowBindingInterface";
|
|
18
23
|
import type PageController from "sap/fe/core/PageController";
|
|
24
|
+
import type ResourceModel from "sap/fe/core/ResourceModel";
|
|
19
25
|
import type BuildingBlock from "sap/fe/core/buildingBlocks/BuildingBlock";
|
|
20
26
|
import { parseXMLString, xml } from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor";
|
|
21
27
|
import NotApplicableContextDialog from "sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog";
|
|
@@ -48,6 +54,7 @@ import { type DisplayMode } from "sap/fe/core/templating/DisplayModeFormatter";
|
|
|
48
54
|
import * as UIFormatters from "sap/fe/core/templating/UIFormatters";
|
|
49
55
|
import type { CollectionBindingInfo, EventHandler } from "sap/fe/macros/CollectionBindingInfo";
|
|
50
56
|
import MacroAPI from "sap/fe/macros/MacroAPI";
|
|
57
|
+
import type FilterBar from "sap/fe/macros/controls/FilterBar";
|
|
51
58
|
import type ISingleSectionContributor from "sap/fe/macros/controls/section/ISingleSectionContributor";
|
|
52
59
|
import type { ConsumerData } from "sap/fe/macros/controls/section/ISingleSectionContributor";
|
|
53
60
|
import * as FieldTemplating from "sap/fe/macros/field/FieldTemplating";
|
|
@@ -93,7 +100,6 @@ import { TitleLevel } from "sap/ui/core/library";
|
|
|
93
100
|
import Message from "sap/ui/core/message/Message";
|
|
94
101
|
import type MessageType from "sap/ui/core/message/MessageType";
|
|
95
102
|
import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
|
|
96
|
-
import type FilterBar from "sap/ui/mdc/FilterBar";
|
|
97
103
|
import type {
|
|
98
104
|
default as MDCTable,
|
|
99
105
|
MDCTablePropertyInfo as PropertyInfo,
|
|
@@ -436,6 +442,9 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
436
442
|
@property({ type: "int" })
|
|
437
443
|
threshold?: number;
|
|
438
444
|
|
|
445
|
+
@property({ type: "string", allowedValues: ["Block", "GridLarge", "GridSmall"] })
|
|
446
|
+
popinLayout?: string;
|
|
447
|
+
|
|
439
448
|
@property({ type: "boolean" })
|
|
440
449
|
isSearchable?: boolean;
|
|
441
450
|
|
|
@@ -782,7 +791,7 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
782
791
|
*/
|
|
783
792
|
async addMessage(parameters: { type?: MessageType; message?: string; description?: string; persistent?: boolean }): Promise<string> {
|
|
784
793
|
const table = this.getContent();
|
|
785
|
-
if (!table.getBindingContext()) {
|
|
794
|
+
if (!table.getBindingContext() && !table.getRowBinding()) {
|
|
786
795
|
await new Promise<void>((resolve) => {
|
|
787
796
|
const checkContextChange = function (): void {
|
|
788
797
|
if (table.getBindingContext()) {
|
|
@@ -1521,6 +1530,13 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
1521
1530
|
}
|
|
1522
1531
|
): Promise<unknown> {
|
|
1523
1532
|
parameters.model = oEvent.getSource().getModel() as ODataModel;
|
|
1533
|
+
const labelExpression = resolveBindingString(parameters.label, "string");
|
|
1534
|
+
if (isPathInModelExpression(labelExpression) && (labelExpression.modelName === "i18n" || labelExpression.modelName === "@i18n")) {
|
|
1535
|
+
//resolveBindingString(parameters.label, "string")
|
|
1536
|
+
parameters.label =
|
|
1537
|
+
(oEvent.getSource().getModel(labelExpression.modelName) as ResourceModel).getProperty(labelExpression.path) ??
|
|
1538
|
+
parameters.label;
|
|
1539
|
+
}
|
|
1524
1540
|
let executeAction = true;
|
|
1525
1541
|
if (parameters.notApplicableContexts && parameters.notApplicableContexts.length > 0) {
|
|
1526
1542
|
// If we have non applicable contexts, we need to open a dialog to ask the user if he wants to continue
|
|
@@ -2225,6 +2241,7 @@ class TableAPI extends MacroAPI implements ISingleSectionContributor, IRowBindin
|
|
|
2225
2241
|
TableAPI.addSetting(tableSettings, "disableCopyToClipboard", this.disableCopyToClipboard);
|
|
2226
2242
|
TableAPI.addSetting(tableSettings, "scrollThreshold", this.scrollThreshold);
|
|
2227
2243
|
TableAPI.addSetting(tableSettings, "threshold", this.threshold);
|
|
2244
|
+
TableAPI.addSetting(tableSettings, "popinLayout", this.popinLayout);
|
|
2228
2245
|
TableAPI.addSetting(tableSettings, "selectionMode", this.selectionMode);
|
|
2229
2246
|
TableAPI.addSetting(tableSettings, "type", this.type);
|
|
2230
2247
|
TableAPI.addSetting(tableSettings, "enablePastingOfComputedProperties", this.enablePastingOfComputedProperties);
|
|
@@ -180,7 +180,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/ManifestSettings", "sap/f
|
|
|
180
180
|
enableOnSelect: action.enableOnSelect,
|
|
181
181
|
visible: action.visible,
|
|
182
182
|
enabled: action.enabled,
|
|
183
|
-
isAIOperation: action.isAIOperation
|
|
183
|
+
isAIOperation: action.isAIOperation,
|
|
184
|
+
priority: action.priority,
|
|
185
|
+
group: action.group ?? 0 // Default group to 0 if not defined
|
|
184
186
|
};
|
|
185
187
|
if (action.isA("sap.fe.macros.table.Action")) {
|
|
186
188
|
actions[key] = {
|
|
@@ -234,4 +236,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/ManifestSettings", "sap/f
|
|
|
234
236
|
}
|
|
235
237
|
return _exports;
|
|
236
238
|
}, false);
|
|
237
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVUYWJsZURlZmluaXRpb24iLCJ0YWJsZUFQSSIsIm93bmVyIiwiX2dldE93bmVyIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsIm1ldGFQYXRoQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0RnVsbE1ldGFQYXRoIiwiY29udGV4dFBhdGhDb250ZXh0IiwiY29udGV4dFBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaW5pdGlhbENvbnZlcnRlckNvbnRleHQiLCJNYWNyb0FQSSIsImdldENvbnZlcnRlckNvbnRleHQiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJtb2RlbHMiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwidmlzdWFsaXphdGlvblBhdGgiLCJnZXRWaXN1YWxpemF0aW9uUGF0aCIsInRhYmxlU2V0dGluZ3MiLCJnZXRTZXR0aW5nc0Zvck1hbmlmZXN0IiwiZXh0cmFNYW5pZmVzdFNldHRpbmdzIiwiYWN0aW9ucyIsImNvbHVtbnMiLCJhZGRTbG90Q29sdW1uc1RvRXh0cmFNYW5pZmVzdCIsImFkZFNsb3RBY3Rpb25zVG9FeHRyYU1hbmlmZXN0IiwiZXh0cmFQYXJhbXMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQiLCJhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFBhdGgiLCJzdk9iamVjdFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImluTXVsdGlWaWV3IiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldEVudGl0eVR5cGUiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInVzZUNvbmRlbnNlZExheW91dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInZpc3VhbGl6YXRpb25zIiwiZmluZCIsInZpeiIsInR5cGUiLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwiX2V4cG9ydHMiLCJpc0Fubm90YXRpb25PZlRlcm0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbiIsInRlcm0iLCJsaW5lSXRlbVZpeiIsInZpc3VhbGl6YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMiLCJvYmoiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInVuZGVmaW5lZCIsImN1c3RvbUNvbHVtbkRlZmluaXRpb24iLCJjb2x1bW4iLCJpc0NvbHVtbiIsImlzQSIsImhlYWRlciIsIndpZHRoIiwiaW1wb3J0YW5jZSIsImhvcml6b250YWxBbGlnbiIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiZXhwb3J0U2V0dGluZ3MiLCJwcm9wZXJ0aWVzIiwidG9vbHRpcCIsInRlbXBsYXRlIiwiYXZhaWxhYmlsaXR5IiwicmVxdWlyZWQiLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJwb3NpdGlvbiIsImFkZEFjdGlvblRvRXh0cmFNYW5pZmVzdCIsImFjdGlvbiIsImNvbW1hbmQiLCJlbmFibGVPblNlbGVjdCIsInZpc2libGUiLCJlbmFibGVkIiwiaXNBSU9wZXJhdGlvbiIsInRleHQiLCJfX25vV3JhcCIsInByZXNzIiwicmVxdWlyZXNTZWxlY3Rpb24iLCJhZnRlckV4ZWN1dGlvbiIsImVuYWJsZUF1dG9TY3JvbGwiLCJuYXZpZ2F0ZVRvSW5zdGFuY2UiLCJlbnRyaWVzIiwibGVuZ3RoIiwiZGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwiYWN0aW9uc1NldHRpbmdzIiwibWVudSIsIm1hcCIsInN1YkFjdGlvbiIsImRlZmF1bHRBY3Rpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlRhYmxlRGVmaW5pdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRVSUFubm90YXRpb25UZXJtcyxcblx0dHlwZSBMaW5lSXRlbSxcblx0dHlwZSBQcmVzZW50YXRpb25WYXJpYW50LFxuXHR0eXBlIFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdHR5cGUgU2VsZWN0aW9uVmFyaWFudCxcblx0dHlwZSBTZWxlY3Rpb25WYXJpYW50VHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQge1xuXHRWaXN1YWxpemF0aW9uVHlwZSxcblx0dHlwZSBBdmFpbGFiaWxpdHlUeXBlLFxuXHR0eXBlIEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbixcblx0dHlwZSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0dHlwZSBJbXBvcnRhbmNlLFxuXHR0eXBlIFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgdHlwZSBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgdHlwZSBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7XG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbixcblx0dHlwZSBWaXN1YWxpemF0aW9uQW5kUGF0aFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7IHR5cGUgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyB0eXBlIFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLCB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTWFjcm9BUEkgZnJvbSBcIi4uL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb24gZnJvbSBcIi4vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Hcm91cCBmcm9tIFwiLi9BY3Rpb25Hcm91cFwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vQWN0aW9uT3ZlcnJpZGVcIjtcbmltcG9ydCB0eXBlIENvbHVtbiBmcm9tIFwiLi9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCIuL1RhYmxlQVBJXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUYWJsZURlZmluaXRpb24odGFibGVBUEk6IFRhYmxlQVBJKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0Y29uc3Qgb3duZXIgPSB0YWJsZUFQSS5fZ2V0T3duZXIoKTtcblx0Y29uc3QgbWV0YU1vZGVsID0gb3duZXI/LmdldE1ldGFNb2RlbCgpO1xuXHRpZiAoIW93bmVyIHx8ICFtZXRhTW9kZWwpIHtcblx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEgdGFibGUgZGVmaW5pdGlvbiBmb3IgYSBUYWJsZUFQSSB3aXRob3V0IGFuIG93bmVyIG9yIGEgbWV0YW1vZGVsXCIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgYSB0YWJsZSBkZWZpbml0aW9uIGZvciBhIFRhYmxlQVBJIHdpdGhvdXQgYW4gb3duZXIgb3IgYSBtZXRhbW9kZWxcIik7XG5cdH1cblx0Y29uc3QgbWV0YVBhdGhDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLmdldEZ1bGxNZXRhUGF0aCgpKTtcblx0Y29uc3QgY29udGV4dFBhdGhDb250ZXh0ID0gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlQVBJLmNvbnRleHRQYXRoKTtcblx0aWYgKCFtZXRhUGF0aENvbnRleHQgfHwgIWNvbnRleHRQYXRoQ29udGV4dCkge1xuXHRcdExvZy5lcnJvcihgSW5jb3JyZWN0IG1ldGFQYXRoICgke3RhYmxlQVBJLm1ldGFQYXRofSkgb3IgY29udGV4dFBhdGggKCR7dGFibGVBUEkuY29udGV4dFBhdGh9KSBmb3IgdGFibGVBUElgKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3QgbWV0YVBhdGggb3IgY29udGV4dFBhdGggZm9yIHRhYmxlQVBJXCIpO1xuXHR9XG5cblx0dGFibGVBUEkuY29udGV4dE9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8TGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4oXG5cdFx0bWV0YVBhdGhDb250ZXh0LFxuXHRcdGNvbnRleHRQYXRoQ29udGV4dFxuXHQpO1xuXG5cdGNvbnN0IGluaXRpYWxDb252ZXJ0ZXJDb250ZXh0ID0gTWFjcm9BUEkuZ2V0Q29udmVydGVyQ29udGV4dCh0YWJsZUFQSS5jb250ZXh0T2JqZWN0UGF0aCwgdGFibGVBUEkuY29udGV4dFBhdGgsIHtcblx0XHRhcHBDb21wb25lbnQ6IG93bmVyLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdG1vZGVsczogb3duZXIucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzXG5cdH0gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyk7XG5cdGNvbnN0IHZpc3VhbGl6YXRpb25QYXRoID0gZ2V0VmlzdWFsaXphdGlvblBhdGgodGFibGVBUEkuY29udGV4dE9iamVjdFBhdGgsIGluaXRpYWxDb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRjb25zdCB0YWJsZVNldHRpbmdzID0gdGFibGVBUEkuZ2V0U2V0dGluZ3NGb3JNYW5pZmVzdCgpO1xuXG5cdGNvbnN0IGV4dHJhTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSB7XG5cdFx0YWN0aW9uczoge30sXG5cdFx0Y29sdW1uczoge30sXG5cdFx0dGFibGVTZXR0aW5nc1xuXHR9O1xuXG5cdC8vIFByb2Nlc3MgY3VzdG9tIGFjdGlvbnMgYW5kIGNvbHVtbnNcblx0YWRkU2xvdENvbHVtbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEksIGV4dHJhTWFuaWZlc3RTZXR0aW5ncyk7XG5cdGFkZFNsb3RBY3Rpb25zVG9FeHRyYU1hbmlmZXN0KHRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3MpO1xuXG5cdGNvbnN0IGV4dHJhUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRleHRyYVBhcmFtc1t2aXN1YWxpemF0aW9uUGF0aF0gPSBleHRyYU1hbmlmZXN0U2V0dGluZ3M7XG5cdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBNYWNyb0FQSS5nZXRDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoLFxuXHRcdHRhYmxlQVBJLmNvbnRleHRQYXRoLFxuXHRcdHtcblx0XHRcdGFwcENvbXBvbmVudDogb3duZXI/LmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0bW9kZWxzOiBvd25lcj8ucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzXG5cdFx0fSBhcyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzLFxuXHRcdGV4dHJhUGFyYW1zXG5cdCk7XG5cblx0bGV0IGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlQVBJLmFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50UGF0aCkge1xuXHRcdGNvbnN0IHN2T2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxTZWxlY3Rpb25WYXJpYW50Pihcblx0XHRcdG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YWJsZUFQSS5hc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFBhdGgpISxcblx0XHRcdGNvbnRleHRQYXRoQ29udGV4dFxuXHRcdCk7XG5cdFx0YXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQgPSBzdk9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0KHRhYmxlQVBJLmluTXVsdGlWaWV3ICYmIHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdFxuXHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0dGFibGVBUEkuY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgodGFibGVBUEkuY29udGV4dE9iamVjdFBhdGgpKSBhcyBzdHJpbmcsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHR7XG5cdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiB0YWJsZUFQSS51c2VDb25kZW5zZWRMYXlvdXQsXG5cdFx0XHRhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdGlzTWFjcm9Pck11bHRpcGxlVmlldzogdGFibGVBUEkuaW5NdWx0aVZpZXcgPz8gdHJ1ZVxuXHRcdH1cblx0KTtcblxuXHQvLyB0YWtlIHRoZSAoZmlyc3QpIFRhYmxlIHZpc3VhbGl6YXRpb25cblx0cmV0dXJuIHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnZpc3VhbGl6YXRpb25zLmZpbmQoXG5cdFx0KHZpejogVGFibGVWaXN1YWxpemF0aW9uIHwgQ2hhcnRWaXN1YWxpemF0aW9uKSA9PiB2aXoudHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGVcblx0KSBhcyBUYWJsZVZpc3VhbGl6YXRpb247XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYW5ub3RhdGlvbiBwYXRoIHBvaW50aW5nIHRvIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gKExpbmVJdGVtKS5cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aCBUaGUgZGF0YW1vZGVsIG9iamVjdCBwYXRoIGZvciB0aGUgdGFibGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGFubm90YXRpb24gcGF0aFxuICovXG5mdW5jdGlvbiBnZXRWaXN1YWxpemF0aW9uUGF0aChcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogc3RyaW5nIHtcblx0Y29uc3QgbWV0YVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGNvbnRleHRPYmplY3RQYXRoKSBhcyBzdHJpbmc7XG5cblx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBMaW5lSXRlbSBpZiBtZXRhcGF0aCBpcyBub3Qgc2V0XG5cdGlmICghbWV0YVBhdGgpIHtcblx0XHRMb2cuZXJyb3IoYE1pc3NpbmcgbWV0YSBwYXRoIHBhcmFtZXRlciBmb3IgTGluZUl0ZW1gKTtcblx0XHRyZXR1cm4gYEAke1VJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtfWA7XG5cdH1cblxuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUZXJtPExpbmVJdGVtPihjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtKSkge1xuXHRcdHJldHVybiBtZXRhUGF0aDsgLy8gTWV0YVBhdGggaXMgYWxyZWFkeSBwb2ludGluZyB0byBhIExpbmVJdGVtXG5cdH1cblx0Ly9OZWVkIHRvIHN3aXRjaCB0byB0aGUgY29udGV4dCByZWxhdGVkIHRoZSBQViBvciBTUFZcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKG1ldGFQYXRoKTtcblxuXHRsZXQgdmlzdWFsaXphdGlvbnM6IFZpc3VhbGl6YXRpb25BbmRQYXRoW10gPSBbXTtcblx0aWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVGVybTxTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50Pihjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHx8XG5cdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPFByZXNlbnRhdGlvblZhcmlhbnQ+KGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgVUlBbm5vdGF0aW9uVGVybXMuUHJlc2VudGF0aW9uVmFyaWFudClcblx0KSB7XG5cdFx0dmlzdWFsaXphdGlvbnMgPSBnZXRWaXN1YWxpemF0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgbWV0YVBhdGgsIHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQsIHRydWUpO1xuXHR9IGVsc2Uge1xuXHRcdExvZy5lcnJvcihgQmFkIG1ldGFwYXRoIHBhcmFtZXRlciBmb3IgdGFibGUgOiAke2NvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdCEudGVybX1gKTtcblx0fVxuXG5cdGNvbnN0IGxpbmVJdGVtVml6ID0gdmlzdWFsaXphdGlvbnMuZmluZCgodml6KSA9PiB7XG5cdFx0cmV0dXJuIHZpei52aXN1YWxpemF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLkxpbmVJdGVtO1xuXHR9KTtcblxuXHRpZiAobGluZUl0ZW1WaXopIHtcblx0XHRyZXR1cm4gbGluZUl0ZW1WaXouYW5ub3RhdGlvblBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZmFsbGJhY2sgdG8gZGVmYXVsdCBMaW5lSXRlbSBpZiBhbm5vdGF0aW9uIG1pc3NpbmcgaW4gUFZcblx0XHRMb2cuZXJyb3IoYEJhZCBtZXRhIHBhdGggcGFyYW1ldGVyIGZvciBMaW5lSXRlbTogJHtjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QhLnRlcm19YCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gOyAvLyBGYWxsYmFja1xuXHR9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgcHJvcGVydGllcyB3aXRoIHRoZSB2YWx1ZSBvZiB1bmRlZmluZWQgZnJvbSB0aGUgb2JqZWN0LlxuICogQHBhcmFtIG9iaiBUaGUgb2JqZWN0IHRvIHJlbW92ZSB0aGUgdW5kZWZpbmVkIHByb3BlcnRpZXMgZnJvbVxuICovXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcblx0T2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRpZiAob2JqW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZGVsZXRlIG9ialtrZXldO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2xvdCBjb2x1bW5zIHRvIHRoZSBleHRyYSBtYW5pZmVzdCBzZXR0aW5ncy5cbiAqIEBwYXJhbSB0YWJsZUFQSVxuICogQHBhcmFtIGV4dHJhTWFuaWZlc3RTZXR0aW5nc1xuICovXG5mdW5jdGlvbiBhZGRTbG90Q29sdW1uc1RvRXh0cmFNYW5pZmVzdCh0YWJsZUFQSTogVGFibGVBUEksIGV4dHJhTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0bGV0IGN1c3RvbUNvbHVtbkRlZmluaXRpb246IEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbiB8IChDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSAmIHsga2V5OiBzdHJpbmcgfSk7XG5cblx0dGFibGVBUEkuY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG5cdFx0Y29uc3QgaXNDb2x1bW4gPSBjb2x1bW4uaXNBPENvbHVtbj4oXCJzYXAuZmUubWFjcm9zLnRhYmxlLkNvbHVtblwiKTtcblx0XHRpZiAoaXNDb2x1bW4pIHtcblx0XHRcdGN1c3RvbUNvbHVtbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdGhlYWRlcjogY29sdW1uLmhlYWRlcixcblx0XHRcdFx0d2lkdGg6IGNvbHVtbi53aWR0aCxcblx0XHRcdFx0aW1wb3J0YW5jZTogY29sdW1uLmltcG9ydGFuY2UgYXMgSW1wb3J0YW5jZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBjb2x1bW4uaG9yaXpvbnRhbEFsaWduLFxuXHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogY29sdW1uLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRwcm9wZXJ0aWVzOiBjb2x1bW4ucHJvcGVydGllcyxcblx0XHRcdFx0dG9vbHRpcDogY29sdW1uLnRvb2x0aXAsXG5cdFx0XHRcdHRlbXBsYXRlOiBjb2x1bW4udGVtcGxhdGUhLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IGNvbHVtbi5hdmFpbGFiaWxpdHkgYXMgQXZhaWxhYmlsaXR5VHlwZSxcblx0XHRcdFx0cmVxdWlyZWQ6IGNvbHVtbi5yZXF1aXJlZCxcblx0XHRcdFx0dHlwZTogXCJTbG90XCJcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1c3RvbUNvbHVtbkRlZmluaXRpb24gPSB7XG5cdFx0XHRcdGtleTogY29sdW1uLmtleSxcblx0XHRcdFx0d2lkdGg6IGNvbHVtbi53aWR0aCxcblx0XHRcdFx0aW1wb3J0YW5jZTogY29sdW1uLmltcG9ydGFuY2UgYXMgSW1wb3J0YW5jZSxcblx0XHRcdFx0aG9yaXpvbnRhbEFsaWduOiBjb2x1bW4uaG9yaXpvbnRhbEFsaWduLFxuXHRcdFx0XHR3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjogY29sdW1uLndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyLFxuXHRcdFx0XHRleHBvcnRTZXR0aW5nczogY29sdW1uLmV4cG9ydFNldHRpbmdzLFxuXHRcdFx0XHRhdmFpbGFiaWxpdHk6IGNvbHVtbi5hdmFpbGFiaWxpdHkgYXMgQXZhaWxhYmlsaXR5VHlwZVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgYWxsIHVuZGVmaW5lZCBwcm9wZXJ0aWVzLCBzbyB0aGF0IHRoZXkgZG9uJ3QgZXJhc2Ugd2hhdCBpcyBzZXQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0Ly8gKG5lY2Vzc2FyeSBiZWNhdXNlIG1hbmlmZXN0LWJhc2VkIGNvbHVtbnMgYXJlIHRyYW5zZm9ybWVkIGludG8gc2xvdCBjb2x1bW5zIGFuZCB3ZSBkb24ndCBjb3B5XG5cdFx0Ly8gYWxsIHRoZWlyIHByb3BlcnRpZXMgaW4gdGhlIFhNTClcblx0XHRyZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKGN1c3RvbUNvbHVtbkRlZmluaXRpb24pO1xuXG5cdFx0aWYgKGlzQ29sdW1uICYmIChjb2x1bW4uYW5jaG9yIHx8IGNvbHVtbi5wbGFjZW1lbnQpKSB7XG5cdFx0XHRjdXN0b21Db2x1bW5EZWZpbml0aW9uLnBvc2l0aW9uID0ge1xuXHRcdFx0XHRhbmNob3I6IGNvbHVtbi5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogKGNvbHVtbi5wbGFjZW1lbnQgPz8gXCJBZnRlclwiKSBhcyBQbGFjZW1lbnRcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZXh0cmFNYW5pZmVzdFNldHRpbmdzLmNvbHVtbnMhW2NvbHVtbi5rZXldID0gY3VzdG9tQ29sdW1uRGVmaW5pdGlvbjtcblx0fSk7XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2xvdCBhY3Rpb25zIHRvIHRoZSBleHRyYSBtYW5pZmVzdCBzZXR0aW5ncy5cbiAqIEBwYXJhbSB0YWJsZUFQSVxuICogQHBhcmFtIGV4dHJhTWFuaWZlc3RTZXR0aW5nc1xuICovXG5mdW5jdGlvbiBhZGRTbG90QWN0aW9uc1RvRXh0cmFNYW5pZmVzdCh0YWJsZUFQSTogVGFibGVBUEksIGV4dHJhTWFuaWZlc3RTZXR0aW5nczogVGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0ZnVuY3Rpb24gYWRkQWN0aW9uVG9FeHRyYU1hbmlmZXN0KGFjdGlvbjogQWN0aW9uIHwgQWN0aW9uT3ZlcnJpZGUpOiB2b2lkIHtcblx0XHRjb25zdCBhY3Rpb25zID0gZXh0cmFNYW5pZmVzdFNldHRpbmdzLmFjdGlvbnMhO1xuXHRcdGNvbnN0IGtleSA9IGFjdGlvbi5rZXk7XG5cdFx0YWN0aW9uc1trZXldID0ge1xuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0cGxhY2VtZW50OiAoYWN0aW9uLnBsYWNlbWVudCA/PyBcIkFmdGVyXCIpIGFzIFBsYWNlbWVudCxcblx0XHRcdFx0YW5jaG9yOiBhY3Rpb24uYW5jaG9yXG5cdFx0XHR9LFxuXHRcdFx0Y29tbWFuZDogYWN0aW9uLmNvbW1hbmQsXG5cdFx0XHRlbmFibGVPblNlbGVjdDogYWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0dmlzaWJsZTogYWN0aW9uLnZpc2libGUsXG5cdFx0XHRlbmFibGVkOiBhY3Rpb24uZW5hYmxlZCxcblx0XHRcdGlzQUlPcGVyYXRpb246IGFjdGlvbi5pc0FJT3BlcmF0aW9uXG5cdFx0fTtcblx0XHRpZiAoYWN0aW9uLmlzQTxBY3Rpb24+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5BY3Rpb25cIikpIHtcblx0XHRcdGFjdGlvbnNba2V5XSA9IHtcblx0XHRcdFx0Li4uYWN0aW9uc1trZXldLFxuXHRcdFx0XHR0ZXh0OiBhY3Rpb24udGV4dCxcblx0XHRcdFx0X19ub1dyYXA6IHRydWUsXG5cdFx0XHRcdHByZXNzOiBcInNvbWUgaGFuZGxlclwiLCAvLyBUaGUgcmVhbCBoYW5kbGVyIHdpbGwgYmUgdHJpZ2dlcmVkIGJ5IGZpcmluZyB0aGUgZXZlbnQgb24gdGhlIEFjdGlvbiBvYmplY3Rcblx0XHRcdFx0cmVxdWlyZXNTZWxlY3Rpb246IGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvblxuXHRcdFx0fTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYWZ0ZXJFeGVjdXRpb24gPSB7XG5cdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBhY3Rpb25bXCJlbmFibGVBdXRvU2Nyb2xsXCJdLFxuXHRcdFx0bmF2aWdhdGVUb0luc3RhbmNlOiBhY3Rpb25bXCJuYXZpZ2F0ZVRvSW5zdGFuY2VcIl1cblx0XHR9O1xuXHRcdHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMoYWZ0ZXJFeGVjdXRpb24pO1xuXHRcdGFjdGlvbnNba2V5XSA9IHtcblx0XHRcdC4uLmFjdGlvbnNba2V5XSxcblx0XHRcdGFmdGVyRXhlY3V0aW9uOiBPYmplY3QuZW50cmllcyhhZnRlckV4ZWN1dGlvbikubGVuZ3RoID8gYWZ0ZXJFeGVjdXRpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRnVuY3Rpb246IGFjdGlvbi5kZWZhdWx0VmFsdWVzRnVuY3Rpb25cblx0XHR9O1xuXHR9XG5cblx0dGFibGVBUEkuYWN0aW9ucz8uZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbi5pc0E8QWN0aW9uPihcInNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uXCIpIHx8IGFjdGlvbi5pc0E8QWN0aW9uT3ZlcnJpZGU+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5BY3Rpb25PdmVycmlkZVwiKSkge1xuXHRcdFx0Ly8gQWN0aW9uIG9yIEFjdGlvbk92ZXJyaWRlXG5cdFx0XHRhZGRBY3Rpb25Ub0V4dHJhTWFuaWZlc3QoYWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgYWN0aW9uc1NldHRpbmdzID0gZXh0cmFNYW5pZmVzdFNldHRpbmdzLmFjdGlvbnMhO1xuXHRcdFx0Y29uc3Qga2V5ID0gYWN0aW9uLmtleTtcblx0XHRcdGFjdGlvbnNTZXR0aW5nc1trZXldID0ge1xuXHRcdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRcdHBsYWNlbWVudDogKGFjdGlvbi5wbGFjZW1lbnQgPz8gXCJBZnRlclwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdFx0YW5jaG9yOiBhY3Rpb24uYW5jaG9yXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lbnU6IGFjdGlvbi5hY3Rpb25zLm1hcCgoc3ViQWN0aW9uKSA9PiBzdWJBY3Rpb24ua2V5KVxuXHRcdFx0fTtcblx0XHRcdGlmIChhY3Rpb24uaXNBPEFjdGlvbkdyb3VwPihcInNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uR3JvdXBcIikpIHtcblx0XHRcdFx0YWN0aW9uc1NldHRpbmdzW2tleV0gPSB7XG5cdFx0XHRcdFx0Li4uYWN0aW9uc1NldHRpbmdzW2tleV0sXG5cdFx0XHRcdFx0dGV4dDogYWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbjogYWN0aW9uLmRlZmF1bHRBY3Rpb24sXG5cdFx0XHRcdFx0X19ub1dyYXA6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGFjdGlvbi5hY3Rpb25zLmZvckVhY2goKHN1YkFjdGlvbikgPT4ge1xuXHRcdFx0XHRhZGRBY3Rpb25Ub0V4dHJhTWFuaWZlc3Qoc3ViQWN0aW9uKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0VBc0NPLFNBQVNBLHFCQUFxQkEsQ0FBQ0MsUUFBa0IsRUFBc0I7SUFDN0UsTUFBTUMsS0FBSyxHQUFHRCxRQUFRLENBQUNFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU1DLFNBQVMsR0FBR0YsS0FBSyxFQUFFRyxZQUFZLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUNILEtBQUssSUFBSSxDQUFDRSxTQUFTLEVBQUU7TUFDekJFLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLGlGQUFpRixDQUFDO01BQzVGLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGlGQUFpRixDQUFDO0lBQ25HO0lBQ0EsTUFBTUMsZUFBZSxHQUFHTCxTQUFTLENBQUNNLG9CQUFvQixDQUFDVCxRQUFRLENBQUNVLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDbEYsTUFBTUMsa0JBQWtCLEdBQUdSLFNBQVMsQ0FBQ00sb0JBQW9C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
|
|
239
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVUYWJsZURlZmluaXRpb24iLCJ0YWJsZUFQSSIsIm93bmVyIiwiX2dldE93bmVyIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsIm1ldGFQYXRoQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0RnVsbE1ldGFQYXRoIiwiY29udGV4dFBhdGhDb250ZXh0IiwiY29udGV4dFBhdGgiLCJtZXRhUGF0aCIsImNvbnRleHRPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaW5pdGlhbENvbnZlcnRlckNvbnRleHQiLCJNYWNyb0FQSSIsImdldENvbnZlcnRlckNvbnRleHQiLCJhcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJtb2RlbHMiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwidmlzdWFsaXphdGlvblBhdGgiLCJnZXRWaXN1YWxpemF0aW9uUGF0aCIsInRhYmxlU2V0dGluZ3MiLCJnZXRTZXR0aW5nc0Zvck1hbmlmZXN0IiwiZXh0cmFNYW5pZmVzdFNldHRpbmdzIiwiYWN0aW9ucyIsImNvbHVtbnMiLCJhZGRTbG90Q29sdW1uc1RvRXh0cmFNYW5pZmVzdCIsImFkZFNsb3RBY3Rpb25zVG9FeHRyYU1hbmlmZXN0IiwiZXh0cmFQYXJhbXMiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQiLCJhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFBhdGgiLCJzdk9iamVjdFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImluTXVsdGlWaWV3IiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdldEVudGl0eVR5cGUiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiaXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudCIsInVzZUNvbmRlbnNlZExheW91dCIsImlzTWFjcm9Pck11bHRpcGxlVmlldyIsInZpc3VhbGl6YXRpb25zIiwiZmluZCIsInZpeiIsInR5cGUiLCJWaXN1YWxpemF0aW9uVHlwZSIsIlRhYmxlIiwiX2V4cG9ydHMiLCJpc0Fubm90YXRpb25PZlRlcm0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbiIsInRlcm0iLCJsaW5lSXRlbVZpeiIsInZpc3VhbGl6YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMiLCJvYmoiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInVuZGVmaW5lZCIsImN1c3RvbUNvbHVtbkRlZmluaXRpb24iLCJjb2x1bW4iLCJpc0NvbHVtbiIsImlzQSIsImhlYWRlciIsIndpZHRoIiwiaW1wb3J0YW5jZSIsImhvcml6b250YWxBbGlnbiIsIndpZHRoSW5jbHVkaW5nQ29sdW1uSGVhZGVyIiwiZXhwb3J0U2V0dGluZ3MiLCJwcm9wZXJ0aWVzIiwidG9vbHRpcCIsInRlbXBsYXRlIiwiYXZhaWxhYmlsaXR5IiwicmVxdWlyZWQiLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJwb3NpdGlvbiIsImFkZEFjdGlvblRvRXh0cmFNYW5pZmVzdCIsImFjdGlvbiIsImNvbW1hbmQiLCJlbmFibGVPblNlbGVjdCIsInZpc2libGUiLCJlbmFibGVkIiwiaXNBSU9wZXJhdGlvbiIsInByaW9yaXR5IiwiZ3JvdXAiLCJ0ZXh0IiwiX19ub1dyYXAiLCJwcmVzcyIsInJlcXVpcmVzU2VsZWN0aW9uIiwiYWZ0ZXJFeGVjdXRpb24iLCJlbmFibGVBdXRvU2Nyb2xsIiwibmF2aWdhdGVUb0luc3RhbmNlIiwiZW50cmllcyIsImxlbmd0aCIsImRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsImFjdGlvbnNTZXR0aW5ncyIsIm1lbnUiLCJtYXAiLCJzdWJBY3Rpb24iLCJkZWZhdWx0QWN0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUYWJsZURlZmluaXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdHR5cGUgTGluZUl0ZW0sXG5cdHR5cGUgUHJlc2VudGF0aW9uVmFyaWFudCxcblx0dHlwZSBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHR0eXBlIFNlbGVjdGlvblZhcmlhbnQsXG5cdHR5cGUgU2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHtcblx0VmlzdWFsaXphdGlvblR5cGUsXG5cdHR5cGUgQXZhaWxhYmlsaXR5VHlwZSxcblx0dHlwZSBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4sXG5cdHR5cGUgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdHR5cGUgSW1wb3J0YW5jZSxcblx0dHlwZSBUYWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IHR5cGUgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IHR5cGUgQ2hhcnRWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0NoYXJ0XCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldFZpc3VhbGl6YXRpb25zRnJvbUFubm90YXRpb24sXG5cdHR5cGUgVmlzdWFsaXphdGlvbkFuZFBhdGhcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgeyB0eXBlIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uT2ZUZXJtIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCwgdHlwZSBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IE1hY3JvQVBJIGZyb20gXCIuLi9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uIGZyb20gXCIuL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uR3JvdXAgZnJvbSBcIi4vQWN0aW9uR3JvdXBcIjtcbmltcG9ydCB0eXBlIEFjdGlvbk92ZXJyaWRlIGZyb20gXCIuL0FjdGlvbk92ZXJyaWRlXCI7XG5pbXBvcnQgdHlwZSBDb2x1bW4gZnJvbSBcIi4vQ29sdW1uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwiLi9UYWJsZUFQSVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVEZWZpbml0aW9uKHRhYmxlQVBJOiBUYWJsZUFQSSk6IFRhYmxlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IG93bmVyID0gdGFibGVBUEkuX2dldE93bmVyKCk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG93bmVyPy5nZXRNZXRhTW9kZWwoKTtcblx0aWYgKCFvd25lciB8fCAhbWV0YU1vZGVsKSB7XG5cdFx0TG9nLmVycm9yKFwiQ2Fubm90IGNyZWF0ZSBhIHRhYmxlIGRlZmluaXRpb24gZm9yIGEgVGFibGVBUEkgd2l0aG91dCBhbiBvd25lciBvciBhIG1ldGFtb2RlbFwiKTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGEgdGFibGUgZGVmaW5pdGlvbiBmb3IgYSBUYWJsZUFQSSB3aXRob3V0IGFuIG93bmVyIG9yIGEgbWV0YW1vZGVsXCIpO1xuXHR9XG5cdGNvbnN0IG1ldGFQYXRoQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YWJsZUFQSS5nZXRGdWxsTWV0YVBhdGgoKSk7XG5cdGNvbnN0IGNvbnRleHRQYXRoQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dCh0YWJsZUFQSS5jb250ZXh0UGF0aCk7XG5cdGlmICghbWV0YVBhdGhDb250ZXh0IHx8ICFjb250ZXh0UGF0aENvbnRleHQpIHtcblx0XHRMb2cuZXJyb3IoYEluY29ycmVjdCBtZXRhUGF0aCAoJHt0YWJsZUFQSS5tZXRhUGF0aH0pIG9yIGNvbnRleHRQYXRoICgke3RhYmxlQVBJLmNvbnRleHRQYXRofSkgZm9yIHRhYmxlQVBJYCk7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IG1ldGFQYXRoIG9yIGNvbnRleHRQYXRoIGZvciB0YWJsZUFQSVwiKTtcblx0fVxuXG5cdHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KFxuXHRcdG1ldGFQYXRoQ29udGV4dCxcblx0XHRjb250ZXh0UGF0aENvbnRleHRcblx0KTtcblxuXHRjb25zdCBpbml0aWFsQ29udmVydGVyQ29udGV4dCA9IE1hY3JvQVBJLmdldENvbnZlcnRlckNvbnRleHQodGFibGVBUEkuY29udGV4dE9iamVjdFBhdGgsIHRhYmxlQVBJLmNvbnRleHRQYXRoLCB7XG5cdFx0YXBwQ29tcG9uZW50OiBvd25lci5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRtb2RlbHM6IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVsc1xuXHR9IGFzIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRjb25zdCB2aXN1YWxpemF0aW9uUGF0aCA9IGdldFZpc3VhbGl6YXRpb25QYXRoKHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoLCBpbml0aWFsQ29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgdGFibGVTZXR0aW5ncyA9IHRhYmxlQVBJLmdldFNldHRpbmdzRm9yTWFuaWZlc3QoKTtcblxuXHRjb25zdCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uID0ge1xuXHRcdGFjdGlvbnM6IHt9LFxuXHRcdGNvbHVtbnM6IHt9LFxuXHRcdHRhYmxlU2V0dGluZ3Ncblx0fTtcblxuXHQvLyBQcm9jZXNzIGN1c3RvbSBhY3Rpb25zIGFuZCBjb2x1bW5zXG5cdGFkZFNsb3RDb2x1bW5zVG9FeHRyYU1hbmlmZXN0KHRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3MpO1xuXHRhZGRTbG90QWN0aW9uc1RvRXh0cmFNYW5pZmVzdCh0YWJsZUFQSSwgZXh0cmFNYW5pZmVzdFNldHRpbmdzKTtcblxuXHRjb25zdCBleHRyYVBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0ZXh0cmFQYXJhbXNbdmlzdWFsaXphdGlvblBhdGhdID0gZXh0cmFNYW5pZmVzdFNldHRpbmdzO1xuXHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gTWFjcm9BUEkuZ2V0Q29udmVydGVyQ29udGV4dChcblx0XHR0YWJsZUFQSS5jb250ZXh0T2JqZWN0UGF0aCxcblx0XHR0YWJsZUFQSS5jb250ZXh0UGF0aCxcblx0XHR7XG5cdFx0XHRhcHBDb21wb25lbnQ6IG93bmVyPy5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdG1vZGVsczogb3duZXI/LnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVsc1xuXHRcdH0gYXMgVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncyxcblx0XHRleHRyYVBhcmFtc1xuXHQpO1xuXG5cdGxldCBhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdGlmICh0YWJsZUFQSS5hc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudFBhdGgpIHtcblx0XHRjb25zdCBzdk9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8U2VsZWN0aW9uVmFyaWFudD4oXG5cdFx0XHRtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQodGFibGVBUEkuYXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnRQYXRoKSEsXG5cdFx0XHRjb250ZXh0UGF0aENvbnRleHRcblx0XHQpO1xuXHRcdGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50ID0gc3ZPYmplY3RQYXRoLnRhcmdldE9iamVjdDtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdCh0YWJsZUFQSS5pbk11bHRpVmlldyAmJiB0YWJsZUFQSS5jb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Rcblx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdCAgKVxuXHRcdFx0OiBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKHRhYmxlQVBJLmNvbnRleHRPYmplY3RQYXRoKSkgYXMgc3RyaW5nLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0e1xuXHRcdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogdGFibGVBUEkudXNlQ29uZGVuc2VkTGF5b3V0LFxuXHRcdFx0YXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRhYmxlQVBJLmluTXVsdGlWaWV3ID8/IHRydWVcblx0XHR9XG5cdCk7XG5cblx0Ly8gdGFrZSB0aGUgKGZpcnN0KSBUYWJsZSB2aXN1YWxpemF0aW9uXG5cdHJldHVybiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi52aXN1YWxpemF0aW9ucy5maW5kKFxuXHRcdCh2aXo6IFRhYmxlVmlzdWFsaXphdGlvbiB8IENoYXJ0VmlzdWFsaXphdGlvbikgPT4gdml6LnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlXG5cdCkgYXMgVGFibGVWaXN1YWxpemF0aW9uO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFubm90YXRpb24gcGF0aCBwb2ludGluZyB0byB0aGUgdmlzdWFsaXphdGlvbiBhbm5vdGF0aW9uIChMaW5lSXRlbSkuXG4gKiBAcGFyYW0gY29udGV4dE9iamVjdFBhdGggVGhlIGRhdGFtb2RlbCBvYmplY3QgcGF0aCBmb3IgdGhlIHRhYmxlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0VmlzdWFsaXphdGlvblBhdGgoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHN0cmluZyB7XG5cdGNvbnN0IG1ldGFQYXRoID0gZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChjb250ZXh0T2JqZWN0UGF0aCkgYXMgc3RyaW5nO1xuXG5cdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgTGluZUl0ZW0gaWYgbWV0YXBhdGggaXMgbm90IHNldFxuXHRpZiAoIW1ldGFQYXRoKSB7XG5cdFx0TG9nLmVycm9yKGBNaXNzaW5nIG1ldGEgcGF0aCBwYXJhbWV0ZXIgZm9yIExpbmVJdGVtYCk7XG5cdFx0cmV0dXJuIGBAJHtVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbX1gO1xuXHR9XG5cblx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybTxMaW5lSXRlbT4oY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbSkpIHtcblx0XHRyZXR1cm4gbWV0YVBhdGg7IC8vIE1ldGFQYXRoIGlzIGFscmVhZHkgcG9pbnRpbmcgdG8gYSBMaW5lSXRlbVxuXHR9XG5cdC8vTmVlZCB0byBzd2l0Y2ggdG8gdGhlIGNvbnRleHQgcmVsYXRlZCB0aGUgUFYgb3IgU1BWXG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihtZXRhUGF0aCk7XG5cblx0bGV0IHZpc3VhbGl6YXRpb25zOiBWaXN1YWxpemF0aW9uQW5kUGF0aFtdID0gW107XG5cdGlmIChcblx0XHRpc0Fubm90YXRpb25PZlRlcm08U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4oY29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0LCBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB8fFxuXHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50Pihjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpXG5cdCkge1xuXHRcdHZpc3VhbGl6YXRpb25zID0gZ2V0VmlzdWFsaXphdGlvbnNGcm9tQW5ub3RhdGlvbihjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QsIG1ldGFQYXRoLCByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0fSBlbHNlIHtcblx0XHRMb2cuZXJyb3IoYEJhZCBtZXRhcGF0aCBwYXJhbWV0ZXIgZm9yIHRhYmxlIDogJHtjb250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QhLnRlcm19YCk7XG5cdH1cblxuXHRjb25zdCBsaW5lSXRlbVZpeiA9IHZpc3VhbGl6YXRpb25zLmZpbmQoKHZpeikgPT4ge1xuXHRcdHJldHVybiB2aXoudmlzdWFsaXphdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5MaW5lSXRlbTtcblx0fSk7XG5cblx0aWYgKGxpbmVJdGVtVml6KSB7XG5cdFx0cmV0dXJuIGxpbmVJdGVtVml6LmFubm90YXRpb25QYXRoO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgTGluZUl0ZW0gaWYgYW5ub3RhdGlvbiBtaXNzaW5nIGluIFBWXG5cdFx0TG9nLmVycm9yKGBCYWQgbWV0YSBwYXRoIHBhcmFtZXRlciBmb3IgTGluZUl0ZW06ICR7Y29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IS50ZXJtfWApO1xuXHRcdHJldHVybiBgQCR7VUlBbm5vdGF0aW9uVGVybXMuTGluZUl0ZW19YDsgLy8gRmFsbGJhY2tcblx0fVxufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIHByb3BlcnRpZXMgd2l0aCB0aGUgdmFsdWUgb2YgdW5kZWZpbmVkIGZyb20gdGhlIG9iamVjdC5cbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byByZW1vdmUgdGhlIHVuZGVmaW5lZCBwcm9wZXJ0aWVzIGZyb21cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0aWYgKG9ialtrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRlbGV0ZSBvYmpba2V5XTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNsb3QgY29sdW1ucyB0byB0aGUgZXh0cmEgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gdGFibGVBUElcbiAqIEBwYXJhbSBleHRyYU1hbmlmZXN0U2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gYWRkU2xvdENvbHVtbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEk6IFRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdGxldCBjdXN0b21Db2x1bW5EZWZpbml0aW9uOiBDdXN0b21EZWZpbmVkVGFibGVDb2x1bW4gfCAoQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgJiB7IGtleTogc3RyaW5nIH0pO1xuXG5cdHRhYmxlQVBJLmNvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuXHRcdGNvbnN0IGlzQ29sdW1uID0gY29sdW1uLmlzQTxDb2x1bW4+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5Db2x1bW5cIik7XG5cdFx0aWYgKGlzQ29sdW1uKSB7XG5cdFx0XHRjdXN0b21Db2x1bW5EZWZpbml0aW9uID0ge1xuXHRcdFx0XHRoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG5cdFx0XHRcdHdpZHRoOiBjb2x1bW4ud2lkdGgsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGNvbHVtbi5pbXBvcnRhbmNlIGFzIEltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogY29sdW1uLmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcixcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbi5leHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0cHJvcGVydGllczogY29sdW1uLnByb3BlcnRpZXMsXG5cdFx0XHRcdHRvb2x0aXA6IGNvbHVtbi50b29sdGlwLFxuXHRcdFx0XHR0ZW1wbGF0ZTogY29sdW1uLnRlbXBsYXRlISxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBjb2x1bW4uYXZhaWxhYmlsaXR5IGFzIEF2YWlsYWJpbGl0eVR5cGUsXG5cdFx0XHRcdHJlcXVpcmVkOiBjb2x1bW4ucmVxdWlyZWQsXG5cdFx0XHRcdHR5cGU6IFwiU2xvdFwiXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXN0b21Db2x1bW5EZWZpbml0aW9uID0ge1xuXHRcdFx0XHRrZXk6IGNvbHVtbi5rZXksXG5cdFx0XHRcdHdpZHRoOiBjb2x1bW4ud2lkdGgsXG5cdFx0XHRcdGltcG9ydGFuY2U6IGNvbHVtbi5pbXBvcnRhbmNlIGFzIEltcG9ydGFuY2UsXG5cdFx0XHRcdGhvcml6b250YWxBbGlnbjogY29sdW1uLmhvcml6b250YWxBbGlnbixcblx0XHRcdFx0d2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXI6IGNvbHVtbi53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcixcblx0XHRcdFx0ZXhwb3J0U2V0dGluZ3M6IGNvbHVtbi5leHBvcnRTZXR0aW5ncyxcblx0XHRcdFx0YXZhaWxhYmlsaXR5OiBjb2x1bW4uYXZhaWxhYmlsaXR5IGFzIEF2YWlsYWJpbGl0eVR5cGVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGFsbCB1bmRlZmluZWQgcHJvcGVydGllcywgc28gdGhhdCB0aGV5IGRvbid0IGVyYXNlIHdoYXQgaXMgc2V0IGluIHRoZSBtYW5pZmVzdFxuXHRcdC8vIChuZWNlc3NhcnkgYmVjYXVzZSBtYW5pZmVzdC1iYXNlZCBjb2x1bW5zIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIHNsb3QgY29sdW1ucyBhbmQgd2UgZG9uJ3QgY29weVxuXHRcdC8vIGFsbCB0aGVpciBwcm9wZXJ0aWVzIGluIHRoZSBYTUwpXG5cdFx0cmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhjdXN0b21Db2x1bW5EZWZpbml0aW9uKTtcblxuXHRcdGlmIChpc0NvbHVtbiAmJiAoY29sdW1uLmFuY2hvciB8fCBjb2x1bW4ucGxhY2VtZW50KSkge1xuXHRcdFx0Y3VzdG9tQ29sdW1uRGVmaW5pdGlvbi5wb3NpdGlvbiA9IHtcblx0XHRcdFx0YW5jaG9yOiBjb2x1bW4uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IChjb2x1bW4ucGxhY2VtZW50ID8/IFwiQWZ0ZXJcIikgYXMgUGxhY2VtZW50XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGV4dHJhTWFuaWZlc3RTZXR0aW5ncy5jb2x1bW5zIVtjb2x1bW4ua2V5XSA9IGN1c3RvbUNvbHVtbkRlZmluaXRpb247XG5cdH0pO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNsb3QgYWN0aW9ucyB0byB0aGUgZXh0cmEgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gdGFibGVBUElcbiAqIEBwYXJhbSBleHRyYU1hbmlmZXN0U2V0dGluZ3NcbiAqL1xuZnVuY3Rpb24gYWRkU2xvdEFjdGlvbnNUb0V4dHJhTWFuaWZlc3QodGFibGVBUEk6IFRhYmxlQVBJLCBleHRyYU1hbmlmZXN0U2V0dGluZ3M6IFRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdGZ1bmN0aW9uIGFkZEFjdGlvblRvRXh0cmFNYW5pZmVzdChhY3Rpb246IEFjdGlvbiB8IEFjdGlvbk92ZXJyaWRlKTogdm9pZCB7XG5cdFx0Y29uc3QgYWN0aW9ucyA9IGV4dHJhTWFuaWZlc3RTZXR0aW5ncy5hY3Rpb25zITtcblx0XHRjb25zdCBrZXkgPSBhY3Rpb24ua2V5O1xuXHRcdGFjdGlvbnNba2V5XSA9IHtcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGFjdGlvbi5wbGFjZW1lbnQgPz8gXCJBZnRlclwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdGFuY2hvcjogYWN0aW9uLmFuY2hvclxuXHRcdFx0fSxcblx0XHRcdGNvbW1hbmQ6IGFjdGlvbi5jb21tYW5kLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdHZpc2libGU6IGFjdGlvbi52aXNpYmxlLFxuXHRcdFx0ZW5hYmxlZDogYWN0aW9uLmVuYWJsZWQsXG5cdFx0XHRpc0FJT3BlcmF0aW9uOiBhY3Rpb24uaXNBSU9wZXJhdGlvbixcblx0XHRcdHByaW9yaXR5OiBhY3Rpb24ucHJpb3JpdHksXG5cdFx0XHRncm91cDogYWN0aW9uLmdyb3VwID8/IDAgLy8gRGVmYXVsdCBncm91cCB0byAwIGlmIG5vdCBkZWZpbmVkXG5cdFx0fTtcblx0XHRpZiAoYWN0aW9uLmlzQTxBY3Rpb24+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5BY3Rpb25cIikpIHtcblx0XHRcdGFjdGlvbnNba2V5XSA9IHtcblx0XHRcdFx0Li4uYWN0aW9uc1trZXldLFxuXHRcdFx0XHR0ZXh0OiBhY3Rpb24udGV4dCxcblx0XHRcdFx0X19ub1dyYXA6IHRydWUsXG5cdFx0XHRcdHByZXNzOiBcInNvbWUgaGFuZGxlclwiLCAvLyBUaGUgcmVhbCBoYW5kbGVyIHdpbGwgYmUgdHJpZ2dlcmVkIGJ5IGZpcmluZyB0aGUgZXZlbnQgb24gdGhlIEFjdGlvbiBvYmplY3Rcblx0XHRcdFx0cmVxdWlyZXNTZWxlY3Rpb246IGFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvblxuXHRcdFx0fTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYWZ0ZXJFeGVjdXRpb24gPSB7XG5cdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBhY3Rpb25bXCJlbmFibGVBdXRvU2Nyb2xsXCJdLFxuXHRcdFx0bmF2aWdhdGVUb0luc3RhbmNlOiBhY3Rpb25bXCJuYXZpZ2F0ZVRvSW5zdGFuY2VcIl1cblx0XHR9O1xuXHRcdHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMoYWZ0ZXJFeGVjdXRpb24pO1xuXHRcdGFjdGlvbnNba2V5XSA9IHtcblx0XHRcdC4uLmFjdGlvbnNba2V5XSxcblx0XHRcdGFmdGVyRXhlY3V0aW9uOiBPYmplY3QuZW50cmllcyhhZnRlckV4ZWN1dGlvbikubGVuZ3RoID8gYWZ0ZXJFeGVjdXRpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRnVuY3Rpb246IGFjdGlvbi5kZWZhdWx0VmFsdWVzRnVuY3Rpb25cblx0XHR9O1xuXHR9XG5cblx0dGFibGVBUEkuYWN0aW9ucz8uZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbi5pc0E8QWN0aW9uPihcInNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uXCIpIHx8IGFjdGlvbi5pc0E8QWN0aW9uT3ZlcnJpZGU+KFwic2FwLmZlLm1hY3Jvcy50YWJsZS5BY3Rpb25PdmVycmlkZVwiKSkge1xuXHRcdFx0Ly8gQWN0aW9uIG9yIEFjdGlvbk92ZXJyaWRlXG5cdFx0XHRhZGRBY3Rpb25Ub0V4dHJhTWFuaWZlc3QoYWN0aW9uKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgYWN0aW9uc1NldHRpbmdzID0gZXh0cmFNYW5pZmVzdFNldHRpbmdzLmFjdGlvbnMhO1xuXHRcdFx0Y29uc3Qga2V5ID0gYWN0aW9uLmtleTtcblx0XHRcdGFjdGlvbnNTZXR0aW5nc1trZXldID0ge1xuXHRcdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRcdHBsYWNlbWVudDogKGFjdGlvbi5wbGFjZW1lbnQgPz8gXCJBZnRlclwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdFx0YW5jaG9yOiBhY3Rpb24uYW5jaG9yXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lbnU6IGFjdGlvbi5hY3Rpb25zLm1hcCgoc3ViQWN0aW9uKSA9PiBzdWJBY3Rpb24ua2V5KVxuXHRcdFx0fTtcblx0XHRcdGlmIChhY3Rpb24uaXNBPEFjdGlvbkdyb3VwPihcInNhcC5mZS5tYWNyb3MudGFibGUuQWN0aW9uR3JvdXBcIikpIHtcblx0XHRcdFx0YWN0aW9uc1NldHRpbmdzW2tleV0gPSB7XG5cdFx0XHRcdFx0Li4uYWN0aW9uc1NldHRpbmdzW2tleV0sXG5cdFx0XHRcdFx0dGV4dDogYWN0aW9uLnRleHQsXG5cdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbjogYWN0aW9uLmRlZmF1bHRBY3Rpb24sXG5cdFx0XHRcdFx0X19ub1dyYXA6IHRydWVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGFjdGlvbi5hY3Rpb25zLmZvckVhY2goKHN1YkFjdGlvbikgPT4ge1xuXHRcdFx0XHRhZGRBY3Rpb25Ub0V4dHJhTWFuaWZlc3Qoc3ViQWN0aW9uKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0VBc0NPLFNBQVNBLHFCQUFxQkEsQ0FBQ0MsUUFBa0IsRUFBc0I7SUFDN0UsTUFBTUMsS0FBSyxHQUFHRCxRQUFRLENBQUNFLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU1DLFNBQVMsR0FBR0YsS0FBSyxFQUFFRyxZQUFZLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUNILEtBQUssSUFBSSxDQUFDRSxTQUFTLEVBQUU7TUFDekJFLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLGlGQUFpRixDQUFDO01BQzVGLE1BQU0sSUFBSUMsS0FBSyxDQUFDLGlGQUFpRixDQUFDO0lB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
|
|
@@ -245,7 +245,9 @@ function addSlotActionsToExtraManifest(tableAPI: TableAPI, extraManifestSettings
|
|
|
245
245
|
enableOnSelect: action.enableOnSelect,
|
|
246
246
|
visible: action.visible,
|
|
247
247
|
enabled: action.enabled,
|
|
248
|
-
isAIOperation: action.isAIOperation
|
|
248
|
+
isAIOperation: action.isAIOperation,
|
|
249
|
+
priority: action.priority,
|
|
250
|
+
group: action.group ?? 0 // Default group to 0 if not defined
|
|
249
251
|
};
|
|
250
252
|
if (action.isA<Action>("sap.fe.macros.table.Action")) {
|
|
251
253
|
actions[key] = {
|
|
@@ -246,8 +246,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
246
246
|
const movableDraft = table.getRowBinding().isRelative() || movedContext.getProperty("HasDraftEntity") !== true;
|
|
247
247
|
const outOfPlaceContext = movedContext.isTransient() !== undefined;
|
|
248
248
|
const customMovable = TableRuntime.checkIfNodeIsMovable(movedContext, table);
|
|
249
|
-
modelObjectPath.singleContextMovableUp = movableDraft && customMovable && !outOfPlaceContext && movedContext.getSibling(-1) !== null;
|
|
250
|
-
modelObjectPath.singleContextMovableDown = movableDraft && customMovable && !outOfPlaceContext && movedContext.getSibling(1) !== null;
|
|
249
|
+
modelObjectPath.singleContextMovableUp = movableDraft && customMovable && !outOfPlaceContext && !movedContext.isDeleted() && movedContext.getSibling(-1) !== null;
|
|
250
|
+
modelObjectPath.singleContextMovableDown = movableDraft && customMovable && !outOfPlaceContext && !movedContext.isDeleted() && movedContext.getSibling(1) !== null;
|
|
251
251
|
}
|
|
252
252
|
},
|
|
253
253
|
/**
|
|
@@ -547,4 +547,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonU
|
|
|
547
547
|
};
|
|
548
548
|
return TableRuntime;
|
|
549
549
|
}, false);
|
|
550
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJUYWJsZVJ1bnRpbWUiLCJleGVjdXRlQ29uZGl0aW9uYWxBY3Rpb25TaG9ydGN1dCIsInNCdXR0b25NYXRjaGVyIiwib1NvdXJjZSIsIm9NZGNUYWJsZSIsImdldFBhcmVudCIsIkNyZWF0aW9uUm93Iiwib0J1dHRvbiIsImdldEFjdGlvbnMiLCJyZWR1Y2UiLCJhQWN0aW9uQnV0dG9ucyIsIm9BY3Rpb25Ub29sYmFyQWN0aW9uIiwiY29uY2F0IiwiZ2V0QWN0aW9uIiwiZmluZCIsIm9BY3Rpb25CdXR0b24iLCJnZXRJZCIsImVuZHNXaXRoIiwiQ29tbW9uVXRpbHMiLCJmaXJlQnV0dG9uUHJlc3MiLCJvQ3JlYXRpb25Sb3ciLCJnZXRBZ2dyZWdhdGlvbiIsImdldEFwcGx5RW5hYmxlZCIsImdldFZpc2libGUiLCJmaXJlQXBwbHkiLCJzZXRDb250ZXh0cyIsImV2ZW50Iiwic291cmNlIiwiZ2V0U291cmNlIiwidGFibGUiLCJCdXN5TG9ja2VyIiwibG9jayIsInNldENvbnRleHRzQXN5bmMiLCJlcnJvciIsIkxvZyIsInVubG9jayIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidGFibGVBUEkiLCJ0YWJsZURlZmluaXRpb24iLCJjb2xsZWN0aW9uRW50aXR5IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsInRhcmdldCIsInNVcGRhdGFibGVQYXRoIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkIiwiZGF0YSIsInNwbGl0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiYURlbGV0YWJsZUNvbnRleHRzIiwiYlJlYWRPbmx5RHJhZnRFbmFibGVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhVXBkYXRhYmxlQ29udGV4dHMiLCJvRHluYW1pY0FjdGlvbnMiLCJvSUJOIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImFjdGl2ZVNlbGVjdGVkQ29udGV4dHMiLCJmaWx0ZXIiLCJvQ29udGV4dCIsImlzSW5hY3RpdmUiLCJvTW9kZWxPYmplY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRPYmplY3QiLCJzZWxlY3RlZENvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiZHluYW1pY0FjdGlvbnMiLCJpYm4iLCJkZWxldGVFbmFibGVkIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiY29udHJvbElkIiwidXBkYXRhYmxlQ29udGV4dHMiLCJwYXN0ZUF1dGhvcml6ZWQiLCJwYXN0ZUZyb21Db3B5QXV0b3JpemVkIiwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwibm9kZVVwZGF0ZXNJbmZvIiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImtleSIsImluZGV4T2YiLCJzQWN0aW9uUGF0aCIsInN1YnN0cmluZyIsImVuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzVXBkYXRhYmxlQ29udGV4dCIsInB1c2giLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwiZGlzYWJsZUFjdGlvbiIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwicGFyZW50Q29udGV4dCIsIl91cGRhdGVDcmVhdGVFbmFibGVtZW50Iiwibm9kZVR5cGUiLCJ1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50IiwidXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInNlbGVjdGVkQ29udGV4dCIsInJlYWRPbmx5RHJhZnRFbmFibGVkIiwiY29udGV4dERhdGEiLCJ1cGRhdGFibGVCeVBhdGgiLCJub3REcmFmdEluUmVhZE9ubHlNb2RlIiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNEcmFmdEVudGl0eSIsImNoZWNrSWZOb2RlSXNNb3ZhYmxlIiwibm9kZSIsImlzTm9kZU1vdmFibGVGdW5jdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTm9kZU1vdmFibGUiLCJub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsIndhcm5pbmciLCJjaGVja0lmTm9kZUlzQ29weWFibGUiLCJpc05vZGVDb3B5YWJsZUZ1bmN0aW9uIiwiaXNOb2RlQ29weWFibGUiLCJtb2RlbE9iamVjdCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwidHlwZSIsImNoZWNrRHJhZnRJbnN0YW5jZSIsImdldFJvd0JpbmRpbmciLCJpc1JlbGF0aXZlIiwiY29udGV4dG1lbnUiLCJjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mbyIsImRhdGFNb2RlbHNyYyIsImN1dGFibGVDb250ZXh0cyIsImNvbnRleHQiLCJjb3B5YWJsZUNvbnRleHRzIiwiY3V0RW5hYmxlbWVudCIsImNvcHlFbmFibGVtZW50IiwibGFzdEFjdGlvbiIsInBhc3RhYmxlQ29udGV4dHMiLCJjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudCIsImV4dGVuc2lvblBvaW50IiwiaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQiLCJpc0NvcHlUb1Bvc2l0aW9uQWxsb3dlZCIsInRhcmdldENvbnRleHQiLCJwYXN0ZUVuYWJsZW1lbnQiLCJtb2RlbE9iamVjdFBhdGgiLCJjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJzaW5nbGVDb250ZXh0TW92YWJsZVVwIiwic2luZ2xlQ29udGV4dE1vdmFibGVEb3duIiwibW92ZWRDb250ZXh0IiwibW92YWJsZURyYWZ0Iiwib3V0T2ZQbGFjZUNvbnRleHQiLCJpc1RyYW5zaWVudCIsImN1c3RvbU1vdmFibGUiLCJnZXRTaWJsaW5nIiwiaW50ZXJuYWxDb250ZXh0IiwiY3JlYXRlRW5hYmxlbWVudENhbGxiYWNrIiwibm9kZVR5cGVQYXJhbWV0ZXJzIiwicG9zc2libGVWYWx1ZXMiLCJ2YWx1ZXMiLCJtYXAiLCJvcHRpb24iLCJ2YWx1ZSIsImVuYWJsZW1lbnRGdW5jdGlvbiIsImVuYWJsZWRGbGFncyIsIl9lcnJvciIsImVuYWJsZW1lbnRNYXAiLCJzb21lIiwiZmxhZyIsImZvckVhY2giLCJpbmRleCIsImNvbnRleHRQYXRoIiwiY2xlYXJTZWxlY3Rpb24iLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInNBY3Rpb24iLCJiRW5hYmxlZCIsIm9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93Iiwib0V2ZW50Iiwid2l0aEN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsIm1GaWVsZCIsIkZpZWxkUnVudGltZUhlbHBlciIsImdldEZpZWxkU3RhdGVPbkNoYW5nZSIsIm9Tb3VyY2VGaWVsZCIsImZpZWxkIiwic0ZpZWxkSWQiLCJtRmllbGRWYWxpZGl0eSIsIm1OZXdGaWVsZFZhbGlkaXR5Iiwic3RhdGUiLCJtQ3VzdG9tVmFsaWRpdHkiLCJtTmV3Q3VzdG9tVmFsaWRpdHkiLCJnZXRCaW5kaW5nIiwiZ2V0UGF0aCIsImZpZWxkSWQiLCJzVGFyZ2V0IiwiZ2V0QmluZGluZ1BhdGgiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwib01lc3NhZ2UiLCJnZXRUYXJnZXRzIiwicmVtb3ZlTWVzc2FnZXMiLCJvblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicm93QmluZGluZyIsImdldENvbnRleHQiLCJnZXRJZ25vcmVDb250ZXh0Q2hhbmdlRXZlbnQiLCJhZ2dyZWdhdGlvbiIsImZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsImV4cGFuZFRvIiwic2VhcmNoIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsInNldEFnZ3JlZ2F0aW9uIiwib25DcmVhdGVNZW51SXRlbVByZXNzIiwidmFsdWVJbmRleCIsIm1kY1RhYmxlIiwiZ2V0TWRjVGFibGUiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsImNyZWF0aW9uRGF0YSIsInByb3BlcnR5TmFtZSIsImNyZWF0aW9uUGFyYW1ldGVycyIsImNyZWF0aW9uTW9kZSIsImNyZWF0ZSIsIm1vZGUiLCJ0YWJsZUlkIiwiQ3JlYXRpb25EaWFsb2ciLCJjcmVhdGlvbkRpYWxvZ0ZpZWxkcyIsInJlYmluZCIsImdldENvbnRyb2xsZXIiLCJlZGl0RmxvdyIsImNyZWF0ZURvY3VtZW50IiwiY2F0Y2giLCJvbkNyZWF0ZUJ1dHRvblByZXNzIiwiRXh0ZXJuYWwiLCJvdXRib3VuZCIsImNyZWF0aW9uUm93IiwiY3JlYXRlQXRFbmQiLCJOZXdQYWdlIiwiSW5saW5lIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiY3JlYXRlRW1wdHlSb3dzQW5kRm9jdXMiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwic0tleSIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJiRW5hYmxlZEZvckNvbnRleHRNZW51IiwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJzUHJvcGVydHkiLCJlbmFibGVkUHJvcGVydHkiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJvbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwic2V0Q29udGV4dE1lbnVBY3RpdmUiLCJzZXRUaW1lb3V0IiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwibWVzc2FnZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVSdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVCZWhhdmlvckV4dGVybmFsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgZGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ1RhYmxlLCBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDcmVhdGlvblJvdyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuXG5jb25zdCBDcmVhdGlvbk1vZGUgPSBGRUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSBUYWJsZSBidWlsZGluZyBibG9jayBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgaW50ZXJuYWwvZXhwZXJpbWVudGFsIHVzZSFcbiAqL1xuY29uc3QgVGFibGVSdW50aW1lID0ge1xuXHRleGVjdXRlQ29uZGl0aW9uYWxBY3Rpb25TaG9ydGN1dDogZnVuY3Rpb24gKHNCdXR0b25NYXRjaGVyOiBzdHJpbmcsIG9Tb3VyY2U6IENvbnRyb2wpOiB2b2lkIHtcblx0XHQvLyBHZXQgdGhlIGJ1dHRvbiByZWxhdGVkIHRvIGtleWJvYXJkIHNob3J0Y3V0XG5cdFx0Y29uc3Qgb01kY1RhYmxlID0gb1NvdXJjZS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHRpZiAoc0J1dHRvbk1hdGNoZXIgIT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdFx0Y29uc3Qgb0J1dHRvbiA9IG9NZGNUYWJsZVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5yZWR1Y2UoZnVuY3Rpb24gKGFBY3Rpb25CdXR0b25zOiBDb250cm9sW10sIG9BY3Rpb25Ub29sYmFyQWN0aW9uOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFBY3Rpb25CdXR0b25zLmNvbmNhdCgob0FjdGlvblRvb2xiYXJBY3Rpb24gYXMgQWN0aW9uVG9vbGJhckFjdGlvbikuZ2V0QWN0aW9uKCkpO1xuXHRcdFx0XHR9LCBbXSBhcyBDb250cm9sW10pXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQWN0aW9uQnV0dG9uOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb25CdXR0b24uZ2V0SWQoKS5lbmRzV2l0aChzQnV0dG9uTWF0Y2hlcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvQ3JlYXRpb25Sb3cgPSBvTWRjVGFibGUuZ2V0QWdncmVnYXRpb24oXCJjcmVhdGlvblJvd1wiKSBhcyBDcmVhdGlvblJvdztcblx0XHRcdGlmIChvQ3JlYXRpb25Sb3cgJiYgb0NyZWF0aW9uUm93LmdldEFwcGx5RW5hYmxlZCgpICYmIG9DcmVhdGlvblJvdy5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0b0NyZWF0aW9uUm93LmZpcmVBcHBseSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRzZXRDb250ZXh0czogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudDx7fSwgVGFibGU+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgdGFibGUgPSBzb3VyY2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRhYmxlKTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgVGFibGVSdW50aW1lLnNldENvbnRleHRzQXN5bmModGFibGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGFibGUpO1xuXHRcdH1cblx0fSxcblxuXHRzZXRDb250ZXh0c0FzeW5jOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkW10gfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0YWJsZS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyB1bmRlZmluZWQgfCBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghdGFibGVBUEkgfHwgIW1ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb247XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudGl0eSA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0VHlwZXMobWV0YU1vZGVsKS5yZXNvbHZlUGF0aDxFbnRpdHlTZXQ+KFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvblxuXHRcdCkudGFyZ2V0O1xuXHRcdGNvbnN0IHNVcGRhdGFibGVQYXRoID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udXBkYXRhYmxlUHJvcGVydHlQYXRoO1xuXG5cdFx0Y29uc3QgYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkID0gdGFibGUuZGF0YShcImFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkXCIpPy5zcGxpdChcIixcIikgPz8gW107XG5cdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UodGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCB8fCBcInt9XCIpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwID0gdGFibGUuZGF0YShcIm5hdmlnYXRpb25BdmFpbGFibGVNYXBcIik7XG5cblx0XHRjb25zdCBhU2VsZWN0ZWRDb250ZXh0cyA9IHRhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBDb250ZXh0W107XG5cdFx0Y29uc3QgYURlbGV0YWJsZUNvbnRleHRzOiBDb250ZXh0W10gPSBbXTtcblx0XHRjb25zdCBiUmVhZE9ubHlEcmFmdEVuYWJsZWQgPVxuXHRcdFx0dGFibGUuZGF0YShcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIpID09PSBcInRydWVcIiAmJiAhIWNvbGxlY3Rpb25FbnRpdHk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290O1xuXHRcdGNvbnN0IGFVcGRhdGFibGVDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0Ly8gb0R5bmFtaWNBY3Rpb25zIGFyZSBib3VuZCBhY3Rpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSBhY2NvcmRpbmcgdG8gc29tZSBwcm9wZXJ0eVxuXHRcdC8vIGluIGVhY2ggaXRlbVxuXHRcdGNvbnN0IG9EeW5hbWljQWN0aW9uczogUmVjb3JkPHN0cmluZywgeyBiRW5hYmxlZD86IGJvb2xlYW4gfT4gfCB1bmRlZmluZWQgPSB7fTtcblx0XHRjb25zdCBvSUJOID0ge307XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdGlmICghb0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIGZvciB0aGUgZGVsZXRlIHdlIGNvbnNpZGVyIHRoZSBpbmFjdGl2ZSBjb250ZXh0cyBhcyBwb3RlbnRpYWxseSBwYXJ0IG9mIHRoZSBzZWxlY3RlZCBjb250ZXh0c1xuXHRcdGRlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFTZWxlY3RlZENvbnRleHRzKTtcblxuXHRcdC8vZG8gbm90IGNvbnNpZGVyIGVtcHR5IHJvd3MgYXMgc2VsZWN0ZWQgY29udGV4dCwgZm9yIHRoZSBvdGhlciBhY3Rpb25zXG5cdFx0Y29uc3QgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyA9IGFTZWxlY3RlZENvbnRleHRzLmZpbHRlcihmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdHJldHVybiAhb0NvbnRleHQuaXNJbmFjdGl2ZSgpO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb01vZGVsT2JqZWN0ID0gT2JqZWN0LmFzc2lnbihvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCkgfHwge30sIHtcblx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzSW5jbHVkaW5nSW5hY3RpdmU6IGFTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCxcblx0XHRcdGR5bmFtaWNBY3Rpb25zOiBvRHluYW1pY0FjdGlvbnMsXG5cdFx0XHRpYm46IG9JQk4sXG5cdFx0XHRkZWxldGVFbmFibGVkOiB0cnVlLFxuXHRcdFx0ZGVsZXRhYmxlQ29udGV4dHM6IGFEZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHVuU2F2ZWRDb250ZXh0czogW10sXG5cdFx0XHRsb2NrZWRDb250ZXh0czogW10sXG5cdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBbXSxcblx0XHRcdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU6IFtdLFxuXHRcdFx0Y29udHJvbElkOiBcIlwiLFxuXHRcdFx0dXBkYXRhYmxlQ29udGV4dHM6IGFVcGRhdGFibGVDb250ZXh0cyxcblx0XHRcdHBhc3RlQXV0aG9yaXplZDogdHJ1ZSxcblx0XHRcdHBhc3RlRnJvbUNvcHlBdXRvcml6ZWQ6IHRydWUsXG5cdFx0XHRzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yXCIpXG5cdFx0XHRcdD8gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdH0pO1xuXHRcdG9Nb2RlbE9iamVjdC5ub2RlVXBkYXRlc0luZm8gPSBvTW9kZWxPYmplY3Qubm9kZVVwZGF0ZXNJbmZvIHx8IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBvU2VsZWN0ZWRDb250ZXh0IG9mIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvQ29udGV4dERhdGEpIHtcblx0XHRcdFx0aWYgKGtleS5pbmRleE9mKFwiI1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdGxldCBzQWN0aW9uUGF0aDogc3RyaW5nID0ga2V5O1xuXHRcdFx0XHRcdHNBY3Rpb25QYXRoID0gc0FjdGlvblBhdGguc3Vic3RyaW5nKDEsIHNBY3Rpb25QYXRoLmxlbmd0aCk7XG5cdFx0XHRcdFx0b01vZGVsT2JqZWN0LmR5bmFtaWNBY3Rpb25zW3NBY3Rpb25QYXRoXSA9IHsgZW5hYmxlZDogdHJ1ZSB9O1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIlwiLCBvTW9kZWxPYmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5pc1VwZGF0YWJsZUNvbnRleHQoc1VwZGF0YWJsZVBhdGgsIG9TZWxlY3RlZENvbnRleHQsIGJSZWFkT25seURyYWZ0RW5hYmxlZCkpIHtcblx0XHRcdFx0YVVwZGF0YWJsZUNvbnRleHRzLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCF0YWJsZS5kYXRhKFwiZW5hYmxlQW5hbHl0aWNzXCIpKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuc2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzKTtcblx0XHR9XG5cblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHR0aGlzLmRpc2FibGVBY3Rpb24oYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkLCBvRHluYW1pY0FjdGlvbnMpO1xuXHRcdH1cblxuXHRcdGlmIChvTW9kZWxPYmplY3QpIHtcblx0XHRcdG9Nb2RlbE9iamVjdFtcInVwZGF0YWJsZUNvbnRleHRzXCJdID0gYVVwZGF0YWJsZUNvbnRleHRzO1xuXHRcdFx0b01vZGVsT2JqZWN0W1wiY29udHJvbElkXCJdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIlwiLCBvTW9kZWxPYmplY3QpO1xuXHRcdH1cblxuXHRcdC8vIE1hbmFnZSBhIHBvdGVudGlhbCBjYWxsYmFjayB0byBlbmFibGUvZGlzYWJsZSB0aGUgY3JlYXRlIGJ1dHRvbi9tZW51IGZvciBhIFRyZWVUYWJsZVxuXHRcdGlmIChhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA8PSAxICYmIHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHBhcmVudENvbnRleHQgPSBhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA/IGFjdGl2ZVNlbGVjdGVkQ29udGV4dHNbMF0gOiBudWxsO1xuXHRcdFx0dGhpcy5fdXBkYXRlQ3JlYXRlRW5hYmxlbWVudChcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50LFxuXHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0cGFyZW50Q29udGV4dCxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50KG9Nb2RlbE9iamVjdCwgdGFibGUpO1xuXHRcdHRoaXMudXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQob01vZGVsT2JqZWN0LCB0YWJsZSk7XG5cdFx0cmV0dXJuIEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcywgaWYgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgdXBkYXRhYmxlIGZvciBNYXNzIEVkaXQuXG5cdCAqIEBwYXJhbSB1cGRhdGFibGVQcm9wZXJ0eVBhdGggVGhlIHVwZGF0YWJsZVByb3BlcnR5UGF0aCBmcm9tIHRoZSB0YWJsZSBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHQgVGhlIHNlbGVjdGVkIGNvbnRleHRcblx0ICogQHBhcmFtIHJlYWRPbmx5RHJhZnRFbmFibGVkIEluZGljYXRlcywgaWYgdGhlIHRhYmxlIGlzIHJlYWQgb25seSBhbmQgZHJhZnQgZW5hYmxlZFxuXHQgKiBAcmV0dXJucyBCb29sZWFuIEluZGljYXRpbmcgY29udGV4dCBpcyB1cGRhdGFibGVcblx0ICovXG5cdGlzVXBkYXRhYmxlQ29udGV4dDogZnVuY3Rpb24gKHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nLCBzZWxlY3RlZENvbnRleHQ6IENvbnRleHQsIHJlYWRPbmx5RHJhZnRFbmFibGVkOiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0LyogVGhlIHVwZGF0YWJsZSBjb250ZXh0cyB3aXRoIG1hc3MgZWRpdCBkZXBlbmQgb24gdGhlIGZvbGxvd2luZzpcblx0XHQgXHQxLiBVcGRhdGUgaXMgZGVwZW5kZW50IG9uIGN1cnJlbnQgZW50aXR5IHByb3BlcnR5ICh1cGRhdGFibGVQYXRoKS5cblx0XHQgXHQyLiBUaGUgdGFibGUgaXMgcmVhZCBvbmx5IGFuZCBkcmFmdCBlbmFibGVkIChsaWtlIExSKSwgaW4gdGhpcyBjYXNlIG9ubHkgYWN0aXZlIGNvbnRleHRzIGNhbiBiZSBtYXNzIGVkaXRlZCAobm90IGRyYWZ0IGNvbnRleHRzKS5cblx0XHQgICAgU28sIHVwZGF0ZSBkZXBlbmRzIG9uICdJc0FjdGl2ZUVudGl0eScsICdIYXNEcmFmdEVudGl0eScgIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQuICovXG5cdFx0Y29uc3QgY29udGV4dERhdGEgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3QgdXBkYXRhYmxlQnlQYXRoID0gdXBkYXRhYmxlUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCB8fCAhIXNlbGVjdGVkQ29udGV4dC5nZXRQcm9wZXJ0eSh1cGRhdGFibGVQcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IG5vdERyYWZ0SW5SZWFkT25seU1vZGUgPSAhcmVhZE9ubHlEcmFmdEVuYWJsZWQgfHwgKGNvbnRleHREYXRhLklzQWN0aXZlRW50aXR5ICYmICFjb250ZXh0RGF0YS5IYXNEcmFmdEVudGl0eSk7XG5cdFx0aWYgKHVwZGF0YWJsZUJ5UGF0aCAmJiBub3REcmFmdEluUmVhZE9ubHlNb2RlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIG5vZGUgaXMgbW92YWJsZSBhY2NvcmRpbmcgdG8gdGhlIGN1c3RvbSBsb2dpYyAoaWYgYW55KS5cblx0ICogQHBhcmFtIG5vZGVcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1c3RvbSBsb2dpYyBhbGxvd3MgdGhlIG5vZGUgdG8gYmUgbW92ZWQgKG9yIGlmIHRoZXJlJ3Mgbm8gY3VzdG9tIGxvZ2ljKSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRjaGVja0lmTm9kZUlzTW92YWJsZTogZnVuY3Rpb24gKG5vZGU6IENvbnRleHQsIHRhYmxlOiBUYWJsZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzTm9kZU1vdmFibGVGdW5jdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5pc05vZGVNb3ZhYmxlO1xuXHRcdGNvbnN0IG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPSBpc05vZGVNb3ZhYmxlRnVuY3Rpb25cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0OiBDb250ZXh0KSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc05vZGVNb3ZhYmxlRnVuY3Rpb24ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc05vZGVNb3ZhYmxlRnVuY3Rpb24ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0YWJsZVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbiA9PT0gdW5kZWZpbmVkIHx8IG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24obm9kZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy53YXJuaW5nKGBFcnJvciBpbiBjdXN0b20gZnVuY3Rpb24gZm9yIGlzTm9kZU1vdmFibGU6ICR7ZXJyb3J9YCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBub2RlIGNhbiBiZSBjb3BpZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXN0b20gbG9naWMsIGlmIGFueS5cblx0ICogQHBhcmFtIG5vZGVcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgY3VzdG9tIGxvZ2ljIGFsbG93cyB0aGUgbm9kZSB0byBiZSBjb3BpZWQgKG9yIGlmIG5vIGN1c3RvbSBsb2dpYyBpcyBkZWZpbmVkKTsgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0Y2hlY2tJZk5vZGVJc0NvcHlhYmxlOiBmdW5jdGlvbiAobm9kZTogQ29udGV4dCwgdGFibGU6IFRhYmxlKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNOb2RlQ29weWFibGVGdW5jdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5pc05vZGVDb3B5YWJsZTtcblx0XHRjb25zdCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID0gaXNOb2RlQ29weWFibGVGdW5jdGlvblxuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KGNvbnRleHQ6IENvbnRleHQpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTm9kZUNvcHlhYmxlRnVuY3Rpb24ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc05vZGVDb3B5YWJsZUZ1bmN0aW9uLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uKG5vZGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cud2FybmluZyhgRXJyb3IgaW4gY3VzdG9tIGZ1bmN0aW9uIGZvciBpc05vZGVNb3ZhYmxlOiAke2Vycm9yfWApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjb250ZXh0IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBDdXQgYW5kIFBhc3RlIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSBtb2RlbE9iamVjdCBJbnRlcm5hbCBjb250ZXh0IG9iamVjdCBvZiB0aGUgdGFibGVcblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBUYWJsZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdHVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChtb2RlbE9iamVjdDogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sIHRhYmxlOiBUYWJsZSwgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdC8vIFRoZSBsb2dpYyBiZWxvdyBvbmx5IG1ha2VzIHNlbnNlIGZvciBhIFRyZWUgVGFibGVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY2hlY2tEcmFmdEluc3RhbmNlID0gIXRhYmxlLmdldFJvd0JpbmRpbmcoKS5pc1JlbGF0aXZlKCk7XG5cblx0XHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdChtb2RlbE9iamVjdC5jb250ZXh0bWVudSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkubm9kZVVwZGF0ZXNJbmZvID0ge307XG5cdFx0fVxuXHRcdGNvbnN0IG5vZGVVcGRhdGVzSW5mbyA9IG1vZGVsT2JqZWN0Lm5vZGVVcGRhdGVzSW5mbyBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcblx0XHRjb25zdCBjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mbyA9ICgoIWZvckNvbnRleHRNZW51ID8gbW9kZWxPYmplY3QgOiBtb2RlbE9iamVjdC5jb250ZXh0bWVudSkgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pXG5cdFx0XHQubm9kZVVwZGF0ZXNJbmZvIGFzIHtcblx0XHRcdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdFx0fTtcblx0XHRjb25zdCBkYXRhTW9kZWxzcmMgPSAoIWZvckNvbnRleHRNZW51ID8gbW9kZWxPYmplY3QgOiBtb2RlbE9iamVjdC5jb250ZXh0bWVudSkgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cdFx0Y29uc3QgY3V0YWJsZUNvbnRleHRzID0gKGRhdGFNb2RlbHNyYy51cGRhdGFibGVDb250ZXh0cyBhcyBDb250ZXh0W10pLmZpbHRlcihcblx0XHRcdChjb250ZXh0KSA9PlxuXHRcdFx0XHRUYWJsZVJ1bnRpbWUuY2hlY2tJZk5vZGVJc01vdmFibGUoY29udGV4dCwgdGFibGUpICYmICghY2hlY2tEcmFmdEluc3RhbmNlIHx8IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSAhPT0gdHJ1ZSlcblx0XHQpO1xuXHRcdGNvbnN0IGNvcHlhYmxlQ29udGV4dHMgPSAoZGF0YU1vZGVsc3JjLnNlbGVjdGVkQ29udGV4dHMgYXMgQ29udGV4dFtdKS5maWx0ZXIoKGNvbnRleHQpID0+XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2hlY2tJZk5vZGVJc0NvcHlhYmxlKGNvbnRleHQsIHRhYmxlKVxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IGRhdGFNb2RlbHNyYy5zZWxlY3RlZENvbnRleHRzIGFzIENvbnRleHRbXTtcblx0XHRjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mby5jdXRFbmFibGVtZW50ID0gc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPT09IDEgJiYgY3V0YWJsZUNvbnRleHRzLmxlbmd0aCA9PT0gMTtcblx0XHRjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mby5jb3B5RW5hYmxlbWVudCA9IHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID09PSAxICYmIGNvcHlhYmxlQ29udGV4dHMubGVuZ3RoID09PSAxO1xuXG5cdFx0aWYgKG5vZGVVcGRhdGVzSW5mby5sYXN0QWN0aW9uICYmIChub2RlVXBkYXRlc0luZm8ucGFzdGFibGVDb250ZXh0cyBhcyBDb250ZXh0W10pLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCBjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudDogQ29udGV4dFtdO1xuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uUG9pbnQgPVxuXHRcdFx0XHRub2RlVXBkYXRlc0luZm8ubGFzdEFjdGlvbiA9PT0gXCJDdXRcIlxuXHRcdFx0XHRcdD8gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWRcblx0XHRcdFx0XHQ6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzQ29weVRvUG9zaXRpb25BbGxvd2VkO1xuXG5cdFx0XHQvL3JlbW92ZSBjb250ZXh0cyBkZXBlbmRpbmcgb2YgdGhlIGN1c3RvbSBmdW5jdGlvblxuXHRcdFx0aWYgKGV4dGVuc2lvblBvaW50KSB7XG5cdFx0XHRcdGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50ID0gWy4uLnNlbGVjdGVkQ29udGV4dHNdLmZpbHRlcihcblx0XHRcdFx0XHQodGFyZ2V0Q29udGV4dCkgPT5cblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0XHRleHRlbnNpb25Qb2ludC5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdGV4dGVuc2lvblBvaW50Lm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dGFibGVcblx0XHRcdFx0XHRcdFx0KSBhcyBGdW5jdGlvblxuXHRcdFx0XHRcdFx0KSgobm9kZVVwZGF0ZXNJbmZvLnBhc3RhYmxlQ29udGV4dHMgYXMgQ29udGV4dFtdKVswXSwgdGFyZ2V0Q29udGV4dCkgLy9ub2RlVXBkYXRlc0luZm8ucGFzdGFibGVDb250ZXh0cyBoYXMgYmVlbiB0aGUgbGFzdCB0aW1lIHRoZSB1c2VyIHByZXNzZWQgdGhlIGN1dC9jb3B5IGJ1dHRvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGV4dHNmb3JQYXN0YWJsZUVuYWJsZW1lbnQgPSBbLi4uc2VsZWN0ZWRDb250ZXh0c107XG5cdFx0XHR9XG5cblx0XHRcdC8vdGhlIHBhc3RlIGNhbm5vdCBiZSBkb25lIGlmIHNldmVyYWwgY29udGV4dHMgYXJlIHNlbGVjdGVkXG5cdFx0XHRjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mby5wYXN0ZUVuYWJsZW1lbnQgPVxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLmxlbmd0aCA8PSAxICYmIGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50Lmxlbmd0aCA9PT0gc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGg7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiAgVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgbW92ZSB1cC9tb3ZlIGRvd24gYnV0dG9ucy5cblx0ICogQHBhcmFtIG1vZGVsT2JqZWN0XG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdHVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50OiBmdW5jdGlvbiAobW9kZWxPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LCB0YWJsZTogVGFibGUsIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiB2b2lkIHtcblx0XHRjb25zdCBtb2RlbE9iamVjdFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBtb2RlbE9iamVjdCA6IChtb2RlbE9iamVjdC5jb250ZXh0bWVudSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IG1vZGVsT2JqZWN0UGF0aC5zZWxlY3RlZENvbnRleHRzIGFzIENvbnRleHRbXTtcblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXG5cdFx0Y29uc3QgY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkO1xuXHRcdC8vIERpc2FibGUgdGhlIG1vdmUgdXAvbW92ZSBkb3duIGJ1dHRvbnMgaWYgdGhlcmUgYXJlIG5vIHNlbGVjdGVkIGNvbnRleHRzLCBpZiB0aGUgdGFibGUgaXMgbm90IGEgVHJlZVRhYmxlLCBvciBpZiB0aGUgdGFibGUgaXMgc29ydGVkXG5cdFx0aWYgKFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggIT09IDEgfHxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIgfHxcblx0XHRcdHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiaXNTb3J0ZWRcIikgPT09IHRydWUgfHxcblx0XHRcdChzZWxlY3RlZENvbnRleHRzWzBdLmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMSAmJiAhY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkKSAvLyBEaXNhYmxlIG1vdmUgdXAvZG93biBmb3Igcm9vdHNcblx0XHQpIHtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZVVwID0gZmFsc2U7XG5cdFx0XHRtb2RlbE9iamVjdFBhdGguc2luZ2xlQ29udGV4dE1vdmFibGVEb3duID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBzZWxlY3RlZCBjb250ZXh0IGNhbiBiZSBtb3ZlZCBhY2NvcmRpbmcgdG8gdGhlIGN1c3RvbSBsb2dpYyAoaWYgYW55KSBhbmQgaWYgaXQgZG9lc24ndCBoYXZlIGEgZHJhZnQgaW5zdGFuY2UgaWYgd2UncmUgaW4gYSBMaXN0UmVwb3J0LFxuXHRcdFx0Ly8gYW5kIGlmIGl0J3Mgbm90IG91dC1vZi1wbGFjZSAoaS5lLiBpdCBtdXN0IGJlIGRpc3BsYXllZCBhdCBpdHMgJ3JlYWwnIHBvc2l0aW9uKVxuXHRcdFx0Y29uc3QgbW92YWJsZURyYWZ0ID0gdGFibGUuZ2V0Um93QmluZGluZygpLmlzUmVsYXRpdmUoKSB8fCBtb3ZlZENvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSAhPT0gdHJ1ZTtcblx0XHRcdGNvbnN0IG91dE9mUGxhY2VDb250ZXh0ID0gbW92ZWRDb250ZXh0LmlzVHJhbnNpZW50KCkgIT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGN1c3RvbU1vdmFibGUgPSBUYWJsZVJ1bnRpbWUuY2hlY2tJZk5vZGVJc01vdmFibGUobW92ZWRDb250ZXh0LCB0YWJsZSk7XG5cdFx0XHRtb2RlbE9iamVjdFBhdGguc2luZ2xlQ29udGV4dE1vdmFibGVVcCA9XG5cdFx0XHRcdG1vdmFibGVEcmFmdCAmJiBjdXN0b21Nb3ZhYmxlICYmICFvdXRPZlBsYWNlQ29udGV4dCAmJiBtb3ZlZENvbnRleHQuZ2V0U2libGluZygtMSkgIT09IG51bGw7XG5cdFx0XHRtb2RlbE9iamVjdFBhdGguc2luZ2xlQ29udGV4dE1vdmFibGVEb3duID1cblx0XHRcdFx0bW92YWJsZURyYWZ0ICYmIGN1c3RvbU1vdmFibGUgJiYgIW91dE9mUGxhY2VDb250ZXh0ICYmIG1vdmVkQ29udGV4dC5nZXRTaWJsaW5nKDEpICE9PSBudWxsO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgQ3JlYXRlIGJ1dHRvbiAvIG1lbnUgLyBtZW51IGl0ZW1zLlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxDb250ZXh0XG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2tcblx0ICogQHBhcmFtIGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tb2R1bGVOYW1lXG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subWV0aG9kTmFtZVxuXHQgKiBAcGFyYW0gdGFibGVcblx0ICogQHBhcmFtIHBhcmVudENvbnRleHRcblx0ICogQHBhcmFtIG5vZGVUeXBlUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzLnByb3BlcnR5TmFtZVxuXHQgKiBAcGFyYW0gbm9kZVR5cGVQYXJhbWV0ZXJzLnZhbHVlc1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdF91cGRhdGVDcmVhdGVFbmFibGVtZW50OiBmdW5jdGlvbiAoXG5cdFx0aW50ZXJuYWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2s6IHsgbW9kdWxlTmFtZTogc3RyaW5nOyBtZXRob2ROYW1lOiBzdHJpbmcgfSxcblx0XHR0YWJsZTogVGFibGUsXG5cdFx0cGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwsXG5cdFx0bm9kZVR5cGVQYXJhbWV0ZXJzPzogeyBwcm9wZXJ0eU5hbWU6IHN0cmluZzsgdmFsdWVzOiB7IHZhbHVlOiBzdHJpbmcgfVtdIH0sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiB2b2lkIHtcblx0XHRsZXQgcG9zc2libGVWYWx1ZXM6IChzdHJpbmcgfCB1bmRlZmluZWQpW107XG5cdFx0aWYgKG5vZGVUeXBlUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBQdXNoIGFsbCBwb3NzaWJsZSB2YWx1ZXMgaW4gdGhlIG1lbnVcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gbm9kZVR5cGVQYXJhbWV0ZXJzLnZhbHVlcy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTm8gbWVudSAtLT4gT25seSAndW5kZWZpbmVkJyB2YWx1ZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSAnQ3JlYXRlJyBidXR0b25cblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW3VuZGVmaW5lZF07XG5cdFx0fVxuXG5cdFx0Y29uc3QgZW5hYmxlbWVudEZ1bmN0aW9uID0gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChub2RlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCkgPT4gYm9vbGVhbj4oXG5cdFx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subW9kdWxlTmFtZSxcblx0XHRcdGNyZWF0ZUVuYWJsZW1lbnRDYWxsYmFjay5tZXRob2ROYW1lLFxuXHRcdFx0dGFibGVcblx0XHQpO1xuXG5cdFx0aWYgKCFlbmFibGVtZW50RnVuY3Rpb24pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgZW5hYmxlZEZsYWdzID0gcG9zc2libGVWYWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0bGV0IGVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGVuYWJsZWQgPSAhIShlbmFibGVtZW50RnVuY3Rpb24odmFsdWUsIHBhcmVudENvbnRleHQpID8/IHRydWUpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0XHRcdGVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGVuYWJsZWQ7XG5cdFx0fSk7XG5cdFx0Ly8gZW5hYmxlRmxhZ3NbaV0gaXMgdHJ1ZSA8PT4gcG9zc2libGVWYWx1ZXNbaV0gaXMgYWxsb3dlZCBmb3IgY3JlYXRpb25cblxuXHRcdGNvbnN0IGVuYWJsZW1lbnRNYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0ZW5hYmxlbWVudE1hcFtcIkNyZWF0ZVwiXSA9IGVuYWJsZWRGbGFncy5zb21lKChmbGFnKSA9PiBmbGFnKTsgLy8gRW5hYmxlIHRoZSBNZW51IChvciB0aGUgYnV0dG9uKSBpZiBhdCBsZWFzdCBvbmUgb3B0aW9uIGlzIHBvc3NpYmxlXG5cdFx0ZW5hYmxlZEZsYWdzLmZvckVhY2goKGVuYWJsZWQsIGluZGV4KSA9PiB7XG5cdFx0XHRlbmFibGVtZW50TWFwW2BDcmVhdGVfJHtpbmRleH1gXSA9IGVuYWJsZWQ7XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGZvckNvbnRleHRNZW51ID8gXCJjb250ZXh0bWVudS9cIiA6IFwiXCI7XG5cdFx0aW50ZXJuYWxDb250ZXh0LnNldFByb3BlcnR5KGNvbnRleHRQYXRoICsgXCJjcmVhdGVFbmFibGVtZW50XCIsIGVuYWJsZW1lbnRNYXApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDbGVhcnMgdGhlIHRhYmxlIHNlbGVjdGlvbiwgYW5kIGVuYWJsZXMvZGlzYWJsZXMgdGhlICdDcmVhdGUnIGJ1dHRvbi9tZW51IGlmIG5lY2Vzc2FyeS5cblx0ICogQHBhcmFtIHRhYmxlIFRoZSB0YWJsZVxuXHQgKi9cblx0Y2xlYXJTZWxlY3Rpb246IGZ1bmN0aW9uICh0YWJsZTogVGFibGUpOiB2b2lkIHtcblx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSBjb250cm9sXG5cdFx0dGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblxuXHRcdC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uLXJlbGF0ZWQgaW5mb3JtYXRpb24gaW4gdGhlIGludGVybmFsIG1vZGVsXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB0YWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJkZWxldGVFbmFibGVkXCIsIGZhbHNlKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIDApO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgW10pO1xuXHRcdH1cblxuXHRcdC8vIEVuYWJsZS9kaXNhYmxlIHRoZSAnQ3JlYXRlJyBidXR0b24vbWVudSBpZiBuZWNlc3Nhcnlcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHR0aGlzLl91cGRhdGVDcmVhdGVFbmFibGVtZW50KFxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dCBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0dGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCxcblx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdG51bGwsXG5cdFx0XHRcdHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblxuXHRkaXNhYmxlQWN0aW9uOiBmdW5jdGlvbiAoYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkOiBzdHJpbmdbXSwgb0R5bmFtaWNBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCB7IGJFbmFibGVkPzogYm9vbGVhbiB9Pik6IHZvaWQge1xuXHRcdGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZC5mb3JFYWNoKGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdG9EeW5hbWljQWN0aW9uc1tzQWN0aW9uXSA9IHsgYkVuYWJsZWQ6IGZhbHNlIH07XG5cdFx0fSk7XG5cdH0sXG5cdG9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93OiBmdW5jdGlvbiAoXG5cdFx0b0V2ZW50OiBGaWVsZCRDaGFuZ2VFdmVudCAmIFVJNUV2ZW50PHsgaXNWYWxpZDogYm9vbGVhbiB9Pixcblx0XHR3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uOiBib29sZWFuXG5cdCk6IHZvaWQge1xuXHRcdC8vIENSRUFUSU9OIFJPVyBDQVNFXG5cdFx0Y29uc3QgbUZpZWxkID0gRmllbGRSdW50aW1lSGVscGVyLmdldEZpZWxkU3RhdGVPbkNoYW5nZShvRXZlbnQpLFxuXHRcdFx0b1NvdXJjZUZpZWxkID0gbUZpZWxkLmZpZWxkLFxuXHRcdFx0c0ZpZWxkSWQgPSBvU291cmNlRmllbGQuZ2V0SWQoKTtcblxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0bUZpZWxkVmFsaWRpdHkgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiksXG5cdFx0XHRtTmV3RmllbGRWYWxpZGl0eSA9IE9iamVjdC5hc3NpZ24oe30sIG1GaWVsZFZhbGlkaXR5KTtcblxuXHRcdG1OZXdGaWVsZFZhbGlkaXR5W3NGaWVsZElkXSA9IG1GaWVsZC5zdGF0ZTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwgbU5ld0ZpZWxkVmFsaWRpdHkpO1xuXG5cdFx0Ly8gcHJlcGFyZSBDdXN0b20gVmFsaWRhdGlvblxuXHRcdGlmICh3aXRoQ3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uKSB7XG5cdFx0XHRjb25zdCBtQ3VzdG9tVmFsaWRpdHkgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIpLFxuXHRcdFx0XHRtTmV3Q3VzdG9tVmFsaWRpdHkgPSBPYmplY3QuYXNzaWduKHt9LCBtQ3VzdG9tVmFsaWRpdHkpO1xuXHRcdFx0bU5ld0N1c3RvbVZhbGlkaXR5W29Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nKFwidmFsdWVcIikhLmdldFBhdGgoKV0gPSB7XG5cdFx0XHRcdGZpZWxkSWQ6IG9Tb3VyY2VGaWVsZC5nZXRJZCgpXG5cdFx0XHR9O1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCBtTmV3Q3VzdG9tVmFsaWRpdHkpO1xuXHRcdFx0Ly8gUmVtb3ZlIGV4aXN0aW5nIEN1c3RvbVZhbGlkYXRpb24gbWVzc2FnZVxuXHRcdFx0Y29uc3Qgc1RhcmdldCA9IGAke29Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCl9LyR7b1NvdXJjZUZpZWxkLmdldEJpbmRpbmdQYXRoKFwidmFsdWVcIil9YDtcblx0XHRcdE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogTWVzc2FnZSkge1xuXHRcdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHNUYXJnZXQpIHtcblx0XHRcdFx0XHRcdE1lc3NhZ2luZy5yZW1vdmVNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdG9uVHJlZVRhYmxlQ29udGV4dENoYW5nZWQ6IGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQsIGluaXRpYWxFeHBhbnNpb25MZXZlbD86IG51bWJlcik6IHZvaWQge1xuXHRcdC8vIFdoZW4gdGhlIGNvbnRleHQgb2YgYSBUcmVlVGFibGUgY2hhbmdlcywgd2Ugd2FudCB0byByZXN0b3JlIGl0cyBleHBhbnNpb24gc3RhdGUgdG8gdGhlIGRlZmF1bHQ6XG5cdFx0Ly8gICAtIGFsbCBleHBhbmRlZCBpZiB0aGVyZSdzIGEgc2VhcmNoIHBhcmFtZXRlciBjb21pbmcgZnJvbSB0aGUgZmlsdGVyQmFyXG5cdFx0Ly8gICAtIG90aGVyd2lzZSBpbml0aWFsIGV4cGFuc2lvbiBzdGF0ZSBjb21pbmcgZnJvbSB0aGUgUFYgKHN0b3JlZCBpbiB0aGUgcGF5bG9hZClcblx0XHQvLyAgIC0gb3RoZXJ3aXNlIG5vIGV4cGFuc2lvbiBhdCBhbGxcblxuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IHRhYmxlID0gc291cmNlIGFzIFRhYmxlO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0Y29uc3Qgcm93QmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRpZiAoIXJvd0JpbmRpbmc/LmdldENvbnRleHQoKSB8fCB0YWJsZUFQSS5nZXRJZ25vcmVDb250ZXh0Q2hhbmdlRXZlbnQoKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIGlzIG5vdCBib3VuZCwgb3Igd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBzd2l0Y2hpbmcgYmV0d2VlbiBub3JtYWwgYW5kIGZ1bGxzY3JlZW4sIHNvIHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBleHBhbnNpb24gc3RhdGVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBhZ2dyZWdhdGlvbjoge1xuXHRcdFx0YWdncmVnYXRlPzogb2JqZWN0O1xuXHRcdFx0ZXhwYW5kVG8/OiBudW1iZXI7XG5cdFx0XHRncmFuZFRvdGFsQXRCb3R0b21Pbmx5PzogYm9vbGVhbjtcblx0XHRcdGdyb3VwPzogb2JqZWN0O1xuXHRcdFx0Z3JvdXBMZXZlbHM/OiBzdHJpbmdbXTtcblx0XHRcdGhpZXJhcmNoeVF1YWxpZmllcj86IHN0cmluZztcblx0XHRcdHNlYXJjaD86IHN0cmluZztcblx0XHRcdHN1YnRvdGFsc0F0Qm90dG9tT25seT86IGJvb2xlYW47XG5cdFx0fSA9IHJvd0JpbmRpbmcuZ2V0QWdncmVnYXRpb24oKSA/PyB7fTtcblx0XHRjb25zdCBmaWx0ZXJJbmZvID0gVGFibGVVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKHRhYmxlKTtcblx0XHRhZ2dyZWdhdGlvbi5leHBhbmRUbyA9IGZpbHRlckluZm8uc2VhcmNoID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBpbml0aWFsRXhwYW5zaW9uTGV2ZWw7XG5cdFx0cm93QmluZGluZy5zZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGFuIGl0ZW0gaW4gYSAnQ3JlYXRlJyBtZW51IGlzIGNsaWNrZWQuIEl0IGNyZWF0ZXMgYSBkb2N1bWVudCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGluaXRpYWwgZGF0YS5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqIEBwYXJhbSB2YWx1ZUluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbSBpbiB0aGUgbWVudVxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0cyBUaGUgc2VsZWN0ZWQgY29udGV4dHMgaW4gdGhlIHRhYmxlIGZvciB0aGlzICdDcmVhdGUnIG1lbnVcblx0ICovXG5cdG9uQ3JlYXRlTWVudUl0ZW1QcmVzczogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudDx7fSwgTWVudUl0ZW0+LCB2YWx1ZUluZGV4OiBudW1iZXIsIHNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1kY1RhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG1kY1RhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFNvbWUgY2hlY2tzIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGVcblx0XHRpZiAoIXRhYmxlQVBJIHx8ICFtZGNUYWJsZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBub2RlVHlwZSA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm5vZGVUeXBlO1xuXHRcdGlmICghbm9kZVR5cGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZUFQSSk7XG5cdFx0Y29uc3QgY3JlYXRpb25EYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0Y3JlYXRpb25EYXRhW25vZGVUeXBlLnByb3BlcnR5TmFtZV0gPSBub2RlVHlwZS52YWx1ZXNbdmFsdWVJbmRleF0udmFsdWU7XG5cblx0XHRjb25zdCBjcmVhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdGNyZWF0aW9uTW9kZTogc3RyaW5nO1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cz86IENvbnRleHRbXTtcblx0XHRcdHRhYmxlSWQ/OiBzdHJpbmc7XG5cdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcz86IHN0cmluZ1tdO1xuXHRcdFx0ZGF0YT86IG9iamVjdDtcblx0XHR9ID0ge1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlLm1vZGUsXG5cdFx0XHRkYXRhOiBjcmVhdGlvbkRhdGEsXG5cdFx0XHR0YWJsZUlkOiBtZGNUYWJsZT8uZ2V0SWQoKVxuXHRcdH07XG5cblx0XHRpZiAoY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nKSB7XG5cdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMgPSBub2RlVHlwZS52YWx1ZXNbdmFsdWVJbmRleF0uY3JlYXRpb25EaWFsb2dGaWVsZHM7XG5cdFx0XHRpZiAoIWNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcyB8fCBjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdC8vIFVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBubyBjcmVhdGlvbiBmaWVsZHMgYXJlIHNwZWNpZmllZCBmb3IgdGhpcyBtZW51IGl0ZW1cblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRpb25EaWFsb2dGaWVsZHM7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKSkge1xuXHRcdFx0XHQvLyBJbiBjcmVhdGlvbiBkaWFsb2cgbW9kZSwgd2UgZm9yY2UgdGhlIHRhYmxlIGRhdGEgdG8gYmUgbG9hZGVkIGJlZm9yZSBjcmVhdGluZyB0aGUgZG9jdW1lbnRcblx0XHRcdFx0Ly8gKHRvIG92ZXJjb21lIHRoZSBjYXNlIGluIGEgTGlzdFJlcG9ydCB3aGVyZSBubyBkYXRhIGlzIGxvYWRlZCB5ZXQpXG5cdFx0XHRcdGF3YWl0IG1kY1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHQuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQodGFibGVBUEkuZ2V0Um93QmluZGluZygpLCBjcmVhdGlvblBhcmFtZXRlcnMpXG5cdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdExvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgZG9jdW1lbnQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlICdDcmVhdGUnIGJ1dHRvbiBpcyBwcmVzc2VkLCBvciB0aGUgJ0NyZWF0ZScgY29tbWFuZCBpbnZva2VkLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHMgVGhlIHNlbGVjdGVkIGNvbnRleHRzIGluIHRoZSB0YWJsZSBmb3IgdGhpcyAnQ3JlYXRlJyBidXR0b25cblx0ICovXG5cdG9uQ3JlYXRlQnV0dG9uUHJlc3M6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQsIHNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtZGNUYWJsZSA9IEZQTUhlbHBlci5nZXRNZGNUYWJsZShldmVudC5nZXRTb3VyY2UoKSk7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBtZGNUYWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBTb21lIGNoZWNrcyB0byBiZSBvbiB0aGUgc2FmZSBzaWRlXG5cdFx0aWYgKCF0YWJsZUFQSSB8fCAhbWRjVGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjcmVhdGlvblBhcmFtZXRlcnM6IHtcblx0XHRcdGNyZWF0ZUF0RW5kPzogYm9vbGVhbjtcblx0XHRcdGNyZWF0aW9uTW9kZTogc3RyaW5nO1xuXHRcdFx0b3V0Ym91bmQ/OiBzdHJpbmc7XG5cdFx0XHRjcmVhdGlvblJvdz86IENyZWF0aW9uUm93O1xuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cz86IENvbnRleHRbXTtcblx0XHRcdHRhYmxlSWQ/OiBzdHJpbmc7XG5cdFx0XHRjcmVhdGlvbkRpYWxvZ0ZpZWxkcz86IHN0cmluZ1tdO1xuXHRcdH0gPSB7IGNyZWF0aW9uTW9kZTogdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlLm1vZGUgfTtcblxuXHRcdHN3aXRjaCAoY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSkge1xuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuRXh0ZXJuYWw6XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5vdXRib3VuZCA9ICh0YWJsZUFQSS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jcmVhdGUgYXMgQ3JlYXRlQmVoYXZpb3JFeHRlcm5hbCkub3V0Ym91bmQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdzpcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uUm93ID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGVBdEVuZCA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUF0RW5kID8/IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuTmV3UGFnZTpcblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLklubGluZTpcblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uRGlhbG9nOlxuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVBdEVuZCA/PyBmYWxzZTtcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLnRhYmxlSWQgPSBtZGNUYWJsZT8uZ2V0SWQoKTtcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLnNlbGVjdGVkQ29udGV4dHMgPSBzZWxlY3RlZENvbnRleHRzO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzOlxuXHRcdFx0XHQvLyBOb3RoaW5nXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBPdGhlciBtb2RlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZykge1xuXHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRpb25EaWFsb2dGaWVsZHM7XG5cdFx0XHRpZiAoIW1kY1RhYmxlLmdldFJvd0JpbmRpbmcoKSkge1xuXHRcdFx0XHQvLyBJbiBjcmVhdGlvbiBkaWFsb2cgbW9kZSwgd2UgZm9yY2UgdGhlIHRhYmxlIGRhdGEgdG8gYmUgbG9hZGVkIGJlZm9yZSBjcmVhdGluZyB0aGUgZG9jdW1lbnRcblx0XHRcdFx0Ly8gKHRvIG92ZXJjb21lIHRoZSBjYXNlIGluIGEgTGlzdFJlcG9ydCB3aGVyZSBubyBkYXRhIGlzIGxvYWRlZCB5ZXQpXG5cdFx0XHRcdGF3YWl0IG1kY1RhYmxlLnJlYmluZCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRhYmxlQVBJKTtcblxuXHRcdGlmIChjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0XHR2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZWRpdEZsb3cuY3JlYXRlRW1wdHlSb3dzQW5kRm9jdXMobWRjVGFibGUpXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3IGVtcHR5IHJvdzogJHtlcnJvcn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZpZXcuZ2V0Q29udHJvbGxlcigpXG5cdFx0XHRcdC5lZGl0Rmxvdy5jcmVhdGVEb2N1bWVudCh0YWJsZUFQSSwgY3JlYXRpb25QYXJhbWV0ZXJzKVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyBkb2N1bWVudDogJHtlcnJvcn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWFuYWdlIHRoZSBJbnRlbnRCYXNlZCBOYXZpZ2F0aW9uIGVuYWJsZW1lbnQuXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQgKiBAcGFyYW0gbmF2aWdhdGlvbkF2YWlsYWJsZU1hcFxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0c1xuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdHNldEludGVudEJhc2VkTmF2aWdhdGlvbkVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0bmF2aWdhdGlvbkF2YWlsYWJsZU1hcDogc3RyaW5nW10sXG5cdFx0c2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG5hdmlnYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlibi8ke3NLZXl9YCwge1xuXHRcdFx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IFtdXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlibi8ke3NLZXl9YCwge1xuXHRcdFx0XHRcdC8vIERvIG5vdCBjaGFuZ2UgZW5hYmxlZCwgYUFwcGxpY2FibGUgYW5kIGFOb3RBcHBsaWNhYmxlIHByb3BlcnR5IGluIGNhc2Ugb2YgY29udGV4dCBtZW51IGNhbGN1bGF0aW9uXG5cdFx0XHRcdFx0YkVuYWJsZWQ6IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vYkVuYWJsZWRgKSxcblx0XHRcdFx0XHRhQXBwbGljYWJsZTogaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS9hQXBwbGljYWJsZWApLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9L2FOb3RBcHBsaWNhYmxlYCksXG5cdFx0XHRcdFx0YkVuYWJsZWRGb3JDb250ZXh0TWVudTogZmFsc2UsXG5cdFx0XHRcdFx0YUFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW10sXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW11cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhQXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5ID0gbmF2aWdhdGlvbkF2YWlsYWJsZU1hcFtzS2V5XTtcblx0XHRcdGZvciAoY29uc3Qgc2VsZWN0ZWRDb250ZXh0IG9mIHNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aWYgKHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qoc1Byb3BlcnR5KSkge1xuXHRcdFx0XHRcdGNvbnN0IGVuYWJsZWRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYkVuYWJsZWRcIiA6IFwiYkVuYWJsZWRGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS8ke2VuYWJsZWRQcm9wZXJ0eX1gLCB0cnVlKTtcblx0XHRcdFx0XHRhQXBwbGljYWJsZS5wdXNoKHNlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFBcHBsaWNhYmxlXCIgOiBcImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdGNvbnN0IG5vdEFwcGxpY2FibGVQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwiYU5vdEFwcGxpY2FibGVcIiA6IFwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudVwiO1xuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9LyR7YXBwbGljYWJsZVByb3BlcnR5fWAsIGFBcHBsaWNhYmxlKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdC5zZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fWAsIGFOb3RBcHBsaWNhYmxlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGEgY29udGV4dCBtZW51IGl0ZW0gaXMgcHJlc3NlZC5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRvbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQ6IFVJNUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgbWRjVGFibGUgPSBGUE1IZWxwZXIuZ2V0TWRjVGFibGUoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gbWRjVGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gU2V0IHRoZSBmbGFnIG9uIHRoZSB0YWJsZUFQSSBzbyB0aGF0IGdldFNlbGVjdGVkQ29udGV4dHMgcmV0dXJucyB0aGUgY29ycmVjdCB2YWx1ZVxuXHRcdHRhYmxlQVBJPy5zZXRDb250ZXh0TWVudUFjdGl2ZSh0cnVlKTtcblxuXHRcdC8vIEFmdGVyIGEgc2hvcnQgZGVsYXkgKG9uY2UgdGhlIGNvcnJlc3BvbmRpbmcgYWN0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCksIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGZsYWcgb24gdGhlIHRhYmxlXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0YWJsZUFQST8uc2V0Q29udGV4dE1lbnVBY3RpdmUoZmFsc2UpO1xuXHRcdH0sIDApO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBNREMgRGF0YVN0YXRlSW5kaWNhdG9yIHBsdWdpbiB0byBkaXNwbGF5IG1lc3NhZ2VTdHJpcCBvbiBhIHRhYmxlLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVxuXHQgKiBAcGFyYW0gY29udHJvbFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRvIHJlbmRlciB0aGUgbWVzc2FnZVN0cmlwIHZpc2libGVcblx0ICovXG5cdGRhdGFTdGF0ZUluZGljYXRvckZpbHRlcjogZnVuY3Rpb24gKG1lc3NhZ2U6IE1lc3NhZ2UsIGNvbnRyb2w6IENvbnRyb2wpOiBib29sZWFuIHtcblx0XHRjb25zdCB0YWJsZUFQSSA9IGNvbnRyb2wuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0cmV0dXJuIHRhYmxlQVBJLmRhdGFTdGF0ZUluZGljYXRvckZpbHRlcihtZXNzYWdlLCBjb250cm9sKTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0VBMEJBLE1BQU1BLFlBQVksR0FBR0MsU0FBUyxDQUFDRCxZQUFZO0VBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNRSxZQUFZLEdBQUc7SUFDcEJDLGdDQUFnQyxFQUFFLFNBQUFBLENBQVVDLGNBQXNCLEVBQUVDLE9BQWdCLEVBQVE7TUFDM0Y7TUFDQSxNQUFNQyxTQUFTLEdBQUdELE9BQU8sQ0FBQ0UsU0FBUyxDQUFDLENBQWE7TUFDakQsSUFBSUgsY0FBYyxLQUFLSixZQUFZLENBQUNRLFdBQVcsRUFBRTtRQUNoRCxNQUFNQyxPQUFPLEdBQUdILFNBQVMsQ0FDdkJJLFVBQVUsQ0FBQyxDQUFDLENBQ1pDLE1BQU0sQ0FBQyxVQUFVQyxjQUF5QixFQUFFQyxvQkFBNkIsRUFBRTtVQUMzRSxPQUFPRCxjQUFj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
|
|
550
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDcmVhdGlvbk1vZGUiLCJGRUxpYnJhcnkiLCJUYWJsZVJ1bnRpbWUiLCJleGVjdXRlQ29uZGl0aW9uYWxBY3Rpb25TaG9ydGN1dCIsInNCdXR0b25NYXRjaGVyIiwib1NvdXJjZSIsIm9NZGNUYWJsZSIsImdldFBhcmVudCIsIkNyZWF0aW9uUm93Iiwib0J1dHRvbiIsImdldEFjdGlvbnMiLCJyZWR1Y2UiLCJhQWN0aW9uQnV0dG9ucyIsIm9BY3Rpb25Ub29sYmFyQWN0aW9uIiwiY29uY2F0IiwiZ2V0QWN0aW9uIiwiZmluZCIsIm9BY3Rpb25CdXR0b24iLCJnZXRJZCIsImVuZHNXaXRoIiwiQ29tbW9uVXRpbHMiLCJmaXJlQnV0dG9uUHJlc3MiLCJvQ3JlYXRpb25Sb3ciLCJnZXRBZ2dyZWdhdGlvbiIsImdldEFwcGx5RW5hYmxlZCIsImdldFZpc2libGUiLCJmaXJlQXBwbHkiLCJzZXRDb250ZXh0cyIsImV2ZW50Iiwic291cmNlIiwiZ2V0U291cmNlIiwidGFibGUiLCJCdXN5TG9ja2VyIiwibG9jayIsInNldENvbnRleHRzQXN5bmMiLCJlcnJvciIsIkxvZyIsInVubG9jayIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidGFibGVBUEkiLCJ0YWJsZURlZmluaXRpb24iLCJjb2xsZWN0aW9uRW50aXR5IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydFR5cGVzIiwicmVzb2x2ZVBhdGgiLCJhbm5vdGF0aW9uIiwiY29sbGVjdGlvbiIsInRhcmdldCIsInNVcGRhdGFibGVQYXRoIiwidXBkYXRhYmxlUHJvcGVydHlQYXRoIiwiYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkIiwiZGF0YSIsInNwbGl0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIm9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiYURlbGV0YWJsZUNvbnRleHRzIiwiYlJlYWRPbmx5RHJhZnRFbmFibGVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhVXBkYXRhYmxlQ29udGV4dHMiLCJvRHluYW1pY0FjdGlvbnMiLCJvSUJOIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJkZWxldGVIZWxwZXIiLCJ1cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyIsImFjdGl2ZVNlbGVjdGVkQ29udGV4dHMiLCJmaWx0ZXIiLCJvQ29udGV4dCIsImlzSW5hY3RpdmUiLCJvTW9kZWxPYmplY3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRPYmplY3QiLCJzZWxlY3RlZENvbnRleHRzIiwic2VsZWN0ZWRDb250ZXh0c0luY2x1ZGluZ0luYWN0aXZlIiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwibGVuZ3RoIiwiZHluYW1pY0FjdGlvbnMiLCJpYm4iLCJkZWxldGVFbmFibGVkIiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJsb2NrZWRDb250ZXh0cyIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiY29udHJvbElkIiwidXBkYXRhYmxlQ29udGV4dHMiLCJwYXN0ZUF1dGhvcml6ZWQiLCJwYXN0ZUZyb21Db3B5QXV0b3JpemVkIiwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvciIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwibm9kZVVwZGF0ZXNJbmZvIiwib1NlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImtleSIsImluZGV4T2YiLCJzQWN0aW9uUGF0aCIsInN1YnN0cmluZyIsImVuYWJsZWQiLCJzZXRQcm9wZXJ0eSIsImlzVXBkYXRhYmxlQ29udGV4dCIsInB1c2giLCJzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50IiwiZGlzYWJsZUFjdGlvbiIsImNvbnRyb2wiLCJjcmVhdGVFbmFibGVtZW50IiwicGFyZW50Q29udGV4dCIsIl91cGRhdGVDcmVhdGVFbmFibGVtZW50Iiwibm9kZVR5cGUiLCJ1cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50IiwidXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsInNlbGVjdGVkQ29udGV4dCIsInJlYWRPbmx5RHJhZnRFbmFibGVkIiwiY29udGV4dERhdGEiLCJ1cGRhdGFibGVCeVBhdGgiLCJub3REcmFmdEluUmVhZE9ubHlNb2RlIiwiSXNBY3RpdmVFbnRpdHkiLCJIYXNEcmFmdEVudGl0eSIsImNoZWNrSWZOb2RlSXNNb3ZhYmxlIiwibm9kZSIsImlzTm9kZU1vdmFibGVGdW5jdGlvbiIsImdldFRhYmxlRGVmaW5pdGlvbiIsImlzTm9kZU1vdmFibGUiLCJub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uIiwiRlBNSGVscGVyIiwiZ2V0Q3VzdG9tRnVuY3Rpb24iLCJtb2R1bGVOYW1lIiwibWV0aG9kTmFtZSIsIndhcm5pbmciLCJjaGVja0lmTm9kZUlzQ29weWFibGUiLCJpc05vZGVDb3B5YWJsZUZ1bmN0aW9uIiwiaXNOb2RlQ29weWFibGUiLCJtb2RlbE9iamVjdCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwidHlwZSIsImNoZWNrRHJhZnRJbnN0YW5jZSIsImdldFJvd0JpbmRpbmciLCJpc1JlbGF0aXZlIiwiY29udGV4dG1lbnUiLCJjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mbyIsImRhdGFNb2RlbHNyYyIsImN1dGFibGVDb250ZXh0cyIsImNvbnRleHQiLCJjb3B5YWJsZUNvbnRleHRzIiwiY3V0RW5hYmxlbWVudCIsImNvcHlFbmFibGVtZW50IiwibGFzdEFjdGlvbiIsInBhc3RhYmxlQ29udGV4dHMiLCJjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudCIsImV4dGVuc2lvblBvaW50IiwiaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWQiLCJpc0NvcHlUb1Bvc2l0aW9uQWxsb3dlZCIsInRhcmdldENvbnRleHQiLCJwYXN0ZUVuYWJsZW1lbnQiLCJtb2RlbE9iamVjdFBhdGgiLCJjaGFuZ2VTaWJsaW5nRm9yUm9vdHNTdXBwb3J0ZWQiLCJzaW5nbGVDb250ZXh0TW92YWJsZVVwIiwic2luZ2xlQ29udGV4dE1vdmFibGVEb3duIiwibW92ZWRDb250ZXh0IiwibW92YWJsZURyYWZ0Iiwib3V0T2ZQbGFjZUNvbnRleHQiLCJpc1RyYW5zaWVudCIsImN1c3RvbU1vdmFibGUiLCJpc0RlbGV0ZWQiLCJnZXRTaWJsaW5nIiwiaW50ZXJuYWxDb250ZXh0IiwiY3JlYXRlRW5hYmxlbWVudENhbGxiYWNrIiwibm9kZVR5cGVQYXJhbWV0ZXJzIiwicG9zc2libGVWYWx1ZXMiLCJ2YWx1ZXMiLCJtYXAiLCJvcHRpb24iLCJ2YWx1ZSIsImVuYWJsZW1lbnRGdW5jdGlvbiIsImVuYWJsZWRGbGFncyIsIl9lcnJvciIsImVuYWJsZW1lbnRNYXAiLCJzb21lIiwiZmxhZyIsImZvckVhY2giLCJpbmRleCIsImNvbnRleHRQYXRoIiwiY2xlYXJTZWxlY3Rpb24iLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsInNBY3Rpb24iLCJiRW5hYmxlZCIsIm9uRmllbGRDaGFuZ2VJbkNyZWF0aW9uUm93Iiwib0V2ZW50Iiwid2l0aEN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsIm1GaWVsZCIsIkZpZWxkUnVudGltZUhlbHBlciIsImdldEZpZWxkU3RhdGVPbkNoYW5nZSIsIm9Tb3VyY2VGaWVsZCIsImZpZWxkIiwic0ZpZWxkSWQiLCJtRmllbGRWYWxpZGl0eSIsIm1OZXdGaWVsZFZhbGlkaXR5Iiwic3RhdGUiLCJtQ3VzdG9tVmFsaWRpdHkiLCJtTmV3Q3VzdG9tVmFsaWRpdHkiLCJnZXRCaW5kaW5nIiwiZ2V0UGF0aCIsImZpZWxkSWQiLCJzVGFyZ2V0IiwiZ2V0QmluZGluZ1BhdGgiLCJNZXNzYWdpbmciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwib01lc3NhZ2UiLCJnZXRUYXJnZXRzIiwicmVtb3ZlTWVzc2FnZXMiLCJvblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkIiwiaW5pdGlhbEV4cGFuc2lvbkxldmVsIiwicm93QmluZGluZyIsImdldENvbnRleHQiLCJnZXRJZ25vcmVDb250ZXh0Q2hhbmdlRXZlbnQiLCJhZ2dyZWdhdGlvbiIsImZpbHRlckluZm8iLCJUYWJsZVV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsImV4cGFuZFRvIiwic2VhcmNoIiwiTnVtYmVyIiwiTUFYX1NBRkVfSU5URUdFUiIsInNldEFnZ3JlZ2F0aW9uIiwib25DcmVhdGVNZW51SXRlbVByZXNzIiwidmFsdWVJbmRleCIsIm1kY1RhYmxlIiwiZ2V0TWRjVGFibGUiLCJ2aWV3IiwiZ2V0VGFyZ2V0VmlldyIsImNyZWF0aW9uRGF0YSIsInByb3BlcnR5TmFtZSIsImNyZWF0aW9uUGFyYW1ldGVycyIsImNyZWF0aW9uTW9kZSIsImNyZWF0ZSIsIm1vZGUiLCJ0YWJsZUlkIiwiQ3JlYXRpb25EaWFsb2ciLCJjcmVhdGlvbkRpYWxvZ0ZpZWxkcyIsInJlYmluZCIsImdldENvbnRyb2xsZXIiLCJlZGl0RmxvdyIsImNyZWF0ZURvY3VtZW50IiwiY2F0Y2giLCJvbkNyZWF0ZUJ1dHRvblByZXNzIiwiRXh0ZXJuYWwiLCJvdXRib3VuZCIsImNyZWF0aW9uUm93IiwiY3JlYXRlQXRFbmQiLCJOZXdQYWdlIiwiSW5saW5lIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiY3JlYXRlRW1wdHlSb3dzQW5kRm9jdXMiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwic0tleSIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJiRW5hYmxlZEZvckNvbnRleHRNZW51IiwiYUFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJzUHJvcGVydHkiLCJlbmFibGVkUHJvcGVydHkiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJvbkNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwic2V0Q29udGV4dE1lbnVBY3RpdmUiLCJzZXRUaW1lb3V0IiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwibWVzc2FnZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGFibGVSdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBBY3Rpb25SdW50aW1lIGZyb20gXCJzYXAvZmUvY29yZS9BY3Rpb25SdW50aW1lXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVCZWhhdmlvckV4dGVybmFsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgZGVsZXRlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0RlbGV0ZUhlbHBlclwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ1RhYmxlLCBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBDcmVhdGlvblJvdyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9DcmVhdGlvblJvd1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBGaWVsZFJ1bnRpbWVIZWxwZXIgZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlclwiO1xuXG5jb25zdCBDcmVhdGlvbk1vZGUgPSBGRUxpYnJhcnkuQ3JlYXRpb25Nb2RlO1xuLyoqXG4gKiBTdGF0aWMgY2xhc3MgdXNlZCBieSBUYWJsZSBidWlsZGluZyBibG9jayBkdXJpbmcgcnVudGltZVxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgaW50ZXJuYWwvZXhwZXJpbWVudGFsIHVzZSFcbiAqL1xuY29uc3QgVGFibGVSdW50aW1lID0ge1xuXHRleGVjdXRlQ29uZGl0aW9uYWxBY3Rpb25TaG9ydGN1dDogZnVuY3Rpb24gKHNCdXR0b25NYXRjaGVyOiBzdHJpbmcsIG9Tb3VyY2U6IENvbnRyb2wpOiB2b2lkIHtcblx0XHQvLyBHZXQgdGhlIGJ1dHRvbiByZWxhdGVkIHRvIGtleWJvYXJkIHNob3J0Y3V0XG5cdFx0Y29uc3Qgb01kY1RhYmxlID0gb1NvdXJjZS5nZXRQYXJlbnQoKSBhcyBNRENUYWJsZTtcblx0XHRpZiAoc0J1dHRvbk1hdGNoZXIgIT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdFx0Y29uc3Qgb0J1dHRvbiA9IG9NZGNUYWJsZVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5yZWR1Y2UoZnVuY3Rpb24gKGFBY3Rpb25CdXR0b25zOiBDb250cm9sW10sIG9BY3Rpb25Ub29sYmFyQWN0aW9uOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFBY3Rpb25CdXR0b25zLmNvbmNhdCgob0FjdGlvblRvb2xiYXJBY3Rpb24gYXMgQWN0aW9uVG9vbGJhckFjdGlvbikuZ2V0QWN0aW9uKCkpO1xuXHRcdFx0XHR9LCBbXSBhcyBDb250cm9sW10pXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvQWN0aW9uQnV0dG9uOiBDb250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb25CdXR0b24uZ2V0SWQoKS5lbmRzV2l0aChzQnV0dG9uTWF0Y2hlcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvQ3JlYXRpb25Sb3cgPSBvTWRjVGFibGUuZ2V0QWdncmVnYXRpb24oXCJjcmVhdGlvblJvd1wiKSBhcyBDcmVhdGlvblJvdztcblx0XHRcdGlmIChvQ3JlYXRpb25Sb3cgJiYgb0NyZWF0aW9uUm93LmdldEFwcGx5RW5hYmxlZCgpICYmIG9DcmVhdGlvblJvdy5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0b0NyZWF0aW9uUm93LmZpcmVBcHBseSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRzZXRDb250ZXh0czogYXN5bmMgZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudDx7fSwgVGFibGU+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgdGFibGUgPSBzb3VyY2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRhYmxlKTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgVGFibGVSdW50aW1lLnNldENvbnRleHRzQXN5bmModGFibGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGFibGUpO1xuXHRcdH1cblx0fSxcblxuXHRzZXRDb250ZXh0c0FzeW5jOiBhc3luYyBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogUHJvbWlzZTx2b2lkW10gfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0YWJsZS5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyB1bmRlZmluZWQgfCBPRGF0YU1ldGFNb2RlbDtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGlmICghdGFibGVBUEkgfHwgIW1ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb247XG5cdFx0Y29uc3QgY29sbGVjdGlvbkVudGl0eSA9IE1ldGFNb2RlbENvbnZlcnRlci5jb252ZXJ0VHlwZXMobWV0YU1vZGVsKS5yZXNvbHZlUGF0aDxFbnRpdHlTZXQ+KFxuXHRcdFx0dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY29sbGVjdGlvblxuXHRcdCkudGFyZ2V0O1xuXHRcdGNvbnN0IHNVcGRhdGFibGVQYXRoID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udXBkYXRhYmxlUHJvcGVydHlQYXRoO1xuXG5cdFx0Y29uc3QgYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkID0gdGFibGUuZGF0YShcImFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkXCIpPy5zcGxpdChcIixcIikgPz8gW107XG5cdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UodGFibGVEZWZpbml0aW9uLm9wZXJhdGlvbkF2YWlsYWJsZU1hcCB8fCBcInt9XCIpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwID0gdGFibGUuZGF0YShcIm5hdmlnYXRpb25BdmFpbGFibGVNYXBcIik7XG5cblx0XHRjb25zdCBhU2VsZWN0ZWRDb250ZXh0cyA9IHRhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBDb250ZXh0W107XG5cdFx0Y29uc3QgYURlbGV0YWJsZUNvbnRleHRzOiBDb250ZXh0W10gPSBbXTtcblx0XHRjb25zdCBiUmVhZE9ubHlEcmFmdEVuYWJsZWQgPVxuXHRcdFx0dGFibGUuZGF0YShcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIpID09PSBcInRydWVcIiAmJiAhIWNvbGxlY3Rpb25FbnRpdHk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290O1xuXHRcdGNvbnN0IGFVcGRhdGFibGVDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0Ly8gb0R5bmFtaWNBY3Rpb25zIGFyZSBib3VuZCBhY3Rpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSBhY2NvcmRpbmcgdG8gc29tZSBwcm9wZXJ0eVxuXHRcdC8vIGluIGVhY2ggaXRlbVxuXHRcdGNvbnN0IG9EeW5hbWljQWN0aW9uczogUmVjb3JkPHN0cmluZywgeyBiRW5hYmxlZD86IGJvb2xlYW4gfT4gfCB1bmRlZmluZWQgPSB7fTtcblx0XHRjb25zdCBvSUJOID0ge307XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdGlmICghb0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIGZvciB0aGUgZGVsZXRlIHdlIGNvbnNpZGVyIHRoZSBpbmFjdGl2ZSBjb250ZXh0cyBhcyBwb3RlbnRpYWxseSBwYXJ0IG9mIHRoZSBzZWxlY3RlZCBjb250ZXh0c1xuXHRcdGRlbGV0ZUhlbHBlci51cGRhdGVEZWxldGVJbmZvRm9yU2VsZWN0ZWRDb250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFTZWxlY3RlZENvbnRleHRzKTtcblxuXHRcdC8vZG8gbm90IGNvbnNpZGVyIGVtcHR5IHJvd3MgYXMgc2VsZWN0ZWQgY29udGV4dCwgZm9yIHRoZSBvdGhlciBhY3Rpb25zXG5cdFx0Y29uc3QgYWN0aXZlU2VsZWN0ZWRDb250ZXh0cyA9IGFTZWxlY3RlZENvbnRleHRzLmZpbHRlcihmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRcdHJldHVybiAhb0NvbnRleHQuaXNJbmFjdGl2ZSgpO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgb01vZGVsT2JqZWN0ID0gT2JqZWN0LmFzc2lnbihvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0T2JqZWN0KCkgfHwge30sIHtcblx0XHRcdHNlbGVjdGVkQ29udGV4dHM6IGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRzZWxlY3RlZENvbnRleHRzSW5jbHVkaW5nSW5hY3RpdmU6IGFTZWxlY3RlZENvbnRleHRzLFxuXHRcdFx0bnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzOiBhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCxcblx0XHRcdGR5bmFtaWNBY3Rpb25zOiBvRHluYW1pY0FjdGlvbnMsXG5cdFx0XHRpYm46IG9JQk4sXG5cdFx0XHRkZWxldGVFbmFibGVkOiB0cnVlLFxuXHRcdFx0ZGVsZXRhYmxlQ29udGV4dHM6IGFEZWxldGFibGVDb250ZXh0cyxcblx0XHRcdHVuU2F2ZWRDb250ZXh0czogW10sXG5cdFx0XHRsb2NrZWRDb250ZXh0czogW10sXG5cdFx0XHRkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlOiBbXSxcblx0XHRcdGRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmU6IFtdLFxuXHRcdFx0Y29udHJvbElkOiBcIlwiLFxuXHRcdFx0dXBkYXRhYmxlQ29udGV4dHM6IGFVcGRhdGFibGVDb250ZXh0cyxcblx0XHRcdHBhc3RlQXV0aG9yaXplZDogdHJ1ZSxcblx0XHRcdHBhc3RlRnJvbUNvcHlBdXRvcml6ZWQ6IHRydWUsXG5cdFx0XHRzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJzZW1hbnRpY0tleUhhc0RyYWZ0SW5kaWNhdG9yXCIpXG5cdFx0XHRcdD8gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VtYW50aWNLZXlIYXNEcmFmdEluZGljYXRvclwiKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdH0pO1xuXHRcdG9Nb2RlbE9iamVjdC5ub2RlVXBkYXRlc0luZm8gPSBvTW9kZWxPYmplY3Qubm9kZVVwZGF0ZXNJbmZvIHx8IHt9O1xuXG5cdFx0Zm9yIChjb25zdCBvU2VsZWN0ZWRDb250ZXh0IG9mIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvQ29udGV4dERhdGEpIHtcblx0XHRcdFx0aWYgKGtleS5pbmRleE9mKFwiI1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdGxldCBzQWN0aW9uUGF0aDogc3RyaW5nID0ga2V5O1xuXHRcdFx0XHRcdHNBY3Rpb25QYXRoID0gc0FjdGlvblBhdGguc3Vic3RyaW5nKDEsIHNBY3Rpb25QYXRoLmxlbmd0aCk7XG5cdFx0XHRcdFx0b01vZGVsT2JqZWN0LmR5bmFtaWNBY3Rpb25zW3NBY3Rpb25QYXRoXSA9IHsgZW5hYmxlZDogdHJ1ZSB9O1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIlwiLCBvTW9kZWxPYmplY3QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5pc1VwZGF0YWJsZUNvbnRleHQoc1VwZGF0YWJsZVBhdGgsIG9TZWxlY3RlZENvbnRleHQsIGJSZWFkT25seURyYWZ0RW5hYmxlZCkpIHtcblx0XHRcdFx0YVVwZGF0YWJsZUNvbnRleHRzLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCF0YWJsZS5kYXRhKFwiZW5hYmxlQW5hbHl0aWNzXCIpKSB7XG5cdFx0XHRUYWJsZVJ1bnRpbWUuc2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9OYXZpZ2F0aW9uQXZhaWxhYmxlTWFwLCBhY3RpdmVTZWxlY3RlZENvbnRleHRzKTtcblx0XHR9XG5cblx0XHRpZiAoYWN0aXZlU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHR0aGlzLmRpc2FibGVBY3Rpb24oYUFjdGlvbnNNdWx0aXNlbGVjdERpc2FibGVkLCBvRHluYW1pY0FjdGlvbnMpO1xuXHRcdH1cblxuXHRcdGlmIChvTW9kZWxPYmplY3QpIHtcblx0XHRcdG9Nb2RlbE9iamVjdFtcInVwZGF0YWJsZUNvbnRleHRzXCJdID0gYVVwZGF0YWJsZUNvbnRleHRzO1xuXHRcdFx0b01vZGVsT2JqZWN0W1wiY29udHJvbElkXCJdID0gdGFibGUuZ2V0SWQoKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIlwiLCBvTW9kZWxPYmplY3QpO1xuXHRcdH1cblxuXHRcdC8vIE1hbmFnZSBhIHBvdGVudGlhbCBjYWxsYmFjayB0byBlbmFibGUvZGlzYWJsZSB0aGUgY3JlYXRlIGJ1dHRvbi9tZW51IGZvciBhIFRyZWVUYWJsZVxuXHRcdGlmIChhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA8PSAxICYmIHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHBhcmVudENvbnRleHQgPSBhY3RpdmVTZWxlY3RlZENvbnRleHRzLmxlbmd0aCA/IGFjdGl2ZVNlbGVjdGVkQ29udGV4dHNbMF0gOiBudWxsO1xuXHRcdFx0dGhpcy5fdXBkYXRlQ3JlYXRlRW5hYmxlbWVudChcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVFbmFibGVtZW50LFxuXHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0cGFyZW50Q29udGV4dCxcblx0XHRcdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGVcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dGhpcy51cGRhdGVDdXRDb3B5UGFzdGVFbmFibGVtZW50KG9Nb2RlbE9iamVjdCwgdGFibGUpO1xuXHRcdHRoaXMudXBkYXRlTW92ZVVwRG93bkVuYWJsZW1lbnQob01vZGVsT2JqZWN0LCB0YWJsZSk7XG5cdFx0cmV0dXJuIEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFjdGl2ZVNlbGVjdGVkQ29udGV4dHMsIFwidGFibGVcIik7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcywgaWYgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgdXBkYXRhYmxlIGZvciBNYXNzIEVkaXQuXG5cdCAqIEBwYXJhbSB1cGRhdGFibGVQcm9wZXJ0eVBhdGggVGhlIHVwZGF0YWJsZVByb3BlcnR5UGF0aCBmcm9tIHRoZSB0YWJsZSBhbm5vdGF0aW9uXG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHQgVGhlIHNlbGVjdGVkIGNvbnRleHRcblx0ICogQHBhcmFtIHJlYWRPbmx5RHJhZnRFbmFibGVkIEluZGljYXRlcywgaWYgdGhlIHRhYmxlIGlzIHJlYWQgb25seSBhbmQgZHJhZnQgZW5hYmxlZFxuXHQgKiBAcmV0dXJucyBCb29sZWFuIEluZGljYXRpbmcgY29udGV4dCBpcyB1cGRhdGFibGVcblx0ICovXG5cdGlzVXBkYXRhYmxlQ29udGV4dDogZnVuY3Rpb24gKHVwZGF0YWJsZVByb3BlcnR5UGF0aDogc3RyaW5nLCBzZWxlY3RlZENvbnRleHQ6IENvbnRleHQsIHJlYWRPbmx5RHJhZnRFbmFibGVkOiBib29sZWFuKTogYm9vbGVhbiB7XG5cdFx0LyogVGhlIHVwZGF0YWJsZSBjb250ZXh0cyB3aXRoIG1hc3MgZWRpdCBkZXBlbmQgb24gdGhlIGZvbGxvd2luZzpcblx0XHQgXHQxLiBVcGRhdGUgaXMgZGVwZW5kZW50IG9uIGN1cnJlbnQgZW50aXR5IHByb3BlcnR5ICh1cGRhdGFibGVQYXRoKS5cblx0XHQgXHQyLiBUaGUgdGFibGUgaXMgcmVhZCBvbmx5IGFuZCBkcmFmdCBlbmFibGVkIChsaWtlIExSKSwgaW4gdGhpcyBjYXNlIG9ubHkgYWN0aXZlIGNvbnRleHRzIGNhbiBiZSBtYXNzIGVkaXRlZCAobm90IGRyYWZ0IGNvbnRleHRzKS5cblx0XHQgICAgU28sIHVwZGF0ZSBkZXBlbmRzIG9uICdJc0FjdGl2ZUVudGl0eScsICdIYXNEcmFmdEVudGl0eScgIHZhbHVlIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQuICovXG5cdFx0Y29uc3QgY29udGV4dERhdGEgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0Y29uc3QgdXBkYXRhYmxlQnlQYXRoID0gdXBkYXRhYmxlUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMCB8fCAhIXNlbGVjdGVkQ29udGV4dC5nZXRQcm9wZXJ0eSh1cGRhdGFibGVQcm9wZXJ0eVBhdGgpO1xuXHRcdGNvbnN0IG5vdERyYWZ0SW5SZWFkT25seU1vZGUgPSAhcmVhZE9ubHlEcmFmdEVuYWJsZWQgfHwgKGNvbnRleHREYXRhLklzQWN0aXZlRW50aXR5ICYmICFjb250ZXh0RGF0YS5IYXNEcmFmdEVudGl0eSk7XG5cdFx0aWYgKHVwZGF0YWJsZUJ5UGF0aCAmJiBub3REcmFmdEluUmVhZE9ubHlNb2RlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIG5vZGUgaXMgbW92YWJsZSBhY2NvcmRpbmcgdG8gdGhlIGN1c3RvbSBsb2dpYyAoaWYgYW55KS5cblx0ICogQHBhcmFtIG5vZGVcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1c3RvbSBsb2dpYyBhbGxvd3MgdGhlIG5vZGUgdG8gYmUgbW92ZWQgKG9yIGlmIHRoZXJlJ3Mgbm8gY3VzdG9tIGxvZ2ljKSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRjaGVja0lmTm9kZUlzTW92YWJsZTogZnVuY3Rpb24gKG5vZGU6IENvbnRleHQsIHRhYmxlOiBUYWJsZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGlzTm9kZU1vdmFibGVGdW5jdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5pc05vZGVNb3ZhYmxlO1xuXHRcdGNvbnN0IG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPSBpc05vZGVNb3ZhYmxlRnVuY3Rpb25cblx0XHRcdD8gRlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0OiBDb250ZXh0KSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRpc05vZGVNb3ZhYmxlRnVuY3Rpb24ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc05vZGVNb3ZhYmxlRnVuY3Rpb24ubWV0aG9kTmFtZSxcblx0XHRcdFx0XHR0YWJsZVxuXHRcdFx0ICApXG5cdFx0XHQ6IHVuZGVmaW5lZDtcblxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gbm9kZU1vdmFibGVDdXN0b21GdW5jdGlvbiA9PT0gdW5kZWZpbmVkIHx8IG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24obm9kZSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy53YXJuaW5nKGBFcnJvciBpbiBjdXN0b20gZnVuY3Rpb24gZm9yIGlzTm9kZU1vdmFibGU6ICR7ZXJyb3J9YCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBub2RlIGNhbiBiZSBjb3BpZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXN0b20gbG9naWMsIGlmIGFueS5cblx0ICogQHBhcmFtIG5vZGVcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgY3VzdG9tIGxvZ2ljIGFsbG93cyB0aGUgbm9kZSB0byBiZSBjb3BpZWQgKG9yIGlmIG5vIGN1c3RvbSBsb2dpYyBpcyBkZWZpbmVkKTsgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0Y2hlY2tJZk5vZGVJc0NvcHlhYmxlOiBmdW5jdGlvbiAobm9kZTogQ29udGV4dCwgdGFibGU6IFRhYmxlKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaXNOb2RlQ29weWFibGVGdW5jdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29udHJvbC5pc05vZGVDb3B5YWJsZTtcblx0XHRjb25zdCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uID0gaXNOb2RlQ29weWFibGVGdW5jdGlvblxuXHRcdFx0PyBGUE1IZWxwZXIuZ2V0Q3VzdG9tRnVuY3Rpb248KGNvbnRleHQ6IENvbnRleHQpID0+IGJvb2xlYW4+KFxuXHRcdFx0XHRcdGlzTm9kZUNvcHlhYmxlRnVuY3Rpb24ubW9kdWxlTmFtZSxcblx0XHRcdFx0XHRpc05vZGVDb3B5YWJsZUZ1bmN0aW9uLm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0dGFibGVcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIG5vZGVNb3ZhYmxlQ3VzdG9tRnVuY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBub2RlTW92YWJsZUN1c3RvbUZ1bmN0aW9uKG5vZGUpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cud2FybmluZyhgRXJyb3IgaW4gY3VzdG9tIGZ1bmN0aW9uIGZvciBpc05vZGVNb3ZhYmxlOiAke2Vycm9yfWApO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBjb250ZXh0IHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBDdXQgYW5kIFBhc3RlIGJ1dHRvbnMuXG5cdCAqIEBwYXJhbSBtb2RlbE9iamVjdCBJbnRlcm5hbCBjb250ZXh0IG9iamVjdCBvZiB0aGUgdGFibGVcblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIHRoZSBUYWJsZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdHVwZGF0ZUN1dENvcHlQYXN0ZUVuYWJsZW1lbnQ6IGZ1bmN0aW9uIChtb2RlbE9iamVjdDogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sIHRhYmxlOiBUYWJsZSwgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9ICh0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSkuZ2V0VGFibGVEZWZpbml0aW9uKCk7XG5cdFx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRcdC8vIFRoZSBsb2dpYyBiZWxvdyBvbmx5IG1ha2VzIHNlbnNlIGZvciBhIFRyZWUgVGFibGVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY2hlY2tEcmFmdEluc3RhbmNlID0gIXRhYmxlLmdldFJvd0JpbmRpbmcoKS5pc1JlbGF0aXZlKCk7XG5cblx0XHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdChtb2RlbE9iamVjdC5jb250ZXh0bWVudSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkubm9kZVVwZGF0ZXNJbmZvID0ge307XG5cdFx0fVxuXHRcdGNvbnN0IG5vZGVVcGRhdGVzSW5mbyA9IG1vZGVsT2JqZWN0Lm5vZGVVcGRhdGVzSW5mbyBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcblx0XHRjb25zdCBjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mbyA9ICgoIWZvckNvbnRleHRNZW51ID8gbW9kZWxPYmplY3QgOiBtb2RlbE9iamVjdC5jb250ZXh0bWVudSkgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0pXG5cdFx0XHQubm9kZVVwZGF0ZXNJbmZvIGFzIHtcblx0XHRcdFtrZXk6IHN0cmluZ106IHVua25vd247XG5cdFx0fTtcblx0XHRjb25zdCBkYXRhTW9kZWxzcmMgPSAoIWZvckNvbnRleHRNZW51ID8gbW9kZWxPYmplY3QgOiBtb2RlbE9iamVjdC5jb250ZXh0bWVudSkgYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cdFx0Y29uc3QgY3V0YWJsZUNvbnRleHRzID0gKGRhdGFNb2RlbHNyYy51cGRhdGFibGVDb250ZXh0cyBhcyBDb250ZXh0W10pLmZpbHRlcihcblx0XHRcdChjb250ZXh0KSA9PlxuXHRcdFx0XHRUYWJsZVJ1bnRpbWUuY2hlY2tJZk5vZGVJc01vdmFibGUoY29udGV4dCwgdGFibGUpICYmICghY2hlY2tEcmFmdEluc3RhbmNlIHx8IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSAhPT0gdHJ1ZSlcblx0XHQpO1xuXHRcdGNvbnN0IGNvcHlhYmxlQ29udGV4dHMgPSAoZGF0YU1vZGVsc3JjLnNlbGVjdGVkQ29udGV4dHMgYXMgQ29udGV4dFtdKS5maWx0ZXIoKGNvbnRleHQpID0+XG5cdFx0XHRUYWJsZVJ1bnRpbWUuY2hlY2tJZk5vZGVJc0NvcHlhYmxlKGNvbnRleHQsIHRhYmxlKVxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IGRhdGFNb2RlbHNyYy5zZWxlY3RlZENvbnRleHRzIGFzIENvbnRleHRbXTtcblx0XHRjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mby5jdXRFbmFibGVtZW50ID0gc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggPT09IDEgJiYgY3V0YWJsZUNvbnRleHRzLmxlbmd0aCA9PT0gMTtcblx0XHRjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mby5jb3B5RW5hYmxlbWVudCA9IHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID09PSAxICYmIGNvcHlhYmxlQ29udGV4dHMubGVuZ3RoID09PSAxO1xuXG5cdFx0aWYgKG5vZGVVcGRhdGVzSW5mby5sYXN0QWN0aW9uICYmIChub2RlVXBkYXRlc0luZm8ucGFzdGFibGVDb250ZXh0cyBhcyBDb250ZXh0W10pLmxlbmd0aCA+IDApIHtcblx0XHRcdGxldCBjb250ZXh0c2ZvclBhc3RhYmxlRW5hYmxlbWVudDogQ29udGV4dFtdO1xuXHRcdFx0Y29uc3QgZXh0ZW5zaW9uUG9pbnQgPVxuXHRcdFx0XHRub2RlVXBkYXRlc0luZm8ubGFzdEFjdGlvbiA9PT0gXCJDdXRcIlxuXHRcdFx0XHRcdD8gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNNb3ZlVG9Qb3NpdGlvbkFsbG93ZWRcblx0XHRcdFx0XHQ6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzQ29weVRvUG9zaXRpb25BbGxvd2VkO1xuXG5cdFx0XHQvL3JlbW92ZSBjb250ZXh0cyBkZXBlbmRpbmcgb2YgdGhlIGN1c3RvbSBmdW5jdGlvblxuXHRcdFx0aWYgKGV4dGVuc2lvblBvaW50KSB7XG5cdFx0XHRcdGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50ID0gWy4uLnNlbGVjdGVkQ29udGV4dHNdLmZpbHRlcihcblx0XHRcdFx0XHQodGFyZ2V0Q29udGV4dCkgPT5cblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0RlBNSGVscGVyLmdldEN1c3RvbUZ1bmN0aW9uPChjb250ZXh0czogQ29udGV4dFtdKSA9PiBib29sZWFuPihcblx0XHRcdFx0XHRcdFx0XHRleHRlbnNpb25Qb2ludC5tb2R1bGVOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdGV4dGVuc2lvblBvaW50Lm1ldGhvZE5hbWUsXG5cdFx0XHRcdFx0XHRcdFx0dGFibGVcblx0XHRcdFx0XHRcdFx0KSBhcyBGdW5jdGlvblxuXHRcdFx0XHRcdFx0KSgobm9kZVVwZGF0ZXNJbmZvLnBhc3RhYmxlQ29udGV4dHMgYXMgQ29udGV4dFtdKVswXSwgdGFyZ2V0Q29udGV4dCkgLy9ub2RlVXBkYXRlc0luZm8ucGFzdGFibGVDb250ZXh0cyBoYXMgYmVlbiB0aGUgbGFzdCB0aW1lIHRoZSB1c2VyIHByZXNzZWQgdGhlIGN1dC9jb3B5IGJ1dHRvblxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29udGV4dHNmb3JQYXN0YWJsZUVuYWJsZW1lbnQgPSBbLi4uc2VsZWN0ZWRDb250ZXh0c107XG5cdFx0XHR9XG5cblx0XHRcdC8vdGhlIHBhc3RlIGNhbm5vdCBiZSBkb25lIGlmIHNldmVyYWwgY29udGV4dHMgYXJlIHNlbGVjdGVkXG5cdFx0XHRjb3B5Q3V0UGFzdGVFbmFibGVtZW50SW5mby5wYXN0ZUVuYWJsZW1lbnQgPVxuXHRcdFx0XHRzZWxlY3RlZENvbnRleHRzLmxlbmd0aCA8PSAxICYmIGNvbnRleHRzZm9yUGFzdGFibGVFbmFibGVtZW50Lmxlbmd0aCA9PT0gc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGg7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiAgVXBkYXRlcyB0aGUgaW50ZXJuYWwgY29udGV4dCB0byBlbmFibGUvZGlzYWJsZSB0aGUgbW92ZSB1cC9tb3ZlIGRvd24gYnV0dG9ucy5cblx0ICogQHBhcmFtIG1vZGVsT2JqZWN0XG5cdCAqIEBwYXJhbSB0YWJsZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcblx0ICovXG5cdHVwZGF0ZU1vdmVVcERvd25FbmFibGVtZW50OiBmdW5jdGlvbiAobW9kZWxPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LCB0YWJsZTogVGFibGUsIGZvckNvbnRleHRNZW51ID0gZmFsc2UpOiB2b2lkIHtcblx0XHRjb25zdCBtb2RlbE9iamVjdFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBtb2RlbE9iamVjdCA6IChtb2RlbE9iamVjdC5jb250ZXh0bWVudSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSk7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IG1vZGVsT2JqZWN0UGF0aC5zZWxlY3RlZENvbnRleHRzIGFzIENvbnRleHRbXTtcblx0XHRjb25zdCB0YWJsZURlZmluaXRpb24gPSAodGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkpLmdldFRhYmxlRGVmaW5pdGlvbigpO1xuXG5cdFx0Y29uc3QgY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkID0gdGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkO1xuXHRcdC8vIERpc2FibGUgdGhlIG1vdmUgdXAvbW92ZSBkb3duIGJ1dHRvbnMgaWYgdGhlcmUgYXJlIG5vIHNlbGVjdGVkIGNvbnRleHRzLCBpZiB0aGUgdGFibGUgaXMgbm90IGEgVHJlZVRhYmxlLCBvciBpZiB0aGUgdGFibGUgaXMgc29ydGVkXG5cdFx0aWYgKFxuXHRcdFx0c2VsZWN0ZWRDb250ZXh0cy5sZW5ndGggIT09IDEgfHxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgIT09IFwiVHJlZVRhYmxlXCIgfHxcblx0XHRcdHRhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiaXNTb3J0ZWRcIikgPT09IHRydWUgfHxcblx0XHRcdChzZWxlY3RlZENvbnRleHRzWzBdLmdldFByb3BlcnR5KFwiQCR1aTUubm9kZS5sZXZlbFwiKSA9PT0gMSAmJiAhY2hhbmdlU2libGluZ0ZvclJvb3RzU3VwcG9ydGVkKSAvLyBEaXNhYmxlIG1vdmUgdXAvZG93biBmb3Igcm9vdHNcblx0XHQpIHtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZVVwID0gZmFsc2U7XG5cdFx0XHRtb2RlbE9iamVjdFBhdGguc2luZ2xlQ29udGV4dE1vdmFibGVEb3duID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IG1vdmVkQ29udGV4dCA9IHNlbGVjdGVkQ29udGV4dHNbMF07XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBzZWxlY3RlZCBjb250ZXh0IGNhbiBiZSBtb3ZlZCBhY2NvcmRpbmcgdG8gdGhlIGN1c3RvbSBsb2dpYyAoaWYgYW55KSBhbmQgaWYgaXQgZG9lc24ndCBoYXZlIGEgZHJhZnQgaW5zdGFuY2UgaWYgd2UncmUgaW4gYSBMaXN0UmVwb3J0LFxuXHRcdFx0Ly8gYW5kIGlmIGl0J3Mgbm90IG91dC1vZi1wbGFjZSAoaS5lLiBpdCBtdXN0IGJlIGRpc3BsYXllZCBhdCBpdHMgJ3JlYWwnIHBvc2l0aW9uKVxuXHRcdFx0Y29uc3QgbW92YWJsZURyYWZ0ID0gdGFibGUuZ2V0Um93QmluZGluZygpLmlzUmVsYXRpdmUoKSB8fCBtb3ZlZENvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSAhPT0gdHJ1ZTtcblx0XHRcdGNvbnN0IG91dE9mUGxhY2VDb250ZXh0ID0gbW92ZWRDb250ZXh0LmlzVHJhbnNpZW50KCkgIT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGN1c3RvbU1vdmFibGUgPSBUYWJsZVJ1bnRpbWUuY2hlY2tJZk5vZGVJc01vdmFibGUobW92ZWRDb250ZXh0LCB0YWJsZSk7XG5cdFx0XHRtb2RlbE9iamVjdFBhdGguc2luZ2xlQ29udGV4dE1vdmFibGVVcCA9XG5cdFx0XHRcdG1vdmFibGVEcmFmdCAmJiBjdXN0b21Nb3ZhYmxlICYmICFvdXRPZlBsYWNlQ29udGV4dCAmJiAhbW92ZWRDb250ZXh0LmlzRGVsZXRlZCgpICYmIG1vdmVkQ29udGV4dC5nZXRTaWJsaW5nKC0xKSAhPT0gbnVsbDtcblx0XHRcdG1vZGVsT2JqZWN0UGF0aC5zaW5nbGVDb250ZXh0TW92YWJsZURvd24gPVxuXHRcdFx0XHRtb3ZhYmxlRHJhZnQgJiYgY3VzdG9tTW92YWJsZSAmJiAhb3V0T2ZQbGFjZUNvbnRleHQgJiYgIW1vdmVkQ29udGV4dC5pc0RlbGV0ZWQoKSAmJiBtb3ZlZENvbnRleHQuZ2V0U2libGluZygxKSAhPT0gbnVsbDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIGNvbnRleHQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIENyZWF0ZSBidXR0b24gLyBtZW51IC8gbWVudSBpdGVtcy5cblx0ICogQHBhcmFtIGludGVybmFsQ29udGV4dFxuXHQgKiBAcGFyYW0gY3JlYXRlRW5hYmxlbWVudENhbGxiYWNrXG5cdCAqIEBwYXJhbSBjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subW9kdWxlTmFtZVxuXHQgKiBAcGFyYW0gY3JlYXRlRW5hYmxlbWVudENhbGxiYWNrLm1ldGhvZE5hbWVcblx0ICogQHBhcmFtIHRhYmxlXG5cdCAqIEBwYXJhbSBwYXJlbnRDb250ZXh0XG5cdCAqIEBwYXJhbSBub2RlVHlwZVBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG5vZGVUeXBlUGFyYW1ldGVycy5wcm9wZXJ0eU5hbWVcblx0ICogQHBhcmFtIG5vZGVUeXBlUGFyYW1ldGVycy52YWx1ZXNcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHRfdXBkYXRlQ3JlYXRlRW5hYmxlbWVudDogZnVuY3Rpb24gKFxuXHRcdGludGVybmFsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0Y3JlYXRlRW5hYmxlbWVudENhbGxiYWNrOiB7IG1vZHVsZU5hbWU6IHN0cmluZzsgbWV0aG9kTmFtZTogc3RyaW5nIH0sXG5cdFx0dGFibGU6IFRhYmxlLFxuXHRcdHBhcmVudENvbnRleHQ6IENvbnRleHQgfCBudWxsLFxuXHRcdG5vZGVUeXBlUGFyYW1ldGVycz86IHsgcHJvcGVydHlOYW1lOiBzdHJpbmc7IHZhbHVlczogeyB2YWx1ZTogc3RyaW5nIH1bXSB9LFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogdm9pZCB7XG5cdFx0bGV0IHBvc3NpYmxlVmFsdWVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdO1xuXHRcdGlmIChub2RlVHlwZVBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gUHVzaCBhbGwgcG9zc2libGUgdmFsdWVzIGluIHRoZSBtZW51XG5cdFx0XHRwb3NzaWJsZVZhbHVlcyA9IG5vZGVUeXBlUGFyYW1ldGVycy52YWx1ZXMubWFwKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE5vIG1lbnUgLS0+IE9ubHkgJ3VuZGVmaW5lZCcgdmFsdWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgJ0NyZWF0ZScgYnV0dG9uXG5cdFx0XHRwb3NzaWJsZVZhbHVlcyA9IFt1bmRlZmluZWRdO1xuXHRcdH1cblxuXHRcdGNvbnN0IGVuYWJsZW1lbnRGdW5jdGlvbiA9IEZQTUhlbHBlci5nZXRDdXN0b21GdW5jdGlvbjwobm9kZVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgcGFyZW50Q29udGV4dDogQ29udGV4dCB8IG51bGwpID0+IGJvb2xlYW4+KFxuXHRcdFx0Y3JlYXRlRW5hYmxlbWVudENhbGxiYWNrLm1vZHVsZU5hbWUsXG5cdFx0XHRjcmVhdGVFbmFibGVtZW50Q2FsbGJhY2subWV0aG9kTmFtZSxcblx0XHRcdHRhYmxlXG5cdFx0KTtcblxuXHRcdGlmICghZW5hYmxlbWVudEZ1bmN0aW9uKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGVuYWJsZWRGbGFncyA9IHBvc3NpYmxlVmFsdWVzLm1hcCgodmFsdWUpID0+IHtcblx0XHRcdGxldCBlbmFibGVkID0gZmFsc2U7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRlbmFibGVkID0gISEoZW5hYmxlbWVudEZ1bmN0aW9uKHZhbHVlLCBwYXJlbnRDb250ZXh0KSA/PyB0cnVlKTtcblx0XHRcdH0gY2F0Y2ggKF9lcnJvcikge1xuXHRcdFx0XHRlbmFibGVkID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBlbmFibGVkO1xuXHRcdH0pO1xuXHRcdC8vIGVuYWJsZUZsYWdzW2ldIGlzIHRydWUgPD0+IHBvc3NpYmxlVmFsdWVzW2ldIGlzIGFsbG93ZWQgZm9yIGNyZWF0aW9uXG5cblx0XHRjb25zdCBlbmFibGVtZW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXHRcdGVuYWJsZW1lbnRNYXBbXCJDcmVhdGVcIl0gPSBlbmFibGVkRmxhZ3Muc29tZSgoZmxhZykgPT4gZmxhZyk7IC8vIEVuYWJsZSB0aGUgTWVudSAob3IgdGhlIGJ1dHRvbikgaWYgYXQgbGVhc3Qgb25lIG9wdGlvbiBpcyBwb3NzaWJsZVxuXHRcdGVuYWJsZWRGbGFncy5mb3JFYWNoKChlbmFibGVkLCBpbmRleCkgPT4ge1xuXHRcdFx0ZW5hYmxlbWVudE1hcFtgQ3JlYXRlXyR7aW5kZXh9YF0gPSBlbmFibGVkO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgY29udGV4dFBhdGggPSBmb3JDb250ZXh0TWVudSA/IFwiY29udGV4dG1lbnUvXCIgOiBcIlwiO1xuXHRcdGludGVybmFsQ29udGV4dC5zZXRQcm9wZXJ0eShjb250ZXh0UGF0aCArIFwiY3JlYXRlRW5hYmxlbWVudFwiLCBlbmFibGVtZW50TWFwKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2xlYXJzIHRoZSB0YWJsZSBzZWxlY3Rpb24sIGFuZCBlbmFibGVzL2Rpc2FibGVzIHRoZSAnQ3JlYXRlJyBidXR0b24vbWVudSBpZiBuZWNlc3NhcnkuXG5cdCAqIEBwYXJhbSB0YWJsZSBUaGUgdGFibGVcblx0ICovXG5cdGNsZWFyU2VsZWN0aW9uOiBmdW5jdGlvbiAodGFibGU6IFRhYmxlKTogdm9pZCB7XG5cdFx0Ly8gQ2xlYXIgdGhlIHNlbGVjdGlvbiBpbiB0aGUgY29udHJvbFxuXHRcdHRhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cblx0XHQvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbi1yZWxhdGVkIGluZm9ybWF0aW9uIGluIHRoZSBpbnRlcm5hbCBtb2RlbFxuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZGVsZXRlRW5hYmxlZFwiLCBmYWxzZSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCAwKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2VsZWN0ZWRDb250ZXh0c1wiLCBbXSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImRlbGV0YWJsZUNvbnRleHRzXCIsIFtdKTtcblx0XHR9XG5cblx0XHQvLyBFbmFibGUvZGlzYWJsZSB0aGUgJ0NyZWF0ZScgYnV0dG9uL21lbnUgaWYgbmVjZXNzYXJ5XG5cdFx0Y29uc3QgdGFibGVBUEkgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHRpZiAodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlRW5hYmxlbWVudCkge1xuXHRcdFx0dGhpcy5fdXBkYXRlQ3JlYXRlRW5hYmxlbWVudChcblx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQsXG5cdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHR0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzYWJsZUFjdGlvbjogZnVuY3Rpb24gKGFBY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZDogc3RyaW5nW10sIG9EeW5hbWljQWN0aW9uczogUmVjb3JkPHN0cmluZywgeyBiRW5hYmxlZD86IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRhQWN0aW9uc011bHRpc2VsZWN0RGlzYWJsZWQuZm9yRWFjaChmdW5jdGlvbiAoc0FjdGlvbjogc3RyaW5nKSB7XG5cdFx0XHRvRHluYW1pY0FjdGlvbnNbc0FjdGlvbl0gPSB7IGJFbmFibGVkOiBmYWxzZSB9O1xuXHRcdH0pO1xuXHR9LFxuXHRvbkZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvdzogZnVuY3Rpb24gKFxuXHRcdG9FdmVudDogRmllbGQkQ2hhbmdlRXZlbnQgJiBVSTVFdmVudDx7IGlzVmFsaWQ6IGJvb2xlYW4gfT4sXG5cdFx0d2l0aEN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbjogYm9vbGVhblxuXHQpOiB2b2lkIHtcblx0XHQvLyBDUkVBVElPTiBST1cgQ0FTRVxuXHRcdGNvbnN0IG1GaWVsZCA9IEZpZWxkUnVudGltZUhlbHBlci5nZXRGaWVsZFN0YXRlT25DaGFuZ2Uob0V2ZW50KSxcblx0XHRcdG9Tb3VyY2VGaWVsZCA9IG1GaWVsZC5maWVsZCxcblx0XHRcdHNGaWVsZElkID0gb1NvdXJjZUZpZWxkLmdldElkKCk7XG5cblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvU291cmNlRmllbGQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG1GaWVsZFZhbGlkaXR5ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIpLFxuXHRcdFx0bU5ld0ZpZWxkVmFsaWRpdHkgPSBPYmplY3QuYXNzaWduKHt9LCBtRmllbGRWYWxpZGl0eSk7XG5cblx0XHRtTmV3RmllbGRWYWxpZGl0eVtzRmllbGRJZF0gPSBtRmllbGQuc3RhdGU7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIG1OZXdGaWVsZFZhbGlkaXR5KTtcblxuXHRcdC8vIHByZXBhcmUgQ3VzdG9tIFZhbGlkYXRpb25cblx0XHRpZiAod2l0aEN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbikge1xuXHRcdFx0Y29uc3QgbUN1c3RvbVZhbGlkaXR5ID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiKSxcblx0XHRcdFx0bU5ld0N1c3RvbVZhbGlkaXR5ID0gT2JqZWN0LmFzc2lnbih7fSwgbUN1c3RvbVZhbGlkaXR5KTtcblx0XHRcdG1OZXdDdXN0b21WYWxpZGl0eVtvU291cmNlRmllbGQuZ2V0QmluZGluZyhcInZhbHVlXCIpIS5nZXRQYXRoKCldID0ge1xuXHRcdFx0XHRmaWVsZElkOiBvU291cmNlRmllbGQuZ2V0SWQoKVxuXHRcdFx0fTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwgbU5ld0N1c3RvbVZhbGlkaXR5KTtcblx0XHRcdC8vIFJlbW92ZSBleGlzdGluZyBDdXN0b21WYWxpZGF0aW9uIG1lc3NhZ2Vcblx0XHRcdGNvbnN0IHNUYXJnZXQgPSBgJHtvU291cmNlRmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpfS8ke29Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nUGF0aChcInZhbHVlXCIpfWA7XG5cdFx0XHRNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdFx0LmdldERhdGEoKVxuXHRcdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IE1lc3NhZ2UpIHtcblx0XHRcdFx0XHRpZiAob01lc3NhZ2UuZ2V0VGFyZ2V0cygpWzBdID09PSBzVGFyZ2V0KSB7XG5cdFx0XHRcdFx0XHRNZXNzYWdpbmcucmVtb3ZlTWVzc2FnZXMob01lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHRvblRyZWVUYWJsZUNvbnRleHRDaGFuZ2VkOiBmdW5jdGlvbiAoZXZlbnQ6IFVJNUV2ZW50LCBpbml0aWFsRXhwYW5zaW9uTGV2ZWw/OiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyBXaGVuIHRoZSBjb250ZXh0IG9mIGEgVHJlZVRhYmxlIGNoYW5nZXMsIHdlIHdhbnQgdG8gcmVzdG9yZSBpdHMgZXhwYW5zaW9uIHN0YXRlIHRvIHRoZSBkZWZhdWx0OlxuXHRcdC8vICAgLSBhbGwgZXhwYW5kZWQgaWYgdGhlcmUncyBhIHNlYXJjaCBwYXJhbWV0ZXIgY29taW5nIGZyb20gdGhlIGZpbHRlckJhclxuXHRcdC8vICAgLSBvdGhlcndpc2UgaW5pdGlhbCBleHBhbnNpb24gc3RhdGUgY29taW5nIGZyb20gdGhlIFBWIChzdG9yZWQgaW4gdGhlIHBheWxvYWQpXG5cdFx0Ly8gICAtIG90aGVyd2lzZSBubyBleHBhbnNpb24gYXQgYWxsXG5cblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCB0YWJsZSA9IHNvdXJjZSBhcyBUYWJsZTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdGNvbnN0IHJvd0JpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0aWYgKCFyb3dCaW5kaW5nPy5nZXRDb250ZXh0KCkgfHwgdGFibGVBUEkuZ2V0SWdub3JlQ29udGV4dENoYW5nZUV2ZW50KCkpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBpcyBub3QgYm91bmQsIG9yIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2Ygc3dpdGNoaW5nIGJldHdlZW4gbm9ybWFsIGFuZCBmdWxsc2NyZWVuLCBzbyB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgZXhwYW5zaW9uIHN0YXRlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWdncmVnYXRpb246IHtcblx0XHRcdGFnZ3JlZ2F0ZT86IG9iamVjdDtcblx0XHRcdGV4cGFuZFRvPzogbnVtYmVyO1xuXHRcdFx0Z3JhbmRUb3RhbEF0Qm90dG9tT25seT86IGJvb2xlYW47XG5cdFx0XHRncm91cD86IG9iamVjdDtcblx0XHRcdGdyb3VwTGV2ZWxzPzogc3RyaW5nW107XG5cdFx0XHRoaWVyYXJjaHlRdWFsaWZpZXI/OiBzdHJpbmc7XG5cdFx0XHRzZWFyY2g/OiBzdHJpbmc7XG5cdFx0XHRzdWJ0b3RhbHNBdEJvdHRvbU9ubHk/OiBib29sZWFuO1xuXHRcdH0gPSByb3dCaW5kaW5nLmdldEFnZ3JlZ2F0aW9uKCkgPz8ge307XG5cdFx0Y29uc3QgZmlsdGVySW5mbyA9IFRhYmxlVXRpbHMuZ2V0QWxsRmlsdGVySW5mbyh0YWJsZSk7XG5cdFx0YWdncmVnYXRpb24uZXhwYW5kVG8gPSBmaWx0ZXJJbmZvLnNlYXJjaCA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogaW5pdGlhbEV4cGFuc2lvbkxldmVsO1xuXHRcdHJvd0JpbmRpbmcuc2V0QWdncmVnYXRpb24oYWdncmVnYXRpb24pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhbiBpdGVtIGluIGEgJ0NyZWF0ZScgbWVudSBpcyBjbGlja2VkLiBJdCBjcmVhdGVzIGEgZG9jdW1lbnQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBpbml0aWFsIGRhdGEuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKiBAcGFyYW0gdmFsdWVJbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gaW4gdGhlIG1lbnVcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHMgVGhlIHNlbGVjdGVkIGNvbnRleHRzIGluIHRoZSB0YWJsZSBmb3IgdGhpcyAnQ3JlYXRlJyBtZW51XG5cdCAqL1xuXHRvbkNyZWF0ZU1lbnVJdGVtUHJlc3M6IGFzeW5jIGZ1bmN0aW9uIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPiwgdmFsdWVJbmRleDogbnVtYmVyLCBzZWxlY3RlZENvbnRleHRzOiBDb250ZXh0W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtZGNUYWJsZSA9IEZQTUhlbHBlci5nZXRNZGNUYWJsZShldmVudC5nZXRTb3VyY2UoKSk7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBtZGNUYWJsZT8uZ2V0UGFyZW50KCkgYXMgVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cblx0XHQvLyBTb21lIGNoZWNrcyB0byBiZSBvbiB0aGUgc2FmZSBzaWRlXG5cdFx0aWYgKCF0YWJsZUFQSSB8fCAhbWRjVGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgbm9kZVR5cGUgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZTtcblx0XHRpZiAoIW5vZGVUeXBlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcodGFibGVBUEkpO1xuXHRcdGNvbnN0IGNyZWF0aW9uRGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdGNyZWF0aW9uRGF0YVtub2RlVHlwZS5wcm9wZXJ0eU5hbWVdID0gbm9kZVR5cGUudmFsdWVzW3ZhbHVlSW5kZXhdLnZhbHVlO1xuXG5cdFx0Y29uc3QgY3JlYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRjcmVhdGlvbk1vZGU6IHN0cmluZztcblx0XHRcdHNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0W107XG5cdFx0XHR0YWJsZUlkPzogc3RyaW5nO1xuXHRcdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXTtcblx0XHRcdGRhdGE/OiBvYmplY3Q7XG5cdFx0fSA9IHtcblx0XHRcdHNlbGVjdGVkQ29udGV4dHMsXG5cdFx0XHRjcmVhdGlvbk1vZGU6IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNyZWF0ZS5tb2RlLFxuXHRcdFx0ZGF0YTogY3JlYXRpb25EYXRhLFxuXHRcdFx0dGFibGVJZDogbWRjVGFibGU/LmdldElkKClcblx0XHR9O1xuXG5cdFx0aWYgKGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZykge1xuXHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzID0gbm9kZVR5cGUudmFsdWVzW3ZhbHVlSW5kZXhdLmNyZWF0aW9uRGlhbG9nRmllbGRzO1xuXHRcdFx0aWYgKCFjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25EaWFsb2dGaWVsZHMgfHwgY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uRGlhbG9nRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBVc2UgdGhlIGRlZmF1bHQgdmFsdWUgaWYgbm8gY3JlYXRpb24gZmllbGRzIGFyZSBzcGVjaWZpZWQgZm9yIHRoaXMgbWVudSBpdGVtXG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcyA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0aW9uRGlhbG9nRmllbGRzO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdFx0Ly8gSW4gY3JlYXRpb24gZGlhbG9nIG1vZGUsIHdlIGZvcmNlIHRoZSB0YWJsZSBkYXRhIHRvIGJlIGxvYWRlZCBiZWZvcmUgY3JlYXRpbmcgdGhlIGRvY3VtZW50XG5cdFx0XHRcdC8vICh0byBvdmVyY29tZSB0aGUgY2FzZSBpbiBhIExpc3RSZXBvcnQgd2hlcmUgbm8gZGF0YSBpcyBsb2FkZWQgeWV0KVxuXHRcdFx0XHRhd2FpdCBtZGNUYWJsZS5yZWJpbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0LmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KHRhYmxlQVBJLmdldFJvd0JpbmRpbmcoKSwgY3JlYXRpb25QYXJhbWV0ZXJzKVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3IGRvY3VtZW50OiAke2Vycm9yfWApO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSAnQ3JlYXRlJyBidXR0b24gaXMgcHJlc3NlZCwgb3IgdGhlICdDcmVhdGUnIGNvbW1hbmQgaW52b2tlZC5cblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHRzIFRoZSBzZWxlY3RlZCBjb250ZXh0cyBpbiB0aGUgdGFibGUgZm9yIHRoaXMgJ0NyZWF0ZScgYnV0dG9uXG5cdCAqL1xuXHRvbkNyZWF0ZUJ1dHRvblByZXNzOiBhc3luYyBmdW5jdGlvbiAoZXZlbnQ6IFVJNUV2ZW50LCBzZWxlY3RlZENvbnRleHRzPzogQ29udGV4dFtdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWRjVGFibGUgPSBGUE1IZWxwZXIuZ2V0TWRjVGFibGUoZXZlbnQuZ2V0U291cmNlKCkpO1xuXHRcdGNvbnN0IHRhYmxlQVBJID0gbWRjVGFibGU/LmdldFBhcmVudCgpIGFzIFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXG5cdFx0Ly8gU29tZSBjaGVja3MgdG8gYmUgb24gdGhlIHNhZmUgc2lkZVxuXHRcdGlmICghdGFibGVBUEkgfHwgIW1kY1RhYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY3JlYXRpb25QYXJhbWV0ZXJzOiB7XG5cdFx0XHRjcmVhdGVBdEVuZD86IGJvb2xlYW47XG5cdFx0XHRjcmVhdGlvbk1vZGU6IHN0cmluZztcblx0XHRcdG91dGJvdW5kPzogc3RyaW5nO1xuXHRcdFx0Y3JlYXRpb25Sb3c/OiBDcmVhdGlvblJvdztcblx0XHRcdHNlbGVjdGVkQ29udGV4dHM/OiBDb250ZXh0W107XG5cdFx0XHR0YWJsZUlkPzogc3RyaW5nO1xuXHRcdFx0Y3JlYXRpb25EaWFsb2dGaWVsZHM/OiBzdHJpbmdbXTtcblx0XHR9ID0geyBjcmVhdGlvbk1vZGU6IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNyZWF0ZS5tb2RlIH07XG5cblx0XHRzd2l0Y2ggKGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbk1vZGUpIHtcblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLkV4dGVybmFsOlxuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMub3V0Ym91bmQgPSAodGFibGVBUEkudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24uY3JlYXRlIGFzIENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwpLm91dGJvdW5kO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3c6XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvblJvdyA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0XHRjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRlQXRFbmQgPSB0YWJsZUFQSS50YWJsZURlZmluaXRpb24uY29udHJvbC5jcmVhdGVBdEVuZCA/PyBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLk5ld1BhZ2U6XG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5JbmxpbmU6XG5cdFx0XHRjYXNlIENyZWF0aW9uTW9kZS5DcmVhdGlvbkRpYWxvZzpcblx0XHRcdFx0Y3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0ZUF0RW5kID0gdGFibGVBUEkudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuY3JlYXRlQXRFbmQgPz8gZmFsc2U7XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy50YWJsZUlkID0gbWRjVGFibGU/LmdldElkKCk7XG5cdFx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5zZWxlY3RlZENvbnRleHRzID0gc2VsZWN0ZWRDb250ZXh0cztcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93czpcblx0XHRcdFx0Ly8gTm90aGluZ1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gT3RoZXIgbW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjcmVhdGlvblBhcmFtZXRlcnMuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25EaWFsb2cpIHtcblx0XHRcdGNyZWF0aW9uUGFyYW1ldGVycy5jcmVhdGlvbkRpYWxvZ0ZpZWxkcyA9IHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0aW9uRGlhbG9nRmllbGRzO1xuXHRcdFx0aWYgKCFtZGNUYWJsZS5nZXRSb3dCaW5kaW5nKCkpIHtcblx0XHRcdFx0Ly8gSW4gY3JlYXRpb24gZGlhbG9nIG1vZGUsIHdlIGZvcmNlIHRoZSB0YWJsZSBkYXRhIHRvIGJlIGxvYWRlZCBiZWZvcmUgY3JlYXRpbmcgdGhlIGRvY3VtZW50XG5cdFx0XHRcdC8vICh0byBvdmVyY29tZSB0aGUgY2FzZSBpbiBhIExpc3RSZXBvcnQgd2hlcmUgbm8gZGF0YSBpcyBsb2FkZWQgeWV0KVxuXHRcdFx0XHRhd2FpdCBtZGNUYWJsZS5yZWJpbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0YWJsZUFQSSk7XG5cblx0XHRpZiAoY3JlYXRpb25QYXJhbWV0ZXJzLmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cykge1xuXHRcdFx0dmlldy5nZXRDb250cm9sbGVyKClcblx0XHRcdFx0LmVkaXRGbG93LmNyZWF0ZUVtcHR5Um93c0FuZEZvY3VzKG1kY1RhYmxlKVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIG5ldyBlbXB0eSByb3c6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3LmdldENvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQodGFibGVBUEksIGNyZWF0aW9uUGFyYW1ldGVycylcblx0XHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgZG9jdW1lbnQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1hbmFnZSB0aGUgSW50ZW50QmFzZWQgTmF2aWdhdGlvbiBlbmFibGVtZW50LlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHRcblx0ICogQHBhcmFtIG5hdmlnYXRpb25BdmFpbGFibGVNYXBcblx0ICogQHBhcmFtIHNlbGVjdGVkQ29udGV4dHNcblx0ICogQHBhcmFtIGZvckNvbnRleHRNZW51XG5cdCAqL1xuXHRzZXRJbnRlbnRCYXNlZE5hdmlnYXRpb25FbmFibGVtZW50OiBmdW5jdGlvbiAoXG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdG5hdmlnYXRpb25BdmFpbGFibGVNYXA6IHN0cmluZ1tdLFxuXHRcdHNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3Qgc0tleSBpbiBuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwKSB7XG5cdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpYm4vJHtzS2V5fWAsIHtcblx0XHRcdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpYm4vJHtzS2V5fWAsIHtcblx0XHRcdFx0XHQvLyBEbyBub3QgY2hhbmdlIGVuYWJsZWQsIGFBcHBsaWNhYmxlIGFuZCBhTm90QXBwbGljYWJsZSBwcm9wZXJ0eSBpbiBjYXNlIG9mIGNvbnRleHQgbWVudSBjYWxjdWxhdGlvblxuXHRcdFx0XHRcdGJFbmFibGVkOiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2libi8ke3NLZXl9L2JFbmFibGVkYCksXG5cdFx0XHRcdFx0YUFwcGxpY2FibGU6IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vYUFwcGxpY2FibGVgKSxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZTogaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS9hTm90QXBwbGljYWJsZWApLFxuXHRcdFx0XHRcdGJFbmFibGVkRm9yQ29udGV4dE1lbnU6IGZhbHNlLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYUFwcGxpY2FibGUgPSBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGUgPSBbXTtcblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG5hdmlnYXRpb25BdmFpbGFibGVNYXBbc0tleV07XG5cdFx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiBzZWxlY3RlZENvbnRleHRzKSB7XG5cdFx0XHRcdGlmIChzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHNQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRjb25zdCBlbmFibGVkUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImJFbmFibGVkXCIgOiBcImJFbmFibGVkRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vaWJuLyR7c0tleX0vJHtlbmFibGVkUHJvcGVydHl9YCwgdHJ1ZSk7XG5cdFx0XHRcdFx0YUFwcGxpY2FibGUucHVzaChzZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlLnB1c2goc2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS8ke2FwcGxpY2FibGVQcm9wZXJ0eX1gLCBhQXBwbGljYWJsZSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHQuc2V0UHJvcGVydHkoYCR7aW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9pYm4vJHtzS2V5fS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX1gLCBhTm90QXBwbGljYWJsZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiBhIGNvbnRleHQgbWVudSBpdGVtIGlzIHByZXNzZWQuXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKi9cblx0b25Db250ZXh0TWVudUl0ZW1TZWxlY3RlZDogZnVuY3Rpb24gKGV2ZW50OiBVSTVFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG1kY1RhYmxlID0gRlBNSGVscGVyLmdldE1kY1RhYmxlKGV2ZW50LmdldFNvdXJjZSgpKTtcblx0XHRjb25zdCB0YWJsZUFQSSA9IG1kY1RhYmxlPy5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblxuXHRcdC8vIFNldCB0aGUgZmxhZyBvbiB0aGUgdGFibGVBUEkgc28gdGhhdCBnZXRTZWxlY3RlZENvbnRleHRzIHJldHVybnMgdGhlIGNvcnJlY3QgdmFsdWVcblx0XHR0YWJsZUFQST8uc2V0Q29udGV4dE1lbnVBY3RpdmUodHJ1ZSk7XG5cblx0XHQvLyBBZnRlciBhIHNob3J0IGRlbGF5IChvbmNlIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQpLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBmbGFnIG9uIHRoZSB0YWJsZVxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGFibGVBUEk/LnNldENvbnRleHRNZW51QWN0aXZlKGZhbHNlKTtcblx0XHR9LCAwKTtcblx0fSxcblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgTURDIERhdGFTdGF0ZUluZGljYXRvciBwbHVnaW4gdG8gZGlzcGxheSBtZXNzYWdlU3RyaXAgb24gYSB0YWJsZS5cblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIGNvbnRyb2xcblx0ICogQHJldHVybnMgV2hldGhlciB0byByZW5kZXIgdGhlIG1lc3NhZ2VTdHJpcCB2aXNpYmxlXG5cdCAqL1xuXHRkYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXI6IGZ1bmN0aW9uIChtZXNzYWdlOiBNZXNzYWdlLCBjb250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdGFibGVBUEkgPSBjb250cm9sLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdHJldHVybiB0YWJsZUFQSS5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXIobWVzc2FnZSwgY29udHJvbCk7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUnVudGltZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQTBCQSxNQUFNQSxZQUFZLEdBQUdDLFNBQVMsQ0FBQ0QsWUFBWTtFQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsTUFBTUUsWUFBWSxHQUFHO0lBQ3BCQyxnQ0FBZ0MsRUFBRSxTQUFBQSxDQUFVQyxjQUFzQixFQUFFQyxPQUFnQixFQUFRO01BQzNGO01BQ0EsTUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUNFLFNBQVMsQ0FBQyxDQUFhO01BQ2pELElBQUlILGNBQWMsS0FBS0osWUFBWSxDQUFDUSxXQUFXLEVBQUU7UUFDaEQsTUFBTUMsT0FBTyxHQUFHSCxTQUFTLENBQ3ZCSSxVQUFVLENB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
|
|
@@ -333,9 +333,9 @@ const TableRuntime = {
|
|
|
333
333
|
const outOfPlaceContext = movedContext.isTransient() !== undefined;
|
|
334
334
|
const customMovable = TableRuntime.checkIfNodeIsMovable(movedContext, table);
|
|
335
335
|
modelObjectPath.singleContextMovableUp =
|
|
336
|
-
movableDraft && customMovable && !outOfPlaceContext && movedContext.getSibling(-1) !== null;
|
|
336
|
+
movableDraft && customMovable && !outOfPlaceContext && !movedContext.isDeleted() && movedContext.getSibling(-1) !== null;
|
|
337
337
|
modelObjectPath.singleContextMovableDown =
|
|
338
|
-
movableDraft && customMovable && !outOfPlaceContext && movedContext.getSibling(1) !== null;
|
|
338
|
+
movableDraft && customMovable && !outOfPlaceContext && !movedContext.isDeleted() && movedContext.getSibling(1) !== null;
|
|
339
339
|
}
|
|
340
340
|
},
|
|
341
341
|
|