@ng-nest/ui 18.0.12 → 18.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,6 +50,11 @@ export class XTableProperty extends XPropertyFunction(X_TABLE_CONFIG_NAME) {
50
50
  * @en_US Whether to display the column headers
51
51
  */
52
52
  this.headerPosition = input(this.config?.headerPosition ?? 'top');
53
+ /**
54
+ * @zh_CN 列内容支持 innerHTML 渲染 html 标签
55
+ * @en_US Column content supports innerHTML rendering of HTML tags
56
+ */
57
+ this.bodyInnerHTML = input(this.config?.bodyInnerHTML ?? false, { transform: XToBoolean });
53
58
  /**
54
59
  * @zh_CN 当前选中行数据
55
60
  * @en_US Currently selected row data
@@ -410,7 +415,7 @@ export class XTableProperty extends XPropertyFunction(X_TABLE_CONFIG_NAME) {
410
415
  this.columnDragWidthEnded = output();
411
416
  }
412
417
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTableProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
413
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.2", type: XTableProperty, selector: "x-table-property", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, headerPosition: { classPropertyName: "headerPosition", publicName: "headerPosition", isSignal: true, isRequired: false, transformFunction: null }, activatedRow: { classPropertyName: "activatedRow", publicName: "activatedRow", isSignal: true, isRequired: false, transformFunction: null }, headColumnTpl: { classPropertyName: "headColumnTpl", publicName: "headColumnTpl", isSignal: true, isRequired: false, transformFunction: null }, headThTpl: { classPropertyName: "headThTpl", publicName: "headThTpl", isSignal: true, isRequired: false, transformFunction: null }, bodyColumnTpl: { classPropertyName: "bodyColumnTpl", publicName: "bodyColumnTpl", isSignal: true, isRequired: false, transformFunction: null }, bodyTdTpl: { classPropertyName: "bodyTdTpl", publicName: "bodyTdTpl", isSignal: true, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: true, isRequired: false, transformFunction: null }, headSearchTpl: { classPropertyName: "headSearchTpl", publicName: "headSearchTpl", isSignal: true, isRequired: false, transformFunction: null }, allowSelectRow: { classPropertyName: "allowSelectRow", publicName: "allowSelectRow", isSignal: true, isRequired: false, transformFunction: null }, allowCheckRow: { classPropertyName: "allowCheckRow", publicName: "allowCheckRow", isSignal: true, isRequired: false, transformFunction: null }, virtualScroll: { classPropertyName: "virtualScroll", publicName: "virtualScroll", isSignal: true, isRequired: false, transformFunction: null }, bodyHeight: { classPropertyName: "bodyHeight", publicName: "bodyHeight", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, minBufferPx: { classPropertyName: "minBufferPx", publicName: "minBufferPx", isSignal: true, isRequired: false, transformFunction: null }, maxBufferPx: { classPropertyName: "maxBufferPx", publicName: "maxBufferPx", isSignal: true, isRequired: false, transformFunction: null }, adaptionHeight: { classPropertyName: "adaptionHeight", publicName: "adaptionHeight", isSignal: true, isRequired: false, transformFunction: null }, docPercent: { classPropertyName: "docPercent", publicName: "docPercent", isSignal: true, isRequired: false, transformFunction: null }, checkedRow: { classPropertyName: "checkedRow", publicName: "checkedRow", isSignal: true, isRequired: false, transformFunction: null }, manual: { classPropertyName: "manual", publicName: "manual", isSignal: true, isRequired: false, transformFunction: null }, scroll: { classPropertyName: "scroll", publicName: "scroll", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, footer: { classPropertyName: "footer", publicName: "footer", isSignal: true, isRequired: false, transformFunction: null }, cellConfig: { classPropertyName: "cellConfig", publicName: "cellConfig", isSignal: true, isRequired: false, transformFunction: null }, rowSize: { classPropertyName: "rowSize", publicName: "rowSize", isSignal: true, isRequired: false, transformFunction: null }, paginationPosition: { classPropertyName: "paginationPosition", publicName: "paginationPosition", isSignal: true, isRequired: false, transformFunction: null }, hiddenWrapBorder: { classPropertyName: "hiddenWrapBorder", publicName: "hiddenWrapBorder", isSignal: true, isRequired: false, transformFunction: null }, hiddenPaginationBorder: { classPropertyName: "hiddenPaginationBorder", publicName: "hiddenPaginationBorder", isSignal: true, isRequired: false, transformFunction: null }, showPagination: { classPropertyName: "showPagination", publicName: "showPagination", isSignal: true, isRequired: false, transformFunction: null }, treeTable: { classPropertyName: "treeTable", publicName: "treeTable", isSignal: true, isRequired: false, transformFunction: null }, expandedAll: { classPropertyName: "expandedAll", publicName: "expandedAll", isSignal: true, isRequired: false, transformFunction: null }, expandedLevel: { classPropertyName: "expandedLevel", publicName: "expandedLevel", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, expandTpl: { classPropertyName: "expandTpl", publicName: "expandTpl", isSignal: true, isRequired: false, transformFunction: null }, showEmpty: { classPropertyName: "showEmpty", publicName: "showEmpty", isSignal: true, isRequired: false, transformFunction: null }, emptyImg: { classPropertyName: "emptyImg", publicName: "emptyImg", isSignal: true, isRequired: false, transformFunction: null }, emptyContent: { classPropertyName: "emptyContent", publicName: "emptyContent", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, pageLinkSize: { classPropertyName: "pageLinkSize", publicName: "pageLinkSize", isSignal: true, isRequired: false, transformFunction: null }, showEllipsis: { classPropertyName: "showEllipsis", publicName: "showEllipsis", isSignal: true, isRequired: false, transformFunction: null }, showTotal: { classPropertyName: "showTotal", publicName: "showTotal", isSignal: true, isRequired: false, transformFunction: null }, space: { classPropertyName: "space", publicName: "space", isSignal: true, isRequired: false, transformFunction: null }, showBackground: { classPropertyName: "showBackground", publicName: "showBackground", isSignal: true, isRequired: false, transformFunction: null }, showSize: { classPropertyName: "showSize", publicName: "showSize", isSignal: true, isRequired: false, transformFunction: null }, sizeWidth: { classPropertyName: "sizeWidth", publicName: "sizeWidth", isSignal: true, isRequired: false, transformFunction: null }, showInputSize: { classPropertyName: "showInputSize", publicName: "showInputSize", isSignal: true, isRequired: false, transformFunction: null }, inputSizeTooltipText: { classPropertyName: "inputSizeTooltipText", publicName: "inputSizeTooltipText", isSignal: true, isRequired: false, transformFunction: null }, inputSizeWidth: { classPropertyName: "inputSizeWidth", publicName: "inputSizeWidth", isSignal: true, isRequired: false, transformFunction: null }, sizeData: { classPropertyName: "sizeData", publicName: "sizeData", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showJump: { classPropertyName: "showJump", publicName: "showJump", isSignal: true, isRequired: false, transformFunction: null }, jumpTooltipText: { classPropertyName: "jumpTooltipText", publicName: "jumpTooltipText", isSignal: true, isRequired: false, transformFunction: null }, jumpWidth: { classPropertyName: "jumpWidth", publicName: "jumpWidth", isSignal: true, isRequired: false, transformFunction: null }, totalTpl: { classPropertyName: "totalTpl", publicName: "totalTpl", isSignal: true, isRequired: false, transformFunction: null }, simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null }, simpleIndexWidth: { classPropertyName: "simpleIndexWidth", publicName: "simpleIndexWidth", isSignal: true, isRequired: false, transformFunction: null }, inputIndexSizeSureType: { classPropertyName: "inputIndexSizeSureType", publicName: "inputIndexSizeSureType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activatedRow: "activatedRowChange", sortChange: "sortChange", headCheckboxChange: "headCheckboxChange", bodyCheckboxChange: "bodyCheckboxChange", manual: "manualChange", index: "indexChange", size: "sizeChange", total: "totalChange", query: "queryChange", rowClick: "rowClick", columnDragStarted: "columnDragStarted", columnDragEnded: "columnDragEnded", columnDropListDropped: "columnDropListDropped", columnDragWidthStarted: "columnDragWidthStarted", columnDragWidthMoved: "columnDragWidthMoved", columnDragWidthEnded: "columnDragWidthEnded" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
418
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.2", type: XTableProperty, selector: "x-table-property", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, headerPosition: { classPropertyName: "headerPosition", publicName: "headerPosition", isSignal: true, isRequired: false, transformFunction: null }, bodyInnerHTML: { classPropertyName: "bodyInnerHTML", publicName: "bodyInnerHTML", isSignal: true, isRequired: false, transformFunction: null }, activatedRow: { classPropertyName: "activatedRow", publicName: "activatedRow", isSignal: true, isRequired: false, transformFunction: null }, headColumnTpl: { classPropertyName: "headColumnTpl", publicName: "headColumnTpl", isSignal: true, isRequired: false, transformFunction: null }, headThTpl: { classPropertyName: "headThTpl", publicName: "headThTpl", isSignal: true, isRequired: false, transformFunction: null }, bodyColumnTpl: { classPropertyName: "bodyColumnTpl", publicName: "bodyColumnTpl", isSignal: true, isRequired: false, transformFunction: null }, bodyTdTpl: { classPropertyName: "bodyTdTpl", publicName: "bodyTdTpl", isSignal: true, isRequired: false, transformFunction: null }, rowClass: { classPropertyName: "rowClass", publicName: "rowClass", isSignal: true, isRequired: false, transformFunction: null }, headSearchTpl: { classPropertyName: "headSearchTpl", publicName: "headSearchTpl", isSignal: true, isRequired: false, transformFunction: null }, allowSelectRow: { classPropertyName: "allowSelectRow", publicName: "allowSelectRow", isSignal: true, isRequired: false, transformFunction: null }, allowCheckRow: { classPropertyName: "allowCheckRow", publicName: "allowCheckRow", isSignal: true, isRequired: false, transformFunction: null }, virtualScroll: { classPropertyName: "virtualScroll", publicName: "virtualScroll", isSignal: true, isRequired: false, transformFunction: null }, bodyHeight: { classPropertyName: "bodyHeight", publicName: "bodyHeight", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, minBufferPx: { classPropertyName: "minBufferPx", publicName: "minBufferPx", isSignal: true, isRequired: false, transformFunction: null }, maxBufferPx: { classPropertyName: "maxBufferPx", publicName: "maxBufferPx", isSignal: true, isRequired: false, transformFunction: null }, adaptionHeight: { classPropertyName: "adaptionHeight", publicName: "adaptionHeight", isSignal: true, isRequired: false, transformFunction: null }, docPercent: { classPropertyName: "docPercent", publicName: "docPercent", isSignal: true, isRequired: false, transformFunction: null }, checkedRow: { classPropertyName: "checkedRow", publicName: "checkedRow", isSignal: true, isRequired: false, transformFunction: null }, manual: { classPropertyName: "manual", publicName: "manual", isSignal: true, isRequired: false, transformFunction: null }, scroll: { classPropertyName: "scroll", publicName: "scroll", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, footer: { classPropertyName: "footer", publicName: "footer", isSignal: true, isRequired: false, transformFunction: null }, cellConfig: { classPropertyName: "cellConfig", publicName: "cellConfig", isSignal: true, isRequired: false, transformFunction: null }, rowSize: { classPropertyName: "rowSize", publicName: "rowSize", isSignal: true, isRequired: false, transformFunction: null }, paginationPosition: { classPropertyName: "paginationPosition", publicName: "paginationPosition", isSignal: true, isRequired: false, transformFunction: null }, hiddenWrapBorder: { classPropertyName: "hiddenWrapBorder", publicName: "hiddenWrapBorder", isSignal: true, isRequired: false, transformFunction: null }, hiddenPaginationBorder: { classPropertyName: "hiddenPaginationBorder", publicName: "hiddenPaginationBorder", isSignal: true, isRequired: false, transformFunction: null }, showPagination: { classPropertyName: "showPagination", publicName: "showPagination", isSignal: true, isRequired: false, transformFunction: null }, treeTable: { classPropertyName: "treeTable", publicName: "treeTable", isSignal: true, isRequired: false, transformFunction: null }, expandedAll: { classPropertyName: "expandedAll", publicName: "expandedAll", isSignal: true, isRequired: false, transformFunction: null }, expandedLevel: { classPropertyName: "expandedLevel", publicName: "expandedLevel", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, expandTpl: { classPropertyName: "expandTpl", publicName: "expandTpl", isSignal: true, isRequired: false, transformFunction: null }, showEmpty: { classPropertyName: "showEmpty", publicName: "showEmpty", isSignal: true, isRequired: false, transformFunction: null }, emptyImg: { classPropertyName: "emptyImg", publicName: "emptyImg", isSignal: true, isRequired: false, transformFunction: null }, emptyContent: { classPropertyName: "emptyContent", publicName: "emptyContent", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, pageLinkSize: { classPropertyName: "pageLinkSize", publicName: "pageLinkSize", isSignal: true, isRequired: false, transformFunction: null }, showEllipsis: { classPropertyName: "showEllipsis", publicName: "showEllipsis", isSignal: true, isRequired: false, transformFunction: null }, showTotal: { classPropertyName: "showTotal", publicName: "showTotal", isSignal: true, isRequired: false, transformFunction: null }, space: { classPropertyName: "space", publicName: "space", isSignal: true, isRequired: false, transformFunction: null }, showBackground: { classPropertyName: "showBackground", publicName: "showBackground", isSignal: true, isRequired: false, transformFunction: null }, showSize: { classPropertyName: "showSize", publicName: "showSize", isSignal: true, isRequired: false, transformFunction: null }, sizeWidth: { classPropertyName: "sizeWidth", publicName: "sizeWidth", isSignal: true, isRequired: false, transformFunction: null }, showInputSize: { classPropertyName: "showInputSize", publicName: "showInputSize", isSignal: true, isRequired: false, transformFunction: null }, inputSizeTooltipText: { classPropertyName: "inputSizeTooltipText", publicName: "inputSizeTooltipText", isSignal: true, isRequired: false, transformFunction: null }, inputSizeWidth: { classPropertyName: "inputSizeWidth", publicName: "inputSizeWidth", isSignal: true, isRequired: false, transformFunction: null }, sizeData: { classPropertyName: "sizeData", publicName: "sizeData", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showJump: { classPropertyName: "showJump", publicName: "showJump", isSignal: true, isRequired: false, transformFunction: null }, jumpTooltipText: { classPropertyName: "jumpTooltipText", publicName: "jumpTooltipText", isSignal: true, isRequired: false, transformFunction: null }, jumpWidth: { classPropertyName: "jumpWidth", publicName: "jumpWidth", isSignal: true, isRequired: false, transformFunction: null }, totalTpl: { classPropertyName: "totalTpl", publicName: "totalTpl", isSignal: true, isRequired: false, transformFunction: null }, simple: { classPropertyName: "simple", publicName: "simple", isSignal: true, isRequired: false, transformFunction: null }, simpleIndexWidth: { classPropertyName: "simpleIndexWidth", publicName: "simpleIndexWidth", isSignal: true, isRequired: false, transformFunction: null }, inputIndexSizeSureType: { classPropertyName: "inputIndexSizeSureType", publicName: "inputIndexSizeSureType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activatedRow: "activatedRowChange", sortChange: "sortChange", headCheckboxChange: "headCheckboxChange", bodyCheckboxChange: "bodyCheckboxChange", manual: "manualChange", index: "indexChange", size: "sizeChange", total: "totalChange", query: "queryChange", rowClick: "rowClick", columnDragStarted: "columnDragStarted", columnDragEnded: "columnDragEnded", columnDropListDropped: "columnDropListDropped", columnDragWidthStarted: "columnDragWidthStarted", columnDragWidthMoved: "columnDragWidthMoved", columnDragWidthEnded: "columnDragWidthEnded" }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
414
419
  }
415
420
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XTableProperty, decorators: [{
416
421
  type: Component,
@@ -621,4 +626,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
621
626
  type: Component,
622
627
  args: [{ selector: `${XTableFootPrefix}-property`, template: '' }]
623
628
  }] });
624
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS90YWJsZS90YWJsZS5wcm9wZXJ0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFNBQVMsRUFDVCxjQUFjLEVBQ2YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFlLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBcUMsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFnQmhHOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQ3RDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0FBRXBDOztHQUVHO0FBRUgsTUFBTSxPQUFPLGNBQWUsU0FBUSxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQztJQUQxRTs7UUFFRTs7O1dBR0c7UUFDTSxTQUFJLEdBQUcsS0FBSyxDQUFxQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUM3Rjs7O1dBR0c7UUFDTSxZQUFPLEdBQUcsS0FBSyxDQUFpQixFQUFFLENBQUMsQ0FBQztRQUM3Qzs7O1dBR0c7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFrQixJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRzs7O1dBR0c7UUFDTSxZQUFPLEdBQUcsS0FBSyxDQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN0Rzs7O1dBR0c7UUFD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QUU7O0FBd0dyRTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBRS9DOztHQUVHO0FBRUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQVM7SUFEakQ7O1FBRUU7OztXQUdHO1FBQ00sV0FBTSxHQUFHLEtBQUssRUFBYSxDQUFDO1FBQ3JDOzs7V0FHRztRQUNNLGNBQVMsR0FBRyxLQUFLLENBQXlCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ3BGO2lJQVhZLGtCQUFrQjtxSEFBbEIsa0JBQWtCLCtWQURrQyxFQUFFOzsyRkFDdEQsa0JBQWtCO2tCQUQ5QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsZ0JBQWdCLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBYUHJvcGVydHksXHJcbiAgWFByb3BlcnR5RnVuY3Rpb24sXHJcbiAgWFRvQ3NzUGl4ZWxWYWx1ZSxcclxuICBYVG9Cb29sZWFuLFxyXG4gIFhUb051bWJlcixcclxuICBYVG9EYXRhQ29udmVydFxyXG59IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIFRlbXBsYXRlUmVmLCBpbnB1dCwgbW9kZWwsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYUGFnaW5hdGlvbklucHV0SW5kZXhTaXplU3VyZVR5cGUsIFhQYWdpbmF0aW9uU2l6ZURhdGEgfSBmcm9tICdAbmctbmVzdC91aS9wYWdpbmF0aW9uJztcclxuaW1wb3J0IHsgWFNlbGVjdE5vZGUgfSBmcm9tICdAbmctbmVzdC91aS9zZWxlY3QnO1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgWE51bWJlcixcclxuICBYU29ydCxcclxuICBYQm9vbGVhbixcclxuICBYRGF0YSxcclxuICBYVGV4dEFsaWduLFxyXG4gIFhTaXplLFxyXG4gIFhQYXJlbnRJZGVudGl0eVByb3BlcnR5LFxyXG4gIFhJZGVudGl0eVByb3BlcnR5LFxyXG4gIFhUZW1wbGF0ZSxcclxuICBYUXVlcnksXHJcbiAgWERhdGFBcnJheVxyXG59IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIFRhYmxlXHJcbiAqIEBzZWxlY3RvciB4LXRhYmxlXHJcbiAqIEBkZWNvcmF0b3IgY29tcG9uZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgWFRhYmxlUHJlZml4ID0gJ3gtdGFibGUnO1xyXG5jb25zdCBYX1RBQkxFX0NPTkZJR19OQU1FID0gJ3RhYmxlJztcclxuXHJcbi8qKlxyXG4gKiBUYWJsZSBQcm9wZXJ0eVxyXG4gKi9cclxuQENvbXBvbmVudCh7IHNlbGVjdG9yOiBgJHtYVGFibGVQcmVmaXh9LXByb3BlcnR5YCwgdGVtcGxhdGU6ICcnIH0pXHJcbmV4cG9ydCBjbGFzcyBYVGFibGVQcm9wZXJ0eSBleHRlbmRzIFhQcm9wZXJ0eUZ1bmN0aW9uKFhfVEFCTEVfQ09ORklHX05BTUUpIHtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGM5pWw5o2uXHJcbiAgICogQGVuX1VTIFJvdyBkYXRhXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZGF0YSA9IGlucHV0PFhEYXRhPFhUYWJsZVJvdz4sIFhEYXRhPFhUYWJsZVJvdz4+KFtdLCB7IHRyYW5zZm9ybTogWFRvRGF0YUNvbnZlcnQgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIl+mbhuWQiFxyXG4gICAqIEBlbl9VUyBDb2x1bW4gc2V0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY29sdW1ucyA9IGlucHV0PFhUYWJsZUNvbHVtbltdPihbXSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihqOWktOWSjOihjOmrmO+8jOWNleS9jSBweFxyXG4gICAqIEBlbl9VUyBIZWFkZXIgYW5kIHJvdyBoZWlnaHQsIHVuaXQgcHhcclxuICAgKi9cclxuICByZWFkb25seSByb3dIZWlnaHQgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KHRoaXMuY29uZmlnPy5yb3dIZWlnaHQgPz8gNDIsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYr+WQpuWQr+eUqOWKoOi9vSBsb2FkaW5nXHJcbiAgICogQGVuX1VTIFdoZXRoZXIgdG8gZW5hYmxlIGxvYWRpbmdcclxuICAgKi9cclxuICByZWFkb25seSBsb2FkaW5nID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5sb2FkaW5nID8/IGZhbHNlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5piv5ZCm5bGV56S65YiX6L655qGGXHJcbiAgICogQGVuX1VTIFdoZXRoZXIgdG8gc2hvdyBjb2x1bW4gYm9yZGVyc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGJvcmRlcmVkID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5ib3JkZXJlZCA/PyBmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYr+WQpuaYvuekuuWIl+WktFxyXG4gICAqIEBlbl9VUyBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGNvbHVtbiBoZWFkZXJzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2hvd0hlYWRlciA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uc2hvd0hlYWRlciA/PyB0cnVlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiX5aS05pi+56S65L2N572uXHJcbiAgICogQGVuX1VTIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgY29sdW1uIGhlYWRlcnNcclxuICAgKi9cclxuICByZWFkb25seSBoZWFkZXJQb3NpdGlvbiA9IGlucHV0PFhUYWJsZUhlYWRlclBvc2l0aW9uPih0aGlzLmNvbmZpZz8uaGVhZGVyUG9zaXRpb24gPz8gJ3RvcCcpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlvZPliY3pgInkuK3ooYzmlbDmja5cclxuICAgKiBAZW5fVVMgQ3VycmVudGx5IHNlbGVjdGVkIHJvdyBkYXRhXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYWN0aXZhdGVkUm93ID0gbW9kZWw8WFRhYmxlUm93PigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJflpLToh6rlrprkuYnmqKHmnb/vvIzpgJrov4cga2V5LXZhbHVlIOeahOaWueW8j+aMh+Wumuavj+WIl+eahOaooeeJiFxyXG4gICAqIEBlbl9VUyBDb2x1bW4gaGVhZGVyIGN1c3RvbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGhlYWRDb2x1bW5UcGwgPSBpbnB1dDxYVGFibGVUZW1wbGF0ZT4oe30pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJflpLTljZXlhYPmoLzoh6rlrprkuYnmqKHmnb/vvIzkvJjlhYjnuqfkvY7kuo7liJflpLToh6rlrprkuYnmqKHmnb9cclxuICAgKiBAZW5fVVMgQ29sdW1uIGhlYWRlciBjdXN0b20gdGVtcGxhdGVcclxuICAgKi9cclxuICByZWFkb25seSBoZWFkVGhUcGwgPSBpbnB1dDxYVGVtcGxhdGU+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIl+WGheWuueiHquWumuS5ieaooeadv++8jOmAmui/hyBrZXktdmFsdWUg55qE5pa55byP5oyH5a6a5q+P5YiX55qE5qih54mIXHJcbiAgICogQGVuX1VTIENvbHVtbiBjb250ZW50IGN1c3RvbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGJvZHlDb2x1bW5UcGwgPSBpbnB1dDxYVGFibGVUZW1wbGF0ZT4oe30pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDljZXlhYPmoLznmoToh6rlrprkuYnmqKHmnb/vvIzkvJjlhYjnuqfkvY7kuo7liJflhoXlrrnoh6rlrprkuYnmqKHmnb9cclxuICAgKiBAZW5fVVMgQ3VzdG9tIHRlbXBsYXRlIG9mIGNlbGxzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYm9keVRkVHBsID0gaW5wdXQ8WFRlbXBsYXRlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDooYzmnaHku7bmoLflvI9cclxuICAgKiBAZW5fVVMgUm93IGNvbmRpdGlvbiBjbGFzc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHJvd0NsYXNzID0gaW5wdXQ8KHJvdzogWFRhYmxlUm93LCBpbmRleDogbnVtYmVyKSA9PiB7IFtjbGFzc05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiX5aS05pCc57Si6Ieq5a6a5LmJ5qih5p2/XHJcbiAgICogQGVuX1VTIExpbmUgaGVhZCBzZWFyY2ggY3VzdG9tIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGVhZFNlYXJjaFRwbCA9IGlucHV0PFhUZW1wbGF0ZT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5o6S5bqP54K55Ye755qE5LqL5Lu2XHJcbiAgICogQGVuX1VTIFNvcnQgY2xpY2sgZXZlbnRzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc29ydENoYW5nZSA9IG91dHB1dDxYU29ydFtdPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJflpLQgY2hlY2tib3gg5LqL5Lu2XHJcbiAgICogQGVuX1VTIGhlYWQgY2hlY2tib3ggZXZlbnRcclxuICAgKi9cclxuICByZWFkb25seSBoZWFkQ2hlY2tib3hDaGFuZ2UgPSBvdXRwdXQ8WFRhYmxlSGVhZENoZWNrYm94PigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiBib2R5IGNoZWNrYm94IOS6i+S7tlxyXG4gICAqIEBlbl9VUyBoZWFkIGNoZWNrYm94IGV2ZW50XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYm9keUNoZWNrYm94Q2hhbmdlID0gb3V0cHV0PFhUYWJsZVJvdz4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YWB6K646KGM54K55Ye76YCJ5Lit5b2T5YmN6KGMXHJcbiAgICogQGVuX1VTIEFsbG93IHJvdyBjbGljayB0byBzZWxlY3RcclxuICAgKi9cclxuICByZWFkb25seSBhbGxvd1NlbGVjdFJvdyA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uYWxsb3dTZWxlY3RSb3cgPz8gdHJ1ZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWFgeiuuOihjOeCueWHu+mAieS4rSBjaGVja2JveFxyXG4gICAqIEBlbl9VUyBBbGxvdyBsaW5lcyB0byBjbGljayBjaGVja2JveFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGFsbG93Q2hlY2tSb3cgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LmFsbG93Q2hlY2tSb3cgPz8gdHJ1ZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOW8gOWQr+iZmuaLn+a7muWKqFxyXG4gICAqIEBlbl9VUyBUdXJuIG9uIHZpcnR1YWwgc2Nyb2xsaW5nXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgdmlydHVhbFNjcm9sbCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8udmlydHVhbFNjcm9sbCA/PyBmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIGJvZHkg5pWw5o2u6auY5bqm77yM5Y+q5pyJ5byA5ZCv6Jma5ouf5rua5Yqo55qE5pe25YCZ55Sf5pWIXHJcbiAgICogQGVuX1VTIGJvZHkgZGF0YSBoZWlnaHRcclxuICAgKi9cclxuICByZWFkb25seSBib2R5SGVpZ2h0ID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkLCBYTnVtYmVyPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIGl0ZW1TaXpl77yM5a+55bqUIGNkayBzY3JvbGwg5Lit55qE5Y+C5pWwXHJcbiAgICogQGVuX1VTIGl0ZW1TaXpl77yMY29ycmVzcG9uZGluZyB0byB0aGUgcGFyYW1ldGVycyBpbiBjZGsgc2Nyb2xsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaXRlbVNpemUgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KHRoaXMuY29uZmlnPy5pdGVtU2l6ZSA/PyA0MiwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6LaF5Ye65Y+v6KeG56qX5Y+j57yT5Yay5Yy655qE5pyA5bCP5YC877yM5a+55bqUIGNkayBzY3JvbGwg5Lit55qE5Y+C5pWwXHJcbiAgICogQGVuX1VTIEV4Y2VlZCB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgdmlzaWJsZSB3aW5kb3cgYnVmZmVyLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIGluIGNkayBzY3JvbGxcclxuICAgKi9cclxuICByZWFkb25seSBtaW5CdWZmZXJQeCA9IGlucHV0PG51bWJlciwgWE51bWJlcj4oMTAwLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmuLLmn5PmlrDmlbDmja7nvJPlhrLljLrnmoTlg4/ntKDvvIzlr7nlupQgY2RrIHNjcm9sbCDkuK3nmoTlj4LmlbBcclxuICAgKiBAZW5fVVMgUmVuZGVyIHRoZSBwaXhlbHMgb2YgdGhlIG5ldyBkYXRhIGJ1ZmZlciwgY29ycmVzcG9uZGluZyB0byB0aGUgcGFyYW1ldGVycyBpbiBjZGsgc2Nyb2xsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgbWF4QnVmZmVyUHggPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDIwMCwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6Ieq6YCC5bqU6auY5bqm77yMdGFibGUg6auY5bqm562J5LqO5bGP5bmV6auY5bqm5YeP5o6J5q2k5aSE6K6+572u55qE5pWw5YC8XHJcbiAgICogQGVuX1VTIEFkYXB0aXZlIGhlaWdodCwgdGFibGUgaGVpZ2h0IGlzIGVxdWFsIHRvIHRoZSBzY3JlZW4gaGVpZ2h0IG1pbnVzIHRoZSB2YWx1ZSBzZXQgaGVyZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGFkYXB0aW9uSGVpZ2h0ID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkLCBYTnVtYmVyPih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaWh+aho+mrmOW6pueZvuWIhuavlO+8jOW8ueeql+eZvuWIhuavlOmrmOW6pueUqOWIsFxyXG4gICAqIEBlbl9VUyBEb2N1bWVudCBoZWlnaHQgcGVyY2VudGFnZSwgdXNlZCBieSBwb3AtdXAgd2luZG93IHBlcmNlbnRhZ2UgaGVpZ2h0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZG9jUGVyY2VudCA9IGlucHV0PG51bWJlciwgWE51bWJlcj4oMSwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04gY2hlY2tib3gg5YiX5Yid5aeL6YCJ5Lit55qE5pWw5o2u77yM5YiX5Lit5r+A5rS7IGNoZWNrYm94XHJcbiAgICogQGVuX1VTIENoZWNrYm94IGNvbHVtbiBpbml0aWFsbHkgc2VsZWN0ZWQgZGF0YSwgY2hlY2tib3ggaXMgYWN0aXZhdGVkIGluIGNvbHVtblxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNoZWNrZWRSb3cgPSBpbnB1dDx7IFtwcm9wZXJ0eTogc3RyaW5nXTogYW55W10gfT4oe30pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlpoLmnpwgZGF0YSDmmK/lh73mlbDnsbvlnovvvIzlj6/ku6XpgJrov4fmraTlj4LmlbDmjqfliLbor7fmsYLvvIzluLjnlKjkuo7lvLnmoYbkuK3nmoTooajmoLzvvIzlvLnlh7rlkI7lho3or7fmsYJcclxuICAgKiBAZW5fVVMgSWYgZGF0YSBpcyBhIGZ1bmN0aW9uIHR5cGUsIHlvdSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGNvbnRyb2wgdGhlIHJlcXVlc3QsIHdoaWNoIGlzIG9mdGVuIHVzZWQgaW4gdGhlIGZvcm0gaW4gdGhlIHBvcC11cCBib3gsIGFuZCB0aGVuIHJlcXVlc3QgaXQgYWZ0ZXIgaXQgcG9wcyB1cFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IG1hbnVhbCA9IG1vZGVsPGJvb2xlYW4+KHRydWUpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmu5rliqjljLrln5/pq5jlrr1cclxuICAgKiBAZW5fVVMgSGVpZ2h0IGFuZCB3aWR0aCBvZiByb2xsaW5nIGFyZWFcclxuICAgKi9cclxuICByZWFkb25seSBzY3JvbGwgPSBpbnB1dDx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihqOagvOmhteWktFxyXG4gICAqIEBlbl9VUyBUYWJsZSBoZWFkZXJcclxuICAgKi9cclxuICByZWFkb25seSBoZWFkZXIgPSBpbnB1dDxYVGVtcGxhdGU+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihqOagvOmhteWwvlxyXG4gICAqIEBlbl9VUyBUYWJsZSBmb290ZXJcclxuICAgKi9cclxuICByZWFkb25seSBmb290ZXIgPSBpbnB1dDxYVGVtcGxhdGU+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWNleWFg+agvOmFjee9rlxyXG4gICAqIEBlbl9VUyBDZWxsIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNlbGxDb25maWcgPSBpbnB1dDxYVGFibGVDZWxsQ29uZmlnPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlsLrlr7hcclxuICAgKiBAZW5fVVMgU2l6ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHJvd1NpemUgPSBpbnB1dDxYU2l6ZT4odGhpcy5jb25maWc/LnJvd1NpemUgPz8gJ21lZGl1bScpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliIbpobXlmajkvY3nva5cclxuICAgKiBAZW5fVVMgUGFnaW5hdGlvbiBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHBhZ2luYXRpb25Qb3NpdGlvbiA9IGlucHV0PFhQYWdpbmF0aW9uUG9zaXRpb24+KCdib3R0b20tbGVmdCcpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDpmpDol4/ooajmoLzlpJbovrnmoYZcclxuICAgKiBAZW5fVVMgSGlkZGVuIHRhYmxlIHdyYXAgYm9yZGVyXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGlkZGVuV3JhcEJvcmRlciA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uaGlkZGVuV3JhcEJvcmRlciA/PyBmYWxzZSwge1xyXG4gICAgdHJhbnNmb3JtOiBYVG9Cb29sZWFuXHJcbiAgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOmakOiXj+WIhumhteWZqOaMiemSrui+ueahhlxyXG4gICAqIEBlbl9VUyBIaWRkZW4gcGFnaW5hdGlvbiBidXR0b24gYm9yZGVyXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGlkZGVuUGFnaW5hdGlvbkJvcmRlciA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uaGlkZGVuUGFnaW5hdGlvbkJvcmRlciA/PyBmYWxzZSwge1xyXG4gICAgdHJhbnNmb3JtOiBYVG9Cb29sZWFuXHJcbiAgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYvuekuuWIhumhteWZqFxyXG4gICAqIEBlbl9VUyBQYWdpbmF0aW9uIHBvc2l0aW9uXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2hvd1BhZ2luYXRpb24gPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnNob3dQYWdpbmF0aW9uID8/IHRydWUsIHtcclxuICAgIHRyYW5zZm9ybTogWFRvQm9vbGVhblxyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmoJHlvaLooajmoLxcclxuICAgKiBAZW5fVVMgVHJlZSB0YWJsZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHRyZWVUYWJsZSA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8udHJlZVRhYmxlID8/IGZhbHNlLCB7XHJcbiAgICB0cmFuc2Zvcm06IFhUb0Jvb2xlYW5cclxuICB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5qCR5b2i6KGo5qC85bGV5byA5omA5pyJ6IqC54K5XHJcbiAgICogQGVuX1VTIFRyZWUgdGFibGVcclxuICAgKi9cclxuICByZWFkb25seSBleHBhbmRlZEFsbCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uZXhwYW5kZWRBbGwgPz8gZmFsc2UsIHtcclxuICAgIHRyYW5zZm9ybTogWFRvQm9vbGVhblxyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDpu5jorqTlsZXlvIDnmoTlsYLnuqfvvIwtMSDkuI3lsZXlvIBcclxuICAgKiBAZW5fVVMgRGVmYXVsdCBleHBhbmRlZCBsZXZlbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGV4cGFuZGVkTGV2ZWwgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KHRoaXMuY29uZmlnPy5leHBhbmRlZExldmVsID8/IC0xLCB7XHJcbiAgICB0cmFuc2Zvcm06IFhUb051bWJlclxyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlsZXlvIDnmoToioLngrlcclxuICAgKiBAZW5fVVMgRXhwYW5kZWQgbm9kZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGV4cGFuZGVkID0gaW5wdXQ8YW55W10+KFtdKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6Ieq5a6a5LmJ5bGV5byA5YaF5a65XHJcbiAgICogQGVuX1VTIEN1c3RvbWl6ZWQgZXhwYW5zaW9uIGNvbnRlbnRcclxuICAgKi9cclxuICByZWFkb25seSBleHBhbmRUcGwgPSBpbnB1dDxYVGVtcGxhdGU+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYvuekuuaVsOaNruS4uuepuueahOaPkOekulxyXG4gICAqIEBlbl9VUyBEaXNwbGF5IGEgcHJvbXB0IHdpdGggZW1wdHkgZGF0YVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNob3dFbXB0eSA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uc2hvd0VtcHR5ID8/IHRydWUsIHtcclxuICAgIHRyYW5zZm9ybTogWFRvQm9vbGVhblxyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmlbDmja7kuLrnqbrnmoTmj5DnpLrlm77niYflnLDlnYDmiJboh6rlrprkuYnmqKHmnb9cclxuICAgKiBAZW5fVVMgUGljdHVyZSBhZGRyZXNzIG9yIGN1c3RvbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGVtcHR5SW1nID0gaW5wdXQ8WFRlbXBsYXRlIHwgdW5kZWZpbmVkPih0aGlzLmNvbmZpZz8uZW1wdHlJbWcgPz8gdW5kZWZpbmVkKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5pWw5o2u5Li656m655qE5o+Q56S65YaF5a655oiW6Ieq5a6a5LmJ5qih5p2/XHJcbiAgICogQGVuX1VTIENvbnRlbnQgb3IgY3VzdG9tIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZW1wdHlDb250ZW50ID0gaW5wdXQ8WFRlbXBsYXRlIHwgdW5kZWZpbmVkPih0aGlzLmNvbmZpZz8uZW1wdHlDb250ZW50ID8/IHVuZGVmaW5lZCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOW9k+WJjemhteeggVxyXG4gICAqIEBlbl9VUyBDdXJyZW50IHBhZ2UgbnVtYmVyXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaW5kZXggPSBtb2RlbDxudW1iZXI+KHRoaXMuY29uZmlnPy5pbmRleCA/PyAxKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5q+P6aG15pi+56S65p2h5pWwXHJcbiAgICogQGVuX1VTIE51bWJlciBvZiBpdGVtcyBkaXNwbGF5ZWQgcGVyIHBhZ2VcclxuICAgKi9cclxuICByZWFkb25seSBzaXplID0gbW9kZWw8bnVtYmVyPih0aGlzLmNvbmZpZz8uc2l6ZSA/PyAxMCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaAu+aVsFxyXG4gICAqIEBlbl9VUyBUb3RhbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHRvdGFsID0gbW9kZWw8bnVtYmVyPigwKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5p+l6K+i5p2h5Lu2XHJcbiAgICogQGVuX1VTIFF1ZXJ5IGNvbmRpdGlvbnNcclxuICAgKi9cclxuICByZWFkb25seSBxdWVyeSA9IG1vZGVsPFhRdWVyeT4oe30pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmnIDlpJrmmL7npLrnmoTliIbpobXmlbDph49cclxuICAgKiBAZW5fVVMgVGhlIGxhcmdlc3QgbnVtYmVyIG9mIHBhZ2VzIGRpc3BsYXlcclxuICAgKi9cclxuICByZWFkb25seSBwYWdlTGlua1NpemUgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KHRoaXMuY29uZmlnPy5wYWdlTGlua1NpemUgPz8gNSwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5pi+56S66aaW5bC+6aG16Lez6L2sXHJcbiAgICogQGVuX1VTIERpc3BsYXkgdGhlIGZpcnN0IGFuZCBsYXN0IHBhZ2VcclxuICAgKi9cclxuICByZWFkb25seSBzaG93RWxsaXBzaXMgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnNob3dFbGxpcHNpcyA/PyB0cnVlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5pi+56S65oC75p2h5pWwXHJcbiAgICogQGVuX1VTIERpc3BsYXkgdGhlIHRvdGFsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2hvd1RvdGFsID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5zaG93VG90YWwgPz8gdHJ1ZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaMiemSrumXtOi3nVxyXG4gICAqIEBlbl9VUyBCdXR0b24gc3BhY2luZ1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNwYWNlID0gaW5wdXQ8c3RyaW5nLCBYTnVtYmVyPih0aGlzLmNvbmZpZz8uc3BhY2UgPz8gJzAuMjVyZW0nLCB7IHRyYW5zZm9ybTogWFRvQ3NzUGl4ZWxWYWx1ZSB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5re75Yqg6IOM5pmv6ImyXHJcbiAgICogQGVuX1VTIFNob3cgYmFja2dyb3VuZFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNob3dCYWNrZ3JvdW5kID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5zaG93QmFja2dyb3VuZCA/PyBmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYvuekuuWIhumhteadoeaVsFxyXG4gICAqIEBlbl9VUyBTaG93IHNpemVcclxuICAgKi9cclxuICByZWFkb25seSBzaG93U2l6ZSA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uc2hvd1NpemUgPz8gZmFsc2UsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliIbpobXmnaHmlbDpgInmi6nmoYbnmoTlrr3luqZcclxuICAgKiBAZW5fVVMgc2l6ZSB3aXRoIHNlbGVjdFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNpemVXaWR0aCA9IGlucHV0PHN0cmluZywgWE51bWJlcj4odGhpcy5jb25maWc/LnNpemVXaWR0aCA/PyAnNi44NzVyZW0nLCB7IHRyYW5zZm9ybTogWFRvQ3NzUGl4ZWxWYWx1ZSB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5pi+56S66L6T5YWl5YiG6aG15p2h5pWw77yI5LiN6IO96Lef5LiL5ouJ6YCJ6aG55ZCM5pe25L2/55So77yJXHJcbiAgICogQGVuX1VTIERpc3BsYXkgdGhlIG51bWJlciBvZiBpbnB1dCBwYWdlIGJyZWFrcyAoY2Fubm90IGV4aXN0IHdpdGggdGhlIGRyb3AtZG93biBvcHRpb25zIG9mIHBhZ2UgYnJlYWtzKVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNob3dJbnB1dFNpemUgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnNob3dJbnB1dFNpemUgPz8gZmFsc2UsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDovpPlhaXliIbpobXmoYbnmoQgdG9vbHRpcCDmj5DnpLrkv6Hmga/vvIzpu5jorqTmoLnmja7ovpPlhaXnoa7orqTmlLnlj5jnmoTmlrnlvI/mnaXmmL7npLpcclxuICAgKiBAZW5fVVMgRW50ZXIgdGhlIHRvb2x0aXAgcHJvbXB0IGluZm9ybWF0aW9uIGZvciB0aGUgcGFnaW5hdGlvbiBib3gsIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkIGJ5IGRlZmF1bHQgYmFzZWQgb24gdGhlIGNvbmZpcm1hdGlvbiBvZiB0aGUgaW5wdXRcclxuICAgKi9cclxuICByZWFkb25seSBpbnB1dFNpemVUb29sdGlwVGV4dCA9IGlucHV0PHN0cmluZz4odGhpcy5jb25maWc/LmlucHV0U2l6ZVRvb2x0aXBUZXh0ID8/ICcnKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiG6aG15p2h5pWw6L6T5YWl5qGG55qE5a695bqmXHJcbiAgICogQGVuX1VTIHNpemUgd2l0aCBpbnB1dFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGlucHV0U2l6ZVdpZHRoID0gaW5wdXQ8c3RyaW5nLCBYTnVtYmVyPih0aGlzLmNvbmZpZz8uc2l6ZVdpZHRoID8/ICczLjEyNXJlbScsIHtcclxuICAgIHRyYW5zZm9ybTogWFRvQ3NzUGl4ZWxWYWx1ZVxyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliIbpobXpgInmi6nnmoTmlbDmja7poblcclxuICAgKiBAZW5fVVMgUGFnaW5nIGNob29zZSBpdGVtcyBvZiBkYXRhXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2l6ZURhdGEgPSBpbnB1dDxYRGF0YUFycmF5PFhTZWxlY3ROb2RlPj4odGhpcy5jb25maWc/LnNpemVEYXRhID8/IFhQYWdpbmF0aW9uU2l6ZURhdGEpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDnpoHnlKjmlbTkuKrliIbpobVcclxuICAgKiBAZW5fVVMgZGlzYWJsZWRcclxuICAgKi9cclxuICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPihmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYvuekuui3s+i9rOi+k+WFpeahhlxyXG4gICAqIEBlbl9VUyBTaG93IHNpemVcclxuICAgKi9cclxuICByZWFkb25seSBzaG93SnVtcCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPihmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOi3s+i9rOi+k+WFpeahhueahCB0b29sdGlwIOaPkOekuuS/oeaBr++8jOm7mOiupOagueaNrui+k+WFpeehruiupOaUueWPmOeahOaWueW8j+adpeaYvuekulxyXG4gICAqIEBlbl9VUyBUaGUgdG9vbHRpcCBwcm9tcHQgaW5mb3JtYXRpb24gZm9yIGp1bXBpbmcgdG8gdGhlIGlucHV0IGJveCBpcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdCBiYXNlZCBvbiB0aGUgY29uZmlybWF0aW9uIG9mIGlucHV0IGNoYW5nZXNcclxuICAgKi9cclxuICByZWFkb25seSBqdW1wVG9vbHRpcFRleHQgPSBpbnB1dDxzdHJpbmc+KHRoaXMuY29uZmlnPy5qdW1wVG9vbHRpcFRleHQgPz8gJycpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDot7PovazpobXnmoTlrr3luqZcclxuICAgKiBAZW5fVVMgc2l6ZSB3aXRoXHJcbiAgICovXHJcbiAgcmVhZG9ubHkganVtcFdpZHRoID0gaW5wdXQ8c3RyaW5nLCBYTnVtYmVyPih0aGlzLmNvbmZpZz8uanVtcFdpZHRoID8/ICczLjEyNXJlbScsIHsgdHJhbnNmb3JtOiBYVG9Dc3NQaXhlbFZhbHVlIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmgLvmlbDoh6rlrprkuYnmqKHmnb9cclxuICAgKiBAZW5fVVMgVG90YWwgdGVtcGxhdGVcclxuICAgKi9cclxuICByZWFkb25seSB0b3RhbFRwbCA9IGlucHV0PFhUZW1wbGF0ZT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g566A5Y2V5YiG6aG1XHJcbiAgICogQGVuX1VTIFNpbXBsZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNpbXBsZSA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uc2ltcGxlID8/IGZhbHNlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g566A5Y2V5YiG6aG16L6T5YWl5qGG5a695bqmXHJcbiAgICogQGVuX1VTIFNpbXBsZSBpbmRleCB3aXRoXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2ltcGxlSW5kZXhXaWR0aCA9IGlucHV0PHN0cmluZywgWE51bWJlcj4odGhpcy5jb25maWc/LnNpbXBsZUluZGV4V2lkdGggPz8gJzguMTI1cmVtJywge1xyXG4gICAgdHJhbnNmb3JtOiBYVG9Dc3NQaXhlbFZhbHVlXHJcbiAgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOi+k+WFpeehruiupOaUueWPmOeahOaWueW8j++8jOmSiOWvuei+k+WFpeWIhumhteWkp+Wwj+WSjOi+k+WFpei3s+i9rOmhtVxyXG4gICAqIEBlbl9VUyBUaGUgbWV0aG9kIGZvciBjb25maXJtaW5nIGNoYW5nZXMgaW4gaW5wdXQgaXMgYmFzZWQgb24gdGhlIGlucHV0IHBhZ2Ugc2l6ZSBhbmQgaW5wdXQganVtcCBwYWdlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaW5wdXRJbmRleFNpemVTdXJlVHlwZSA9IGlucHV0PFhQYWdpbmF0aW9uSW5wdXRJbmRleFNpemVTdXJlVHlwZT4oXHJcbiAgICB0aGlzLmNvbmZpZz8uaW5wdXRJbmRleFNpemVTdXJlVHlwZSA/PyAnZW50ZXInXHJcbiAgKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGM54K55Ye75LqL5Lu2XHJcbiAgICogQGVuX1VTIFJvdyBjbGljayBldmVudFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHJvd0NsaWNrID0gb3V0cHV0PFhUYWJsZVJvdz4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiX5aS05ouW5Yqo5byA5aeL5LqL5Lu277yM6L+U5Zue5ouW5Yqo55qE5YiXXHJcbiAgICogQGVuX1VTIENvbHVtbiBIZWFkZXIgRHJhZyBFbmQgRXZlbnRcclxuICAgKi9cclxuICByZWFkb25seSBjb2x1bW5EcmFnU3RhcnRlZCA9IG91dHB1dDxYVGFibGVDb2x1bW4+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIl+WktOaLluWKqOe7k+adn+S6i+S7tu+8jOi/lOWbnuaLluWKqOeahOWIl1xyXG4gICAqIEBlbl9VUyBUaGUgY29sdW1uIGhlYWRlciBpcyBkcmFnZ2luZywgYW5kIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgb3JkZXIgaXMgY2hhbmdlZFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtbkRyYWdFbmRlZCA9IG91dHB1dDxYVGFibGVDb2x1bW4+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOW9k+eUqOaIt+aKiuS4gOS4quadoeebruaKleaUvui/m+ivpeWuueWZqOaXtuWwseS8muinpuWPke+8jOaLluWKqOaUvuW8gOeahOS6i+S7tu+8jOi/lOWbnuaLluWKqOaOkuW6j+WQjueahOWIl+aVsOaNrlxyXG4gICAqIEBlbl9VUyBUaGUgY29sdW1uIGhlYWRlciBpcyBkcmFnZ2luZywgYW5kIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgb3JkZXIgaXMgY2hhbmdlZFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtbkRyb3BMaXN0RHJvcHBlZCA9IG91dHB1dDxYVGFibGVDb2x1bW5bXT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5byA5aeL5ouW5Yqo5YiX5a6955qE5LqL5Lu2XHJcbiAgICogQGVuX1VTIEV2ZW50IHRvIHN0YXJ0ZWQgZHJhZyBjb2x1bW4gd2lkdGhcclxuICAgKi9cclxuICByZWFkb25seSBjb2x1bW5EcmFnV2lkdGhTdGFydGVkID0gb3V0cHV0PFhUYWJsZURyYWdXaWR0aEV2ZW50PigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmraPlnKjmi5bliqjliJflrr3ml7bnmoTkuovku7ZcclxuICAgKiBAZW5fVVMgRXZlbnQgdG8gbW92ZWQgZHJhZyBjb2x1bW4gd2lkdGhcclxuICAgKi9cclxuICByZWFkb25seSBjb2x1bW5EcmFnV2lkdGhNb3ZlZCA9IG91dHB1dDxYVGFibGVEcmFnV2lkdGhFdmVudD4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g57uT5p2f5ouW5Yqo5YiX5a6955qE5LqL5Lu2XHJcbiAgICogQGVuX1VTIEV2ZW50IHRvIGVuZGVkIGRyYWcgY29sdW1uIHdpZHRoXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY29sdW1uRHJhZ1dpZHRoRW5kZWQgPSBvdXRwdXQ8WFRhYmxlRHJhZ1dpZHRoRXZlbnQ+KCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAemhfQ04g6KGM5pWw5o2uXHJcbiAqIEBlbl9VUyBSb3cgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBYVGFibGVSb3cgZXh0ZW5kcyBYUGFyZW50SWRlbnRpdHlQcm9wZXJ0eTxYVGFibGVSb3c+IHtcclxuICAvKipcclxuICAgKiBAemhfQ04g5bGV5byAXHJcbiAgICogQGVuX1VTIFVuZm9sZFxyXG4gICAqL1xyXG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBAemhfQ04g6Ieq5a6a5LmJ5bGe5oCnXHJcbiAgICogQGVuX1VTIEN1c3RvbSBhdHRyaWJ1dGVzXHJcbiAgICovXHJcbiAgW3Byb3BlcnR5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAemhfQ04g5YiX5Y+C5pWwXHJcbiAqIEBlbl9VUyBDb2x1bW4gcGFyYW1ldGVyXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFhUYWJsZUNvbHVtbiBleHRlbmRzIFhJZGVudGl0eVByb3BlcnR5IHtcclxuICAvKipcclxuICAgKiBAemhfQ04g57G75Z6LXHJcbiAgICogQGVuX1VTIFR5cGVzIG9mXHJcbiAgICovXHJcbiAgdHlwZT86IFhDb2x1bW5UeXBlO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlrr3luqZcclxuICAgKiBAZW5fVVMgV2lkdGhcclxuICAgKi9cclxuICB3aWR0aD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBAemhfQ04gZmxleCDluIPlsYDlrr3luqZcclxuICAgKiBAZW5fVVMgRmxleCBsYXlvdXQgd2lkdGhcclxuICAgKi9cclxuICBmbGV4PzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmn6Xor6LlrZfmrrVcclxuICAgKiBAZW5fVVMgUXVlcnkgZmllbGRcclxuICAgKi9cclxuICBzZWFyY2g/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmjpLluo/lrZfmrrVcclxuICAgKiBAZW5fVVMgU29ydCBmaWVsZFxyXG4gICAqL1xyXG4gIHNvcnQ/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlm7rlrprliJfvvIzot53nprvlt6bovrnnmoTot53nprtcclxuICAgKiBAZW5fVVMgRml4ZWQgY29sdW1uLCBkaXN0YW5jZSBmcm9tIGxlZnRcclxuICAgKi9cclxuICBsZWZ0PzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlm7rlrprliJfvvIzot53nprvlj7PovrnnmoTot53nprtcclxuICAgKiBAZW5fVVMgRml4ZWQgY29sdW1uLCBkaXN0YW5jZSBmcm9tIHJpZ2h0XHJcbiAgICovXHJcbiAgcmlnaHQ/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaTjeS9nOaMiemSrlxyXG4gICAqIEBlbl9VUyBPcGVyYXRpb24gYnV0dG9uXHJcbiAgICovXHJcbiAgYWN0aW9uPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBAemhfQ04gdHlwZSDkuLogY2hlY2tib3gg5pe257uR5a6a6KGM54K55Ye76YCJ5Lit5LqL5Lu2XHJcbiAgICogQGVuX1VTIEJpbmQgcm93IGNsaWNrIHNlbGVjdGlvbiBldmVudCB3aGVuIHR5cGUgaXMgY2hlY2tib3hcclxuICAgKi9cclxuICByb3dDaGVja2VkPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBAemhfQ04gdHlwZSDkuLogZXhwYW5kIOaXtue7keWumuihjOeCueWHu+WxleW8gOS6i+S7tlxyXG4gICAqIEBlbl9VUyBCaW5kIHJvdyBjbGljayBzZWxlY3Rpb24gZXZlbnQgd2hlbiB0eXBlIGlzIGV4cGFuZFxyXG4gICAqL1xyXG4gIHJvd0V4cGFuZD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaWh+Wtl+Wvuem9kOaWueW8j1xyXG4gICAqIEBlbl9VUyBUZXh0IGFsaWdubWVudFxyXG4gICAqL1xyXG4gIHRleHRBbGlnbj86IFhUZXh0QWxpZ247XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaLluWKqOWIl+Wuve+8jOmcgOimgeiuvue9ruWIl+eahOWIneWni+WuveW6piB3aWR0aFxyXG4gICAqIEBlbl9VUyBEcmFnIHRoZSBjb2x1bW4gd2lkdGgsIHlvdSBuZWVkIHRvIHNldCB0aGUgaW5pdGlhbCB3aWR0aCBvZiB0aGUgY29sdW1uIHdpZHRoXHJcbiAgICovXHJcbiAgZHJhZ1dpZHRoPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBAemhfQ04g5q2j5Zyo5ouW5Yqo5YiX5a69XHJcbiAgICogQGVuX1VTIERyYWdnaW5nIHdpZHRoXHJcbiAgICovXHJcbiAgZHJhZ2dpbmdXaWR0aD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOW8gOWni+aLluWKqOWIl+WuveeahOS6i+S7tlxyXG4gICAqIEBlbl9VUyBFdmVudCB0byBzdGFydGVkIGRyYWcgY29sdW1uIHdpZHRoXHJcbiAgICovXHJcbiAgZHJhZ1dpZHRoU3RhcnRlZD86IChldmVudDogWFRhYmxlRHJhZ1dpZHRoRXZlbnQpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOato+WcqOaLluWKqOWIl+WuveaXtueahOS6i+S7tlxyXG4gICAqIEBlbl9VUyBFdmVudCB0byBtb3ZlZCBkcmFnIGNvbHVtbiB3aWR0aFxyXG4gICAqL1xyXG4gIGRyYWdXaWR0aE1vdmVkPzogKGV2ZW50OiBYVGFibGVEcmFnV2lkdGhFdmVudCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBAemhfQ04g57uT5p2f5ouW5Yqo5YiX5a6955qE5LqL5Lu2XHJcbiAgICogQGVuX1VTIEV2ZW50IHRvIGVuZGVkIGRyYWcgY29sdW1uIHdpZHRoXHJcbiAgICovXHJcbiAgZHJhZ1dpZHRoRW5kZWQ/OiAoZXZlbnQ6IFhUYWJsZURyYWdXaWR0aEV2ZW50KSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmi5bliqjliJdcclxuICAgKiBAZW5fVVMgRHJhZyB0aGUgY29sdW1uXHJcbiAgICovXHJcbiAgZHJhZ0NvbHVtbj86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOato+WcqOaLluWKqOWIl1xyXG4gICAqIEBlbl9VUyBEcmFnZ2luZyBjb2x1bW5cclxuICAgKi9cclxuICBkcmFnZ2luZz86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWktOmDqOaYvuekuiBjaGVja2JveFxyXG4gICAqIEBlbl9VUyBIZWFkIHNob3dzIGNoZWNrYm94XHJcbiAgICovXHJcbiAgaGVhZENoZWNrZWQ/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlpLTpg6jmmL7npLogZXhwYW5kXHJcbiAgICogQGVuX1VTIEhlYWQgc2hvd3MgZXhwYW5kXHJcbiAgICovXHJcbiAgaGVhZEV4cGFuZD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOiHquWumuS5ieWxnuaAp1xyXG4gICAqIEBlbl9VUyBDdXN0b20gYXR0cmlidXRlc1xyXG4gICAqL1xyXG4gIFtwcm9wZXJ0eTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+WktOWuveW6puaLluWKqOS6i+S7tlxyXG4gKiBAZW5fVVMgQ29sdW1uIGhlYWRlciB3aWR0aCBkcmFnIGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFhUYWJsZURyYWdXaWR0aEV2ZW50IHtcclxuICAvKipcclxuICAgKiBAemhfQ04g5ouW5Yqo55qE5YiXXHJcbiAgICogQGVuX1VTIERyYWdnZWQgY29sdW1uXHJcbiAgICovXHJcbiAgY29sdW1uOiBYVGFibGVDb2x1bW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIl+S9jee9ru+8jOato+WcqOaLluWKqOeahOaXtuWAmeaMh+WBj+enu+S9jee9rlxyXG4gICAqIEBlbl9VUyBUaGUgY29sdW1uIHBvc2l0aW9uIHJlZmVycyB0byB0aGUgb2Zmc2V0IHBvc2l0aW9uIHdoZW4gZHJhZ2dpbmdcclxuICAgKi9cclxuICBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+WktCBjaGVja2JveCDkuovku7bmlbDmja5cclxuICogQGVuX1VTIENvbHVtbiBoZWFkZXIgY2hlY2tib3ggZXZlbnQgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBYVGFibGVIZWFkQ2hlY2tib3gge1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDooYzmlbDmja5cclxuICAgKiBAZW5fVVMgUm93IGRhdGFcclxuICAgKi9cclxuICByb3dzOiBYVGFibGVSb3dbXTtcclxuICAvKipcclxuICAgKiBAemhfQ04gY2hlY2tib3gg5pWw5o2uXHJcbiAgICogQGVuX1VTIENoZWNrYm94IGRhdGFcclxuICAgKi9cclxuICBjaGVja2JveDogeyBbcHJvcGVydHk6IHN0cmluZ106IGJvb2xlYW4gfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEB6aF9DTiDljZXlhYPmoLzphY3nva5cclxuICogQGVuX1VTIENlbGwgY29uZmlnXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFhUYWJsZUNlbGxDb25maWcge1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJfljZXlhYPmoLzphY3nva5cclxuICAgKiBAZW5fVVMgQ29sdW1uIGNlbGwgY29uZmlnXHJcbiAgICovXHJcbiAgdGhlYWQ/OiBYVGFibGVDZWxsQ29uZmlnUnVsZTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGM5Y2V5YWD5qC86YWN572uXHJcbiAgICogQGVuX1VTIFJvdyBjb25maWdcclxuICAgKi9cclxuICB0Ym9keT86IFhUYWJsZUNlbGxDb25maWdSdWxlO1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWNleWFg+agvOmFjee9ruinhOWImVxyXG4gKiBAZW5fVVMgQ2VsbCBjb25maWcgcnVsZXNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgWFRhYmxlQ2VsbENvbmZpZ1J1bGUge1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiBncmlkIOW4g+WxgOS4i+WumuS5ieWIl+WuveW6plxyXG4gICAqIEBlbl9VUyBEZWZpbmUgY29sdW1uIHdpZHRoIHVuZGVyIGdyaWQgbGF5b3V0XHJcbiAgICovXHJcbiAgZ3JpZFRlbXBsYXRlQ29sdW1ucz86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAemhfQ04g5Y2V5YWD5qC86YWN572uXHJcbiAgICogQGVuX1VTIENlbGwgbWVyZ2UgcnVsZXNcclxuICAgKi9cclxuICBjZWxscz86IFhUYWJsZUNlbGxbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEB6aF9DTiDljZXlhYPmoLzlkIjlubbphY3nva5cclxuICogQGVuX1VTIENlbGwgbWVyZ2UgcnVsZXNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgWFRhYmxlQ2VsbCB7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOS9v+eUqCBncmlkIOW4g+WxgOadpeWQiOW5tuWNleWFg+agvFxyXG4gICAqIEBlbl9VUyBVc2UgZ3JpZCBsYXlvdXQgdG8gbWVyZ2UgY2VsbHNcclxuICAgKi9cclxuICBncmlkQXJlYT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAemhfQ04g5ZCN56ewXHJcbiAgICogQGVuX1VTIE5hbWVcclxuICAgKi9cclxuICBsYWJlbD86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAemhfQ04g5a695bqmXHJcbiAgICogQGVuX1VTIFdpZHRoXHJcbiAgICovXHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWbuuWumuWIl++8jOi3neemu+W3pui+ueeahOi3neemu1xyXG4gICAqIEBlbl9VUyBGaXhlZCBjb2x1bW4sIGRpc3RhbmNlIGZyb20gbGVmdFxyXG4gICAqL1xyXG4gIGxlZnQ/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWbuuWumuWIl++8jOi3neemu+WPs+i+ueeahOi3neemu1xyXG4gICAqIEBlbl9VUyBGaXhlZCBjb2x1bW4sIGRpc3RhbmNlIGZyb20gcmlnaHRcclxuICAgKi9cclxuICByaWdodD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBAemhfQ04g5a+55bqU5YiX55qEIGlkXHJcbiAgICogQGVuX1VTIFRoZSBpZCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW5cclxuICAgKi9cclxuICBpZD86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAemhfQ04g5ouW5Yqo5YiX5a69XHJcbiAgICogQGVuX1VTIERyYWcgdGhlIGNvbHVtbiB3aWR0aFxyXG4gICAqL1xyXG4gIGRyYWdXaWR0aD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOiHquWumuS5ieWxnuaAp1xyXG4gICAqIEBlbl9VUyBDdXN0b20gYXR0cmlidXRlc1xyXG4gICAqL1xyXG4gIFtwcm9wZXJ0eTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+exu+Wei1xyXG4gKiBAZW5fVVMgQ29sdW1uIHR5cGVcclxuICovXHJcbmV4cG9ydCB0eXBlIFhDb2x1bW5UeXBlID0gJ2xhYmVsJyB8ICdpbmRleCcgfCAnY2hlY2tib3gnIHwgJ2V4cGFuZCc7XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+WktOaYvuekuuS9jee9rlxyXG4gKiBAZW5fVVMgTGluZSBoZWFkIGRpc3BsYXkgcG9zaXRpb25cclxuICovXHJcbmV4cG9ydCB0eXBlIFhUYWJsZUhlYWRlclBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJyB8ICd0b3AtYm90dG9tJztcclxuXHJcbi8qKlxyXG4gKiBAemhfQ04g5YiG6aG15Zmo5L2N572uXHJcbiAqIEBlbl9VUyBQYWdpbmcgcG9zaXRpb25cclxuICovXHJcbmV4cG9ydCB0eXBlIFhQYWdpbmF0aW9uUG9zaXRpb24gPVxyXG4gIHwgJ3RvcC1sZWZ0J1xyXG4gIHwgJ3RvcC1jZW50ZXInXHJcbiAgfCAndG9wLXJpZ2h0J1xyXG4gIHwgJ2JvdHRvbS1sZWZ0J1xyXG4gIHwgJ2JvdHRvbS1jZW50ZXInXHJcbiAgfCAnYm90dG9tLXJpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAemhfQ04g5qih5p2/XHJcbiAqIEBlbl9VUyBUZW1wbGF0ZVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgWFRhYmxlVGVtcGxhdGUgPSB7IFtwcm9wZXJ0eTogc3RyaW5nXTogVGVtcGxhdGVSZWY8YW55PiB9O1xyXG5cclxuLyoqXHJcbiAqIFRhYmxlIEhlYWRcclxuICogQHNlbGVjdG9yIHgtdGFibGUtaGVhZFxyXG4gKiBAZGVjb3JhdG9yIGNvbXBvbmVudFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFhUYWJsZUhlYWRQcmVmaXggPSAneC10YWJsZS1oZWFkJztcclxuXHJcbi8qKlxyXG4gKiBUYWJsZSBIZWFkIFByb3BlcnR5XHJcbiAqL1xyXG5AQ29tcG9uZW50KHsgc2VsZWN0b3I6IGAke1hUYWJsZUhlYWRQcmVmaXh9LXByb3BlcnR5YCwgdGVtcGxhdGU6ICcnIH0pXHJcbmV4cG9ydCBjbGFzcyBYVGFibGVIZWFkUHJvcGVydHkgZXh0ZW5kcyBYUHJvcGVydHkge1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJfpm4blkIhcclxuICAgKiBAZW5fVVMgQ29sdW1uIHNldFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtbnMgPSBpbnB1dDxYVGFibGVDb2x1bW5bXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDpq5jluqbvvIzljZXkvY0gcHhcclxuICAgKiBAZW5fVVMgSGVpZ2h0IGluIHB4XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgcm93SGVpZ2h0ID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPig0MiwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6Ieq5a6a5LmJ5qih5p2/XHJcbiAgICogQGVuX1VTIEN1c3RvbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtblRwbCA9IGlucHV0PFhUYWJsZVRlbXBsYXRlPih7fSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOerluWQkea7muWKqOadoeWuveW6plxyXG4gICAqIEBlbl9VUyBWZXJ0aWNhbCBzY3JvbGwgYmFyIHdpZHRoXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2Nyb2xsWVdpZHRoID0gaW5wdXQ8bnVtYmVyIHwgbnVsbCwgWE51bWJlcj4obnVsbCwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5qiq5ZCR5rua5Yqo5p2h5a695bqmXHJcbiAgICogQGVuX1VTIEhvcml6b250YWwgc2Nyb2xsIGJhciB3aWR0aFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNjcm9sbFhXaWR0aCA9IGlucHV0PG51bWJlciB8IG51bGwsIFhOdW1iZXI+KG51bGwsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWNleWFg+agvOmFjee9rlxyXG4gICAqIEBlbl9VUyBDZWxsIG1lcmdlIHJ1bGVzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY2VsbENvbmZpZyA9IGlucHV0PFhUYWJsZUNlbGxDb25maWdSdWxlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmmL7npLrnmoTkvY3nva5cclxuICAgKiBAZW5fVVMgRGlzcGxheSBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHBvc2l0aW9uID0gaW5wdXQ8c3RyaW5nPigpO1xyXG59XHJcblxyXG4vKipcclxuICogVGFibGUgQm9keVxyXG4gKiBAc2VsZWN0b3IgeC10YWJsZS1ib2R5XHJcbiAqIEBkZWNvcmF0b3IgY29tcG9uZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgWFRhYmxlQm9keVByZWZpeCA9ICd4LXRhYmxlLWJvZHknO1xyXG5cclxuLyoqXHJcbiAqIFRhYmxlIEJvZHkgUHJvcGVydHlcclxuICovXHJcbkBDb21wb25lbnQoeyBzZWxlY3RvcjogYCR7WFRhYmxlQm9keVByZWZpeH0tcHJvcGVydHlgLCB0ZW1wbGF0ZTogJycgfSlcclxuZXhwb3J0IGNsYXNzIFhUYWJsZUJvZHlQcm9wZXJ0eSBleHRlbmRzIFhQcm9wZXJ0eSB7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihjOaVsOaNrlxyXG4gICAqIEBlbl9VUyBSb3cgZGF0YVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDxYVGFibGVSb3dbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJfpm4blkIhcclxuICAgKiBAZW5fVVMgQ29sdW1uIHNldFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtbnMgPSBpbnB1dDxYVGFibGVDb2x1bW5bXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDoh6rlrprkuYnmqKHmnb9cclxuICAgKiBAZW5fVVMgQ3VzdG9tIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY29sdW1uVHBsID0gaW5wdXQ8WFRhYmxlVGVtcGxhdGU+KHt9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5b2T5YmN6YCJ5Lit6KGM5pWw5o2uXHJcbiAgICogQGVuX1VTIEN1cnJlbnRseSBzZWxlY3RlZCByb3cgZGF0YVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGFjdGl2YXRlZFJvdyA9IG1vZGVsPFhUYWJsZVJvdz4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6auY5bqm77yM5Y2V5L2NIHB444CC6K6+572u5Li6IDAg6KGo56S66KGM6auY6Ieq6YCC5bqU5YaF5a656auY5bqm44CCXHJcbiAgICogQGVuX1VTIEhlaWdodCBpbiBweC4gc2V0IHRvIDAgbWVhbnMgdGhhdCB0aGUgcm93IGhlaWdodCBpcyBhZGFwdGl2ZSB0byB0aGUgY29udGVudCBoZWlnaHRcclxuICAgKi9cclxuICByZWFkb25seSByb3dIZWlnaHQgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDQyLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiBib2R5IOaVsOaNrumrmOW6plxyXG4gICAqIEBlbl9VUyBib2R5IGRhdGEgaGVpZ2h0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYm9keUhlaWdodCA9IGlucHV0PG51bWJlciB8IG51bGwsIFhOdW1iZXI+KG51bGwsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWFgeiuuOihjOeCueWHu+mAieS4rVxyXG4gICAqIEBlbl9VUyBBbGxvdyByb3cgY2xpY2sgdG8gc2VsZWN0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYWxsb3dTZWxlY3RSb3cgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odHJ1ZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOW8gOWQr+iZmuaLn+a7muWKqFxyXG4gICAqIEBlbl9VUyBUdXJuIG9uIHZpcnR1YWwgc2Nyb2xsaW5nXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgdmlydHVhbFNjcm9sbCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPihmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIGl0ZW1TaXpl77yM5a+55bqUIGNkayBzY3JvbGwg5Lit55qE5Y+C5pWwXHJcbiAgICogQGVuX1VTIGl0ZW1TaXpl77yMY29ycmVzcG9uZGluZyB0byB0aGUgcGFyYW1ldGVycyBpbiBjZGsgc2Nyb2xsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaXRlbVNpemUgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDQyLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDotoXlh7rlj6/op4bnqpflj6PnvJPlhrLljLrnmoTmnIDlsI/lgLzvvIzlr7nlupQgY2RrIHNjcm9sbCDkuK3nmoTlj4LmlbBcclxuICAgKiBAZW5fVVMgRXhjZWVkIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSB2aXNpYmxlIHdpbmRvdyBidWZmZXIsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMgaW4gY2RrIHNjcm9sbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IG1pbkJ1ZmZlclB4ID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPigxMDAsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOa4suafk+aWsOaVsOaNrue8k+WGsuWMuueahOWDj+e0oO+8jOWvueW6lCBjZGsgc2Nyb2xsIOS4reeahOWPguaVsFxyXG4gICAqIEBlbl9VUyBSZW5kZXIgdGhlIHBpeGVscyBvZiB0aGUgbmV3IGRhdGEgYnVmZmVyLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIGluIGNkayBzY3JvbGxcclxuICAgKi9cclxuICByZWFkb25seSBtYXhCdWZmZXJQeCA9IGlucHV0PG51bWJlciwgWE51bWJlcj4oMjAwLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDoh6rpgILlupTpq5jluqbvvIx0YWJsZSDpq5jluqbnrYnkuo7lsY/luZXpq5jluqblh4/mjonmraTlpITorr7nva7nmoTmlbDlgLxcclxuICAgKiBAZW5fVVMgQWRhcHRpdmUgaGVpZ2h0LCB0YWJsZSBoZWlnaHQgaXMgZXF1YWwgdG8gdGhlIHNjcmVlbiBoZWlnaHQgbWludXMgdGhlIHZhbHVlIHNldCBoZXJlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYWRhcHRpb25IZWlnaHQgPSBpbnB1dDxudW1iZXIgfCBudWxsLCBYTnVtYmVyPihudWxsLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmlofmoaPpq5jluqbnmb7liIbmr5TvvIzlvLnnqpfnmb7liIbmr5Tpq5jluqbnlKjliLBcclxuICAgKiBAZW5fVVMgRG9jdW1lbnQgaGVpZ2h0IHBlcmNlbnRhZ2UsIHVzZWQgYnkgcG9wLXVwIHdpbmRvdyBwZXJjZW50YWdlIGhlaWdodFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGRvY1BlcmNlbnQgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDEsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOa7muWKqOWMuuWfn+mrmOWuvVxyXG4gICAqIEBlbl9VUyBIZWlnaHQgYW5kIHdpZHRoIG9mIHJvbGxpbmcgYXJlYVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNjcm9sbCA9IGlucHV0PHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5Y2V5YWD5qC86YWN572u6KeE5YiZXHJcbiAgICogQGVuX1VTIENlbGwgY29uZmlnIHJ1bGVzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY2VsbENvbmZpZyA9IGlucHV0PFhUYWJsZUNlbGxDb25maWdSdWxlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDooYzmnaHku7bmoLflvI9cclxuICAgKiBAZW5fVVMgUm93IGNvbmRpdGlvbiBjbGFzc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHJvd0NsYXNzID0gaW5wdXQ8KHJvdzogWFRhYmxlUm93LCBpbmRleDogbnVtYmVyKSA9PiB7IFtjbGFzc05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5qCR5b2i6KGo5qC85LiL55qE5bGC57qnXHJcbiAgICogQGVuX1VTIFRoZSBsZXZlbCB1bmRlciB0aGUgdHJlZSB0YWJsZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGxldmVsID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPigwLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmoJHlvaLooajmoLzlsZXlvIDmiYDmnInoioLngrlcclxuICAgKiBAZW5fVVMgVHJlZSB0YWJsZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGV4cGFuZGVkQWxsID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KGZhbHNlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6Ieq5a6a5LmJ5bGV5byA5YaF5a65XHJcbiAgICogQGVuX1VTIEN1c3RvbWl6ZWQgZXhwYW5zaW9uIGNvbnRlbnRcclxuICAgKi9cclxuICByZWFkb25seSBleHBhbmRUcGwgPSBpbnB1dDxYVGVtcGxhdGU+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihjOeCueWHu+S6i+S7tlxyXG4gICAqIEBlbl9VUyBSb3cgY2xpY2sgZXZlbnRcclxuICAgKi9cclxuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDxYVGFibGVSb3c+KCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUYWJsZSBGb290XHJcbiAqIEBzZWxlY3RvciB4LXRhYmxlLWZvb3RcclxuICogQGRlY29yYXRvciBjb21wb25lbnRcclxuICovXHJcbmV4cG9ydCBjb25zdCBYVGFibGVGb290UHJlZml4ID0gJ3gtdGFibGUtZm9vdCc7XHJcblxyXG4vKipcclxuICogVGFibGUgRm9vdCBQcm9wZXJ0eVxyXG4gKi9cclxuQENvbXBvbmVudCh7IHNlbGVjdG9yOiBgJHtYVGFibGVGb290UHJlZml4fS1wcm9wZXJ0eWAsIHRlbXBsYXRlOiAnJyB9KVxyXG5leHBvcnQgY2xhc3MgWFRhYmxlRm9vdFByb3BlcnR5IGV4dGVuZHMgWFByb3BlcnR5IHtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGo5qC86aG15bC+XHJcbiAgICogQGVuX1VTIFRhYmxlIGZvb3RlclxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGZvb3RlciA9IGlucHV0PFhUZW1wbGF0ZT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGo5aS05ZKM6KGM6auY77yM5Y2V5L2NIHB4XHJcbiAgICogQGVuX1VTIEhlYWRlciBhbmQgcm93IGhlaWdodCwgdW5pdCBweFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHJvd0hlaWdodCA9IGlucHV0PG51bWJlciB8IG51bGwsIFhOdW1iZXI+KG51bGwsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbn1cclxuIl19
629
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS90YWJsZS90YWJsZS5wcm9wZXJ0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFNBQVMsRUFDVCxjQUFjLEVBQ2YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFlLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBcUMsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFnQmhHOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQ3RDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0FBRXBDOztHQUVHO0FBRUgsTUFBTSxPQUFPLGNBQWUsU0FBUSxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQztJQUQxRTs7UUFFRTs7O1dBR0c7UUFDTSxTQUFJLEdBQUcsS0FBSyxDQUFxQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUM3Rjs7O1dBR0c7UUFDTSxZQUFPLEdBQUcsS0FBSyxDQUFpQixFQUFFLENBQUMsQ0FBQztRQUM3Qzs7O1dBR0c7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUFrQixJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRzs7O1dBR0c7UUFDTSxZQUFPLEdBQUcsS0FBSyxDQUFvQixJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN0Rzs7O1dBR0c7UUFD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O3FIQUFsQixrQkFBa0IsaXBGQURrQyxFQUFFOzsyRkFDdEQsa0JBQWtCO2tCQUQ5QixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsZ0JBQWdCLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFOztBQXdHckU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztBQUUvQzs7R0FFRztBQUVILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxTQUFTO0lBRGpEOztRQUVFOzs7V0FHRztRQUNNLFdBQU0sR0FBRyxLQUFLLEVBQWEsQ0FBQztRQUNyQzs7O1dBR0c7UUFDTSxjQUFTLEdBQUcsS0FBSyxDQUF5QixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUNwRjtpSUFYWSxrQkFBa0I7cUhBQWxCLGtCQUFrQiwrVkFEa0MsRUFBRTs7MkZBQ3RELGtCQUFrQjtrQkFEOUIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLGdCQUFnQixXQUFXLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgWFByb3BlcnR5LFxyXG4gIFhQcm9wZXJ0eUZ1bmN0aW9uLFxyXG4gIFhUb0Nzc1BpeGVsVmFsdWUsXHJcbiAgWFRvQm9vbGVhbixcclxuICBYVG9OdW1iZXIsXHJcbiAgWFRvRGF0YUNvbnZlcnRcclxufSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBUZW1wbGF0ZVJlZiwgaW5wdXQsIG1vZGVsLCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWFBhZ2luYXRpb25JbnB1dEluZGV4U2l6ZVN1cmVUeXBlLCBYUGFnaW5hdGlvblNpemVEYXRhIH0gZnJvbSAnQG5nLW5lc3QvdWkvcGFnaW5hdGlvbic7XHJcbmltcG9ydCB7IFhTZWxlY3ROb2RlIH0gZnJvbSAnQG5nLW5lc3QvdWkvc2VsZWN0JztcclxuaW1wb3J0IHR5cGUge1xyXG4gIFhOdW1iZXIsXHJcbiAgWFNvcnQsXHJcbiAgWEJvb2xlYW4sXHJcbiAgWERhdGEsXHJcbiAgWFRleHRBbGlnbixcclxuICBYU2l6ZSxcclxuICBYUGFyZW50SWRlbnRpdHlQcm9wZXJ0eSxcclxuICBYSWRlbnRpdHlQcm9wZXJ0eSxcclxuICBYVGVtcGxhdGUsXHJcbiAgWFF1ZXJ5LFxyXG4gIFhEYXRhQXJyYXlcclxufSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBUYWJsZVxyXG4gKiBAc2VsZWN0b3IgeC10YWJsZVxyXG4gKiBAZGVjb3JhdG9yIGNvbXBvbmVudFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFhUYWJsZVByZWZpeCA9ICd4LXRhYmxlJztcclxuY29uc3QgWF9UQUJMRV9DT05GSUdfTkFNRSA9ICd0YWJsZSc7XHJcblxyXG4vKipcclxuICogVGFibGUgUHJvcGVydHlcclxuICovXHJcbkBDb21wb25lbnQoeyBzZWxlY3RvcjogYCR7WFRhYmxlUHJlZml4fS1wcm9wZXJ0eWAsIHRlbXBsYXRlOiAnJyB9KVxyXG5leHBvcnQgY2xhc3MgWFRhYmxlUHJvcGVydHkgZXh0ZW5kcyBYUHJvcGVydHlGdW5jdGlvbihYX1RBQkxFX0NPTkZJR19OQU1FKSB7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihjOaVsOaNrlxyXG4gICAqIEBlbl9VUyBSb3cgZGF0YVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDxYRGF0YTxYVGFibGVSb3c+LCBYRGF0YTxYVGFibGVSb3c+PihbXSwgeyB0cmFuc2Zvcm06IFhUb0RhdGFDb252ZXJ0IH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJfpm4blkIhcclxuICAgKiBAZW5fVVMgQ29sdW1uIHNldFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtbnMgPSBpbnB1dDxYVGFibGVDb2x1bW5bXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDooajlpLTlkozooYzpq5jvvIzljZXkvY0gcHhcclxuICAgKiBAZW5fVVMgSGVhZGVyIGFuZCByb3cgaGVpZ2h0LCB1bml0IHB4XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgcm93SGVpZ2h0ID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPih0aGlzLmNvbmZpZz8ucm93SGVpZ2h0ID8/IDQyLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmmK/lkKblkK/nlKjliqDovb0gbG9hZGluZ1xyXG4gICAqIEBlbl9VUyBXaGV0aGVyIHRvIGVuYWJsZSBsb2FkaW5nXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgbG9hZGluZyA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8ubG9hZGluZyA/PyBmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYr+WQpuWxleekuuWIl+i+ueahhlxyXG4gICAqIEBlbl9VUyBXaGV0aGVyIHRvIHNob3cgY29sdW1uIGJvcmRlcnNcclxuICAgKi9cclxuICByZWFkb25seSBib3JkZXJlZCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uYm9yZGVyZWQgPz8gZmFsc2UsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmmK/lkKbmmL7npLrliJflpLRcclxuICAgKiBAZW5fVVMgV2hldGhlciB0byBkaXNwbGF5IHRoZSBjb2x1bW4gaGVhZGVyc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNob3dIZWFkZXIgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnNob3dIZWFkZXIgPz8gdHJ1ZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIl+WktOaYvuekuuS9jee9rlxyXG4gICAqIEBlbl9VUyBXaGV0aGVyIHRvIGRpc3BsYXkgdGhlIGNvbHVtbiBoZWFkZXJzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGVhZGVyUG9zaXRpb24gPSBpbnB1dDxYVGFibGVIZWFkZXJQb3NpdGlvbj4odGhpcy5jb25maWc/LmhlYWRlclBvc2l0aW9uID8/ICd0b3AnKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiX5YaF5a655pSv5oyBIGlubmVySFRNTCDmuLLmn5MgaHRtbCDmoIfnrb5cclxuICAgKiBAZW5fVVMgQ29sdW1uIGNvbnRlbnQgc3VwcG9ydHMgaW5uZXJIVE1MIHJlbmRlcmluZyBvZiBIVE1MIHRhZ3NcclxuICAgKi9cclxuICByZWFkb25seSBib2R5SW5uZXJIVE1MID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5ib2R5SW5uZXJIVE1MID8/IGZhbHNlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5b2T5YmN6YCJ5Lit6KGM5pWw5o2uXHJcbiAgICogQGVuX1VTIEN1cnJlbnRseSBzZWxlY3RlZCByb3cgZGF0YVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGFjdGl2YXRlZFJvdyA9IG1vZGVsPFhUYWJsZVJvdz4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiX5aS06Ieq5a6a5LmJ5qih5p2/77yM6YCa6L+HIGtleS12YWx1ZSDnmoTmlrnlvI/mjIflrprmr4/liJfnmoTmqKHniYhcclxuICAgKiBAZW5fVVMgQ29sdW1uIGhlYWRlciBjdXN0b20gdGVtcGxhdGVcclxuICAgKi9cclxuICByZWFkb25seSBoZWFkQ29sdW1uVHBsID0gaW5wdXQ8WFRhYmxlVGVtcGxhdGU+KHt9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiX5aS05Y2V5YWD5qC86Ieq5a6a5LmJ5qih5p2/77yM5LyY5YWI57qn5L2O5LqO5YiX5aS06Ieq5a6a5LmJ5qih5p2/XHJcbiAgICogQGVuX1VTIENvbHVtbiBoZWFkZXIgY3VzdG9tIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGVhZFRoVHBsID0gaW5wdXQ8WFRlbXBsYXRlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJflhoXlrrnoh6rlrprkuYnmqKHmnb/vvIzpgJrov4cga2V5LXZhbHVlIOeahOaWueW8j+aMh+Wumuavj+WIl+eahOaooeeJiFxyXG4gICAqIEBlbl9VUyBDb2x1bW4gY29udGVudCBjdXN0b20gdGVtcGxhdGVcclxuICAgKi9cclxuICByZWFkb25seSBib2R5Q29sdW1uVHBsID0gaW5wdXQ8WFRhYmxlVGVtcGxhdGU+KHt9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5Y2V5YWD5qC855qE6Ieq5a6a5LmJ5qih5p2/77yM5LyY5YWI57qn5L2O5LqO5YiX5YaF5a656Ieq5a6a5LmJ5qih5p2/XHJcbiAgICogQGVuX1VTIEN1c3RvbSB0ZW1wbGF0ZSBvZiBjZWxsc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGJvZHlUZFRwbCA9IGlucHV0PFhUZW1wbGF0ZT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGM5p2h5Lu25qC35byPXHJcbiAgICogQGVuX1VTIFJvdyBjb25kaXRpb24gY2xhc3NcclxuICAgKi9cclxuICByZWFkb25seSByb3dDbGFzcyA9IGlucHV0PChyb3c6IFhUYWJsZVJvdywgaW5kZXg6IG51bWJlcikgPT4geyBbY2xhc3NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIl+WktOaQnOe0ouiHquWumuS5ieaooeadv1xyXG4gICAqIEBlbl9VUyBMaW5lIGhlYWQgc2VhcmNoIGN1c3RvbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGhlYWRTZWFyY2hUcGwgPSBpbnB1dDxYVGVtcGxhdGU+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaOkuW6j+eCueWHu+eahOS6i+S7tlxyXG4gICAqIEBlbl9VUyBTb3J0IGNsaWNrIGV2ZW50c1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNvcnRDaGFuZ2UgPSBvdXRwdXQ8WFNvcnRbXT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiX5aS0IGNoZWNrYm94IOS6i+S7tlxyXG4gICAqIEBlbl9VUyBoZWFkIGNoZWNrYm94IGV2ZW50XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGVhZENoZWNrYm94Q2hhbmdlID0gb3V0cHV0PFhUYWJsZUhlYWRDaGVja2JveD4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04gYm9keSBjaGVja2JveCDkuovku7ZcclxuICAgKiBAZW5fVVMgaGVhZCBjaGVja2JveCBldmVudFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGJvZHlDaGVja2JveENoYW5nZSA9IG91dHB1dDxYVGFibGVSb3c+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWFgeiuuOihjOeCueWHu+mAieS4reW9k+WJjeihjFxyXG4gICAqIEBlbl9VUyBBbGxvdyByb3cgY2xpY2sgdG8gc2VsZWN0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYWxsb3dTZWxlY3RSb3cgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LmFsbG93U2VsZWN0Um93ID8/IHRydWUsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlhYHorrjooYzngrnlh7vpgInkuK0gY2hlY2tib3hcclxuICAgKiBAZW5fVVMgQWxsb3cgbGluZXMgdG8gY2xpY2sgY2hlY2tib3hcclxuICAgKi9cclxuICByZWFkb25seSBhbGxvd0NoZWNrUm93ID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5hbGxvd0NoZWNrUm93ID8/IHRydWUsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlvIDlkK/omZrmi5/mu5rliqhcclxuICAgKiBAZW5fVVMgVHVybiBvbiB2aXJ0dWFsIHNjcm9sbGluZ1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHZpcnR1YWxTY3JvbGwgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnZpcnR1YWxTY3JvbGwgPz8gZmFsc2UsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiBib2R5IOaVsOaNrumrmOW6pu+8jOWPquacieW8gOWQr+iZmuaLn+a7muWKqOeahOaXtuWAmeeUn+aViFxyXG4gICAqIEBlbl9VUyBib2R5IGRhdGEgaGVpZ2h0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYm9keUhlaWdodCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZCwgWE51bWJlcj4odW5kZWZpbmVkLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiBpdGVtU2l6Ze+8jOWvueW6lCBjZGsgc2Nyb2xsIOS4reeahOWPguaVsFxyXG4gICAqIEBlbl9VUyBpdGVtU2l6Ze+8jGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMgaW4gY2RrIHNjcm9sbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGl0ZW1TaXplID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPih0aGlzLmNvbmZpZz8uaXRlbVNpemUgPz8gNDIsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOi2heWHuuWPr+inhueql+WPo+e8k+WGsuWMuueahOacgOWwj+WAvO+8jOWvueW6lCBjZGsgc2Nyb2xsIOS4reeahOWPguaVsFxyXG4gICAqIEBlbl9VUyBFeGNlZWQgdGhlIG1pbmltdW0gdmFsdWUgb2YgdGhlIHZpc2libGUgd2luZG93IGJ1ZmZlciwgY29ycmVzcG9uZGluZyB0byB0aGUgcGFyYW1ldGVycyBpbiBjZGsgc2Nyb2xsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgbWluQnVmZmVyUHggPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDEwMCwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5riy5p+T5paw5pWw5o2u57yT5Yay5Yy655qE5YOP57Sg77yM5a+55bqUIGNkayBzY3JvbGwg5Lit55qE5Y+C5pWwXHJcbiAgICogQGVuX1VTIFJlbmRlciB0aGUgcGl4ZWxzIG9mIHRoZSBuZXcgZGF0YSBidWZmZXIsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMgaW4gY2RrIHNjcm9sbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IG1heEJ1ZmZlclB4ID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPigyMDAsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOiHqumAguW6lOmrmOW6pu+8jHRhYmxlIOmrmOW6puetieS6juWxj+W5lemrmOW6puWHj+aOieatpOWkhOiuvue9rueahOaVsOWAvFxyXG4gICAqIEBlbl9VUyBBZGFwdGl2ZSBoZWlnaHQsIHRhYmxlIGhlaWdodCBpcyBlcXVhbCB0byB0aGUgc2NyZWVuIGhlaWdodCBtaW51cyB0aGUgdmFsdWUgc2V0IGhlcmVcclxuICAgKi9cclxuICByZWFkb25seSBhZGFwdGlvbkhlaWdodCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZCwgWE51bWJlcj4odW5kZWZpbmVkLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmlofmoaPpq5jluqbnmb7liIbmr5TvvIzlvLnnqpfnmb7liIbmr5Tpq5jluqbnlKjliLBcclxuICAgKiBAZW5fVVMgRG9jdW1lbnQgaGVpZ2h0IHBlcmNlbnRhZ2UsIHVzZWQgYnkgcG9wLXVwIHdpbmRvdyBwZXJjZW50YWdlIGhlaWdodFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGRvY1BlcmNlbnQgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDEsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIGNoZWNrYm94IOWIl+WIneWni+mAieS4reeahOaVsOaNru+8jOWIl+S4rea/gOa0uyBjaGVja2JveFxyXG4gICAqIEBlbl9VUyBDaGVja2JveCBjb2x1bW4gaW5pdGlhbGx5IHNlbGVjdGVkIGRhdGEsIGNoZWNrYm94IGlzIGFjdGl2YXRlZCBpbiBjb2x1bW5cclxuICAgKi9cclxuICByZWFkb25seSBjaGVja2VkUm93ID0gaW5wdXQ8eyBbcHJvcGVydHk6IHN0cmluZ106IGFueVtdIH0+KHt9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5aaC5p6cIGRhdGEg5piv5Ye95pWw57G75Z6L77yM5Y+v5Lul6YCa6L+H5q2k5Y+C5pWw5o6n5Yi26K+35rGC77yM5bi455So5LqO5by55qGG5Lit55qE6KGo5qC877yM5by55Ye65ZCO5YaN6K+35rGCXHJcbiAgICogQGVuX1VTIElmIGRhdGEgaXMgYSBmdW5jdGlvbiB0eXBlLCB5b3UgY2FuIHVzZSB0aGlzIHBhcmFtZXRlciB0byBjb250cm9sIHRoZSByZXF1ZXN0LCB3aGljaCBpcyBvZnRlbiB1c2VkIGluIHRoZSBmb3JtIGluIHRoZSBwb3AtdXAgYm94LCBhbmQgdGhlbiByZXF1ZXN0IGl0IGFmdGVyIGl0IHBvcHMgdXBcclxuICAgKi9cclxuICByZWFkb25seSBtYW51YWwgPSBtb2RlbDxib29sZWFuPih0cnVlKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5rua5Yqo5Yy65Z+f6auY5a69XHJcbiAgICogQGVuX1VTIEhlaWdodCBhbmQgd2lkdGggb2Ygcm9sbGluZyBhcmVhXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2Nyb2xsID0gaW5wdXQ8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9PigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDooajmoLzpobXlpLRcclxuICAgKiBAZW5fVVMgVGFibGUgaGVhZGVyXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaGVhZGVyID0gaW5wdXQ8WFRlbXBsYXRlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDooajmoLzpobXlsL5cclxuICAgKiBAZW5fVVMgVGFibGUgZm9vdGVyXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZm9vdGVyID0gaW5wdXQ8WFRlbXBsYXRlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDljZXlhYPmoLzphY3nva5cclxuICAgKiBAZW5fVVMgQ2VsbCBjb25maWdcclxuICAgKi9cclxuICByZWFkb25seSBjZWxsQ29uZmlnID0gaW5wdXQ8WFRhYmxlQ2VsbENvbmZpZz4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5bC65a+4XHJcbiAgICogQGVuX1VTIFNpemVcclxuICAgKi9cclxuICByZWFkb25seSByb3dTaXplID0gaW5wdXQ8WFNpemU+KHRoaXMuY29uZmlnPy5yb3dTaXplID8/ICdtZWRpdW0nKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiG6aG15Zmo5L2N572uXHJcbiAgICogQGVuX1VTIFBhZ2luYXRpb24gcG9zaXRpb25cclxuICAgKi9cclxuICByZWFkb25seSBwYWdpbmF0aW9uUG9zaXRpb24gPSBpbnB1dDxYUGFnaW5hdGlvblBvc2l0aW9uPignYm90dG9tLWxlZnQnKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6ZqQ6JeP6KGo5qC85aSW6L655qGGXHJcbiAgICogQGVuX1VTIEhpZGRlbiB0YWJsZSB3cmFwIGJvcmRlclxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGhpZGRlbldyYXBCb3JkZXIgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LmhpZGRlbldyYXBCb3JkZXIgPz8gZmFsc2UsIHtcclxuICAgIHRyYW5zZm9ybTogWFRvQm9vbGVhblxyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDpmpDol4/liIbpobXlmajmjInpkq7ovrnmoYZcclxuICAgKiBAZW5fVVMgSGlkZGVuIHBhZ2luYXRpb24gYnV0dG9uIGJvcmRlclxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGhpZGRlblBhZ2luYXRpb25Cb3JkZXIgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LmhpZGRlblBhZ2luYXRpb25Cb3JkZXIgPz8gZmFsc2UsIHtcclxuICAgIHRyYW5zZm9ybTogWFRvQm9vbGVhblxyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmmL7npLrliIbpobXlmahcclxuICAgKiBAZW5fVVMgUGFnaW5hdGlvbiBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNob3dQYWdpbmF0aW9uID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5zaG93UGFnaW5hdGlvbiA/PyB0cnVlLCB7XHJcbiAgICB0cmFuc2Zvcm06IFhUb0Jvb2xlYW5cclxuICB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5qCR5b2i6KGo5qC8XHJcbiAgICogQGVuX1VTIFRyZWUgdGFibGVcclxuICAgKi9cclxuICByZWFkb25seSB0cmVlVGFibGUgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnRyZWVUYWJsZSA/PyBmYWxzZSwge1xyXG4gICAgdHJhbnNmb3JtOiBYVG9Cb29sZWFuXHJcbiAgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOagkeW9ouihqOagvOWxleW8gOaJgOacieiKgueCuVxyXG4gICAqIEBlbl9VUyBUcmVlIHRhYmxlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZXhwYW5kZWRBbGwgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LmV4cGFuZGVkQWxsID8/IGZhbHNlLCB7XHJcbiAgICB0cmFuc2Zvcm06IFhUb0Jvb2xlYW5cclxuICB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6buY6K6k5bGV5byA55qE5bGC57qn77yMLTEg5LiN5bGV5byAXHJcbiAgICogQGVuX1VTIERlZmF1bHQgZXhwYW5kZWQgbGV2ZWxcclxuICAgKi9cclxuICByZWFkb25seSBleHBhbmRlZExldmVsID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPih0aGlzLmNvbmZpZz8uZXhwYW5kZWRMZXZlbCA/PyAtMSwge1xyXG4gICAgdHJhbnNmb3JtOiBYVG9OdW1iZXJcclxuICB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5bGV5byA55qE6IqC54K5XHJcbiAgICogQGVuX1VTIEV4cGFuZGVkIG5vZGVcclxuICAgKi9cclxuICByZWFkb25seSBleHBhbmRlZCA9IGlucHV0PGFueVtdPihbXSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOiHquWumuS5ieWxleW8gOWGheWuuVxyXG4gICAqIEBlbl9VUyBDdXN0b21pemVkIGV4cGFuc2lvbiBjb250ZW50XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZXhwYW5kVHBsID0gaW5wdXQ8WFRlbXBsYXRlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmmL7npLrmlbDmja7kuLrnqbrnmoTmj5DnpLpcclxuICAgKiBAZW5fVVMgRGlzcGxheSBhIHByb21wdCB3aXRoIGVtcHR5IGRhdGFcclxuICAgKi9cclxuICByZWFkb25seSBzaG93RW1wdHkgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnNob3dFbXB0eSA/PyB0cnVlLCB7XHJcbiAgICB0cmFuc2Zvcm06IFhUb0Jvb2xlYW5cclxuICB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5pWw5o2u5Li656m655qE5o+Q56S65Zu+54mH5Zyw5Z2A5oiW6Ieq5a6a5LmJ5qih5p2/XHJcbiAgICogQGVuX1VTIFBpY3R1cmUgYWRkcmVzcyBvciBjdXN0b20gdGVtcGxhdGVcclxuICAgKi9cclxuICByZWFkb25seSBlbXB0eUltZyA9IGlucHV0PFhUZW1wbGF0ZSB8IHVuZGVmaW5lZD4odGhpcy5jb25maWc/LmVtcHR5SW1nID8/IHVuZGVmaW5lZCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaVsOaNruS4uuepuueahOaPkOekuuWGheWuueaIluiHquWumuS5ieaooeadv1xyXG4gICAqIEBlbl9VUyBDb250ZW50IG9yIGN1c3RvbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGVtcHR5Q29udGVudCA9IGlucHV0PFhUZW1wbGF0ZSB8IHVuZGVmaW5lZD4odGhpcy5jb25maWc/LmVtcHR5Q29udGVudCA/PyB1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlvZPliY3pobXnoIFcclxuICAgKiBAZW5fVVMgQ3VycmVudCBwYWdlIG51bWJlclxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGluZGV4ID0gbW9kZWw8bnVtYmVyPih0aGlzLmNvbmZpZz8uaW5kZXggPz8gMSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOavj+mhteaYvuekuuadoeaVsFxyXG4gICAqIEBlbl9VUyBOdW1iZXIgb2YgaXRlbXMgZGlzcGxheWVkIHBlciBwYWdlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2l6ZSA9IG1vZGVsPG51bWJlcj4odGhpcy5jb25maWc/LnNpemUgPz8gMTApO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmgLvmlbBcclxuICAgKiBAZW5fVVMgVG90YWxcclxuICAgKi9cclxuICByZWFkb25seSB0b3RhbCA9IG1vZGVsPG51bWJlcj4oMCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOafpeivouadoeS7tlxyXG4gICAqIEBlbl9VUyBRdWVyeSBjb25kaXRpb25zXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgcXVlcnkgPSBtb2RlbDxYUXVlcnk+KHt9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5pyA5aSa5pi+56S655qE5YiG6aG15pWw6YePXHJcbiAgICogQGVuX1VTIFRoZSBsYXJnZXN0IG51bWJlciBvZiBwYWdlcyBkaXNwbGF5XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgcGFnZUxpbmtTaXplID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPih0aGlzLmNvbmZpZz8ucGFnZUxpbmtTaXplID8/IDUsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYvuekuummluWwvumhtei3s+i9rFxyXG4gICAqIEBlbl9VUyBEaXNwbGF5IHRoZSBmaXJzdCBhbmQgbGFzdCBwYWdlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2hvd0VsbGlwc2lzID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5zaG93RWxsaXBzaXMgPz8gdHJ1ZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYvuekuuaAu+adoeaVsFxyXG4gICAqIEBlbl9VUyBEaXNwbGF5IHRoZSB0b3RhbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNob3dUb3RhbCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uc2hvd1RvdGFsID8/IHRydWUsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmjInpkq7pl7Tot51cclxuICAgKiBAZW5fVVMgQnV0dG9uIHNwYWNpbmdcclxuICAgKi9cclxuICByZWFkb25seSBzcGFjZSA9IGlucHV0PHN0cmluZywgWE51bWJlcj4odGhpcy5jb25maWc/LnNwYWNlID8/ICcwLjI1cmVtJywgeyB0cmFuc2Zvcm06IFhUb0Nzc1BpeGVsVmFsdWUgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOa3u+WKoOiDjOaZr+iJslxyXG4gICAqIEBlbl9VUyBTaG93IGJhY2tncm91bmRcclxuICAgKi9cclxuICByZWFkb25seSBzaG93QmFja2dyb3VuZCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPih0aGlzLmNvbmZpZz8uc2hvd0JhY2tncm91bmQgPz8gZmFsc2UsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmmL7npLrliIbpobXmnaHmlbBcclxuICAgKiBAZW5fVVMgU2hvdyBzaXplXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2hvd1NpemUgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnNob3dTaXplID8/IGZhbHNlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiG6aG15p2h5pWw6YCJ5oup5qGG55qE5a695bqmXHJcbiAgICogQGVuX1VTIHNpemUgd2l0aCBzZWxlY3RcclxuICAgKi9cclxuICByZWFkb25seSBzaXplV2lkdGggPSBpbnB1dDxzdHJpbmcsIFhOdW1iZXI+KHRoaXMuY29uZmlnPy5zaXplV2lkdGggPz8gJzYuODc1cmVtJywgeyB0cmFuc2Zvcm06IFhUb0Nzc1BpeGVsVmFsdWUgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOaYvuekuui+k+WFpeWIhumhteadoeaVsO+8iOS4jeiDvei3n+S4i+aLiemAiemhueWQjOaXtuS9v+eUqO+8iVxyXG4gICAqIEBlbl9VUyBEaXNwbGF5IHRoZSBudW1iZXIgb2YgaW5wdXQgcGFnZSBicmVha3MgKGNhbm5vdCBleGlzdCB3aXRoIHRoZSBkcm9wLWRvd24gb3B0aW9ucyBvZiBwYWdlIGJyZWFrcylcclxuICAgKi9cclxuICByZWFkb25seSBzaG93SW5wdXRTaXplID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KHRoaXMuY29uZmlnPy5zaG93SW5wdXRTaXplID8/IGZhbHNlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6L6T5YWl5YiG6aG15qGG55qEIHRvb2x0aXAg5o+Q56S65L+h5oGv77yM6buY6K6k5qC55o2u6L6T5YWl56Gu6K6k5pS55Y+Y55qE5pa55byP5p2l5pi+56S6XHJcbiAgICogQGVuX1VTIEVudGVyIHRoZSB0b29sdGlwIHByb21wdCBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhZ2luYXRpb24gYm94LCB3aGljaCB3aWxsIGJlIGRpc3BsYXllZCBieSBkZWZhdWx0IGJhc2VkIG9uIHRoZSBjb25maXJtYXRpb24gb2YgdGhlIGlucHV0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaW5wdXRTaXplVG9vbHRpcFRleHQgPSBpbnB1dDxzdHJpbmc+KHRoaXMuY29uZmlnPy5pbnB1dFNpemVUb29sdGlwVGV4dCA/PyAnJyk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIhumhteadoeaVsOi+k+WFpeahhueahOWuveW6plxyXG4gICAqIEBlbl9VUyBzaXplIHdpdGggaW5wdXRcclxuICAgKi9cclxuICByZWFkb25seSBpbnB1dFNpemVXaWR0aCA9IGlucHV0PHN0cmluZywgWE51bWJlcj4odGhpcy5jb25maWc/LnNpemVXaWR0aCA/PyAnMy4xMjVyZW0nLCB7XHJcbiAgICB0cmFuc2Zvcm06IFhUb0Nzc1BpeGVsVmFsdWVcclxuICB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5YiG6aG16YCJ5oup55qE5pWw5o2u6aG5XHJcbiAgICogQGVuX1VTIFBhZ2luZyBjaG9vc2UgaXRlbXMgb2YgZGF0YVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNpemVEYXRhID0gaW5wdXQ8WERhdGFBcnJheTxYU2VsZWN0Tm9kZT4+KHRoaXMuY29uZmlnPy5zaXplRGF0YSA/PyBYUGFnaW5hdGlvblNpemVEYXRhKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g56aB55So5pW05Liq5YiG6aG1XHJcbiAgICogQGVuX1VTIGRpc2FibGVkXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgZGlzYWJsZWQgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmmL7npLrot7PovazovpPlhaXmoYZcclxuICAgKiBAZW5fVVMgU2hvdyBzaXplXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2hvd0p1bXAgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiBYVG9Cb29sZWFuIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDot7PovazovpPlhaXmoYbnmoQgdG9vbHRpcCDmj5DnpLrkv6Hmga/vvIzpu5jorqTmoLnmja7ovpPlhaXnoa7orqTmlLnlj5jnmoTmlrnlvI/mnaXmmL7npLpcclxuICAgKiBAZW5fVVMgVGhlIHRvb2x0aXAgcHJvbXB0IGluZm9ybWF0aW9uIGZvciBqdW1waW5nIHRvIHRoZSBpbnB1dCBib3ggaXMgZGlzcGxheWVkIGJ5IGRlZmF1bHQgYmFzZWQgb24gdGhlIGNvbmZpcm1hdGlvbiBvZiBpbnB1dCBjaGFuZ2VzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkganVtcFRvb2x0aXBUZXh0ID0gaW5wdXQ8c3RyaW5nPih0aGlzLmNvbmZpZz8uanVtcFRvb2x0aXBUZXh0ID8/ICcnKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6Lez6L2s6aG155qE5a695bqmXHJcbiAgICogQGVuX1VTIHNpemUgd2l0aFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGp1bXBXaWR0aCA9IGlucHV0PHN0cmluZywgWE51bWJlcj4odGhpcy5jb25maWc/Lmp1bXBXaWR0aCA/PyAnMy4xMjVyZW0nLCB7IHRyYW5zZm9ybTogWFRvQ3NzUGl4ZWxWYWx1ZSB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5oC75pWw6Ieq5a6a5LmJ5qih5p2/XHJcbiAgICogQGVuX1VTIFRvdGFsIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgdG90YWxUcGwgPSBpbnB1dDxYVGVtcGxhdGU+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOeugOWNleWIhumhtVxyXG4gICAqIEBlbl9VUyBTaW1wbGVcclxuICAgKi9cclxuICByZWFkb25seSBzaW1wbGUgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odGhpcy5jb25maWc/LnNpbXBsZSA/PyBmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOeugOWNleWIhumhtei+k+WFpeahhuWuveW6plxyXG4gICAqIEBlbl9VUyBTaW1wbGUgaW5kZXggd2l0aFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNpbXBsZUluZGV4V2lkdGggPSBpbnB1dDxzdHJpbmcsIFhOdW1iZXI+KHRoaXMuY29uZmlnPy5zaW1wbGVJbmRleFdpZHRoID8/ICc4LjEyNXJlbScsIHtcclxuICAgIHRyYW5zZm9ybTogWFRvQ3NzUGl4ZWxWYWx1ZVxyXG4gIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDovpPlhaXnoa7orqTmlLnlj5jnmoTmlrnlvI/vvIzpkojlr7novpPlhaXliIbpobXlpKflsI/lkozovpPlhaXot7PovazpobVcclxuICAgKiBAZW5fVVMgVGhlIG1ldGhvZCBmb3IgY29uZmlybWluZyBjaGFuZ2VzIGluIGlucHV0IGlzIGJhc2VkIG9uIHRoZSBpbnB1dCBwYWdlIHNpemUgYW5kIGlucHV0IGp1bXAgcGFnZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGlucHV0SW5kZXhTaXplU3VyZVR5cGUgPSBpbnB1dDxYUGFnaW5hdGlvbklucHV0SW5kZXhTaXplU3VyZVR5cGU+KFxyXG4gICAgdGhpcy5jb25maWc/LmlucHV0SW5kZXhTaXplU3VyZVR5cGUgPz8gJ2VudGVyJ1xyXG4gICk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihjOeCueWHu+S6i+S7tlxyXG4gICAqIEBlbl9VUyBSb3cgY2xpY2sgZXZlbnRcclxuICAgKi9cclxuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDxYVGFibGVSb3c+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIl+WktOaLluWKqOW8gOWni+S6i+S7tu+8jOi/lOWbnuaLluWKqOeahOWIl1xyXG4gICAqIEBlbl9VUyBDb2x1bW4gSGVhZGVyIERyYWcgRW5kIEV2ZW50XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY29sdW1uRHJhZ1N0YXJ0ZWQgPSBvdXRwdXQ8WFRhYmxlQ29sdW1uPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJflpLTmi5bliqjnu5PmnZ/kuovku7bvvIzov5Tlm57mi5bliqjnmoTliJdcclxuICAgKiBAZW5fVVMgVGhlIGNvbHVtbiBoZWFkZXIgaXMgZHJhZ2dpbmcsIGFuZCB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIG9yZGVyIGlzIGNoYW5nZWRcclxuICAgKi9cclxuICByZWFkb25seSBjb2x1bW5EcmFnRW5kZWQgPSBvdXRwdXQ8WFRhYmxlQ29sdW1uPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlvZPnlKjmiLfmiorkuIDkuKrmnaHnm67mipXmlL7ov5vor6Xlrrnlmajml7blsLHkvJrop6blj5HvvIzmi5bliqjmlL7lvIDnmoTkuovku7bvvIzov5Tlm57mi5bliqjmjpLluo/lkI7nmoTliJfmlbDmja5cclxuICAgKiBAZW5fVVMgVGhlIGNvbHVtbiBoZWFkZXIgaXMgZHJhZ2dpbmcsIGFuZCB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIG9yZGVyIGlzIGNoYW5nZWRcclxuICAgKi9cclxuICByZWFkb25seSBjb2x1bW5Ecm9wTGlzdERyb3BwZWQgPSBvdXRwdXQ8WFRhYmxlQ29sdW1uW10+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOW8gOWni+aLluWKqOWIl+WuveeahOS6i+S7tlxyXG4gICAqIEBlbl9VUyBFdmVudCB0byBzdGFydGVkIGRyYWcgY29sdW1uIHdpZHRoXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY29sdW1uRHJhZ1dpZHRoU3RhcnRlZCA9IG91dHB1dDxYVGFibGVEcmFnV2lkdGhFdmVudD4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5q2j5Zyo5ouW5Yqo5YiX5a695pe255qE5LqL5Lu2XHJcbiAgICogQGVuX1VTIEV2ZW50IHRvIG1vdmVkIGRyYWcgY29sdW1uIHdpZHRoXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY29sdW1uRHJhZ1dpZHRoTW92ZWQgPSBvdXRwdXQ8WFRhYmxlRHJhZ1dpZHRoRXZlbnQ+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOe7k+adn+aLluWKqOWIl+WuveeahOS6i+S7tlxyXG4gICAqIEBlbl9VUyBFdmVudCB0byBlbmRlZCBkcmFnIGNvbHVtbiB3aWR0aFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtbkRyYWdXaWR0aEVuZGVkID0gb3V0cHV0PFhUYWJsZURyYWdXaWR0aEV2ZW50PigpO1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOihjOaVsOaNrlxyXG4gKiBAZW5fVVMgUm93IGRhdGFcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgWFRhYmxlUm93IGV4dGVuZHMgWFBhcmVudElkZW50aXR5UHJvcGVydHk8WFRhYmxlUm93PiB7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWxleW8gFxyXG4gICAqIEBlbl9VUyBVbmZvbGRcclxuICAgKi9cclxuICBleHBhbmRlZD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOiHquWumuS5ieWxnuaAp1xyXG4gICAqIEBlbl9VUyBDdXN0b20gYXR0cmlidXRlc1xyXG4gICAqL1xyXG4gIFtwcm9wZXJ0eTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+WPguaVsFxyXG4gKiBAZW5fVVMgQ29sdW1uIHBhcmFtZXRlclxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBYVGFibGVDb2x1bW4gZXh0ZW5kcyBYSWRlbnRpdHlQcm9wZXJ0eSB7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOexu+Wei1xyXG4gICAqIEBlbl9VUyBUeXBlcyBvZlxyXG4gICAqL1xyXG4gIHR5cGU/OiBYQ29sdW1uVHlwZTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5a695bqmXHJcbiAgICogQGVuX1VTIFdpZHRoXHJcbiAgICovXHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIGZsZXgg5biD5bGA5a695bqmXHJcbiAgICogQGVuX1VTIEZsZXggbGF5b3V0IHdpZHRoXHJcbiAgICovXHJcbiAgZmxleD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBAemhfQ04g5p+l6K+i5a2X5q61XHJcbiAgICogQGVuX1VTIFF1ZXJ5IGZpZWxkXHJcbiAgICovXHJcbiAgc2VhcmNoPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBAemhfQ04g5o6S5bqP5a2X5q61XHJcbiAgICogQGVuX1VTIFNvcnQgZmllbGRcclxuICAgKi9cclxuICBzb3J0PzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBAemhfQ04g5Zu65a6a5YiX77yM6Led56a75bem6L6555qE6Led56a7XHJcbiAgICogQGVuX1VTIEZpeGVkIGNvbHVtbiwgZGlzdGFuY2UgZnJvbSBsZWZ0XHJcbiAgICovXHJcbiAgbGVmdD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBAemhfQ04g5Zu65a6a5YiX77yM6Led56a75Y+z6L6555qE6Led56a7XHJcbiAgICogQGVuX1VTIEZpeGVkIGNvbHVtbiwgZGlzdGFuY2UgZnJvbSByaWdodFxyXG4gICAqL1xyXG4gIHJpZ2h0PzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmk43kvZzmjInpkq5cclxuICAgKiBAZW5fVVMgT3BlcmF0aW9uIGJ1dHRvblxyXG4gICAqL1xyXG4gIGFjdGlvbj86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIHR5cGUg5Li6IGNoZWNrYm94IOaXtue7keWumuihjOeCueWHu+mAieS4reS6i+S7tlxyXG4gICAqIEBlbl9VUyBCaW5kIHJvdyBjbGljayBzZWxlY3Rpb24gZXZlbnQgd2hlbiB0eXBlIGlzIGNoZWNrYm94XHJcbiAgICovXHJcbiAgcm93Q2hlY2tlZD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIHR5cGUg5Li6IGV4cGFuZCDml7bnu5HlrprooYzngrnlh7vlsZXlvIDkuovku7ZcclxuICAgKiBAZW5fVVMgQmluZCByb3cgY2xpY2sgc2VsZWN0aW9uIGV2ZW50IHdoZW4gdHlwZSBpcyBleHBhbmRcclxuICAgKi9cclxuICByb3dFeHBhbmQ/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmloflrZflr7npvZDmlrnlvI9cclxuICAgKiBAZW5fVVMgVGV4dCBhbGlnbm1lbnRcclxuICAgKi9cclxuICB0ZXh0QWxpZ24/OiBYVGV4dEFsaWduO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmi5bliqjliJflrr3vvIzpnIDopoHorr7nva7liJfnmoTliJ3lp4vlrr3luqYgd2lkdGhcclxuICAgKiBAZW5fVVMgRHJhZyB0aGUgY29sdW1uIHdpZHRoLCB5b3UgbmVlZCB0byBzZXQgdGhlIGluaXRpYWwgd2lkdGggb2YgdGhlIGNvbHVtbiB3aWR0aFxyXG4gICAqL1xyXG4gIGRyYWdXaWR0aD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOato+WcqOaLluWKqOWIl+WuvVxyXG4gICAqIEBlbl9VUyBEcmFnZ2luZyB3aWR0aFxyXG4gICAqL1xyXG4gIGRyYWdnaW5nV2lkdGg/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlvIDlp4vmi5bliqjliJflrr3nmoTkuovku7ZcclxuICAgKiBAZW5fVVMgRXZlbnQgdG8gc3RhcnRlZCBkcmFnIGNvbHVtbiB3aWR0aFxyXG4gICAqL1xyXG4gIGRyYWdXaWR0aFN0YXJ0ZWQ/OiAoZXZlbnQ6IFhUYWJsZURyYWdXaWR0aEV2ZW50KSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmraPlnKjmi5bliqjliJflrr3ml7bnmoTkuovku7ZcclxuICAgKiBAZW5fVVMgRXZlbnQgdG8gbW92ZWQgZHJhZyBjb2x1bW4gd2lkdGhcclxuICAgKi9cclxuICBkcmFnV2lkdGhNb3ZlZD86IChldmVudDogWFRhYmxlRHJhZ1dpZHRoRXZlbnQpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOe7k+adn+aLluWKqOWIl+WuveeahOS6i+S7tlxyXG4gICAqIEBlbl9VUyBFdmVudCB0byBlbmRlZCBkcmFnIGNvbHVtbiB3aWR0aFxyXG4gICAqL1xyXG4gIGRyYWdXaWR0aEVuZGVkPzogKGV2ZW50OiBYVGFibGVEcmFnV2lkdGhFdmVudCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBAemhfQ04g5ouW5Yqo5YiXXHJcbiAgICogQGVuX1VTIERyYWcgdGhlIGNvbHVtblxyXG4gICAqL1xyXG4gIGRyYWdDb2x1bW4/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmraPlnKjmi5bliqjliJdcclxuICAgKiBAZW5fVVMgRHJhZ2dpbmcgY29sdW1uXHJcbiAgICovXHJcbiAgZHJhZ2dpbmc/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDlpLTpg6jmmL7npLogY2hlY2tib3hcclxuICAgKiBAZW5fVVMgSGVhZCBzaG93cyBjaGVja2JveFxyXG4gICAqL1xyXG4gIGhlYWRDaGVja2VkPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBAemhfQ04g5aS06YOo5pi+56S6IGV4cGFuZFxyXG4gICAqIEBlbl9VUyBIZWFkIHNob3dzIGV4cGFuZFxyXG4gICAqL1xyXG4gIGhlYWRFeHBhbmQ/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJflhoXlrrnmlK/mjIEgaW5uZXJIVE1MIOa4suafkyBodG1sIOagh+etvlxyXG4gICAqIEBlbl9VUyBDb2x1bW4gY29udGVudCBzdXBwb3J0cyBpbm5lckhUTUwgcmVuZGVyaW5nIG9mIEhUTUwgdGFnc1xyXG4gICAqL1xyXG4gIGlubmVySFRNTD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOiHquWumuS5ieWxnuaAp1xyXG4gICAqIEBlbl9VUyBDdXN0b20gYXR0cmlidXRlc1xyXG4gICAqL1xyXG4gIFtwcm9wZXJ0eTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+WktOWuveW6puaLluWKqOS6i+S7tlxyXG4gKiBAZW5fVVMgQ29sdW1uIGhlYWRlciB3aWR0aCBkcmFnIGV2ZW50XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFhUYWJsZURyYWdXaWR0aEV2ZW50IHtcclxuICAvKipcclxuICAgKiBAemhfQ04g5ouW5Yqo55qE5YiXXHJcbiAgICogQGVuX1VTIERyYWdnZWQgY29sdW1uXHJcbiAgICovXHJcbiAgY29sdW1uOiBYVGFibGVDb2x1bW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWIl+S9jee9ru+8jOato+WcqOaLluWKqOeahOaXtuWAmeaMh+WBj+enu+S9jee9rlxyXG4gICAqIEBlbl9VUyBUaGUgY29sdW1uIHBvc2l0aW9uIHJlZmVycyB0byB0aGUgb2Zmc2V0IHBvc2l0aW9uIHdoZW4gZHJhZ2dpbmdcclxuICAgKi9cclxuICBwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+WktCBjaGVja2JveCDkuovku7bmlbDmja5cclxuICogQGVuX1VTIENvbHVtbiBoZWFkZXIgY2hlY2tib3ggZXZlbnQgZGF0YVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBYVGFibGVIZWFkQ2hlY2tib3gge1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDooYzmlbDmja5cclxuICAgKiBAZW5fVVMgUm93IGRhdGFcclxuICAgKi9cclxuICByb3dzOiBYVGFibGVSb3dbXTtcclxuICAvKipcclxuICAgKiBAemhfQ04gY2hlY2tib3gg5pWw5o2uXHJcbiAgICogQGVuX1VTIENoZWNrYm94IGRhdGFcclxuICAgKi9cclxuICBjaGVja2JveDogeyBbcHJvcGVydHk6IHN0cmluZ106IGJvb2xlYW4gfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEB6aF9DTiDljZXlhYPmoLzphY3nva5cclxuICogQGVuX1VTIENlbGwgY29uZmlnXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFhUYWJsZUNlbGxDb25maWcge1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJfljZXlhYPmoLzphY3nva5cclxuICAgKiBAZW5fVVMgQ29sdW1uIGNlbGwgY29uZmlnXHJcbiAgICovXHJcbiAgdGhlYWQ/OiBYVGFibGVDZWxsQ29uZmlnUnVsZTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGM5Y2V5YWD5qC86YWN572uXHJcbiAgICogQGVuX1VTIFJvdyBjb25maWdcclxuICAgKi9cclxuICB0Ym9keT86IFhUYWJsZUNlbGxDb25maWdSdWxlO1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWNleWFg+agvOmFjee9ruinhOWImVxyXG4gKiBAZW5fVVMgQ2VsbCBjb25maWcgcnVsZXNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgWFRhYmxlQ2VsbENvbmZpZ1J1bGUge1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiBncmlkIOW4g+WxgOS4i+WumuS5ieWIl+WuveW6plxyXG4gICAqIEBlbl9VUyBEZWZpbmUgY29sdW1uIHdpZHRoIHVuZGVyIGdyaWQgbGF5b3V0XHJcbiAgICovXHJcbiAgZ3JpZFRlbXBsYXRlQ29sdW1ucz86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAemhfQ04g5Y2V5YWD5qC86YWN572uXHJcbiAgICogQGVuX1VTIENlbGwgbWVyZ2UgcnVsZXNcclxuICAgKi9cclxuICBjZWxscz86IFhUYWJsZUNlbGxbXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEB6aF9DTiDljZXlhYPmoLzlkIjlubbphY3nva5cclxuICogQGVuX1VTIENlbGwgbWVyZ2UgcnVsZXNcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgWFRhYmxlQ2VsbCB7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOS9v+eUqCBncmlkIOW4g+WxgOadpeWQiOW5tuWNleWFg+agvFxyXG4gICAqIEBlbl9VUyBVc2UgZ3JpZCBsYXlvdXQgdG8gbWVyZ2UgY2VsbHNcclxuICAgKi9cclxuICBncmlkQXJlYT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAemhfQ04g5ZCN56ewXHJcbiAgICogQGVuX1VTIE5hbWVcclxuICAgKi9cclxuICBsYWJlbD86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAemhfQ04g5a695bqmXHJcbiAgICogQGVuX1VTIFdpZHRoXHJcbiAgICovXHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWbuuWumuWIl++8jOi3neemu+W3pui+ueeahOi3neemu1xyXG4gICAqIEBlbl9VUyBGaXhlZCBjb2x1bW4sIGRpc3RhbmNlIGZyb20gbGVmdFxyXG4gICAqL1xyXG4gIGxlZnQ/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWbuuWumuWIl++8jOi3neemu+WPs+i+ueeahOi3neemu1xyXG4gICAqIEBlbl9VUyBGaXhlZCBjb2x1bW4sIGRpc3RhbmNlIGZyb20gcmlnaHRcclxuICAgKi9cclxuICByaWdodD86IG51bWJlcjtcclxuICAvKipcclxuICAgKiBAemhfQ04g5a+55bqU5YiX55qEIGlkXHJcbiAgICogQGVuX1VTIFRoZSBpZCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb2x1bW5cclxuICAgKi9cclxuICBpZD86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAemhfQ04g5ouW5Yqo5YiX5a69XHJcbiAgICogQGVuX1VTIERyYWcgdGhlIGNvbHVtbiB3aWR0aFxyXG4gICAqL1xyXG4gIGRyYWdXaWR0aD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOiHquWumuS5ieWxnuaAp1xyXG4gICAqIEBlbl9VUyBDdXN0b20gYXR0cmlidXRlc1xyXG4gICAqL1xyXG4gIFtwcm9wZXJ0eTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+exu+Wei1xyXG4gKiBAZW5fVVMgQ29sdW1uIHR5cGVcclxuICovXHJcbmV4cG9ydCB0eXBlIFhDb2x1bW5UeXBlID0gJ2xhYmVsJyB8ICdpbmRleCcgfCAnY2hlY2tib3gnIHwgJ2V4cGFuZCc7XHJcblxyXG4vKipcclxuICogQHpoX0NOIOWIl+WktOaYvuekuuS9jee9rlxyXG4gKiBAZW5fVVMgTGluZSBoZWFkIGRpc3BsYXkgcG9zaXRpb25cclxuICovXHJcbmV4cG9ydCB0eXBlIFhUYWJsZUhlYWRlclBvc2l0aW9uID0gJ3RvcCcgfCAnYm90dG9tJyB8ICd0b3AtYm90dG9tJztcclxuXHJcbi8qKlxyXG4gKiBAemhfQ04g5YiG6aG15Zmo5L2N572uXHJcbiAqIEBlbl9VUyBQYWdpbmcgcG9zaXRpb25cclxuICovXHJcbmV4cG9ydCB0eXBlIFhQYWdpbmF0aW9uUG9zaXRpb24gPVxyXG4gIHwgJ3RvcC1sZWZ0J1xyXG4gIHwgJ3RvcC1jZW50ZXInXHJcbiAgfCAndG9wLXJpZ2h0J1xyXG4gIHwgJ2JvdHRvbS1sZWZ0J1xyXG4gIHwgJ2JvdHRvbS1jZW50ZXInXHJcbiAgfCAnYm90dG9tLXJpZ2h0JztcclxuXHJcbi8qKlxyXG4gKiBAemhfQ04g5qih5p2/XHJcbiAqIEBlbl9VUyBUZW1wbGF0ZVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgWFRhYmxlVGVtcGxhdGUgPSB7IFtwcm9wZXJ0eTogc3RyaW5nXTogVGVtcGxhdGVSZWY8YW55PiB9O1xyXG5cclxuLyoqXHJcbiAqIFRhYmxlIEhlYWRcclxuICogQHNlbGVjdG9yIHgtdGFibGUtaGVhZFxyXG4gKiBAZGVjb3JhdG9yIGNvbXBvbmVudFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFhUYWJsZUhlYWRQcmVmaXggPSAneC10YWJsZS1oZWFkJztcclxuXHJcbi8qKlxyXG4gKiBUYWJsZSBIZWFkIFByb3BlcnR5XHJcbiAqL1xyXG5AQ29tcG9uZW50KHsgc2VsZWN0b3I6IGAke1hUYWJsZUhlYWRQcmVmaXh9LXByb3BlcnR5YCwgdGVtcGxhdGU6ICcnIH0pXHJcbmV4cG9ydCBjbGFzcyBYVGFibGVIZWFkUHJvcGVydHkgZXh0ZW5kcyBYUHJvcGVydHkge1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJfpm4blkIhcclxuICAgKiBAZW5fVVMgQ29sdW1uIHNldFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtbnMgPSBpbnB1dDxYVGFibGVDb2x1bW5bXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDpq5jluqbvvIzljZXkvY0gcHhcclxuICAgKiBAZW5fVVMgSGVpZ2h0IGluIHB4XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgcm93SGVpZ2h0ID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPig0MiwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6Ieq5a6a5LmJ5qih5p2/XHJcbiAgICogQGVuX1VTIEN1c3RvbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtblRwbCA9IGlucHV0PFhUYWJsZVRlbXBsYXRlPih7fSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOerluWQkea7muWKqOadoeWuveW6plxyXG4gICAqIEBlbl9VUyBWZXJ0aWNhbCBzY3JvbGwgYmFyIHdpZHRoXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2Nyb2xsWVdpZHRoID0gaW5wdXQ8bnVtYmVyIHwgbnVsbCwgWE51bWJlcj4obnVsbCwgeyB0cmFuc2Zvcm06IFhUb051bWJlciB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5qiq5ZCR5rua5Yqo5p2h5a695bqmXHJcbiAgICogQGVuX1VTIEhvcml6b250YWwgc2Nyb2xsIGJhciB3aWR0aFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNjcm9sbFhXaWR0aCA9IGlucHV0PG51bWJlciB8IG51bGwsIFhOdW1iZXI+KG51bGwsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWNleWFg+agvOmFjee9rlxyXG4gICAqIEBlbl9VUyBDZWxsIG1lcmdlIHJ1bGVzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY2VsbENvbmZpZyA9IGlucHV0PFhUYWJsZUNlbGxDb25maWdSdWxlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmmL7npLrnmoTkvY3nva5cclxuICAgKiBAZW5fVVMgRGlzcGxheSBwb3NpdGlvblxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHBvc2l0aW9uID0gaW5wdXQ8c3RyaW5nPigpO1xyXG59XHJcblxyXG4vKipcclxuICogVGFibGUgQm9keVxyXG4gKiBAc2VsZWN0b3IgeC10YWJsZS1ib2R5XHJcbiAqIEBkZWNvcmF0b3IgY29tcG9uZW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgWFRhYmxlQm9keVByZWZpeCA9ICd4LXRhYmxlLWJvZHknO1xyXG5cclxuLyoqXHJcbiAqIFRhYmxlIEJvZHkgUHJvcGVydHlcclxuICovXHJcbkBDb21wb25lbnQoeyBzZWxlY3RvcjogYCR7WFRhYmxlQm9keVByZWZpeH0tcHJvcGVydHlgLCB0ZW1wbGF0ZTogJycgfSlcclxuZXhwb3J0IGNsYXNzIFhUYWJsZUJvZHlQcm9wZXJ0eSBleHRlbmRzIFhQcm9wZXJ0eSB7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihjOaVsOaNrlxyXG4gICAqIEBlbl9VUyBSb3cgZGF0YVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDxYVGFibGVSb3dbXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDliJfpm4blkIhcclxuICAgKiBAZW5fVVMgQ29sdW1uIHNldFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGNvbHVtbnMgPSBpbnB1dDxYVGFibGVDb2x1bW5bXT4oW10pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDoh6rlrprkuYnmqKHmnb9cclxuICAgKiBAZW5fVVMgQ3VzdG9tIHRlbXBsYXRlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY29sdW1uVHBsID0gaW5wdXQ8WFRhYmxlVGVtcGxhdGU+KHt9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5b2T5YmN6YCJ5Lit6KGM5pWw5o2uXHJcbiAgICogQGVuX1VTIEN1cnJlbnRseSBzZWxlY3RlZCByb3cgZGF0YVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGFjdGl2YXRlZFJvdyA9IG1vZGVsPFhUYWJsZVJvdz4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6auY5bqm77yM5Y2V5L2NIHB444CC6K6+572u5Li6IDAg6KGo56S66KGM6auY6Ieq6YCC5bqU5YaF5a656auY5bqm44CCXHJcbiAgICogQGVuX1VTIEhlaWdodCBpbiBweC4gc2V0IHRvIDAgbWVhbnMgdGhhdCB0aGUgcm93IGhlaWdodCBpcyBhZGFwdGl2ZSB0byB0aGUgY29udGVudCBoZWlnaHRcclxuICAgKi9cclxuICByZWFkb25seSByb3dIZWlnaHQgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDQyLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiBib2R5IOaVsOaNrumrmOW6plxyXG4gICAqIEBlbl9VUyBib2R5IGRhdGEgaGVpZ2h0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYm9keUhlaWdodCA9IGlucHV0PG51bWJlciB8IG51bGwsIFhOdW1iZXI+KG51bGwsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOWFgeiuuOihjOeCueWHu+mAieS4rVxyXG4gICAqIEBlbl9VUyBBbGxvdyByb3cgY2xpY2sgdG8gc2VsZWN0XHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYWxsb3dTZWxlY3RSb3cgPSBpbnB1dDxib29sZWFuLCBYQm9vbGVhbj4odHJ1ZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOW8gOWQr+iZmuaLn+a7muWKqFxyXG4gICAqIEBlbl9VUyBUdXJuIG9uIHZpcnR1YWwgc2Nyb2xsaW5nXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgdmlydHVhbFNjcm9sbCA9IGlucHV0PGJvb2xlYW4sIFhCb29sZWFuPihmYWxzZSwgeyB0cmFuc2Zvcm06IFhUb0Jvb2xlYW4gfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIGl0ZW1TaXpl77yM5a+55bqUIGNkayBzY3JvbGwg5Lit55qE5Y+C5pWwXHJcbiAgICogQGVuX1VTIGl0ZW1TaXpl77yMY29ycmVzcG9uZGluZyB0byB0aGUgcGFyYW1ldGVycyBpbiBjZGsgc2Nyb2xsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgaXRlbVNpemUgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDQyLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDotoXlh7rlj6/op4bnqpflj6PnvJPlhrLljLrnmoTmnIDlsI/lgLzvvIzlr7nlupQgY2RrIHNjcm9sbCDkuK3nmoTlj4LmlbBcclxuICAgKiBAZW5fVVMgRXhjZWVkIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSB2aXNpYmxlIHdpbmRvdyBidWZmZXIsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMgaW4gY2RrIHNjcm9sbFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IG1pbkJ1ZmZlclB4ID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPigxMDAsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOa4suafk+aWsOaVsOaNrue8k+WGsuWMuueahOWDj+e0oO+8jOWvueW6lCBjZGsgc2Nyb2xsIOS4reeahOWPguaVsFxyXG4gICAqIEBlbl9VUyBSZW5kZXIgdGhlIHBpeGVscyBvZiB0aGUgbmV3IGRhdGEgYnVmZmVyLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIGluIGNkayBzY3JvbGxcclxuICAgKi9cclxuICByZWFkb25seSBtYXhCdWZmZXJQeCA9IGlucHV0PG51bWJlciwgWE51bWJlcj4oMjAwLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDoh6rpgILlupTpq5jluqbvvIx0YWJsZSDpq5jluqbnrYnkuo7lsY/luZXpq5jluqblh4/mjonmraTlpITorr7nva7nmoTmlbDlgLxcclxuICAgKiBAZW5fVVMgQWRhcHRpdmUgaGVpZ2h0LCB0YWJsZSBoZWlnaHQgaXMgZXF1YWwgdG8gdGhlIHNjcmVlbiBoZWlnaHQgbWludXMgdGhlIHZhbHVlIHNldCBoZXJlXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgYWRhcHRpb25IZWlnaHQgPSBpbnB1dDxudW1iZXIgfCBudWxsLCBYTnVtYmVyPihudWxsLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmlofmoaPpq5jluqbnmb7liIbmr5TvvIzlvLnnqpfnmb7liIbmr5Tpq5jluqbnlKjliLBcclxuICAgKiBAZW5fVVMgRG9jdW1lbnQgaGVpZ2h0IHBlcmNlbnRhZ2UsIHVzZWQgYnkgcG9wLXVwIHdpbmRvdyBwZXJjZW50YWdlIGhlaWdodFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGRvY1BlcmNlbnQgPSBpbnB1dDxudW1iZXIsIFhOdW1iZXI+KDEsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOa7muWKqOWMuuWfn+mrmOWuvVxyXG4gICAqIEBlbl9VUyBIZWlnaHQgYW5kIHdpZHRoIG9mIHJvbGxpbmcgYXJlYVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHNjcm9sbCA9IGlucHV0PHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5Y2V5YWD5qC86YWN572u6KeE5YiZXHJcbiAgICogQGVuX1VTIENlbGwgY29uZmlnIHJ1bGVzXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgY2VsbENvbmZpZyA9IGlucHV0PFhUYWJsZUNlbGxDb25maWdSdWxlPigpO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDooYzmnaHku7bmoLflvI9cclxuICAgKiBAZW5fVVMgUm93IGNvbmRpdGlvbiBjbGFzc1xyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHJvd0NsYXNzID0gaW5wdXQ8KHJvdzogWFRhYmxlUm93LCBpbmRleDogbnVtYmVyKSA9PiB7IFtjbGFzc05hbWU6IHN0cmluZ106IGJvb2xlYW4gfT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g5qCR5b2i6KGo5qC85LiL55qE5bGC57qnXHJcbiAgICogQGVuX1VTIFRoZSBsZXZlbCB1bmRlciB0aGUgdHJlZSB0YWJsZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGxldmVsID0gaW5wdXQ8bnVtYmVyLCBYTnVtYmVyPigwLCB7IHRyYW5zZm9ybTogWFRvTnVtYmVyIH0pO1xyXG4gIC8qKlxyXG4gICAqIEB6aF9DTiDmoJHlvaLooajmoLzlsZXlvIDmiYDmnInoioLngrlcclxuICAgKiBAZW5fVVMgVHJlZSB0YWJsZVxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGV4cGFuZGVkQWxsID0gaW5wdXQ8Ym9vbGVhbiwgWEJvb2xlYW4+KGZhbHNlLCB7IHRyYW5zZm9ybTogWFRvQm9vbGVhbiB9KTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6Ieq5a6a5LmJ5bGV5byA5YaF5a65XHJcbiAgICogQGVuX1VTIEN1c3RvbWl6ZWQgZXhwYW5zaW9uIGNvbnRlbnRcclxuICAgKi9cclxuICByZWFkb25seSBleHBhbmRUcGwgPSBpbnB1dDxYVGVtcGxhdGU+KCk7XHJcbiAgLyoqXHJcbiAgICogQHpoX0NOIOihjOeCueWHu+S6i+S7tlxyXG4gICAqIEBlbl9VUyBSb3cgY2xpY2sgZXZlbnRcclxuICAgKi9cclxuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDxYVGFibGVSb3c+KCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUYWJsZSBGb290XHJcbiAqIEBzZWxlY3RvciB4LXRhYmxlLWZvb3RcclxuICogQGRlY29yYXRvciBjb21wb25lbnRcclxuICovXHJcbmV4cG9ydCBjb25zdCBYVGFibGVGb290UHJlZml4ID0gJ3gtdGFibGUtZm9vdCc7XHJcblxyXG4vKipcclxuICogVGFibGUgRm9vdCBQcm9wZXJ0eVxyXG4gKi9cclxuQENvbXBvbmVudCh7IHNlbGVjdG9yOiBgJHtYVGFibGVGb290UHJlZml4fS1wcm9wZXJ0eWAsIHRlbXBsYXRlOiAnJyB9KVxyXG5leHBvcnQgY2xhc3MgWFRhYmxlRm9vdFByb3BlcnR5IGV4dGVuZHMgWFByb3BlcnR5IHtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGo5qC86aG15bC+XHJcbiAgICogQGVuX1VTIFRhYmxlIGZvb3RlclxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IGZvb3RlciA9IGlucHV0PFhUZW1wbGF0ZT4oKTtcclxuICAvKipcclxuICAgKiBAemhfQ04g6KGo5aS05ZKM6KGM6auY77yM5Y2V5L2NIHB4XHJcbiAgICogQGVuX1VTIEhlYWRlciBhbmQgcm93IGhlaWdodCwgdW5pdCBweFxyXG4gICAqL1xyXG4gIHJlYWRvbmx5IHJvd0hlaWdodCA9IGlucHV0PG51bWJlciB8IG51bGwsIFhOdW1iZXI+KG51bGwsIHsgdHJhbnNmb3JtOiBYVG9OdW1iZXIgfSk7XHJcbn1cclxuIl19