fixa-admin 0.0.45 → 0.0.46

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.
@@ -0,0 +1,2 @@
1
+ export * from './pie.chart';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY2hhcnRzL2luZGV4LmFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcGllLmNoYXJ0JzsiXX0=
@@ -0,0 +1,112 @@
1
+ /* Imports */
2
+ import * as am5 from "@amcharts/amcharts5";
3
+ import * as am5percent from "@amcharts/amcharts5/percent";
4
+ import am5themes_Animated from "@amcharts/amcharts5/themes/Animated";
5
+ import { Component, Input } from '@angular/core';
6
+ import * as i0 from "@angular/core";
7
+ export class PieChart {
8
+ constructor() {
9
+ this.items = [];
10
+ this.label = '';
11
+ }
12
+ ngAfterViewInit() {
13
+ // Root
14
+ this.root = am5.Root.new('chartdiv');
15
+ this.root._logo.dispose();
16
+ // Theme
17
+ this.root.setThemes([am5themes_Animated.new(this.root)]);
18
+ this.root.container.set('layout', this.root.verticalLayout);
19
+ // Container for charts
20
+ let chartContainer = this.root.container.children.push(am5.Container.new(this.root, {
21
+ layout: this.root.verticalLayout,
22
+ width: 300,
23
+ height: 300
24
+ }));
25
+ // First chart
26
+ let chart = chartContainer.children.push(am5percent.PieChart.new(this.root, {
27
+ width: 300,
28
+ height: 300,
29
+ radius: am5.percent(90),
30
+ centerY: am5.percent(50),
31
+ y: am5.percent(50),
32
+ x: am5.percent(100),
33
+ innerRadius: am5.percent(60)
34
+ }));
35
+ let series = chart.series.push(am5percent.PieSeries.new(this.root, {
36
+ valueField: 'value',
37
+ categoryField: 'category',
38
+ alignLabels: false,
39
+ }));
40
+ series.children.push(am5.Label.new(this.root, {
41
+ centerX: am5.percent(50),
42
+ centerY: am5.percent(50),
43
+ text: "{valueSum} " + this.label,
44
+ populateText: true,
45
+ fontSize: "1.5em",
46
+ fontFamily: 'yekanBakh',
47
+ fontWeight: '600',
48
+ direction: 'rtl'
49
+ }));
50
+ series.get("colors").setAll({
51
+ step: 2
52
+ });
53
+ series.labels.template.setAll({ visible: false, fontFamily: 'yekanBakh' });
54
+ series.ticks.template.set("visible", false);
55
+ series.slices.template.setAll({
56
+ cornerRadius: 8,
57
+ strokeWidth: 5,
58
+ stroke: am5.color(0xffffff),
59
+ });
60
+ series.labels.template.setAll({ textType: 'aligned', fontFamily: 'yekanBakh' });
61
+ // Data
62
+ series.data.setAll(this.items);
63
+ // Legend
64
+ let legend = this.root.container.children.push(am5.Legend.new(this.root, {
65
+ y: am5.percent(50),
66
+ centerY: am5.percent(50),
67
+ layout: this.root.verticalLayout,
68
+ }));
69
+ legend.markerRectangles.template.setAll({
70
+ x: 250,
71
+ });
72
+ legend.labels.template.setAll({ fontFamily: 'yekanBakh', textAlign: 'right' });
73
+ legend.valueLabels.template.setAll({ textAlign: "right", fontFamily: 'yekanBakh' });
74
+ legend.labels.template.setAll({
75
+ maxWidth: 140,
76
+ width: 140,
77
+ oversizedBehavior: "wrap"
78
+ });
79
+ legend.data.setAll(series.dataItems);
80
+ series.appear(1000, 100);
81
+ }
82
+ getSlice(dataItem, series) {
83
+ let otherSlice;
84
+ am5.array.each(series.dataItems, (di) => {
85
+ if (di.get('category') === dataItem.get('category')) {
86
+ otherSlice = di.get('slice');
87
+ }
88
+ });
89
+ return otherSlice;
90
+ }
91
+ ngOnDestroy() {
92
+ if (this.root) {
93
+ this.root.dispose();
94
+ }
95
+ }
96
+ ngOnInit() {
97
+ }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PieChart, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PieChart, selector: "app-pie-chart", inputs: { items: "items", label: "label" }, ngImport: i0, template: '<div id="chartdiv" dir="ltr" style="width: 600px; height: 300px;"></div>', isInline: true }); }
100
+ }
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PieChart, decorators: [{
102
+ type: Component,
103
+ args: [{
104
+ selector: 'app-pie-chart',
105
+ template: '<div id="chartdiv" dir="ltr" style="width: 600px; height: 300px;"></div>',
106
+ }]
107
+ }], propDecorators: { items: [{
108
+ type: Input
109
+ }], label: [{
110
+ type: Input
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllLmNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY2hhcnRzL3BpZS5jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhO0FBQ2IsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQztBQUMzQyxPQUFPLEtBQUssVUFBVSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sa0JBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7O0FBTXpELE1BQU0sT0FBTyxRQUFRO0lBSnJCO1FBUUksVUFBSyxHQUEwQyxFQUFFLENBQUM7UUFHbEQsVUFBSyxHQUFXLEVBQUUsQ0FBQztLQTJHdEI7SUF6R0csZUFBZTtRQUNYLE9BQU87UUFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLFFBQVE7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU1RCx1QkFBdUI7UUFDdkIsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDbEQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN6QixNQUFNLEVBQUUsSUFB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Q0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtJQUVSLENBQUM7K0dBakhRLFFBQVE7bUdBQVIsUUFBUSxpR0FGUCwwRUFBMEU7OzRGQUUzRSxRQUFRO2tCQUpwQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsMEVBQTBFO2lCQUN2Rjs4QkFLRyxLQUFLO3NCQURKLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogSW1wb3J0cyAqL1xuaW1wb3J0ICogYXMgYW01IGZyb20gXCJAYW1jaGFydHMvYW1jaGFydHM1XCI7XG5pbXBvcnQgKiBhcyBhbTVwZXJjZW50IGZyb20gXCJAYW1jaGFydHMvYW1jaGFydHM1L3BlcmNlbnRcIjtcbmltcG9ydCBhbTV0aGVtZXNfQW5pbWF0ZWQgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czUvdGhlbWVzL0FuaW1hdGVkXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtcGllLWNoYXJ0JyxcbiAgICB0ZW1wbGF0ZTogJzxkaXYgaWQ9XCJjaGFydGRpdlwiIGRpcj1cImx0clwiIHN0eWxlPVwid2lkdGg6IDYwMHB4OyBoZWlnaHQ6IDMwMHB4O1wiPjwvZGl2PicsXG59KVxuZXhwb3J0IGNsYXNzIFBpZUNoYXJ0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHJvb3QhOiBhbTUuUm9vdDtcblxuICAgIEBJbnB1dCgpXG4gICAgaXRlbXM6IHsgY2F0ZWdvcnk6IHN0cmluZywgdmFsdWU6IG51bWJlciB9W10gPSBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZyA9ICcnO1xuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBSb290XG4gICAgICAgIHRoaXMucm9vdCA9IGFtNS5Sb290Lm5ldygnY2hhcnRkaXYnKTtcbiAgICAgICAgdGhpcy5yb290Ll9sb2dvLmRpc3Bvc2UoKTtcbiAgICAgICAgLy8gVGhlbWVcbiAgICAgICAgdGhpcy5yb290LnNldFRoZW1lcyhbYW01dGhlbWVzX0FuaW1hdGVkLm5ldyh0aGlzLnJvb3QpXSk7XG5cbiAgICAgICAgdGhpcy5yb290LmNvbnRhaW5lci5zZXQoJ2xheW91dCcsIHRoaXMucm9vdC52ZXJ0aWNhbExheW91dCk7XG5cbiAgICAgICAgLy8gQ29udGFpbmVyIGZvciBjaGFydHNcbiAgICAgICAgbGV0IGNoYXJ0Q29udGFpbmVyID0gdGhpcy5yb290LmNvbnRhaW5lci5jaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgYW01LkNvbnRhaW5lci5uZXcodGhpcy5yb290LCB7XG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLnJvb3QudmVydGljYWxMYXlvdXQsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDMwMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMwMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBGaXJzdCBjaGFydFxuICAgICAgICBsZXQgY2hhcnQgPSBjaGFydENvbnRhaW5lci5jaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgYW01cGVyY2VudC5QaWVDaGFydC5uZXcodGhpcy5yb290LCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDMwMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDMwMCxcbiAgICAgICAgICAgICAgICByYWRpdXM6IGFtNS5wZXJjZW50KDkwKSxcbiAgICAgICAgICAgICAgICBjZW50ZXJZOiBhbTUucGVyY2VudCg1MCksXG4gICAgICAgICAgICAgICAgeTogYW01LnBlcmNlbnQoNTApLFxuICAgICAgICAgICAgICAgIHg6IGFtNS5wZXJjZW50KDEwMCksXG4gICAgICAgICAgICAgICAgaW5uZXJSYWRpdXM6IGFtNS5wZXJjZW50KDYwKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgc2VyaWVzID0gY2hhcnQuc2VyaWVzLnB1c2goXG4gICAgICAgICAgICBhbTVwZXJjZW50LlBpZVNlcmllcy5uZXcodGhpcy5yb290LCB7XG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICBjYXRlZ29yeUZpZWxkOiAnY2F0ZWdvcnknLFxuICAgICAgICAgICAgICAgIGFsaWduTGFiZWxzOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHNlcmllcy5jaGlsZHJlbi5wdXNoKGFtNS5MYWJlbC5uZXcodGhpcy5yb290LCB7XG4gICAgICAgICAgICBjZW50ZXJYOiBhbTUucGVyY2VudCg1MCksXG4gICAgICAgICAgICBjZW50ZXJZOiBhbTUucGVyY2VudCg1MCksXG4gICAgICAgICAgICB0ZXh0OiBcInt2YWx1ZVN1bX0gXCIgKyB0aGlzLmxhYmVsLFxuICAgICAgICAgICAgcG9wdWxhdGVUZXh0OiB0cnVlLFxuICAgICAgICAgICAgZm9udFNpemU6IFwiMS41ZW1cIixcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6ICd5ZWthbkJha2gnLFxuICAgICAgICAgICAgZm9udFdlaWdodDogJzYwMCcsXG4gICAgICAgICAgICBkaXJlY3Rpb246ICdydGwnXG4gICAgICAgIH0pKTtcbiAgICAgICAgc2VyaWVzLmdldChcImNvbG9yc1wiKS5zZXRBbGwoe1xuICAgICAgICAgICAgc3RlcDogMlxuICAgICAgICB9KTtcbiAgICAgICAgc2VyaWVzLmxhYmVscy50ZW1wbGF0ZS5zZXRBbGwoeyB2aXNpYmxlOiBmYWxzZSwgZm9udEZhbWlseTogJ3lla2FuQmFraCcgfSk7XG4gICAgICAgIHNlcmllcy50aWNrcy50ZW1wbGF0ZS5zZXQoXCJ2aXNpYmxlXCIsIGZhbHNlKTtcbiAgICAgICAgc2VyaWVzLnNsaWNlcy50ZW1wbGF0ZS5zZXRBbGwoe1xuICAgICAgICAgICAgY29ybmVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDUsXG4gICAgICAgICAgICBzdHJva2U6IGFtNS5jb2xvcigweGZmZmZmZiksXG4gICAgICAgIH0pO1xuICAgICAgICBzZXJpZXMubGFiZWxzLnRlbXBsYXRlLnNldEFsbCh7IHRleHRUeXBlOiAnYWxpZ25lZCcsIGZvbnRGYW1pbHk6ICd5ZWthbkJha2gnIH0pO1xuXG4gICAgICAgIC8vIERhdGFcbiAgICAgICAgc2VyaWVzLmRhdGEuc2V0QWxsKHRoaXMuaXRlbXMpO1xuXG4gICAgICAgIC8vIExlZ2VuZFxuICAgICAgICBsZXQgbGVnZW5kID0gdGhpcy5yb290LmNvbnRhaW5lci5jaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgYW01LkxlZ2VuZC5uZXcodGhpcy5yb290LCB7XG4gICAgICAgICAgICAgICAgeTogYW01LnBlcmNlbnQoNTApLFxuICAgICAgICAgICAgICAgIGNlbnRlclk6IGFtNS5wZXJjZW50KDUwKSxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IHRoaXMucm9vdC52ZXJ0aWNhbExheW91dCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIGxlZ2VuZC5tYXJrZXJSZWN0YW5nbGVzLnRlbXBsYXRlLnNldEFsbCh7XG4gICAgICAgICAgICB4OiAyNTAsXG4gICAgICAgIH0pO1xuICAgICAgICBsZWdlbmQubGFiZWxzLnRlbXBsYXRlLnNldEFsbCh7IGZvbnRGYW1pbHk6ICd5ZWthbkJha2gnLCB0ZXh0QWxpZ246ICdyaWdodCcgfSk7XG4gICAgICAgIGxlZ2VuZC52YWx1ZUxhYmVscy50ZW1wbGF0ZS5zZXRBbGwoeyB0ZXh0QWxpZ246IFwicmlnaHRcIiwgZm9udEZhbWlseTogJ3lla2FuQmFraCcgfSk7XG4gICAgICAgIGxlZ2VuZC5sYWJlbHMudGVtcGxhdGUuc2V0QWxsKHtcbiAgICAgICAgICAgIG1heFdpZHRoOiAxNDAsXG4gICAgICAgICAgICB3aWR0aDogMTQwLFxuICAgICAgICAgICAgb3ZlcnNpemVkQmVoYXZpb3I6IFwid3JhcFwiXG4gICAgICAgIH0pO1xuICAgICAgICBsZWdlbmQuZGF0YS5zZXRBbGwoc2VyaWVzLmRhdGFJdGVtcyk7XG5cbiAgICAgICAgc2VyaWVzLmFwcGVhcigxMDAwLCAxMDApO1xuICAgIH1cblxuICAgIGdldFNsaWNlKGRhdGFJdGVtOiBhbTUuRGF0YUl0ZW08YW55Piwgc2VyaWVzOiBhbTVwZXJjZW50LlBpZVNlcmllcykge1xuICAgICAgICBsZXQgb3RoZXJTbGljZTogYW55O1xuICAgICAgICBhbTUuYXJyYXkuZWFjaChzZXJpZXMuZGF0YUl0ZW1zLCAoZGkpID0+IHtcbiAgICAgICAgICAgIGlmIChkaS5nZXQoJ2NhdGVnb3J5JykgPT09IGRhdGFJdGVtLmdldCgnY2F0ZWdvcnknKSkge1xuICAgICAgICAgICAgICAgIG90aGVyU2xpY2UgPSBkaS5nZXQoJ3NsaWNlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3RoZXJTbGljZTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICAgICAgdGhpcy5yb290LmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgfVxufSJdfQ==
@@ -17,6 +17,9 @@ export class GridComponent {
17
17
  this.getServerSideGroupKey = null;
18
18
  this.groupDefaultExpanded = -1;
19
19
  this._treeGroupColumn = null;
20
+ this._rowSelection = {
21
+ mode: 'singleRow'
22
+ };
20
23
  this.themeClass = "ag-theme-quartz";
21
24
  this.columnDefs = [];
22
25
  this._column = [];
@@ -43,6 +46,7 @@ export class GridComponent {
43
46
  this.onAction = new EventEmitter();
44
47
  this.onToolbar = new EventEmitter();
45
48
  this.onClicked = new EventEmitter();
49
+ this.rowSelectionChange = new EventEmitter();
46
50
  this.actionWidth = 100;
47
51
  this.label = null;
48
52
  this.rowModelType = 'serverSide';
@@ -85,6 +89,22 @@ export class GridComponent {
85
89
  ];
86
90
  this.datasource = this.createServerSideDatasource();
87
91
  }
92
+ set isRowSelection(v) {
93
+ if (v) {
94
+ this._rowSelection = {
95
+ mode: 'multiRow',
96
+ };
97
+ }
98
+ }
99
+ test(e) {
100
+ const items = [];
101
+ e.api.forEachNode((el) => {
102
+ if (el.isSelected()) {
103
+ items.push(el.data);
104
+ }
105
+ });
106
+ this.rowSelectionChange.emit(items);
107
+ }
88
108
  get autoColumnSize() {
89
109
  return this._autoColumnSize;
90
110
  }
@@ -548,21 +568,25 @@ export class GridComponent {
548
568
  }
549
569
  ngOnInit() { }
550
570
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GridComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
551
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: GridComponent, selector: "app-grid", inputs: { actionWidth: "actionWidth", label: "label", rowModelType: "rowModelType", serverSideSort: "serverSideSort", serverSideFilter: "serverSideFilter", isToolbar: "isToolbar", rtl: "rtl", paginationPageSize: "paginationPageSize", paginationPageSizeSelector: "paginationPageSizeSelector", enableAdvancedFilter: "enableAdvancedFilter", treeModel: "treeModel", isLeaf: "isLeaf", rowData: "rowData", autoColumnSize: "autoColumnSize", showAdvancedButton: "showAdvancedButton", actionItems: "actionItems", toolbarItems: "toolbarItems", treeGroupColumn: "treeGroupColumn", fetchData: "fetchData", column: "column" }, outputs: { onAction: "onAction", onToolbar: "onToolbar", onClicked: "onClicked" }, ngImport: i0, template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div class=\"flex justify-between items-center mb-4 pb-4 border-b border-b-slate-200\" *ngIf=\"isToolbar\">\n <div>\n <h4 class=\"font-semibold text-2xl\">{{label}}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button nz-button [nzLoading]=\"item.loading ? item.loading : false\" (click)=\"handleClick(item)\"\n [nzType]=\"item.type\">\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{item.text}}\n </button>\n }\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <button nz-button (click)=\"clearFilter()\" nzType=\"default\">\n <span nz-icon nzType=\"clear\"></span>\n \u067E\u0627\u06A9\u0633\u0627\u0632\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<div>\n <ng-content></ng-content>\n</div>\n<ag-grid-angular style=\"width: 100%;\" [style]=\"(isToolbar) ? 'height: calc(100% - 1rem - 48px);':'height: 100%;'\"\n [columnDefs]=\"columnDefs\" [pagination]=\"true\" [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\" [class]=\"themeClass\" [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\" [enableRtl]=\"rtl\" [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\" [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\" [rowModelType]=\"rowModelType\" [rowData]=\"rowData\" [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\" [cacheBlockSize]=\"paginationPageSize\" [maxBlocksInCache]=\"2\"\n [context]=\"{actionItems: actionItems}\" (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\" #grid />", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "directive", type: i4.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i5.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i6.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i7.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }] }); }
571
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: GridComponent, selector: "app-grid", inputs: { actionWidth: "actionWidth", label: "label", isRowSelection: "isRowSelection", rowModelType: "rowModelType", serverSideSort: "serverSideSort", serverSideFilter: "serverSideFilter", isToolbar: "isToolbar", rtl: "rtl", paginationPageSize: "paginationPageSize", paginationPageSizeSelector: "paginationPageSizeSelector", enableAdvancedFilter: "enableAdvancedFilter", treeModel: "treeModel", isLeaf: "isLeaf", rowData: "rowData", autoColumnSize: "autoColumnSize", showAdvancedButton: "showAdvancedButton", actionItems: "actionItems", toolbarItems: "toolbarItems", treeGroupColumn: "treeGroupColumn", fetchData: "fetchData", column: "column" }, outputs: { onAction: "onAction", onToolbar: "onToolbar", onClicked: "onClicked", rowSelectionChange: "rowSelectionChange" }, ngImport: i0, template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div\n class=\"flex justify-between items-center mb-4 pb-4 border-b border-b-slate-200\"\n *ngIf=\"isToolbar\"\n>\n <div>\n <h4 class=\"font-semibold text-2xl\">{{ label }}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button\n nz-button\n [nzLoading]=\"item.loading ? item.loading : false\"\n (click)=\"handleClick(item)\"\n [nzType]=\"item.type\"\n >\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{ item.text }}\n </button>\n }\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <button nz-button (click)=\"clearFilter()\" nzType=\"default\">\n <span nz-icon nzType=\"clear\"></span>\n \u067E\u0627\u06A9\u0633\u0627\u0632\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<div>\n <ng-content></ng-content>\n</div>\n<ag-grid-angular\n style=\"width: 100%\"\n [style]=\"isToolbar ? 'height: calc(100% - 1rem - 48px);' : 'height: 100%;'\"\n [columnDefs]=\"columnDefs\"\n [pagination]=\"true\"\n [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\n [class]=\"themeClass\"\n [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\"\n [enableRtl]=\"rtl\"\n [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [rowModelType]=\"rowModelType\"\n [rowData]=\"rowData\"\n [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\"\n [cacheBlockSize]=\"paginationPageSize\"\n [maxBlocksInCache]=\"2\"\n [context]=\"{ actionItems: actionItems }\"\n (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\"\n [rowSelection]=\"_rowSelection\"\n (selectionChanged)=\"test($event)\"\n #grid\n/>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "directive", type: i4.NzIconDirective, selector: "[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "component", type: i5.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i6.ɵNzTransitionPatchDirective, selector: "[nz-button], nz-button-group, [nz-icon], [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i7.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }] }); }
552
572
  }
