devextreme-angular
Version:
Angular UI and visualization components based on DevExtreme widgets
1,326 lines • 141 kB
JavaScript
/*!
* devextreme-angular
* Version: 25.1.3
* Build date: Wed Jun 25 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file in the root of the project for details.
*
* https://github.com/DevExpress/devextreme-angular
*/
/* tslint:disable:max-line-length */
import { TransferState, Component, NgModule, ElementRef, NgZone, PLATFORM_ID, Inject, Input, Output, EventEmitter, ContentChildren, QueryList } from '@angular/core';
import DxDiagram from 'devextreme/ui/diagram';
import { DxComponent, DxTemplateHost, DxIntegrationModule, DxTemplateModule, NestedOptionHost, IterableDifferHelper, WatcherHelper } from 'devextreme-angular/core';
import { DxoContextMenuModule } from 'devextreme-angular/ui/nested';
import { DxiCommandModule } from 'devextreme-angular/ui/nested';
import { DxiItemModule } from 'devextreme-angular/ui/nested';
import { DxoContextToolboxModule } from 'devextreme-angular/ui/nested';
import { DxiCustomShapeModule } from 'devextreme-angular/ui/nested';
import { DxiConnectionPointModule } from 'devextreme-angular/ui/nested';
import { DxoDefaultItemPropertiesModule } from 'devextreme-angular/ui/nested';
import { DxoEdgesModule } from 'devextreme-angular/ui/nested';
import { DxoEditingModule } from 'devextreme-angular/ui/nested';
import { DxoExportModule } from 'devextreme-angular/ui/nested';
import { DxoGridSizeModule } from 'devextreme-angular/ui/nested';
import { DxoHistoryToolbarModule } from 'devextreme-angular/ui/nested';
import { DxoMainToolbarModule } from 'devextreme-angular/ui/nested';
import { DxoNodesModule } from 'devextreme-angular/ui/nested';
import { DxoAutoLayoutModule } from 'devextreme-angular/ui/nested';
import { DxoPageSizeModule } from 'devextreme-angular/ui/nested';
import { DxoPropertiesPanelModule } from 'devextreme-angular/ui/nested';
import { DxiTabModule } from 'devextreme-angular/ui/nested';
import { DxiGroupModule } from 'devextreme-angular/ui/nested';
import { DxoToolboxModule } from 'devextreme-angular/ui/nested';
import { DxoViewToolbarModule } from 'devextreme-angular/ui/nested';
import { DxoZoomLevelModule } from 'devextreme-angular/ui/nested';
import { DxoDiagramAutoLayoutModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramCommandModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramCommandItemModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramConnectionPointModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramContextMenuModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramContextToolboxModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramCustomShapeModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramDefaultItemPropertiesModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramEdgesModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramEditingModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramExportModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramGridSizeModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramGroupModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramHistoryToolbarModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramItemModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramMainToolbarModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramNodesModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramPageSizeModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramPageSizeItemModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramPropertiesPanelModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramTabModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramTabGroupModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramToolboxModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiDiagramToolboxGroupModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramViewToolbarModule } from 'devextreme-angular/ui/diagram/nested';
import { DxoDiagramZoomLevelModule } from 'devextreme-angular/ui/diagram/nested';
import { DxiCustomShapeComponent } from 'devextreme-angular/ui/nested';
import { DxiDiagramCustomShapeComponent } from 'devextreme-angular/ui/diagram/nested';
import * as i0 from "@angular/core";
import * as i1 from "devextreme-angular/core";
/**
* The Diagram UI component provides a visual interface to help you design new and modify existing diagrams.
*/
export class DxDiagramComponent extends DxComponent {
_watcherHelper;
_idh;
instance = null;
/**
* Specifies how the Diagram UI component automatically zooms the work area.
*/
get autoZoomMode() {
return this._getOption('autoZoomMode');
}
set autoZoomMode(value) {
this._setOption('autoZoomMode', value);
}
/**
* Configures the context menu's settings.
*/
get contextMenu() {
return this._getOption('contextMenu');
}
set contextMenu(value) {
this._setOption('contextMenu', value);
}
/**
* Configures the context toolbox's settings.
*/
get contextToolbox() {
return this._getOption('contextToolbox');
}
set contextToolbox(value) {
this._setOption('contextToolbox', value);
}
/**
* Provide access to an array of custom shapes.
*/
get customShapes() {
return this._getOption('customShapes');
}
set customShapes(value) {
this._setOption('customShapes', value);
}
/**
* Specifies a custom template for shapes.
*/
get customShapeTemplate() {
return this._getOption('customShapeTemplate');
}
set customShapeTemplate(value) {
this._setOption('customShapeTemplate', value);
}
/**
* Specifies a custom template for shapes in the toolbox.
*/
get customShapeToolboxTemplate() {
return this._getOption('customShapeToolboxTemplate');
}
set customShapeToolboxTemplate(value) {
this._setOption('customShapeToolboxTemplate', value);
}
/**
* Configures default item properties.
*/
get defaultItemProperties() {
return this._getOption('defaultItemProperties');
}
set defaultItemProperties(value) {
this._setOption('defaultItemProperties', value);
}
/**
* Specifies whether the UI component responds to user interaction.
*/
get disabled() {
return this._getOption('disabled');
}
set disabled(value) {
this._setOption('disabled', value);
}
/**
* Allows you to bind the collection of diagram edges to a data source. For more information, see the Data Binding section.
*/
get edges() {
return this._getOption('edges');
}
set edges(value) {
this._setOption('edges', value);
}
/**
* Specifies which editing operations a user can perform.
*/
get editing() {
return this._getOption('editing');
}
set editing(value) {
this._setOption('editing', value);
}
/**
* Specifies the global attributes to be attached to the UI component's container element.
*/
get elementAttr() {
return this._getOption('elementAttr');
}
set elementAttr(value) {
this._setOption('elementAttr', value);
}
/**
* Configures export settings.
*/
get export() {
return this._getOption('export');
}
set export(value) {
this._setOption('export', value);
}
/**
* Specifies whether or not to display the UI component in full-screen mode.
*/
get fullScreen() {
return this._getOption('fullScreen');
}
set fullScreen(value) {
this._setOption('fullScreen', value);
}
/**
* Specifies the grid pitch.
*/
get gridSize() {
return this._getOption('gridSize');
}
set gridSize(value) {
this._setOption('gridSize', value);
}
/**
* Indicates whether diagram content has unsaved changes.
*/
get hasChanges() {
return this._getOption('hasChanges');
}
set hasChanges(value) {
this._setOption('hasChanges', value);
}
/**
* Specifies the UI component's height.
*/
get height() {
return this._getOption('height');
}
set height(value) {
this._setOption('height', value);
}
/**
* Configures the history toolbar's settings.
*/
get historyToolbar() {
return this._getOption('historyToolbar');
}
set historyToolbar(value) {
this._setOption('historyToolbar', value);
}
/**
* Configures the main toolbar settings.
*/
get mainToolbar() {
return this._getOption('mainToolbar');
}
set mainToolbar(value) {
this._setOption('mainToolbar', value);
}
/**
* Allows you to bind the collection of diagram nodes to a data source. For more information, see the Data Binding section.
*/
get nodes() {
return this._getOption('nodes');
}
set nodes(value) {
this._setOption('nodes', value);
}
/**
* Specifies the color of a diagram page.
*/
get pageColor() {
return this._getOption('pageColor');
}
set pageColor(value) {
this._setOption('pageColor', value);
}
/**
* Specifies the page orientation.
*/
get pageOrientation() {
return this._getOption('pageOrientation');
}
set pageOrientation(value) {
this._setOption('pageOrientation', value);
}
/**
* Specifies a size of pages.
*/
get pageSize() {
return this._getOption('pageSize');
}
set pageSize(value) {
this._setOption('pageSize', value);
}
/**
* Configures the Properties panel settings.
*/
get propertiesPanel() {
return this._getOption('propertiesPanel');
}
set propertiesPanel(value) {
this._setOption('propertiesPanel', value);
}
/**
* Specifies whether the diagram is read-only.
*/
get readOnly() {
return this._getOption('readOnly');
}
set readOnly(value) {
this._setOption('readOnly', value);
}
/**
* Switches the UI component to a right-to-left representation.
*/
get rtlEnabled() {
return this._getOption('rtlEnabled');
}
set rtlEnabled(value) {
this._setOption('rtlEnabled', value);
}
/**
* Specifies whether grid lines are visible.
*/
get showGrid() {
return this._getOption('showGrid');
}
set showGrid(value) {
this._setOption('showGrid', value);
}
/**
* Switch the Diagram UI component to simple view mode.
*/
get simpleView() {
return this._getOption('simpleView');
}
set simpleView(value) {
this._setOption('simpleView', value);
}
/**
* Specifies whether diagram elements should snap to grid lines.
*/
get snapToGrid() {
return this._getOption('snapToGrid');
}
set snapToGrid(value) {
this._setOption('snapToGrid', value);
}
/**
* Configures the toolbox settings.
*/
get toolbox() {
return this._getOption('toolbox');
}
set toolbox(value) {
this._setOption('toolbox', value);
}
/**
* Specifies the measurement unit for size properties.
*/
get units() {
return this._getOption('units');
}
set units(value) {
this._setOption('units', value);
}
/**
* Specifies whether or not the UI component uses native scrolling.
*/
get useNativeScrolling() {
return this._getOption('useNativeScrolling');
}
set useNativeScrolling(value) {
this._setOption('useNativeScrolling', value);
}
/**
* Configures the view toolbar settings.
*/
get viewToolbar() {
return this._getOption('viewToolbar');
}
set viewToolbar(value) {
this._setOption('viewToolbar', value);
}
/**
* Specifies the measurement unit that is displayed in user interface elements.
*/
get viewUnits() {
return this._getOption('viewUnits');
}
set viewUnits(value) {
this._setOption('viewUnits', value);
}
/**
* Specifies whether the UI component is visible.
*/
get visible() {
return this._getOption('visible');
}
set visible(value) {
this._setOption('visible', value);
}
/**
* Specifies the UI component's width.
*/
get width() {
return this._getOption('width');
}
set width(value) {
this._setOption('width', value);
}
/**
* Specifies the zoom level.
*/
get zoomLevel() {
return this._getOption('zoomLevel');
}
set zoomLevel(value) {
this._setOption('zoomLevel', value);
}
/**
* A function that is executed when the UI component is rendered and each time the component is repainted.
*/
onContentReady;
/**
* A function that is executed after a custom command item was clicked and allows you to implement the custom command's logic.
*/
onCustomCommand;
/**
* A function that is executed before the UI component is disposed of.
*/
onDisposing;
/**
* A function used in JavaScript frameworks to save the UI component instance.
*/
onInitialized;
/**
* A function that is executed after a shape or connector is clicked.
*/
onItemClick;
/**
* A function that is executed after a shape or connector is double-clicked.
*/
onItemDblClick;
/**
* A function that is executed after a UI component property is changed.
*/
onOptionChanged;
/**
* A function that allows you to prohibit an edit operation at run time.
*/
onRequestEditOperation;
/**
* A function that allows you to specify whether or not the UI component should reapply its auto layout after diagram data is reloaded.
*/
onRequestLayoutUpdate;
/**
* A function that is executed after the selection is changed in the Diagram.
*/
onSelectionChanged;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
autoZoomModeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
contextMenuChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
contextToolboxChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
customShapesChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
customShapeTemplateChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
customShapeToolboxTemplateChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
defaultItemPropertiesChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
disabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
edgesChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
editingChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
elementAttrChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
exportChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
fullScreenChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
gridSizeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
hasChangesChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
heightChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
historyToolbarChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
mainToolbarChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
nodesChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
pageColorChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
pageOrientationChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
pageSizeChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
propertiesPanelChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
readOnlyChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
rtlEnabledChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
showGridChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
simpleViewChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
snapToGridChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
toolboxChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
unitsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
useNativeScrollingChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
viewToolbarChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
viewUnitsChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
visibleChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
widthChange;
/**
* This member supports the internal infrastructure and is not intended to be used directly from your code.
*/
zoomLevelChange;
get customShapesChildren() {
return this._getOption('customShapes');
}
set customShapesChildren(value) {
this._setChildren('customShapes', value, 'DxiDiagramCustomShapeComponent');
}
get customShapesLegacyChildren() {
return this._getOption('customShapes');
}
set customShapesLegacyChildren(value) {
this._setChildren('customShapes', value, 'DxiCustomShapeComponent');
}
constructor(elementRef, ngZone, templateHost, _watcherHelper, _idh, optionHost, transferState, platformId) {
super(elementRef, ngZone, templateHost, _watcherHelper, transferState, platformId);
this._watcherHelper = _watcherHelper;
this._idh = _idh;
this._createEventEmitters([
{ subscribe: 'contentReady', emit: 'onContentReady' },
{ subscribe: 'customCommand', emit: 'onCustomCommand' },
{ subscribe: 'disposing', emit: 'onDisposing' },
{ subscribe: 'initialized', emit: 'onInitialized' },
{ subscribe: 'itemClick', emit: 'onItemClick' },
{ subscribe: 'itemDblClick', emit: 'onItemDblClick' },
{ subscribe: 'optionChanged', emit: 'onOptionChanged' },
{ subscribe: 'requestEditOperation', emit: 'onRequestEditOperation' },
{ subscribe: 'requestLayoutUpdate', emit: 'onRequestLayoutUpdate' },
{ subscribe: 'selectionChanged', emit: 'onSelectionChanged' },
{ emit: 'autoZoomModeChange' },
{ emit: 'contextMenuChange' },
{ emit: 'contextToolboxChange' },
{ emit: 'customShapesChange' },
{ emit: 'customShapeTemplateChange' },
{ emit: 'customShapeToolboxTemplateChange' },
{ emit: 'defaultItemPropertiesChange' },
{ emit: 'disabledChange' },
{ emit: 'edgesChange' },
{ emit: 'editingChange' },
{ emit: 'elementAttrChange' },
{ emit: 'exportChange' },
{ emit: 'fullScreenChange' },
{ emit: 'gridSizeChange' },
{ emit: 'hasChangesChange' },
{ emit: 'heightChange' },
{ emit: 'historyToolbarChange' },
{ emit: 'mainToolbarChange' },
{ emit: 'nodesChange' },
{ emit: 'pageColorChange' },
{ emit: 'pageOrientationChange' },
{ emit: 'pageSizeChange' },
{ emit: 'propertiesPanelChange' },
{ emit: 'readOnlyChange' },
{ emit: 'rtlEnabledChange' },
{ emit: 'showGridChange' },
{ emit: 'simpleViewChange' },
{ emit: 'snapToGridChange' },
{ emit: 'toolboxChange' },
{ emit: 'unitsChange' },
{ emit: 'useNativeScrollingChange' },
{ emit: 'viewToolbarChange' },
{ emit: 'viewUnitsChange' },
{ emit: 'visibleChange' },
{ emit: 'widthChange' },
{ emit: 'zoomLevelChange' }
]);
this._idh.setHost(this);
optionHost.setHost(this);
}
_createInstance(element, options) {
return new DxDiagram(element, options);
}
ngOnDestroy() {
this._destroyWidget();
}
ngOnChanges(changes) {
super.ngOnChanges(changes);
this.setupChanges('customShapes', changes);
}
setupChanges(prop, changes) {
if (!(prop in this._optionsToUpdate)) {
this._idh.setup(prop, changes);
}
}
ngDoCheck() {
this._idh.doCheck('customShapes');
this._watcherHelper.checkWatchers();
super.ngDoCheck();
super.clearChangedOptions();
}
_setOption(name, value) {
let isSetup = this._idh.setupSingle(name, value);
let isChanged = this._idh.getChanges(name, value) !== null;
if (isSetup || isChanged) {
super._setOption(name, value);
}
}
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxDiagramComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.DxTemplateHost }, { token: i1.WatcherHelper }, { token: i1.IterableDifferHelper }, { token: i1.NestedOptionHost }, { token: i0.TransferState }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component });
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DxDiagramComponent, isStandalone: true, selector: "dx-diagram", inputs: { autoZoomMode: "autoZoomMode", contextMenu: "contextMenu", contextToolbox: "contextToolbox", customShapes: "customShapes", customShapeTemplate: "customShapeTemplate", customShapeToolboxTemplate: "customShapeToolboxTemplate", defaultItemProperties: "defaultItemProperties", disabled: "disabled", edges: "edges", editing: "editing", elementAttr: "elementAttr", export: "export", fullScreen: "fullScreen", gridSize: "gridSize", hasChanges: "hasChanges", height: "height", historyToolbar: "historyToolbar", mainToolbar: "mainToolbar", nodes: "nodes", pageColor: "pageColor", pageOrientation: "pageOrientation", pageSize: "pageSize", propertiesPanel: "propertiesPanel", readOnly: "readOnly", rtlEnabled: "rtlEnabled", showGrid: "showGrid", simpleView: "simpleView", snapToGrid: "snapToGrid", toolbox: "toolbox", units: "units", useNativeScrolling: "useNativeScrolling", viewToolbar: "viewToolbar", viewUnits: "viewUnits", visible: "visible", width: "width", zoomLevel: "zoomLevel" }, outputs: { onContentReady: "onContentReady", onCustomCommand: "onCustomCommand", onDisposing: "onDisposing", onInitialized: "onInitialized", onItemClick: "onItemClick", onItemDblClick: "onItemDblClick", onOptionChanged: "onOptionChanged", onRequestEditOperation: "onRequestEditOperation", onRequestLayoutUpdate: "onRequestLayoutUpdate", onSelectionChanged: "onSelectionChanged", autoZoomModeChange: "autoZoomModeChange", contextMenuChange: "contextMenuChange", contextToolboxChange: "contextToolboxChange", customShapesChange: "customShapesChange", customShapeTemplateChange: "customShapeTemplateChange", customShapeToolboxTemplateChange: "customShapeToolboxTemplateChange", defaultItemPropertiesChange: "defaultItemPropertiesChange", disabledChange: "disabledChange", edgesChange: "edgesChange", editingChange: "editingChange", elementAttrChange: "elementAttrChange", exportChange: "exportChange", fullScreenChange: "fullScreenChange", gridSizeChange: "gridSizeChange", hasChangesChange: "hasChangesChange", heightChange: "heightChange", historyToolbarChange: "historyToolbarChange", mainToolbarChange: "mainToolbarChange", nodesChange: "nodesChange", pageColorChange: "pageColorChange", pageOrientationChange: "pageOrientationChange", pageSizeChange: "pageSizeChange", propertiesPanelChange: "propertiesPanelChange", readOnlyChange: "readOnlyChange", rtlEnabledChange: "rtlEnabledChange", showGridChange: "showGridChange", simpleViewChange: "simpleViewChange", snapToGridChange: "snapToGridChange", toolboxChange: "toolboxChange", unitsChange: "unitsChange", useNativeScrollingChange: "useNativeScrollingChange", viewToolbarChange: "viewToolbarChange", viewUnitsChange: "viewUnitsChange", visibleChange: "visibleChange", widthChange: "widthChange", zoomLevelChange: "zoomLevelChange" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [
DxTemplateHost,
WatcherHelper,
NestedOptionHost,
IterableDifferHelper
], queries: [{ propertyName: "customShapesChildren", predicate: DxiDiagramCustomShapeComponent }, { propertyName: "customShapesLegacyChildren", predicate: DxiCustomShapeComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: '', isInline: true, dependencies: [{ kind: "ngmodule", type: DxIntegrationModule }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxDiagramComponent, decorators: [{
type: Component,
args: [{
selector: 'dx-diagram',
standalone: true,
template: '',
host: { ngSkipHydration: 'true' },
imports: [DxIntegrationModule],
providers: [
DxTemplateHost,
WatcherHelper,
NestedOptionHost,
IterableDifferHelper
]
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.DxTemplateHost }, { type: i1.WatcherHelper }, { type: i1.IterableDifferHelper }, { type: i1.NestedOptionHost }, { type: i0.TransferState }, { type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }], propDecorators: { autoZoomMode: [{
type: Input
}], contextMenu: [{
type: Input
}], contextToolbox: [{
type: Input
}], customShapes: [{
type: Input
}], customShapeTemplate: [{
type: Input
}], customShapeToolboxTemplate: [{
type: Input
}], defaultItemProperties: [{
type: Input
}], disabled: [{
type: Input
}], edges: [{
type: Input
}], editing: [{
type: Input
}], elementAttr: [{
type: Input
}], export: [{
type: Input
}], fullScreen: [{
type: Input
}], gridSize: [{
type: Input
}], hasChanges: [{
type: Input
}], height: [{
type: Input
}], historyToolbar: [{
type: Input
}], mainToolbar: [{
type: Input
}], nodes: [{
type: Input
}], pageColor: [{
type: Input
}], pageOrientation: [{
type: Input
}], pageSize: [{
type: Input
}], propertiesPanel: [{
type: Input
}], readOnly: [{
type: Input
}], rtlEnabled: [{
type: Input
}], showGrid: [{
type: Input
}], simpleView: [{
type: Input
}], snapToGrid: [{
type: Input
}], toolbox: [{
type: Input
}], units: [{
type: Input
}], useNativeScrolling: [{
type: Input
}], viewToolbar: [{
type: Input
}], viewUnits: [{
type: Input
}], visible: [{
type: Input
}], width: [{
type: Input
}], zoomLevel: [{
type: Input
}], onContentReady: [{
type: Output
}], onCustomCommand: [{
type: Output
}], onDisposing: [{
type: Output
}], onInitialized: [{
type: Output
}], onItemClick: [{
type: Output
}], onItemDblClick: [{
type: Output
}], onOptionChanged: [{
type: Output
}], onRequestEditOperation: [{
type: Output
}], onRequestLayoutUpdate: [{
type: Output
}], onSelectionChanged: [{
type: Output
}], autoZoomModeChange: [{
type: Output
}], contextMenuChange: [{
type: Output
}], contextToolboxChange: [{
type: Output
}], customShapesChange: [{
type: Output
}], customShapeTemplateChange: [{
type: Output
}], customShapeToolboxTemplateChange: [{
type: Output
}], defaultItemPropertiesChange: [{
type: Output
}], disabledChange: [{
type: Output
}], edgesChange: [{
type: Output
}], editingChange: [{
type: Output
}], elementAttrChange: [{
type: Output
}], exportChange: [{
type: Output
}], fullScreenChange: [{
type: Output
}], gridSizeChange: [{
type: Output
}], hasChangesChange: [{
type: Output
}], heightChange: [{
type: Output
}], historyToolbarChange: [{
type: Output
}], mainToolbarChange: [{
type: Output
}], nodesChange: [{
type: Output
}], pageColorChange: [{
type: Output
}], pageOrientationChange: [{
type: Output
}], pageSizeChange: [{
type: Output
}], propertiesPanelChange: [{
type: Output
}], readOnlyChange: [{
type: Output
}], rtlEnabledChange: [{
type: Output
}], showGridChange: [{
type: Output
}], simpleViewChange: [{
type: Output
}], snapToGridChange: [{
type: Output
}], toolboxChange: [{
type: Output
}], unitsChange: [{
type: Output
}], useNativeScrollingChange: [{
type: Output
}], viewToolbarChange: [{
type: Output
}], viewUnitsChange: [{
type: Output
}], visibleChange: [{
type: Output
}], widthChange: [{
type: Output
}], zoomLevelChange: [{
type: Output
}], customShapesChildren: [{
type: ContentChildren,
args: [DxiDiagramCustomShapeComponent]
}], customShapesLegacyChildren: [{
type: ContentChildren,
args: [DxiCustomShapeComponent]
}] } });
export class DxDiagramModule {
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxDiagramModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
/** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: DxDiagramModule, imports: [DxDiagramComponent, DxoContextMenuModule,
DxiCommandModule,
DxiItemModule,
DxoContextToolboxModule,
DxiCustomShapeModule,
DxiConnectionPointModule,
DxoDefaultItemPropertiesModule,
DxoEdgesModule,
DxoEditingModule,
DxoExportModule,
DxoGridSizeModule,
DxoHistoryToolbarModule,
DxoMainToolbarModule,
DxoNodesModule,
DxoAutoLayoutModule,
DxoPageSizeModule,
DxoPropertiesPanelModule,
DxiTabModule,
DxiGroupModule,
DxoToolboxModule,
DxoViewToolbarModule,
DxoZoomLevelModule,
DxoDiagramAutoLayoutModule,
DxiDiagramCommandModule,
DxiDiagramCommandItemModule,
DxiDiagramConnectionPointModule,
DxoDiagramContextMenuModule,
DxoDiagramContextToolboxModule,
DxiDiagramCustomShapeModule,
DxoDiagramDefaultItemPropertiesModule,
DxoDiagramEdgesModule,
DxoDiagramEditingModule,
DxoDiagramExportModule,
DxoDiagramGridSizeModule,
DxiDiagramGroupModule,
DxoDiagramHistoryToolbarModule,
DxiDiagramItemModule,
DxoDiagramMainToolbarModule,
DxoDiagramNodesModule,
DxoDiagramPageSizeModule,
DxiDiagramPageSizeItemModule,
DxoDiagramPropertiesPanelModule,
DxiDiagramTabModule,
DxiDiagramTabGroupModule,
DxoDiagramToolboxModule,
DxiDiagramToolboxGroupModule,
DxoDiagramViewToolbarModule,
DxoDiagramZoomLevelModule,
DxIntegrationModule,
DxTemplateModule], exports: [DxDiagramComponent, DxoContextMenuModule,
DxiCommandModule,
DxiItemModule,
DxoContextToolboxModule,
DxiCustomShapeModule,
DxiConnectionPointModule,
DxoDefaultItemPropertiesModule,
DxoEdgesModule,
DxoEditingModule,
DxoExportModule,
DxoGridSizeModule,
DxoHistoryToolbarModule,
DxoMainToolbarModule,
DxoNodesModule,
DxoAutoLayoutModule,
DxoPageSizeModule,
DxoPropertiesPanelModule,
DxiTabModule,
DxiGroupModule,
DxoToolboxModule,
DxoViewToolbarModule,
DxoZoomLevelModule,
DxoDiagramAutoLayoutModule,
DxiDiagramCommandModule,
DxiDiagramCommandItemModule,
DxiDiagramConnectionPointModule,
DxoDiagramContextMenuModule,
DxoDiagramContextToolboxModule,
DxiDiagramCustomShapeModule,
DxoDiagramDefaultItemPropertiesModule,
DxoDiagramEdgesModule,
DxoDiagramEditingModule,
DxoDiagramExportModule,
DxoDiagramGridSizeModule,
DxiDiagramGroupModule,
DxoDiagramHistoryToolbarModule,
DxiDiagramItemModule,
DxoDiagramMainToolbarModule,
DxoDiagramNodesModule,
DxoDiagramPageSizeModule,
DxiDiagramPageSizeItemModule,
DxoDiagramPropertiesPanelModule,
DxiDiagramTabModule,
DxiDiagramTabGroupModule,
DxoDiagramToolboxModule,
DxiDiagramToolboxGroupModule,
DxoDiagramViewToolbarModule,
DxoDiagramZoomLevelModule,
DxTemplateModule] });
/** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxDiagramModule, imports: [DxDiagramComponent,
DxoContextMenuModule,
DxiCommandModule,
DxiItemModule,
DxoContextToolboxModule,
DxiCustomShapeModule,
DxiConnectionPointModule,
DxoDefaultItemPropertiesModule,
DxoEdgesModule,
DxoEditingModule,
DxoExportModule,
DxoGridSizeModule,
DxoHistoryToolbarModule,
DxoMainToolbarModule,
DxoNodesModule,
DxoAutoLayoutModule,
DxoPageSizeModule,
DxoPropertiesPanelModule,
DxiTabModule,
DxiGroupModule,
DxoToolboxModule,
DxoViewToolbarModule,
DxoZoomLevelModule,
DxoDiagramAutoLayoutModule,
DxiDiagramCommandModule,
DxiDiagramCommandItemModule,
DxiDiagramConnectionPointModule,
DxoDiagramContextMenuModule,
DxoDiagramContextToolboxModule,
DxiDiagramCustomShapeModule,
DxoDiagramDefaultItemPropertiesModule,
DxoDiagramEdgesModule,
DxoDiagramEditingModule,
DxoDiagramExportModule,
DxoDiagramGridSizeModule,
DxiDiagramGroupModule,
DxoDiagramHistoryToolbarModule,
DxiDiagramItemModule,
DxoDiagramMainToolbarModule,
DxoDiagramNodesModule,
DxoDiagramPageSizeModule,
DxiDiagramPageSizeItemModule,
DxoDiagramPropertiesPanelModule,
DxiDiagramTabModule,
DxiDiagramTabGroupModule,
DxoDiagramToolboxModule,
DxiDiagramToolboxGroupModule,
DxoDiagramViewToolbarModule,
DxoDiagramZoomLevelModule,
DxIntegrationModule,
DxTemplateModule, DxoContextMenuModule,
DxiCommandModule,
DxiItemModule,
DxoContextToolboxModule,
DxiCustomShapeModule,
DxiConnectionPointModule,
DxoDefaultItemPropertiesModule,
DxoEdgesModule,
DxoEditingModule,
DxoExportModule,
DxoGridSizeModule,
DxoHistoryToolbarModule,
DxoMainToolbarModule,
DxoNodesModule,
DxoAutoLayoutModule,
DxoPageSizeModule,
DxoPropertiesPanelModule,
DxiTabModule,
DxiGroupModule,
DxoToolboxModule,
DxoViewToolbarModule,
DxoZoomLevelModule,
DxoDiagramAutoLayoutModule,
DxiDiagramCommandModule,
DxiDiagramCommandItemModule,
DxiDiagramConnectionPointModule,
DxoDiagramContextMenuModule,
DxoDiagramContextToolboxModule,
DxiDiagramCustomShapeModule,
DxoDiagramDefaultItemPropertiesModule,
DxoDiagramEdgesModule,
DxoDiagramEditingModule,
DxoDiagramExportModule,
DxoDiagramGridSizeModule,
DxiDiagramGroupModule,
DxoDiagramHistoryToolbarModule,
DxiDiagramItemModule,
DxoDiagramMainToolbarModule,
DxoDiagramNodesModule,
DxoDiagramPageSizeModule,
DxiDiagramPageSizeItemModule,
DxoDiagramPropertiesPanelModule,
DxiDiagramTabModule,
DxiDiagramTabGroupModule,
DxoDiagramToolboxModule,
DxiDiagramToolboxGroupModule,
DxoDiagramViewToolbarModule,
DxoDiagramZoomLevelModule,
DxTemplateModule] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DxDiagramModule, decorators: [{
type: NgModule,
args: [{
imports: [
DxDiagramComponent,
DxoContextMenuModule,
DxiCommandModule,
DxiItemModule,
DxoContextToolboxModule,
DxiCustomShapeModule,
DxiConnectionPointModule,
DxoDefaultItemPropertiesModule,
DxoEdgesModule,
DxoEditingModule,
DxoExportModule,
DxoGridSizeModule,
DxoHistoryToolbarModule,
DxoMainToolbarModule,
DxoNodesModule,
DxoAutoLayoutModule,
DxoPageSizeModule,
DxoPropertiesPanelModule,
DxiTabModule,
DxiGroupModule,
DxoToolboxModule,
DxoViewToolbarModule,
DxoZoomLevelModule,
DxoDiagramAutoLayoutModule,
DxiDiagramCommandModule,
DxiDiagramCommandItemModule,
DxiDiagramConnectionPointModule,
DxoDiagramContextMenuModule,
DxoDiagramContextToolboxModule,
DxiDiagramCustomShapeModule,
DxoDiagramDefaultItemPropertiesModule,
DxoDiagramEdgesModule,
DxoDiagramEditingModule,
DxoDiagramExportModule,
DxoDiagramGridSizeModule,
DxiDiagramGroupModule,
DxoDiagramHistoryToolbarModule,
DxiDiagramItemModule,
DxoDiagramMainToolbarModule,
DxoDiagramNodesModule,
DxoDiagramPageSizeModule,
DxiDiagramPageSizeItemModule,
DxoDiagramPropertiesPanelModule,
DxiDiagramTabModule,
DxiDiagramTabGroupModule,
DxoDiagramToolboxModule,
DxiDiagramToolboxGroupModule,
DxoDiagramViewToolbarModule,
DxoDiagramZoomLevelModule,
DxIntegrationModule,
DxTemplateModule
],
exports: [
DxDiagramComponent,
DxoContextMenuModule,
DxiCommandModule,
DxiItemModule,
DxoContextToolboxModule,
DxiCustomShapeModule,
DxiConnectionPointModule,
DxoDefaultItemPropertiesModule,
DxoEdgesModule,
DxoEditingModule,
DxoExportModule,
DxoGridSizeModule,
DxoHistoryToolbarModule,
DxoMainToolbarModule,
DxoNodesModule,
DxoAutoLayoutModule,
DxoPageSizeModule,
DxoPropertiesPanelModule,
DxiTabModule,
DxiGroupModule,
DxoToolboxModule,
DxoViewToolbarModule,
DxoZoomLevelModule,
DxoDiagramAutoLayoutModule,
DxiDiagramCommandModule,
DxiDiagramCommandItemModule,
DxiDiagramConnectionPointModule,
DxoDiagramContextMenuModule,
DxoDiagramContextToolboxModule,
DxiDiagramCustomShapeModule,
DxoDiagramDefaultItemPropertiesModule,
DxoDiagramEdgesModule,
DxoDiagramEditingModule,
DxoDiagramExportModule,
DxoDiagramGridSizeModule,
DxiDiagramGroupModule,
DxoDiagramHistoryToolbarModule,
DxiDiagramItemModule,
DxoDiagramMainToolbarModule,
DxoDiagramNodesModule,
DxoDiagramPageSizeModule,
DxiDiagramPageSizeItemModule,
DxoDiagramPropertiesPanelModule,
DxiDiagramTabModule,
DxiDiagramTabGroupModule,
DxoDiagramToolboxModule,
DxiDiagramToolboxGroupModule,
DxoDiagramViewToolbarModule,
DxoDiagramZoomLevelModule,
DxTemplateModule
]
}]
}] });
export * from 'devextreme-angular/ui/diagram/nested';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kaXN0L3VpL2RpYWdyYW0vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxvQ0FBb0M7QUFHcEMsT0FBTyxFQUNILGFBQWEsRUFDYixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLE1BQU0sRUFFTixLQUFLLEVBQ0wsTUFBTSxFQUVOLFlBQVksRUFJWixlQUFlLEVBQ2YsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBU3ZCLE9BQU8sU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBRzlDLE9BQU8sRUFDSCxXQUFXLEVBQ1gsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixhQUFhLEVBQ2hCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7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Qjt3QkFDeEIsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixrQkFBa0I7d0JBQ2xCLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3dCQUN2QiwyQkFBMkI7d0JBQzNCLCtCQUErQjt3QkFDL0IsMkJBQTJCO3dCQUMzQiw4QkFBOEI7d0JBQzlCLDJCQUEyQjt3QkFDM0IscUNBQXFDO3dCQUNyQyxxQkFBcUI7d0JBQ3JCLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLHFCQUFxQjt3QkFDckIsOEJBQThCO3dCQUM5QixvQkFBb0I7d0JBQ3BCLDJCQUEyQjt3QkFDM0IscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLDRCQUE0Qjt3QkFDNUIsK0JBQStCO3dCQUMvQixtQkFBbUI7d0JBQ25CLHdCQUF3Qjt3QkFDeEIsdUJBQXVCO3dCQUN2Qiw0QkFBNEI7d0JBQzVCLDJCQUEyQjt3QkFDM0IseUJBQXlCO3dCQUN6QixnQkFBZ0I7cUJBQ2pCO2lCQUNGOztBQUdELGNBQWMsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGRldmV4dHJlbWUtYW5ndWxhclxuICogVmVyc2lvbjogMjUuMS4zXG4gKiBCdWlsZCBkYXRlOiBXZWQgSnVuIDI1IDIwMjVcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDI1IERldmVsb3BlciBFeHByZXNzIEluYy4gQUxMIFJJR0hUUyBSRVNFUlZFRFxuICpcbiAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIG1vZGlmaWVkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXNcbiAqIG9mIHRoZSBNSVQgbGljZW5zZS4gU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QgZm9yIGRldGFpbHMuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL0RldkV4cHJlc3MvZGV2ZXh0cmVtZS1hbmd1bGFyXG4gKi9cblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXHJcblxyXG5cclxuaW1wb3J0IHtcclxuICAgIFRyYW5zZmVyU3RhdGUsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBOZ01vZHVsZSxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBQTEFURk9STV9JRCxcclxuICAgIEluamVjdCxcclxuXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIERvQ2hlY2ssXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgQ29udGVudENoaWxkcmVuLFxyXG4gICAgUXVlcnlMaXN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5cclxuaW1wb3J0IERhdGFTb3VyY2UgZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL2RhdGFfc291cmNlJztcclxuaW1wb3J0IHsgQXV0b1pvb21Nb2RlLCBDb21tYW5kLCBDdXN0b21Db21tYW5kLCBTaGFwZUNhdGVnb3J5LCBUb29sYm94RGlzcGxheU1vZGUsIFNoYXBlVHlwZSwgQ29ubmVjdG9yTGluZUVuZCwgQ29ubmVjdG9yTGluZVR5cGUsIERhdGFMYXlvdXRUeXBlLCBDb250ZW50UmVhZHlFdmVudCwgQ3VzdG9tQ29tbWFuZEV2ZW50LCBEaXNwb3NpbmdFdmVudCwgSW5pdGlhbGl6ZWRFdmVudCwgSXRlbUNsaWNrRXZlbnQsIEl0ZW1EYmxDbGlja0V2ZW50LCBPcHRpb25DaGFuZ2VkRXZlbnQsIFJlcXVlc3RFZGl0T3BlcmF0aW9uRXZlbnQsIFJlcXVlc3RMYXlvdXRVcGRhdGVFdmVudCwgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50LCBQYW5lbFZpc2liaWxpdHksIFVuaXRzIH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9kaWFncmFtJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICdkZXZleHRyZW1lL2RhdGEvZGF0YV9zb3VyY2UnO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ2RldmV4dHJlbWUvZGF0YS9zdG9yZSc7XHJcbmltcG9ydCB7IE9yaWVudGF0aW9uLCBQYWdlT3JpZW50YXRpb24gfSBmcm9tICdkZXZleHRyZW1lL2NvbW1vbic7XHJcblxyXG5pbXBvcnQgRHhEaWFncmFtIGZyb20gJ2RldmV4dHJlbWUvdWkvZGlhZ3JhbSc7XHJcblxyXG5cclxuaW1wb3J0IHtcclxuICAgIER4Q29tcG9uZW50LFxyXG4gICAgRHhUZW1wbGF0ZUhvc3QsXHJcbiAgICBEeEludGVncmF0aW9uTW9kdWxlLFxyXG4gICAgRHhUZW1wbGF0ZU1vZHVsZSxcclxuICAgIE5lc3RlZE9wdGlvbkhvc3QsXHJcbiAgICBJdGVyYWJsZURpZmZlckhlbHBlcixcclxuICAgIFdhdGNoZXJIZWxwZXJcclxufSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBEeG9Db250ZXh0TWVudU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlDb21tYW5kTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4aUl0ZW1Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvQ29udGV4dFRvb2xib3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpQ3VzdG9tU2hhcGVNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpQ29ubmVjdGlvblBvaW50TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0RlZmF1bHRJdGVtUHJvcGVydGllc01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9FZGdlc01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9FZGl0aW5nTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0V4cG9ydE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9HcmlkU2l6ZU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9IaXN0b3J5VG9vbGJhck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9NYWluVG9vbGJhck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9Ob2Rlc01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9BdXRvTGF5b3V0TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1BhZ2VTaXplTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b1Byb3BlcnRpZXNQYW5lbE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlUYWJNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpR3JvdXBNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvVG9vbGJveE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9WaWV3VG9vbGJhck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeG9ab29tTGV2ZWxNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvbmVzdGVkJztcclxuXHJcbmltcG9ydCB7IER4b0RpYWdyYW1BdXRvTGF5b3V0TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRGlhZ3JhbUNvbW1hbmRNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZGlhZ3JhbS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlEaWFncmFtQ29tbWFuZEl0ZW1Nb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZGlhZ3JhbS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlEaWFncmFtQ29ubmVjdGlvblBvaW50TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbUNvbnRleHRNZW51TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbUNvbnRleHRUb29sYm94TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRGlhZ3JhbUN1c3RvbVNoYXBlTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbURlZmF1bHRJdGVtUHJvcGVydGllc01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9kaWFncmFtL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0RpYWdyYW1FZGdlc01vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9kaWFncmFtL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0RpYWdyYW1FZGl0aW5nTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbUV4cG9ydE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9kaWFncmFtL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0RpYWdyYW1HcmlkU2l6ZU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9kaWFncmFtL25lc3RlZCc7XHJcbmltcG9ydCB7IER4aURpYWdyYW1Hcm91cE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9kaWFncmFtL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0RpYWdyYW1IaXN0b3J5VG9vbGJhck1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9kaWFncmFtL25lc3RlZCc7XHJcbmltcG9ydCB7IER4aURpYWdyYW1JdGVtTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbU1haW5Ub29sYmFyTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbU5vZGVzTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbVBhZ2VTaXplTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRGlhZ3JhbVBhZ2VTaXplSXRlbU1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9kaWFncmFtL25lc3RlZCc7XHJcbmltcG9ydCB7IER4b0RpYWdyYW1Qcm9wZXJ0aWVzUGFuZWxNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZGlhZ3JhbS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlEaWFncmFtVGFiTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhpRGlhZ3JhbVRhYkdyb3VwTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbVRvb2xib3hNb2R1bGUgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXIvdWkvZGlhZ3JhbS9uZXN0ZWQnO1xyXG5pbXBvcnQgeyBEeGlEaWFncmFtVG9vbGJveEdyb3VwTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbVZpZXdUb29sYmFyTW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuaW1wb3J0IHsgRHhvRGlhZ3JhbVpvb21MZXZlbE1vZHVsZSB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9kaWFncmFtL25lc3RlZCc7XHJcblxyXG5pbXBvcnQgeyBEeGlDdXN0b21TaGFwZUNvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhci91aS9uZXN0ZWQnO1xyXG5cclxuaW1wb3J0IHsgRHhpRGlhZ3JhbUN1c3RvbVNoYXBlQ29tcG9uZW50IH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuXHJcblxyXG4vKipcclxuICogW2Rlc2NyOmR4RGlhZ3JhbV1cclxuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnZHgtZGlhZ3JhbScsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgdGVtcGxhdGU6ICcnLFxyXG4gICAgaG9zdDogeyBuZ1NraXBIeWRyYXRpb246ICd0cnVlJyB9LFxyXG4gICAgaW1wb3J0czogWyBEeEludGVncmF0aW9uTW9kdWxlIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBEeFRlbXBsYXRlSG9zdCxcclxuICAgICAgICBXYXRjaGVySGVscGVyLFxyXG4gICAgICAgIE5lc3RlZE9wdGlvbkhvc3QsXHJcbiAgICAgICAgSXRlcmFibGVEaWZmZXJIZWxwZXJcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIER4RGlhZ3JhbUNvbXBvbmVudCBleHRlbmRzIER4Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMsIERvQ2hlY2sge1xyXG4gICAgaW5zdGFuY2U6IER4RGlhZ3JhbSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5hdXRvWm9vbU1vZGVdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBhdXRvWm9vbU1vZGUoKTogQXV0b1pvb21Nb2RlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdhdXRvWm9vbU1vZGUnKTtcclxuICAgIH1cclxuICAgIHNldCBhdXRvWm9vbU1vZGUodmFsdWU6IEF1dG9ab29tTW9kZSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignYXV0b1pvb21Nb2RlJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLmNvbnRleHRNZW51XVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY29udGV4dE1lbnUoKTogeyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgZW5hYmxlZD86IGJvb2xlYW4gfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignY29udGV4dE1lbnUnKTtcclxuICAgIH1cclxuICAgIHNldCBjb250ZXh0TWVudSh2YWx1ZTogeyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgZW5hYmxlZD86IGJvb2xlYW4gfSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignY29udGV4dE1lbnUnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMuY29udGV4dFRvb2xib3hdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjb250ZXh0VG9vbGJveCgpOiB7IGNhdGVnb3J5PzogU2hhcGVDYXRlZ29yeSB8IHN0cmluZywgZGlzcGxheU1vZGU/OiBUb29sYm94RGlzcGxheU1vZGUsIGVuYWJsZWQ/OiBib29sZWFuLCBzaGFwZUljb25zUGVyUm93PzogbnVtYmVyLCBzaGFwZXM/OiBBcnJheTxTaGFwZVR5cGU+LCB3aWR0aD86IG51bWJlciB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdjb250ZXh0VG9vbGJveCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IGNvbnRleHRUb29sYm94KHZhbHVlOiB7IGNhdGVnb3J5PzogU2hhcGVDYXRlZ29yeSB8IHN0cmluZywgZGlzcGxheU1vZGU/OiBUb29sYm94RGlzcGxheU1vZGUsIGVuYWJsZWQ/OiBib29sZWFuLCBzaGFwZUljb25zUGVyUm93PzogbnVtYmVyLCBzaGFwZXM/OiBBcnJheTxTaGFwZVR5cGU+LCB3aWR0aD86IG51bWJlciB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdjb250ZXh0VG9vbGJveCcsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5jdXN0b21TaGFwZXNdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBjdXN0b21TaGFwZXMoKTogeyBhbGxvd0VkaXRJbWFnZT86IGJvb2xlYW4sIGFsbG93RWRpdFRleHQ/OiBib29sZWFuLCBhbGxvd1Jlc2l6ZT86IGJvb2xlYW4sIGJhY2tncm91bmRJbWFnZUhlaWdodD86IG51bWJlciwgYmFja2dyb3VuZEltYWdlTGVmdD86IG51bWJlciwgYmFja2dyb3VuZEltYWdlVG9vbGJveFVybD86IHN0cmluZywgYmFja2dyb3VuZEltYWdlVG9wPzogbnVtYmVyLCBiYWNrZ3JvdW5kSW1hZ2VVcmw/OiBzdHJpbmcsIGJhY2tncm91bmRJbWFnZVdpZHRoPzogbnVtYmVyLCBiYXNlVHlwZT86IFNoYXBlVHlwZSB8IHN0cmluZywgY2F0ZWdvcnk/OiBzdHJpbmcsIGNvbm5lY3Rpb25Qb2ludHM/OiB7IHg/OiBudW1iZXIsIHk/OiBudW1iZXIgfVtdLCBkZWZhdWx0SGVpZ2h0PzogbnVtYmVyLCBkZWZhdWx0SW1hZ2VVcmw/OiBzdHJpbmcsIGRlZmF1bHRUZXh0Pzogc3RyaW5nLCBkZWZhdWx0V2lkdGg/OiBudW1iZXIsIGltYWdlSGVpZ2h0PzogbnVtYmVyLCBpbWFnZUxlZnQ/OiBudW1iZXIsIGltYWdlVG9wPzogbnVtYmVyLCBpbWFnZVdpZHRoPzogbnVtYmVyLCBrZWVwUmF0aW9PbkF1dG9TaXplPzogYm9vbGVhbiwgbWF4SGVpZ2h0PzogbnVtYmVyLCBtYXhXaWR0aD86IG51bWJlciwgbWluSGVpZ2h0PzogbnVtYmVyLCBtaW5XaWR0aD86IG51bWJlciwgdGVtcGxhdGU/OiBhbnksIHRlbXBsYXRlSGVpZ2h0PzogYW55LCB0ZW1wbGF0ZUxlZnQ/OiBhbnksIHRlbXBsYXRlVG9wPzogYW55LCB0ZW1wbGF0ZVdpZHRoPzogYW55LCB0ZXh0SGVpZ2h0PzogbnVtYmVyLCB0ZXh0TGVmdD86IG51bWJlciwgdGV4dFRvcD86IG51bWJlciwgdGV4dFdpZHRoPzogbnVtYmVyLCB0aXRsZT86IHN0cmluZywgdG9vbGJveFRlbXBsYXRlPzogYW55LCB0b29sYm94V2lkdGhUb0hlaWdodFJhdGlvPzogbnVtYmVyLCB0eXBlPzogc3RyaW5nIH1bXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignY3VzdG9tU2hhcGVzJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgY3VzdG9tU2hhcGVzKHZhbHVlOiB7IGFsbG93RWRpdEltYWdlPzogYm9vbGVhbiwgYWxsb3dFZGl0VGV4dD86IGJvb2xlYW4sIGFsbG93UmVzaXplPzogYm9vbGVhbiwgYmFja2dyb3VuZEltYWdlSGVpZ2h0PzogbnVtYmVyLCBiYWNrZ3JvdW5kSW1hZ2VMZWZ0PzogbnVtYmVyLCBiYWNrZ3JvdW5kSW1hZ2VUb29sYm94VXJsPzogc3RyaW5nLCBiYWNrZ3JvdW5kSW1hZ2VUb3A/OiBudW1iZXIsIGJhY2tncm91bmRJbWFnZVVybD86IHN0cmluZywgYmFja2dyb3VuZEltYWdlV2lkdGg/OiBudW1iZXIsIGJhc2VUeXBlPzogU2hhcGVUeXBlIHwgc3RyaW5nLCBjYXRlZ29yeT86IHN0cmluZywgY29ubmVjdGlvblBvaW50cz86IHsgeD86IG51bWJlciwgeT86IG51bWJlciB9W10sIGRlZmF1bHRIZWlnaHQ/OiBudW1iZXIsIGRlZmF1bHRJbWFnZVVybD86IHN0cmluZywgZGVmYXVsdFRleHQ/OiBzdHJpbmcsIGRlZmF1bHRXaWR0aD86IG51bWJlciwgaW1hZ2VIZWlnaHQ/OiBudW1iZXIsIGltYWdlTGVmdD86IG51bWJlciwgaW1hZ2VUb3A/OiBudW1iZXIsIGltYWdlV2lkdGg/OiBudW1iZXIsIGtlZXBSYXRpb09uQXV0b1NpemU/OiBib29sZWFuLCBtYXhIZWlnaHQ/OiBudW1iZXIsIG1heFdpZHRoPzogbnVtYmVyLCBtaW5IZWlnaHQ/OiBudW1iZXIsIG1pbldpZHRoPzogbnVtYmVyLCB0ZW1wbGF0ZT86IGFueSwgdGVtcGxhdGVIZWlnaHQ/OiBhbnksIHRlbXBsYXRlTGVmdD86IGFueSwgdGVtcGxhdGVUb3A/OiBhbnksIHRlbXBsYXRlV2lkdGg/OiBhbnksIHRleHRIZWlnaHQ/OiBudW1iZXIsIHRleHRMZWZ0PzogbnVtYmVyLCB0ZXh0VG9wPzogbnVtYmVyLCB0ZXh0V2lkdGg/OiBudW1iZXIsIHRpdGxlPzogc3RyaW5nLCB0b29sYm94VGVtcGxhdGU/OiBhbnksIHRvb2xib3hXaWR0aFRvSGVpZ2h0UmF0aW8/OiBudW1iZXIsIHR5cGU/OiBzdHJpbmcgfVtdKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdjdXN0b21TaGFwZXMnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMuY3VzdG9tU2hhcGVUZW1wbGF0ZV1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGN1c3RvbVNoYXBlVGVtcGxhdGUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdjdXN0b21TaGFwZVRlbXBsYXRlJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgY3VzdG9tU2hhcGVUZW1wbGF0ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdjdXN0b21TaGFwZVRlbXBsYXRlJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLmN1c3RvbVNoYXBlVG9vbGJveFRlbXBsYXRlXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgY3VzdG9tU2hhcGVUb29sYm94VGVtcGxhdGUoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdjdXN0b21TaGFwZVRvb2xib3hUZW1wbGF0ZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IGN1c3RvbVNoYXBlVG9vbGJveFRlbXBsYXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2N1c3RvbVNoYXBlVG9vbGJveFRlbXBsYXRlJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLmRlZmF1bHRJdGVtUHJvcGVydGllc11cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGRlZmF1bHRJdGVtUHJvcGVydGllcygpOiB7IGNvbm5lY3RvckxpbmVFbmQ/OiBDb25uZWN0b3JMaW5lRW5kLCBjb25uZWN0b3JMaW5lU3RhcnQ/OiBDb25uZWN0b3JMaW5lRW5kLCBjb25uZWN0b3JMaW5lVHlwZT86IENvbm5lY3RvckxpbmVUeXBlLCBzaGFwZU1heEhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZCwgc2hhcGVNYXhXaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZCwgc2hhcGVNaW5IZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQsIHNoYXBlTWluV2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWQsIHN0eWxlPzogUmVjb3JkPHN0cmluZywgYW55PiwgdGV4dFN0eWxlPzogUmVjb3JkPHN0cmluZywgYW55PiB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdkZWZhdWx0SXRlbVByb3BlcnRpZXMnKTtcclxuICAgIH1cclxuICAgIHNldCBkZWZhdWx0SXRlbVByb3BlcnRpZXModmFsdWU6IHsgY29ubmVjdG9yTGluZUVuZD86IENvbm5lY3RvckxpbmVFbmQsIGNvbm5lY3RvckxpbmVTdGFydD86IENvbm5lY3RvckxpbmVFbmQsIGNvbm5lY3RvckxpbmVUeXBlPzogQ29ubmVjdG9yTGluZVR5cGUsIHNoYXBlTWF4SGVpZ2h0PzogbnVtYmVyIHwgdW5kZWZpbmVkLCBzaGFwZU1heFdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkLCBzaGFwZU1pbkhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZCwgc2hhcGVNaW5XaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZCwgc3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCB0ZXh0U3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2RlZmF1bHRJdGVtUHJvcGVydGllcycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6V2lkZ2V0T3B0aW9ucy5kaXNhYmxlZF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2Rpc2FibGVkJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2Rpc2FibGVkJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLmVkZ2VzXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZWRnZXMoKTogeyBjdXN0b21EYXRhRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXRhU291cmNlPzogQXJyYXk8YW55PiB8IERhdGFTb3VyY2UgfCBEYXRhU291cmNlT3B0aW9ucyB8IG51bGwgfCBTdG9yZSB8IHN0cmluZywgZnJvbUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgZnJvbUxpbmVFbmRFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGZyb21Qb2ludEluZGV4RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBrZXlFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcsIGxpbmVUeXBlRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBsb2NrZWRFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHBvaW50c0V4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgc3R5bGVFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHRleHRFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHRleHRTdHlsZUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdG9FeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcsIHRvTGluZUVuZEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdG9Qb2ludEluZGV4RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCB6SW5kZXhFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQgfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignZWRnZXMnKTtcclxuICAgIH1cclxuICAgIHNldCBlZGdlcyh2YWx1ZTogeyBjdXN0b21EYXRhRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXRhU291cmNlPzogQXJyYXk8YW55PiB8IERhdGFTb3VyY2UgfCBEYXRhU291cmNlT3B0aW9ucyB8IG51bGwgfCBTdG9yZSB8IHN0cmluZywgZnJvbUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgZnJvbUxpbmVFbmRFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGZyb21Qb2ludEluZGV4RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBrZXlFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcsIGxpbmVUeXBlRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBsb2NrZWRFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHBvaW50c0V4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgc3R5bGVFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHRleHRFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHRleHRTdHlsZUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdG9FeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcsIHRvTGluZUVuZEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdG9Qb2ludEluZGV4RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCB6SW5kZXhFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQgfSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignZWRnZXMnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMuZWRpdGluZ11cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IGVkaXRpbmcoKTogeyBhbGxvd0FkZFNoYXBlPzogYm9vbGVhbiwgYWxsb3dDaGFuZ2VDb25uZWN0aW9uPzogYm9vbGVhbiwgYWxsb3dDaGFuZ2VDb25uZWN0b3JQb2ludHM/OiBib29sZWFuLCBhbGxvd0NoYW5nZUNvbm5lY3RvclRleHQ/OiBib29sZWFuLCBhbGxvd0NoYW5nZVNoYXBlVGV4dD86IGJvb2xlYW4sIGFsbG93RGVsZXRlQ29ubmVjdG9yPzogYm9vbGVhbiwgYWxsb3dEZWxldGVTaGFwZT86IGJvb2xlYW4sIGFsbG93TW92ZVNoYXBlPzogYm9vbGVhbiwgYWxsb3dSZXNpemVTaGFwZT86IGJvb2xlYW4gfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignZWRpdGluZycpO1xyXG4gICAgfVxyXG4gICAgc2V0IGVkaXRpbmcodmFsdWU6IHsgYWxsb3dBZGRTaGFwZT86IGJvb2xlYW4sIGFsbG93Q2hhbmdlQ29ubmVjdGlvbj86IGJvb2xlYW4sIGFsbG93Q2hhbmdlQ29ubmVjdG9yUG9pbnRzPzogYm9vbGVhbiwgYWxsb3dDaGFuZ2VDb25uZWN0b3JUZXh0PzogYm9vbGVhbiwgYWxsb3dDaGFuZ2VTaGFwZVRleHQ/OiBib29sZWFuLCBhbGxvd0RlbGV0ZUNvbm5lY3Rvcj86IGJvb2xlYW4sIGFsbG93RGVsZXRlU2hhcGU/OiBib29sZWFuLCBhbGxvd01vdmVTaGFwZT86IGJvb2xlYW4sIGFsbG93UmVzaXplU2hhcGU/OiBib29sZWFuIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ2VkaXRpbmcnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOkRPTUNvbXBvbmVudE9wdGlvbnMuZWxlbWVudEF0dHJdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBlbGVtZW50QXR0cigpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdlbGVtZW50QXR0cicpO1xyXG4gICAgfVxyXG4gICAgc2V0IGVsZW1lbnRBdHRyKHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdlbGVtZW50QXR0cicsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5leHBvcnRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBleHBvcnQoKTogeyBmaWxlTmFtZT86IHN0cmluZyB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdleHBvcnQnKTtcclxuICAgIH1cclxuICAgIHNldCBleHBvcnQodmFsdWU6IHsgZmlsZU5hbWU/OiBzdHJpbmcgfSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignZXhwb3J0JywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLmZ1bGxTY3JlZW5dXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBmdWxsU2NyZWVuKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2Z1bGxTY3JlZW4nKTtcclxuICAgIH1cclxuICAgIHNldCBmdWxsU2NyZWVuKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdmdWxsU2NyZWVuJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLmdyaWRTaXplXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZ3JpZFNpemUoKTogbnVtYmVyIHwgeyBpdGVtcz86IEFycmF5PG51bWJlcj4sIHZhbHVlPzogbnVtYmVyIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2dyaWRTaXplJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgZ3JpZFNpemUodmFsdWU6IG51bWJlciB8IHsgaXRlbXM/OiBBcnJheTxudW1iZXI+LCB2YWx1ZT86IG51bWJlciB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdncmlkU2l6ZScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5oYXNDaGFuZ2VzXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgaGFzQ2hhbmdlcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdoYXNDaGFuZ2VzJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgaGFzQ2hhbmdlcyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignaGFzQ2hhbmdlcycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6RE9NQ29tcG9uZW50T3B0aW9ucy5oZWlnaHRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBoZWlnaHQoKTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdoZWlnaHQnKTtcclxuICAgIH1cclxuICAgIHNldCBoZWlnaHQodmFsdWU6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignaGVpZ2h0JywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLmhpc3RvcnlUb29sYmFyXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgaGlzdG9yeVRvb2xiYXIoKTogeyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgdmlzaWJsZT86IGJvb2xlYW4gfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignaGlzdG9yeVRvb2xiYXInKTtcclxuICAgIH1cclxuICAgIHNldCBoaXN0b3J5VG9vbGJhcih2YWx1ZTogeyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgdmlzaWJsZT86IGJvb2xlYW4gfSkge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbignaGlzdG9yeVRvb2xiYXInLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMubWFpblRvb2xiYXJdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBtYWluVG9vbGJhcigpOiB7IGNvbW1hbmRzPzogQXJyYXk8Q29tbWFuZCB8IEN1c3RvbUNvbW1hbmQ+LCB2aXNpYmxlPzogYm9vbGVhbiB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdtYWluVG9vbGJhcicpO1xyXG4gICAgfVxyXG4gICAgc2V0IG1haW5Ub29sYmFyKHZhbHVlOiB7IGNvbW1hbmRzPzogQXJyYXk8Q29tbWFuZCB8IEN1c3RvbUNvbW1hbmQ+LCB2aXNpYmxlPzogYm9vbGVhbiB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdtYWluVG9vbGJhcicsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5ub2Rlc11cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IG5vZGVzKCk6IHsgYXV0b0xheW91dD86IERhdGFMYXlvdXRUeXBlIHwgeyBvcmllbnRhdGlvbj86IE9yaWVudGF0aW9uLCB0eXBlPzogRGF0YUxheW91dFR5cGUgfSwgYXV0b1NpemVFbmFibGVkPzogYm9vbGVhbiwgY29udGFpbmVyQ2hpbGRyZW5FeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGNvbnRhaW5lcktleUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgY3VzdG9tRGF0YUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgZGF0YVNvdXJjZT86IEFycmF5PGFueT4gfCBEYXRhU291cmNlIHwgRGF0YVNvdXJjZU9wdGlvbnMgfCBudWxsIHwgU3RvcmUgfCBzdHJpbmcsIGhlaWdodEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgaW1hZ2VVcmxFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGl0ZW1zRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBrZXlFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcsIGxlZnRFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGxvY2tlZEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgcGFyZW50S2V5RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHlsZUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdGV4dEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgdGV4dFN0eWxlRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCB0b3BFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHR5cGVFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcsIHdpZHRoRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCB6SW5kZXhFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQgfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignbm9kZXMnKTtcclxuICAgIH1cclxuICAgIHNldCBub2Rlcyh2YWx1ZTogeyBhdXRvTGF5b3V0PzogRGF0YUxheW91dFR5cGUgfCB7IG9yaWVudGF0aW9uPzogT3JpZW50YXRpb24sIHR5cGU/OiBEYXRhTGF5b3V0VHlwZSB9LCBhdXRvU2l6ZUVuYWJsZWQ/OiBib29sZWFuLCBjb250YWluZXJDaGlsZHJlbkV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udGFpbmVyS2V5RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nLCBjdXN0b21EYXRhRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXRhU291cmNlPzogQXJyYXk8YW55PiB8IERhdGFTb3VyY2UgfCBEYXRhU291cmNlT3B0aW9ucyB8IG51bGwgfCBTdG9yZSB8IHN0cmluZywgaGVpZ2h0RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBpbWFnZVVybEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgaXRlbXNFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGtleUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgbGVmdEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgbG9ja2VkRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJlbnRLZXlFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHN0eWxlRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCB0ZXh0RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nLCB0ZXh0U3R5bGVFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHRvcEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdHlwZUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgd2lkdGhFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHpJbmRleEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdub2RlcycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5wYWdlQ29sb3JdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYWdlQ29sb3IoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdwYWdlQ29sb3InKTtcclxuICAgIH1cclxuICAgIHNldCBwYWdlQ29sb3IodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbigncGFnZUNvbG9yJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLnBhZ2VPcmllbnRhdGlvbl1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHBhZ2VPcmllbnRhdGlvbigpOiBQYWdlT3JpZW50YXRpb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3BhZ2VPcmllbnRhdGlvbicpO1xyXG4gICAgfVxyXG4gICAgc2V0IHBhZ2VPcmllbnRhdGlvbih2YWx1ZTogUGFnZU9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdwYWdlT3JpZW50YXRpb24nLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMucGFnZVNpemVdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYWdlU2l6ZSgpOiB7IGhlaWdodD86IG51bWJlciwgaXRlbXM/OiB7IGhlaWdodD86IG51bWJlciwgdGV4dD86IHN0cmluZywgd2lkdGg/OiBudW1iZXIgfVtdLCB3aWR0aD86IG51bWJlciB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdwYWdlU2l6ZScpO1xyXG4gICAgfVxyXG4gICAgc2V0IHBhZ2VTaXplKHZhbHVlOiB7IGhlaWdodD86IG51bWJlciwgaXRlbXM/OiB7IGhlaWdodD86IG51bWJlciwgdGV4dD86IHN0cmluZywgd2lkdGg/OiBudW1iZXIgfVtdLCB3aWR0aD86IG51bWJlciB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdwYWdlU2l6ZScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5wcm9wZXJ0aWVzUGFuZWxdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwcm9wZXJ0aWVzUGFuZWwoKTogeyB0YWJzPzogeyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgZ3JvdXBzPzogeyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgdGl0bGU/OiBzdHJpbmcgfVtdLCB0aXRsZT86IHN0cmluZyB9W10sIHZpc2liaWxpdHk/OiBQYW5lbFZpc2liaWxpdHkgfSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigncHJvcGVydGllc1BhbmVsJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgcHJvcGVydGllc1BhbmVsKHZhbHVlOiB7IHRhYnM/OiB7IGNvbW1hbmRzPzogQXJyYXk8Q29tbWFuZCB8IEN1c3RvbUNvbW1hbmQ+LCBncm91cHM/OiB7IGNvbW1hbmRzPzogQXJyYXk8Q29tbWFuZCB8IEN1c3RvbUNvbW1hbmQ+LCB0aXRsZT86IHN0cmluZyB9W10sIHRpdGxlPzogc3RyaW5nIH1bXSwgdmlzaWJpbGl0eT86IFBhbmVsVmlzaWJpbGl0eSB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdwcm9wZXJ0aWVzUGFuZWwnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMucmVhZE9ubHldXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdyZWFkT25seScpO1xyXG4gICAgfVxyXG4gICAgc2V0IHJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdyZWFkT25seScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6RE9NQ29tcG9uZW50T3B0aW9ucy5ydGxFbmFibGVkXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgcnRsRW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCdydGxFbmFibGVkJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgcnRsRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbigncnRsRW5hYmxlZCcsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5zaG93R3JpZF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNob3dHcmlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3Nob3dHcmlkJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgc2hvd0dyaWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3Nob3dHcmlkJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLnNpbXBsZVZpZXddXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzaW1wbGVWaWV3KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3NpbXBsZVZpZXcnKTtcclxuICAgIH1cclxuICAgIHNldCBzaW1wbGVWaWV3KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdzaW1wbGVWaWV3JywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLnNuYXBUb0dyaWRdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzbmFwVG9HcmlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3NuYXBUb0dyaWQnKTtcclxuICAgIH1cclxuICAgIHNldCBzbmFwVG9HcmlkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCdzbmFwVG9HcmlkJywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLnRvb2xib3hdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0b29sYm94KCk6IHsgZ3JvdXBzPzogeyBjYXRlZ29yeT86IFNoYXBlQ2F0ZWdvcnkgfCBzdHJpbmcsIGRpc3BsYXlNb2RlPzogVG9vbGJveERpc3BsYXlNb2RlLCBleHBhbmRlZD86IGJvb2xlYW4sIHNoYXBlcz86IEFycmF5PFNoYXBlVHlwZT4sIHRpdGxlPzogc3RyaW5nIH1bXSwgc2hhcGVJY29uc1BlclJvdz86IG51bWJlciwgc2hvd1NlYXJjaD86IGJvb2xlYW4sIHZpc2liaWxpdHk/OiBQYW5lbFZpc2liaWxpdHksIHdpZHRoPzogbnVtYmVyIHwgdW5kZWZpbmVkIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3Rvb2xib3gnKTtcclxuICAgIH1cclxuICAgIHNldCB0b29sYm94KHZhbHVlOiB7IGdyb3Vwcz86IHsgY2F0ZWdvcnk/OiBTaGFwZUNhdGVnb3J5IHwgc3RyaW5nLCBkaXNwbGF5TW9kZT86IFRvb2xib3hEaXNwbGF5TW9kZSwgZXhwYW5kZWQ/OiBib29sZWFuLCBzaGFwZXM/OiBBcnJheTxTaGFwZVR5cGU+LCB0aXRsZT86IHN0cmluZyB9W10sIHNoYXBlSWNvbnNQZXJSb3c/OiBudW1iZXIsIHNob3dTZWFyY2g/OiBib29sZWFuLCB2aXNpYmlsaXR5PzogUGFuZWxWaXNpYmlsaXR5LCB3aWR0aD86IG51bWJlciB8IHVuZGVmaW5lZCB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCd0b29sYm94JywgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLnVuaXRzXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdW5pdHMoKTogVW5pdHMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3VuaXRzJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgdW5pdHModmFsdWU6IFVuaXRzKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCd1bml0cycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy51c2VOYXRpdmVTY3JvbGxpbmddXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB1c2VOYXRpdmVTY3JvbGxpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbigndXNlTmF0aXZlU2Nyb2xsaW5nJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgdXNlTmF0aXZlU2Nyb2xsaW5nKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCd1c2VOYXRpdmVTY3JvbGxpbmcnLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMudmlld1Rvb2xiYXJdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB2aWV3VG9vbGJhcigpOiB7IGNvbW1hbmRzPzogQXJyYXk8Q29tbWFuZCB8IEN1c3RvbUNvbW1hbmQ+LCB2aXNpYmxlPzogYm9vbGVhbiB9IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCd2aWV3VG9vbGJhcicpO1xyXG4gICAgfVxyXG4gICAgc2V0IHZpZXdUb29sYmFyKHZhbHVlOiB7IGNvbW1hbmRzPzogQXJyYXk8Q29tbWFuZCB8IEN1c3RvbUNvbW1hbmQ+LCB2aXNpYmxlPzogYm9vbGVhbiB9KSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCd2aWV3VG9vbGJhcicsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy52aWV3VW5pdHNdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB2aWV3VW5pdHMoKTogVW5pdHMge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3ZpZXdVbml0cycpO1xyXG4gICAgfVxyXG4gICAgc2V0IHZpZXdVbml0cyh2YWx1ZTogVW5pdHMpIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3ZpZXdVbml0cycsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6V2lkZ2V0T3B0aW9ucy52aXNpYmxlXVxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0T3B0aW9uKCd2aXNpYmxlJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuX3NldE9wdGlvbigndmlzaWJsZScsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6RE9NQ29tcG9uZW50T3B0aW9ucy53aWR0aF1cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHdpZHRoKCk6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignd2lkdGgnKTtcclxuICAgIH1cclxuICAgIHNldCB3aWR0aCh2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0T3B0aW9uKCd3aWR0aCcsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy56b29tTGV2ZWxdXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB6b29tTGV2ZWwoKTogbnVtYmVyIHwgeyBpdGVtcz86IEFycmF5PG51bWJlcj4sIHZhbHVlPzogbnVtYmVyIHwgdW5kZWZpbmVkIH0ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ3pvb21MZXZlbCcpO1xyXG4gICAgfVxyXG4gICAgc2V0IHpvb21MZXZlbCh2YWx1ZTogbnVtYmVyIHwgeyBpdGVtcz86IEFycmF5PG51bWJlcj4sIHZhbHVlPzogbnVtYmVyIHwgdW5kZWZpbmVkIH0pIHtcclxuICAgICAgICB0aGlzLl9zZXRPcHRpb24oJ3pvb21MZXZlbCcsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMub25Db250ZW50UmVhZHldXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25Db250ZW50UmVhZHk6IEV2ZW50RW1pdHRlcjxDb250ZW50UmVhZHlFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLm9uQ3VzdG9tQ29tbWFuZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkN1c3RvbUNvbW1hbmQ6IEV2ZW50RW1pdHRlcjxDdXN0b21Db21tYW5kRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5vbkRpc3Bvc2luZ11cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkRpc3Bvc2luZzogRXZlbnRFbWl0dGVyPERpc3Bvc2luZ0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMub25Jbml0aWFsaXplZF1cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8SW5pdGlhbGl6ZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLm9uSXRlbUNsaWNrXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uSXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8SXRlbUNsaWNrRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5vbkl0ZW1EYmxDbGlja11cclxuICAgIFxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBvbkl0ZW1EYmxDbGljazogRXZlbnRFbWl0dGVyPEl0ZW1EYmxDbGlja0V2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMub25PcHRpb25DaGFuZ2VkXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uT3B0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPE9wdGlvbkNoYW5nZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFtkZXNjcjpkeERpYWdyYW1PcHRpb25zLm9uUmVxdWVzdEVkaXRPcGVyYXRpb25dXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25SZXF1ZXN0RWRpdE9wZXJhdGlvbjogRXZlbnRFbWl0dGVyPFJlcXVlc3RFZGl0T3BlcmF0aW9uRXZlbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBbZGVzY3I6ZHhEaWFncmFtT3B0aW9ucy5vblJlcXVlc3RMYXlvdXRVcGRhdGVdXHJcbiAgICBcclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25SZXF1ZXN0TGF5b3V0VXBkYXRlOiBFdmVudEVtaXR0ZXI8UmVxdWVzdExheW91dFVwZGF0ZUV2ZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogW2Rlc2NyOmR4RGlhZ3JhbU9wdGlvbnMub25TZWxlY3Rpb25DaGFuZ2VkXVxyXG4gICAgXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZWRFdmVudD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGF1dG9ab29tTW9kZUNoYW5nZTogRXZlbnRFbWl0dGVyPEF1dG9ab29tTW9kZT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGNvbnRleHRNZW51Q2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgZW5hYmxlZD86IGJvb2xlYW4gfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGNvbnRleHRUb29sYm94Q2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBjYXRlZ29yeT86IFNoYXBlQ2F0ZWdvcnkgfCBzdHJpbmcsIGRpc3BsYXlNb2RlPzogVG9vbGJveERpc3BsYXlNb2RlLCBlbmFibGVkPzogYm9vbGVhbiwgc2hhcGVJY29uc1BlclJvdz86IG51bWJlciwgc2hhcGVzPzogQXJyYXk8U2hhcGVUeXBlPiwgd2lkdGg/OiBudW1iZXIgfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGN1c3RvbVNoYXBlc0NoYW5nZTogRXZlbnRFbWl0dGVyPHsgYWxsb3dFZGl0SW1hZ2U/OiBib29sZWFuLCBhbGxvd0VkaXRUZXh0PzogYm9vbGVhbiwgYWxsb3dSZXNpemU/OiBib29sZWFuLCBiYWNrZ3JvdW5kSW1hZ2VIZWlnaHQ/OiBudW1iZXIsIGJhY2tncm91bmRJbWFnZUxlZnQ/OiBudW1iZXIsIGJhY2tncm91bmRJbWFnZVRvb2xib3hVcmw/OiBzdHJpbmcsIGJhY2tncm91bmRJbWFnZVRvcD86IG51bWJlciwgYmFja2dyb3VuZEltYWdlVXJsPzogc3RyaW5nLCBiYWNrZ3JvdW5kSW1hZ2VXaWR0aD86IG51bWJlciwgYmFzZVR5cGU/OiBTaGFwZVR5cGUgfCBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBjb25uZWN0aW9uUG9pbnRzPzogeyB4PzogbnVtYmVyLCB5PzogbnVtYmVyIH1bXSwgZGVmYXVsdEhlaWdodD86IG51bWJlciwgZGVmYXVsdEltYWdlVXJsPzogc3RyaW5nLCBkZWZhdWx0VGV4dD86IHN0cmluZywgZGVmYXVsdFdpZHRoPzogbnVtYmVyLCBpbWFnZUhlaWdodD86IG51bWJlciwgaW1hZ2VMZWZ0PzogbnVtYmVyLCBpbWFnZVRvcD86IG51bWJlciwgaW1hZ2VXaWR0aD86IG51bWJlciwga2VlcFJhdGlvT25BdXRvU2l6ZT86IGJvb2xlYW4sIG1heEhlaWdodD86IG51bWJlciwgbWF4V2lkdGg/OiBudW1iZXIsIG1pbkhlaWdodD86IG51bWJlciwgbWluV2lkdGg/OiBudW1iZXIsIHRlbXBsYXRlPzogYW55LCB0ZW1wbGF0ZUhlaWdodD86IGFueSwgdGVtcGxhdGVMZWZ0PzogYW55LCB0ZW1wbGF0ZVRvcD86IGFueSwgdGVtcGxhdGVXaWR0aD86IGFueSwgdGV4dEhlaWdodD86IG51bWJlciwgdGV4dExlZnQ/OiBudW1iZXIsIHRleHRUb3A/OiBudW1iZXIsIHRleHRXaWR0aD86IG51bWJlciwgdGl0bGU/OiBzdHJpbmcsIHRvb2xib3hUZW1wbGF0ZT86IGFueSwgdG9vbGJveFdpZHRoVG9IZWlnaHRSYXRpbz86IG51bWJlciwgdHlwZT86IHN0cmluZyB9W10+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBjdXN0b21TaGFwZVRlbXBsYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgY3VzdG9tU2hhcGVUb29sYm94VGVtcGxhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBkZWZhdWx0SXRlbVByb3BlcnRpZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGNvbm5lY3RvckxpbmVFbmQ/OiBDb25uZWN0b3JMaW5lRW5kLCBjb25uZWN0b3JMaW5lU3RhcnQ/OiBDb25uZWN0b3JMaW5lRW5kLCBjb25uZWN0b3JMaW5lVHlwZT86IENvbm5lY3RvckxpbmVUeXBlLCBzaGFwZU1heEhlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZCwgc2hhcGVNYXhXaWR0aD86IG51bWJlciB8IHVuZGVmaW5lZCwgc2hhcGVNaW5IZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWQsIHNoYXBlTWluV2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWQsIHN0eWxlPzogUmVjb3JkPHN0cmluZywgYW55PiwgdGV4dFN0eWxlPzogUmVjb3JkPHN0cmluZywgYW55PiB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZGlzYWJsZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZWRnZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGN1c3RvbURhdGFFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGRhdGFTb3VyY2U/OiBBcnJheTxhbnk+IHwgRGF0YVNvdXJjZSB8IERhdGFTb3VyY2VPcHRpb25zIHwgbnVsbCB8IFN0b3JlIHwgc3RyaW5nLCBmcm9tRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nLCBmcm9tTGluZUVuZEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgZnJvbVBvaW50SW5kZXhFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGtleUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgbGluZVR5cGVFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGxvY2tlZEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgcG9pbnRzRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBzdHlsZUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdGV4dEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdGV4dFN0eWxlRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCB0b0V4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgdG9MaW5lRW5kRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCB0b1BvaW50SW5kZXhFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHpJbmRleEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgZWRpdGluZ0NoYW5nZTogRXZlbnRFbWl0dGVyPHsgYWxsb3dBZGRTaGFwZT86IGJvb2xlYW4sIGFsbG93Q2hhbmdlQ29ubmVjdGlvbj86IGJvb2xlYW4sIGFsbG93Q2hhbmdlQ29ubmVjdG9yUG9pbnRzPzogYm9vbGVhbiwgYWxsb3dDaGFuZ2VDb25uZWN0b3JUZXh0PzogYm9vbGVhbiwgYWxsb3dDaGFuZ2VTaGFwZVRleHQ/OiBib29sZWFuLCBhbGxvd0RlbGV0ZUNvbm5lY3Rvcj86IGJvb2xlYW4sIGFsbG93RGVsZXRlU2hhcGU/OiBib29sZWFuLCBhbGxvd01vdmVTaGFwZT86IGJvb2xlYW4sIGFsbG93UmVzaXplU2hhcGU/OiBib29sZWFuIH0+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBlbGVtZW50QXR0ckNoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIGFueT4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBleHBvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGZpbGVOYW1lPzogc3RyaW5nIH0+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBmdWxsU2NyZWVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGdyaWRTaXplQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgeyBpdGVtcz86IEFycmF5PG51bWJlcj4sIHZhbHVlPzogbnVtYmVyIH0+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBoYXNDaGFuZ2VzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGhlaWdodENoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZD47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIGhpc3RvcnlUb29sYmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgdmlzaWJsZT86IGJvb2xlYW4gfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG1haW5Ub29sYmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgdmlzaWJsZT86IGJvb2xlYW4gfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIG5vZGVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyBhdXRvTGF5b3V0PzogRGF0YUxheW91dFR5cGUgfCB7IG9yaWVudGF0aW9uPzogT3JpZW50YXRpb24sIHR5cGU/OiBEYXRhTGF5b3V0VHlwZSB9LCBhdXRvU2l6ZUVuYWJsZWQ/OiBib29sZWFuLCBjb250YWluZXJDaGlsZHJlbkV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgY29udGFpbmVyS2V5RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nLCBjdXN0b21EYXRhRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXRhU291cmNlPzogQXJyYXk8YW55PiB8IERhdGFTb3VyY2UgfCBEYXRhU291cmNlT3B0aW9ucyB8IG51bGwgfCBTdG9yZSB8IHN0cmluZywgaGVpZ2h0RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBpbWFnZVVybEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgaXRlbXNFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIGtleUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgbGVmdEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgbG9ja2VkRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBwYXJlbnRLZXlFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHN0eWxlRXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCB0ZXh0RXhwcj86ICgoZGF0YTogYW55LCB2YWx1ZTogYW55KSA9PiBhbnkpIHwgc3RyaW5nLCB0ZXh0U3R5bGVFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHRvcEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgdHlwZUV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZywgd2lkdGhFeHByPzogKChkYXRhOiBhbnksIHZhbHVlOiBhbnkpID0+IGFueSkgfCBzdHJpbmcgfCB1bmRlZmluZWQsIHpJbmRleEV4cHI/OiAoKGRhdGE6IGFueSwgdmFsdWU6IGFueSkgPT4gYW55KSB8IHN0cmluZyB8IHVuZGVmaW5lZCB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcGFnZUNvbG9yQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcGFnZU9yaWVudGF0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8UGFnZU9yaWVudGF0aW9uPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGhlaWdodD86IG51bWJlciwgaXRlbXM/OiB7IGhlaWdodD86IG51bWJlciwgdGV4dD86IHN0cmluZywgd2lkdGg/OiBudW1iZXIgfVtdLCB3aWR0aD86IG51bWJlciB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgcHJvcGVydGllc1BhbmVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8eyB0YWJzPzogeyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgZ3JvdXBzPzogeyBjb21tYW5kcz86IEFycmF5PENvbW1hbmQgfCBDdXN0b21Db21tYW5kPiwgdGl0bGU/OiBzdHJpbmcgfVtdLCB0aXRsZT86IHN0cmluZyB9W10sIHZpc2liaWxpdHk/OiBQYW5lbFZpc2liaWxpdHkgfT47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHJlYWRPbmx5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHJ0bEVuYWJsZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgc2hvd0dyaWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgc2ltcGxlVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSBzbmFwVG9HcmlkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHRvb2xib3hDaGFuZ2U6IEV2ZW50RW1pdHRlcjx7IGdyb3Vwcz86IHsgY2F0ZWdvcnk/OiBTaGFwZUNhdGVnb3J5IHwgc3RyaW5nLCBkaXNwbGF5TW9kZT86IFRvb2xib3hEaXNwbGF5TW9kZSwgZXhwYW5kZWQ/OiBib29sZWFuLCBzaGFwZXM/OiBBcnJheTxTaGFwZVR5cGU+LCB0aXRsZT86IHN0cmluZyB9W10sIHNoYXBlSWNvbnNQZXJSb3c/OiBudW1iZXIsIHNob3dTZWFyY2g/OiBib29sZWFuLCB2aXNpYmlsaXR5PzogUGFuZWxWaXNpYmlsaXR5LCB3aWR0aD86IG51bWJlciB8IHVuZGVmaW5lZCB9PjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgdW5pdHNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxVbml0cz47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHVzZU5hdGl2ZVNjcm9sbGluZ0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSB2aWV3VG9vbGJhckNoYW5nZTogRXZlbnRFbWl0dGVyPHsgY29tbWFuZHM/OiBBcnJheTxDb21tYW5kIHwgQ3VzdG9tQ29tbWFuZD4sIHZpc2libGU/OiBib29sZWFuIH0+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSB2aWV3VW5pdHNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxVbml0cz47XHJcblxyXG4gICAgLyoqXHJcbiAgICBcclxuICAgICAqIFRoaXMgbWVtYmVyIHN1cHBvcnRzIHRoZSBpbnRlcm5hbCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkgZnJvbSB5b3VyIGNvZGUuXHJcbiAgICBcclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPjtcclxuXHJcbiAgICAvKipcclxuICAgIFxyXG4gICAgICogVGhpcyBtZW1iZXIgc3VwcG9ydHMgdGhlIGludGVybmFsIGluZnJhc3RydWN0dXJlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHlvdXIgY29kZS5cclxuICAgIFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgd2lkdGhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgXHJcbiAgICAgKiBUaGlzIG1lbWJlciBzdXBwb3J0cyB0aGUgaW50ZXJuYWwgaW5mcmFzdHJ1Y3R1cmUgYW5kIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGRpcmVjdGx5IGZyb20geW91ciBjb2RlLlxyXG4gICAgXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKSB6b29tTGV2ZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXIgfCB7IGl0ZW1zPzogQXJyYXk8bnVtYmVyPiwgdmFsdWU/OiBudW1iZXIgfCB1bmRlZmluZWQgfT47XHJcblxyXG5cclxuXHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihEeGlEaWFncmFtQ3VzdG9tU2hhcGVDb21wb25lbnQpXHJcbiAgICBnZXQgY3VzdG9tU2hhcGVzQ2hpbGRyZW4oKTogUXVlcnlMaXN0PER4aURpYWdyYW1DdXN0b21TaGFwZUNvbXBvbmVudD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRPcHRpb24oJ2N1c3RvbVNoYXBlcycpO1xyXG4gICAgfVxyXG4gICAgc2V0IGN1c3RvbVNoYXBlc0NoaWxkcmVuKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0Q2hpbGRyZW4oJ2N1c3RvbVNoYXBlcycsIHZhbHVlLCAnRHhpRGlhZ3JhbUN1c3RvbVNoYXBlQ29tcG9uZW50Jyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRHhpQ3VzdG9tU2hhcGVDb21wb25lbnQpXHJcbiAgICBnZXQgY3VzdG9tU2hhcGVzTGVnYWN5Q2hpbGRyZW4oKTogUXVlcnlMaXN0PER4aUN1c3RvbVNoYXBlQ29tcG9uZW50PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE9wdGlvbignY3VzdG9tU2hhcGVzJyk7XHJcbiAgICB9XHJcbiAgICBzZXQgY3VzdG9tU2hhcGVzTGVnYWN5Q2hpbGRyZW4odmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zZXRDaGlsZHJlbignY3VzdG9tU2hhcGVzJywgdmFsdWUsICdEeGlDdXN0b21TaGFwZUNvbXBvbmVudCcpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5nWm9uZTogTmdab25lLCB0ZW1wbGF0ZUhvc3Q6IER4VGVtcGxhdGVIb3N0LFxyXG4gICAgICAgICAgICBwcml2YXRlIF93YXRjaGVySGVscGVyOiBXYXRjaGVySGVscGVyLFxyXG4gICAgICAgICAgICBwcml2YXRlIF9pZGg6IEl0ZXJhYmxlRGlmZmVySGVscGVyLFxyXG4gICAgICAgICAgICBvcHRpb25Ib3N0OiBOZXN0ZWRPcHRpb25Ib3N0LFxyXG4gICAgICAgICAgICB0cmFuc2ZlclN0YXRlOiBUcmFuc2ZlclN0YXRlLFxyXG4gICAgICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBhbnkpIHtcclxuXHJcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgbmdab25lLCB0ZW1wbGF0ZUhvc3QsIF93YXRjaGVySGVscGVyLCB0cmFuc2ZlclN0YXRlLCBwbGF0Zm9ybUlkKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY3JlYXRlRXZlbnRFbWl0dGVycyhbXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnY29udGVudFJlYWR5JywgZW1pdDogJ29uQ29udGVudFJlYWR5JyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2N1c3RvbUNvbW1hbmQnLCBlbWl0OiAnb25DdXN0b21Db21tYW5kJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2Rpc3Bvc2luZycsIGVtaXQ6ICdvbkRpc3Bvc2luZycgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdpbml0aWFsaXplZCcsIGVtaXQ6ICdvbkluaXRpYWxpemVkJyB9LFxyXG4gICAgICAgICAgICB7IHN1YnNjcmliZTogJ2l0ZW1DbGljaycsIGVtaXQ6ICdvbkl0ZW1DbGljaycgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdpdGVtRGJsQ2xpY2snLCBlbWl0OiAnb25JdGVtRGJsQ2xpY2snIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAnb3B0aW9uQ2hhbmdlZCcsIGVtaXQ6ICdvbk9wdGlvbkNoYW5nZWQnIH0sXHJcbiAgICAgICAgICAgIHsgc3Vic2NyaWJlOiAncmVxdWVzdEVkaXRPcGVyYXRpb24nLCBlbWl0OiAnb25SZXF1ZXN0RWRpdE9wZXJhdGlvbicgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdyZXF1ZXN0TGF5b3V0VXBkYXRlJywgZW1pdDogJ29uUmVxdWVzdExheW91dFVwZGF0ZScgfSxcclxuICAgICAgICAgICAgeyBzdWJzY3JpYmU6ICdzZWxlY3Rpb25DaGFuZ2VkJywgZW1pdDogJ29uU2VsZWN0aW9uQ2hhbmdlZCcgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnYXV0b1pvb21Nb2RlQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdjb250ZXh0TWVudUNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnY29udGV4dFRvb2xib3hDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2N1c3RvbVNoYXBlc0NoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnY3VzdG9tU2hhcGVUZW1wbGF0ZUNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnY3VzdG9tU2hhcGVUb29sYm94VGVtcGxhdGVDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2RlZmF1bHRJdGVtUHJvcGVydGllc0NoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnZGlzYWJsZWRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ2VkZ2VzQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdlZGl0aW5nQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdlbGVtZW50QXR0ckNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnZXhwb3J0Q2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdmdWxsU2NyZWVuQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdncmlkU2l6ZUNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnaGFzQ2hhbmdlc0NoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnaGVpZ2h0Q2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdoaXN0b3J5VG9vbGJhckNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnbWFpblRvb2xiYXJDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ25vZGVzQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdwYWdlQ29sb3JDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3BhZ2VPcmllbnRhdGlvbkNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAncGFnZVNpemVDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3Byb3BlcnRpZXNQYW5lbENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAncmVhZE9ubHlDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3J0bEVuYWJsZWRDaGFuZ2UnIH0sXHJcbiAgICAgICAgICAgIHsgZW1pdDogJ3Nob3dHcmlkQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdzaW1wbGVWaWV3Q2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICdzbmFwVG9HcmlkQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICd0b29sYm94Q2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICd1bml0c0NoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAndXNlTmF0aXZlU2Nyb2xsaW5nQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICd2aWV3VG9vbGJhckNoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAndmlld1VuaXRzQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICd2aXNpYmxlQ2hhbmdlJyB9LFxyXG4gICAgICAgICAgICB7IGVtaXQ6ICd3aWR0aENoYW5nZScgfSxcclxuICAgICAgICAgICAgeyBlbWl0OiAnem9vbUxldmVsQ2hhbmdlJyB9XHJcbiAgICAgICAgXSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lkaC5zZXRIb3N0KHRoaXMpO1xyXG4gICAgICAgIG9wdGlvbkhvc3Quc2V0SG9zdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBEeERpYWdyYW0oZWxlbWVudCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lXaWRnZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcbiAgICAgICAgdGhpcy5zZXR1cENoYW5nZXMoJ2N1c3RvbVNoYXBlcycsIGNoYW5nZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwQ2hhbmdlcyhwcm9wOiBzdHJpbmcsIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoIShwcm9wIGluIHRoaXMuX29wdGlvbnNUb1VwZGF0ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5faWRoLnNldHVwKHByb3AsIGNoYW5nZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ0RvQ2hlY2soKSB7XHJcbiAgICAgICAgdGhpcy5faWRoLmRvQ2hlY2soJ2N1c3RvbVNoYXBlcycpO1xyXG4gICAgICAgIHRoaXMuX3dhdGNoZXJIZWxwZXIuY2hlY2tXYXRjaGVycygpO1xyXG4gICAgICAgIHN1cGVyLm5nRG9DaGVjaygpO1xyXG4gICAgICAgIHN1cGVyLmNsZWFyQ2hhbmdlZE9wdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBfc2V0T3B0aW9uKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIGxldCBpc1NldHVwID0gdGhpcy5faWRoLnNldHVwU2luZ2xlKG5hbWUsIHZhbHVlKTtcclxuICAgICAgICBsZXQgaXNDaGFuZ2VkID0gdGhpcy5faWRoLmdldENoYW5nZXMobmFtZSwgdmFsdWUpICE9PSBudWxsO1xyXG5cclxuICAgICAgICBpZiAoaXNTZXR1cCB8fCBpc0NoYW5nZWQpIHtcclxuICAgICAgICAgICAgc3VwZXIuX3NldE9wdGlvbihuYW1lLCB2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIER4RGlhZ3JhbUNvbXBvbmVudCxcclxuICAgIER4b0NvbnRleHRNZW51TW9kdWxlLFxyXG4gICAgRHhpQ29tbWFuZE1vZHVsZSxcclxuICAgIER4aUl0ZW1Nb2R1bGUsXHJcbiAgICBEeG9Db250ZXh0VG9vbGJveE1vZHVsZSxcclxuICAgIER4aUN1c3RvbVNoYXBlTW9kdWxlLFxyXG4gICAgRHhpQ29ubmVjdGlvblBvaW50TW9kdWxlLFxyXG4gICAgRHhvRGVmYXVsdEl0ZW1Qcm9wZXJ0aWVzTW9kdWxlLFxyXG4gICAgRHhvRWRnZXNNb2R1bGUsXHJcbiAgICBEeG9FZGl0aW5nTW9kdWxlLFxyXG4gICAgRHhvRXhwb3J0TW9kdWxlLFxyXG4gICAgRHhvR3JpZFNpemVNb2R1bGUsXHJcbiAgICBEeG9IaXN0b3J5VG9vbGJhck1vZHVsZSxcclxuICAgIER4b01haW5Ub29sYmFyTW9kdWxlLFxyXG4gICAgRHhvTm9kZXNNb2R1bGUsXHJcbiAgICBEeG9BdXRvTGF5b3V0TW9kdWxlLFxyXG4gICAgRHhvUGFnZVNpemVNb2R1bGUsXHJcbiAgICBEeG9Qcm9wZXJ0aWVzUGFuZWxNb2R1bGUsXHJcbiAgICBEeGlUYWJNb2R1bGUsXHJcbiAgICBEeGlHcm91cE1vZHVsZSxcclxuICAgIER4b1Rvb2xib3hNb2R1bGUsXHJcbiAgICBEeG9WaWV3VG9vbGJhck1vZHVsZSxcclxuICAgIER4b1pvb21MZXZlbE1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1BdXRvTGF5b3V0TW9kdWxlLFxyXG4gICAgRHhpRGlhZ3JhbUNvbW1hbmRNb2R1bGUsXHJcbiAgICBEeGlEaWFncmFtQ29tbWFuZEl0ZW1Nb2R1bGUsXHJcbiAgICBEeGlEaWFncmFtQ29ubmVjdGlvblBvaW50TW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbUNvbnRleHRNZW51TW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbUNvbnRleHRUb29sYm94TW9kdWxlLFxyXG4gICAgRHhpRGlhZ3JhbUN1c3RvbVNoYXBlTW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbURlZmF1bHRJdGVtUHJvcGVydGllc01vZHVsZSxcclxuICAgIER4b0RpYWdyYW1FZGdlc01vZHVsZSxcclxuICAgIER4b0RpYWdyYW1FZGl0aW5nTW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbUV4cG9ydE1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1HcmlkU2l6ZU1vZHVsZSxcclxuICAgIER4aURpYWdyYW1Hcm91cE1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1IaXN0b3J5VG9vbGJhck1vZHVsZSxcclxuICAgIER4aURpYWdyYW1JdGVtTW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbU1haW5Ub29sYmFyTW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbU5vZGVzTW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbVBhZ2VTaXplTW9kdWxlLFxyXG4gICAgRHhpRGlhZ3JhbVBhZ2VTaXplSXRlbU1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1Qcm9wZXJ0aWVzUGFuZWxNb2R1bGUsXHJcbiAgICBEeGlEaWFncmFtVGFiTW9kdWxlLFxyXG4gICAgRHhpRGlhZ3JhbVRhYkdyb3VwTW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbVRvb2xib3hNb2R1bGUsXHJcbiAgICBEeGlEaWFncmFtVG9vbGJveEdyb3VwTW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbVZpZXdUb29sYmFyTW9kdWxlLFxyXG4gICAgRHhvRGlhZ3JhbVpvb21MZXZlbE1vZHVsZSxcclxuICAgIER4SW50ZWdyYXRpb25Nb2R1bGUsXHJcbiAgICBEeFRlbXBsYXRlTW9kdWxlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBEeERpYWdyYW1Db21wb25lbnQsXHJcbiAgICBEeG9Db250ZXh0TWVudU1vZHVsZSxcclxuICAgIER4aUNvbW1hbmRNb2R1bGUsXHJcbiAgICBEeGlJdGVtTW9kdWxlLFxyXG4gICAgRHhvQ29udGV4dFRvb2xib3hNb2R1bGUsXHJcbiAgICBEeGlDdXN0b21TaGFwZU1vZHVsZSxcclxuICAgIER4aUNvbm5lY3Rpb25Qb2ludE1vZHVsZSxcclxuICAgIER4b0RlZmF1bHRJdGVtUHJvcGVydGllc01vZHVsZSxcclxuICAgIER4b0VkZ2VzTW9kdWxlLFxyXG4gICAgRHhvRWRpdGluZ01vZHVsZSxcclxuICAgIER4b0V4cG9ydE1vZHVsZSxcclxuICAgIER4b0dyaWRTaXplTW9kdWxlLFxyXG4gICAgRHhvSGlzdG9yeVRvb2xiYXJNb2R1bGUsXHJcbiAgICBEeG9NYWluVG9vbGJhck1vZHVsZSxcclxuICAgIER4b05vZGVzTW9kdWxlLFxyXG4gICAgRHhvQXV0b0xheW91dE1vZHVsZSxcclxuICAgIER4b1BhZ2VTaXplTW9kdWxlLFxyXG4gICAgRHhvUHJvcGVydGllc1BhbmVsTW9kdWxlLFxyXG4gICAgRHhpVGFiTW9kdWxlLFxyXG4gICAgRHhpR3JvdXBNb2R1bGUsXHJcbiAgICBEeG9Ub29sYm94TW9kdWxlLFxyXG4gICAgRHhvVmlld1Rvb2xiYXJNb2R1bGUsXHJcbiAgICBEeG9ab29tTGV2ZWxNb2R1bGUsXHJcbiAgICBEeG9EaWFncmFtQXV0b0xheW91dE1vZHVsZSxcclxuICAgIER4aURpYWdyYW1Db21tYW5kTW9kdWxlLFxyXG4gICAgRHhpRGlhZ3JhbUNvbW1hbmRJdGVtTW9kdWxlLFxyXG4gICAgRHhpRGlhZ3JhbUNvbm5lY3Rpb25Qb2ludE1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1Db250ZXh0TWVudU1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1Db250ZXh0VG9vbGJveE1vZHVsZSxcclxuICAgIER4aURpYWdyYW1DdXN0b21TaGFwZU1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1EZWZhdWx0SXRlbVByb3BlcnRpZXNNb2R1bGUsXHJcbiAgICBEeG9EaWFncmFtRWRnZXNNb2R1bGUsXHJcbiAgICBEeG9EaWFncmFtRWRpdGluZ01vZHVsZSxcclxuICAgIER4b0RpYWdyYW1FeHBvcnRNb2R1bGUsXHJcbiAgICBEeG9EaWFncmFtR3JpZFNpemVNb2R1bGUsXHJcbiAgICBEeGlEaWFncmFtR3JvdXBNb2R1bGUsXHJcbiAgICBEeG9EaWFncmFtSGlzdG9yeVRvb2xiYXJNb2R1bGUsXHJcbiAgICBEeGlEaWFncmFtSXRlbU1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1NYWluVG9vbGJhck1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1Ob2Rlc01vZHVsZSxcclxuICAgIER4b0RpYWdyYW1QYWdlU2l6ZU1vZHVsZSxcclxuICAgIER4aURpYWdyYW1QYWdlU2l6ZUl0ZW1Nb2R1bGUsXHJcbiAgICBEeG9EaWFncmFtUHJvcGVydGllc1BhbmVsTW9kdWxlLFxyXG4gICAgRHhpRGlhZ3JhbVRhYk1vZHVsZSxcclxuICAgIER4aURpYWdyYW1UYWJHcm91cE1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1Ub29sYm94TW9kdWxlLFxyXG4gICAgRHhpRGlhZ3JhbVRvb2xib3hHcm91cE1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1WaWV3VG9vbGJhck1vZHVsZSxcclxuICAgIER4b0RpYWdyYW1ab29tTGV2ZWxNb2R1bGUsXHJcbiAgICBEeFRlbXBsYXRlTW9kdWxlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHhEaWFncmFtTW9kdWxlIHsgfVxyXG5cclxuZXhwb3J0ICogZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL2RpYWdyYW0vbmVzdGVkJztcclxuXHJcbmltcG9ydCB0eXBlICogYXMgRHhEaWFncmFtVHlwZXMgZnJvbSBcImRldmV4dHJlbWUvdWkvZGlhZ3JhbV90eXBlc1wiO1xyXG5leHBvcnQgeyBEeERpYWdyYW1UeXBlcyB9O1xyXG5cclxuXHJcbiJdfQ==