UNPKG

@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

58 lines 32.7 kB
import { Directive, ContentChildren, ContentChild } from '@angular/core'; import { ComplexBase, ArrayBase, setValue } from '@syncfusion/ej2-angular-base'; import { StripLinesDirective } from './striplines.directive'; import { MultiLevelLabelsDirective } from './multilevellabels.directive'; import * as i0 from "@angular/core"; let input = ['border', 'coefficient', 'columnIndex', 'crossesAt', 'crossesInAxis', 'crosshairTooltip', 'description', 'desiredIntervals', 'edgeLabelPlacement', 'enableAutoIntervalOnZooming', 'enableScrollbarOnZooming', 'enableTrim', 'enableWrap', 'interval', 'intervalType', 'isIndexed', 'isInversed', 'labelFormat', 'labelIntersectAction', 'labelPadding', 'labelPlacement', 'labelPosition', 'labelRotation', 'labelStyle', 'labelTemplate', 'lineBreakAlignment', 'lineStyle', 'logBase', 'majorGridLines', 'majorTickLines', 'maximum', 'maximumLabelWidth', 'maximumLabels', 'minimum', 'minorGridLines', 'minorTickLines', 'minorTicksPerInterval', 'multiLevelLabels', 'name', 'opposedPosition', 'placeNextToAxisLine', 'plotOffset', 'plotOffsetBottom', 'plotOffsetLeft', 'plotOffsetRight', 'plotOffsetTop', 'rangePadding', 'rowIndex', 'scrollbarSettings', 'skeleton', 'skeletonType', 'span', 'startAngle', 'startFromZero', 'stripLines', 'tabIndex', 'tickPosition', 'title', 'titlePadding', 'titleRotation', 'titleStyle', 'valueType', 'visible', 'zoomFactor', 'zoomPosition']; let outputs = []; /** * Axis Directive * ```html * <e-axes><e-axis></e-axis></e-axes> * ``` */ export class AxisDirective extends ComplexBase { constructor(viewContainerRef) { super(); this.viewContainerRef = viewContainerRef; this.tags = ['stripLines', 'multiLevelLabels']; setValue('currentInstance', this, this.viewContainerRef); this.registerEvents(outputs); this.directivePropList = input; } } AxisDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AxisDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); AxisDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: AxisDirective, selector: "e-axes>e-axis", inputs: { border: "border", coefficient: "coefficient", columnIndex: "columnIndex", crossesAt: "crossesAt", crossesInAxis: "crossesInAxis", crosshairTooltip: "crosshairTooltip", description: "description", desiredIntervals: "desiredIntervals", edgeLabelPlacement: "edgeLabelPlacement", enableAutoIntervalOnZooming: "enableAutoIntervalOnZooming", enableScrollbarOnZooming: "enableScrollbarOnZooming", enableTrim: "enableTrim", enableWrap: "enableWrap", interval: "interval", intervalType: "intervalType", isIndexed: "isIndexed", isInversed: "isInversed", labelFormat: "labelFormat", labelIntersectAction: "labelIntersectAction", labelPadding: "labelPadding", labelPlacement: "labelPlacement", labelPosition: "labelPosition", labelRotation: "labelRotation", labelStyle: "labelStyle", labelTemplate: "labelTemplate", lineBreakAlignment: "lineBreakAlignment", lineStyle: "lineStyle", logBase: "logBase", majorGridLines: "majorGridLines", majorTickLines: "majorTickLines", maximum: "maximum", maximumLabelWidth: "maximumLabelWidth", maximumLabels: "maximumLabels", minimum: "minimum", minorGridLines: "minorGridLines", minorTickLines: "minorTickLines", minorTicksPerInterval: "minorTicksPerInterval", multiLevelLabels: "multiLevelLabels", name: "name", opposedPosition: "opposedPosition", placeNextToAxisLine: "placeNextToAxisLine", plotOffset: "plotOffset", plotOffsetBottom: "plotOffsetBottom", plotOffsetLeft: "plotOffsetLeft", plotOffsetRight: "plotOffsetRight", plotOffsetTop: "plotOffsetTop", rangePadding: "rangePadding", rowIndex: "rowIndex", scrollbarSettings: "scrollbarSettings", skeleton: "skeleton", skeletonType: "skeletonType", span: "span", startAngle: "startAngle", startFromZero: "startFromZero", stripLines: "stripLines", tabIndex: "tabIndex", tickPosition: "tickPosition", title: "title", titlePadding: "titlePadding", titleRotation: "titleRotation", titleStyle: "titleStyle", valueType: "valueType", visible: "visible", zoomFactor: "zoomFactor", zoomPosition: "zoomPosition" }, queries: [{ propertyName: "childStripLines", first: true, predicate: StripLinesDirective, descendants: true }, { propertyName: "childMultiLevelLabels", first: true, predicate: MultiLevelLabelsDirective, descendants: true }], usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AxisDirective, decorators: [{ type: Directive, args: [{ selector: 'e-axes>e-axis', inputs: input, outputs: outputs, queries: { childStripLines: new ContentChild(StripLinesDirective), childMultiLevelLabels: new ContentChild(MultiLevelLabelsDirective) } }] }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } }); /** * Axis Array Directive * @private */ export class AxesDirective extends ArrayBase { constructor() { super('axes'); } } AxesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AxesDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); AxesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.3", type: AxesDirective, selector: "ejs-chart>e-axes", queries: [{ propertyName: "children", predicate: AxisDirective }], usesInheritance: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: AxesDirective, decorators: [{ type: Directive, args: [{ selector: 'ejs-chart>e-axes', queries: { children: new ContentChildren(AxisDirective) }, }] }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhlcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2hhcnQvYXhlcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFFekUsSUFBSSxLQUFLLEdBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDdmpDLElBQUksT0FBTyxHQUFhLEVBQUUsQ0FBQztBQUMzQjs7Ozs7R0FLRztBQVVILE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBMEI7SUFxWXpELFlBQW9CLGdCQUFpQztRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQURRLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFoWTlDLFNBQUksR0FBYSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBa1l2RCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDOzswR0ExWVEsYUFBYTs4RkFBYixhQUFhLDRpRUFKZ0IsbUJBQW1CLHdGQUNiLHlCQUF5QjsyRkFHNUQsYUFBYTtrQkFUekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsTUFBTSxFQUFFLEtBQUs7b0JBQ2IsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRTt3QkFDTCxlQUFlLEVBQUUsSUFBSSxZQUFZLENBQUMsbUJBQW1CLENBQUM7d0JBQ3RELHFCQUFxQixFQUFFLElBQUksWUFBWSxDQUFDLHlCQUF5QixDQUFDO3FCQUNyRTtpQkFDSjs7QUE4WUQ7OztHQUdHO0FBT0gsTUFBTSxPQUFPLGFBQWMsU0FBUSxTQUF3QjtJQUN2RDtRQUNJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQixDQUFDOzswR0FIUSxhQUFhOzhGQUFiLGFBQWEsaUZBSFksYUFBYTsyRkFHdEMsYUFBYTtrQkFOekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixPQUFPLEVBQUU7d0JBQ0wsUUFBUSxFQUFFLElBQUksZUFBZSxDQUFDLGFBQWEsQ0FBQztxQkFDL0M7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFZpZXdDb250YWluZXJSZWYsIENvbnRlbnRDaGlsZHJlbiwgQ29udGVudENoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wbGV4QmFzZSwgQXJyYXlCYXNlLCBzZXRWYWx1ZSB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWJhc2UnO1xuXG5pbXBvcnQgeyBTdHJpcExpbmVzRGlyZWN0aXZlIH0gZnJvbSAnLi9zdHJpcGxpbmVzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNdWx0aUxldmVsTGFiZWxzRGlyZWN0aXZlIH0gZnJvbSAnLi9tdWx0aWxldmVsbGFiZWxzLmRpcmVjdGl2ZSc7XG5cbmxldCBpbnB1dDogc3RyaW5nW10gPSBbJ2JvcmRlcicsICdjb2VmZmljaWVudCcsICdjb2x1bW5JbmRleCcsICdjcm9zc2VzQXQnLCAnY3Jvc3Nlc0luQXhpcycsICdjcm9zc2hhaXJUb29sdGlwJywgJ2Rlc2NyaXB0aW9uJywgJ2Rlc2lyZWRJbnRlcnZhbHMnLCAnZWRnZUxhYmVsUGxhY2VtZW50JywgJ2VuYWJsZUF1dG9JbnRlcnZhbE9uWm9vbWluZycsICdlbmFibGVTY3JvbGxiYXJPblpvb21pbmcnLCAnZW5hYmxlVHJpbScsICdlbmFibGVXcmFwJywgJ2ludGVydmFsJywgJ2ludGVydmFsVHlwZScsICdpc0luZGV4ZWQnLCAnaXNJbnZlcnNlZCcsICdsYWJlbEZvcm1hdCcsICdsYWJlbEludGVyc2VjdEFjdGlvbicsICdsYWJlbFBhZGRpbmcnLCAnbGFiZWxQbGFjZW1lbnQnLCAnbGFiZWxQb3NpdGlvbicsICdsYWJlbFJvdGF0aW9uJywgJ2xhYmVsU3R5bGUnLCAnbGFiZWxUZW1wbGF0ZScsICdsaW5lQnJlYWtBbGlnbm1lbnQnLCAnbGluZVN0eWxlJywgJ2xvZ0Jhc2UnLCAnbWFqb3JHcmlkTGluZXMnLCAnbWFqb3JUaWNrTGluZXMnLCAnbWF4aW11bScsICdtYXhpbXVtTGFiZWxXaWR0aCcsICdtYXhpbXVtTGFiZWxzJywgJ21pbmltdW0nLCAnbWlub3JHcmlkTGluZXMnLCAnbWlub3JUaWNrTGluZXMnLCAnbWlub3JUaWNrc1BlckludGVydmFsJywgJ211bHRpTGV2ZWxMYWJlbHMnLCAnbmFtZScsICdvcHBvc2VkUG9zaXRpb24nLCAncGxhY2VOZXh0VG9BeGlzTGluZScsICdwbG90T2Zmc2V0JywgJ3Bsb3RPZmZzZXRCb3R0b20nLCAncGxvdE9mZnNldExlZnQnLCAncGxvdE9mZnNldFJpZ2h0JywgJ3Bsb3RPZmZzZXRUb3AnLCAncmFuZ2VQYWRkaW5nJywgJ3Jvd0luZGV4JywgJ3Njcm9sbGJhclNldHRpbmdzJywgJ3NrZWxldG9uJywgJ3NrZWxldG9uVHlwZScsICdzcGFuJywgJ3N0YXJ0QW5nbGUnLCAnc3RhcnRGcm9tWmVybycsICdzdHJpcExpbmVzJywgJ3RhYkluZGV4JywgJ3RpY2tQb3NpdGlvbicsICd0aXRsZScsICd0aXRsZVBhZGRpbmcnLCAndGl0bGVSb3RhdGlvbicsICd0aXRsZVN0eWxlJywgJ3ZhbHVlVHlwZScsICd2aXNpYmxlJywgJ3pvb21GYWN0b3InLCAnem9vbVBvc2l0aW9uJ107XG5sZXQgb3V0cHV0czogc3RyaW5nW10gPSBbXTtcbi8qKlxuICogQXhpcyBEaXJlY3RpdmVcbiAqIGBgYGh0bWxcbiAqIDxlLWF4ZXM+PGUtYXhpcz48L2UtYXhpcz48L2UtYXhlcz5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2UtYXhlcz5lLWF4aXMnLFxuICAgIGlucHV0czogaW5wdXQsXG4gICAgb3V0cHV0czogb3V0cHV0cywgICAgXG4gICAgcXVlcmllczoge1xuICAgICAgICBjaGlsZFN0cmlwTGluZXM6IG5ldyBDb250ZW50Q2hpbGQoU3RyaXBMaW5lc0RpcmVjdGl2ZSksIFxuICAgICAgICBjaGlsZE11bHRpTGV2ZWxMYWJlbHM6IG5ldyBDb250ZW50Q2hpbGQoTXVsdGlMZXZlbExhYmVsc0RpcmVjdGl2ZSlcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEF4aXNEaXJlY3RpdmUgZXh0ZW5kcyBDb21wbGV4QmFzZTxBeGlzRGlyZWN0aXZlPiB7XG4gICAgcHVibGljIGRpcmVjdGl2ZVByb3BMaXN0OiBhbnk7XG5cdFxuICAgIHB1YmxpYyBjaGlsZFN0cmlwTGluZXM6IGFueTtcbiAgICBwdWJsaWMgY2hpbGRNdWx0aUxldmVsTGFiZWxzOiBhbnk7XG4gICAgcHVibGljIHRhZ3M6IHN0cmluZ1tdID0gWydzdHJpcExpbmVzJywgJ211bHRpTGV2ZWxMYWJlbHMnXTtcbiAgICAvKiogXG4gICAgICogQ29uZmlndXJlcyB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgYm9yZGVyIGFyb3VuZCBtdWx0aS1sZXZlbCBsYWJlbHMsIGluY2x1ZGluZyB0aGUgY29sb3IsIHdpZHRoLCBhbmQgdHlwZSBvZiB0aGUgYm9yZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBib3JkZXI6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGBjb2VmZmljaWVudGAgdmFsdWUgYWRqdXN0cyB0aGUgc2l6ZSBvZiB0aGUgcG9sYXIgcmFkYXIgY2hhcnQncyByYWRpdXMuIEEgaGlnaGVyIHZhbHVlIGluY3JlYXNlcyB0aGUgcmFkaXVzIHNpemUsIHdoaWxlIGEgc21hbGxlciB2YWx1ZSBkZWNyZWFzZXMgaXQuXG4gICAgICogQGRlZmF1bHQgMTAwXG4gICAgICovXG4gICAgcHVibGljIGNvZWZmaWNpZW50OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIGNvbHVtbiB3aGVyZSB0aGUgYXhpcyBpcyBhc3NvY2lhdGVkIHdoZW4gdGhlIGNoYXJ0IGFyZWEgaXMgZGl2aWRlZCBpbnRvIG11bHRpcGxlIHBsb3QgYXJlYXMgdXNpbmcgYGNvbHVtbnNgLiBcbiAgICAgKiBcbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIGNvbHVtbkluZGV4OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgYXQgd2hpY2ggdGhlIGF4aXMgbGluZSBpbnRlcnNlY3RzIHdpdGggdGhlIHZlcnRpY2FsIGF4aXMgb3IgdmljZSB2ZXJzYS5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzZXNBdDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGF4aXMgd2l0aCB3aGljaCB0aGUgYXhpcyBsaW5lIHNob3VsZCBpbnRlcnNlY3QuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcm9zc2VzSW5BeGlzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgdG8gY3VzdG9taXplIHRoZSBhcHBlYXJhbmNlIGFuZCBiZWhhdmlvciBvZiB0aGUgY3Jvc3NoYWlyIHRvb2x0aXAgdGhhdCBhcHBlYXJzIHdoZW4gaG92ZXJpbmcgb3ZlciB0aGUgY2hhcnQuXG4gICAgICovXG4gICAgcHVibGljIGNyb3NzaGFpclRvb2x0aXA6IGFueTtcbiAgICAvKiogXG4gICAgICogQSBkZXNjcmlwdGlvbiBmb3IgdGhlIGF4aXMgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGl0cyBjb250ZW50IGZvciBzY3JlZW4gcmVhZGVycy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgZGVzaXJlZEludGVydmFsc2AgcHJvcGVydHkgYWxsb3dzIHRoZSBheGlzIHRvIGNhbGN1bGF0ZSBpbnRlcnZhbHMgdGhhdCBhcmUgcm91Z2hseSBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwgcHJvbW90aW5nIGEgbW9yZSByZWFkYWJsZSBhbmQgZXZlbmx5IHNwYWNlZCBheGlzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKiBAYXNwZGVmYXVsdHZhbHVlaWdub3JlIFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNpcmVkSW50ZXJ2YWxzOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgZWRnZUxhYmVsUGxhY2VtZW50YCBwcm9wZXJ0eSBlbnN1cmVzIHRoYXQgbGFiZWxzIHBvc2l0aW9uZWQgYXQgdGhlIGVkZ2VzIG9mIHRoZSBheGlzIGRvIG5vdCBvdmVybGFwIHdpdGggdGhlIGF4aXMgYm91bmRhcmllcyBvciBvdGhlciBjaGFydCBlbGVtZW50cywgb2ZmZXJpbmcgc2V2ZXJhbCBvcHRpb25zIHRvIGltcHJvdmUgY2hhcnQgcmVhZGFiaWxpdHkgYnkgbWFuYWdpbmcgZWRnZSBsYWJlbHMgZWZmZWN0aXZlbHkuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBOb25lOiBObyBhY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQgb24gZWRnZSBsYWJlbHMuIFxuICAgICAqICogSGlkZTogRWRnZSBsYWJlbHMgd2lsbCBiZSBoaWRkZW4gdG8gcHJldmVudCBvdmVybGFwLiBcbiAgICAgKiAqIFNoaWZ0OiBFZGdlIGxhYmVscyB3aWxsIGJlIHNoaWZ0ZWQgdG8gZml0IHdpdGhpbiB0aGUgYXhpcyBib3VuZHMgd2l0aG91dCBvdmVybGFwcGluZy5cbiAgICAgKiBAZGVmYXVsdCAnU2hpZnQnXG4gICAgICovXG4gICAgcHVibGljIGVkZ2VMYWJlbFBsYWNlbWVudDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgaW50ZXJ2YWwgd2lsbCBiZSBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIHpvb21lZCByYW5nZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZUF1dG9JbnRlcnZhbE9uWm9vbWluZzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgYSBzY3JvbGxiYXIgd2lsbCBhcHBlYXIgd2hpbGUgem9vbWluZyB0byBoZWxwIG5hdmlnYXRlIHRocm91Z2ggdGhlIHpvb21lZCBjb250ZW50LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5hYmxlU2Nyb2xsYmFyT25ab29taW5nOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIElmIHNldCB0byB0cnVlLCBheGlzIGxhYmVscyB3aWxsIGJlIHRyaW1tZWQgYmFzZWQgb24gdGhlIGBtYXhpbXVtTGFiZWxXaWR0aGAuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZW5hYmxlVHJpbTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYXhpcyBsYWJlbHMgc2hvdWxkIGJlIHdyYXBwZWQgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBgbWF4aW11bUxhYmVsV2lkdGhgLiBcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBheGlzIGxhYmVscyB3aWxsIGF1dG9tYXRpY2FsbHkgd3JhcCB0byBmaXQgd2l0aGluIHRoZSBhdmFpbGFibGUgd2lkdGggZGVmaW5lZCBieSBgbWF4aW11bUxhYmVsV2lkdGhgLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGVuYWJsZVdyYXA6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbnRlcnZhbCBmb3IgdGhlIGF4aXMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqIEBhc3BkZWZhdWx0dmFsdWVpZ25vcmUgXG4gICAgICovXG4gICAgcHVibGljIGludGVydmFsOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgaW50ZXJ2YWxUeXBlYCBwcm9wZXJ0eSBkZWZpbmVzIGhvdyB0aGUgaW50ZXJ2YWxzIG9uIGEgZGF0ZS10aW1lIGF4aXMgYXJlIGNhbGN1bGF0ZWQgYW5kIGRpc3BsYXllZC4gXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnMgYXJlOiBcbiAgICAgKiAqIEF1dG86IEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lcyB0aGUgaW50ZXJ2YWwgdHlwZSBiYXNlZCBvbiB0aGUgZGF0YSBhbmQgY2hhcnQgc2V0dGluZ3MuIFxuICAgICAqICogWWVhcnM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIHllYXJzLiBcbiAgICAgKiAqIE1vbnRoczogU2V0cyB0aGUgaW50ZXJ2YWwgb2YgdGhlIGF4aXMgaW4gbW9udGhzLiBcbiAgICAgKiAqIERheXM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIGRheXMuIFxuICAgICAqICogSG91cnM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIGhvdXJzLiBcbiAgICAgKiAqIE1pbnV0ZXM6IFNldHMgdGhlIGludGVydmFsIG9mIHRoZSBheGlzIGluIG1pbnV0ZXMuXG4gICAgICogQGRlZmF1bHQgJ0F1dG8nXG4gICAgICovXG4gICAgcHVibGljIGludGVydmFsVHlwZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgZGF0YSBwb2ludHMgYXJlIHJlbmRlcmVkIGJhc2VkIG9uIHRoZWlyIGluZGV4LlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGlzSW5kZXhlZDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgd2lsbCBiZSByZW5kZXJlZCBpbiBhbiBpbnZlcnNlZCBtYW5uZXIuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNJbnZlcnNlZDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBVc2VkIHRvIGZvcm1hdCB0aGUgYXhpcyBsYWJlbC4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGdsb2JhbCBzdHJpbmcgZm9ybWF0cyBzdWNoIGFzIGBDYCwgYG4xYCwgYFBgLCBldGMuIFxuICAgICAqIEl0IGFsc28gYWNjZXB0cyBwbGFjZWhvbGRlcnMgbGlrZSBge3ZhbHVlfcKwQ2AsIHdoZXJlIGB7dmFsdWV9YCByZXByZXNlbnRzIHRoZSBheGlzIGxhYmVsIChlLmcuLCAyMMKwQykuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxGb3JtYXQ6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBhY3Rpb24gdG8gdGFrZSB3aGVuIGF4aXMgbGFiZWxzIGludGVyc2VjdCB3aXRoIGVhY2ggb3RoZXIuIFxuICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogTm9uZTogU2hvd3MgYWxsIGxhYmVscyB3aXRob3V0IGFueSBtb2RpZmljYXRpb24uIFxuICAgICAqICogSGlkZTogSGlkZXMgdGhlIGxhYmVsIGlmIGl0IGludGVyc2VjdHMgd2l0aCBhbm90aGVyIGxhYmVsLiBcbiAgICAgKiAqIFRyaW06IFRyaW1zIHRoZSBsYWJlbCB0ZXh0IHRvIGZpdCB3aXRoaW4gdGhlIGF2YWlsYWJsZSBzcGFjZS4gXG4gICAgICogKiBXcmFwOiBXcmFwcyB0aGUgbGFiZWwgdGV4dCB0byBmaXQgd2l0aGluIHRoZSBhdmFpbGFibGUgc3BhY2UuIFxuICAgICAqICogTXVsdGlwbGVSb3dzOiBEaXNwbGF5cyB0aGUgbGFiZWwgdGV4dCBpbiBtdWx0aXBsZSByb3dzIHRvIGF2b2lkIGludGVyc2VjdGlvbi4gXG4gICAgICogKiBSb3RhdGU0NTogUm90YXRlcyB0aGUgbGFiZWwgdGV4dCBieSA0NSBkZWdyZWVzIHRvIGF2b2lkIGludGVyc2VjdGlvbi4gXG4gICAgICogKiBSb3RhdGU5MDogUm90YXRlcyB0aGUgbGFiZWwgdGV4dCBieSA5MCBkZWdyZWVzIHRvIGF2b2lkIGludGVyc2VjdGlvbi5cbiAgICAgKiBAZGVmYXVsdCBUcmltXG4gICAgICovXG4gICAgcHVibGljIGxhYmVsSW50ZXJzZWN0QWN0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgbGFiZWxQYWRkaW5nYCBwcm9wZXJ0eSBhZGp1c3RzIHRoZSBkaXN0YW5jZSB0byBlbnN1cmUgYSBjbGVhciBzcGFjZSBiZXR3ZWVuIHRoZSBheGlzIGxhYmVscyBhbmQgdGhlIGF4aXMgbGluZS5cbiAgICAgKiBAZGVmYXVsdCA1XG4gICAgICovXG4gICAgcHVibGljIGxhYmVsUGFkZGluZzogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYGxhYmVsUGxhY2VtZW50YCBwcm9wZXJ0eSBjb250cm9scyB3aGVyZSB0aGUgY2F0ZWdvcnkgYXhpcyBsYWJlbHMgYXJlIHJlbmRlcmVkIGluIHJlbGF0aW9uIHRvIHRoZSBheGlzIHRpY2tzLiBcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogQmV0d2VlblRpY2tzOiBSZW5kZXJzIHRoZSBsYWJlbCBiZXR3ZWVuIHRoZSBheGlzIHRpY2tzLiBcbiAgICAgKiAqIE9uVGlja3M6IFJlbmRlcnMgdGhlIGxhYmVsIGRpcmVjdGx5IG9uIHRoZSBheGlzIHRpY2tzLlxuICAgICAqIEBkZWZhdWx0ICdCZXR3ZWVuVGlja3MnXG4gICAgICovXG4gICAgcHVibGljIGxhYmVsUGxhY2VtZW50OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBgbGFiZWxQb3NpdGlvbmAgcHJvcGVydHkgZGV0ZXJtaW5lcyB3aGVyZSB0aGUgYXhpcyBsYWJlbHMgYXJlIHJlbmRlcmVkIGluIHJlbGF0aW9uIHRvIHRoZSBheGlzIGxpbmUuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBJbnNpZGU6IFJlbmRlcnMgdGhlIGxhYmVscyBpbnNpZGUgdGhlIGF4aXMgbGluZS4gXG4gICAgICogKiBPdXRzaWRlOiBSZW5kZXJzIHRoZSBsYWJlbHMgb3V0c2lkZSB0aGUgYXhpcyBsaW5lLlxuICAgICAqIEBkZWZhdWx0ICdPdXRzaWRlJ1xuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFBvc2l0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBhbmdsZSB0byB3aGljaCB0aGUgYXhpcyBsYWJlbCBnZXRzIHJvdGF0ZWQuXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyBsYWJlbFJvdGF0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoaXMgcHJvcGVydHkgYWxsb3dzIGRlZmluaW5nIHZhcmlvdXMgZm9udCBzZXR0aW5ncyB0byBjb250cm9sIGhvdyB0aGUgbGFiZWxzIGFyZSBkaXNwbGF5ZWQgb24gdGhlIGF4aXMuXG4gICAgICovXG4gICAgcHVibGljIGxhYmVsU3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSB0ZW1wbGF0ZSB1c2VkIHRvIHJlbmRlciBheGlzIGxhYmVscywgYWxsb3dpbmcgZm9yIGN1c3RvbWl6ZWQgbGFiZWxzIHdpdGggdGV4dCwgaW1hZ2VzLCBvciBvdGhlciBVSSBlbGVtZW50cy4gXG4gICAgICogVGhlIHRlbXBsYXRlIGlzIHByb3ZpZGVkIGFzIGEgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIGZvciBpbnRlcnBvbGF0aW9uLiBVc2UgYCR7bGFiZWx9YCB0byBpbnNlcnQgdGhlIGF4aXMgbGFiZWwgYW5kIGAke3ZhbHVlfWAgZm9yIHRoZSBheGlzIGxhYmVsIHZhbHVlLiBcbiAgICAgKiBGb3Igc2VjdXJpdHksIHN0cmluZyB0ZW1wbGF0ZXMgdXNlIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIGluIFJlYWN04oCUZW5zdXJlIGlucHV0IGlzIHRydXN0ZWQgdG8gYXZvaWQgWFNTIHZ1bG5lcmFiaWxpdGllcy4gXG4gICAgICogSWYgbnVsbCBvciB1bmRlZmluZWQsIHRoZSBheGlzIHdpbGwgcmVuZGVyIGRlZmF1bHQgbGFiZWxzLiBcbiAgICAgKiBDb21wYXRpYmxlIHdpdGggYm90aCBjYXRlZ29yaWNhbCBhbmQgbnVtZXJpY2FsIGF4ZXMuXG4gICAgICogQGV4YW1wbGUgYGBgaHRtbFxuPGRpdiBpZD0nQ2hhcnQnPjwvZGl2PlxuYGBgXG5gYGB0eXBlc2NyaXB0XG5sZXQgY2hhcnQ6IENoYXJ0ID0gbmV3IENoYXJ0KHtcbi4uLlxucHJpbWFyeVhBeGlzOiB7XG5sYWJlbFRlbXBsYXRlOiAnPGRpdj5Db3VudHJ5OiAke2xhYmVsfTwvZGl2Pidcbn1cbi4uLlxufSk7XG5jaGFydC5hcHBlbmRUbygnI0NoYXJ0Jyk7XG5gYGBcblxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgbGFiZWxUZW1wbGF0ZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBhbGlnbm1lbnQgb2YgbGFiZWxzIHdoZW4gYSBsaW5lIGJyZWFrIG9jY3VycyBpbiB0aGUgYXhpcyBsYWJlbHMuXG4gICAgICogQGRlZmF1bHQgJ0NlbnRlcidcbiAgICAgKi9cbiAgICBwdWJsaWMgbGluZUJyZWFrQWxpZ25tZW50OiBhbnk7XG4gICAgLyoqIFxuICAgICAqIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIHRoZSBheGlzIGxpbmVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsaW5lU3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBiYXNlIHZhbHVlIGZvciBhIGxvZ2FyaXRobWljIGF4aXMuIFxuICAgICAqID4gTm90ZSB0aGF0IGB2YWx1ZVR5cGVgIG11c3QgYmUgc2V0IHRvIGBMb2dhcml0aG1pY2AgZm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrLlxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICovXG4gICAgcHVibGljIGxvZ0Jhc2U6IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgbWFqb3IgZ3JpZCBsaW5lcyBvbiB0aGUgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFqb3JHcmlkTGluZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgbWFqb3IgdGljayBsaW5lcyBvbiB0aGUgYXhpcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFqb3JUaWNrTGluZXM6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBheGlzIHJhbmdlLCB3aGljaCBzZXRzIHRoZSB1cHBlciBib3VuZCBvZiB0aGUgYXhpcyBhbmQgZGVmaW5lcyB0aGUgbGFyZ2VzdCB2YWx1ZSBkaXNwbGF5ZWQgb24gdGhlIGNoYXJ0LCBoZWxwaW5nIHRvIGNvbnRyb2wgdGhlIHZpc2libGUgcmFuZ2Ugb2YgZGF0YS5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIG1heGltdW06IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdpZHRoIG9mIGFuIGF4aXMgbGFiZWwuXG4gICAgICogQGRlZmF1bHQgMzQuXG4gICAgICovXG4gICAgcHVibGljIG1heGltdW1MYWJlbFdpZHRoOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbGFiZWxzIHBlciAxMDAgcGl4ZWxzIHJlbGF0aXZlIHRvIHRoZSBheGlzIGxlbmd0aC5cbiAgICAgKiBAZGVmYXVsdCAzXG4gICAgICovXG4gICAgcHVibGljIG1heGltdW1MYWJlbHM6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBheGlzIHJhbmdlLCB3aGljaCBzZXRzIHRoZSBsb3dlciBib3VuZCBvZiB0aGUgYXhpcyBhbmQgZGVmaW5lcyB0aGUgc21hbGxlc3QgdmFsdWUgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgY2hhcnQgdG8gY29udHJvbCB0aGUgdmlzaWJsZSByYW5nZSBvZiBkYXRhLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgbWluaW11bTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyBtaW5vciBncmlkIGxpbmVzIG9uIHRoZSBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5vckdyaWRMaW5lczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyBtaW5vciB0aWNrIGxpbmVzIG9uIHRoZSBheGlzLlxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5vclRpY2tMaW5lczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBtaW5vciB0aWNrcyBwZXIgaW50ZXJ2YWwuXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyBtaW5vclRpY2tzUGVySW50ZXJ2YWw6IGFueTtcbiAgICAvKiogXG4gICAgICogTXVsdGktbGV2ZWwgbGFiZWxzIGFyZSB1c2VkIHRvIGRpc3BsYXkgaGllcmFyY2hpY2FsIG9yIGdyb3VwZWQgbGFiZWxzIG9uIHRoZSBheGlzLCBhbGxvd2luZyBmb3IgYSBtb3JlIGRldGFpbGVkIGFuZCBzdHJ1Y3R1cmVkIGRhdGEgcmVwcmVzZW50YXRpb24uXG4gICAgICovXG4gICAgcHVibGljIG11bHRpTGV2ZWxMYWJlbHM6IGFueTtcbiAgICAvKiogXG4gICAgICogQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgYW4gYXhpcy4gVG8gYXNzb2NpYXRlIGFuIGF4aXMgd2l0aCBhIHNlcmllcywgc2V0IHRoaXMgbmFtZSB0byB0aGUgYHhBeGlzTmFtZWAgb3IgYHlBeGlzTmFtZWAgcHJvcGVydGllcyBvZiB0aGUgc2VyaWVzLlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIG5hbWU6IGFueTtcbiAgICAvKiogXG4gICAgICogSWYgc2V0IHRvIHRydWUsIHRoZSBheGlzIHdpbGwgcmVuZGVyIG9uIHRoZSBvcHBvc2l0ZSBzaWRlIG9mIGl0cyBkZWZhdWx0IHBvc2l0aW9uLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIG9wcG9zZWRQb3NpdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciBheGlzIGVsZW1lbnRzLCBzdWNoIGFzIGF4aXMgbGFiZWxzIGFuZCB0aGUgYXhpcyB0aXRsZSwgc2hvdWxkIGJlIGNyb3NzZWQgYnkgdGhlIGF4aXMgbGluZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHBsYWNlTmV4dFRvQXhpc0xpbmU6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBwYWRkaW5nIG9uIHRoZSB0b3AsIGJvdHRvbSwgbGVmdCBhbmQgcmlnaHQgc2lkZXMgb2YgdGhlIGNoYXJ0IGFyZWEsIGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgcHVibGljIHBsb3RPZmZzZXQ6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBib3R0b20gcGFkZGluZyBmb3IgdGhlIGNoYXJ0IGFyZWEsIGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIHBsb3RPZmZzZXRCb3R0b206IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBsZWZ0IHBhZGRpbmcgZm9yIHRoZSBjaGFydCBhcmVhLCBpbiBwaXhlbHMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBwbG90T2Zmc2V0TGVmdDogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHJpZ2h0IHBhZGRpbmcgZm9yIHRoZSBjaGFydCBhcmVhLCBpbiBwaXhlbHMuXG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIHB1YmxpYyBwbG90T2Zmc2V0UmlnaHQ6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSB0b3AgcGFkZGluZyBmb3IgdGhlIGNoYXJ0IGFyZWEsIGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgcHVibGljIHBsb3RPZmZzZXRUb3A6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGByYW5nZVBhZGRpbmdgIHByb3BlcnR5IGRldGVybWluZXMgaG93IHBhZGRpbmcgaXMgYXBwbGllZCB0byB0aGUgYXhpcyByYW5nZSwgYWZmZWN0aW5nIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBjaGFydCBieSBhZGp1c3RpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIHRoZSBheGlzLiBcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9ucyBhcmU6IFxuICAgICAqICogTm9uZTogTm8gcGFkZGluZyBpcyBhcHBsaWVkIHRvIHRoZSBheGlzLiBcbiAgICAgKiAqIE5vcm1hbDogUGFkZGluZyBpcyBhcHBsaWVkIGJhc2VkIG9uIHRoZSByYW5nZSBjYWxjdWxhdGlvbi4gXG4gICAgICogKiBBZGRpdGlvbmFsOiBUaGUgaW50ZXJ2YWwgb2YgdGhlIGF4aXMgaXMgYWRkZWQgYXMgcGFkZGluZyB0byBib3RoIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBvZiB0aGUgcmFuZ2UuIFxuICAgICAqICogUm91bmQ6IFRoZSBheGlzIHJhbmdlIGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgcG9zc2libGUgdmFsdWUgdGhhdCBpcyBkaXZpc2libGUgYnkgdGhlIGludGVydmFsLlxuICAgICAqIEBkZWZhdWx0ICdBdXRvJ1xuICAgICAqL1xuICAgIHB1YmxpYyByYW5nZVBhZGRpbmc6IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbmRleCBvZiB0aGUgcm93IHdoZXJlIHRoZSBheGlzIGlzIGFzc29jaWF0ZWQgd2hlbiB0aGUgY2hhcnQgYXJlYSBpcyBkaXZpZGVkIGludG8gbXVsdGlwbGUgcGxvdCBhcmVhcyB1c2luZyBgcm93c2AuIFxuICAgICAqIFxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgcm93SW5kZXg6IGFueTtcbiAgICAvKiogXG4gICAgICogQ29uZmlndXJlcyB0aGUgc2Nyb2xsYmFyIHdpdGggb3B0aW9ucyBmb3IgY3VzdG9taXphdGlvbiwgaW5jbHVkaW5nIGFwcGVhcmFuY2UsIGJlaGF2aW9yLCBhbmQgbGF6eSBsb2FkaW5nIHNldHRpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBzY3JvbGxiYXJTZXR0aW5nczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHNrZWxldG9uIGZvcm1hdCB1c2VkIGZvciBwcm9jZXNzaW5nIGRhdGUtdGltZSB2YWx1ZXMuXG4gICAgICogQGRlZmF1bHQgJydcbiAgICAgKi9cbiAgICBwdWJsaWMgc2tlbGV0b246IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBmb3JtYXQgdHlwZSB0byBiZSB1c2VkIGluIGRhdGUtdGltZSBmb3JtYXR0aW5nLlxuICAgICAqIEBkZWZhdWx0ICdEYXRlVGltZSdcbiAgICAgKiBAZGVwcmVjYXRlZCBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2tlbGV0b25UeXBlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGBjb2x1bW5zYCBvciBgcm93c2AgdGhhdCBhbiBheGlzIHNwYW5zIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5LlxuICAgICAqIEBkZWZhdWx0IDFcbiAgICAgKi9cbiAgICBwdWJsaWMgc3BhbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHN0YXJ0IGFuZ2xlIGZvciB0aGUgc2VyaWVzIGluIGEgcG9sYXIgb3IgcmFkYXIgY2hhcnQsIG1lYXN1cmVkIGluIGRlZ3JlZXMgZnJvbSB0aGUgaG9yaXpvbnRhbCBheGlzLCBkZXRlcm1pbmluZyB0aGUgaW5pdGlhbCBhbmdsZSBmcm9tIHdoaWNoIHRoZSBzZXJpZXMgYmVnaW5zLlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhcnRBbmdsZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGF4aXMgc3RhcnRzIGZyb20gemVyby4gXG4gICAgICogSWYgc2V0IHRvIGZhbHNlLCB0aGUgYXhpcyBzdGFydHMgZnJvbSB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgZGF0YS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHN0YXJ0RnJvbVplcm86IGFueTtcbiAgICAvKiogXG4gICAgICogU3BlY2lmaWVzIHRoZSBjb2xsZWN0aW9uIG9mIHN0cmlwIGxpbmVzIGZvciB0aGUgYXhpcywgd2hpY2ggYXJlIHZpc3VhbCBlbGVtZW50cyB1c2VkIHRvIG1hcmsgb3IgaGlnaGxpZ2h0IHNwZWNpZmljIHJhbmdlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RyaXBMaW5lczogYW55O1xuICAgIC8qKiBcbiAgICAgKiBUaGUgYHRhYkluZGV4YCB2YWx1ZSBmb3IgdGhlIGF4aXMsIGRldGVybWluaW5nIGl0cyBwb3NpdGlvbiBpbiB0aGUgdGFiIG9yZGVyLlxuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBwdWJsaWMgdGFiSW5kZXg6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGB0aWNrUG9zaXRpb25gIHByb3BlcnR5IGRldGVybWluZXMgd2hlcmUgdGhlIGF4aXMgdGlja3MgYXJlIHJlbmRlcmVkIGluIHJlbGF0aW9uIHRvIHRoZSBheGlzIGxpbmUuIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGFyZTogXG4gICAgICogKiBJbnNpZGU6IFJlbmRlcnMgdGhlIHRpY2tzIGluc2lkZSB0aGUgYXhpcyBsaW5lLiBcbiAgICAgKiAqIE91dHNpZGU6IFJlbmRlcnMgdGhlIHRpY2tzIG91dHNpZGUgdGhlIGF4aXMgbGluZS5cbiAgICAgKiBAZGVmYXVsdCAnT3V0c2lkZSdcbiAgICAgKi9cbiAgICBwdWJsaWMgdGlja1Bvc2l0aW9uOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFNwZWNpZmllcyB0aGUgdGl0bGUgb2YgYW4gYXhpcywgZGlzcGxheWVkIGFsb25nIHRoZSBheGlzIHRvIHByb3ZpZGUgY29udGV4dCBhYm91dCB0aGUgcmVwcmVzZW50ZWQgZGF0YS5cbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyB0aXRsZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHBhZGRpbmcgYmV0d2VlbiB0aGUgYXhpcyB0aXRsZSBhbmQgdGhlIGF4aXMgbGFiZWxzLlxuICAgICAqIEBkZWZhdWx0IDVcbiAgICAgKi9cbiAgICBwdWJsaWMgdGl0bGVQYWRkaW5nOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIERlZmluZXMgYW4gYW5nbGUgZm9yIHJvdGF0aW5nIHRoZSBheGlzIHRpdGxlLiBCeSBkZWZhdWx0LCB0aGUgYW5nbGUgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgcG9zaXRpb24gYW5kIG9yaWVudGF0aW9uIG9mIHRoZSBheGlzLlxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBwdWJsaWMgdGl0bGVSb3RhdGlvbjogYW55O1xuICAgIC8qKiBcbiAgICAgKiBPcHRpb25zIGZvciBjdXN0b21pemluZyB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgYXhpcyB0aXRsZSwgaW5jbHVkaW5nIGZvbnQgZmFtaWx5LCBzaXplLCBzdHlsZSwgd2VpZ2h0LCBhbmQgY29sb3IuXG4gICAgICovXG4gICAgcHVibGljIHRpdGxlU3R5bGU6IGFueTtcbiAgICAvKiogXG4gICAgICogVGhlIGB2YWx1ZVR5cGVgIHByb3BlcnR5IGRlZmluZXMgdGhlIHR5cGUgb2YgZGF0YSB0aGF0IHRoZSBheGlzIGNhbiBtYW5hZ2UsIGVuc3VyaW5nIGNvcnJlY3QgcmVuZGVyaW5nIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUuIFRoaXMgcHJvcGVydHkgc3VwcG9ydHMgbXVsdGlwbGUgZGF0YSB0eXBlcywgZWFjaCBzdWl0ZWQgZm9yIGRpZmZlcmVudCBraW5kcyBvZiBkYXRhIHZpc3VhbGl6YXRpb24uIFxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zIGluY2x1ZGU6IFxuICAgICAqICogRG91YmxlOiBVc2VkIGZvciByZW5kZXJpbmcgYSBudW1lcmljIGF4aXMgdG8gYWNjb21tb2RhdGUgbnVtZXJpYyBkYXRhLiBcbiAgICAgKiAqIERhdGVUaW1lOiBVdGlsaXplZCBmb3IgcmVuZGVyaW5nIGEgZGF0ZS10aW1lIGF4aXMgdG8gbWFuYWdlIGRhdGUtdGltZSBkYXRhLiBcbiAgICAgKiAqIENhdGVnb3J5OiBFbXBsb3llZCBmb3IgcmVuZGVyaW5nIGEgY2F0ZWdvcnkgYXhpcyB0byBtYW5hZ2UgY2F0ZWdvcmljYWwgZGF0YS4gXG4gICAgICogKiBMb2dhcml0aG1pYzogQXBwbGllZCBmb3IgcmVuZGVyaW5nIGEgbG9nYXJpdGhtaWMgYXhpcyB0byBoYW5kbGUgYSB3aWRlIHJhbmdlIG9mIHZhbHVlcy4gXG4gICAgICogKiBEYXRlVGltZUNhdGVnb3J5OiBVc2VkIHRvIHJlbmRlciBhIGRhdGUtdGltZSBjYXRlZ29yeSBheGlzIGZvciBtYW5hZ2luZyBidXNpbmVzcyBkYXlzLlxuICAgICAqIEBkZWZhdWx0ICdEb3VibGUnXG4gICAgICogQGJsYXpvcnR5cGUgU3luY2Z1c2lvbi5FSjIuQmxhem9yLkNoYXJ0cy5WYWx1ZVR5cGVcbiAgICAgKiBAaXNlbnVtZXJhdGlvbiB0cnVlXG4gICAgICovXG4gICAgcHVibGljIHZhbHVlVHlwZTogYW55O1xuICAgIC8qKiBcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgYXhpcyBsYWJlbHMgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBjaGFydC4gQnkgZGVmYXVsdCwgYXhpcyBsYWJlbHMgYXJlIGVuYWJsZWQuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHB1YmxpYyB2aXNpYmxlOiBhbnk7XG4gICAgLyoqIFxuICAgICAqIFRoZSBheGlzIGlzIHNjYWxlZCBieSB0aGlzIGZhY3Rvci4gV2hlbiBgem9vbUZhY3RvcmAgaXMgMC41LCB0aGUgY2hhcnQgaXMgc2NhbGVkIGJ5IDIwMCUgYWxvbmcgdGhpcyBheGlzLiBcbiAgICAgKiA+IE5vdGUgdGhlIHZhbHVlIHJhbmdlcyBmcm9tIDAgdG8gMS5cbiAgICAgKiBAZGVmYXVsdCAxXG4gICAgICovXG4gICAgcHVibGljIHpvb21GYWN0b3I6IGFueTtcbiAgICAvKiogXG4gICAgICogU2V0cyB0aGUgcG9zaXRpb24gb2YgdGhlIHpvb21lZCBheGlzIG9uIHRoZSBjaGFydCwgd2l0aCB0aGUgYHpvb21Qb3NpdGlvbmAgcHJvcGVydHkgc3BlY2lmeWluZyB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSB6b29tZWQgcmFuZ2UsIGZyb20gMCAoc3RhcnQpIHRvIDEgKGVuZCkuXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyB6b29tUG9zaXRpb246IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjpWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHNldFZhbHVlKCdjdXJyZW50SW5zdGFuY2UnLCB0aGlzLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzKG91dHB1dHMpO1xuICAgICAgICB0aGlzLmRpcmVjdGl2ZVByb3BMaXN0ID0gaW5wdXQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEF4aXMgQXJyYXkgRGlyZWN0aXZlXG4gKiBAcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2Vqcy1jaGFydD5lLWF4ZXMnLFxuICAgIHF1ZXJpZXM6IHtcbiAgICAgICAgY2hpbGRyZW46IG5ldyBDb250ZW50Q2hpbGRyZW4oQXhpc0RpcmVjdGl2ZSlcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBBeGVzRGlyZWN0aXZlIGV4dGVuZHMgQXJyYXlCYXNlPEF4ZXNEaXJlY3RpdmU+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2F4ZXMnKTtcbiAgICB9XG59Il19