@sapui5/sap.fe.macros 1.141.1 → 1.142.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/Field.js +30 -13
- package/src/sap/fe/macros/Field.ts +60 -30
- package/src/sap/fe/macros/FooterContent.js +5 -2
- package/src/sap/fe/macros/FooterContent.tsx +6 -3
- package/src/sap/fe/macros/KPITag.js +1 -1
- package/src/sap/fe/macros/KPITag.tsx +3 -1
- package/src/sap/fe/macros/MacroAPI.js +3 -2
- package/src/sap/fe/macros/MacroAPI.ts +2 -2
- package/src/sap/fe/macros/MessageButton.js +3 -2
- package/src/sap/fe/macros/MessageButton.tsx +5 -2
- package/src/sap/fe/macros/MicroChart.js +10 -6
- package/src/sap/fe/macros/MicroChart.tsx +8 -2
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/RichTextEditor.js +3 -4
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
- package/src/sap/fe/macros/Status.js +35 -8
- package/src/sap/fe/macros/Status.tsx +23 -2
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/chart/Action.js +25 -2
- package/src/sap/fe/macros/chart/Action.ts +13 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +8 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +17 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +54 -11
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +70 -11
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +37 -9
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +45 -6
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- 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/field/FieldRuntimeHelper.js +3 -34
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
- package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +96 -65
- package/src/sap/fe/macros/form/FormContainer.block.ts +104 -65
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/library.js +3 -3
- package/src/sap/fe/macros/library.ts +2 -0
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +7 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +15 -2
- package/src/sap/fe/macros/table/Action.ts +11 -1
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
- package/src/sap/fe/macros/table/MdcTableTemplate.js +91 -10
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +131 -10
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +70 -29
- package/src/sap/fe/macros/table/Table.block.tsx +65 -12
- package/src/sap/fe/macros/table/TableAPI.js +169 -131
- package/src/sap/fe/macros/table/TableAPI.ts +58 -28
- package/src/sap/fe/macros/table/TableDefinition.js +19 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +4 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +8 -9
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +2 -2
- package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +67 -26
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +108 -118
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -275,7 +275,6 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
|
|
|
275
275
|
const bindingString = FormHelper.generateBindingExpression(this.navigationPath, computedDataModelObject);
|
|
276
276
|
const designtime = computedDataModelObject?.targetObject?.annotations?.UI?.AdaptationHidden ? "not-adaptable-tree" : "sap/fe/macros/form/FormElement.designtime";
|
|
277
277
|
getDataPointTemplate = xml`
|
|
278
|
-
<template:then>
|
|
279
278
|
<template:with path="formElements>0/annotationPath" var="dataPoint">
|
|
280
279
|
<f:FormElement
|
|
281
280
|
dt:designtime="${designtime}"
|
|
@@ -298,14 +297,11 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
|
|
|
298
297
|
</f:fields>
|
|
299
298
|
</f:FormElement>
|
|
300
299
|
</template:with>
|
|
301
|
-
|
|
300
|
+
|
|
302
301
|
`;
|
|
303
302
|
}
|
|
304
303
|
}
|
|
305
304
|
const getContactTemplate = xml`
|
|
306
|
-
<template:elseif
|
|
307
|
-
test="{= \${formElements>0/annotationPath}.indexOf('com.sap.vocabularies.Communication.v1.Contact') > -1 }"
|
|
308
|
-
>
|
|
309
305
|
<template:with path="formElements>0/annotationPath" var="metaPath">
|
|
310
306
|
<f:FormElement
|
|
311
307
|
dt:designtime="{= \${metaPath>./@com.sap.vocabularies.UI.v1.AdaptationHidden} ? 'not-adaptable-tree' : 'sap/fe/macros/form/FormElement.designtime' }"
|
|
@@ -329,17 +325,21 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
|
|
|
329
325
|
/>
|
|
330
326
|
</f:fields>
|
|
331
327
|
</f:FormElement>
|
|
332
|
-
</template:with
|
|
333
|
-
</template:elseif>`;
|
|
328
|
+
</template:with>`;
|
|
334
329
|
return xml`
|
|
335
330
|
<template:if test="{= \${formElements>0/annotationPath}.indexOf('com.sap.vocabularies.UI.v1.DataPoint') > -1 }">
|
|
336
|
-
|
|
337
|
-
|
|
331
|
+
<template:then>
|
|
332
|
+
${getDataPointTemplate}
|
|
333
|
+
</template:then>
|
|
334
|
+
<template:elseif
|
|
335
|
+
test="{= \${formElements>0/annotationPath}.indexOf('com.sap.vocabularies.Communication.v1.Contact') > -1 }"
|
|
336
|
+
>
|
|
337
|
+
${getContactTemplate}
|
|
338
|
+
</template:elseif>
|
|
338
339
|
<template:else>
|
|
339
340
|
${this.getDataFieldsForAnnotations()}
|
|
340
341
|
</template:else>
|
|
341
|
-
</template:if
|
|
342
|
-
`;
|
|
342
|
+
</template:if>`;
|
|
343
343
|
}
|
|
344
344
|
|
|
345
345
|
/**
|
|
@@ -349,46 +349,77 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
|
|
|
349
349
|
*/;
|
|
350
350
|
_proto.getConnectedFieldsFormElement = function getConnectedFieldsFormElement(formElement) {
|
|
351
351
|
let connectedFieldElements = "";
|
|
352
|
-
|
|
352
|
+
|
|
353
|
+
// Create a sorted copy of the connected fields based on the placeholder order in the template string.
|
|
354
|
+
// The template string is expected to look like "{FieldA} / {FieldB}" etc. We extract the placeholder
|
|
355
|
+
// sequence and sort the connected fields accordingly (falling back to original order for unmatched fields).
|
|
356
|
+
let sortedConnectedFields = formElement.connectedFields ? [...formElement.connectedFields] : [];
|
|
357
|
+
if (sortedConnectedFields.length > 1) {
|
|
358
|
+
const templateString = sortedConnectedFields[0].originalTemplate || "";
|
|
359
|
+
// Extract placeholders in the sequence defined by the template (e.g. "{FieldA} / {FieldB}")
|
|
360
|
+
const placeholders = Array.from(templateString.matchAll(/\{([^}]+)\}/g)).map(m => String(m[1]).trim()).filter(p => p.length > 0);
|
|
361
|
+
|
|
362
|
+
// Helper to derive the identifier from the connected field (last segment of fullyQualifiedName)
|
|
363
|
+
const getFieldIdentifier = cf => {
|
|
364
|
+
const originalObject = cf.originalObject;
|
|
365
|
+
return originalObject?.fullyQualifiedName ? originalObject.fullyQualifiedName.substring(originalObject.fullyQualifiedName.lastIndexOf("/") + 1) : "";
|
|
366
|
+
};
|
|
367
|
+
const fieldIds = sortedConnectedFields.map(getFieldIdentifier);
|
|
368
|
+
const uniquePlaceholders = new Set(placeholders);
|
|
369
|
+
|
|
370
|
+
// We only reorder if the template is perfectly annotated:
|
|
371
|
+
// 1. Same number of placeholders as connected fields
|
|
372
|
+
// 2. All placeholders are unique
|
|
373
|
+
// 3. Every connected field id is referenced exactly once
|
|
374
|
+
const isPerfectMatch = placeholders.length === sortedConnectedFields.length && uniquePlaceholders.size === placeholders.length && fieldIds.every(id => uniquePlaceholders.has(id));
|
|
375
|
+
|
|
376
|
+
// Review feedback: Do NOT "fix" badly annotated connected fields.
|
|
377
|
+
// If the annotation is not perfect, we keep the original order.
|
|
378
|
+
if (isPerfectMatch) {
|
|
379
|
+
const mapById = new Map(sortedConnectedFields.map(cf => [getFieldIdentifier(cf), cf]));
|
|
380
|
+
sortedConnectedFields = placeholders.map(ph => mapById.get(ph));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
for (const connectedField of sortedConnectedFields) {
|
|
353
384
|
const model = this.contextPath.getModel();
|
|
354
385
|
const tempName = connectedField.originalObject?.fullyQualifiedName;
|
|
355
386
|
const path = tempName?.substring(tempName.lastIndexOf("/") + 1);
|
|
356
387
|
const bindingContext = model.createBindingContext(formElement.annotationPath + "Target/$AnnotationPath/Data/" + path);
|
|
357
388
|
const delimiter = CommonHelper.getDelimiter(connectedField.originalTemplate ?? "");
|
|
358
|
-
const notLastIndexCondition =
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
389
|
+
const notLastIndexCondition = sortedConnectedFields.indexOf(connectedField) !== sortedConnectedFields.length - 1 ? xml`<Text
|
|
390
|
+
text="${delimiter}"
|
|
391
|
+
class="sapUiSmallMarginBeginEnd"
|
|
392
|
+
width="100%"
|
|
393
|
+
/>` : "";
|
|
363
394
|
const computedIdPrefix = this.id ? StableIDHelper.generate([this.id, "SemanticFormElement", formElement.key, connectedField.originalObject?.Value.path]) : "";
|
|
364
395
|
const computedVhIdPrefix = this.id ? StableIDHelper.generate([this.id, formElement.key, "FieldValueHelp"]) : "";
|
|
365
396
|
let connectedFieldElement = "";
|
|
366
397
|
connectedFieldElement = xml`
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
398
|
+
<macro:Field
|
|
399
|
+
idPrefix="${computedIdPrefix}"
|
|
400
|
+
vhIdPrefix="${computedVhIdPrefix}"
|
|
401
|
+
contextPath="${this.entitySet?.getPath()}"
|
|
402
|
+
metaPath="${bindingContext.getPath()}"
|
|
403
|
+
onChange="${this.onChange}"
|
|
404
|
+
ariaLabelledBy="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
|
|
405
|
+
>
|
|
406
|
+
<formatOptions
|
|
407
|
+
textLinesEdit="${formElement.formatOptions?.textLinesEdit}"
|
|
408
|
+
textMaxLines="${formElement.formatOptions?.textMaxLines}"
|
|
409
|
+
textMaxCharactersDisplay="${formElement.formatOptions?.textMaxCharactersDisplay}"
|
|
410
|
+
textMaxLength="${formElement.formatOptions?.textMaxLength}"
|
|
411
|
+
textExpandBehaviorDisplay="${formElement.formatOptions?.textExpandBehaviorDisplay}"
|
|
412
|
+
textAlignMode="Form"
|
|
413
|
+
showEmptyIndicator="true"
|
|
414
|
+
fieldEditStyle="${formElement.formatOptions?.fieldEditStyle}"
|
|
415
|
+
radioButtonsHorizontalLayout="${formElement.formatOptions?.radioButtonsHorizontalLayout}"
|
|
416
|
+
/>
|
|
417
|
+
<macro:layoutData>
|
|
418
|
+
<FlexItemData growFactor="{= %{ui>/isEditable} ? 1 : 0}" />
|
|
419
|
+
</macro:layoutData>
|
|
420
|
+
</macro:Field>
|
|
421
|
+
${notLastIndexCondition}
|
|
422
|
+
`;
|
|
392
423
|
connectedFieldElements += connectedFieldElement;
|
|
393
424
|
}
|
|
394
425
|
const dataModelObjectForConnectedFields = getInvolvedDataModelObjects(this.contextPath.getModel().createBindingContext(formElement.annotationPath ?? ""));
|
|
@@ -406,29 +437,29 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
|
|
|
406
437
|
const designtime = dataModelObjectForConnectedFields?.targetObject?.annotations?.UI?.AdaptationHidden ? "not-adaptable-tree" : "sap/fe/macros/form/FormElement.designtime";
|
|
407
438
|
const isRequired = getRequiredExpressionForConnectedDataField(dataModelObjectForConnectedFields)?.toString();
|
|
408
439
|
return xml`
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
440
|
+
<f:FormElement
|
|
441
|
+
xmlns:f="sap.ui.layout.form"
|
|
442
|
+
dt:designtime="${designtime}"
|
|
443
|
+
id="${formElementId}"
|
|
444
|
+
visible="${visibleExpression}"
|
|
445
|
+
${this.attr("binding", bindingString)}
|
|
446
|
+
>
|
|
447
|
+
<f:label>
|
|
448
|
+
<Label
|
|
449
|
+
text="${targetObject?.Label ?? formElement.label}"
|
|
450
|
+
id="${this.id ? StableIDHelper.generate([this.id, "SemanticFormElementLabel", formElement.key]) : ""}"
|
|
420
451
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
452
|
+
/>
|
|
453
|
+
</f:label>
|
|
454
|
+
<f:fields>
|
|
455
|
+
<controls:FieldWrapper required="${isRequired}">
|
|
456
|
+
<HBox wrap="Wrap">
|
|
457
|
+
${connectedFieldElements}
|
|
458
|
+
</HBox>
|
|
459
|
+
</controls:FieldWrapper>
|
|
460
|
+
</f:fields>
|
|
461
|
+
</f:FormElement>
|
|
462
|
+
`;
|
|
432
463
|
}
|
|
433
464
|
|
|
434
465
|
/**
|
|
@@ -797,4 +828,4 @@ sap.ui.define(["sap/fe/core/buildingBlocks/templating/BuildingBlockSupport", "sa
|
|
|
797
828
|
_exports = FormContainerBlock;
|
|
798
829
|
return _exports;
|
|
799
830
|
}, false);
|
|
800
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQ29udGFpbmVyQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJfZGVjMiIsImJsb2NrQXR0cmlidXRlIiwidHlwZSIsIl9kZWMzIiwicmVxdWlyZWQiLCJpc1B1YmxpYyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJibG9ja0FnZ3JlZ2F0aW9uIiwiX2RlYzE3IiwiYmxvY2tFdmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9ja1RlbXBsYXQiLCJwcm9wcyIsImV4dGVybmFsQ29uZmlndXJhdGlvbiIsInNldHRpbmdzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZvcm1FbGVtZW50cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJvQ29udGV4dE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJtZXRhUGF0aCIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsIiRUeXBlIiwiTGFiZWwiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicGF0aCIsInRlcm0iLCJ2YWx1ZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJhbm5vdGF0aW9ucyIsImZpZWxkcyIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsInVuZGVmaW5lZCIsIm9Gb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsImZvcm1Db250YWluZXJzIiwiY29udGVudElkIiwidmlld0lkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwib3ZlcmZsb3dUb29sYmFySUQiLCJpZCIsIlN0YWJsZUlESGVscGVyIiwiZ2VuZXJhdGUiLCJkYXRhTW9kZWxPYmplY3QiLCJiaW5kaW5nU3RyaW5nIiwiRm9ybUhlbHBlciIsImdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24iLCJuYXZpZ2F0aW9uUGF0aCIsInhtbCIsImRlc2lnbnRpbWVTZXR0aW5ncyIsInZpc2libGUiLCJnZXRPYmplY3QiLCJoYXNVaUhpZGRlbkFubm90YXRpb24iLCJ0aXRsZSIsInRpdGxlTGV2ZWwiLCJhY3Rpb25zIiwiYXR0ciIsImdldFRlbXBsYXRlZEZvcm1FbGVtZW50cyIsImdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzIiwiZ2V0RGF0YVBvaW50VGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGgiLCJmaW5kIiwiZGYiLCJhbm5vdGF0aW9uUGF0aCIsImlkUHJlZml4IiwiaXNFZGl0YWJsZUhlYWRlciIsImluY2x1ZGVzIiwiZm9ybUVsZW1lbnRJZCIsImtleSIsImNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRlc2lnbnRpbWUiLCJVSSIsIkFkYXB0YXRpb25IaWRkZW4iLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdldFBhdGgiLCJkaXNwbGF5TW9kZSIsIm9uQ2hhbmdlIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zIiwiZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQiLCJmb3JtRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudHMiLCJjb25uZWN0ZWRGaWVsZCIsImNvbm5lY3RlZEZpZWxkcyIsIm1vZGVsIiwidGVtcE5hbWUiLCJvcmlnaW5hbE9iamVjdCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiYmluZGluZ0NvbnRleHQiLCJkZWxpbWl0ZXIiLCJDb21tb25IZWxwZXIiLCJnZXREZWxpbWl0ZXIiLCJvcmlnaW5hbFRlbXBsYXRlIiwibm90TGFzdEluZGV4Q29uZGl0aW9uIiwiaW5kZXhPZiIsImNvbXB1dGVkSWRQcmVmaXgiLCJWYWx1ZSIsImNvbXB1dGVkVmhJZFByZWZpeCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudCIsImZvcm1hdE9wdGlvbnMiLCJ0ZXh0TGluZXNFZGl0IiwidGV4dE1heExpbmVzIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dE1heExlbmd0aCIsInRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXkiLCJmaWVsZEVkaXRTdHlsZSIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMiLCJ2aXNpYmxlRXhwcmVzc2lvbiIsImlzUGFydE9mUHJldmlldyIsImlzUmVxdWlyZWQiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJ0b1N0cmluZyIsImxhYmVsIiwiZ2V0TXVsdGlWYWx1ZUZpZWxkRm9ybUVsZW1lbnQiLCJtdWx0aVZhbHVlRmllbGRJZCIsInZoSWRQcmVmaXgiLCJnZXRGaWVsZEdyb3VwRm9ybUVsZW1lbnQiLCJmaWVsZEdyb3VwRWxlbWVudHMiLCJncm91cEVsZW1lbnQiLCJncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QiLCJpc0Jvb2xlYW5GaWVsZEdyb3VwIiwiZmllbGRHcm91cEVsZW1lbnQiLCJmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCIsImxhYmVsSUQiLCJmaWVsZEdyb3VwSG9yaXpvbnRhbExheW91dCIsImdldEZpZWxkRm9ybUVsZW1lbnQiLCJyZWFkT25seSIsInNlbWFudGljT2JqZWN0IiwicGF0dGVybiIsInVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW4iLCJnZXRDdXN0b21Gb3JtRWxlbWVudCIsInByb3BlcnR5UGF0aCIsImZvcm1FbGVtZW50S2V5IiwidGVtcGxhdGUiLCJnZXRTbG90Q29sdW1uIiwiaXNNdWx0aVZhbHVlRGF0YUZpZWxkIiwiZGF0YUZpZWxkIiwiaXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24iLCJ2YWx1ZVBhdGgiLCIkUGF0aCIsImlzTXVsdGlWYWx1ZUZpZWxkIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJyZXR1cm5TdHJpbmciLCJCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZvcm1Db250YWluZXIuYmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgQW5ub3RhdGlvblRlcm0sIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29ubmVjdGVkRmllbGRzVHlwZSxcblx0Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzLFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludFR5cGUsXG5cdEZpZWxkR3JvdXAsXG5cdFJlZmVyZW5jZUZhY2V0XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQge1xuXHRibG9ja0FnZ3JlZ2F0aW9uLFxuXHRibG9ja0F0dHJpYnV0ZSxcblx0YmxvY2tFdmVudCxcblx0ZGVmaW5lQnVpbGRpbmdCbG9ja1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrU3VwcG9ydFwiO1xuaW1wb3J0IHsgeG1sLCB0eXBlIFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2UgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvbkZvcm1FbGVtZW50LCBDdXN0b21Gb3JtRWxlbWVudCwgRm9ybUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgY3JlYXRlRm9ybURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0ICogYXMgU3RhYmxlSURIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkLCBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcIi4uL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgRm9ybUhlbHBlciBmcm9tIFwiLi9Gb3JtSGVscGVyXCI7XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRm9ybUNvbnRhaW5lciBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgT0RhdGEgVjQgbWV0YWRhdGEuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpGb3JtQ29udGFpbmVyXG4gKiBpZD1cIlNvbWVJZFwiXG4gKiBlbnRpdHlTZXQ9XCJ7ZW50aXR5U2V0Pn1cIlxuICogZGF0YUZpZWxkQ29sbGVjdGlvbiA9XCJ7ZGF0YUZpZWxkQ29sbGVjdGlvbj59XCJcbiAqIHRpdGxlPVwic29tZVRpdGxlXCJcbiAqIG5hdmlnYXRpb25QYXRoPVwie1RvU3VwcGxpZXJ9XCJcbiAqIHZpc2libGU9dHJ1ZVxuICogb25DaGFuZ2U9XCIuaGFuZGxlcnMub25GaWVsZFZhbHVlQ2hhbmdlXCJcbiAqIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBwcml2YXRlXG4gKi9cbkBkZWZpbmVCdWlsZGluZ0Jsb2NrKHsgbmFtZTogXCJGb3JtQ29udGFpbmVyXCIsIG5hbWVzcGFjZTogXCJzYXAuZmUubWFjcm9zXCIgfSlcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1Db250YWluZXJCbG9jayBleHRlbmRzIEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSB7XG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0aWQ/OiBzdHJpbmc7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0aXNQdWJsaWM6IHRydWUsXG5cdFx0ZXhwZWN0ZWRUeXBlczogW1wiRW50aXR5U2V0XCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCIsIFwiRW50aXR5VHlwZVwiLCBcIlNpbmdsZXRvblwiXVxuXHR9KVxuXHRjb250ZXh0UGF0aCE6IENvbnRleHQ7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCJcblx0fSlcblx0ZW50aXR5U2V0PzogQ29udGV4dDtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIixcblx0XHRpc1B1YmxpYzogdHJ1ZSxcblx0XHRyZXF1aXJlZDogdHJ1ZVxuXHR9KVxuXHRtZXRhUGF0aCE6IENvbnRleHQ7XG5cblx0LyoqXG5cdCAqIE1ldGFkYXRhIHBhdGggdG8gdGhlIGRhdGFGaWVsZENvbGxlY3Rpb25cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJhcnJheVwiXG5cdH0pXG5cdGRhdGFGaWVsZENvbGxlY3Rpb24/OiBGb3JtRWxlbWVudFtdO1xuXG5cdC8qKlxuXHQgKiBDb250cm9sIHdoZXRoZXIgdGhlIGZvcm0gaXMgaW4gZGlzcGxheU1vZGUgb3Igbm90XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdGRpc3BsYXlNb2RlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFRpdGxlIG9mIHRoZSBmb3JtIGNvbnRhaW5lclxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHR0aXRsZT86IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgXCJhcmlhLWxldmVsXCIgb2YgdGhlIGZvcm0gdGl0bGUsIHRpdGxlcyBvZiBpbnRlcm5hbGx5IHVzZWQgZm9ybSBjb250YWluZXJzIGFyZSBuZXN0ZWQgc3Vic2VxdWVudGx5XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInNhcC51aS5jb3JlLlRpdGxlTGV2ZWxcIiwgaXNQdWJsaWM6IHRydWUgfSlcblx0dGl0bGVMZXZlbCA9IFwiQXV0b1wiO1xuXG5cdC8qKlxuXHQgKiBCaW5kaW5nIHRoZSBmb3JtIGNvbnRhaW5lciB1c2luZyBhIG5hdmlnYXRpb24gcGF0aFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRuYXZpZ2F0aW9uUGF0aD86IHN0cmluZztcblxuXHQvKipcblx0ICogQmluZGluZyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZm9ybSBjb250YWluZXIgdXNpbmcgYW4gZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dmlzaWJsZT86IHN0cmluZztcblxuXHQvKipcblx0ICogQ2hlY2sgaWYgVUkgaGlkZGVuIGFubm90YXRpb24gaXMgcHJlc2VudCBvciBub3Rcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdGhhc1VpSGlkZGVuQW5ub3RhdGlvbj86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEZsZXggZGVzaWdudGltZSBzZXR0aW5ncyB0byBiZSBhcHBsaWVkXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGRlc2lnbnRpbWVTZXR0aW5ncyA9IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1Db250YWluZXIuZGVzaWdudGltZVwiO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRhY3Rpb25zPzogQmFzZUFjdGlvbltdO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHVzZVNpbmdsZVRleHRBcmVhRmllbGRBc05vdGVzPzogYm9vbGVhbjtcblxuXHRAYmxvY2tBZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1FbGVtZW50XCIgfSlcblx0Zm9ybUVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBDb25maWd1cmFibGVPYmplY3Q+ID0ge307XG5cblx0Ly8gSnVzdCBwcm94aWVkIGRvd24gdG8gdGhlIEZpZWxkIG1heSBuZWVkIHRvIHNlZSBpZiBuZWVkZWQgb3Igbm90XG5cdEBibG9ja0V2ZW50KClcblx0b25DaGFuZ2U/OiBzdHJpbmc7XG5cblx0Y29udGVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6IFByb3BlcnRpZXNPZjxGb3JtQ29udGFpbmVyQmxvY2s+LCBleHRlcm5hbENvbmZpZ3VyYXRpb246IHVua25vd24sIHNldHRpbmdzOiBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMuZW50aXR5U2V0ID0gdGhpcy5jb250ZXh0UGF0aCE7XG5cdFx0aWYgKHRoaXMuZm9ybUVsZW1lbnRzICYmIE9iamVjdC5rZXlzKHRoaXMuZm9ybUVsZW1lbnRzKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dE9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UmVmZXJlbmNlRmFjZXQ+KHRoaXMubWV0YVBhdGgsIHRoaXMuY29udGV4dFBhdGgpO1xuXHRcdFx0Y29uc3QgbUV4dHJhU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRsZXQgb0ZhY2V0RGVmaW5pdGlvbiA9IG9Db250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHQvLyBXcmFwIHRoZSBmYWNldCBpbiBhIGZha2UgRmFjZXQgYW5ub3RhdGlvblxuXHRcdFx0b0ZhY2V0RGVmaW5pdGlvbiA9IHtcblx0XHRcdFx0JFR5cGU6IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0LFxuXHRcdFx0XHRMYWJlbDogb0ZhY2V0RGVmaW5pdGlvbj8uTGFiZWwsXG5cdFx0XHRcdFRhcmdldDoge1xuXHRcdFx0XHRcdCR0YXJnZXQ6IG9GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBvRmFjZXREZWZpbml0aW9uPy5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0cGF0aDogXCJcIixcblx0XHRcdFx0XHR0ZXJtOiBcIlwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0XHR2YWx1ZTogZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvQ29udGV4dE9iamVjdFBhdGgpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFubm90YXRpb25zOiB7fSxcblx0XHRcdFx0ZnVsbHlRdWFsaWZpZWROYW1lOiBvRmFjZXREZWZpbml0aW9uPy5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdH0gYXMgdW5rbm93biBhcyBSZWZlcmVuY2VGYWNldDtcblx0XHRcdG1FeHRyYVNldHRpbmdzW29GYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlXSA9IHsgZmllbGRzOiB0aGlzLmZvcm1FbGVtZW50cyB9O1xuXHRcdFx0Y29uc3Qgb0NvbnZlcnRlckNvbnRleHQgPSB0aGlzLmdldENvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdG9Db250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0Lyp0aGlzLmNvbnRleHRQYXRoKi8gdW5kZWZpbmVkLFxuXHRcdFx0XHRzZXR0aW5ncyxcblx0XHRcdFx0bUV4dHJhU2V0dGluZ3Ncblx0XHRcdCk7XG5cdFx0XHRjb25zdCBvRm9ybURlZmluaXRpb24gPSBjcmVhdGVGb3JtRGVmaW5pdGlvbihvRmFjZXREZWZpbml0aW9uLCBcInRydWVcIiwgb0NvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0XHR0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gPSBvRm9ybURlZmluaXRpb24uZm9ybUNvbnRhaW5lcnNbMF0uZm9ybUVsZW1lbnRzO1xuXHRcdH1cblx0XHQvLyBXZSBuZWVkIHRoZSB2aWV3IGlkIGZvciB0aGUgZm9ybSBlbGVtZW50cyBzdGFibGUgaWRzIGdlbmVyYXRpb25cblx0XHR0aGlzLmNvbnRlbnRJZCA9IHNldHRpbmdzLnZpZXdJZCBhcyBzdHJpbmc7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBGb3JtQ29udGFpbmVyLlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHRlbXBsYXRlIHN0cmluZy5cblx0ICovXG5cdHB1YmxpYyBnZXRUZW1wbGF0ZSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG92ZXJmbG93VG9vbGJhcklEID0gdGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1BY3Rpb25zVG9vbGJhclwiXSkgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHRoaXMuY29udGV4dFBhdGgsIHRoaXMubWV0YVBhdGgpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGRhdGFNb2RlbE9iamVjdCk7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdDxmOkZvcm1Db250YWluZXJcblx0XHRcdHhtbG5zPVwic2FwLm1cIlxuXHRcdFx0eG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG5cdFx0XHR4bWxuczptYWNybz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0eG1sbnM6bWFjcm9Gb3JtPVwic2FwLmZlLm1hY3Jvcy5mb3JtXCJcblx0XHRcdHhtbG5zOmludGVybmFsTWFjcm89XCJzYXAuZmUubWFjcm9zLmludGVybmFsXCJcblx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHR4bWxuczpjb250cm9scz1cInNhcC5mZS5tYWNyb3MuY29udHJvbHNcIlxuXHRcdFx0eG1sbnM6ZHQ9XCJzYXAudWkuZHRcIlxuXHRcdFx0eG1sbnM6bWFjcm9kYXRhPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiXG5cdFx0XHR4bWxuczpmcG09XCJzYXAuZmUubWFjcm9zLmZwbVwiXG5cdFx0XHR4bWxuczp0ZW1wbGF0ZT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS50ZW1wbGF0ZS8xXCJcblx0XHRcdHRlbXBsYXRlOnJlcXVpcmU9XCJ7XG5cdFx0XHRcdE1PREVMOiAnc2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXInLFxuXHRcdFx0XHRJRDogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXInLFxuXHRcdFx0XHRDT01NT046ICdzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlcicsXG5cdFx0XHRcdEZPUk06ICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUhlbHBlcicsXG5cdFx0XHRcdFVJOiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnMnLFxuXHRcdFx0XHREYXRhRmllbGQ6ICdzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFGaWVsZEZvcm1hdHRlcnMnLFxuXHRcdFx0XHRGaWVsZFRlbXBsYXRpbmc6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZycsXG5cdFx0XHRcdFByb3BlcnR5OiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUZvcm1hdHRlcnMnLFxuXHRcdFx0XHRGSUVMRDogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXInLFxuXHRcdFx0XHRNQUNSTzogJ3NhcC9mZS9tYWNyb3MvTWFjcm9UZW1wbGF0aW5nJ1xuXHRcdFx0fVwiXG5cblx0XHRcdGNvcmU6cmVxdWlyZT1cIntGb3JtQ29udGFpbmVyUnVudGltZTogJ3NhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQ29udGFpbmVyQVBJJ31cIlxuXHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7dGhpcy5kZXNpZ250aW1lU2V0dGluZ3N9XCJcblx0XHRcdGlkPVwiJHt0aGlzLmlkIHx8IHVuZGVmaW5lZH1cIlxuXHRcdFx0dmlzaWJsZT1cIiR7dGhpcy52aXNpYmxlfVwiXG5cdFx0XHRtYWNyb2RhdGE6bmF2aWdhdGlvblBhdGg9XCIke3RoaXMubmF2aWdhdGlvblBhdGh9XCJcblx0XHRcdG1hY3JvZGF0YTpldE5hbWU9XCIke3RoaXMuY29udGV4dFBhdGguZ2V0T2JqZWN0KFwiLi9Ac2FwdWkubmFtZVwiKX1cIlxuXHRcdFx0bWFjcm9kYXRhOlVpSGlkZGVuUHJlc2VudD1cIiR7dGhpcy5oYXNVaUhpZGRlbkFubm90YXRpb259XCJcblx0XHQ+XG5cblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiJHt0aGlzLnRpdGxlfVwiPlxuXHRcdFx0XHQ8Zjp0aXRsZT5cblx0XHRcdFx0XHQ8Y29yZTpUaXRsZSBsZXZlbD1cIiR7dGhpcy50aXRsZUxldmVsfVwiIHRleHQ9XCIke3RoaXMudGl0bGV9XCIgLz5cblx0XHRcdFx0PC9mOnRpdGxlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5cblxuXHRcdFx0PHRlbXBsYXRlOmlmIHRlc3Q9XCIke3RoaXMuYWN0aW9uc31cIj5cblx0XHRcdFx0PHRlbXBsYXRlOnRoZW4+XG5cdFx0XHRcdFx0PGY6dG9vbGJhcj5cblx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJcblx0XHRcdFx0XHRcdFx0aWQ9XCIke292ZXJmbG93VG9vbGJhcklEfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PFRpdGxlIGxldmVsPVwiJHt0aGlzLnRpdGxlTGV2ZWx9XCIgdGV4dD1cIiR7dGhpcy50aXRsZX1cIiAvPlxuXHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHQ8dGVtcGxhdGU6cmVwZWF0IGxpc3Q9XCJ7YWN0aW9ucz59XCIgdmFyPVwiYWN0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BY3Rpb25CdXR0b25zXCIgdHlwZT1cIlhNTFwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvdGVtcGxhdGU6cmVwZWF0PlxuXHRcdFx0XHRcdFx0PC9PdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHRcdFx0PC9mOnRvb2xiYXI+XG5cdFx0XHRcdDwvdGVtcGxhdGU6dGhlbj5cblx0XHRcdDwvdGVtcGxhdGU6aWY+XG5cblx0XHRcdDxmOmRlcGVuZGVudHM+XG5cdFx0XHRcdDxtYWNyb0Zvcm06Rm9ybUNvbnRhaW5lckFQSSBmb3JtQ29udGFpbmVySWQ9XCIke3RoaXMuaWR9XCIgc2hvd0RldGFpbHM9XCJ7aW50ZXJuYWw+c2hvd0RldGFpbHN9XCIgLz5cblx0XHRcdDwvZjpkZXBlbmRlbnRzPlxuXG5cdFx0XHQ8Zjpmb3JtRWxlbWVudHM+XG5cdFx0XHRcdCR7dGhpcy5nZXRUZW1wbGF0ZWRGb3JtRWxlbWVudHMoKX1cblx0XHRcdDwvZjpmb3JtRWxlbWVudHM+XG5cblx0XHQ8L2Y6Rm9ybUNvbnRhaW5lcj5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbXBsYXRlZCBmb3JtIGVsZW1lbnRzLlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGZvcm0gZWxlbWVudHMuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VGVtcGxhdGVkRm9ybUVsZW1lbnRzKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJkYXRhRmllbGRDb2xsZWN0aW9uPlwiIHZhcj1cImZvcm1FbGVtZW50c1wiPlxuXHRcdFx0XHQke3RoaXMuZ2V0SW5uZXJUZW1wbGF0ZWRGb3JtRWxlbWVudHMoKX1cblx0XHRcdDwvdGVtcGxhdGU6d2l0aD5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGlubmVyIHRlbXBsYXRlZCBmb3JtIGVsZW1lbnRzLCBpbmNsdWRpbmcgRGF0YVBvaW50IGFuZCBDb250YWN0IHRlbXBsYXRlcy5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBpbm5lciBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHVibGljIGdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzKCk6IHN0cmluZyB7XG5cdFx0bGV0IGdldERhdGFQb2ludFRlbXBsYXRlID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gJiYgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBoYXMgYW4gYW5ub3RhdGlvblBhdGhcblx0XHRcdGNvbnN0IGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aCA9IHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbi5maW5kKChkZikgPT4gISFkZi5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRsZXQgaWRQcmVmaXggPSBcIlwiO1xuXHRcdFx0Y29uc3QgaXNFZGl0YWJsZUhlYWRlciA9IHRoaXMuaWQ/LmluY2x1ZGVzKFwiSGVhZGVyRmFjZXQ6OkZvcm1Db250YWluZXJcIikgPT09IHRydWU7XG5cdFx0XHRsZXQgZm9ybUVsZW1lbnRJZCA9IFwidW5kZWZpbmVkXCI7XG5cdFx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0XHRpZiAoaXNFZGl0YWJsZUhlYWRlcikge1xuXHRcdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmlkfTo6Rm9ybUVsZW1lbnRgO1xuXHRcdFx0XHRcdGlkUHJlZml4ID0gYCR7dGhpcy5pZH06OkZvcm1FbGVtZW50YDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uWzBdLmtleV0pfWA7XG5cdFx0XHRcdFx0aWRQcmVmaXggPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCB0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0ua2V5XSl9YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aD8uYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZpcnN0RWxlbWVudFdpdGhBbm5vdGF0aW9uUGF0aD8uYW5ub3RhdGlvblBhdGggfHwgXCJcIilcblx0XHRcdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QpO1xuXHRcdFx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHRcdFx0PyBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRcdFx0Z2V0RGF0YVBvaW50VGVtcGxhdGUgPSB4bWxgXG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cImRhdGFQb2ludFwiPlxuXHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRsYWJlbD1cIntkYXRhUG9pbnQ+QEBGSUVMRC5jb21wdXRlTGFiZWxUZXh0fVwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke2dldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdFx0XHRcdFx0aWRQcmVmaXg9XCIke2lkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHt0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0uYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdGVkaXRNb2RlPVwiJHt0aGlzLmRpc3BsYXlNb2RlID09PSB0cnVlID8gXCJEaXNwbGF5XCIgOiB1bmRlZmluZWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblx0XHRcdFx0PC90ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBnZXRDb250YWN0VGVtcGxhdGUgPSB4bWxgXG5cdFx0PHRlbXBsYXRlOmVsc2VpZlxuXHRcdFx0dGVzdD1cIns9IFxcJHtmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aH0uaW5kZXhPZignY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0JykgPiAtMSB9XCJcblx0XHRcdD5cblx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cIm1ldGFQYXRoXCI+XG5cdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIns9IFxcJHttZXRhUGF0aD4uL0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5BZGFwdGF0aW9uSGlkZGVufSA/ICdub3QtYWRhcHRhYmxlLXRyZWUnIDogICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZScgfVwiXG5cdFx0XHRcdFx0YmluZGluZz1cIns9IEZPUk0uZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbihcXCR7dGhpcy5uYXZpZ2F0aW9uUGF0aH0sXFwke2NvbnRleHRQYXRoPkBAVUkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aH0pfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0PGY6bGFiZWw+XG5cdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHR0ZXh0PVwie21ldGFQYXRoPmZuLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbH1cIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT1cIns9IEZpZWxkVGVtcGxhdGluZy5nZXRWaXNpYmxlRXhwcmVzc2lvbihcXCR7ZGF0YUZpZWxkPkBAVUkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aH0pfVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdDxsYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0PGY6Q29sdW1uRWxlbWVudERhdGEgY2VsbHNMYXJnZT1cIjEyXCIgLz5cblx0XHRcdFx0XHQ8L2xheW91dERhdGE+XG5cdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHQ8bWFjcm86Q29udGFjdFxuXHRcdFx0XHRcdFx0XHRtZXRhUGF0aD1cInttZXRhUGF0aD5AQENPTU1PTi5nZXRNZXRhUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwie2NvbnRleHRQYXRoPkBAQ09NTU9OLmdldE1ldGFQYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cInRydWVcIlxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblx0XHQ8L3RlbXBsYXRlOmVsc2VpZj5gO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiez0gXFwke2Zvcm1FbGVtZW50cz4wL2Fubm90YXRpb25QYXRofS5pbmRleE9mKCdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnQnKSA+IC0xIH1cIj5cblx0XHRcdFx0JHtnZXREYXRhUG9pbnRUZW1wbGF0ZX1cblx0XHRcdFx0JHtnZXRDb250YWN0VGVtcGxhdGV9XG5cdFx0XHRcdDx0ZW1wbGF0ZTplbHNlPlxuXHRcdFx0XHRcdCR7dGhpcy5nZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5cblx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHdpdGggY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY29ubmVjdGVkIGZpZWxkcyBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgY29ubmVjdGVkRmllbGRFbGVtZW50cyA9IFwiXCI7XG5cblx0XHRmb3IgKGNvbnN0IGNvbm5lY3RlZEZpZWxkIG9mIGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyEpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgdGVtcE5hbWUgPSBjb25uZWN0ZWRGaWVsZC5vcmlnaW5hbE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgcGF0aCA9IHRlbXBOYW1lPy5zdWJzdHJpbmcodGVtcE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoICsgXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCIgKyBwYXRoKTtcblx0XHRcdGNvbnN0IGRlbGltaXRlciA9IENvbW1vbkhlbHBlci5nZXREZWxpbWl0ZXIoY29ubmVjdGVkRmllbGQub3JpZ2luYWxUZW1wbGF0ZSA/PyBcIlwiKTtcblx0XHRcdGNvbnN0IG5vdExhc3RJbmRleENvbmRpdGlvbiA9XG5cdFx0XHRcdGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyEuaW5kZXhPZihjb25uZWN0ZWRGaWVsZCkgIT09IGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyEubGVuZ3RoIC0gMVxuXHRcdFx0XHRcdD8geG1sYDxUZXh0XG5cdFx0XHRcdFx0dGV4dD1cIiR7ZGVsaW1pdGVyfVwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5FbmRcIlxuXHRcdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdC8+YFxuXHRcdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3QgYXMgRGF0YUZpZWxkKT8uVmFsdWUucGF0aFxuXHRcdFx0XHQgIF0pXG5cdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXB1dGVkVmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5LCBcIkZpZWxkVmFsdWVIZWxwXCJdKSA6IFwiXCI7XG5cblx0XHRcdGxldCBjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSBcIlwiO1xuXG5cdFx0XHRjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSB4bWxgXG5cdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7Y29tcHV0ZWRWaElkUHJlZml4fVwiXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT1cIiR7dGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKSA6IFwiXCJ9XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxmb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHR0ZXh0TGluZXNFZGl0PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TGluZXNFZGl0fVwiXG5cdFx0XHRcdFx0XHR0ZXh0TWF4TGluZXM9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lc31cIlxuXHRcdFx0XHRcdFx0dGV4dE1heENoYXJhY3RlcnNEaXNwbGF5PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXl9XCJcblx0XHRcdFx0XHRcdHRleHRNYXhMZW5ndGg9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMZW5ndGh9XCJcblx0XHRcdFx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXl9XCJcblx0XHRcdFx0XHRcdHRleHRBbGlnbk1vZGU9XCJGb3JtXCJcblx0XHRcdFx0XHRcdHNob3dFbXB0eUluZGljYXRvcj1cInRydWVcIlxuXHRcdFx0XHRcdFx0ZmllbGRFZGl0U3R5bGU9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkRWRpdFN0eWxlfVwiXG5cdFx0XHRcdFx0XHRyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5yYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0fVwiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8bWFjcm86bGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIns9ICV7dWk+L2lzRWRpdGFibGV9ID8gMSA6IDB9XCIgLz5cblx0XHRcdFx0XHQ8L21hY3JvOmxheW91dERhdGE+XG5cdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRcdCR7bm90TGFzdEluZGV4Q29uZGl0aW9ufVxuXHRcdFx0XHRgO1xuXG5cdFx0XHRjb25uZWN0ZWRGaWVsZEVsZW1lbnRzICs9IGNvbm5lY3RlZEZpZWxkRWxlbWVudDtcblx0XHR9XG5cblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGggPz8gXCJcIilcblx0XHQpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRsZXQgZm9ybUVsZW1lbnRJZCA9IFwiXCI7XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnRJZCkge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlIHwgUHJvcGVydHk+XG5cdFx0XHQgIClcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyk7XG5cdFx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gKGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcz8udGFyZ2V0T2JqZWN0IGFzIHVua25vd24gYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbik/LlRhcmdldFxuXHRcdFx0Py4kdGFyZ2V0IGFzIEFubm90YXRpb25UZXJtPENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcz47XG5cblx0XHRjb25zdCBkZXNpZ250aW1lID0gZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzPy50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0PyBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ6IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWVcIjtcblx0XHRjb25zdCBpc1JlcXVpcmVkID0gZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkKFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8QW5ub3RhdGlvblBhdGg8Q29ubmVjdGVkRmllbGRzVHlwZT4+XG5cdFx0KT8udG9TdHJpbmcoKTtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHR4bWxuczpmPVwic2FwLnVpLmxheW91dC5mb3JtXCJcblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdHRleHQ9XCIke3RhcmdldE9iamVjdD8uTGFiZWwgPz8gZm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRpZD1cIiR7dGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKSA6IFwiXCJ9XCJcblxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdDxjb250cm9sczpGaWVsZFdyYXBwZXIgcmVxdWlyZWQ9XCIke2lzUmVxdWlyZWR9XCI+XG5cdFx0XHRcdFx0XHQ8SEJveCB3cmFwPVwiV3JhcFwiPlxuXHRcdFx0XHRcdFx0XHQke2Nvbm5lY3RlZEZpZWxkRWxlbWVudHN9XG5cdFx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdFx0PC9jb250cm9sczpGaWVsZFdyYXBwZXI+XG5cdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBhIGZvcm0gZWxlbWVudCByZXByZXNlbnRpbmcgYSBtdWx0aXZhbHVlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBtdWx0aS12YWx1ZSBmaWVsZCBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRNdWx0aVZhbHVlRmllbGRGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRJZCA9IHRoaXMuaWQgPyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gIDogXCJ1bmRlZmluZWRcIjtcblx0XHRjb25zdCBtdWx0aVZhbHVlRmllbGRJZCA9IHRoaXMuaWRcblx0XHRcdD8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5LCBcIk11bHRpVmFsdWVGaWVsZFwiXSl9YFxuXHRcdFx0OiBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHZoSWRQcmVmaXggPSB0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIjtcblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOm1hY3Jvcz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR4bWxuczptdWx0aXZhbHVlZmllbGQ9XCJzYXAuZmUubWFjcm9zLm11bHRpdmFsdWVmaWVsZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke2Rlc2lnbnRpbWV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2Zvcm1FbGVtZW50SWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9XCIke2Zvcm1FbGVtZW50LmxhYmVsfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke3Zpc2libGVFeHByZXNzaW9ufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb3M6TXVsdGlWYWx1ZUZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7bXVsdGlWYWx1ZUZpZWxkSWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZoSWRQcmVmaXg9XCIke3ZoSWRQcmVmaXh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmVudGl0eVNldD8uZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7Zm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm9zOmZvcm1hdE9wdGlvbnM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtdWx0aXZhbHVlZmllbGQ6Rm9ybWF0T3B0aW9ucyBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWFjcm9zOmZvcm1hdE9wdGlvbnM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb3M6TXVsdGlWYWx1ZUZpZWxkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PmA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgZm9ybSBlbGVtZW50cyByZXByZXNlbnRpbmcgYSBjaGVja2JveCBncm91cC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY2hlY2tib3ggZ3JvdXAgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdGdldEZpZWxkR3JvdXBGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgZmllbGRHcm91cEVsZW1lbnRzID0gXCJcIjtcblx0XHQvL1dlIHRlbXBsYXRlIGVhY2ggZWxlbWVudCBvZiB0aGUgY2hlY2tib3ggZ3JvdXBcblx0XHRmb3IgKGNvbnN0IGdyb3VwRWxlbWVudCBvZiBmb3JtRWxlbWVudC5maWVsZEdyb3VwRWxlbWVudHMhKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHRlbXBOYW1lID0gZ3JvdXBFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IHBhdGggPSB0ZW1wTmFtZT8uc3Vic3RyaW5nKHRlbXBOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCArIFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiICsgcGF0aCk7XG5cdFx0XHRjb25zdCBncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGU+KGJpbmRpbmdDb250ZXh0KTtcblx0XHRcdGNvbnN0IGNvbXB1dGVkSWRQcmVmaXggPSB0aGlzLmlkXG5cdFx0XHRcdD8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW1xuXHRcdFx0XHRcdFx0dGhpcy5pZCxcblx0XHRcdFx0XHRcdFwiQ2hlY2tCb3hHcm91cFwiLFxuXHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnQua2V5LFxuXHRcdFx0XHRcdFx0KGdyb3VwRWxlbWVudERhdGFNb2RlbE9iamVjdC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkIHwgRGF0YVBvaW50VHlwZSk/LlZhbHVlPy5wYXRoXG5cdFx0XHRcdCAgXSl9YFxuXHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlzQm9vbGVhbkZpZWxkR3JvdXAgPVxuXHRcdFx0XHQoZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LiR0YXJnZXQ/LnR5cGUgPT09IFwiRWRtLkJvb2xlYW5cIjtcblxuXHRcdFx0Y29uc3QgZmllbGRHcm91cEVsZW1lbnQgPSBpc0Jvb2xlYW5GaWVsZEdyb3VwXG5cdFx0XHRcdD8geG1sYFxuXHRcdFx0XHQ8bWFjcm86RmllbGRcblx0XHRcdFx0XHRpZFByZWZpeD1cIiR7Y29tcHV0ZWRJZFByZWZpeH1cIlxuXHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmVudGl0eVNldD8uZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0bWV0YVBhdGg9XCIke2JpbmRpbmdDb250ZXh0LmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9XCIke3RoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZEdyb3VwRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKSA6IFwiXCJ9XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxmb3JtYXRPcHRpb25zIGlzRmllbGRHcm91cEl0ZW09XCJ0cnVlXCIgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiAvPlxuXHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0YFxuXHRcdFx0XHQ6IFwiXCI7XG5cblx0XHRcdGZpZWxkR3JvdXBFbGVtZW50cyArPSBmaWVsZEdyb3VwRWxlbWVudDtcblx0XHR9XG5cblx0XHRjb25zdCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0bGV0IGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRsZXQgbGFiZWxJRCA9IFwiXCI7XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnRJZCkge1xuXHRcdFx0XHRmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCA9IGAke3RoaXMuY29udGVudElkfS0tJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0dGhpcy5pZCxcblx0XHRcdFx0XHRcIkZpZWxkR3JvdXBGb3JtRWxlbWVudFwiLFxuXHRcdFx0XHRcdGZvcm1FbGVtZW50LmtleVxuXHRcdFx0XHRdKX1gO1xuXHRcdFx0XHRsYWJlbElEID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0XHRsYWJlbElEID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50TGFiZWxcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdGFyZ2V0T2JqZWN0ID0gKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXA7XG5cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmaWVsZEdyb3VwRm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD1cIiR7dGFyZ2V0T2JqZWN0Py5MYWJlbCA/PyBmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2xhYmVsSUR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y29udHJvbHM6UmVxdWlyZWRGbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwSG9yaXpvbnRhbExheW91dCA9PT0gdHJ1ZSA/IFwiUm93XCIgOiBcIkNvbHVtblwifVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXA9XCJXcmFwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uR2FwPVwiMXJlbVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpdGVtcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke2ZpZWxkR3JvdXBFbGVtZW50c31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9pdGVtcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2NvbnRyb2xzOlJlcXVpcmVkRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHJlcHJlc2VudGluZyBhIGZpZWxkLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBmaWVsZCBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRGaWVsZEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0Y29uc3QgY29tcHV0ZWRWaElkUHJlZml4ID0gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJ1bmRlZmluZWRcIjtcblx0XHRjb25zdCB2aXNpYmxlRXhwcmVzc2lvbiA9IGZvcm1FbGVtZW50LmlzUGFydE9mUHJldmlld1xuXHRcdFx0PyBnZXRWaXNpYmxlRXhwcmVzc2lvbihjb21wdXRlZERhdGFNb2RlbE9iamVjdCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlIHwgUHJvcGVydHk+KVxuXHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+c2hvd0RldGFpbHN9ID09PSB0cnVlfVwiO1xuXHRcdGNvbnN0IGNvbXB1dGVkSWRQcmVmaXggPSB0aGlzLmlkID8gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YCA6IFwiXCI7XG5cdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnRJZCkge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgZGVzaWdudGltZSA9IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0PyBcIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ6IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWVcIjtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR4bWxuczpmPVwic2FwLnVpLmxheW91dC5mb3JtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hY3JvOkZpZWxkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZFByZWZpeD1cIiR7Y29tcHV0ZWRJZFByZWZpeH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7Y29tcHV0ZWRWaElkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlYWRPbmx5PVwiJHtmb3JtRWxlbWVudC5yZWFkT25seX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q9XCIke2Zvcm1FbGVtZW50LnNlbWFudGljT2JqZWN0fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmb3JtYXRPcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRMaW5lc0VkaXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE1heExpbmVzPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXN9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dE1heExlbmd0aD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRBbGlnbk1vZGU9XCJGb3JtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2hvd0VtcHR5SW5kaWNhdG9yPVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkRWRpdFN0eWxlPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5maWVsZEVkaXRTdHlsZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0PVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5yYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGVUaW1lUGF0dGVybj1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8ucGF0dGVybn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy51c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBhIGN1c3RvbSBmb3JtIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgY3VzdG9tIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBjdXN0b20gZm9ybSBlbGVtZW50LlxuXHQgKi9cblx0Z2V0Q3VzdG9tRm9ybUVsZW1lbnQoZm9ybUVsZW1lbnQ6IEN1c3RvbUZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSB0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKSArIFwiL1wiICsgZm9ybUVsZW1lbnQucHJvcGVydHlQYXRoO1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChwcm9wZXJ0eVBhdGgpKSBhc1xuXHRcdFx0fCBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD5cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QpO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIGZvcm1FbGVtZW50LmlkXSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQuaWRdKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXHRcdGNvbnN0IGZvcm1FbGVtZW50S2V5ID0gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIGZvcm1FbGVtZW50LmtleV0pO1xuXHRcdHJldHVybiB4bWxgXG5cdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7Zm9ybUVsZW1lbnQudmlzaWJsZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm9Gb3JtOkN1c3RvbUZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7Zm9ybUVsZW1lbnQucHJvcGVydHlQYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1FbGVtZW50S2V5PVwiJHtmb3JtRWxlbWVudEtleX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmcG06Q3VzdG9tRnJhZ21lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2Zvcm1FbGVtZW50S2V5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyYWdtZW50TmFtZT1cIiR7Zm9ybUVsZW1lbnQudGVtcGxhdGV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbWFjcm9Gb3JtOkN1c3RvbUZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdGA7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdGVtcGxhdGUgZm9yIGEgc2xvdCBjb2x1bW4gZm9yIHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIHNsb3QgY29sdW1uLlxuXHQgKi9cblx0Z2V0U2xvdENvbHVtbihmb3JtRWxlbWVudDogRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdHJldHVybiB4bWxgPHNsb3QgbmFtZT1cIiR7Zm9ybUVsZW1lbnQua2V5fVwiIC8+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBkYXRhIGZpZWxkIGlzIGEgbXVsdGl2YWx1ZSBmaWVsZC5cblx0ICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCB0byBjaGVjay5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0YSBmaWVsZCBpcyBhIG11bHRpdmFsdWUgZmllbGQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdGlzTXVsdGlWYWx1ZURhdGFGaWVsZChkYXRhRmllbGQ6IEZvcm1FbGVtZW50KTogYm9vbGVhbiB7XG5cdFx0bGV0IGlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uID0gZmFsc2U7XG5cdFx0aWYgKGRhdGFGaWVsZC5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSB0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZhbHVlUGF0aCA9IGJpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpPy5WYWx1ZT8uJFBhdGg7XG5cdFx0XHRpZiAodmFsdWVQYXRoKSB7XG5cdFx0XHRcdGlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uID0gaXNNdWx0aVZhbHVlRmllbGQoXG5cdFx0XHRcdFx0ZW5oYW5jZURhdGFNb2RlbFBhdGgoZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGJpbmRpbmdDb250ZXh0KSwgdmFsdWVQYXRoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpc011bHRpVmFsdWVGaWVsZENvbmRpdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBhbGwgZGF0YSBmaWVsZHMgZm9yIGFubm90YXRpb25zLlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGRhdGEgZmllbGRzLlxuXHQgKi9cblx0Z2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zKCk6IHN0cmluZyB7XG5cdFx0bGV0IHJldHVyblN0cmluZyA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbikge1xuXHRcdFx0XHRzd2l0Y2ggKGRhdGFGaWVsZC50eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkFubm90YXRpb25cIjpcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmNvbm5lY3RlZEZpZWxkcyAmJlxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuY29ubmVjdGVkRmllbGRzIS5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5pc011bHRpVmFsdWVEYXRhRmllbGQoZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRNdWx0aVZhbHVlRmllbGRGb3JtRWxlbWVudChkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpLmZpZWxkR3JvdXBFbGVtZW50cyAmJlxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuZmllbGRHcm91cEVsZW1lbnRzIS5sZW5ndGggPiAwXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0RmllbGRHcm91cEZvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRGaWVsZEZvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0XHRcdFx0cmV0dXJuU3RyaW5nICs9IHRoaXMuZ2V0Q3VzdG9tRm9ybUVsZW1lbnQoZGF0YUZpZWxkIGFzIEN1c3RvbUZvcm1FbGVtZW50KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRTbG90Q29sdW1uKGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1c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
|
|
831
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQ29udGFpbmVyQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJfZGVjMiIsImJsb2NrQXR0cmlidXRlIiwidHlwZSIsIl9kZWMzIiwicmVxdWlyZWQiLCJpc1B1YmxpYyIsImV4cGVjdGVkVHlwZXMiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJfZGVjNyIsIl9kZWM4IiwiX2RlYzkiLCJfZGVjMTAiLCJfZGVjMTEiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJibG9ja0FnZ3JlZ2F0aW9uIiwiX2RlYzE3IiwiYmxvY2tFdmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9ja1RlbXBsYXQiLCJwcm9wcyIsImV4dGVybmFsQ29uZmlndXJhdGlvbiIsInNldHRpbmdzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZvcm1FbGVtZW50cyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJvQ29udGV4dE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJtZXRhUGF0aCIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsIiRUeXBlIiwiTGFiZWwiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwicGF0aCIsInRlcm0iLCJ2YWx1ZSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJhbm5vdGF0aW9ucyIsImZpZWxkcyIsIm9Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsInVuZGVmaW5lZCIsIm9Gb3JtRGVmaW5pdGlvbiIsImNyZWF0ZUZvcm1EZWZpbml0aW9uIiwiZGF0YUZpZWxkQ29sbGVjdGlvbiIsImZvcm1Db250YWluZXJzIiwiY29udGVudElkIiwidmlld0lkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwib3ZlcmZsb3dUb29sYmFySUQiLCJpZCIsIlN0YWJsZUlESGVscGVyIiwiZ2VuZXJhdGUiLCJkYXRhTW9kZWxPYmplY3QiLCJiaW5kaW5nU3RyaW5nIiwiRm9ybUhlbHBlciIsImdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24iLCJuYXZpZ2F0aW9uUGF0aCIsInhtbCIsImRlc2lnbnRpbWVTZXR0aW5ncyIsInZpc2libGUiLCJnZXRPYmplY3QiLCJoYXNVaUhpZGRlbkFubm90YXRpb24iLCJ0aXRsZSIsInRpdGxlTGV2ZWwiLCJhY3Rpb25zIiwiYXR0ciIsImdldFRlbXBsYXRlZEZvcm1FbGVtZW50cyIsImdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzIiwiZ2V0RGF0YVBvaW50VGVtcGxhdGUiLCJmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGgiLCJmaW5kIiwiZGYiLCJhbm5vdGF0aW9uUGF0aCIsImlkUHJlZml4IiwiaXNFZGl0YWJsZUhlYWRlciIsImluY2x1ZGVzIiwiZm9ybUVsZW1lbnRJZCIsImtleSIsImNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IiwiZ2V0TW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImRlc2lnbnRpbWUiLCJVSSIsIkFkYXB0YXRpb25IaWRkZW4iLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImdldFBhdGgiLCJkaXNwbGF5TW9kZSIsIm9uQ2hhbmdlIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiZ2V0RGF0YUZpZWxkc0ZvckFubm90YXRpb25zIiwiZ2V0Q29ubmVjdGVkRmllbGRzRm9ybUVsZW1lbnQiLCJmb3JtRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkRWxlbWVudHMiLCJzb3J0ZWRDb25uZWN0ZWRGaWVsZHMiLCJjb25uZWN0ZWRGaWVsZHMiLCJ0ZW1wbGF0ZVN0cmluZyIsIm9yaWdpbmFsVGVtcGxhdGUiLCJwbGFjZWhvbGRlcnMiLCJBcnJheSIsImZyb20iLCJtYXRjaEFsbCIsIm1hcCIsIm0iLCJTdHJpbmciLCJ0cmltIiwiZmlsdGVyIiwicCIsImdldEZpZWxkSWRlbnRpZmllciIsImNmIiwib3JpZ2luYWxPYmplY3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImZpZWxkSWRzIiwidW5pcXVlUGxhY2Vob2xkZXJzIiwiU2V0IiwiaXNQZXJmZWN0TWF0Y2giLCJzaXplIiwiZXZlcnkiLCJoYXMiLCJtYXBCeUlkIiwiTWFwIiwicGgiLCJnZXQiLCJjb25uZWN0ZWRGaWVsZCIsIm1vZGVsIiwidGVtcE5hbWUiLCJiaW5kaW5nQ29udGV4dCIsImRlbGltaXRlciIsIkNvbW1vbkhlbHBlciIsImdldERlbGltaXRlciIsIm5vdExhc3RJbmRleENvbmRpdGlvbiIsImluZGV4T2YiLCJjb21wdXRlZElkUHJlZml4IiwiVmFsdWUiLCJjb21wdXRlZFZoSWRQcmVmaXgiLCJjb25uZWN0ZWRGaWVsZEVsZW1lbnQiLCJmb3JtYXRPcHRpb25zIiwidGV4dExpbmVzRWRpdCIsInRleHRNYXhMaW5lcyIsInRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSIsInRleHRNYXhMZW5ndGgiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwiZmllbGRFZGl0U3R5bGUiLCJyYWRpb0J1dHRvbnNIb3Jpem9udGFsTGF5b3V0IiwiZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIiwidmlzaWJsZUV4cHJlc3Npb24iLCJpc1BhcnRPZlByZXZpZXciLCJpc1JlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkIiwidG9TdHJpbmciLCJsYWJlbCIsImdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50IiwibXVsdGlWYWx1ZUZpZWxkSWQiLCJ2aElkUHJlZml4IiwiZ2V0RmllbGRHcm91cEZvcm1FbGVtZW50IiwiZmllbGRHcm91cEVsZW1lbnRzIiwiZ3JvdXBFbGVtZW50IiwiZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0IiwiaXNCb29sZWFuRmllbGRHcm91cCIsImZpZWxkR3JvdXBFbGVtZW50IiwiZmllbGRHcm91cEZvcm1FbGVtZW50SWQiLCJsYWJlbElEIiwiZmllbGRHcm91cEhvcml6b250YWxMYXlvdXQiLCJnZXRGaWVsZEZvcm1FbGVtZW50IiwicmVhZE9ubHkiLCJzZW1hbnRpY09iamVjdCIsInBhdHRlcm4iLCJ1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuIiwiZ2V0Q3VzdG9tRm9ybUVsZW1lbnQiLCJwcm9wZXJ0eVBhdGgiLCJmb3JtRWxlbWVudEtleSIsInRlbXBsYXRlIiwiZ2V0U2xvdENvbHVtbiIsImlzTXVsdGlWYWx1ZURhdGFGaWVsZCIsImRhdGFGaWVsZCIsImlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uIiwidmFsdWVQYXRoIiwiJFBhdGgiLCJpc011bHRpVmFsdWVGaWVsZCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwicmV0dXJuU3RyaW5nIiwiQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGb3JtQ29udGFpbmVyLmJsb2NrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIEFubm90YXRpb25UZXJtLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbm5lY3RlZEZpZWxkc1R5cGUsXG5cdENvbm5lY3RlZEZpZWxkc1R5cGVUeXBlcyxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhUG9pbnRUeXBlLFxuXHRGaWVsZEdyb3VwLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHtcblx0YmxvY2tBZ2dyZWdhdGlvbixcblx0YmxvY2tBdHRyaWJ1dGUsXG5cdGJsb2NrRXZlbnQsXG5cdGRlZmluZUJ1aWxkaW5nQmxvY2tcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCB7IHhtbCwgdHlwZSBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZVwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFubm90YXRpb25Gb3JtRWxlbWVudCwgQ3VzdG9tRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCAqIGFzIFN0YWJsZUlESGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCwgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCIuLi9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGdldFZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcIi4uL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IEZvcm1IZWxwZXIgZnJvbSBcIi4vRm9ybUhlbHBlclwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIEZvcm1Db250YWluZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIE9EYXRhIFY0IG1ldGFkYXRhLlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6Rm9ybUNvbnRhaW5lclxuICogaWQ9XCJTb21lSWRcIlxuICogZW50aXR5U2V0PVwie2VudGl0eVNldD59XCJcbiAqIGRhdGFGaWVsZENvbGxlY3Rpb24gPVwie2RhdGFGaWVsZENvbGxlY3Rpb24+fVwiXG4gKiB0aXRsZT1cInNvbWVUaXRsZVwiXG4gKiBuYXZpZ2F0aW9uUGF0aD1cIntUb1N1cHBsaWVyfVwiXG4gKiB2aXNpYmxlPXRydWVcbiAqIG9uQ2hhbmdlPVwiLmhhbmRsZXJzLm9uRmllbGRWYWx1ZUNoYW5nZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiBAcHJpdmF0ZVxuICovXG5AZGVmaW5lQnVpbGRpbmdCbG9jayh7IG5hbWU6IFwiRm9ybUNvbnRhaW5lclwiLCBuYW1lc3BhY2U6IFwic2FwLmZlLm1hY3Jvc1wiIH0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtQ29udGFpbmVyQmxvY2sgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2Uge1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkPzogc3RyaW5nO1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdGlzUHVibGljOiB0cnVlLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLCBcIkVudGl0eVR5cGVcIiwgXCJTaW5nbGV0b25cIl1cblx0fSlcblx0Y29udGV4dFBhdGghOiBDb250ZXh0O1xuXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiXG5cdH0pXG5cdGVudGl0eVNldD86IENvbnRleHQ7XG5cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0aXNQdWJsaWM6IHRydWUsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0bWV0YVBhdGghOiBDb250ZXh0O1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBkYXRhRmllbGRDb2xsZWN0aW9uXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRkYXRhRmllbGRDb2xsZWN0aW9uPzogRm9ybUVsZW1lbnRbXTtcblxuXHQvKipcblx0ICogQ29udHJvbCB3aGV0aGVyIHRoZSBmb3JtIGlzIGluIGRpc3BsYXlNb2RlIG9yIG5vdFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRkaXNwbGF5TW9kZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBUaXRsZSBvZiB0aGUgZm9ybSBjb250YWluZXJcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0dGl0bGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIFwiYXJpYS1sZXZlbFwiIG9mIHRoZSBmb3JtIHRpdGxlLCB0aXRsZXMgb2YgaW50ZXJuYWxseSB1c2VkIGZvcm0gY29udGFpbmVycyBhcmUgbmVzdGVkIHN1YnNlcXVlbnRseVxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzYXAudWkuY29yZS5UaXRsZUxldmVsXCIsIGlzUHVibGljOiB0cnVlIH0pXG5cdHRpdGxlTGV2ZWwgPSBcIkF1dG9cIjtcblxuXHQvKipcblx0ICogQmluZGluZyB0aGUgZm9ybSBjb250YWluZXIgdXNpbmcgYSBuYXZpZ2F0aW9uIHBhdGhcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bmF2aWdhdGlvblBhdGg/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIEJpbmRpbmcgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZvcm0gY29udGFpbmVyIHVzaW5nIGFuIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHZpc2libGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIFVJIGhpZGRlbiBhbm5vdGF0aW9uIGlzIHByZXNlbnQgb3Igbm90XG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRoYXNVaUhpZGRlbkFubm90YXRpb24/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBGbGV4IGRlc2lnbnRpbWUgc2V0dGluZ3MgdG8gYmUgYXBwbGllZFxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRkZXNpZ250aW1lU2V0dGluZ3MgPSBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQ29udGFpbmVyLmRlc2lnbnRpbWVcIjtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0YWN0aW9ucz86IEJhc2VBY3Rpb25bXTtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz86IGJvb2xlYW47XG5cblx0QGJsb2NrQWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtRWxlbWVudFwiIH0pXG5cdGZvcm1FbGVtZW50czogUmVjb3JkPHN0cmluZywgQ29uZmlndXJhYmxlT2JqZWN0PiA9IHt9O1xuXG5cdC8vIEp1c3QgcHJveGllZCBkb3duIHRvIHRoZSBGaWVsZCBtYXkgbmVlZCB0byBzZWUgaWYgbmVlZGVkIG9yIG5vdFxuXHRAYmxvY2tFdmVudCgpXG5cdG9uQ2hhbmdlPzogc3RyaW5nO1xuXG5cdGNvbnRlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Rm9ybUNvbnRhaW5lckJsb2NrPiwgZXh0ZXJuYWxDb25maWd1cmF0aW9uOiB1bmtub3duLCBzZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLmVudGl0eVNldCA9IHRoaXMuY29udGV4dFBhdGghO1xuXHRcdGlmICh0aGlzLmZvcm1FbGVtZW50cyAmJiBPYmplY3Qua2V5cyh0aGlzLmZvcm1FbGVtZW50cykubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFJlZmVyZW5jZUZhY2V0Pih0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRcdGNvbnN0IG1FeHRyYVNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0bGV0IG9GYWNldERlZmluaXRpb24gPSBvQ29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0O1xuXHRcdFx0Ly8gV3JhcCB0aGUgZmFjZXQgaW4gYSBmYWtlIEZhY2V0IGFubm90YXRpb25cblx0XHRcdG9GYWNldERlZmluaXRpb24gPSB7XG5cdFx0XHRcdCRUeXBlOiBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCxcblx0XHRcdFx0TGFiZWw6IG9GYWNldERlZmluaXRpb24/LkxhYmVsLFxuXHRcdFx0XHRUYXJnZXQ6IHtcblx0XHRcdFx0XHQkdGFyZ2V0OiBvRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdHBhdGg6IFwiXCIsXG5cdFx0XHRcdFx0dGVybTogXCJcIixcblx0XHRcdFx0XHR0eXBlOiBcIkFubm90YXRpb25QYXRoXCIsXG5cdFx0XHRcdFx0dmFsdWU6IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgob0NvbnRleHRPYmplY3RQYXRoKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbm5vdGF0aW9uczoge30sXG5cdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbj8uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHR9IGFzIHVua25vd24gYXMgUmVmZXJlbmNlRmFjZXQ7XG5cdFx0XHRtRXh0cmFTZXR0aW5nc1tvRmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZV0gPSB7IGZpZWxkczogdGhpcy5mb3JtRWxlbWVudHMgfTtcblx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJDb250ZXh0ID0gdGhpcy5nZXRDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHRvQ29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdC8qdGhpcy5jb250ZXh0UGF0aCovIHVuZGVmaW5lZCxcblx0XHRcdFx0c2V0dGluZ3MsXG5cdFx0XHRcdG1FeHRyYVNldHRpbmdzXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb0Zvcm1EZWZpbml0aW9uID0gY3JlYXRlRm9ybURlZmluaXRpb24ob0ZhY2V0RGVmaW5pdGlvbiwgXCJ0cnVlXCIsIG9Db252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdFx0dGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uID0gb0Zvcm1EZWZpbml0aW9uLmZvcm1Db250YWluZXJzWzBdLmZvcm1FbGVtZW50cztcblx0XHR9XG5cdFx0Ly8gV2UgbmVlZCB0aGUgdmlldyBpZCBmb3IgdGhlIGZvcm0gZWxlbWVudHMgc3RhYmxlIGlkcyBnZW5lcmF0aW9uXG5cdFx0dGhpcy5jb250ZW50SWQgPSBzZXR0aW5ncy52aWV3SWQgYXMgc3RyaW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRlbXBsYXRlIGZvciB0aGUgRm9ybUNvbnRhaW5lci5cblx0ICogQHJldHVybnMgVGhlIFhNTCB0ZW1wbGF0ZSBzdHJpbmcuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdmVyZmxvd1Rvb2xiYXJJRCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtQWN0aW9uc1Rvb2xiYXJcIl0pIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyh0aGlzLmNvbnRleHRQYXRoLCB0aGlzLm1ldGFQYXRoKSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBkYXRhTW9kZWxPYmplY3QpO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHQ8ZjpGb3JtQ29udGFpbmVyXG5cdFx0XHR4bWxucz1cInNhcC5tXCJcblx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0eG1sbnM6bWFjcm89XCJzYXAuZmUubWFjcm9zXCJcblx0XHRcdHhtbG5zOm1hY3JvRm9ybT1cInNhcC5mZS5tYWNyb3MuZm9ybVwiXG5cdFx0XHR4bWxuczppbnRlcm5hbE1hY3JvPVwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiXG5cdFx0XHR4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIlxuXHRcdFx0eG1sbnM6Y29udHJvbHM9XCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzXCJcblx0XHRcdHhtbG5zOmR0PVwic2FwLnVpLmR0XCJcblx0XHRcdHhtbG5zOm1hY3JvZGF0YT1cImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIlxuXHRcdFx0eG1sbnM6ZnBtPVwic2FwLmZlLm1hY3Jvcy5mcG1cIlxuXHRcdFx0eG1sbnM6dGVtcGxhdGU9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUudGVtcGxhdGUvMVwiXG5cdFx0XHR0ZW1wbGF0ZTpyZXF1aXJlPVwie1xuXHRcdFx0XHRNT0RFTDogJ3NhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyJyxcblx0XHRcdFx0SUQ6ICdzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyJyxcblx0XHRcdFx0Q09NTU9OOiAnc2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXInLFxuXHRcdFx0XHRGT1JNOiAnc2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1IZWxwZXInLFxuXHRcdFx0XHRVSTogJ3NhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RGF0YUZpZWxkOiAnc2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhRmllbGRGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RmllbGRUZW1wbGF0aW5nOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmcnLFxuXHRcdFx0XHRQcm9wZXJ0eTogJ3NhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlGb3JtYXR0ZXJzJyxcblx0XHRcdFx0RklFTEQ6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyJyxcblx0XHRcdFx0TUFDUk86ICdzYXAvZmUvbWFjcm9zL01hY3JvVGVtcGxhdGluZydcblx0XHRcdH1cIlxuXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7Rm9ybUNvbnRhaW5lclJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUNvbnRhaW5lckFQSSd9XCJcblx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke3RoaXMuZGVzaWdudGltZVNldHRpbmdzfVwiXG5cdFx0XHRpZD1cIiR7dGhpcy5pZCB8fCB1bmRlZmluZWR9XCJcblx0XHRcdHZpc2libGU9XCIke3RoaXMudmlzaWJsZX1cIlxuXHRcdFx0bWFjcm9kYXRhOm5hdmlnYXRpb25QYXRoPVwiJHt0aGlzLm5hdmlnYXRpb25QYXRofVwiXG5cdFx0XHRtYWNyb2RhdGE6ZXROYW1lPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldE9iamVjdChcIi4vQHNhcHVpLm5hbWVcIil9XCJcblx0XHRcdG1hY3JvZGF0YTpVaUhpZGRlblByZXNlbnQ9XCIke3RoaXMuaGFzVWlIaWRkZW5Bbm5vdGF0aW9ufVwiXG5cdFx0PlxuXG5cdFx0XHQ8dGVtcGxhdGU6aWYgdGVzdD1cIiR7dGhpcy50aXRsZX1cIj5cblx0XHRcdFx0PGY6dGl0bGU+XG5cdFx0XHRcdFx0PGNvcmU6VGl0bGUgbGV2ZWw9XCIke3RoaXMudGl0bGVMZXZlbH1cIiB0ZXh0PVwiJHt0aGlzLnRpdGxlfVwiIC8+XG5cdFx0XHRcdDwvZjp0aXRsZT5cblx0XHRcdDwvdGVtcGxhdGU6aWY+XG5cblx0XHRcdDx0ZW1wbGF0ZTppZiB0ZXN0PVwiJHt0aGlzLmFjdGlvbnN9XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdDxmOnRvb2xiYXI+XG5cdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyXG5cdFx0XHRcdFx0XHRcdGlkPVwiJHtvdmVyZmxvd1Rvb2xiYXJJRH1cIlxuXHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxUaXRsZSBsZXZlbD1cIiR7dGhpcy50aXRsZUxldmVsfVwiIHRleHQ9XCIke3RoaXMudGl0bGV9XCIgLz5cblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0PHRlbXBsYXRlOnJlcGVhdCBsaXN0PVwie2FjdGlvbnM+fVwiIHZhcj1cImFjdGlvblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQWN0aW9uQnV0dG9uc1wiIHR5cGU9XCJYTUxcIiAvPlxuXHRcdFx0XHRcdFx0XHQ8L3RlbXBsYXRlOnJlcGVhdD5cblx0XHRcdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdDwvZjp0b29sYmFyPlxuXHRcdFx0XHQ8L3RlbXBsYXRlOnRoZW4+XG5cdFx0XHQ8L3RlbXBsYXRlOmlmPlxuXG5cdFx0XHQ8ZjpkZXBlbmRlbnRzPlxuXHRcdFx0XHQ8bWFjcm9Gb3JtOkZvcm1Db250YWluZXJBUEkgZm9ybUNvbnRhaW5lcklkPVwiJHt0aGlzLmlkfVwiIHNob3dEZXRhaWxzPVwie2ludGVybmFsPnNob3dEZXRhaWxzfVwiIC8+XG5cdFx0XHQ8L2Y6ZGVwZW5kZW50cz5cblxuXHRcdFx0PGY6Zm9ybUVsZW1lbnRzPlxuXHRcdFx0XHQke3RoaXMuZ2V0VGVtcGxhdGVkRm9ybUVsZW1lbnRzKCl9XG5cdFx0XHQ8L2Y6Zm9ybUVsZW1lbnRzPlxuXG5cdFx0PC9mOkZvcm1Db250YWluZXI+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZWQgZm9ybSBlbGVtZW50cy5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0cHVibGljIGdldFRlbXBsYXRlZEZvcm1FbGVtZW50cygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZGF0YUZpZWxkQ29sbGVjdGlvbj5cIiB2YXI9XCJmb3JtRWxlbWVudHNcIj5cblx0XHRcdFx0JHt0aGlzLmdldElubmVyVGVtcGxhdGVkRm9ybUVsZW1lbnRzKCl9XG5cdFx0XHQ8L3RlbXBsYXRlOndpdGg+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbm5lciB0ZW1wbGF0ZWQgZm9ybSBlbGVtZW50cywgaW5jbHVkaW5nIERhdGFQb2ludCBhbmQgQ29udGFjdCB0ZW1wbGF0ZXMuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgaW5uZXIgZm9ybSBlbGVtZW50cy5cblx0ICovXG5cdHB1YmxpYyBnZXRJbm5lclRlbXBsYXRlZEZvcm1FbGVtZW50cygpOiBzdHJpbmcge1xuXHRcdGxldCBnZXREYXRhUG9pbnRUZW1wbGF0ZSA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uICYmIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaGFzIGFuIGFubm90YXRpb25QYXRoXG5cdFx0XHRjb25zdCBmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGggPSB0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24uZmluZCgoZGYpID0+ICEhZGYuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0bGV0IGlkUHJlZml4ID0gXCJcIjtcblx0XHRcdGNvbnN0IGlzRWRpdGFibGVIZWFkZXIgPSB0aGlzLmlkPy5pbmNsdWRlcyhcIkhlYWRlckZhY2V0OjpGb3JtQ29udGFpbmVyXCIpID09PSB0cnVlO1xuXHRcdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcInVuZGVmaW5lZFwiO1xuXHRcdFx0aWYgKHRoaXMuaWQpIHtcblx0XHRcdFx0aWYgKGlzRWRpdGFibGVIZWFkZXIpIHtcblx0XHRcdFx0XHRmb3JtRWxlbWVudElkID0gYCR7dGhpcy5pZH06OkZvcm1FbGVtZW50YDtcblx0XHRcdFx0XHRpZFByZWZpeCA9IGAke3RoaXMuaWR9OjpGb3JtRWxlbWVudGA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIHRoaXMuZGF0YUZpZWxkQ29sbGVjdGlvblswXS5rZXldKX1gO1xuXHRcdFx0XHRcdGlkUHJlZml4ID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uWzBdLmtleV0pfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGg/LmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmaXJzdEVsZW1lbnRXaXRoQW5ub3RhdGlvblBhdGg/LmFubm90YXRpb25QYXRoIHx8IFwiXCIpXG5cdFx0XHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRcdFx0Y29uc3QgZGVzaWdudGltZSA9IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5VST8uQWRhcHRhdGlvbkhpZGRlblxuXHRcdFx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0XHRcdGdldERhdGFQb2ludFRlbXBsYXRlID0geG1sYFxuXHRcdFx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cImRhdGFQb2ludFwiPlxuXHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRsYWJlbD1cIntkYXRhUG9pbnQ+QEBGSUVMRC5jb21wdXRlTGFiZWxUZXh0fVwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke2dldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pfVwiXG5cdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdFx0XHRcdFx0aWRQcmVmaXg9XCIke2lkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRWYWx1ZUhlbHBcIl0pIDogXCJcIn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHt0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb25bMF0uYW5ub3RhdGlvblBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdGVkaXRNb2RlPVwiJHt0aGlzLmRpc3BsYXlNb2RlID09PSB0cnVlID8gXCJEaXNwbGF5XCIgOiB1bmRlZmluZWR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgdGV4dEFsaWduTW9kZT1cIkZvcm1cIiBzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvOkZpZWxkPlxuXHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblxuXHRcdFx0YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBnZXRDb250YWN0VGVtcGxhdGUgPSB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZm9ybUVsZW1lbnRzPjAvYW5ub3RhdGlvblBhdGhcIiB2YXI9XCJtZXRhUGF0aFwiPlxuXHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJ7PSBcXCR7bWV0YVBhdGg+Li9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQWRhcHRhdGlvbkhpZGRlbn0gPyAnbm90LWFkYXB0YWJsZS10cmVlJyA6ICAnc2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1FbGVtZW50LmRlc2lnbnRpbWUnIH1cIlxuXHRcdFx0XHRcdGJpbmRpbmc9XCJ7PSBGT1JNLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24oXFwke3RoaXMubmF2aWdhdGlvblBhdGh9LFxcJHtjb250ZXh0UGF0aD5AQFVJLmdldERhdGFNb2RlbE9iamVjdFBhdGh9KX1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdDxmOmxhYmVsPlxuXHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0dGV4dD1cInttZXRhUGF0aD5mbi8kUGF0aEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWx9XCJcblx0XHRcdFx0XHRcdHZpc2libGU9XCJ7PSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmlzaWJsZUV4cHJlc3Npb24oXFwke2RhdGFGaWVsZD5AQFVJLmdldERhdGFNb2RlbE9iamVjdFBhdGh9KX1cIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHQ8bGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdDxmOkNvbHVtbkVsZW1lbnREYXRhIGNlbGxzTGFyZ2U9XCIxMlwiIC8+XG5cdFx0XHRcdFx0PC9sYXlvdXREYXRhPlxuXHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHQ8L2Y6bGFiZWw+XG5cdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0PG1hY3JvOkNvbnRhY3Rcblx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCJ7bWV0YVBhdGg+QEBDT01NT04uZ2V0TWV0YVBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIntjb250ZXh0UGF0aD5AQENPTU1PTi5nZXRNZXRhUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0XHQ8L3RlbXBsYXRlOndpdGg+YDtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHQ8dGVtcGxhdGU6aWYgdGVzdD1cIns9IFxcJHtmb3JtRWxlbWVudHM+MC9hbm5vdGF0aW9uUGF0aH0uaW5kZXhPZignY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50JykgPiAtMSB9XCI+XG5cdFx0XHRcdDx0ZW1wbGF0ZTp0aGVuPlxuXHRcdFx0XHRcdCR7Z2V0RGF0YVBvaW50VGVtcGxhdGV9XG5cdFx0XHRcdDwvdGVtcGxhdGU6dGhlbj5cblx0XHRcdFx0PHRlbXBsYXRlOmVsc2VpZlxuXHRcdFx0XHRcdHRlc3Q9XCJ7PSBcXCR7Zm9ybUVsZW1lbnRzPjAvYW5ub3RhdGlvblBhdGh9LmluZGV4T2YoJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdCcpID4gLTEgfVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQke2dldENvbnRhY3RUZW1wbGF0ZX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlaWY+XG5cdFx0XHRcdDx0ZW1wbGF0ZTplbHNlPlxuXHRcdFx0XHRcdCR7dGhpcy5nZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKX1cblx0XHRcdFx0PC90ZW1wbGF0ZTplbHNlPlxuXHRcdFx0PC90ZW1wbGF0ZTppZj5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHdpdGggY29ubmVjdGVkIGZpZWxkcy5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgY29ubmVjdGVkIGZpZWxkcyBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChmb3JtRWxlbWVudDogQW5ub3RhdGlvbkZvcm1FbGVtZW50KTogc3RyaW5nIHtcblx0XHRsZXQgY29ubmVjdGVkRmllbGRFbGVtZW50cyA9IFwiXCI7XG5cblx0XHQvLyBDcmVhdGUgYSBzb3J0ZWQgY29weSBvZiB0aGUgY29ubmVjdGVkIGZpZWxkcyBiYXNlZCBvbiB0aGUgcGxhY2Vob2xkZXIgb3JkZXIgaW4gdGhlIHRlbXBsYXRlIHN0cmluZy5cblx0XHQvLyBUaGUgdGVtcGxhdGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGxvb2sgbGlrZSBcIntGaWVsZEF9IC8ge0ZpZWxkQn1cIiBldGMuIFdlIGV4dHJhY3QgdGhlIHBsYWNlaG9sZGVyXG5cdFx0Ly8gc2VxdWVuY2UgYW5kIHNvcnQgdGhlIGNvbm5lY3RlZCBmaWVsZHMgYWNjb3JkaW5nbHkgKGZhbGxpbmcgYmFjayB0byBvcmlnaW5hbCBvcmRlciBmb3IgdW5tYXRjaGVkIGZpZWxkcykuXG5cdFx0bGV0IHNvcnRlZENvbm5lY3RlZEZpZWxkcyA9IGZvcm1FbGVtZW50LmNvbm5lY3RlZEZpZWxkcyA/IFsuLi5mb3JtRWxlbWVudC5jb25uZWN0ZWRGaWVsZHNdIDogW107XG5cdFx0aWYgKHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRjb25zdCB0ZW1wbGF0ZVN0cmluZyA9IHNvcnRlZENvbm5lY3RlZEZpZWxkc1swXS5vcmlnaW5hbFRlbXBsYXRlIHx8IFwiXCI7XG5cdFx0XHQvLyBFeHRyYWN0IHBsYWNlaG9sZGVycyBpbiB0aGUgc2VxdWVuY2UgZGVmaW5lZCBieSB0aGUgdGVtcGxhdGUgKGUuZy4gXCJ7RmllbGRBfSAvIHtGaWVsZEJ9XCIpXG5cdFx0XHRjb25zdCBwbGFjZWhvbGRlcnMgPSBBcnJheS5mcm9tKHRlbXBsYXRlU3RyaW5nLm1hdGNoQWxsKC9cXHsoW159XSspXFx9L2cpKVxuXHRcdFx0XHQubWFwKChtKSA9PiBTdHJpbmcobVsxXSkudHJpbSgpKVxuXHRcdFx0XHQuZmlsdGVyKChwKSA9PiBwLmxlbmd0aCA+IDApO1xuXG5cdFx0XHQvLyBIZWxwZXIgdG8gZGVyaXZlIHRoZSBpZGVudGlmaWVyIGZyb20gdGhlIGNvbm5lY3RlZCBmaWVsZCAobGFzdCBzZWdtZW50IG9mIGZ1bGx5UXVhbGlmaWVkTmFtZSlcblx0XHRcdGNvbnN0IGdldEZpZWxkSWRlbnRpZmllciA9IChjZjogKHR5cGVvZiBzb3J0ZWRDb25uZWN0ZWRGaWVsZHMpW251bWJlcl0pOiBzdHJpbmcgPT4ge1xuXHRcdFx0XHRjb25zdCBvcmlnaW5hbE9iamVjdCA9IGNmLm9yaWdpbmFsT2JqZWN0O1xuXHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0XHRcdD8gb3JpZ2luYWxPYmplY3QuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cmluZyhvcmlnaW5hbE9iamVjdC5mdWxseVF1YWxpZmllZE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSlcblx0XHRcdFx0XHQ6IFwiXCI7XG5cdFx0XHR9O1xuXG5cdFx0XHRjb25zdCBmaWVsZElkcyA9IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5tYXAoZ2V0RmllbGRJZGVudGlmaWVyKTtcblx0XHRcdGNvbnN0IHVuaXF1ZVBsYWNlaG9sZGVycyA9IG5ldyBTZXQocGxhY2Vob2xkZXJzKTtcblxuXHRcdFx0Ly8gV2Ugb25seSByZW9yZGVyIGlmIHRoZSB0ZW1wbGF0ZSBpcyBwZXJmZWN0bHkgYW5ub3RhdGVkOlxuXHRcdFx0Ly8gMS4gU2FtZSBudW1iZXIgb2YgcGxhY2Vob2xkZXJzIGFzIGNvbm5lY3RlZCBmaWVsZHNcblx0XHRcdC8vIDIuIEFsbCBwbGFjZWhvbGRlcnMgYXJlIHVuaXF1ZVxuXHRcdFx0Ly8gMy4gRXZlcnkgY29ubmVjdGVkIGZpZWxkIGlkIGlzIHJlZmVyZW5jZWQgZXhhY3RseSBvbmNlXG5cdFx0XHRjb25zdCBpc1BlcmZlY3RNYXRjaCA9XG5cdFx0XHRcdHBsYWNlaG9sZGVycy5sZW5ndGggPT09IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggJiZcblx0XHRcdFx0dW5pcXVlUGxhY2Vob2xkZXJzLnNpemUgPT09IHBsYWNlaG9sZGVycy5sZW5ndGggJiZcblx0XHRcdFx0ZmllbGRJZHMuZXZlcnkoKGlkKSA9PiB1bmlxdWVQbGFjZWhvbGRlcnMuaGFzKGlkKSk7XG5cblx0XHRcdC8vIFJldmlldyBmZWVkYmFjazogRG8gTk9UIFwiZml4XCIgYmFkbHkgYW5ub3RhdGVkIGNvbm5lY3RlZCBmaWVsZHMuXG5cdFx0XHQvLyBJZiB0aGUgYW5ub3RhdGlvbiBpcyBub3QgcGVyZmVjdCwgd2Uga2VlcCB0aGUgb3JpZ2luYWwgb3JkZXIuXG5cdFx0XHRpZiAoaXNQZXJmZWN0TWF0Y2gpIHtcblx0XHRcdFx0Y29uc3QgbWFwQnlJZCA9IG5ldyBNYXAoc29ydGVkQ29ubmVjdGVkRmllbGRzLm1hcCgoY2YpID0+IFtnZXRGaWVsZElkZW50aWZpZXIoY2YpLCBjZl0pKTtcblx0XHRcdFx0c29ydGVkQ29ubmVjdGVkRmllbGRzID0gcGxhY2Vob2xkZXJzLm1hcCgocGgpID0+IG1hcEJ5SWQuZ2V0KHBoKSEpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgY29ubmVjdGVkRmllbGQgb2Ygc29ydGVkQ29ubmVjdGVkRmllbGRzKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IHRlbXBOYW1lID0gY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3Q/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHRcdGNvbnN0IHBhdGggPSB0ZW1wTmFtZT8uc3Vic3RyaW5nKHRlbXBOYW1lLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCArIFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhL1wiICsgcGF0aCk7XG5cdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSBDb21tb25IZWxwZXIuZ2V0RGVsaW1pdGVyKGNvbm5lY3RlZEZpZWxkLm9yaWdpbmFsVGVtcGxhdGUgPz8gXCJcIik7XG5cdFx0XHRjb25zdCBub3RMYXN0SW5kZXhDb25kaXRpb24gPVxuXHRcdFx0XHRzb3J0ZWRDb25uZWN0ZWRGaWVsZHMuaW5kZXhPZihjb25uZWN0ZWRGaWVsZCkgIT09IHNvcnRlZENvbm5lY3RlZEZpZWxkcy5sZW5ndGggLSAxXG5cdFx0XHRcdFx0PyB4bWxgPFRleHRcbnRleHQ9XCIke2RlbGltaXRlcn1cIlxuY2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5FbmRcIlxud2lkdGg9XCIxMDAlXCJcbi8+YFxuXHRcdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY0Zvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoY29ubmVjdGVkRmllbGQub3JpZ2luYWxPYmplY3QgYXMgRGF0YUZpZWxkKT8uVmFsdWUucGF0aFxuXHRcdFx0XHQgIF0pXG5cdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXB1dGVkVmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5LCBcIkZpZWxkVmFsdWVIZWxwXCJdKSA6IFwiXCI7XG5cblx0XHRcdGxldCBjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSBcIlwiO1xuXG5cdFx0XHRjb25uZWN0ZWRGaWVsZEVsZW1lbnQgPSB4bWxgXG4gICAgICAgICAgICAgICAgPG1hY3JvOkZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG4gICAgICAgICAgICAgICAgICAgIHZoSWRQcmVmaXg9XCIke2NvbXB1dGVkVmhJZFByZWZpeH1cIlxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0UGF0aD1cIiR7dGhpcy5lbnRpdHlTZXQ/LmdldFBhdGgoKX1cIlxuICAgICAgICAgICAgICAgICAgICBtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbGxlZEJ5PVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lc0VkaXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXR9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRNYXhMaW5lcz1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExpbmVzfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1heExlbmd0aD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduTW9kZT1cIkZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0VtcHR5SW5kaWNhdG9yPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEVkaXRTdHlsZT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8uZmllbGRFZGl0U3R5bGV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hY3JvOmxheW91dERhdGE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCJ7PSAle3VpPi9pc0VkaXRhYmxlfSA/IDEgOiAwfVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWFjcm86bGF5b3V0RGF0YT5cbiAgICAgICAgICAgICAgICA8L21hY3JvOkZpZWxkPlxuICAgICAgICAgICAgICAgICR7bm90TGFzdEluZGV4Q29uZGl0aW9ufVxuICAgICAgICAgICAgICAgIGA7XG5cblx0XHRcdGNvbm5lY3RlZEZpZWxkRWxlbWVudHMgKz0gY29ubmVjdGVkRmllbGRFbGVtZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdEZvckNvbm5lY3RlZEZpZWxkcyA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aCA/PyBcIlwiKVxuXHRcdCkgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxFbnRpdHlTZXQ+IHwgdW5kZWZpbmVkO1xuXHRcdGxldCBmb3JtRWxlbWVudElkID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIlNlbWFudGljRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT5cblx0XHRcdCAgKVxuXHRcdFx0OiBcIns9ICR7aW50ZXJuYWw+c2hvd0RldGFpbHN9ID09PSB0cnVlfVwiO1xuXHRcdGNvbnN0IGJpbmRpbmdTdHJpbmcgPSBGb3JtSGVscGVyLmdlbmVyYXRlQmluZGluZ0V4cHJlc3Npb24odGhpcy5uYXZpZ2F0aW9uUGF0aCwgZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzKTtcblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSAoZGF0YU1vZGVsT2JqZWN0Rm9yQ29ubmVjdGVkRmllbGRzPy50YXJnZXRPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKT8uVGFyZ2V0XG5cdFx0XHQ/LiR0YXJnZXQgYXMgQW5ub3RhdGlvblRlcm08Q29ubmVjdGVkRmllbGRzVHlwZVR5cGVzPjtcblxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHM/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXHRcdGNvbnN0IGlzUmVxdWlyZWQgPSBnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RGb3JDb25uZWN0ZWRGaWVsZHMgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxBbm5vdGF0aW9uUGF0aDxDb25uZWN0ZWRGaWVsZHNUeXBlPj5cblx0XHQpPy50b1N0cmluZygpO1xuXG5cdFx0cmV0dXJuIHhtbGBcbiAgICAgICAgICAgIDxmOkZvcm1FbGVtZW50XG4gICAgICAgICAgICAgICAgeG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG4gICAgICAgICAgICAgICAgZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuICAgICAgICAgICAgICAgIGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG4gICAgICAgICAgICAgICAgdmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcbiAgICAgICAgICAgICAgICAke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGY6bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbFxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiJHt0YXJnZXRPYmplY3Q/LkxhYmVsID8/IGZvcm1FbGVtZW50LmxhYmVsfVwiXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiJHt0aGlzLmlkID8gU3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiU2VtYW50aWNGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9mOmxhYmVsPlxuICAgICAgICAgICAgICAgIDxmOmZpZWxkcz5cbiAgICAgICAgICAgICAgICAgICAgPGNvbnRyb2xzOkZpZWxkV3JhcHBlciByZXF1aXJlZD1cIiR7aXNSZXF1aXJlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxIQm94IHdyYXA9XCJXcmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb25uZWN0ZWRGaWVsZEVsZW1lbnRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9IQm94PlxuICAgICAgICAgICAgICAgICAgICA8L2NvbnRyb2xzOkZpZWxkV3JhcHBlcj5cbiAgICAgICAgICAgICAgICA8L2Y6ZmllbGRzPlxuICAgICAgICAgICAgPC9mOkZvcm1FbGVtZW50PlxuICAgICAgICBgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgZm9ybSBlbGVtZW50IHJlcHJlc2VudGluZyBhIG11bHRpdmFsdWUgZmllbGQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIG11bHRpLXZhbHVlIGZpZWxkIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pilcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRjb25zdCBmb3JtRWxlbWVudElkID0gdGhpcy5pZCA/IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWAgOiBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IG11bHRpVmFsdWVGaWVsZElkID0gdGhpcy5pZFxuXHRcdFx0PyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXksIFwiTXVsdGlWYWx1ZUZpZWxkXCJdKX1gXG5cdFx0XHQ6IFwidW5kZWZpbmVkXCI7XG5cdFx0Y29uc3QgdmhJZFByZWZpeCA9IHRoaXMuaWQgPyBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSkgOiBcIlwiO1xuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eG1sbnM6bWFjcm9zPVwic2FwLmZlLm1hY3Jvc1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOm11bHRpdmFsdWVmaWVsZD1cInNhcC5mZS5tYWNyb3MubXVsdGl2YWx1ZWZpZWxkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIiR7ZGVzaWdudGltZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD1cIiR7Zm9ybUVsZW1lbnQubGFiZWx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT1cIiR7dmlzaWJsZUV4cHJlc3Npb259XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JHt0aGlzLmF0dHIoXCJiaW5kaW5nXCIsIGJpbmRpbmdTdHJpbmcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG1hY3JvczpNdWx0aVZhbHVlRmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHttdWx0aVZhbHVlRmllbGRJZH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmhJZFByZWZpeD1cIiR7dmhJZFByZWZpeH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5hbm5vdGF0aW9uUGF0aH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb3M6Zm9ybWF0T3B0aW9ucz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PG11bHRpdmFsdWVmaWVsZDpGb3JtYXRPcHRpb25zIHNob3dFbXB0eUluZGljYXRvcj1cInRydWVcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb3M6Zm9ybWF0T3B0aW9ucz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L21hY3JvczpNdWx0aVZhbHVlRmllbGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIGZvciBmb3JtIGVsZW1lbnRzIHJlcHJlc2VudGluZyBhIGNoZWNrYm94IGdyb3VwLlxuXHQgKiBAcGFyYW0gZm9ybUVsZW1lbnQgVGhlIGZvcm0gZWxlbWVudC5cblx0ICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBjaGVja2JveCBncm91cCBmb3JtIGVsZW1lbnRzLlxuXHQgKi9cblx0Z2V0RmllbGRHcm91cEZvcm1FbGVtZW50KGZvcm1FbGVtZW50OiBBbm5vdGF0aW9uRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGxldCBmaWVsZEdyb3VwRWxlbWVudHMgPSBcIlwiO1xuXHRcdC8vV2UgdGVtcGxhdGUgZWFjaCBlbGVtZW50IG9mIHRoZSBjaGVja2JveCBncm91cFxuXHRcdGZvciAoY29uc3QgZ3JvdXBFbGVtZW50IG9mIGZvcm1FbGVtZW50LmZpZWxkR3JvdXBFbGVtZW50cyEpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpO1xuXHRcdFx0Y29uc3QgdGVtcE5hbWUgPSBncm91cEVsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgcGF0aCA9IHRlbXBOYW1lPy5zdWJzdHJpbmcodGVtcE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoICsgXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGEvXCIgKyBwYXRoKTtcblx0XHRcdGNvbnN0IGdyb3VwRWxlbWVudERhdGFNb2RlbE9iamVjdCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZT4oYmluZGluZ0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWRcblx0XHRcdFx0PyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbXG5cdFx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFx0XCJDaGVja0JveEdyb3VwXCIsXG5cdFx0XHRcdFx0XHRmb3JtRWxlbWVudC5rZXksXG5cdFx0XHRcdFx0XHQoZ3JvdXBFbGVtZW50RGF0YU1vZGVsT2JqZWN0LnRhcmdldE9iamVjdCBhcyBEYXRhRmllbGQgfCBEYXRhUG9pbnRUeXBlKT8uVmFsdWU/LnBhdGhcblx0XHRcdFx0ICBdKX1gXG5cdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0Y29uc3QgaXNCb29sZWFuRmllbGRHcm91cCA9XG5cdFx0XHRcdChncm91cEVsZW1lbnREYXRhTW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZCB8IERhdGFQb2ludFR5cGUpPy5WYWx1ZT8uJHRhcmdldD8udHlwZSA9PT0gXCJFZG0uQm9vbGVhblwiO1xuXG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRWxlbWVudCA9IGlzQm9vbGVhbkZpZWxkR3JvdXBcblx0XHRcdFx0PyB4bWxgXG5cdFx0XHRcdDxtYWNybzpGaWVsZFxuXHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke3RoaXMuZW50aXR5U2V0Py5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7YmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpfVwiXG5cdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT1cIiR7dGhpcy5pZCA/IFN0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBcIkZpZWxkR3JvdXBGb3JtRWxlbWVudExhYmVsXCIsIGZvcm1FbGVtZW50LmtleV0pIDogXCJcIn1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnMgaXNGaWVsZEdyb3VwSXRlbT1cInRydWVcIiB0ZXh0QWxpZ25Nb2RlPVwiRm9ybVwiIC8+XG5cdFx0XHRcdDwvbWFjcm86RmllbGQ+XG5cdFx0XHRgXG5cdFx0XHRcdDogXCJcIjtcblxuXHRcdFx0ZmllbGRHcm91cEVsZW1lbnRzICs9IGZpZWxkR3JvdXBFbGVtZW50O1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0dGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1FbGVtZW50LmFubm90YXRpb25QYXRoID8/IFwiXCIpXG5cdFx0KSBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb24gPSBmb3JtRWxlbWVudC5pc1BhcnRPZlByZXZpZXdcblx0XHRcdD8gZ2V0VmlzaWJsZUV4cHJlc3Npb24oY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzIHwgRGF0YVBvaW50VHlwZSB8IFByb3BlcnR5Pilcblx0XHRcdDogXCJ7PSAke2ludGVybmFsPnNob3dEZXRhaWxzfSA9PT0gdHJ1ZX1cIjtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRsZXQgZmllbGRHcm91cEZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGxldCBsYWJlbElEID0gXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gYCR7dGhpcy5jb250ZW50SWR9LS0ke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFtcblx0XHRcdFx0XHR0aGlzLmlkLFxuXHRcdFx0XHRcdFwiRmllbGRHcm91cEZvcm1FbGVtZW50XCIsXG5cdFx0XHRcdFx0Zm9ybUVsZW1lbnQua2V5XG5cdFx0XHRcdF0pfWA7XG5cdFx0XHRcdGxhYmVsSUQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50TGFiZWxcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZpZWxkR3JvdXBGb3JtRWxlbWVudElkID0gYCR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRmllbGRHcm91cEZvcm1FbGVtZW50XCIsIGZvcm1FbGVtZW50LmtleV0pfWA7XG5cdFx0XHRcdGxhYmVsSUQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZEdyb3VwRm9ybUVsZW1lbnRMYWJlbFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB0YXJnZXRPYmplY3QgPSAoY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCBhcyB1bmtub3duIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pPy5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cDtcblxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6Rm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0eG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCIke2Rlc2lnbnRpbWV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCIke2ZpZWxkR3JvdXBGb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9XCIke3Zpc2libGVFeHByZXNzaW9ufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6bGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PVwiJHt0YXJnZXRPYmplY3Q/LkxhYmVsID8/IGZvcm1FbGVtZW50LmxhYmVsfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7bGFiZWxJRH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpsYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxjb250cm9sczpSZXF1aXJlZEZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBIb3Jpem9udGFsTGF5b3V0ID09PSB0cnVlID8gXCJSb3dcIiA6IFwiQ29sdW1uXCJ9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD1cIldyYXBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5HYXA9XCIxcmVtXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGl0ZW1zPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCR7ZmllbGRHcm91cEVsZW1lbnRzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2l0ZW1zPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvY29udHJvbHM6UmVxdWlyZWRGbGV4Qm94PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOkZvcm1FbGVtZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGA7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBmb3IgYSBmb3JtIGVsZW1lbnQgcmVwcmVzZW50aW5nIGEgZmllbGQuXG5cdCAqIEBwYXJhbSBmb3JtRWxlbWVudCBUaGUgZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGZpZWxkIGZvcm0gZWxlbWVudC5cblx0ICovXG5cdGdldEZpZWxkRm9ybUVsZW1lbnQoZm9ybUVsZW1lbnQ6IEFubm90YXRpb25Gb3JtRWxlbWVudCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoXG5cdFx0XHR0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZm9ybUVsZW1lbnQuYW5ub3RhdGlvblBhdGggPz8gXCJcIilcblx0XHQpIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBiaW5kaW5nU3RyaW5nID0gRm9ybUhlbHBlci5nZW5lcmF0ZUJpbmRpbmdFeHByZXNzaW9uKHRoaXMubmF2aWdhdGlvblBhdGgsIGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0KTtcblx0XHRjb25zdCBjb21wdXRlZFZoSWRQcmVmaXggPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGaWVsZFZhbHVlSGVscFwiXSk7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcInVuZGVmaW5lZFwiO1xuXHRcdGNvbnN0IHZpc2libGVFeHByZXNzaW9uID0gZm9ybUVsZW1lbnQuaXNQYXJ0T2ZQcmV2aWV3XG5cdFx0XHQ/IGdldFZpc2libGVFeHByZXNzaW9uKGNvbXB1dGVkRGF0YU1vZGVsT2JqZWN0IGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGUgfCBQcm9wZXJ0eT4pXG5cdFx0XHQ6IFwiez0gJHtpbnRlcm5hbD5zaG93RGV0YWlsc30gPT09IHRydWV9XCI7XG5cdFx0Y29uc3QgY29tcHV0ZWRJZFByZWZpeCA9IHRoaXMuaWQgPyBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gIDogXCJcIjtcblx0XHRpZiAodGhpcy5pZCkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudElkKSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHt0aGlzLmNvbnRlbnRJZH0tLSR7U3RhYmxlSURIZWxwZXIuZ2VuZXJhdGUoW3RoaXMuaWQsIFwiRm9ybUVsZW1lbnRcIiwgZm9ybUVsZW1lbnQua2V5XSl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvcm1FbGVtZW50SWQgPSBgJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgXCJGb3JtRWxlbWVudFwiLCBmb3JtRWxlbWVudC5rZXldKX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBkZXNpZ250aW1lID0gY29tcHV0ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LlVJPy5BZGFwdGF0aW9uSGlkZGVuXG5cdFx0XHQ/IFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdDogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUVsZW1lbnQuZGVzaWdudGltZVwiO1xuXG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOkZvcm1FbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHhtbG5zOmY9XCJzYXAudWkubGF5b3V0LmZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwiJHtmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHt2aXNpYmxlRXhwcmVzc2lvbn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQke3RoaXMuYXR0cihcImJpbmRpbmdcIiwgYmluZGluZ1N0cmluZyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxmOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bWFjcm86RmllbGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkUHJlZml4PVwiJHtjb21wdXRlZElkUHJlZml4fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aElkUHJlZml4PVwiJHtjb21wdXRlZFZoSWRQcmVmaXh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWV0YVBhdGg9XCIke2Zvcm1FbGVtZW50LmFubm90YXRpb25QYXRofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT1cIiR7dGhpcy5vbkNoYW5nZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVhZE9ubHk9XCIke2Zvcm1FbGVtZW50LnJlYWRPbmx5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdD1cIiR7Zm9ybUVsZW1lbnQuc2VtYW50aWNPYmplY3R9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZvcm1hdE9wdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dExpbmVzRWRpdD1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dExpbmVzRWRpdH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4TGluZXM9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lc31cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0TWF4TGVuZ3RoPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGVuZ3RofVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheT1cIiR7Zm9ybUVsZW1lbnQuZm9ybWF0T3B0aW9ucz8udGV4dE1heENoYXJhY3RlcnNEaXNwbGF5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dEFsaWduTW9kZT1cIkZvcm1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93RW1wdHlJbmRpY2F0b3I9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRFZGl0U3R5bGU9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LmZpZWxkRWRpdFN0eWxlfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQ9XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZVRpbWVQYXR0ZXJuPVwiJHtmb3JtRWxlbWVudC5mb3JtYXRPcHRpb25zPy5wYXR0ZXJufVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW49XCIke2Zvcm1FbGVtZW50LmZvcm1hdE9wdGlvbnM/LnVzZVJhZGlvQnV0dG9uc0ZvckJvb2xlYW59XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNybzpGaWVsZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mOmZpZWxkcz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpGb3JtRWxlbWVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGEgY3VzdG9tIGZvcm0gZWxlbWVudC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBjdXN0b20gZm9ybSBlbGVtZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyBmb3IgdGhlIGN1c3RvbSBmb3JtIGVsZW1lbnQuXG5cdCAqL1xuXHRnZXRDdXN0b21Gb3JtRWxlbWVudChmb3JtRWxlbWVudDogQ3VzdG9tRm9ybUVsZW1lbnQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHRoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpICsgXCIvXCIgKyBmb3JtRWxlbWVudC5wcm9wZXJ0eVBhdGg7XG5cdFx0Y29uc3QgY29tcHV0ZWREYXRhTW9kZWxPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHModGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHByb3BlcnR5UGF0aCkpIGFzXG5cdFx0XHR8IERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0PlxuXHRcdFx0fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYmluZGluZ1N0cmluZyA9IEZvcm1IZWxwZXIuZ2VuZXJhdGVCaW5kaW5nRXhwcmVzc2lvbih0aGlzLm5hdmlnYXRpb25QYXRoLCBjb21wdXRlZERhdGFNb2RlbE9iamVjdCk7XG5cdFx0bGV0IGZvcm1FbGVtZW50SWQgPSBcIlwiO1xuXHRcdGlmICh0aGlzLmlkKSB7XG5cdFx0XHRpZiAodGhpcy5jb250ZW50SWQpIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke3RoaXMuY29udGVudElkfS0tJHtTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQuaWRdKX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9ybUVsZW1lbnRJZCA9IGAke1N0YWJsZUlESGVscGVyLmdlbmVyYXRlKFt0aGlzLmlkLCBmb3JtRWxlbWVudC5pZF0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IGRlc2lnbnRpbWUgPSBjb21wdXRlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uVUk/LkFkYXB0YXRpb25IaWRkZW5cblx0XHRcdD8gXCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0OiBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtRWxlbWVudC5kZXNpZ250aW1lXCI7XG5cdFx0Y29uc3QgZm9ybUVsZW1lbnRLZXkgPSBTdGFibGVJREhlbHBlci5nZW5lcmF0ZShbdGhpcy5pZCwgZm9ybUVsZW1lbnQua2V5XSk7XG5cdFx0cmV0dXJuIHhtbGBcblx0XHRcdFx0XHRcdFx0XHQ8ZjpGb3JtRWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwiJHtkZXNpZ250aW1lfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiJHtmb3JtRWxlbWVudElkfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPVwiJHtmb3JtRWxlbWVudC5sYWJlbH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiJHtmb3JtRWxlbWVudC52aXNpYmxlfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiYmluZGluZ1wiLCBiaW5kaW5nU3RyaW5nKX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGY6ZmllbGRzPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxtYWNyb0Zvcm06Q3VzdG9tRm9ybUVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1ldGFQYXRoPVwiJHtmb3JtRWxlbWVudC5wcm9wZXJ0eVBhdGh9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHt0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybUVsZW1lbnRLZXk9XCIke2Zvcm1FbGVtZW50S2V5fVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZwbTpDdXN0b21GcmFnbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cIiR7Zm9ybUVsZW1lbnRLZXl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJhZ21lbnROYW1lPVwiJHtmb3JtRWxlbWVudC50ZW1wbGF0ZX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7dGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9tYWNyb0Zvcm06Q3VzdG9tRm9ybUVsZW1lbnQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZjpmaWVsZHM+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Y6Rm9ybUVsZW1lbnQ+XG5cdFx0YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBmb3IgYSBzbG90IGNvbHVtbiBmb3IgdGhlIGdpdmVuIGZvcm0gZWxlbWVudC5cblx0ICogQHBhcmFtIGZvcm1FbGVtZW50IFRoZSBmb3JtIGVsZW1lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgc2xvdCBjb2x1bW4uXG5cdCAqL1xuXHRnZXRTbG90Q29sdW1uKGZvcm1FbGVtZW50OiBGb3JtRWxlbWVudCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHhtbGA8c2xvdCBuYW1lPVwiJHtmb3JtRWxlbWVudC5rZXl9XCIgLz5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIGRhdGEgZmllbGQgaXMgYSBtdWx0aXZhbHVlIGZpZWxkLlxuXHQgKiBAcGFyYW0gZGF0YUZpZWxkIFRoZSBkYXRhIGZpZWxkIHRvIGNoZWNrLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRhIGZpZWxkIGlzIGEgbXVsdGl2YWx1ZSBmaWVsZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0aXNNdWx0aVZhbHVlRGF0YUZpZWxkKGRhdGFGaWVsZDogRm9ybUVsZW1lbnQpOiBib29sZWFuIHtcblx0XHRsZXQgaXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24gPSBmYWxzZTtcblx0XHRpZiAoZGF0YUZpZWxkLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhRmllbGQuYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0Y29uc3QgdmFsdWVQYXRoID0gYmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCk/LlZhbHVlPy4kUGF0aDtcblx0XHRcdGlmICh2YWx1ZVBhdGgpIHtcblx0XHRcdFx0aXNNdWx0aVZhbHVlRmllbGRDb25kaXRpb24gPSBpc011bHRpVmFsdWVGaWVsZChcblx0XHRcdFx0XHRlbmhhbmNlRGF0YU1vZGVsUGF0aChnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoYmluZGluZ0NvbnRleHQpLCB2YWx1ZVBhdGgpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzTXVsdGlWYWx1ZUZpZWxkQ29uZGl0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgZm9yIGFsbCBkYXRhIGZpZWxkcyBmb3IgYW5ub3RhdGlvbnMuXG5cdCAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIGZvciB0aGUgZGF0YSBmaWVsZHMuXG5cdCAqL1xuXHRnZXREYXRhRmllbGRzRm9yQW5ub3RhdGlvbnMoKTogc3RyaW5nIHtcblx0XHRsZXQgcmV0dXJuU3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLmRhdGFGaWVsZENvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChjb25zdCBkYXRhRmllbGQgb2YgdGhpcy5kYXRhRmllbGRDb2xsZWN0aW9uKSB7XG5cdFx0XHRcdHN3aXRjaCAoZGF0YUZpZWxkLnR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiQW5ub3RhdGlvblwiOlxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuY29ubmVjdGVkRmllbGRzICYmXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5jb25uZWN0ZWRGaWVsZHMhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRDb25uZWN0ZWRGaWVsZHNGb3JtRWxlbWVudChkYXRhRmllbGQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmlzTXVsdGlWYWx1ZURhdGFGaWVsZChkYXRhRmllbGQpKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldE11bHRpVmFsdWVGaWVsZEZvcm1FbGVtZW50KGRhdGFGaWVsZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHQoZGF0YUZpZWxkIGFzIEFubm90YXRpb25Gb3JtRWxlbWVudCkuZmllbGRHcm91cEVsZW1lbnRzICYmXG5cdFx0XHRcdFx0XHRcdChkYXRhRmllbGQgYXMgQW5ub3RhdGlvbkZvcm1FbGVtZW50KS5maWVsZEdyb3VwRWxlbWVudHMhLmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRGaWVsZEdyb3VwRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldEZpZWxkRm9ybUVsZW1lbnQoZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJEZWZhdWx0XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm5TdHJpbmcgKz0gdGhpcy5nZXRDdXN0b21Gb3JtRWxlbWVudChkYXRhRmllbGQgYXMgQ3VzdG9tRm9ybUVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVyblN0cmluZyArPSB0aGlzLmdldFNsb3RDb2x1bW4oZGF0YUZpZWxkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHhtbGAke3JldHVyblN0cmluZ31gO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQWpCQSxJQW1CcUJBLGtCQUFrQixJQUFBQyxJQUFBLEdBRHRDQyxtQkFBbUIsQ0FBQztJQUFFQyxJQUFJLEVBQUUsZUFBZTtJQUFFQyxTQUFTLEVBQUU7RUFBZ0IsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FFekVDLGNBQWMsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdsQ0YsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJFLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsV0FBVztFQUM3RSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdETixjQUFjLENBQUM7SUFDZkMsSUFBSSxFQUFFO0VBQ1AsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHRFAsY0FBYyxDQUFDO0lBQ2ZDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJHLFFBQVEsRUFBRSxJQUFJO0lBQ2RELFFBQVEsRUFBRTtFQUNYLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBTURSLGNBQWMsQ0FBQztJQUNmQyxJQUFJLEVBQUU7RUFDUCxDQUFD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
|