UNPKG

cytoscape-angular

Version:
223 lines (220 loc) 21.2 kB
var _CytoscapeGraphToolbarComponent__layoutOptions, _CytoscapeGraphToolbarComponent__styles; import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib"; import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "primeng/overlaypanel"; import * as i2 from "primeng/api"; import * as i3 from "@angular/common"; import * as i4 from "../cytoscape-layout-tool/cytoscape-layout-tool.component"; import * as i5 from "primeng/button"; import * as i6 from "primeng/tooltip"; import * as i7 from "../cytoscape-style-tool/cytoscape-style-tool.component"; function CytoscapeGraphToolbarComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) { const _r9 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "cytoscape-layout-tool", 8); i0.ɵɵlistener("layoutOptionsChange", function CytoscapeGraphToolbarComponent_ng_template_3_Template_cytoscape_layout_tool_layoutOptionsChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return ctx_r8.layoutOptions = $event; }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("layoutOptions", ctx_r1.layoutOptions); } } function CytoscapeGraphToolbarComponent_p_button_4_Template(rf, ctx) { if (rf & 1) { const _r11 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "p-button", 9); i0.ɵɵlistener("click", function CytoscapeGraphToolbarComponent_p_button_4_Template_p_button_click_0_listener($event) { i0.ɵɵrestoreView(_r11); i0.ɵɵnextContext(); const _r0 = i0.ɵɵreference(2); return _r0.toggle($event); }); i0.ɵɵpipe(1, "titlecase"); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵclassProp("max-button-width", ctx_r2.direction === "column"); i0.ɵɵpropertyInterpolate1("label", "", i0.ɵɵpipeBind1(1, 3, ctx_r2.layoutOptions.name), " Layout"); } } function CytoscapeGraphToolbarComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) { const _r13 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "cytoscape-style-tool", 10); i0.ɵɵlistener("stylesChange", function CytoscapeGraphToolbarComponent_ng_template_7_Template_cytoscape_style_tool_stylesChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(); return ctx_r12.styles = $event; })("stylesChange", function CytoscapeGraphToolbarComponent_ng_template_7_Template_cytoscape_style_tool_stylesChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r14 = i0.ɵɵnextContext(); return ctx_r14.onStylesChange($event); })("styleSelectorChange", function CytoscapeGraphToolbarComponent_ng_template_7_Template_cytoscape_style_tool_styleSelectorChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r15 = i0.ɵɵnextContext(); return ctx_r15.onStyleSelectorChange($event); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r4 = i0.ɵɵnextContext(); i0.ɵɵproperty("styles", ctx_r4.styles); } } function CytoscapeGraphToolbarComponent_p_button_8_Template(rf, ctx) { if (rf & 1) { const _r17 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "p-button", 11); i0.ɵɵlistener("click", function CytoscapeGraphToolbarComponent_p_button_8_Template_p_button_click_0_listener($event) { i0.ɵɵrestoreView(_r17); i0.ɵɵnextContext(); const _r3 = i0.ɵɵreference(6); return _r3.toggle($event); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r5 = i0.ɵɵnextContext(); i0.ɵɵclassProp("max-button-width", ctx_r5.direction === "column"); } } function CytoscapeGraphToolbarComponent_span_9_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span", 12); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r6 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate1("", ctx_r6.nodes.length, " Nodes \u00A0"); } } function CytoscapeGraphToolbarComponent_span_10_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "span", 12); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r7 = i0.ɵɵnextContext(); i0.ɵɵadvance(1); i0.ɵɵtextInterpolate1("", ctx_r7.edges.length, " Edges"); } } export class CytoscapeGraphToolbarComponent { constructor() { this.direction = 'row'; _CytoscapeGraphToolbarComponent__layoutOptions.set(this, void 0); this.layoutOptionsChange = new EventEmitter(); _CytoscapeGraphToolbarComponent__styles.set(this, void 0); this.stylesChange = new EventEmitter(); this.styleSelectorChange = new EventEmitter(); } get layoutOptions() { return __classPrivateFieldGet(this, _CytoscapeGraphToolbarComponent__layoutOptions, "f"); } set layoutOptions(value) { console.log(`Graph toolbar gets new layout options ${JSON.stringify(value)}`); __classPrivateFieldSet(this, _CytoscapeGraphToolbarComponent__layoutOptions, value, "f"); this.layoutOptionsChange.emit(__classPrivateFieldGet(this, _CytoscapeGraphToolbarComponent__layoutOptions, "f")); } get styles() { return __classPrivateFieldGet(this, _CytoscapeGraphToolbarComponent__styles, "f"); } set styles(styles) { __classPrivateFieldSet(this, _CytoscapeGraphToolbarComponent__styles, styles, "f"); this.stylesChange.emit(__classPrivateFieldGet(this, _CytoscapeGraphToolbarComponent__styles, "f")); } ngOnInit() { } onStyleSelectorChange(selector) { console.log(`onStyleSelectorChange: selector`); this.styleSelectorChange.emit(selector); } onStylesChange(stylesheet) { console.log(`onStylesChange`); this.styles = stylesheet; } } _CytoscapeGraphToolbarComponent__layoutOptions = new WeakMap(), _CytoscapeGraphToolbarComponent__styles = new WeakMap(); CytoscapeGraphToolbarComponent.ɵfac = function CytoscapeGraphToolbarComponent_Factory(t) { return new (t || CytoscapeGraphToolbarComponent)(); }; CytoscapeGraphToolbarComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CytoscapeGraphToolbarComponent, selectors: [["cytoscape-graph-toolbar"]], inputs: { nodes: "nodes", edges: "edges", direction: "direction", layoutOptions: "layoutOptions", styles: "styles", showLayoutToolbarButton: "showLayoutToolbarButton", showStyleToolbarButton: "showStyleToolbarButton", showToolbarButtons: "showToolbarButtons" }, outputs: { layoutOptionsChange: "layoutOptionsChange", stylesChange: "stylesChange", styleSelectorChange: "styleSelectorChange" }, decls: 11, vars: 12, consts: [[1, "toolbar-container"], [3, "dismissable", "showCloseIcon"], ["layoutToolbaroverlay", ""], ["pTemplate", ""], ["pTooltip", "Layout Settings...", "icon", "pi pi-sliders-v", 3, "label", "max-button-width", "click", 4, "ngIf"], ["styleToolbaroverlay", ""], ["label", "Style", "pTooltip", "Styling...", "icon", "pi pi-palette", 3, "max-button-width", "click", 4, "ngIf"], ["class", "graph-data", 4, "ngIf"], [3, "layoutOptions", "layoutOptionsChange"], ["pTooltip", "Layout Settings...", "icon", "pi pi-sliders-v", 3, "label", "click"], [3, "styles", "stylesChange", "styleSelectorChange"], ["label", "Style", "pTooltip", "Styling...", "icon", "pi pi-palette", 3, "click"], [1, "graph-data"]], template: function CytoscapeGraphToolbarComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 0); i0.ɵɵelementStart(1, "p-overlayPanel", 1, 2); i0.ɵɵtemplate(3, CytoscapeGraphToolbarComponent_ng_template_3_Template, 1, 1, "ng-template", 3); i0.ɵɵelementEnd(); i0.ɵɵtemplate(4, CytoscapeGraphToolbarComponent_p_button_4_Template, 2, 5, "p-button", 4); i0.ɵɵelementStart(5, "p-overlayPanel", 1, 5); i0.ɵɵtemplate(7, CytoscapeGraphToolbarComponent_ng_template_7_Template, 1, 1, "ng-template", 3); i0.ɵɵelementEnd(); i0.ɵɵtemplate(8, CytoscapeGraphToolbarComponent_p_button_8_Template, 1, 2, "p-button", 6); i0.ɵɵtemplate(9, CytoscapeGraphToolbarComponent_span_9_Template, 2, 1, "span", 7); i0.ɵɵtemplate(10, CytoscapeGraphToolbarComponent_span_10_Template, 2, 1, "span", 7); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵclassProp("row-layout", ctx.direction === "row")("column-layout", ctx.direction === "column"); i0.ɵɵadvance(1); i0.ɵɵproperty("dismissable", true)("showCloseIcon", true); i0.ɵɵadvance(3); i0.ɵɵproperty("ngIf", ctx.showToolbarButtons); i0.ɵɵadvance(1); i0.ɵɵproperty("dismissable", true)("showCloseIcon", true); i0.ɵɵadvance(3); i0.ɵɵproperty("ngIf", ctx.showToolbarButtons); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.nodes); i0.ɵɵadvance(1); i0.ɵɵproperty("ngIf", ctx.edges); } }, directives: [i1.OverlayPanel, i2.PrimeTemplate, i3.NgIf, i4.CytoscapeLayoutToolComponent, i5.Button, i6.Tooltip, i7.CytoscapeStyleToolComponent], pipes: [i3.TitleCasePipe], styles: [".toolbar-container[_ngcontent-%COMP%] {\n display: flex;\n }\n\n .row-layout[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n padding-bottom: 4px;\n }\n\n .column-layout[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n justify-content: flex-start;\n padding-left: 4px;\n }\n\n p-button[_ngcontent-%COMP%] {\n padding-bottom: 4px;\n padding-right: 4px;\n }"] }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CytoscapeGraphToolbarComponent, [{ type: Component, args: [{ // tslint:disable-next-line:component-selector selector: 'cytoscape-graph-toolbar', template: ` <div class="toolbar-container" [class.row-layout]="direction === 'row'" [class.column-layout]="direction === 'column'"> <p-overlayPanel #layoutToolbaroverlay [dismissable]="true" [showCloseIcon]="true" > <ng-template pTemplate> <cytoscape-layout-tool [(layoutOptions)]="layoutOptions"></cytoscape-layout-tool> </ng-template> </p-overlayPanel> <p-button *ngIf="showToolbarButtons" label="{{layoutOptions.name | titlecase }} Layout" [class.max-button-width]="direction === 'column'" pTooltip="Layout Settings..." icon="pi pi-sliders-v" (click)="layoutToolbaroverlay.toggle($event)"></p-button> <p-overlayPanel #styleToolbaroverlay [dismissable]="true" [showCloseIcon]="true"> <ng-template pTemplate> <cytoscape-style-tool [(styles)]="styles" (stylesChange)="onStylesChange($event)" (styleSelectorChange)="onStyleSelectorChange($event)"></cytoscape-style-tool> </ng-template> </p-overlayPanel> <p-button *ngIf="showToolbarButtons" [class.max-button-width]="direction === 'column'" label="Style" pTooltip="Styling..." icon="pi pi-palette" (click)="styleToolbaroverlay.toggle($event)"> </p-button> <span class="graph-data" *ngIf="nodes">{{nodes.length}} Nodes &nbsp;</span> <span class="graph-data" *ngIf="edges">{{edges.length}} Edges</span> </div> `, styles: [ ` .toolbar-container { display: flex; } .row-layout { flex-direction: row; align-items: center; padding-bottom: 4px; } .column-layout { flex-direction: column; align-items: stretch; justify-content: flex-start; padding-left: 4px; } p-button { padding-bottom: 4px; padding-right: 4px; } ` ], }] }], function () { return []; }, { nodes: [{ type: Input }], edges: [{ type: Input }], direction: [{ type: Input }], layoutOptions: [{ type: Input }], layoutOptionsChange: [{ type: Output }], styles: [{ type: Input }], stylesChange: [{ type: Output }], styleSelectorChange: [{ type: Output }], showLayoutToolbarButton: [{ type: Input }], showStyleToolbarButton: [{ type: Input }], showToolbarButtons: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3l0b3NjYXBlLWdyYXBoLXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3l0b3NjYXBlLWFuZ3VsYXIvc3JjL2xpYi9jeXRvc2NhcGUtZ3JhcGgtdG9vbGJhci9jeXRvc2NhcGUtZ3JhcGgtdG9vbGJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBOzs7Ozs7Ozs7OztJQWFwRSxnREFBeUQ7SUFBbEMscVFBQWlDO0lBQUMsaUJBQXdCOzs7SUFBMUQsb0RBQWlDOzs7O0lBRzVELG1DQUt3RDtJQUE5Qyx5TUFBUyxrQkFBbUMsSUFBQzs7SUFBQyxpQkFBVzs7O0lBSHpELGlFQUFpRDtJQURqRCxrR0FBa0Q7Ozs7SUFPeEQsZ0RBR3dEO0lBRnRELGtQQUFtQiw0T0FBQSxpUUFBQTtJQUVtQyxpQkFBdUI7OztJQUY3RSxzQ0FBbUI7Ozs7SUFLekIsb0NBS3VEO0lBQTdDLHlNQUFTLGtCQUFrQyxJQUFDO0lBQ3RELGlCQUFXOzs7SUFMRCxpRUFBaUQ7OztJQU0zRCxnQ0FBdUM7SUFBQSxZQUE2QjtJQUFBLGlCQUFPOzs7SUFBcEMsZUFBNkI7SUFBN0IsK0RBQTZCOzs7SUFDcEUsZ0NBQXVDO0lBQUEsWUFBc0I7SUFBQSxpQkFBTzs7O0lBQTdCLGVBQXNCO0lBQXRCLHdEQUFzQjs7QUE2Qm5FLE1BQU0sT0FBTyw4QkFBOEI7SUF3Q3pDO1FBbENBLGNBQVMsR0FBcUIsS0FBSyxDQUFBO1FBRW5DLGlFQUE4QjtRQVVwQix3QkFBbUIsR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUE7UUFFOUYsMERBQXNCO1FBU1osaUJBQVksR0FBK0IsSUFBSSxZQUFZLEVBQWdCLENBQUE7UUFFM0Usd0JBQW1CLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUE7SUFVaEYsQ0FBQztJQWhDRCxJQUNJLGFBQWE7UUFDZixPQUFPLHVCQUFBLElBQUksc0RBQWdCLENBQUE7SUFDN0IsQ0FBQztJQUNELElBQUksYUFBYSxDQUFDLEtBQUs7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5Q0FBeUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDN0UsdUJBQUEsSUFBSSxrREFBbUIsS0FBSyxNQUFBLENBQUE7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx1QkFBQSxJQUFJLHNEQUFnQixDQUFDLENBQUE7SUFDckQsQ0FBQztJQUlELElBQ0ksTUFBTTtRQUNSLE9BQU8sdUJBQUEsSUFBSSwrQ0FBUyxDQUFBO0lBQ3RCLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFvQjtRQUM3Qix1QkFBQSxJQUFJLDJDQUFZLE1BQU0sTUFBQSxDQUFBO1FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUFBLElBQUksK0NBQVMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFlRCxRQUFRO0lBQ1IsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWdCO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtRQUM5QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxjQUFjLENBQUMsVUFBdUM7UUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFBO0lBQzFCLENBQUM7Ozs0R0F0RFUsOEJBQThCO2lGQUE5Qiw4QkFBOEI7UUE3RHZDLDhCQUVvRDtRQUNsRCw0Q0FFQztRQUNDLCtGQUVjO1FBQ2hCLGlCQUFpQjtRQUNqQix5RkFLbUU7UUFDbkUsNENBQWlGO1FBQy9FLCtGQUtjO1FBQ2hCLGlCQUFpQjtRQUNqQix5RkFNVztRQUNYLGlGQUEyRTtRQUMzRSxtRkFBb0U7UUFDdEUsaUJBQU07O1FBaENELHFEQUF3Qyw2Q0FBQTtRQUczQixlQUFvQjtRQUFwQixrQ0FBb0IsdUJBQUE7UUFNekIsZUFBd0I7UUFBeEIsNkNBQXdCO1FBTUUsZUFBb0I7UUFBcEIsa0NBQW9CLHVCQUFBO1FBUTlDLGVBQXdCO1FBQXhCLDZDQUF3QjtRQU9ULGVBQVc7UUFBWCxnQ0FBVztRQUNYLGVBQVc7UUFBWCxnQ0FBVzs7dUZBNkI5Qiw4QkFBOEI7Y0FqRTFDLFNBQVM7ZUFBQztnQkFDVCw4Q0FBOEM7Z0JBQzlDLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQ1Q7Z0JBQ0QsTUFBTSxFQUFFO29CQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBc0JBO2lCQUNGO2FBQ0Y7c0NBR0MsS0FBSztrQkFESixLQUFLO1lBR04sS0FBSztrQkFESixLQUFLO1lBR04sU0FBUztrQkFEUixLQUFLO1lBS0YsYUFBYTtrQkFEaEIsS0FBSztZQVNJLG1CQUFtQjtrQkFBNUIsTUFBTTtZQUlILE1BQU07a0JBRFQsS0FBSztZQVFJLFlBQVk7a0JBQXJCLE1BQU07WUFFRyxtQkFBbUI7a0JBQTVCLE1BQU07WUFHUCx1QkFBdUI7a0JBRHRCLEtBQUs7WUFHTixzQkFBc0I7a0JBRHJCLEtBQUs7WUFHTixrQkFBa0I7a0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEVkZ2VEZWZpbml0aW9uLCBMYXlvdXRPcHRpb25zLCBOb2RlRGVmaW5pdGlvbiwgU3R5bGVzaGVldCB9IGZyb20gJ2N5dG9zY2FwZSdcbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnY3l0b3NjYXBlLWdyYXBoLXRvb2xiYXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLWNvbnRhaW5lclwiXG4gICAgICAgICBbY2xhc3Mucm93LWxheW91dF09XCJkaXJlY3Rpb24gPT09ICdyb3cnXCJcbiAgICAgICAgIFtjbGFzcy5jb2x1bW4tbGF5b3V0XT1cImRpcmVjdGlvbiA9PT0gJ2NvbHVtbidcIj5cbiAgICAgIDxwLW92ZXJsYXlQYW5lbCAjbGF5b3V0VG9vbGJhcm92ZXJsYXlcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzbWlzc2FibGVdPVwidHJ1ZVwiIFtzaG93Q2xvc2VJY29uXT1cInRydWVcIlxuICAgICAgPlxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPlxuICAgICAgICAgIDxjeXRvc2NhcGUtbGF5b3V0LXRvb2wgWyhsYXlvdXRPcHRpb25zKV09XCJsYXlvdXRPcHRpb25zXCI+PC9jeXRvc2NhcGUtbGF5b3V0LXRvb2w+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L3Atb3ZlcmxheVBhbmVsPlxuICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd1Rvb2xiYXJCdXR0b25zXCJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7bGF5b3V0T3B0aW9ucy5uYW1lIHwgdGl0bGVjYXNlIH19IExheW91dFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm1heC1idXR0b24td2lkdGhdPVwiZGlyZWN0aW9uID09PSAnY29sdW1uJ1wiXG4gICAgICAgICAgICAgICAgcFRvb2x0aXA9XCJMYXlvdXQgU2V0dGluZ3MuLi5cIlxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1zbGlkZXJzLXZcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJsYXlvdXRUb29sYmFyb3ZlcmxheS50b2dnbGUoJGV2ZW50KVwiPjwvcC1idXR0b24+XG4gICAgICA8cC1vdmVybGF5UGFuZWwgI3N0eWxlVG9vbGJhcm92ZXJsYXkgW2Rpc21pc3NhYmxlXT1cInRydWVcIiBbc2hvd0Nsb3NlSWNvbl09XCJ0cnVlXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU+XG4gICAgICAgICAgPGN5dG9zY2FwZS1zdHlsZS10b29sXG4gICAgICAgICAgICBbKHN0eWxlcyldPVwic3R5bGVzXCJcbiAgICAgICAgICAgIChzdHlsZXNDaGFuZ2UpPVwib25TdHlsZXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc3R5bGVTZWxlY3RvckNoYW5nZSk9XCJvblN0eWxlU2VsZWN0b3JDaGFuZ2UoJGV2ZW50KVwiPjwvY3l0b3NjYXBlLXN0eWxlLXRvb2w+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L3Atb3ZlcmxheVBhbmVsPlxuICAgICAgPHAtYnV0dG9uICpuZ0lmPVwic2hvd1Rvb2xiYXJCdXR0b25zXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubWF4LWJ1dHRvbi13aWR0aF09XCJkaXJlY3Rpb24gPT09ICdjb2x1bW4nXCJcbiAgICAgICAgICAgICAgICBsYWJlbD1cIlN0eWxlXCJcbiAgICAgICAgICAgICAgICBwVG9vbHRpcD1cIlN0eWxpbmcuLi5cIlxuICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1wYWxldHRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3R5bGVUb29sYmFyb3ZlcmxheS50b2dnbGUoJGV2ZW50KVwiPlxuICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZ3JhcGgtZGF0YVwiICpuZ0lmPVwibm9kZXNcIj57e25vZGVzLmxlbmd0aH19IE5vZGVzICZuYnNwOzwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZ3JhcGgtZGF0YVwiICpuZ0lmPVwiZWRnZXNcIj57e2VkZ2VzLmxlbmd0aH19IEVkZ2VzPC9zcGFuPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICAgYFxuICAgICAgLnRvb2xiYXItY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cblxuICAgICAgLnJvdy1sYXlvdXQge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogNHB4O1xuICAgICAgfVxuXG4gICAgICAuY29sdW1uLWxheW91dCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIHBhZGRpbmctbGVmdDogNHB4O1xuICAgICAgfVxuXG4gICAgICBwLWJ1dHRvbiB7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDRweDtcbiAgICAgIH1cbiAgICBgXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEN5dG9zY2FwZUdyYXBoVG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIG5vZGVzOiBOb2RlRGVmaW5pdGlvbltdXG4gIEBJbnB1dCgpXG4gIGVkZ2VzOiBFZGdlRGVmaW5pdGlvbltdXG4gIEBJbnB1dCgpXG4gIGRpcmVjdGlvbjogJ2NvbHVtbicgfCAncm93JyA9ICdyb3cnXG5cbiAgI19sYXlvdXRPcHRpb25zOiBMYXlvdXRPcHRpb25zXG4gIEBJbnB1dCgpXG4gIGdldCBsYXlvdXRPcHRpb25zKCk6IExheW91dE9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLiNfbGF5b3V0T3B0aW9uc1xuICB9XG4gIHNldCBsYXlvdXRPcHRpb25zKHZhbHVlKSB7XG4gICAgY29uc29sZS5sb2coYEdyYXBoIHRvb2xiYXIgZ2V0cyBuZXcgbGF5b3V0IG9wdGlvbnMgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YClcbiAgICB0aGlzLiNfbGF5b3V0T3B0aW9ucyA9IHZhbHVlXG4gICAgdGhpcy5sYXlvdXRPcHRpb25zQ2hhbmdlLmVtaXQodGhpcy4jX2xheW91dE9wdGlvbnMpXG4gIH1cbiAgQE91dHB1dCgpIGxheW91dE9wdGlvbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxMYXlvdXRPcHRpb25zPiA9IG5ldyBFdmVudEVtaXR0ZXI8TGF5b3V0T3B0aW9ucz4oKVxuXG4gICNfc3R5bGVzOiBTdHlsZXNoZWV0W11cbiAgQElucHV0KClcbiAgZ2V0IHN0eWxlcygpOiBTdHlsZXNoZWV0W10ge1xuICAgIHJldHVybiB0aGlzLiNfc3R5bGVzXG4gIH1cbiAgc2V0IHN0eWxlcyhzdHlsZXM6IFN0eWxlc2hlZXRbXSkge1xuICAgIHRoaXMuI19zdHlsZXMgPSBzdHlsZXNcbiAgICB0aGlzLnN0eWxlc0NoYW5nZS5lbWl0KHRoaXMuI19zdHlsZXMpXG4gIH1cbiAgQE91dHB1dCgpIHN0eWxlc0NoYW5nZTogRXZlbnRFbWl0dGVyPFN0eWxlc2hlZXRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFN0eWxlc2hlZXRbXT4oKVxuXG4gIEBPdXRwdXQoKSBzdHlsZVNlbGVjdG9yQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpXG5cbiAgQElucHV0KClcbiAgc2hvd0xheW91dFRvb2xiYXJCdXR0b246IGJvb2xlYW5cbiAgQElucHV0KClcbiAgc2hvd1N0eWxlVG9vbGJhckJ1dHRvbjogYm9vbGVhblxuICBASW5wdXQoKVxuICBzaG93VG9vbGJhckJ1dHRvbnM6IGJvb2xlYW5cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgb25TdHlsZVNlbGVjdG9yQ2hhbmdlKHNlbGVjdG9yOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZyhgb25TdHlsZVNlbGVjdG9yQ2hhbmdlOiBzZWxlY3RvcmApXG4gICAgdGhpcy5zdHlsZVNlbGVjdG9yQ2hhbmdlLmVtaXQoc2VsZWN0b3IpXG4gIH1cblxuICBvblN0eWxlc0NoYW5nZShzdHlsZXNoZWV0OiBjeXRvc2NhcGUuU3R5bGVzaGVldFN0eWxlW10pIHtcbiAgICBjb25zb2xlLmxvZyhgb25TdHlsZXNDaGFuZ2VgKVxuICAgIHRoaXMuc3R5bGVzID0gc3R5bGVzaGVldFxuICB9XG59XG4iXX0=