553
573
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GridComponent, decorators: [{
554
574
  type: Component,
555
- args: [{ selector: 'app-grid', template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div class=\"flex justify-between items-center mb-4 pb-4 border-b border-b-slate-200\" *ngIf=\"isToolbar\">\n <div>\n <h4 class=\"font-semibold text-2xl\">{{label}}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button nz-button [nzLoading]=\"item.loading ? item.loading : false\" (click)=\"handleClick(item)\"\n [nzType]=\"item.type\">\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{item.text}}\n </button>\n }\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <button nz-button (click)=\"clearFilter()\" nzType=\"default\">\n <span nz-icon nzType=\"clear\"></span>\n \u067E\u0627\u06A9\u0633\u0627\u0632\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<div>\n <ng-content></ng-content>\n</div>\n<ag-grid-angular style=\"width: 100%;\" [style]=\"(isToolbar) ? 'height: calc(100% - 1rem - 48px);':'height: 100%;'\"\n [columnDefs]=\"columnDefs\" [pagination]=\"true\" [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\" [class]=\"themeClass\" [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\" [enableRtl]=\"rtl\" [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\" [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\" [rowModelType]=\"rowModelType\" [rowData]=\"rowData\" [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\" [cacheBlockSize]=\"paginationPageSize\" [maxBlocksInCache]=\"2\"\n [context]=\"{actionItems: actionItems}\" (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\" #grid />" }]
575
+ args: [{ selector: 'app-grid', template: "<!-- <button (click)=\"enableAdvancedFilter=!enableAdvancedFilter\">advanced</button> -->\n<div\n class=\"flex justify-between items-center mb-4 pb-4 border-b border-b-slate-200\"\n *ngIf=\"isToolbar\"\n>\n <div>\n <h4 class=\"font-semibold text-2xl\">{{ label }}</h4>\n </div>\n <div class=\"flex gap-3\">\n @for (item of toolbarItems; track $index) {\n <button\n nz-button\n [nzLoading]=\"item.loading ? item.loading : false\"\n (click)=\"handleClick(item)\"\n [nzType]=\"item.type\"\n >\n <span nz-icon [nzType]=\"item.icon\"></span>\n {{ item.text }}\n </button>\n }\n <button nz-button (click)=\"refresh()\" nzType=\"default\">\n <span nz-icon nzType=\"sync\"></span>\n \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC\n </button>\n <button nz-button (click)=\"clearFilter()\" nzType=\"default\">\n <span nz-icon nzType=\"clear\"></span>\n \u067E\u0627\u06A9\u0633\u0627\u0632\u06CC\n </button>\n <!-- <button nz-button (click)=\"advancedFilter()\" *ngIf=\"showAdvancedButton\" nzType=\"default\">\n <span nz-icon nzType=\"filter\"></span>\n \u062C\u0633\u062A\u062C\u0648\u06CC \u067E\u06CC\u0634\u0631\u0641\u062A\u0647\n </button> -->\n </div>\n</div>\n<div>\n <ng-content></ng-content>\n</div>\n<ag-grid-angular\n style=\"width: 100%\"\n [style]=\"isToolbar ? 'height: calc(100% - 1rem - 48px);' : 'height: 100%;'\"\n [columnDefs]=\"columnDefs\"\n [pagination]=\"true\"\n [paginationPageSize]=\"paginationPageSize\"\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\"\n [class]=\"themeClass\"\n [defaultColDef]=\"defaultColDef\"\n [enableAdvancedFilter]=\"enableAdvancedFilter\"\n [enableRtl]=\"rtl\"\n [treeData]=\"treeModel\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [rowModelType]=\"rowModelType\"\n [rowData]=\"rowData\"\n [serverSideDatasource]=\"datasource\"\n (gridReady)=\"onGridReady($event)\"\n [cacheBlockSize]=\"paginationPageSize\"\n [maxBlocksInCache]=\"2\"\n [context]=\"{ actionItems: actionItems }\"\n (cellDoubleClicked)=\"cellDoubleClicked($event)\"\n [autoSizeStrategy]=\"_autoColumnSize\"\n [rowSelection]=\"_rowSelection\"\n (selectionChanged)=\"test($event)\"\n #grid\n/>\n" }]
556
576
  }], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { onAction: [{
557
577
  type: Output
558
578
  }], onToolbar: [{
559
579
  type: Output
560
580
  }], onClicked: [{
561
581
  type: Output
582
+ }], rowSelectionChange: [{
583
+ type: Output
562
584
  }], actionWidth: [{
563
585
  type: Input
564
586
  }], label: [{
565
587
  type: Input
588
+ }], isRowSelection: [{
589
+ type: Input
566
590
  }], rowModelType: [{
567
591
  type: Input
568
592
  }], serverSideSort: [{
@@ -600,4 +624,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
600
624
  }], column: [{
601
625
  type: Input
602
626
  }] } });
