@syncfusion/ej2-angular-charts
Version:
Feature-rich chart control with built-in support for over 25 chart types, technical indictors, trendline, zooming, tooltip, selection, crosshair and trackball. for Angular
68 lines • 36.9 kB
JavaScript
import { __decorate } from "tslib";
import { Directive, ContentChildren, ContentChild } from '@angular/core';
import { ComplexBase, ArrayBase, setValue } from '@syncfusion/ej2-angular-base';
import { Template } from '@syncfusion/ej2-angular-base';
import { TrendlinesDirective } from './trendlines.directive';
import { SegmentsDirective } from './segments.directive';
import * as i0 from "@angular/core";
let input = ['accessibility', 'animation', 'bearFillColor', 'binInterval', 'border', 'boxPlotMode', 'bullFillColor', 'cardinalSplineTension', 'close', 'colorName', 'columnFacet', 'columnSpacing', 'columnWidth', 'columnWidthInPixel', 'connector', 'cornerRadius', 'dashArray', 'dataSource', 'dragSettings', 'drawType', 'emptyPointSettings', 'enableComplexProperty', 'enableSolidCandles', 'enableTooltip', 'errorBar', 'fill', 'groupName', 'high', 'intermediateSumIndexes', 'isClosed', 'lastValueLabel', 'legendImageUrl', 'legendShape', 'low', 'marker', 'maxRadius', 'minRadius', 'name', 'negativeFillColor', 'noRisers', 'nonHighlightStyle', 'opacity', 'open', 'paretoOptions', 'pointColorMapping', 'query', 'segmentAxis', 'segments', 'selectionStyle', 'showMean', 'showNearestTooltip', 'showNormalDistribution', 'showOutliers', 'size', 'splineType', 'stackingGroup', 'step', 'sumIndexes', 'summaryFillColor', 'tooltipFormat', 'tooltipMappingName', 'trendlines', 'type', 'unSelectedStyle', 'visible', 'volume', 'width', 'xAxisName', 'xName', 'yAxisName', 'yName', 'zOrder'];
let outputs = [];
/**
* Series Directive
* ```html
* <e-series-collection>
* <e-series></e-series>
* </e-series-collection>
* ```
*/
export class SeriesDirective extends ComplexBase {
constructor(viewContainerRef) {
super();
this.viewContainerRef = viewContainerRef;
this.tags = ['trendlines', 'segments'];
setValue('currentInstance', this, this.viewContainerRef);
this.registerEvents(outputs);
this.directivePropList = input;
}
}
SeriesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SeriesDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
SeriesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: SeriesDirective, selector: "e-series-collection>e-series", inputs: { accessibility: "accessibility", animation: "animation", bearFillColor: "bearFillColor", binInterval: "binInterval", border: "border", boxPlotMode: "boxPlotMode", bullFillColor: "bullFillColor", cardinalSplineTension: "cardinalSplineTension", close: "close", colorName: "colorName", columnFacet: "columnFacet", columnSpacing: "columnSpacing", columnWidth: "columnWidth", columnWidthInPixel: "columnWidthInPixel", connector: "connector", cornerRadius: "cornerRadius", dashArray: "dashArray", dataSource: "dataSource", dragSettings: "dragSettings", drawType: "drawType", emptyPointSettings: "emptyPointSettings", enableComplexProperty: "enableComplexProperty", enableSolidCandles: "enableSolidCandles", enableTooltip: "enableTooltip", errorBar: "errorBar", fill: "fill", groupName: "groupName", high: "high", intermediateSumIndexes: "intermediateSumIndexes", isClosed: "isClosed", lastValueLabel: "lastValueLabel", legendImageUrl: "legendImageUrl", legendShape: "legendShape", low: "low", marker: "marker", maxRadius: "maxRadius", minRadius: "minRadius", name: "name", negativeFillColor: "negativeFillColor", noRisers: "noRisers", nonHighlightStyle: "nonHighlightStyle", opacity: "opacity", open: "open", paretoOptions: "paretoOptions", pointColorMapping: "pointColorMapping", query: "query", segmentAxis: "segmentAxis", segments: "segments", selectionStyle: "selectionStyle", showMean: "showMean", showNearestTooltip: "showNearestTooltip", showNormalDistribution: "showNormalDistribution", showOutliers: "showOutliers", size: "size", splineType: "splineType", stackingGroup: "stackingGroup", step: "step", sumIndexes: "sumIndexes", summaryFillColor: "summaryFillColor", tooltipFormat: "tooltipFormat", tooltipMappingName: "tooltipMappingName", trendlines: "trendlines", type: "type", unSelectedStyle: "unSelectedStyle", visible: "visible", volume: "volume", width: "width", xAxisName: "xAxisName", xName: "xName", yAxisName: "yAxisName", yName: "yName", zOrder: "zOrder" }, queries: [{ propertyName: "dataLabel_template", first: true, predicate: ["dataLabelTemplate"], descendants: true }, { propertyName: "childTrendlines", first: true, predicate: TrendlinesDirective, descendants: true }, { propertyName: "childSegments", first: true, predicate: SegmentsDirective, descendants: true }], usesInheritance: true, ngImport: i0 });
__decorate([
Template()
], SeriesDirective.prototype, "dataLabel_template", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SeriesDirective, decorators: [{
type: Directive,
args: [{
selector: 'e-series-collection>e-series',
inputs: input,
outputs: outputs,
queries: {
childTrendlines: new ContentChild(TrendlinesDirective),
childSegments: new ContentChild(SegmentsDirective)
}
}]
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { dataLabel_template: [{
type: ContentChild,
args: ['dataLabelTemplate']
}] } });
/**
* Series Array Directive
* @private
*/
export class SeriesCollectionDirective extends ArrayBase {
constructor() {
super('series');
}
}
SeriesCollectionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SeriesCollectionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
SeriesCollectionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: SeriesCollectionDirective, selector: "ej-chart>e-series-collection", queries: [{ propertyName: "children", predicate: SeriesDirective }], usesInheritance: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SeriesCollectionDirective, decorators: [{
type: Directive,
args: [{
selector: 'ej-chart>e-series-collection',
queries: {
children: new ContentChildren(SeriesDirective)
},
}]
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWVzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9zZXJpZXMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFekQsSUFBSSxLQUFLLEdBQWEsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4akMsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO0FBQzNCOzs7Ozs7O0dBT0c7QUFVSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUE0QjtJQW1kN0QsWUFBb0IsZ0JBQWlDO1FBQ2pELEtBQUssRUFBRSxDQUFDO1FBRFEscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQTljOUMsU0FBSSxHQUFhLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBZ2QvQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDOzs0R0F4ZFEsZUFBZTtnR0FBZixlQUFlLHlwRUFKYyxtQkFBbUIsZ0ZBQ3JCLGlCQUFpQjtBQW9kckQ7SUFEQyxRQUFRLEVBQUU7MkRBQ29COzJGQWpkdEIsZUFBZTtrQkFUM0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxNQUFNLEVBQUUsS0FBSztvQkFDYixPQUFPLEVBQUUsT0FBTztvQkFDaEIsT0FBTyxFQUFFO3dCQUNMLGVBQWUsRUFBRSxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQzt3QkFDdEQsYUFBYSxFQUFFLElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDO3FCQUNyRDtpQkFDSjt1R0FrZFUsa0JBQWtCO3NCQUZ4QixZQUFZO3VCQUFDLG1CQUFtQjs7QUFZckM7OztHQUdHO0FBT0gsTUFBTSxPQUFPLHlCQUEwQixTQUFRLFNBQW9DO0lBQy9FO1FBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7O3NIQUhRLHlCQUF5QjswR0FBekIseUJBQXlCLDZGQUhBLGVBQWU7MkZBR3hDLHlCQUF5QjtrQkFOckMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxPQUFPLEVBQUU7d0JBQ0wsUUFBUSxFQUFFLElBQUksZUFBZSxDQUFDLGVBQWUsQ0FBQztxQkFDakQ7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFZpZXdDb250YWluZXJSZWYsIENvbnRlbnRDaGlsZHJlbiwgQ29udGVudENoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wbGV4QmFzZSwgQXJyYXlCYXNlLCBzZXRWYWx1ZSB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWJhc2UnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1iYXNlJztcbmltcG9ydCB7IFRyZW5kbGluZXNEaXJlY3RpdmUgfSBmcm9tICcuL3RyZW5kbGluZXMuZGlyZWN0aXZlJztcbmltcG9ydCB7IFNlZ21lbnRzRGlyZWN0aXZlIH0gZnJvbSAnLi9zZWdtZW50cy5kaXJlY3RpdmUnO1xuXG5sZXQgaW5wdXQ6IHN0cmluZ1tdID0gWydhY2Nlc3NpYmlsaXR5JywgJ2FuaW1hdGlvbicsICdiZWFyRmlsbENvbG9yJywgJ2JpbkludGVydmFsJywgJ2JvcmRlcicsICdib3hQbG90TW9kZScsICdidWxsRmlsbENvbG9yJywgJ2NhcmRpbmFsU3BsaW5lVGVuc2lvbicsICdjbG9zZScsICdjb2xvck5hbWUnLCAnY29sdW1uRmFjZXQnLCAnY29sdW1uU3BhY2luZycsICdjb2x1bW5XaWR0aCcsICdjb2x1bW5XaWR0aEluUGl4ZWwnLCAnY29ubmVjdG9yJywgJ2Nvcm5lclJhZGl1cycsICdkYXNoQXJyYXknLCAnZGF0YVNvdXJjZScsICdkcmFnU2V0dGluZ3MnLCAnZHJhd1R5cGUnLCAnZW1wdHlQb2ludFNldHRpbmdzJywgJ2VuYWJsZUNvbXBsZXhQcm9wZXJ0eScsICdlbmFibGVTb2xpZENhbmRsZXMnLCAnZW5hYmxlVG9vbHRpcCcsICdlcnJvckJhcicsICdmaWxsJywgJ2dyb3VwTmFtZScsICdoaWdoJywgJ2ludGVybWVkaWF0ZVN1bUluZGV4ZXMnLCAnaXNDbG9zZWQnLCAnbGFzdFZhbHVlTGFiZWwnLCAnbGVnZW5kSW1hZ2VVcmwnLCAnbGVnZW5kU2hhcGUnLCAnbG93JywgJ21hcmtlcicsICdtYXhSYWRpdXMnLCAnbWluUmFkaXVzJywgJ25hbWUnLCAnbmVnYXRpdmVGaWxsQ29sb3InLCAnbm9SaXNlcnMnLCAnbm9uSGlnaGxpZ2h0U3R5bGUnLCAnb3BhY2l0eScsICdvcGVuJywgJ3BhcmV0b09wdGlvbnMnLCAncG9pbnRDb2xvck1hcHBpbmcnLCAncXVlcnknLCAnc2VnbWVudEF4aXMnLCAnc2VnbWVudHMnLCAnc2VsZWN0aW9uU3R5bGUnLCAnc2hvd01lYW4nLCAnc2hvd05lYXJlc3RUb29sdGlwJywgJ3Nob3dOb3JtYWxEaXN0cmlidXRpb24nLCAnc2hvd091dGxpZXJzJywgJ3NpemUnLCAnc3BsaW5lVHlwZScsICdzdGFja2luZ0dyb3VwJywgJ3N0ZXAnLCAnc3VtSW5kZXhlcycsICdzdW1tYXJ5RmlsbENvbG9yJywgJ3Rvb2x0aXBGb3JtYXQnLCAndG9vbHRpcE1hcHBpbmdOYW1lJywgJ3RyZW5kbGluZXMnLCAndHlwZScsICd1blNlbGVjdGVkU3R5bGUnLCAndmlzaWJsZScsICd2b2x1bWUnLCAnd2lkdGgnLCAneEF4aXNOYW1lJywgJ3hOYW1lJywgJ3lBeGlzTmFtZScsICd5TmFtZScsICd6T3JkZXInXTtcbmxldCBvdXRwdXRzOiBzdHJpbmdbXSA9IFtdO1xuLyoqXG4gKiBTZXJpZXMgRGlyZWN0aXZlXG4gKiBgYGBodG1sXG4gKiA8ZS1zZXJpZXMtY29sbGVjdGlvbj5cbiAqIDxlLXNlcmllcz48L2Utc2VyaWVzPlxuICogPC9lLXNlcmllcy1jb2xsZWN0aW9uPlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnZS1zZXJpZXMtY29sbGVjdGlvbj5lLXNlcmllcycsXG4gICAgaW5wdXRzOiBpbnB1dCxcbiAgICBvdXRwdXRzOiBvdXRwdXRzLCAgICBcbiAgICBxdWVyaWVzOiB7XG4gICAgICAgIGNoaWxkVHJlbmRsaW5lczogbmV3IENvbnRlbnRDaGlsZChUcmVuZGxpbmVzRGlyZWN0aXZlKSwgXG4gICAgICAgIGNoaWxkU2VnbWVudHM6IG5ldyBDb250ZW50Q2hpbGQoU2VnbWVudHNEaXJlY3RpdmUpXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBTZXJpZXNEaXJlY3RpdmUgZXh0ZW5kcyBDb21wbGV4QmFzZTxTZXJpZXNEaXJlY3RpdmU+IHtcbiAgICBwdWJsaWMgZGlyZWN0aXZlUHJvcExpc3Q6IGFueTtcblx0XG4gICAgcHVibGljIGNoaWxkVHJlbmRsaW5lczogYW55O1xuICAgIHB1YmxpYyBjaGlsZFNlZ21lbnRzOiBhbnk7XG4gICAgcHVibGljIHRhZ3M6IHN0cmluZ1tdID0gWyd0cmVuZGxpbmVzJywgJ3NlZ21lbnRzJ107XG4gICAgLyoqIFxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzZXJpZXMgZGV0ZXJtaW5lcyB0aGUgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhLiBcbiAgICAgKiBBdmFpbGFibGUgc2VyaWVzIHR5cGVzIGluY2x1ZGU6IFxuICAgICAqICogTGluZSAtIERyYXdzIGEgbGluZSBzZXJpZXMuIFxuICAgICAqICogQ29sdW1uIC0gRHJhd3MgYSBjb2x1bW4gc2VyaWVzLiBcbiAgICAgKiAqIEFyZWEgLSBEcmF3cyBhbiBhcmVhIHNlcmllcy4gXG4gICAgICogKiBCYXIgLSBEcmF3cyBhIGJhciBzZXJpZXMuIFxuICAgICAqICogSGlzdG9ncmFtIC0gRHJhd3MgYSBoaXN0b2dyYW0gc2VyaWVzLiBcbiAgICAgKiAqIFN0YWNraW5nQ29sdW1uIC0gRHJhd3MgYSBzdGFja2luZyBjb2x1bW4gc2VyaWVzLiBcbiAgICAgKiAqIFN0YWNraW5nQXJlYSAtIERyYXdzIGEgc3RhY2tpbmcgYXJlYSBzZXJpZXMuIFxuICAgICAqICogU3RhY2tpbmdCYXIgLSBEcmF3cyBhIHN0YWNraW5nIGJhciBzZXJpZXMuIFxuICAgICAqICogU3RlcExpbmUgLSBEcmF3cyBhIHN0ZXAgbGluZSBzZXJpZXMuIFxuICAgICAqICogU3RlcEFyZWEgLSBEcmF3cyBhIHN0ZXAgYXJlYSBzZXJpZXMuIFxuICAgICAqICogU2NhdHRlciAtIERyYXdzIGEgc2NhdHRlciBzZXJpZXMuIFxuICAgICAqICogU3BsaW5lIC0gRHJhd3MgYSBzcGxpbmUgc2VyaWVzLiBcbiAgICAgKiAqIFN0YWNraW5nQ29sdW1uMTAwIC0gRHJhd3MgYSAxMDAlIHN0YWNrZWQgY29sdW1uIHNlcmllcy4gXG4gICAgICogKiBTdGFja2luZ0JhcjEwMCAtIERyYXdzIGEgMTAwJSBzdGFja2VkIGJhciBzZXJpZXMuIFxuICAgICAqICogU3RhY2tpbmdBcmVhMTAwIC0gRHJhd3MgYSAxMDAlIHN0YWNrZWQgYXJlYSBzZXJpZXMuIFxuICAgICAqICogUmFuZ2VDb2x1bW4gLSBEcmF3cyBhIHJhbmdlIGNvbHVtbiBzZXJpZXMuIFxuICAgICAqICogSGlsbyAtIERyYXdzIGEgSGlsbyBzZXJpZXMuIFxuICAgICAqICogSGlsb09wZW5DbG9zZSAtIERyYXdzIGEgSGlsbyBPcGVuIENsb3NlIHNlcmllcy4gXG4gICAgICogKiBXYXRlcmZhbGwgLSBEcmF3cyBhIHdhdGVyZmFsbCBzZXJpZXMuIFxuICAgICAqICogUmFuZ2VBcmVhIC0gRHJhd3MgYSByYW5nZSBhcmVhIHNlcmllcy4gXG4gICAgICogKiBTcGxpbmVSYW5nZUFyZWEgLSBEcmF3cyBhIHNwbGluZSByYW5nZSBhcmVhIHNlcmllcy4gXG4gICAgICogKiBCdWJibGUgLSBEcmF3cyBhIGJ1YmJsZSBzZXJpZXMuIFxuICAgICAqICogQ2FuZGxlIC0gRHJhd3MgYSBjYW5kbGUgc2VyaWVzLiBcbiAgICAgKiAqIFBvbGFyIC0gRHJhd3MgYSBwb2xhciBzZXJpZXMuIFxuICAgICAqICogUmFkYXIgLSBEcmF3cyBhIHJhZGFyIHNlcmllcy4gXG4gICAgICogKiBCb3hBbmRXaGlza2VyIC0gRHJhd3MgYSBib3ggYW5kIHdoaXNrZXIgc2VyaWVzLiBcbiAgICAgKiAqIFBhcmV0byAtIERyYXdzIGEgUGFyZXRvIHNlcmllcy5cbiAgICAgKiBAZGVmYXVsdCAnTGluZSdcbiAgICAgKi9cbiAgICBwdWJsaWMgdHlwZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIHRvIGltcHJvdmUgYWNjZXNzaWJpbGl0eSBmb3Igc2VyaWVzIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhY2Nlc3NpYmlsaXR5OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIHRoZSBhbmltYXRpb24gb2YgdGhlIHNlcmllcy4gXG4gICAgICogQnkgZGVmYXVsdCwgYW5pbWF0aW9uIGlzIGVuYWJsZWQgd2l0aCBhIGR1cmF0aW9uIG9mIDEwMDAgbWlsbGlzZWNvbmRzIChhYm91dCAxIHNlY29uZCkuIEl0IGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIGVuYWJsZSB0byBgZmFsc2VgLiBcbiAgICAgKiBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIHN1cHBvcnRlZCBpbiBhbmltYXRpb246IFxuICAgICAqICogZW5hYmxlOiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHNlcmllcyBpcyBhbmltYXRlZCBvbiBpbml0aWFsIGxvYWRpbmcuIFxuICAgICAqICogZHVyYXRpb246IFRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGluIG1pbGxpc2Vjb25kcy4gXG4gICAgICogKiBkZWxheTogVGhlIGRlbGF5IGJlZm9yZSB0aGUgYW5pbWF0aW9uIHN0YXJ0cywgaW4gbWlsbGlzZWNvbmRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhbmltYXRpb246IGFueTtcbiAgICAvKiogXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGluIGZpbmFuY2lhbCBjaGFydHMgdG8gdmlzdWFsaXplIHByaWNlIG1vdmVtZW50cyBpbiBzdG9ja3MuIFxuICAgICAqIEl0IGRlZmluZXMgdGhlIGNvbG9yIG9mIHRoZSBjYW5kbGUvcG9pbnQgd2hlbiB0aGUgb3BlbmluZyBwcmljZSBpcyBsZXNzIHRoYW4gdGhlIGNsb3NpbmcgcHJpY2UuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBiZWFyRmlsbENvbG9yOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgYmluSW50ZXJ2YWxgIHByb3BlcnR5IGNvbnRyb2xzIHRoZSB3aWR0aCBvZiBlYWNoIGJpbiBhbmQgdGhlIGludGVydmFsIGJldHdlZW4gYmlucyBmb3IgaGlzdG9ncmFtIHBvaW50cy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICogQGFzcGRlZmF1bHR2YWx1ZWlnbm9yZSBcbiAgICAgKi9cbiAgICBwdWJsaWMgYmluSW50ZXJ2YWw6IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgdGhlIGJvcmRlciBvZiB0aGUgc2VyaWVzLiBcbiAgICAgKiA+IE5vdGUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIGFwcGxpY2FibGUgb25seSBmb3IgYENvbHVtbmAgYW5kIGBCYXJgIHR5cGUgc2VyaWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBib3JkZXI6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBib3ggcGxvdCBtb2RlIGZvciB0aGUgYm94IGFuZCB3aGlza2VyIGNoYXJ0IHNlcmllcy4gXG4gICAgICogVGhlIGF2YWlsYWJsZSBtb2RlcyBhcmU6IFxuICAgICAqIEV4Y2x1c2l2ZSAtIFJlbmRlcnMgdGhlIHNlcmllcyBiYXNlZCBvbiB0aGUgZXhjbHVzaXZlIG1vZGUuIFxuICAgICAqIEluY2x1c2l2ZSAtIFJlbmRlcnMgdGhlIHNlcmllcyBiYXNlZCBvbiB0aGUgaW5jbHVzaXZlIG1vZGUuIFxuICAgICAqIE5vcm1hbCAtIFJlbmRlcnMgdGhlIHNlcmllcyBiYXNlZCBvbiB0aGUgbm9ybWFsIG1vZGUuXG4gICAgICogQGRlZmF1bHQgJ05vcm1hbCdcbiAgICAgKi9cbiAgICBwdWJsaWMgYm94UGxvdE1vZGU6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGluIGZpbmFuY2lhbCBjaGFydHMgdG8gdmlzdWFsaXplIHByaWNlIG1vdmVtZW50cyBpbiBzdG9ja3MuIFxuICAgICAqIEl0IGRlZmluZXMgdGhlIGNvbG9yIG9mIHRoZSBjYW5kbGUvcG9pbnQgd2hlbiB0aGUgb3BlbmluZyBwcmljZSBpcyBoaWdoZXIgdGhhbiB0aGUgY2xvc2luZyBwcmljZS5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGJ1bGxGaWxsQ29sb3I6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSB0ZW5zaW9uIHBhcmFtZXRlciBmb3IgY2FyZGluYWwgc3BsaW5lcy4gVGhpcyBhZmZlY3RzIHRoZSBjdXJ2YXR1cmUgb2YgdGhlIHNwbGluZS5cbiAgICAgKiBAZGVmYXVsdCAwLjVcbiAgICAgKi9cbiAgICBwdWJsaWMgY2FyZGluYWxTcGxpbmVUZW5zaW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBkYXRhIHNvdXJjZSBmaWVsZCB0aGF0IGNvbnRhaW5zIHRoZSBjbG9zZSB2YWx1ZS4gXG4gICAgICogSXQgaXMgYXBwbGljYWJsZSBmb3IgYm90aCBmaW5hbmNpYWwgc2VyaWVzIGFuZCB0ZWNobmljYWwgaW5kaWNhdG9ycy5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgZGF0YSBzb3VyY2UgZmllbGQgdGhhdCBjb250YWlucyB0aGUgY29sb3IgbWFwcGluZyB2YWx1ZS4gXG4gICAgICogSXQgaXMgYXBwbGljYWJsZSBmb3IgcmFuZ2UgY29sb3IgbWFwcGluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29sb3JOYW1lOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIERlZmluZXMgdGhlIHNoYXBlIG9mIHRoZSBkYXRhIGluIGEgY29sdW1uIGFuZCBiYXIgY2hhcnQuIFxuICAgICAqIEF2YWlsYWJsZSBzaGFwZXMgYXJlOiBcbiAgICAgKiAqIFJlY3RhbmdsZTogRGlzcGxheXMgdGhlIGRhdGEgaW4gYSBjb2x1bW4gYW5kIGJhciBjaGFydCB3aXRoIGEgcmVjdGFuZ3VsYXIgc2hhcGUuIFxuICAgICAqICogQ3lsaW5kZXI6IERpc3BsYXlzIHRoZSBkYXRhIGluIGEgY29sdW1uIGFuZCBiYXIgY2hhcnQgd2l0aCBhIGN5bGluZHJpY2FsIHNoYXBlLlxuICAgICAqIEBkZWZhdWx0ICdSZWN0YW5nbGUnXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtbkZhY2V0OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoaXMgcHJvcGVydHkgZGV0ZXJtaW5lcyB0aGUgc3BhY2UgYmV0d2VlbiBjb2x1bW5zIGluIGEgY29sdW1uIG9yIGJhciBjaGFydC4gXG4gICAgICogPiBOb3RlIHRoYXQgaXQgdGFrZXMgYSB2YWx1ZSBmcm9tIDAgdG8gMS5cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtblNwYWNpbmc6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBjb2x1bW5XaWR0aGAgcHJvcGVydHkgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1ucyBpbiBhIGNvbHVtbiBzZXJpZXMuIFxuICAgICAqID4gTm90ZSB0aGF0IGlmIHRoZSBzZXJpZXMgdHlwZSBpcyBoaXN0b2dyYW0sIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDE7IG90aGVyd2lzZSwgaXQgaXMgMC43LlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKiBAYXNwZGVmYXVsdHZhbHVlaWdub3JlIFxuICAgICAqIEBibGF6b3JkZWZhdWx0dmFsdWUgRG91YmxlLk5hTlxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5XaWR0aDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUbyByZW5kZXIgdGhlIGNvbHVtbiBzZXJpZXMgcG9pbnRzIHdpdGggYSBzcGVjaWZpYyBjb2x1bW4gd2lkdGggaW4gcGl4ZWxzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKiBAYXNwZGVmYXVsdHZhbHVlaWdub3JlIFxuICAgICAqIEBibGF6b3JkZWZhdWx0dmFsdWUgRG91YmxlLk5hTlxuICAgICAqL1xuICAgIHB1YmxpYyBjb2x1bW5XaWR0aEluUGl4ZWw6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBsaW5lIGNvbm5lY3RpbmcgYWRqYWNlbnQgcG9pbnRzIGluIHdhdGVyZmFsbCBjaGFydHMuXG4gICAgICovXG4gICAgcHVibGljIGNvbm5lY3RvcjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYGNvcm5lclJhZGl1c2AgcHJvcGVydHkgc3BlY2lmaWVzIHRoZSByYWRpdXMgZm9yIHRoZSBjb3JuZXJzIG9mIHRoZSBjb2x1bW4gc2VyaWVzIHBvaW50cyB0byBjcmVhdGUgYSByb3VuZGVkIGFwcGVhcmFuY2UgaW4gdGhlIGNoYXJ0LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb3JuZXJSYWRpdXM6IGFueTtcbiAgICAvKiogXG4gICAgICogRGVmaW5lcyB0aGUgcGF0dGVybiBvZiBkYXNoZXMgYW5kIGdhcHMgdXNlZCB0byBzdHJva2UgdGhlIGxpbmVzIGluIGBMaW5lYCB0eXBlIHNlcmllcy5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBkYXNoQXJyYXk6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHNlcmllcy4gSXQgY2FuIGJlIGFuIGFycmF5IG9mIEpTT04gb2JqZWN0cywgb3IgYW4gaW5zdGFuY2Ugb2YgRGF0YU1hbmFnZXIuIFxuICAgICAqIFxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIGRhdGFTb3VyY2U6IGFueTtcbiAgICAvKiogXG4gICAgICogQ3VzdG9taXplIHRoZSBkcmFnIHNldHRpbmdzIGZvciB0aGUgc2VyaWVzIHdpdGggdGhpcyBwcm9wZXJ0eSB0byBjb25maWd1cmUgZHJhZyBiZWhhdmlvciBpbiB0aGUgY2hhcnQuXG4gICAgICovXG4gICAgcHVibGljIGRyYWdTZXR0aW5nczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2Ygc2VyaWVzIHRvIGJlIGRyYXduIGluIHJhZGFyIG9yIHBvbGFyIGNoYXJ0cy4gXG4gICAgICogVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiAnTGluZScgLSBSZW5kZXJzIGEgbGluZSBzZXJpZXMuIFxuICAgICAqICogJ0NvbHVtbicgLSBSZW5kZXJzIGEgY29sdW1uIHNlcmllcy4gXG4gICAgICogKiAnQXJlYScgLSBSZW5kZXJzIGFuIGFyZWEgc2VyaWVzLiBcbiAgICAgKiAqICdTY2F0dGVyJyAtIFJlbmRlcnMgYSBzY2F0dGVyIHNlcmllcy4gXG4gICAgICogKiAnU3BsaW5lJyAtIFJlbmRlcnMgYSBzcGxpbmUgc2VyaWVzLiBcbiAgICAgKiAqICdTdGFja2luZ0NvbHVtbicgLSBSZW5kZXJzIGEgc3RhY2tpbmcgY29sdW1uIHNlcmllcy4gXG4gICAgICogKiAnU3RhY2tpbmdBcmVhJyAtIFJlbmRlcnMgYSBzdGFja2luZyBhcmVhIHNlcmllcy4gXG4gICAgICogKiAnUmFuZ2VDb2x1bW4nIC0gUmVuZGVycyBhIHJhbmdlIGNvbHVtbiBzZXJpZXMuIFxuICAgICAqICogJ1NwbGluZUFyZWEnIC0gUmVuZGVycyBhIHNwbGluZSBhcmVhIHNlcmllcy5cbiAgICAgKiBAZGVmYXVsdCAnTGluZSdcbiAgICAgKi9cbiAgICBwdWJsaWMgZHJhd1R5cGU6IGFueTtcbiAgICAvKiogXG4gICAgICogQ3VzdG9taXphdGlvbiBvcHRpb25zIGZvciB0aGUgYXBwZWFyYW5jZSBvZiBlbXB0eSBwb2ludHMgaW4gdGhlIHNlcmllcy4gXG4gICAgICogYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBlbXB0eSBwb2ludHMuXG4gICAgICovXG4gICAgcHVibGljIGVtcHR5UG9pbnRTZXR0aW5nczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gaW1wcm92ZSBjaGFydCBwZXJmb3JtYW5jZSB0aHJvdWdoIGRhdGEgbWFwcGluZyBmb3IgdGhlIHNlcmllcyBkYXRhIHNvdXJjZS5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBlbmFibGVDb21wbGV4UHJvcGVydHk6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBhcHBsaWNhYmxlIGZvciB0aGUgY2FuZGxlIHNlcmllcy4gXG4gICAgICogSXQgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgdmlzdWFsIGNvbXBhcmlzb24gb2YgdGhlIGN1cnJlbnQgdmFsdWVzIHdpdGggcHJldmlvdXMgdmFsdWVzIGluIHN0b2NrIGNoYXJ0cy5cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBlbmFibGVTb2xpZENhbmRsZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgdG9vbHRpcCBmb3IgdGhlIGNoYXJ0IHNlcmllcyBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBTZXQgdG8gdHJ1ZSB0byBkaXNwbGF5IHRvb2x0aXBzIG9uIGhvdmVyLCBvciBmYWxzZSB0byBoaWRlIHRoZW0uXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBlbmFibGVUb29sdGlwOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGRpc3BsYXlpbmcgYW5kIGN1c3RvbWl6aW5nIGVycm9yIGJhcnMgZm9yIGluZGl2aWR1YWwgcG9pbnRzIGluIGEgc2VyaWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBlcnJvckJhcjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgZmlsbCBjb2xvciBmb3IgdGhlIHNlcmllcywgd2hpY2ggYWNjZXB0cyB2YWx1ZXMgaW4gaGV4IG9yIHJnYmEgYXMgYSB2YWxpZCBDU1MgY29sb3Igc3RyaW5nLiBcbiAgICAgKiBJdCBhbHNvIHJlcHJlc2VudHMgdGhlIGNvbG9yIG9mIHRoZSBzaWduYWwgbGluZXMgaW4gdGVjaG5pY2FsIGluZGljYXRvcnMuIFxuICAgICAqIEZvciB0ZWNobmljYWwgaW5kaWNhdG9ycywgdGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2JsdWUnLCBhbmQgZm9yIHNlcmllcywgaXQgaXMgbnVsbC5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGZpbGw6IGFueTtcbiAgICAvKiogXG4gICAgICogRGVmaW5lcyB0aGUgbmFtZSB0aGF0IHNwZWNpZmllcyB0aGUgY2hhcnQgc2VyaWVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIGNhbiBiZSBvdmVybGFpZC4gXG4gICAgICogU2VyaWVzIGluIHRoZSBzYW1lIGdyb3VwIHNoYXJlIHRoZSBzYW1lIGJhc2VsaW5lIGFuZCBsb2NhdGlvbiBvbiB0aGUgY29ycmVzcG9uZGluZyBheGlzLlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIGdyb3VwTmFtZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgZGF0YSBzb3VyY2UgZmllbGQgdGhhdCBjb250YWlucyB0aGUgaGlnaCB2YWx1ZS4gXG4gICAgICogSXQgaXMgYXBwbGljYWJsZSBmb3IgYm90aCBmaW5hbmNpYWwgc2VyaWVzIGFuZCB0ZWNobmljYWwgaW5kaWNhdG9ycy5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBoaWdoOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIERlZmluZXMgdGhlIGNvbGxlY3Rpb24gb2YgaW5kZXhlcyBmb3IgdGhlIGludGVybWVkaWF0ZSBzdW1tYXJ5IGNvbHVtbnMgaW4gd2F0ZXJmYWxsIGNoYXJ0cy5cbiAgICAgKiBAZGVmYXVsdCBbXVxuICAgICAqIEBhc3B0eXBlIGludFtdXG4gICAgICovXG4gICAgcHVibGljIGludGVybWVkaWF0ZVN1bUluZGV4ZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gam9pbiB0aGUgc3RhcnQgYW5kIGVuZCBwb2ludHMgb2YgYSBsaW5lL2FyZWEgc2VyaWVzIHVzZWQgaW4gYSBwb2xhci9yYWRhciBjaGFydCB0byBmb3JtIGEgY2xvc2VkIHBhdGguXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpc0Nsb3NlZDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyBhbmQgZGlzcGxheWluZyB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgc2VyaWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsYXN0VmFsdWVMYWJlbDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgVVJMIGZvciB0aGUgaW1hZ2UgdG8gYmUgZGlzcGxheWVkIGFzIGEgbGVnZW5kIGljb24uIFxuICAgICAqID4gTm90ZSB0aGF0IGBsZWdlbmRTaGFwZWAgbXVzdCBiZSBzZXQgdG8gYEltYWdlYC5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBsZWdlbmRJbWFnZVVybDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHNoYXBlIG9mIHRoZSBsZWdlbmQgaWNvbiBmb3IgZWFjaCBzZXJpZXMuIFxuICAgICAqIEF2YWlsYWJsZSBzaGFwZXMgZm9yIGxlZ2VuZDogXG4gICAgICogKiBDaXJjbGUgLSBSZW5kZXJzIGEgY2lyY3VsYXIgaWNvbi4gXG4gICAgICogKiBSZWN0YW5nbGUgLSBSZW5kZXJzIGEgcmVjdGFuZ3VsYXIgaWNvbi4gXG4gICAgICogKiBUcmlhbmdsZSAtIFJlbmRlcnMgYSB0cmlhbmd1bGFyIGljb24uIFxuICAgICAqICogRGlhbW9uZCAtIFJlbmRlcnMgYSBkaWFtb25kLXNoYXBlZCBpY29uLiBcbiAgICAgKiAqIENyb3NzIC0gUmVuZGVycyBhIGNyb3NzLXNoYXBlZCBpY29uLiBcbiAgICAgKiAqIEhvcml6b250YWxMaW5lIC0gUmVuZGVycyBhIGhvcml6b250YWwgbGluZSBpY29uLiBcbiAgICAgKiAqIFZlcnRpY2FsTGluZSAtIFJlbmRlcnMgYSB2ZXJ0aWNhbCBsaW5lIGljb24uIFxuICAgICAqICogUGVudGFnb24gLSBSZW5kZXJzIGEgcGVudGFnb24tc2hhcGVkIGljb24uIFxuICAgICAqICogSW52ZXJ0ZWRUcmlhbmdsZSAtIFJlbmRlcnMgYW4gaW52ZXJ0ZWQgdHJpYW5nbGUtc2hhcGVkIGljb24uIFxuICAgICAqICogU2VyaWVzVHlwZSAtIFVzZXMgdGhlIGRlZmF1bHQgaWNvbiBzaGFwZSBiYXNlZCBvbiB0aGUgc2VyaWVzIHR5cGUuIFxuICAgICAqICogSW1hZ2UgLSBSZW5kZXJzIGEgY3VzdG9tIGltYWdlIGZvciB0aGUgbGVnZW5kIGljb24uXG4gICAgICogQGRlZmF1bHQgJ1Nlcmllc1R5cGUnXG4gICAgICovXG4gICAgcHVibGljIGxlZ2VuZFNoYXBlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBkYXRhIHNvdXJjZSBmaWVsZCB0aGF0IGNvbnRhaW5zIHRoZSBsb3cgdmFsdWUuIFxuICAgICAqIEl0IGlzIGFwcGxpY2FibGUgZm9yIGJvdGggZmluYW5jaWFsIHNlcmllcyBhbmQgdGVjaG5pY2FsIGluZGljYXRvcnMuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgbG93OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGRpc3BsYXlpbmcgYW5kIGN1c3RvbWl6aW5nIG1hcmtlcnMgZm9yIGluZGl2aWR1YWwgcG9pbnRzIGluIGEgc2VyaWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBtYXJrZXI6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHJhZGl1cyBmb3IgdGhlIGRhdGEgcG9pbnRzIGluIHRoZSBzZXJpZXMuXG4gICAgICogQGRlZmF1bHQgM1xuICAgICAqL1xuICAgIHB1YmxpYyBtYXhSYWRpdXM6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHJhZGl1cyBmb3IgdGhlIGRhdGEgcG9pbnRzIGluIHRoZSBzZXJpZXMuXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5SYWRpdXM6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBuYW1lYCBwcm9wZXJ0eSBhbGxvd3Mgc2V0dGluZyBhIG5hbWUgZm9yIHRoZSBzZXJpZXMsIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBsZWdlbmQsIGlkZW50aWZ5aW5nIGRpZmZlcmVudCBzZXJpZXMgaW4gdGhlIGNoYXJ0LCBlc3BlY2lhbGx5IHdoZW4gbXVsdGlwbGUgc2VyaWVzIGFyZSBwcmVzZW50LlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIG5hbWU6IGFueTtcbiAgICAvKiogXG4gICAgICogRGVmaW5lcyB0aGUgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIG5lZ2F0aXZlIGNoYW5nZXMgaW4gd2F0ZXJmYWxsIGNoYXJ0cy5cbiAgICAgKiBAZGVmYXVsdCAnI0M2NEU0QSdcbiAgICAgKi9cbiAgICBwdWJsaWMgbmVnYXRpdmVGaWxsQ29sb3I6IGFueTtcbiAgICAvKiogXG4gICAgICogV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHN0ZXAgc2VyaWVzIHdpbGwgYmUgcmVuZGVyZWQgd2l0aG91dCB0aGUgdmVydGljYWwgbGluZXMgKHJpc2VycykgY29ubmVjdGluZyB0aGUgaG9yaXpvbnRhbCBzdGVwcy4gXG4gICAgICogPiBOb3RlIHRoaXMgcHJvcGVydHkgaXMgb25seSBhcHBsaWNhYmxlIHRvIHN0ZXAgc2VyaWVzLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIG5vUmlzZXJzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgbm9uSGlnaGxpZ2h0U3R5bGVgIHByb3BlcnR5IGlzIHVzZWQgdG8gc3BlY2lmeSBjdXN0b20gQ1NTIHN0eWxlcyBmb3IgdGhlIG5vbi1oaWdobGlnaHRlZCBzZXJpZXMgb3IgcG9pbnRzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgbm9uSGlnaGxpZ2h0U3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogU2V0cyB0aGUgb3BhY2l0eSBvZiB0aGUgc2VyaWVzLCB3aXRoIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxIHdoZXJlIDAgaXMgZnVsbHkgdHJhbnNwYXJlbnQgYW5kIDEgaXMgZnVsbHkgb3BhcXVlLlxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BhY2l0eTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgZGF0YSBzb3VyY2UgZmllbGQgdGhhdCBjb250YWlucyB0aGUgb3BlbiB2YWx1ZS4gXG4gICAgICogSXQgaXMgYXBwbGljYWJsZSBmb3IgYm90aCBmaW5hbmNpYWwgc2VyaWVzIGFuZCB0ZWNobmljYWwgaW5kaWNhdG9ycy5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIHRoZSBQYXJldG8gbGluZSBzZXJpZXMsIGluY2x1ZGluZyBpdHMgYXBwZWFyYW5jZSBhbmQgYmVoYXZpb3IgaW4gdGhlIGNoYXJ0LlxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJldG9PcHRpb25zOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBkYXRhIHNvdXJjZSBmaWVsZCB0aGF0IGNvbnRhaW5zIHRoZSBjb2xvciB2YWx1ZSBvZiBhIHBvaW50LiBcbiAgICAgKiBJdCBpcyBhcHBsaWNhYmxlIGZvciBzZXJpZXMuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgcG9pbnRDb2xvck1hcHBpbmc6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIGEgcXVlcnkgdG8gc2VsZWN0IGRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIFRoaXMgcHJvcGVydHkgaXMgYXBwbGljYWJsZSBvbmx5IHdoZW4gdGhlIGRhdGEgc291cmNlIGlzIGFuIGBlai5EYXRhTWFuYWdlcmAuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgcXVlcnk6IGFueTtcbiAgICAvKiogXG4gICAgICogRGVmaW5lcyB0aGUgYXhpcyBhbG9uZyB3aGljaCB0aGUgbGluZSBzZXJpZXMgd2lsbCBiZSBzcGxpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VnbWVudEF4aXM6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIGEgY29sbGVjdGlvbiBvZiByZWdpb25zIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBhIGxpbmUgc2VyaWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWdtZW50czogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYHNlbGVjdGlvblN0eWxlYCBwcm9wZXJ0eSBpcyB1c2VkIHRvIHNwZWNpZnkgY3VzdG9tIENTUyBzdHlsZXMgZm9yIHRoZSBzZWxlY3RlZCBzZXJpZXMgb3IgcG9pbnRzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0aW9uU3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBtZWFuIHZhbHVlIGZvciB0aGUgYm94IGFuZCB3aGlza2VyIHBsb3Qgd2lsbCBiZSB2aXNpYmxlLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd01lYW46IGFueTtcbiAgICAvKiogXG4gICAgICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgZGlzcGxheSBvZiB0b29sdGlwcyBmb3IgdGhlIG5lYXJlc3QgZGF0YSBwb2ludCB0byB0aGUgY3Vyc29yIGZvciBzZXJpZXMuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93TmVhcmVzdFRvb2x0aXA6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbiBjdXJ2ZSBmb3IgdGhlIGhpc3RvZ3JhbSBzZXJpZXMuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd05vcm1hbERpc3RyaWJ1dGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBkaXNwbGF5IG91dGxpZXJzIGluIHRoZSBCb3ggYW5kIFdoaXNrZXIgY2hhcnQuXG4gICAgICogXG4gICAgICogSWYgc2V0IHRvIGB0cnVlYCwgb3V0bGllcnMgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgaW5kaXZpZHVhbCBwb2ludHMgYmV5b25kIHRoZSB3aGlza2VycywgcmVwcmVzZW50aW5nIGRhdGEgcG9pbnRzIHRoYXQgc2lnbmlmaWNhbnRseSBkaWZmZXIgZnJvbSB0aGUgcmVzdCBvZiB0aGUgZGF0YXNldC5cbiAgICAgKklmIHNldCB0byBgZmFsc2VgLCBvdXRsaWVycyB3aWxsIGJlIGhpZGRlbiwgYW5kIG9ubHkgdGhlIGJveCwgbWVkaWFuLCBhbmQgd2hpc2tlcnMgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqT3V0bGllcnMgYXJlIHR5cGljYWxseSB1c2VkIHRvIGlkZW50aWZ5IGV4dHJlbWUgdmFsdWVzIGluIHN0YXRpc3RpY2FsIGRhdGEgcmVwcmVzZW50YXRpb24uXG4gICAgICogICAgIFxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd091dGxpZXJzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBkYXRhIHNvdXJjZSBmaWVsZCB0aGF0IGNvbnRhaW5zIHRoZSBzaXplIHZhbHVlIGZvciB0aGUgeS1heGlzLlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIHNpemU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHNwbGluZSB1c2VkIGZvciByZW5kZXJpbmcuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGluY2x1ZGU6IFxuICAgICAqICogTmF0dXJhbCAtIFJlbmRlcnMgYSBuYXR1cmFsIHNwbGluZS4gXG4gICAgICogKiBDYXJkaW5hbCAtIFJlbmRlcnMgYSBjYXJkaW5hbCBzcGxpbmUuIFxuICAgICAqICogQ2xhbXBlZCAtIFJlbmRlcnMgYSBjbGFtcGVkIHNwbGluZS4gXG4gICAgICogKiBNb25vdG9uaWMgLSBSZW5kZXJzIGEgbW9ub3RvbmljIHNwbGluZS5cbiAgICAgKiBAZGVmYXVsdCAnTmF0dXJhbCdcbiAgICAgKi9cbiAgICBwdWJsaWMgc3BsaW5lVHlwZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGlzIHByb3BlcnR5IGFsbG93cyB0aGUgZ3JvdXBpbmcgb2Ygc2VyaWVzIGluIHN0YWNrZWQgY29sdW1uIGFuZCBzdGFja2VkIGJhciBjaGFydHMuIFxuICAgICAqIEFueSBzdHJpbmcgdmFsdWUgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSBgc3RhY2tpbmdHcm91cGAgcHJvcGVydHkuIFxuICAgICAqIFNlcmllcyB3aXRoIHRoZSBzYW1lIGBzdGFja2luZ0dyb3VwYCB2YWx1ZSB3aWxsIGJlIGdyb3VwZWQgdG9nZXRoZXIgaW4gdGhlIGNoYXJ0LlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIHN0YWNraW5nR3JvdXA6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBzdGVwYCBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdGVwcyBpbiBzdGVwIGxpbmUsIHN0ZXAgYXJlYSwgYW5kIHN0ZXAgcmFuZ2UgYXJlYSBjaGFydCB0eXBlcy4gXG4gICAgICogKiBMZWZ0OiBTdGVwcyBzdGFydCBmcm9tIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIDJuZCBwb2ludC4gXG4gICAgICogKiBDZW50ZXI6IFN0ZXBzIHN0YXJ0IGJldHdlZW4gdGhlIGRhdGEgcG9pbnRzLiBcbiAgICAgKiAqIFJpZ2h0OiBTdGVwcyBzdGFydCBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHRoZSAxc3QgcG9pbnQuXG4gICAgICogQGRlZmF1bHQgJ0xlZnQnXG4gICAgICovXG4gICAgcHVibGljIHN0ZXA6IGFueTtcbiAgICAvKiogXG4gICAgICogRGVmaW5lcyB0aGUgY29sbGVjdGlvbiBvZiBpbmRleGVzIGZvciB0aGUgb3ZlcmFsbCBzdW1tYXJ5IGNvbHVtbnMgaW4gd2F0ZXJmYWxsIGNoYXJ0cy5cbiAgICAgKiBAZGVmYXVsdCBbXVxuICAgICAqIEBhc3B0eXBlIGludFtdXG4gICAgICovXG4gICAgcHVibGljIHN1bUluZGV4ZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogRGVmaW5lcyB0aGUgdmlzdWFsIHJlcHJlc2VudGF0aW9uIG9mIHN1bW1hcmllcyBpbiB3YXRlcmZhbGwgY2hhcnRzLlxuICAgICAqIEBkZWZhdWx0ICcjNEU4MUJDJ1xuICAgICAqL1xuICAgIHB1YmxpYyBzdW1tYXJ5RmlsbENvbG9yOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGRlZmluZSBhIGN1c3RvbSBmb3JtYXQgZm9yIGhvdyB0b29sdGlwcyBhcmUgZGlzcGxheWVkLiBcbiAgICAgKiBcbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyB0b29sdGlwRm9ybWF0OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBkYXRhIHNvdXJjZSBmaWVsZCB0aGF0IGNvbnRhaW5zIHRoZSB2YWx1ZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRvb2x0aXAuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9vbHRpcE1hcHBpbmdOYW1lOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIERlZmluZXMgdGhlIGNvbGxlY3Rpb24gb2YgdHJlbmRsaW5lcyB1c2VkIHRvIHByZWRpY3QgdGhlIHRyZW5kLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmVuZGxpbmVzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgdW5TZWxlY3RlZFN0eWxlYCBwcm9wZXJ0eSBpcyB1c2VkIHRvIHNwZWNpZnkgY3VzdG9tIENTUyBzdHlsZXMgZm9yIHRoZSBkZXNlbGVjdGVkIHNlcmllcyBvciBwb2ludHMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyB1blNlbGVjdGVkU3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIHNlcmllcyB3aWxsIGJlIHZpc2libGUuIElmIHNldCB0byBgZmFsc2VgLCB0aGUgc2VyaWVzIHdpbGwgYmUgaGlkZGVuLlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgdmlzaWJsZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBEZWZpbmVzIHRoZSBkYXRhIHNvdXJjZSBmaWVsZCB0aGF0IGNvbnRhaW5zIHRoZSB2b2x1bWUgdmFsdWUgaW4gY2FuZGxlIGNoYXJ0cy4gXG4gICAgICogSXQgaXMgYXBwbGljYWJsZSBmb3IgYm90aCBmaW5hbmNpYWwgc2VyaWVzIGFuZCB0ZWNobmljYWwgaW5kaWNhdG9ycy5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyB2b2x1bWU6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIHN0cm9rZSB3aWR0aCBmb3IgdGhlIHNlcmllcywgYXBwbGljYWJsZSBvbmx5IGZvciBgTGluZWAgdHlwZSBzZXJpZXMuIFxuICAgICAqIEl0IGFsc28gcmVwcmVzZW50cyB0aGUgc3Ryb2tlIHdpZHRoIG9mIHRoZSBzaWduYWwgbGluZXMgaW4gdGVjaG5pY2FsIGluZGljYXRvcnMuXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIHB1YmxpYyB3aWR0aDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgaG9yaXpvbnRhbCBheGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2VyaWVzLiBJdCByZXF1aXJlcyBgYXhlc2Agb2YgdGhlIGNoYXJ0LiBcbiAgICAgKiBJdCBpcyBhcHBsaWNhYmxlIGZvciBzZXJpZXMgYW5kIHRlY2huaWNhbCBpbmRpY2F0b3JzLiBcbiAgICAgKiBcbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIHhBeGlzTmFtZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgZGF0YSBzb3VyY2UgZmllbGQgdGhhdCBjb250YWlucyB0aGUgeCB2YWx1ZS4gXG4gICAgICogSXQgaXMgYXBwbGljYWJsZSB0byBib3RoIHNlcmllcyBhbmQgdGVjaG5pY2FsIGluZGljYXRvcnMuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgeE5hbWU6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHZlcnRpY2FsIGF4aXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzZXJpZXMuIEl0IHJlcXVpcmVzIGBheGVzYCBvZiB0aGUgY2hhcnQuIFxuICAgICAqIEl0IGlzIGFwcGxpY2FibGUgZm9yIHNlcmllcyBhbmQgdGVjaG5pY2FsIGluZGljYXRvcnMuIFxuICAgICAqIFxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgeUF4aXNOYW1lOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBkYXRhIHNvdXJjZSBmaWVsZCB0aGF0IGNvbnRhaW5zIHRoZSB5IHZhbHVlLlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIHlOYW1lOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSB6LW9yZGVyIG9mIHRoZSBzZXJpZXMsIHdoaWNoIGNvbnRyb2xzIHRoZSBzdGFjayBvcmRlciBvZiB0aGUgc2VyaWVzLiBIaWdoZXIgdmFsdWVzIGFyZSBkcmF3biBvbiB0b3Agb2YgbG93ZXIgdmFsdWVzLlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgek9yZGVyOiBhbnk7XG4gICAgQENvbnRlbnRDaGlsZCgnZGF0YUxhYmVsVGVtcGxhdGUnKVxuICAgIEBUZW1wbGF0ZSgpXG4gICAgcHVibGljIGRhdGFMYWJlbF90ZW1wbGF0ZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOlZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgc2V0VmFsdWUoJ2N1cnJlbnRJbnN0YW5jZScsIHRoaXMsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudHMob3V0cHV0cyk7XG4gICAgICAgIHRoaXMuZGlyZWN0aXZlUHJvcExpc3QgPSBpbnB1dDtcbiAgICB9XG59XG5cbi8qKlxuICogU2VyaWVzIEFycmF5IERpcmVjdGl2ZVxuICogQHByaXZhdGVcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdlai1jaGFydD5lLXNlcmllcy1jb2xsZWN0aW9uJyxcbiAgICBxdWVyaWVzOiB7XG4gICAgICAgIGNoaWxkcmVuOiBuZXcgQ29udGVudENoaWxkcmVuKFNlcmllc0RpcmVjdGl2ZSlcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBTZXJpZXNDb2xsZWN0aW9uRGlyZWN0aXZlIGV4dGVuZHMgQXJyYXlCYXNlPFNlcmllc0NvbGxlY3Rpb25EaXJlY3RpdmU+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ3NlcmllcycpO1xuICAgIH1cbn0iXX0=