603
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBeUUsY0FBYyxFQUErRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9NLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7QUFpQmhELE1BQU0sT0FBTyxhQUFhO0lBQ3RCLFlBQ1ksVUFBNEI7UUFBNUIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFNakMsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLHlCQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLHFCQUFnQixHQUFXLElBQUksQ0FBQztRQUV4QyxlQUFVLEdBQVcsaUJBQWlCLENBQUM7UUFDdkMsZUFBVSxHQUFhLEVBQUUsQ0FBQztRQUMxQixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUM1QixvQkFBZSxHQUF3RyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUNoSix1QkFBa0IsR0FBVztZQUN6QixVQUFVLEVBQUUsRUFBRTtZQUNkLFFBQVEsRUFBRSxHQUFHO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixrQkFBa0IsRUFBRTtnQkFDaEIsYUFBYSxFQUFFLElB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QUFVO3FCQUM1QixDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtvQkFDVixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsUUFBUSxLQUFXLENBQUM7K0dBcGtCWCxhQUFhO21HQUFiLGFBQWEseXVCQ3ZCMUIseXdFQXNDaUQ7OzRGRGZwQyxhQUFhO2tCQUp6QixTQUFTOytCQUNJLFVBQVU7cUZBMENwQixRQUFRO3NCQURQLE1BQU07Z0JBSVAsU0FBUztzQkFEUixNQUFNO2dCQUlQLFNBQVM7c0JBRFIsTUFBTTtnQkFJUCxXQUFXO3NCQURWLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLEdBQUc7c0JBREYsS0FBSztnQkFJTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sMEJBQTBCO3NCQUR6QixLQUFLO2dCQUlOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJSyxjQUFjO3NCQUR4QixLQUFLO2dCQWFOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBZU4sWUFBWTtzQkFEWCxLQUFLO2dCQWlCSyxlQUFlO3NCQUR6QixLQUFLO2dCQXlCTixTQUFTO3NCQURSLEtBQUs7Z0JBSUssTUFBTTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENlbGxEb3VibGVDbGlja2VkRXZlbnQsIENvbERlZiwgR3JpZEFwaSwgR3JpZE9wdGlvbnMsIElEYXRlRmlsdGVyUGFyYW1zLCBJUm93Tm9kZSwgSVNlcnZlclNpZGVEYXRhc291cmNlLCBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMsIFJvd01vZGVsVHlwZSwgU2V0RmlsdGVyVmFsdWVzRnVuY1BhcmFtcywgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdEdyaWRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFjdGlvbkl0ZW1zLCBDb2x1bW5JdGVtcywgRGF0YXNvdXJjZU91dHB1dE1vZGVsLCBGaWx0ZXJHcmlkSXRlbXNNb2RlbCwgRmlsdGVyT3BlcmF0b3IsIEdyaWRBY3Rpb25PdXRwdXQsIEdyaWRJbnB1dE1vZGVsLCBHcmlkUmVxdWVzdFBhcmFtLCBTb3J0TW9kZWwsIFRvb2xiYXJJdGVtcyB9IGZyb20gJy4uLy4uL21vZGVscy9zaGFyZWQubW9kZWwnO1xuaW1wb3J0IHsgQWN0aW9uc0NlbGxSZW5kZXJlciB9IGZyb20gJy4uL2luZGV4LmFwaSc7XG5pbXBvcnQgeyBKRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlciB9IGZyb20gJy4vZmlsdGVyL2luZGV4LmFwaSc7XG5leHBvcnQgaW50ZXJmYWNlIElPbHltcGljRGF0YSB7XG4gICAgYXRobGV0ZTogc3RyaW5nLFxuICAgIGFnZTogbnVtYmVyLFxuICAgIGNvdW50cnk6IHN0cmluZyxcbiAgICB5ZWFyOiBudW1iZXIsXG4gICAgZGF0ZTogc3RyaW5nLFxuICAgIHNwb3J0OiBzdHJpbmcsXG4gICAgZ29sZDogbnVtYmVyLFxuICAgIHNpbHZlcjogbnVtYmVyLFxuICAgIGJyb256ZTogbnVtYmVyLFxuICAgIHRvdGFsOiBudW1iZXJcbn1cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSB0aGlzLmNyZWF0ZVNlcnZlclNpZGVEYXRhc291cmNlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgZ3JpZEFwaSE6IEdyaWRBcGk7XG4gICAgcHVibGljIGlzU2VydmVyU2lkZUdyb3VwO1xuICAgIHB1YmxpYyBnZXRTZXJ2ZXJTaWRlR3JvdXBLZXkgPSBudWxsO1xuICAgIHB1YmxpYyBncm91cERlZmF1bHRFeHBhbmRlZCA9IC0xO1xuICAgIHByaXZhdGUgX3RyZWVHcm91cENvbHVtbjogc3RyaW5nID0gbnVsbDtcbiAgICBkYXRhc291cmNlOiBJU2VydmVyU2lkZURhdGFzb3VyY2U7XG4gICAgdGhlbWVDbGFzczogc3RyaW5nID0gXCJhZy10aGVtZS1xdWFydHpcIjtcbiAgICBjb2x1bW5EZWZzOiBDb2xEZWZbXSA9IFtdO1xuICAgIF9jb2x1bW46IENvbHVtbkl0ZW1zW10gPSBbXTtcbiAgICBfYXV0b0NvbHVtblNpemU6IFNpemVDb2x1bW5zVG9GaXRHcmlkU3RyYXRlZ3kgfCBTaXplQ29sdW1uc1RvRml0UHJvdmlkZWRXaWR0aFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSA9IHsgdHlwZTogJ2ZpdEdyaWRXaWR0aCcgfTtcbiAgICBhdXRvR3JvdXBDb2x1bW5EZWY6IENvbERlZiA9IHtcbiAgICAgICAgaGVhZGVyTmFtZTogXCJcIixcbiAgICAgICAgbWluV2lkdGg6IDI1MCxcbiAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHtcbiAgICAgICAgICAgIHN1cHByZXNzQ291bnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlclBhcmFtczoge1xuICAgICAgICAgICAgbWF4TnVtQ29uZGl0aW9uczogMVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcbiAgICAgICAgZmxleDogMSxcbiAgICAgICAgbWluV2lkdGg6IDE1MCxcbiAgICAgICAgZmlsdGVyOiAnYWdUZXh0Q29sdW1uRmlsdGVyJyxcbiAgICAgICAgc3VwcHJlc3NIZWFkZXJNZW51QnV0dG9uOiB0cnVlLFxuICAgICAgICBzdXBwcmVzc0hlYWRlckNvbnRleHRNZW51OiB0cnVlLFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZVxuICAgIH07XG5cblxuICAgIEBPdXRwdXQoKVxuICAgIG9uQWN0aW9uOiBFdmVudEVtaXR0ZXI8R3JpZEFjdGlvbk91dHB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBvblRvb2xiYXI6IEV2ZW50RW1pdHRlcjxUb29sYmFySXRlbXM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgb25DbGlja2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uV2lkdGg6IG51bWJlciA9IDEwMDtcblxuICAgIEBJbnB1dCgpXG4gICAgbGFiZWw6IHN0cmluZyA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIHJvd01vZGVsVHlwZTogUm93TW9kZWxUeXBlID0gJ3NlcnZlclNpZGUnO1xuXG4gICAgQElucHV0KClcbiAgICBzZXJ2ZXJTaWRlU29ydDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHNlcnZlclNpZGVGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBpc1Rvb2xiYXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBydGw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwYWdpbmF0aW9uUGFnZVNpemUgPSAyNTtcblxuICAgIEBJbnB1dCgpXG4gICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IG51bWJlcltdIHwgYm9vbGVhbiA9IFsyNV07XG5cbiAgICBASW5wdXQoKVxuICAgIGVuYWJsZUFkdmFuY2VkRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHRyZWVNb2RlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBpc0xlYWY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcm93RGF0YTogYW55ID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhdXRvQ29sdW1uU2l6ZSgpOiBTaXplQ29sdW1uc1RvRml0R3JpZFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB8IFNpemVDb2x1bW5zVG9Db250ZW50U3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b0NvbHVtblNpemU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgYXV0b0NvbHVtblNpemUodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgdGhpcy5fYXV0b0NvbHVtblNpemUgPSB7IHR5cGU6ICdmaXRDZWxsQ29udGVudHMnIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvQ29sdW1uU2l6ZSA9IHsgdHlwZTogJ2ZpdEdyaWRXaWR0aCcgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd0FkdmFuY2VkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1zW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdlZGl0JyxcbiAgICAgICAgICAgIGljb246ICdmYS1saWdodCBmYS1wZW4nLFxuICAgICAgICAgICAgYWx0OiAn2YjbjNix2KfbjNi0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnZGVsZXRlJyxcbiAgICAgICAgICAgIGljb246ICdmYS1saWdodCBmYS10cmFzaCcsXG4gICAgICAgICAgICBhbHQ6ICfYrdiw2YEnXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgQElucHV0KClcbiAgICB0b29sYmFySXRlbXM6IFRvb2xiYXJJdGVtc1tdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnaW5zZXJ0JyxcbiAgICAgICAgICAgIGljb246ICdwbHVzJyxcbiAgICAgICAgICAgIHRleHQ6ICfYp9uM2KzYp9ivINix2K/bjNmBINis2K/bjNivJyxcbiAgICAgICAgICAgIHR5cGU6ICdwcmltYXJ5J1xuICAgICAgICB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBjb2RlOiAncmVmcmVzaCcsXG4gICAgICAgIC8vICAgICBpY29uOiAnc3luYycsXG4gICAgICAgIC8vICAgICB0ZXh0OiAn2KjYsdmI2LLYsdiz2KfZhtuMJyxcbiAgICAgICAgLy8gICAgIHR5cGU6ICdkZWZhdWx0J1xuICAgICAgICAvLyB9XG4gICAgXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0cmVlR3JvdXBDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVHcm91cENvbHVtbjtcbiAgICB9XG4gICAgcHVibGljIHNldCB0cmVlR3JvdXBDb2x1bW4odjogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLl90cmVlR3JvdXBDb2x1bW4gPSB2O1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVHcm91cCA9IGRhdGFJdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xlYWYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhSXRlbS5sYXN0Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhSXRlbVt2XTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFJdGVtW3ZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmdldFNlcnZlclNpZGVHcm91cEtleSA9IGRhdGFJdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUl0ZW1bdl07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYuaGVhZGVyTmFtZSA9IHY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGZldGNoRGF0YTogKGZpbHRlckdyaWQ6IEdyaWRJbnB1dE1vZGVsLCByZXF1ZXN0UGFyYW1zOiBHcmlkUmVxdWVzdFBhcmFtKSA9PiBQcm9taXNlPERhdGFzb3VyY2VPdXRwdXRNb2RlbD47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHY6IENvbHVtbkl0ZW1zW10pIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzID0gW107XG4gICAgICAgIGlmICh2ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbiA9IHY7XG4gICAgICAgICAgICB2LmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbHRlcjogYW55ID0gJ2FnVGV4dENvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgdmFyIHNvcnRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsdGVyUGFyYW1zOiBJRGF0ZUZpbHRlclBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWF4TnVtQ29uZGl0aW9uczogMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1wdHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdZRVMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZklucHV0czogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5S2V5OiAnZmFsc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ05PJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGVsLmZpbHRlckl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IGVsLmZpbHRlckl0ZW1zW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGVsLmZpbHRlckl0ZW1zW3Byb3BlcnR5XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbXB0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdTZXRDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ0RhdGVDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWwuZmlsdGVyICE9IHVuZGVmaW5lZCAmJiAhZWwuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWwuc29ydGFibGUgIT0gdW5kZWZpbmVkICYmICFlbC5zb3J0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWwuZmllbGQgIT0gdGhpcy5fdHJlZUdyb3VwQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnYWctYm9vbGVhbi1jZWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZSA/ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBzdHJva2U9XCJncmVlblwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImZlYXRoZXIgZmVhdGhlci1jaGVja1wiPjxwYXRoIGQ9XCJNMjAgNkw5IDE3TDQgMTJcIi8+PC9zdmc+JyA6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBzdHJva2U9XCJyZWRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgY2xhc3M9XCJmZWF0aGVyIGZlYXRoZXIteFwiPjxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCIgLz48bGluZSB4MT1cIjZcIiB5MT1cIjZcIiB4Mj1cIjE4XCIgeTI9XCIxOFwiIC8+PC9zdmc+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdlbnVtJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHBhcmFtcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IERhdGVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpEYXRlUGlwZSgpLnRyYW5zZm9ybShwYXJhbXMudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2RhdGUtdGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IERhdGVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpEYXRlUGlwZSgpLnRyYW5zZm9ybShwYXJhbXMudmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ3ByaWNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiA4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGltZyBjbGFzcz1cInJvdW5kZWQtZnVsbCBtdC0xXCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgc3JjPVwiJHtwYXJhbXMudmFsdWV9XCIvPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmLmZpZWxkID0gZWwuZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IHRoaXMuYWN0aW9uV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGlubmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogQWN0aW9uc0NlbGxSZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAocGFyYW1zOiBHcmlkQWN0aW9uT3V0cHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFjdGlvbi5lbWl0KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2VsbERvdWJsZUNsaWNrZWQoZTogQ2VsbERvdWJsZUNsaWNrZWRFdmVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrZWQuZW1pdCh7IC4uLmUuZGF0YSwgY29sSWQ6IGUuY29sdW1uLmdldENvbElkKCkgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soaXRlbTogVG9vbGJhckl0ZW1zKSB7XG4gICAgICAgIHRoaXMub25Ub29sYmFyLmVtaXQoaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2gocHVyZ2UgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5yb3dNb2RlbFR5cGUgPT0gJ3NlcnZlclNpZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaFNlcnZlclNpZGUoeyBwdXJnZSB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaENlbGxzKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbignY29sdW1uRGVmcycsIHRoaXMuY29sdW1uRGVmcyk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbignbG9hZGluZycsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEobnVsbCwgbnVsbCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0RhdGEgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKCdsb2FkaW5nJywgZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkdyaWRSZWFkeShwYXJhbXM6IGFueSkge1xuICAgICAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xuICAgICAgICBpZiAodGhpcy5yb3dNb2RlbFR5cGUgPT0gJ2NsaWVudFNpZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YShudWxsLCBudWxsKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93RGF0YSA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZhaWwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWR2YW5jZWRGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlQWR2YW5jZWRGaWx0ZXIgPSAhdGhpcy5lbmFibGVBZHZhbmNlZEZpbHRlcjtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2hvd0FkdmFuY2VkRmlsdGVyQnVpbGRlcigpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FnLWljb24tbWF4aW1pemUnKVswXSBhcyBIVE1MRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJvdXRlVG9Ob2RlKHJvd05vZGU6IElSb3dOb2RlKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoIXJvd05vZGUucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0Um91dGVUb05vZGUocm93Tm9kZS5wYXJlbnQpLFxuICAgICAgICAgICAgcm93Tm9kZS5rZXkgPyByb3dOb2RlLmtleSA6IHJvd05vZGUuZGF0YS5lbXBsb3llZU5hbWUsXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcmVmcmVzaE5vZGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRBcGkuZ2V0Um93Tm9kZShpZCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRSb3V0ZVRvTm9kZShzZWxlY3RlZFJvd3MpO1xuICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaFNlcnZlclNpZGUoe1xuICAgICAgICAgICAgcHVyZ2U6IHRydWUsXG4gICAgICAgICAgICByb3V0ZTogcm91dGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChudWxsKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaFBhcmVudE5vZGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRBcGkuZ2V0Um93Tm9kZShpZCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRSb3V0ZVRvTm9kZShzZWxlY3RlZFJvd3MucGFyZW50KTtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hTZXJ2ZXJTaWRlKHtcbiAgICAgICAgICAgIHB1cmdlOiB0cnVlLFxuICAgICAgICAgICAgcm91dGU6IHJvdXRlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVNlcnZlclNpZGVEYXRhc291cmNlKCk6IElTZXJ2ZXJTaWRlRGF0YXNvdXJjZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXRSb3dzOiAocGFyYW1zOiBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyOiBGaWx0ZXJHcmlkSXRlbXNNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyVHlwZSA9PSAnY3VzdG9tLWRhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZUZyb20gJiYgcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBrZXkgPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicgPyB0aGlzLl90cmVlR3JvdXBDb2x1bW4gOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuYmV0d2VlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSwgcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG9dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGtleSA9PSAnYWctR3JpZC1BdXRvQ29sdW1uJyA/IHRoaXMuX3RyZWVHcm91cENvbHVtbiA6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci50cnVuY0dyZWF0ZXJUaGFuRXF1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZURhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbyAmJiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbyAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDoga2V5ID09ICdhZy1HcmlkLUF1dG9Db2x1bW4nID8gdGhpcy5fdHJlZUdyb3VwQ29sdW1uIDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLnRydW5jTGVzc1RoYW5PckVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVEYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IEZpbHRlck9wZXJhdG9yW3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlnbm9yZUNhc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRFbCA9IHRoaXMuX2NvbHVtbi5maW5kKChlbCkgPT4gZWwuZmllbGQgPT0ga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSB0aGlzLl90cmVlR3JvdXBDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwuc2VhcmNoRmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBmaW5kRWwuc2VhcmNoRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRFbCAmJiBmaW5kRWwudHlwZSA9PSAnZW51bScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRpb24gPyBvcGVyYXRpb24gOiBGaWx0ZXJPcGVyYXRvci5lcXVhbHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyID8gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5maWx0ZXIgOiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBzb3J0czogU29ydE1vZGVsW10gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kRWwgPSB0aGlzLl9jb2x1bW4uZmluZCgoZWwpID0+IGVsLmZpZWxkID09IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbFswXS5jb2xJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwuc2VhcmNoRmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydHMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcjogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLnNvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGZpbmRFbC5zZWFyY2hGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0cyA9IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWxbMF0uc29ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLmNvbElkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBncmlkRmlsdGVyOiBHcmlkSW5wdXRNb2RlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGFrZTogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgc29ydHNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYXJhbXM6IEdyaWRSZXF1ZXN0UGFyYW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGU6IHBhcmFtcy5wYXJlbnROb2RlLmRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhKGdyaWRGaWx0ZXIsIHJlcXVlc3RQYXJhbXMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5zdWNjZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGE6IGRhdGEuaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudDogZGF0YS50b3RhbENvdW50LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mYWlsKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cbn0iLCI8IS0tIDxidXR0b24gKGNsaWNrKT1cImVuYWJsZUFkdmFuY2VkRmlsdGVyPSFlbmFibGVBZHZhbmNlZEZpbHRlclwiPmFkdmFuY2VkPC9idXR0b24+IC0tPlxuPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00IHBiLTQgYm9yZGVyLWIgYm9yZGVyLWItc2xhdGUtMjAwXCIgKm5nSWY9XCJpc1Rvb2xiYXJcIj5cbiAgICA8ZGl2PlxuICAgICAgICA8aDQgY2xhc3M9XCJmb250LXNlbWlib2xkIHRleHQtMnhsXCI+e3tsYWJlbH19PC9oND5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIHRvb2xiYXJJdGVtczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIFtuekxvYWRpbmddPVwiaXRlbS5sb2FkaW5nID8gaXRlbS5sb2FkaW5nIDogZmFsc2VcIiAoY2xpY2spPVwiaGFuZGxlQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgW256VHlwZV09XCJpdGVtLnR5cGVcIj5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gW256VHlwZV09XCJpdGVtLmljb25cIj48L3NwYW4+XG4gICAgICAgICAgICB7e2l0ZW0udGV4dH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJyZWZyZXNoKClcIiBuelR5cGU9XCJkZWZhdWx0XCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cInN5bmNcIj48L3NwYW4+XG4gICAgICAgICAgICDYqNix2YjYstix2LPYp9mG24xcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJjbGVhckZpbHRlcigpXCIgbnpUeXBlPVwiZGVmYXVsdFwiPlxuICAgICAgICAgICAgPHNwYW4gbnotaWNvbiBuelR5cGU9XCJjbGVhclwiPjwvc3Bhbj5cbiAgICAgICAgICAgINm+2Kfaqdiz2KfYstuMXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8IS0tIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJhZHZhbmNlZEZpbHRlcigpXCIgKm5nSWY9XCJzaG93QWR2YW5jZWRCdXR0b25cIiBuelR5cGU9XCJkZWZhdWx0XCI+XG4gICAgICAgICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cImZpbHRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgINis2LPYqtis2YjbjCDZvtuM2LTYsdmB2KrZh1xuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXY+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48YWctZ3JpZC1hbmd1bGFyIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgW3N0eWxlXT1cIihpc1Rvb2xiYXIpID8gJ2hlaWdodDogY2FsYygxMDAlIC0gMXJlbSAtIDQ4cHgpOyc6J2hlaWdodDogMTAwJTsnXCJcbiAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvblBhZ2VTaXplXCJcbiAgICBbcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JdPVwicGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JcIiBbY2xhc3NdPVwidGhlbWVDbGFzc1wiIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxuICAgIFtlbmFibGVBZHZhbmNlZEZpbHRlcl09XCJlbmFibGVBZHZhbmNlZEZpbHRlclwiIFtlbmFibGVSdGxdPVwicnRsXCIgW3RyZWVEYXRhXT1cInRyZWVNb2RlbFwiXG4gICAgW2F1dG9Hcm91cENvbHVtbkRlZl09XCJhdXRvR3JvdXBDb2x1bW5EZWZcIiBbaXNTZXJ2ZXJTaWRlR3JvdXBdPVwiaXNTZXJ2ZXJTaWRlR3JvdXBcIlxuICAgIFtnZXRTZXJ2ZXJTaWRlR3JvdXBLZXldPVwiZ2V0U2VydmVyU2lkZUdyb3VwS2V5XCIgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIiBbcm93RGF0YV09XCJyb3dEYXRhXCIgW3NlcnZlclNpZGVEYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxuICAgIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50KVwiIFtjYWNoZUJsb2NrU2l6ZV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIiBbbWF4QmxvY2tzSW5DYWNoZV09XCIyXCJcbiAgICBbY29udGV4dF09XCJ7YWN0aW9uSXRlbXM6IGFjdGlvbkl0ZW1zfVwiIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJjZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICBbYXV0b1NpemVTdHJhdGVneV09XCJfYXV0b0NvbHVtblNpemVcIiAjZ3JpZCAvPiJdfQ==
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBeUUsY0FBYyxFQUErRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9NLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7QUFpQmhELE1BQU0sT0FBTyxhQUFhO0lBQ3RCLFlBQ1ksVUFBNEI7UUFBNUIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFNakMsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLHlCQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLHFCQUFnQixHQUFXLElBQUksQ0FBQztRQUN4QyxrQkFBYSxHQUF3QjtZQUNqQyxJQUFJLEVBQUUsV0FBVztTQUNwQixDQUFDO1FBRUYsZUFBVSxHQUFXLGlCQUFpQixDQUFDO1FBQ3ZDLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFDMUIsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFDNUIsb0JBQWUsR0FBd0csRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDaEosdUJBQWtCLEdBQVc7WUFDekIsVUFBVSxFQUFFLEVBQUU7WUFDZCxRQUFRLEVBQUUsR0FBRztZQUNiLFFB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QUFjO3NCQUR4QixLQUFLO2dCQW9CTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQUlOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSztnQkFJTixHQUFHO3NCQURGLEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUlOLDBCQUEwQjtzQkFEekIsS0FBSztnQkFJTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBSU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUs7Z0JBSUssY0FBYztzQkFEeEIsS0FBSztnQkFhTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBSU4sV0FBVztzQkFEVixLQUFLO2dCQWVOLFlBQVk7c0JBRFgsS0FBSztnQkFpQkssZUFBZTtzQkFEekIsS0FBSztnQkF5Qk4sU0FBUztzQkFEUixLQUFLO2dCQUlLLE1BQU07c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZWxsRG91YmxlQ2xpY2tlZEV2ZW50LCBDb2xEZWYsIEdyaWRBcGksIEdyaWRPcHRpb25zLCBJRGF0ZUZpbHRlclBhcmFtcywgSVJvd05vZGUsIElTZXJ2ZXJTaWRlRGF0YXNvdXJjZSwgSVNlcnZlclNpZGVHZXRSb3dzUGFyYW1zLCBSb3dNb2RlbFR5cGUsIFJvd1NlbGVjdGlvbk9wdGlvbnMsIFNlbGVjdGlvbkNoYW5nZWRFdmVudCwgU2V0RmlsdGVyVmFsdWVzRnVuY1BhcmFtcywgU2l6ZUNvbHVtbnNUb0NvbnRlbnRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdEdyaWRTdHJhdGVneSwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFjdGlvbkl0ZW1zLCBDb2x1bW5JdGVtcywgRGF0YXNvdXJjZU91dHB1dE1vZGVsLCBGaWx0ZXJHcmlkSXRlbXNNb2RlbCwgRmlsdGVyT3BlcmF0b3IsIEdyaWRBY3Rpb25PdXRwdXQsIEdyaWRJbnB1dE1vZGVsLCBHcmlkUmVxdWVzdFBhcmFtLCBTb3J0TW9kZWwsIFRvb2xiYXJJdGVtcyB9IGZyb20gJy4uLy4uL21vZGVscy9zaGFyZWQubW9kZWwnO1xuaW1wb3J0IHsgQWN0aW9uc0NlbGxSZW5kZXJlciB9IGZyb20gJy4uL2luZGV4LmFwaSc7XG5pbXBvcnQgeyBKRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9kYXRlLnBpcGUnO1xuaW1wb3J0IHsgRGF0ZUZpbHRlciB9IGZyb20gJy4vZmlsdGVyL2luZGV4LmFwaSc7XG5leHBvcnQgaW50ZXJmYWNlIElPbHltcGljRGF0YSB7XG4gICAgYXRobGV0ZTogc3RyaW5nLFxuICAgIGFnZTogbnVtYmVyLFxuICAgIGNvdW50cnk6IHN0cmluZyxcbiAgICB5ZWFyOiBudW1iZXIsXG4gICAgZGF0ZTogc3RyaW5nLFxuICAgIHNwb3J0OiBzdHJpbmcsXG4gICAgZ29sZDogbnVtYmVyLFxuICAgIHNpbHZlcjogbnVtYmVyLFxuICAgIGJyb256ZTogbnVtYmVyLFxuICAgIHRvdGFsOiBudW1iZXJcbn1cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSB0aGlzLmNyZWF0ZVNlcnZlclNpZGVEYXRhc291cmNlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgZ3JpZEFwaSE6IEdyaWRBcGk7XG4gICAgcHVibGljIGlzU2VydmVyU2lkZUdyb3VwO1xuICAgIHB1YmxpYyBnZXRTZXJ2ZXJTaWRlR3JvdXBLZXkgPSBudWxsO1xuICAgIHB1YmxpYyBncm91cERlZmF1bHRFeHBhbmRlZCA9IC0xO1xuICAgIHByaXZhdGUgX3RyZWVHcm91cENvbHVtbjogc3RyaW5nID0gbnVsbDtcbiAgICBfcm93U2VsZWN0aW9uOiBSb3dTZWxlY3Rpb25PcHRpb25zID0ge1xuICAgICAgICBtb2RlOiAnc2luZ2xlUm93J1xuICAgIH07XG4gICAgZGF0YXNvdXJjZTogSVNlcnZlclNpZGVEYXRhc291cmNlO1xuICAgIHRoZW1lQ2xhc3M6IHN0cmluZyA9IFwiYWctdGhlbWUtcXVhcnR6XCI7XG4gICAgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXTtcbiAgICBfY29sdW1uOiBDb2x1bW5JdGVtc1tdID0gW107XG4gICAgX2F1dG9Db2x1bW5TaXplOiBTaXplQ29sdW1uc1RvRml0R3JpZFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB8IFNpemVDb2x1bW5zVG9Db250ZW50U3RyYXRlZ3kgPSB7IHR5cGU6ICdmaXRHcmlkV2lkdGgnIH07XG4gICAgYXV0b0dyb3VwQ29sdW1uRGVmOiBDb2xEZWYgPSB7XG4gICAgICAgIGhlYWRlck5hbWU6IFwiXCIsXG4gICAgICAgIG1pbldpZHRoOiAyNTAsXG4gICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XG4gICAgICAgICAgICBzdXBwcmVzc0NvdW50OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJQYXJhbXM6IHtcbiAgICAgICAgICAgIG1heE51bUNvbmRpdGlvbnM6IDFcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZhdWx0Q29sRGVmOiBDb2xEZWYgPSB7XG4gICAgICAgIGZsZXg6IDEsXG4gICAgICAgIG1pbldpZHRoOiAxNTAsXG4gICAgICAgIGZpbHRlcjogJ2FnVGV4dENvbHVtbkZpbHRlcicsXG4gICAgICAgIHN1cHByZXNzSGVhZGVyTWVudUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgc3VwcHJlc3NIZWFkZXJDb250ZXh0TWVudTogdHJ1ZSxcbiAgICAgICAgc3VwcHJlc3NTaXplVG9GaXQ6IHRydWVcbiAgICB9O1xuXG5cbiAgICBAT3V0cHV0KClcbiAgICBvbkFjdGlvbjogRXZlbnRFbWl0dGVyPEdyaWRBY3Rpb25PdXRwdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgb25Ub29sYmFyOiBFdmVudEVtaXR0ZXI8VG9vbGJhckl0ZW1zPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIG9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25XaWR0aDogbnVtYmVyID0gMTAwO1xuXG4gICAgQElucHV0KClcbiAgICBsYWJlbDogc3RyaW5nID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBpc1Jvd1NlbGVjdGlvbih2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dTZWxlY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ211bHRpUm93JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRlc3QoZTogU2VsZWN0aW9uQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgIGUuYXBpLmZvckVhY2hOb2RlKChlbCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVsLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goZWwuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHJvd01vZGVsVHlwZTogUm93TW9kZWxUeXBlID0gJ3NlcnZlclNpZGUnO1xuXG4gICAgQElucHV0KClcbiAgICBzZXJ2ZXJTaWRlU29ydDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHNlcnZlclNpZGVGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBpc1Rvb2xiYXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBydGw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwYWdpbmF0aW9uUGFnZVNpemUgPSAyNTtcblxuICAgIEBJbnB1dCgpXG4gICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IG51bWJlcltdIHwgYm9vbGVhbiA9IFsyNV07XG5cbiAgICBASW5wdXQoKVxuICAgIGVuYWJsZUFkdmFuY2VkRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHRyZWVNb2RlbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBpc0xlYWY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcm93RGF0YTogYW55ID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhdXRvQ29sdW1uU2l6ZSgpOiBTaXplQ29sdW1uc1RvRml0R3JpZFN0cmF0ZWd5IHwgU2l6ZUNvbHVtbnNUb0ZpdFByb3ZpZGVkV2lkdGhTdHJhdGVneSB8IFNpemVDb2x1bW5zVG9Db250ZW50U3RyYXRlZ3kge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b0NvbHVtblNpemU7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgYXV0b0NvbHVtblNpemUodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgdGhpcy5fYXV0b0NvbHVtblNpemUgPSB7IHR5cGU6ICdmaXRDZWxsQ29udGVudHMnIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvQ29sdW1uU2l6ZSA9IHsgdHlwZTogJ2ZpdEdyaWRXaWR0aCcgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2hvd0FkdmFuY2VkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uSXRlbXM6IEFjdGlvbkl0ZW1zW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdlZGl0JyxcbiAgICAgICAgICAgIGljb246ICdmYS1saWdodCBmYS1wZW4nLFxuICAgICAgICAgICAgYWx0OiAn2YjbjNix2KfbjNi0J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnZGVsZXRlJyxcbiAgICAgICAgICAgIGljb246ICdmYS1saWdodCBmYS10cmFzaCcsXG4gICAgICAgICAgICBhbHQ6ICfYrdiw2YEnXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgQElucHV0KClcbiAgICB0b29sYmFySXRlbXM6IFRvb2xiYXJJdGVtc1tdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnaW5zZXJ0JyxcbiAgICAgICAgICAgIGljb246ICdwbHVzJyxcbiAgICAgICAgICAgIHRleHQ6ICfYp9uM2KzYp9ivINix2K/bjNmBINis2K/bjNivJyxcbiAgICAgICAgICAgIHR5cGU6ICdwcmltYXJ5J1xuICAgICAgICB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBjb2RlOiAncmVmcmVzaCcsXG4gICAgICAgIC8vICAgICBpY29uOiAnc3luYycsXG4gICAgICAgIC8vICAgICB0ZXh0OiAn2KjYsdmI2LLYsdiz2KfZhtuMJyxcbiAgICAgICAgLy8gICAgIHR5cGU6ICdkZWZhdWx0J1xuICAgICAgICAvLyB9XG4gICAgXTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0cmVlR3JvdXBDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVHcm91cENvbHVtbjtcbiAgICB9XG4gICAgcHVibGljIHNldCB0cmVlR3JvdXBDb2x1bW4odjogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICB0aGlzLl90cmVlR3JvdXBDb2x1bW4gPSB2O1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVHcm91cCA9IGRhdGFJdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xlYWYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhSXRlbS5sYXN0Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhSXRlbVt2XTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFJdGVtW3ZdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmdldFNlcnZlclNpZGVHcm91cEtleSA9IGRhdGFJdGVtID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YUl0ZW1bdl07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYuaGVhZGVyTmFtZSA9IHY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGZldGNoRGF0YTogKGZpbHRlckdyaWQ6IEdyaWRJbnB1dE1vZGVsLCByZXF1ZXN0UGFyYW1zOiBHcmlkUmVxdWVzdFBhcmFtKSA9PiBQcm9taXNlPERhdGFzb3VyY2VPdXRwdXRNb2RlbD47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgY29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW47XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgY29sdW1uKHY6IENvbHVtbkl0ZW1zW10pIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzID0gW107XG4gICAgICAgIGlmICh2ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbiA9IHY7XG4gICAgICAgICAgICB2LmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGZpbHRlcjogYW55ID0gJ2FnVGV4dENvbHVtbkZpbHRlcic7XG4gICAgICAgICAgICAgICAgdmFyIHNvcnRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgZmlsdGVyUGFyYW1zOiBJRGF0ZUZpbHRlclBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWF4TnVtQ29uZGl0aW9uczogMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlbC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcy5maWx0ZXJPcHRpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1wdHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6ICd0cnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdZRVMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljYXRlOiAoKSA9PiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZklucHV0czogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5S2V5OiAnZmFsc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ05PJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogKCkgPT4gdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gJ2FnTnVtYmVyQ29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGVsLmZpbHRlckl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlLZXk6IGVsLmZpbHRlckl0ZW1zW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGVsLmZpbHRlckl0ZW1zW3Byb3BlcnR5XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZJbnB1dHM6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLmZpbHRlck9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbXB0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdOdW1iZXJDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdTZXRDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9ICdhZ0RhdGVDb2x1bW5GaWx0ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAnYWdUZXh0Q29sdW1uRmlsdGVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWwuZmlsdGVyICE9IHVuZGVmaW5lZCAmJiAhZWwuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWwuc29ydGFibGUgIT0gdW5kZWZpbmVkICYmICFlbC5zb3J0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWwuZmllbGQgIT0gdGhpcy5fdHJlZUdyb3VwQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkRlZnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSWQ6IGVsLmlkID8gZWwuaWQgOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnYWctYm9vbGVhbi1jZWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZSA/ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBzdHJva2U9XCJncmVlblwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjFcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBjbGFzcz1cImZlYXRoZXIgZmVhdGhlci1jaGVja1wiPjxwYXRoIGQ9XCJNMjAgNkw5IDE3TDQgMTJcIi8+PC9zdmc+JyA6ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBzdHJva2U9XCJyZWRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgY2xhc3M9XCJmZWF0aGVyIGZlYXRoZXIteFwiPjxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCIgLz48bGluZSB4MT1cIjZcIiB5MT1cIjZcIiB4Mj1cIjE4XCIgeTI9XCIxOFwiIC8+PC9zdmc+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWwudHlwZSAmJiBlbC50eXBlID09ICdlbnVtJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHBhcmFtcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IERhdGVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpEYXRlUGlwZSgpLnRyYW5zZm9ybShwYXJhbXMudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2RhdGUtdGltZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJZDogZWwuaWQgPyBlbC5pZCA6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBlbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IERhdGVGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGVsLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBlbC5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBwYXJhbXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpEYXRlUGlwZSgpLnRyYW5zZm9ybShwYXJhbXMudmFsdWUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ3ByaWNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBlbC5lZGl0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogZWwubWluV2lkdGggPyBlbC5taW5XaWR0aCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogcGFyYW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtcy52YWx1ZS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlICYmIGVsLnR5cGUgPT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiA4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGVsLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgPGltZyBjbGFzcz1cInJvdW5kZWQtZnVsbCBtdC0xXCIgd2lkdGg9XCIzMlwiIGhlaWdodD1cIjMyXCIgc3JjPVwiJHtwYXJhbXMudmFsdWV9XCIvPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbElkOiBlbC5pZCA/IGVsLmlkIDogZWwuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGVsLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6IGVsLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZWwuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbm5lZDogZWwucGlubmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiBlbC5taW5XaWR0aCA/IGVsLm1pbldpZHRoIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmLmZpZWxkID0gZWwuZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgbWluV2lkdGg6IHRoaXMuYWN0aW9uV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGlubmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogQWN0aW9uc0NlbGxSZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAocGFyYW1zOiBHcmlkQWN0aW9uT3V0cHV0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFjdGlvbi5lbWl0KHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2VsbERvdWJsZUNsaWNrZWQoZTogQ2VsbERvdWJsZUNsaWNrZWRFdmVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrZWQuZW1pdCh7IC4uLmUuZGF0YSwgY29sSWQ6IGUuY29sdW1uLmdldENvbElkKCkgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlQ2xpY2soaXRlbTogVG9vbGJhckl0ZW1zKSB7XG4gICAgICAgIHRoaXMub25Ub29sYmFyLmVtaXQoaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2gocHVyZ2UgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5yb3dNb2RlbFR5cGUgPT0gJ3NlcnZlclNpZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaFNlcnZlclNpZGUoeyBwdXJnZSB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaENlbGxzKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbignY29sdW1uRGVmcycsIHRoaXMuY29sdW1uRGVmcyk7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbignbG9hZGluZycsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGEobnVsbCwgbnVsbCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvd0RhdGEgPSBkYXRhLml0ZW1zO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKCdsb2FkaW5nJywgZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkdyaWRSZWFkeShwYXJhbXM6IGFueSkge1xuICAgICAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xuICAgICAgICBpZiAodGhpcy5yb3dNb2RlbFR5cGUgPT0gJ2NsaWVudFNpZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRGF0YShudWxsLCBudWxsKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93RGF0YSA9IGRhdGEuaXRlbXM7XG4gICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLmZhaWwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWR2YW5jZWRGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlQWR2YW5jZWRGaWx0ZXIgPSAhdGhpcy5lbmFibGVBZHZhbmNlZEZpbHRlcjtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdyaWRBcGkuc2hvd0FkdmFuY2VkRmlsdGVyQnVpbGRlcigpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2FnLWljb24tbWF4aW1pemUnKVswXSBhcyBIVE1MRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJvdXRlVG9Ob2RlKHJvd05vZGU6IElSb3dOb2RlKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAoIXJvd05vZGUucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0Um91dGVUb05vZGUocm93Tm9kZS5wYXJlbnQpLFxuICAgICAgICAgICAgcm93Tm9kZS5rZXkgPyByb3dOb2RlLmtleSA6IHJvd05vZGUuZGF0YS5lbXBsb3llZU5hbWUsXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcmVmcmVzaE5vZGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRBcGkuZ2V0Um93Tm9kZShpZCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRSb3V0ZVRvTm9kZShzZWxlY3RlZFJvd3MpO1xuICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaFNlcnZlclNpZGUoe1xuICAgICAgICAgICAgcHVyZ2U6IHRydWUsXG4gICAgICAgICAgICByb3V0ZTogcm91dGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXIoKSB7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChudWxsKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaFBhcmVudE5vZGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRBcGkuZ2V0Um93Tm9kZShpZCk7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gdGhpcy5nZXRSb3V0ZVRvTm9kZShzZWxlY3RlZFJvd3MucGFyZW50KTtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hTZXJ2ZXJTaWRlKHtcbiAgICAgICAgICAgIHB1cmdlOiB0cnVlLFxuICAgICAgICAgICAgcm91dGU6IHJvdXRlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVNlcnZlclNpZGVEYXRhc291cmNlKCk6IElTZXJ2ZXJTaWRlRGF0YXNvdXJjZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXRSb3dzOiAocGFyYW1zOiBJU2VydmVyU2lkZUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyOiBGaWx0ZXJHcmlkSXRlbXNNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyVHlwZSA9PSAnY3VzdG9tLWRhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZUZyb20gJiYgcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBrZXkgPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicgPyB0aGlzLl90cmVlR3JvdXBDb2x1bW4gOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuYmV0d2VlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSwgcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlVG9dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGtleSA9PSAnYWctR3JpZC1BdXRvQ29sdW1uJyA/IHRoaXMuX3RyZWVHcm91cENvbHVtbiA6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnQU5EJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci50cnVuY0dyZWF0ZXJUaGFuRXF1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZURhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5kYXRlRnJvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbyAmJiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLmRhdGVUbyAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDoga2V5ID09ICdhZy1HcmlkLUF1dG9Db2x1bW4nID8gdGhpcy5fdHJlZUdyb3VwQ29sdW1uIDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdBTkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLnRydW5jTGVzc1RoYW5PckVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1bmNhdGVEYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZGF0ZVRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IEZpbHRlck9wZXJhdG9yW3BhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0udHlwZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlnbm9yZUNhc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRFbCA9IHRoaXMuX2NvbHVtbi5maW5kKChlbCkgPT4gZWwuZmllbGQgPT0ga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSB0aGlzLl90cmVlR3JvdXBDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwuc2VhcmNoRmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgPSBmaW5kRWwuc2VhcmNoRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRFbCAmJiBmaW5kRWwudHlwZSA9PSAnZW51bScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ0FORCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRpb24gPyBvcGVyYXRpb24gOiBGaWx0ZXJPcGVyYXRvci5lcXVhbHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydW5jYXRlRGF0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsW2tleV0uZmlsdGVyID8gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWxba2V5XS5maWx0ZXIgOiBwYXJhbXMucmVxdWVzdC5maWx0ZXJNb2RlbFtrZXldLnR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBzb3J0czogU29ydE1vZGVsW10gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kRWwgPSB0aGlzLl9jb2x1bW4uZmluZCgoZWwpID0+IGVsLmZpZWxkID09IHBhcmFtcy5yZXF1ZXN0LnNvcnRNb2RlbFswXS5jb2xJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kRWwuc2VhcmNoRmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29ydHMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcjogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLnNvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGZpbmRFbC5zZWFyY2hGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0cyA9IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWxbMF0uc29ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsWzBdLmNvbElkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBncmlkRmlsdGVyOiBHcmlkSW5wdXRNb2RlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGFrZTogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBza2lwOiBwYXJhbXMuYXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICogcGFyYW1zLmFwaS5wYWdpbmF0aW9uR2V0UGFnZVNpemUoKSxcbiAgICAgICAgICAgICAgICAgICAgc29ydHNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RQYXJhbXM6IEdyaWRSZXF1ZXN0UGFyYW0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE5vZGU6IHBhcmFtcy5wYXJlbnROb2RlLmRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhKGdyaWRGaWx0ZXIsIHJlcXVlc3RQYXJhbXMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5zdWNjZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGE6IGRhdGEuaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudDogZGF0YS50b3RhbENvdW50LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mYWlsKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cbn0iLCI8IS0tIDxidXR0b24gKGNsaWNrKT1cImVuYWJsZUFkdmFuY2VkRmlsdGVyPSFlbmFibGVBZHZhbmNlZEZpbHRlclwiPmFkdmFuY2VkPC9idXR0b24+IC0tPlxuPGRpdlxuICBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlciBtYi00IHBiLTQgYm9yZGVyLWIgYm9yZGVyLWItc2xhdGUtMjAwXCJcbiAgKm5nSWY9XCJpc1Rvb2xiYXJcIlxuPlxuICA8ZGl2PlxuICAgIDxoNCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC0yeGxcIj57eyBsYWJlbCB9fTwvaDQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgIEBmb3IgKGl0ZW0gb2YgdG9vbGJhckl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcbiAgICA8YnV0dG9uXG4gICAgICBuei1idXR0b25cbiAgICAgIFtuekxvYWRpbmddPVwiaXRlbS5sb2FkaW5nID8gaXRlbS5sb2FkaW5nIDogZmFsc2VcIlxuICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKGl0ZW0pXCJcbiAgICAgIFtuelR5cGVdPVwiaXRlbS50eXBlXCJcbiAgICA+XG4gICAgICA8c3BhbiBuei1pY29uIFtuelR5cGVdPVwiaXRlbS5pY29uXCI+PC9zcGFuPlxuICAgICAge3sgaXRlbS50ZXh0IH19XG4gICAgPC9idXR0b24+XG4gICAgfVxuICAgIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJyZWZyZXNoKClcIiBuelR5cGU9XCJkZWZhdWx0XCI+XG4gICAgICA8c3BhbiBuei1pY29uIG56VHlwZT1cInN5bmNcIj48L3NwYW4+XG4gICAgICDYqNix2YjYstix2LPYp9mG24xcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG56LWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiIG56VHlwZT1cImRlZmF1bHRcIj5cbiAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwiY2xlYXJcIj48L3NwYW4+XG4gICAgICDZvtin2qnYs9in2LLbjFxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS0gPGJ1dHRvbiBuei1idXR0b24gKGNsaWNrKT1cImFkdmFuY2VkRmlsdGVyKClcIiAqbmdJZj1cInNob3dBZHZhbmNlZEJ1dHRvblwiIG56VHlwZT1cImRlZmF1bHRcIj5cbiAgICAgICAgICAgIDxzcGFuIG56LWljb24gbnpUeXBlPVwiZmlsdGVyXCI+PC9zcGFuPlxuICAgICAgICAgICAg2KzYs9iq2KzZiNuMINm+24zYtNix2YHYqtmHXG4gICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXY+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuPGFnLWdyaWQtYW5ndWxhclxuICBzdHlsZT1cIndpZHRoOiAxMDAlXCJcbiAgW3N0eWxlXT1cImlzVG9vbGJhciA/ICdoZWlnaHQ6IGNhbGMoMTAwJSAtIDFyZW0gLSA0OHB4KTsnIDogJ2hlaWdodDogMTAwJTsnXCJcbiAgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXG4gIFtwYWdpbmF0aW9uXT1cInRydWVcIlxuICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25QYWdlU2l6ZVwiXG4gIFtwYWdpbmF0aW9uUGFnZVNpemVTZWxlY3Rvcl09XCJwYWdpbmF0aW9uUGFnZVNpemVTZWxlY3RvclwiXG4gIFtjbGFzc109XCJ0aGVtZUNsYXNzXCJcbiAgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiXG4gIFtlbmFibGVBZHZhbmNlZEZpbHRlcl09XCJlbmFibGVBZHZhbmNlZEZpbHRlclwiXG4gIFtlbmFibGVSdGxdPVwicnRsXCJcbiAgW3RyZWVEYXRhXT1cInRyZWVNb2RlbFwiXG4gIFthdXRvR3JvdXBDb2x1bW5EZWZdPVwiYXV0b0dyb3VwQ29sdW1uRGVmXCJcbiAgW2lzU2VydmVyU2lkZUdyb3VwXT1cImlzU2VydmVyU2lkZUdyb3VwXCJcbiAgW2dldFNlcnZlclNpZGVHcm91cEtleV09XCJnZXRTZXJ2ZXJTaWRlR3JvdXBLZXlcIlxuICBbcm93TW9kZWxUeXBlXT1cInJvd01vZGVsVHlwZVwiXG4gIFtyb3dEYXRhXT1cInJvd0RhdGFcIlxuICBbc2VydmVyU2lkZURhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50KVwiXG4gIFtjYWNoZUJsb2NrU2l6ZV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIlxuICBbbWF4QmxvY2tzSW5DYWNoZV09XCIyXCJcbiAgW2NvbnRleHRdPVwieyBhY3Rpb25JdGVtczogYWN0aW9uSXRlbXMgfVwiXG4gIChjZWxsRG91YmxlQ2xpY2tlZCk9XCJjZWxsRG91YmxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgW2F1dG9TaXplU3RyYXRlZ3ldPVwiX2F1dG9Db2x1bW5TaXplXCJcbiAgW3Jvd1NlbGVjdGlvbl09XCJfcm93U2VsZWN0aW9uXCJcbiAgKHNlbGVjdGlvbkNoYW5nZWQpPVwidGVzdCgkZXZlbnQpXCJcbiAgI2dyaWRcbi8+XG4iXX0=