ngx-histaff-alpha 2.1.0 → 2.1.2

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.
@@ -125,16 +125,21 @@ export class CoreStatisticWidgetComponent {
125
125
  const start = this.previousComparisonValue;
126
126
  const end = this.comparisonValue;
127
127
  var comparisonValueElement = d3.select("#metric_" + this.metric.id + "_comparisonValue");
128
- comparisonValueElement.attr("fill", this.comparisonValue >= 0 ? this.comparisonTextFillColor : d3.color("red"));
128
+ comparisonValueElement.attr("fill", (this.comparisonValue || 0) >= 0 ? this.comparisonTextFillColor : d3.color("red"));
129
129
  switch (this.metric.dataType) {
130
130
  case EnumICoreStatisticWidgetDataType.INTEGER:
131
131
  comparisonValueElement
132
132
  .transition()
133
133
  .tween("text", () => {
134
- const interpolator = d3.interpolateNumber(start, end);
135
- return t => {
136
- comparisonValueElement.text(Math.round(interpolator(t)));
137
- };
134
+ if (!!start && !!end) {
135
+ const interpolator = d3.interpolateNumber(start, end);
136
+ return t => {
137
+ comparisonValueElement.text(Math.round(interpolator(t)));
138
+ };
139
+ }
140
+ else {
141
+ return _ => comparisonValueElement.text("N/A");
142
+ }
138
143
  })
139
144
  .duration(500);
140
145
  break;
@@ -142,10 +147,15 @@ export class CoreStatisticWidgetComponent {
142
147
  comparisonValueElement
143
148
  .transition()
144
149
  .tween("text", () => {
145
- const interpolator = d3.interpolateNumber(start, end);
146
- return t => {
147
- comparisonValueElement.text(Math.round(interpolator(t) * 100) / 100);
148
- };
150
+ if (!!start && !!end) {
151
+ const interpolator = d3.interpolateNumber(start, end);
152
+ return t => {
153
+ comparisonValueElement.text(Math.round(interpolator(t) * 100) / 100);
154
+ };
155
+ }
156
+ else {
157
+ return _ => comparisonValueElement.text("N/A");
158
+ }
149
159
  })
150
160
  .duration(500);
151
161
  break;
@@ -153,15 +163,20 @@ export class CoreStatisticWidgetComponent {
153
163
  comparisonValueElement
154
164
  .transition()
155
165
  .tween("text", () => {
156
- const interpolator = d3.interpolateNumber(start, end);
157
- return t => {
158
- comparisonValueElement.text(Math.round(interpolator(t) * 10000) / 100 + "%");
159
- };
166
+ if (!!start && !!end) {
167
+ const interpolator = d3.interpolateNumber(start, end);
168
+ return t => {
169
+ comparisonValueElement.text(Math.round(interpolator(t) * 10000) / 100 + "%");
170
+ };
171
+ }
172
+ else {
173
+ return _ => comparisonValueElement.text("N/A");
174
+ }
160
175
  })
161
176
  .duration(500);
162
177
  break;
163
178
  default:
164
- comparisonValueElement.transition().text(this.comparisonValue.toString());
179
+ comparisonValueElement.transition().text((this.comparisonValue || 'N/A').toString());
165
180
  break;
166
181
  }
167
182
  }
@@ -184,7 +199,7 @@ export class CoreStatisticWidgetComponent {
184
199
  const maxPoint = this.dataset.reduce((max, current) => current.y > max.y ? current : max);
185
200
  // Update scales
186
201
  const xScale = d3.scaleLinear()
187
- .domain([0, d3.max(this.dataset, d => d.x)])
202
+ .domain([0, d3.max(this.dataset, (d) => d.x)])
188
203
  .range([0, this.graphWidth]);
189
204
  const yScale = d3.scaleLinear()
190
205
  .domain([minPoint.y, maxPoint.y])
@@ -200,8 +215,8 @@ export class CoreStatisticWidgetComponent {
200
215
  //yAxis.call(yAxisCall);
201
216
  // Update connecting line
202
217
  this.connectingLine = d3.line()
203
- .x(d => xScale(d.x))
204
- .y(d => yScale(d.y))
218
+ .x((d) => xScale(d.x))
219
+ .y((d) => yScale(d.y))
205
220
  .defined((d, i) => i >= 0 && i < this.dataset.length);
206
221
  d3.select("#metric_" + this.metric.id + "_scatter-plot").select("path")
207
222
  .datum(this.dataset)
@@ -377,7 +392,7 @@ export class CoreStatisticWidgetComponent {
377
392
  .attr("x", this.comparisonValueRectWidth / 2)
378
393
  .attr("y", this.comparisonValueRectHeight / 2)
379
394
  .attr("class", "graph-value")
380
- .attr("fill", this.comparisonValue >= 0 ? this.comparisonValueFillColor : d3.color("red"))
395
+ .attr("fill", (this.comparisonValue || 0) >= 0 ? this.comparisonValueFillColor : d3.color("red"))
381
396
  .attr("font-size", this.comparisonValueRectHeight + "px")
382
397
  .attr("text-anchor", "middle")
383
398
  .attr("alignment-baseline", "middle");
@@ -416,7 +431,7 @@ export class CoreStatisticWidgetComponent {
416
431
  .duration(500);
417
432
  break;
418
433
  default:
419
- comparisonValueText.text(this.comparisonValue.toString());
434
+ comparisonValueText.text((this.comparisonValue || 'N/A').toString());
420
435
  break;
421
436
  }
422
437
  this.previousComparisonValue = this.comparisonValue;
@@ -461,8 +476,8 @@ export class CoreStatisticWidgetComponent {
461
476
  .domain([minPoint.y, maxPoint.y])
462
477
  .range([this.graphHeight, 0]);
463
478
  this.connectingLine = d3.line()
464
- .x(d => xScale(d.x))
465
- .y(d => yScale(d.y))
479
+ .x((d) => xScale(d.x))
480
+ .y((d) => yScale(d.y))
466
481
  .defined((d, i) => i >= 0 && i < initialDataset.length);
467
482
  this.grayGroup.append("path")
468
483
  .datum(initialDataset)
@@ -547,4 +562,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
547
562
  type: ViewChild,
548
563
  args: ['container']
549
564
  }] } });
550
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBNEIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDOztBQUV6QixNQUFNLENBQU4sSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLG1FQUEyQyxDQUFBO0lBQzNDLGlFQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFIVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBRy9CO0FBU0QsTUFBTSxDQUFOLElBQVksZ0NBSVg7QUFKRCxXQUFZLGdDQUFnQztJQUMxQyx1REFBbUIsQ0FBQTtJQUNuQix1REFBbUIsQ0FBQTtJQUNuQiw2REFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSlcsZ0NBQWdDLEtBQWhDLGdDQUFnQyxRQUkzQztBQThCRCxNQUFNLE9BQU8sNEJBQTRCO0lBVHpDO1FBYTZCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsb0JBQWUsR0FBVyxJQUFJLENBQUM7UUFHakQsV0FBTSxHQUF3QixFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxF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T0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcblxyXG5leHBvcnQgZW51bSBFbnVtSHJDb21wYXJpc29uQ29kZSB7XHJcbiAgV0lUSF9QUkVWSU9VU19NT05USCA9ICdXSVRIX1BSRVZJT1VTX01PTlRIJyxcclxuICBXSVRIX1BSRVZJT1VTX1lFQVIgPSAnV0lUSF9QUkVWSU9VU19ZRUFSJyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSHJNZXRyaWMge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGNvbXBhcmlzb25Db2RlOiBFbnVtSHJDb21wYXJpc29uQ29kZTtcclxuICBkYXRhVHlwZTogRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlIHtcclxuICBJTlRFR0VSID0gJ0lOVEVHRVInLFxyXG4gIERFQ0lNQUwgPSAnREVDSU1BTCcsXHJcbiAgUEVSQ0VOVEFHRSA9ICdQRVJDRU5UQUdFJyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR3JhcGhNYXJnaW5QYWRkaW5nIHtcclxuICB0b3A6IG51bWJlcjtcclxuICByaWdodDogbnVtYmVyO1xyXG4gIGJvdHRvbTogbnVtYmVyO1xyXG4gIGxlZnQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVN0YXRpc3RpY1dpZGdldERhdGFzZXQge1xyXG4gIHg6IG51bWJlcjtcclxuICB5OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVTdGF0aXN0aWNXaWRnZXRJbnB1dHMge1xyXG4gIG1ldHJpYzogSUhyTWV0cmljO1xyXG4gIGRhdGFzZXQ6IElDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YXNldFtdO1xyXG4gIHZhbHVlOiBudW1iZXI7XHJcbiAgY29tcGFyaXNvblZhbHVlOiBudW1iZXI7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1zdGF0aXN0aWMtd2lkZ2V0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVN0YXRpc3RpY1dpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG1ldHJpYyE6IElIck1ldHJpYztcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkYXRhc2V0ITogSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhc2V0W107XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdmFsdWU6IG51bWJlciA9IDk2O1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbXBhcmlzb25WYWx1ZTogbnVtYmVyID0gMC41NDtcclxuXHJcbiAgQElucHV0KCkgdmFsdWVGb250U2l6ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBtYXJnaW46IElHcmFwaE1hcmdpblBhZGRpbmcgPSB7IHRvcDogMzAsIHJpZ2h0OiAzMCwgYm90dG9tOiAzMCwgbGVmdDogMzAgfTtcclxuICBASW5wdXQoKSBwYWRkaW5nOiBJR3JhcGhNYXJnaW5QYWRkaW5nID0geyB0b3A6IDMwLCByaWdodDogMzAsIGJvdHRvbTogMzAsIGxlZnQ6IDMwIH07XHJcbiAgQElucHV0KCkgb3V0ZXJXaWR0aDogbnVtYmVyID0gMzIwO1xyXG4gIEBJbnB1dCgpIG91dGVySGVpZ2h0OiBudW1iZXIgPSAzMjA7XHJcbiAgQElucHV0KCkgZGl2aXNvckxpbmVNYXJnaW46IElHcmFwaE1hcmdpblBhZGRpbmcgPSB7IHRvcDogNCwgcmlnaHQ6IDgsIGJvdHRvbTogOCwgbGVmdDogOCB9O1xyXG4gIEBJbnB1dCgpIHRpdGxlRmlsbENvbG9yOiBhbnkgPSBkMy5jb2xvcihcImJsYWNrXCIpO1xyXG4gIEBJbnB1dCgpIGRpdmlzb3JMaW5lU3Ryb2tlQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiZ3JheVwiKTtcclxuICBASW5wdXQoKSBkaXZpc29yTGluZVN0cm9rZVdpZHRoOiBudW1iZXIgPSAzO1xyXG4gIEBJbnB1dCgpIHZhbHVlRmlsbENvbG9yOiBhbnkgPSBkMy5jb2xvcihcImJsYWNrXCIpO1xyXG5cclxuICBASW5wdXQoKSBjb21wYXJpc29uVmFsdWVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgY29tcGFyaXNvblRleHRGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgc2hvd0F4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgaW5uZXJXaWR0aCA9IHRoaXMub3V0ZXJXaWR0aCAtIHRoaXMubWFyZ2luLmxlZnQgLSB0aGlzLm1hcmdpbi5yaWdodDtcclxuICBpbm5lckhlaWdodCA9IHRoaXMub3V0ZXJIZWlnaHQgLSB0aGlzLm1hcmdpbi50b3AgLSB0aGlzLm1hcmdpbi5ib3R0b207XHJcbiAgd2lkdGggPSB0aGlzLmlubmVyV2lkdGggLSB0aGlzLnBhZGRpbmcubGVmdCAtIHRoaXMucGFkZGluZy5yaWdodDtcclxuICBoZWlnaHQgPSB0aGlzLmlubmVySGVpZ2h0IC0gdGhpcy5wYWRkaW5nLnRvcCAtIHRoaXMucGFkZGluZy5ib3R0b207XHJcblxyXG4gIGdyYXBoV2lkdGggPSB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodDtcclxuICBncmFwaEhlaWdodCA9IHRoaXMuaGVpZ2h0IC8gNCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gIHRpdGxlUmVjdFdpZHRoID0gdGhpcy53aWR0aCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ucmlnaHQ7XHJcbiAgdGl0bGVSZWN0SGVpZ2h0ID0gdGhpcy5ncmFwaEhlaWdodCAqIDIgLyAzIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi50b3AgKiAyO1xyXG4gIHZhbHVlUmVjdFdpZHRoID0gdGhpcy50aXRsZVJlY3RXaWR0aDtcclxuICB2YWx1ZVJlY3RIZWlnaHQgPSB0aGlzLmhlaWdodCAvIDMgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbTtcclxuICBjb21wYXJpc29uVmFsdWVSZWN0V2lkdGggPSB0aGlzLnRpdGxlUmVjdFdpZHRoO1xyXG4gIGNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgPSAodGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b20pIC8gMjtcclxuICBjb21wYXJpc29uVGV4dFJlY3RXaWR0aCA9IHRoaXMudGl0bGVSZWN0V2lkdGg7XHJcbiAgY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0ID0gKHRoaXMuaGVpZ2h0IC8gNCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tKSAvIDI7XHJcblxyXG4gIHggPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuICB5ID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwgMF0pO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzVmFsdWU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBwcmV2aW91c0NvbXBhcmlzb25WYWx1ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgLy9UbyByZW1vdmUgb25seSB0aGUgbnVtYmVycyB3aGlsZSBrZWVwaW5nIHRoZSB0aWNrcyBvbiB0aGUgYXhlcywgXHJcbiAgLy95b3UgY2FuIHNlbGVjdCB0aGUgdGV4dCBlbGVtZW50cyBvZiB0aGUgdGlja3MgYW5kIGhpZGUgdGhlbSB1c2luZyBDU1MuIFxyXG4gIC8vSGVyZSdzIGhvdyB5b3UgY2FuIG1vZGlmeSB0aGUgY29kZSB0byBhY2hpZXZlIHRoYXQ6XHJcblxyXG4gIHhBeGlzQ2FsbCA9IGQzLmF4aXNCb3R0b20odGhpcy54KVxyXG4gICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgIC50aWNrU2l6ZU91dGVyKDApOyAvLyBIaWRlIG91dGVyIHRpY2tzXHJcblxyXG4gIHlBeGlzQ2FsbCA9IGQzLmF4aXNMZWZ0KHRoaXMueSlcclxuICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAudGlja1NpemVPdXRlcigxMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCEhY2hhbmdlc1snbWV0cmljJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNOYW1lKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVGV4dCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1snZGF0YXNldCddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YXNldCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1sndmFsdWUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY1ZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoISFjaGFuZ2VzWydjb21wYXJpc29uVmFsdWUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljTmFtZSgpOiB2b2lkIHtcclxuICAgIHZhciBuYW1lRWxlbWVudCA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX25hbWVcIilcclxuICAgIG5hbWVFbGVtZW50LnRyYW5zaXRpb24oKS50ZXh0KHRoaXMubWV0cmljLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljVmFsdWUoKTogdm9pZCB7XHJcbiAgICB2YXIgdmFsdWVFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfdmFsdWVcIik7XHJcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucHJldmlvdXNWYWx1ZTtcclxuICAgIGNvbnN0IGVuZCA9IHRoaXMudmFsdWU7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmRhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuSU5URUdFUjpcclxuICAgICAgICB2YWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuREVDSU1BTDpcclxuICAgICAgICB2YWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuUEVSQ0VOVEFHRTpcclxuICAgICAgICB2YWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHZhbHVlRWxlbWVudC50cmFuc2l0aW9uKCkudGV4dCh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcmV2aW91c0NvbXBhcmlzb25WYWx1ZTtcclxuICAgIGNvbnN0IGVuZCA9IHRoaXMuY29tcGFyaXNvblZhbHVlO1xyXG4gICAgdmFyIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQgPSBkMy5zZWxlY3QoXCIjbWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl9jb21wYXJpc29uVmFsdWVcIik7XHJcbiAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50LmF0dHIoXCJmaWxsXCIsIHRoaXMuY29tcGFyaXNvblZhbHVlID49IDAgPyB0aGlzLmNvbXBhcmlzb25UZXh0RmlsbENvbG9yIDogZDMuY29sb3IoXCJyZWRcIikpO1xyXG4gICAgc3dpdGNoICh0aGlzLm1ldHJpYy5kYXRhVHlwZSkge1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLklOVEVHRVI6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuREVDSU1BTDpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDApIC8gMTAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMDAwKSAvIDEwMCArIFwiJVwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRyYW5zaXRpb24oKS50ZXh0KHRoaXMuY29tcGFyaXNvblZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljQ29tcGFyaXNvblRleHQoKTogdm9pZCB7XHJcbiAgICB2YXIgY29tcGFyaXNvblRleHRFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfY29tcGFyaXNvblRleHRcIik7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmNvbXBhcmlzb25Db2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUhyQ29tcGFyaXNvbkNvZGUuV0lUSF9QUkVWSU9VU19NT05USDpcclxuICAgICAgICBjb21wYXJpc29uVGV4dEVsZW1lbnQudGV4dChcInZzLiBwcmV2aW91cyBtb250aFwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSHJDb21wYXJpc29uQ29kZS5XSVRIX1BSRVZJT1VTX1lFQVI6XHJcbiAgICAgICAgY29tcGFyaXNvblRleHRFbGVtZW50LnRleHQoXCJ2cy4gcHJldmlvdXMgeWVhclwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb21wYXJpc29uVGV4dEVsZW1lbnQudGV4dChcIi1cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhc2V0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IG1pblBvaW50ID0gdGhpcy5kYXRhc2V0LnJlZHVjZSgobWluLCBjdXJyZW50KSA9PiBjdXJyZW50LnkgPCBtaW4ueSA/IGN1cnJlbnQgOiBtaW4pO1xyXG4gICAgY29uc3QgbWF4UG9pbnQgPSB0aGlzLmRhdGFzZXQucmVkdWNlKChtYXgsIGN1cnJlbnQpID0+IGN1cnJlbnQueSA+IG1heC55ID8gY3VycmVudCA6IG1heCk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHNjYWxlc1xyXG4gICAgY29uc3QgeFNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgodGhpcy5kYXRhc2V0LCBkID0+IGQueCldKVxyXG4gICAgICAucmFuZ2UoWzAsIHRoaXMuZ3JhcGhXaWR0aF0pO1xyXG5cclxuICAgIGNvbnN0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKClcclxuICAgICAgLmRvbWFpbihbbWluUG9pbnQueSwgbWF4UG9pbnQueV0pXHJcbiAgICAgIC5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwgMF0pO1xyXG5cclxuICAgIGNvbnN0IHhBeGlzQ2FsbCA9IGQzLmF4aXNCb3R0b20oeFNjYWxlKVxyXG4gICAgICAudGlja1NpemVJbm5lcigxMCkgLy8gQWRqdXN0IHRoZSBsZW5ndGggb2YgdGhlIHRpY2tzIGFzIG5lZWRlZFxyXG4gICAgICAudGlja1NpemVPdXRlcigwKTsgLy8gSGlkZSBvdXRlciB0aWNrc1xyXG5cclxuICAgIGNvbnN0IHlBeGlzQ2FsbCA9IGQzLmF4aXNMZWZ0KHlTY2FsZSlcclxuICAgICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgICAgLnRpY2tTaXplT3V0ZXIoMTApOyAvLyBEbyBub3QgaGlkZSBvdXRlciB0aWNrc1xyXG5cclxuICAgIC8vIFVwZGF0ZSBheGVzXHJcbiAgICAvL3hBeGlzLmNhbGwoeEF4aXNDYWxsKTtcclxuICAgIC8veUF4aXMuY2FsbCh5QXhpc0NhbGwpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBjb25uZWN0aW5nIGxpbmVcclxuICAgIHRoaXMuY29ubmVjdGluZ0xpbmUgPSBkMy5saW5lKClcclxuICAgICAgLngoZCA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgLnkoZCA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmRlZmluZWQoKGQsIGkpID0+IGkgPj0gMCAmJiBpIDwgdGhpcy5kYXRhc2V0Lmxlbmd0aCk7XHJcblxyXG4gICAgZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfc2NhdHRlci1wbG90XCIpLnNlbGVjdChcInBhdGhcIilcclxuICAgICAgLmRhdHVtKHRoaXMuZGF0YXNldClcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAuYXR0cihcImRcIiwgdGhpcy5jb25uZWN0aW5nTGluZSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGNpcmNsZXNcclxuICAgIGNvbnN0IGNpcmNsZXMgPSBkMy5zZWxlY3QoXCIjbWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl9zY2F0dGVyLXBsb3RcIikuc2VsZWN0QWxsKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5kYXRhKHRoaXMuZGF0YXNldCk7XHJcblxyXG4gICAgY2lyY2xlcy5leGl0KCkucmVtb3ZlKCk7XHJcblxyXG4gICAgY2lyY2xlcy5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcclxuICAgICAgLm1lcmdlKGNpcmNsZXMpXHJcbiAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgLmF0dHIoXCJjeFwiLCBkID0+IHhTY2FsZShkLngpKVxyXG4gICAgICAuYXR0cihcImN5XCIsIGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgIC5hdHRyKFwiclwiLCA1KVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgZCA9PiB7XHJcbiAgICAgICAgaWYgKGQgPT09IG1pblBvaW50KSByZXR1cm4gXCIjRkY4QzAwXCI7IC8vIFNldCBsb3dlc3QgcG9pbnQgdG8gI0ZGOEMwMFxyXG4gICAgICAgIGlmIChkID09PSBtYXhQb2ludCkgcmV0dXJuIFwiIzMxNTg5N1wiOyAvLyBTZXQgaGlnaGVzdCBwb2ludCB0byAjMzE1ODk3XHJcbiAgICAgICAgcmV0dXJuIFwibm9uZVwiOyAvLyBNYWtlIHRoZSBvdGhlciBwb2ludHMgdHJhbnNwYXJlbnRcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiNGRjhDMDBcIikuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjRkY4QzAwIGNvbG9yXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gZDMuY29sb3IoXCIjMzE1ODk3XCIpLmRhcmtlcigwLjIpOyAvLyBEYXJrZW4gIzMxNTg5NyBjb2xvclxyXG4gICAgICAgIHJldHVybiBcIm5vbmVcIjsgLy8gTm8gc3Ryb2tlIGZvciBvdGhlciBwb2ludHNcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMyk7IC8vIFNldCBzdHJva2Ugd2lkdGhcclxuICB9XHJcblxyXG4gIHN2ZzogYW55O1xyXG4gIGlubmVyR3JvdXA6IGFueTtcclxuICBncmVlbkdyb3VwOiBhbnk7XHJcbiAgdGl0bGVHcm91cDogYW55O1xyXG4gIHZhbHVlR3JvdXA6IGFueTtcclxuICB2YWx1ZVRleHQ6IGFueTtcclxuICBncmF5R3JvdXA6IGFueTtcclxuICBjb21wYXJpc29uVmFsdWVHcm91cDogYW55O1xyXG4gIGNvbXBhcmlzb25UZXh0R3JvdXA6IGFueTtcclxuICBjb21wYXJpc29uVmFsdWVUZXh0OiBhbnk7XHJcbiAgY29tcGFyaXNvblRleHRUZXh0OiBhbnk7XHJcbiAgY29ubmVjdGluZ0xpbmU6IGFueTtcclxuXHJcbiAgaW50ZXJ2YWxJZDogYW55O1xyXG5cclxuICBhc3luYyBkcmF3R3JhcGgoKSB7XHJcbiAgICB0aGlzLnN2ZyA9IGQzLnNlbGVjdCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxyXG4gICAgICAuYXBwZW5kKFwic3ZnXCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5vdXRlcldpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLm91dGVySGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLnN2Zy5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5vdXRlcldpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLm91dGVySGVpZ2h0KVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKTtcclxuXHJcbiAgICB0aGlzLmlubmVyR3JvdXAgPSB0aGlzLnN2Zy5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5tYXJnaW4ubGVmdCArIFwiLFwiICsgdGhpcy5tYXJnaW4udG9wICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMuaW5uZXJHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJibHVlLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmlubmVyV2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMuaW5uZXJIZWlnaHQpO1xyXG5cclxuICAgIHRoaXMuZ3JlZW5Hcm91cCA9IHRoaXMuaW5uZXJHcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5wYWRkaW5nLmxlZnQgKyBcIixcIiArIHRoaXMucGFkZGluZy50b3AgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyZWVuLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLndpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmhlaWdodCk7XHJcblxyXG4gICAgdGhpcy50aXRsZUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRpdGxlLWdyb3VwXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLnRvcCArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLnRpdGxlR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZS1yZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy50aXRsZVJlY3RXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy50aXRsZVJlY3RIZWlnaHQpO1xyXG5cclxuICAgIHRoaXMudGl0bGVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX25hbWVcIilcclxuICAgICAgLmF0dHIoXCJ4XCIsIHRoaXMudGl0bGVSZWN0V2lkdGggLyAyKVxyXG4gICAgICAuYXR0cihcInlcIiwgdGhpcy50aXRsZVJlY3RIZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtdGl0bGVcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMudGl0bGVGaWxsQ29sb3IpXHJcbiAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIHRoaXMudGl0bGVSZWN0SGVpZ2h0KVxyXG4gICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgIC50ZXh0KHRoaXMubWV0cmljLm5hbWUpO1xyXG5cclxuICAgIHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJsaW5lXCIpXHJcbiAgICAgIC5hdHRyKFwieDFcIiwgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0KVxyXG4gICAgICAuYXR0cihcInkxXCIsIHRoaXMuZ3JhcGhIZWlnaHQgKiAyIC8gMylcclxuICAgICAgLmF0dHIoXCJ4MlwiLCB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodClcclxuICAgICAgLmF0dHIoXCJ5MlwiLCB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIHRoaXMuZGl2aXNvckxpbmVTdHJva2VDb2xvcilcclxuICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgdGhpcy5kaXZpc29yTGluZVN0cm9rZVdpZHRoKTtcclxuXHJcbiAgICBjb25zdCB2YWx1ZUdyb3VwVHJhbnNsYXRlWSA9IHRoaXMuaGVpZ2h0IC8gMiAvIDMgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbTtcclxuICAgIHRoaXMudmFsdWVHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ2YWx1ZS1ncm91cFwiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLFwiICsgdmFsdWVHcm91cFRyYW5zbGF0ZVkgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy52YWx1ZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMudmFsdWVSZWN0V2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMudmFsdWVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLnZhbHVlVGV4dCA9IHRoaXMudmFsdWVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX3ZhbHVlXCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnZhbHVlUmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMudmFsdWVSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXZhbHVlXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLnZhbHVlRmlsbENvbG9yKVxyXG4gICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCAodGhpcy52YWx1ZUZvbnRTaXplIHx8IHRoaXMudmFsdWVSZWN0SGVpZ2h0KSArIFwicHhcIilcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKTtcclxuXHJcbiAgICBjb25zdCBzdGFydFZhbHVlID0gMDtcclxuICAgIGNvbnN0IGVuZFZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnRWYWx1ZSwgZW5kVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgdGhpcy52YWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuUEVSQ0VOVEFHRTpcclxuICAgICAgICB0aGlzLnZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0VmFsdWUsIGVuZFZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dCh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuXHJcbiAgICB0aGlzLmdyYXlHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX3NjYXR0ZXItcGxvdFwiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLCBcIiArIHRoaXMuaGVpZ2h0IC8gMiArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmdyYXlHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC1jb250YWluZXJcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIGQzLmNvbG9yKFwidHJhbnNwYXJlbnRcIikuYnJpZ2h0ZXIoMSkpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5ncmFwaFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmdyYXBoSGVpZ2h0KTtcclxuXHJcblxyXG4gICAgY29uc3QgeEF4aXMgPSB0aGlzLmdyYXlHcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ4IGF4aXNcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoMCxcIiArIHRoaXMuZ3JhcGhIZWlnaHQgKyBcIilcIik7XHJcblxyXG4gICAgY29uc3QgeUF4aXMgPSB0aGlzLmdyYXlHcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ5IGF4aXNcIik7XHJcblxyXG4gICAgLy94QXhpcy5jYWxsKHhBeGlzQ2FsbCk7XHJcbiAgICAvL3lBeGlzLmNhbGwoeUF4aXNDYWxsKTtcclxuXHJcbiAgICAvLyBTZWxlY3QgdGV4dCBlbGVtZW50cyBhc3NvY2lhdGVkIHdpdGggdGlja3MgYW5kIGhpZGUgdGhlbVxyXG4gICAgdGhpcy5ncmF5R3JvdXAuc2VsZWN0QWxsKFwiLnRpY2sgdGV4dFwiKS5hdHRyKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcblxyXG4gICAgY29uc3QgY29tcGFyaXNvblZhbHVlR3JvdXBUcmFuc2xhdGVZID0gdGhpcy5oZWlnaHQgKiAzIC8gNCArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gICAgdGhpcy5jb21wYXJpc29uVmFsdWVHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb21wYXJpc29uLXZhbHVlLWdyb3VwXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyBjb21wYXJpc29uVmFsdWVHcm91cFRyYW5zbGF0ZVkgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy5jb21wYXJpc29uVmFsdWVHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZhbHVlLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICBjb25zdCBjb21wYXJpc29uVmFsdWVUZXh0ID0gdGhpcy5jb21wYXJpc29uVmFsdWVHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX2NvbXBhcmlzb25WYWx1ZVwiKVxyXG4gICAgICAuYXR0cihcInhcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0V2lkdGggLyAyKVxyXG4gICAgICAuYXR0cihcInlcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXZhbHVlXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZSA+PSAwID8gdGhpcy5jb21wYXJpc29uVmFsdWVGaWxsQ29sb3IgOiBkMy5jb2xvcihcInJlZFwiKSlcclxuICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0SGVpZ2h0ICsgXCJweFwiKVxyXG4gICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5ERUNJTUFMOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDApIC8gMTAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KHRoaXMuY29tcGFyaXNvblZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c0NvbXBhcmlzb25WYWx1ZSA9IHRoaXMuY29tcGFyaXNvblZhbHVlO1xyXG5cclxuICAgIGNvbnN0IGNvbXBhcmlzb25UZXh0R3JvdXBUcmFuc2xhdGVZID0gdGhpcy5oZWlnaHQgKiAzIC8gNCArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tICsgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RIZWlnaHQ7XHJcbiAgICB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiY29tcGFyaXNvbi10ZXh0LWdyb3VwXCIpXHJcbiAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0ICsgXCIsXCIgKyBjb21wYXJpc29uVGV4dEdyb3VwVHJhbnNsYXRlWSArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0ZXh0LXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCk7XHJcblxyXG4gICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQgPSB0aGlzLmNvbXBhcmlzb25UZXh0R3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl9jb21wYXJpc29uVGV4dFwiKVxyXG4gICAgICAuYXR0cihcInhcIiwgdGhpcy5jb21wYXJpc29uVGV4dFJlY3RXaWR0aCAvIDIpXHJcbiAgICAgIC5hdHRyKFwieVwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC10ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0RmlsbENvbG9yKVxyXG4gICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodCAvIDIgKyBcInB4XCIpXHJcbiAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIik7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLm1ldHJpYy5jb21wYXJpc29uQ29kZSkge1xyXG4gICAgICBjYXNlIEVudW1IckNvbXBhcmlzb25Db2RlLldJVEhfUFJFVklPVVNfTU9OVEg6XHJcbiAgICAgICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQudGV4dChcInZzLiBwcmV2aW91cyBtb250aFwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSHJDb21wYXJpc29uQ29kZS5XSVRIX1BSRVZJT1VTX1lFQVI6XHJcbiAgICAgICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQudGV4dChcInZzLiBwcmV2aW91cyB5ZWFyXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuY29tcGFyaXNvblRleHRUZXh0LnRleHQoXCItXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXHJcblxyXG4gICAgY29uc3QgaW5pdGlhbERhdGFzZXQ6IGFueSA9IHRoaXMuZGF0YXNldDtcclxuICAgIGNvbnN0IG1pblBvaW50OiBhbnkgPSBpbml0aWFsRGF0YXNldC5yZWR1Y2UoKG1pbiwgY3VycmVudCkgPT4gY3VycmVudC55IDwgbWluLnkgPyBjdXJyZW50IDogbWluKTtcclxuICAgIGNvbnN0IG1heFBvaW50OiBhbnkgPSBpbml0aWFsRGF0YXNldC5yZWR1Y2UoKG1heCwgY3VycmVudCkgPT4gY3VycmVudC55ID4gbWF4LnkgPyBjdXJyZW50IDogbWF4KTtcclxuXHJcbiAgICBjb25zdCB4U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oWzAsIGQzLm1heChpbml0aWFsRGF0YXNldCwgZCA9PiBkLngpXSlcclxuICAgICAgLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuXHJcbiAgICBjb25zdCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oW21pblBvaW50LnksIG1heFBvaW50LnldKVxyXG4gICAgICAucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsIDBdKTtcclxuXHJcbiAgICB0aGlzLmNvbm5lY3RpbmdMaW5lID0gZDMubGluZSgpXHJcbiAgICAgIC54KGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC55KGQgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgIC5kZWZpbmVkKChkLCBpKSA9PiBpID49IDAgJiYgaSA8IGluaXRpYWxEYXRhc2V0Lmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuYXBwZW5kKFwicGF0aFwiKVxyXG4gICAgICAuZGF0dW0oaW5pdGlhbERhdGFzZXQpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJkYXJrZ3JheVwiKVxyXG4gICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKVxyXG4gICAgICAuYXR0cihcImRcIiwgdGhpcy5jb25uZWN0aW5nTGluZSk7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuc2VsZWN0QWxsKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5kYXRhKGluaXRpYWxEYXRhc2V0KVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5hdHRyKFwiY3hcIiwgZCA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgLmF0dHIoXCJjeVwiLCBkID0+IHlTY2FsZShkLnkpKVxyXG4gICAgICAuYXR0cihcInJcIiwgNSlcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIGQgPT4ge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIFwiI0ZGOEMwMFwiOyAvLyBTZXQgbG93ZXN0IHBvaW50IHRvICNGRjhDMDBcclxuICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBcIiMzMTU4OTdcIjsgLy8gU2V0IGhpZ2hlc3QgcG9pbnQgdG8gIzMxNTg5N1xyXG4gICAgICAgIHJldHVybiBcIm5vbmVcIjsgLy8gU2V0IHRoZSBvdGhlciBwb2ludHMgdHJhbnNwYXJlbnRcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiNGRjhDMDBcIikuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjRkY4QzAwIGNvbG9yXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gZDMuY29sb3IoXCIjMzE1ODk3XCIpLmRhcmtlcigwLjIpOyAvLyBEYXJrZW4gIzMxNTg5NyBjb2xvclxyXG4gICAgICAgIHJldHVybiBcIm5vbmVcIjsgLy8gTm8gc3Ryb2tlIGZvciBvdGhlciBwb2ludHNcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoXCJzdHJva2Utd2lkdGhcIiwgMyk7IC8vIFNldCBzdHJva2Ugd2lkdGhcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRyYXdHcmFwaCgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG59IiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LWNvbnRhaW5lclwiPlxyXG4gICAgXHJcbjwvZGl2PiJdfQ==
565
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9kMy9jb3JlLXN0YXRpc3RpYy13aWRnZXQvY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBNEIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDOztBQUV6QixNQUFNLENBQU4sSUFBWSxvQkFHWDtBQUhELFdBQVksb0JBQW9CO0lBQzlCLG1FQUEyQyxDQUFBO0lBQzNDLGlFQUF5QyxDQUFBO0FBQzNDLENBQUMsRUFIVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBRy9CO0FBU0QsTUFBTSxDQUFOLElBQVksZ0NBSVg7QUFKRCxXQUFZLGdDQUFnQztJQUMxQyx1REFBbUIsQ0FBQTtJQUNuQix1REFBbUIsQ0FBQTtJQUNuQiw2REFBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSlcsZ0NBQWdDLEtBQWhDLGdDQUFnQyxRQUkzQztBQThCRCxNQUFNLE9BQU8sNEJBQTRCO0lBVHpDO1FBYTZCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsb0JBQWUsR0FBdUIsSUFBSSxDQUFDO1FBRzdELFdBQU0sR0FBd0IsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUs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QyxDQUFDLG1CQUFtQjtJQUNqRCxDQUFDO0lBRUQsZUFBZTtRQUNiLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzhHQTdqQlUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsZ3dCQ2pEekMsOEVBRU07OzJGRCtDTyw0QkFBNEI7a0JBVHhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxFQUVSOzhCQU0wQixNQUFNO3NCQUFoQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxPQUFPO3NCQUFqQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxLQUFLO3NCQUEvQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDRSxlQUFlO3NCQUF6QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFFaEIsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVrQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcblxyXG5leHBvcnQgZW51bSBFbnVtSHJDb21wYXJpc29uQ29kZSB7XHJcbiAgV0lUSF9QUkVWSU9VU19NT05USCA9ICdXSVRIX1BSRVZJT1VTX01PTlRIJyxcclxuICBXSVRIX1BSRVZJT1VTX1lFQVIgPSAnV0lUSF9QUkVWSU9VU19ZRUFSJyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSHJNZXRyaWMge1xyXG4gIGlkOiBudW1iZXI7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGNvbXBhcmlzb25Db2RlOiBFbnVtSHJDb21wYXJpc29uQ29kZTtcclxuICBkYXRhVHlwZTogRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlIHtcclxuICBJTlRFR0VSID0gJ0lOVEVHRVInLFxyXG4gIERFQ0lNQUwgPSAnREVDSU1BTCcsXHJcbiAgUEVSQ0VOVEFHRSA9ICdQRVJDRU5UQUdFJyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR3JhcGhNYXJnaW5QYWRkaW5nIHtcclxuICB0b3A6IG51bWJlcjtcclxuICByaWdodDogbnVtYmVyO1xyXG4gIGJvdHRvbTogbnVtYmVyO1xyXG4gIGxlZnQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVN0YXRpc3RpY1dpZGdldERhdGFzZXQge1xyXG4gIHg6IG51bWJlcjtcclxuICB5OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVTdGF0aXN0aWNXaWRnZXRJbnB1dHMge1xyXG4gIG1ldHJpYzogSUhyTWV0cmljO1xyXG4gIGRhdGFzZXQ6IElDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YXNldFtdO1xyXG4gIHZhbHVlOiBudW1iZXI7XHJcbiAgY29tcGFyaXNvblZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1zdGF0aXN0aWMtd2lkZ2V0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vY29yZS1zdGF0aXN0aWMtd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVN0YXRpc3RpY1dpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG1ldHJpYyE6IElIck1ldHJpYztcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkYXRhc2V0ITogSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhc2V0W107XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgdmFsdWU6IG51bWJlciA9IDk2O1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbXBhcmlzb25WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gMC41NDtcclxuXHJcbiAgQElucHV0KCkgdmFsdWVGb250U2l6ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBtYXJnaW46IElHcmFwaE1hcmdpblBhZGRpbmcgPSB7IHRvcDogMzAsIHJpZ2h0OiAzMCwgYm90dG9tOiAzMCwgbGVmdDogMzAgfTtcclxuICBASW5wdXQoKSBwYWRkaW5nOiBJR3JhcGhNYXJnaW5QYWRkaW5nID0geyB0b3A6IDMwLCByaWdodDogMzAsIGJvdHRvbTogMzAsIGxlZnQ6IDMwIH07XHJcbiAgQElucHV0KCkgb3V0ZXJXaWR0aDogbnVtYmVyID0gMzIwO1xyXG4gIEBJbnB1dCgpIG91dGVySGVpZ2h0OiBudW1iZXIgPSAzMjA7XHJcbiAgQElucHV0KCkgZGl2aXNvckxpbmVNYXJnaW46IElHcmFwaE1hcmdpblBhZGRpbmcgPSB7IHRvcDogNCwgcmlnaHQ6IDgsIGJvdHRvbTogOCwgbGVmdDogOCB9O1xyXG4gIEBJbnB1dCgpIHRpdGxlRmlsbENvbG9yOiBhbnkgPSBkMy5jb2xvcihcImJsYWNrXCIpO1xyXG4gIEBJbnB1dCgpIGRpdmlzb3JMaW5lU3Ryb2tlQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiZ3JheVwiKTtcclxuICBASW5wdXQoKSBkaXZpc29yTGluZVN0cm9rZVdpZHRoOiBudW1iZXIgPSAzO1xyXG4gIEBJbnB1dCgpIHZhbHVlRmlsbENvbG9yOiBhbnkgPSBkMy5jb2xvcihcImJsYWNrXCIpO1xyXG5cclxuICBASW5wdXQoKSBjb21wYXJpc29uVmFsdWVGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgY29tcGFyaXNvblRleHRGaWxsQ29sb3I6IGFueSA9IGQzLmNvbG9yKFwiYmxhY2tcIik7XHJcbiAgQElucHV0KCkgc2hvd0F4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgaW5uZXJXaWR0aCA9IHRoaXMub3V0ZXJXaWR0aCAtIHRoaXMubWFyZ2luLmxlZnQgLSB0aGlzLm1hcmdpbi5yaWdodDtcclxuICBpbm5lckhlaWdodCA9IHRoaXMub3V0ZXJIZWlnaHQgLSB0aGlzLm1hcmdpbi50b3AgLSB0aGlzLm1hcmdpbi5ib3R0b207XHJcbiAgd2lkdGggPSB0aGlzLmlubmVyV2lkdGggLSB0aGlzLnBhZGRpbmcubGVmdCAtIHRoaXMucGFkZGluZy5yaWdodDtcclxuICBoZWlnaHQgPSB0aGlzLmlubmVySGVpZ2h0IC0gdGhpcy5wYWRkaW5nLnRvcCAtIHRoaXMucGFkZGluZy5ib3R0b207XHJcblxyXG4gIGdyYXBoV2lkdGggPSB0aGlzLndpZHRoIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5sZWZ0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5yaWdodDtcclxuICBncmFwaEhlaWdodCA9IHRoaXMuaGVpZ2h0IC8gNCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tO1xyXG4gIHRpdGxlUmVjdFdpZHRoID0gdGhpcy53aWR0aCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ucmlnaHQ7XHJcbiAgdGl0bGVSZWN0SGVpZ2h0ID0gdGhpcy5ncmFwaEhlaWdodCAqIDIgLyAzIC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi50b3AgKiAyO1xyXG4gIHZhbHVlUmVjdFdpZHRoID0gdGhpcy50aXRsZVJlY3RXaWR0aDtcclxuICB2YWx1ZVJlY3RIZWlnaHQgPSB0aGlzLmhlaWdodCAvIDMgLSB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmJvdHRvbTtcclxuICBjb21wYXJpc29uVmFsdWVSZWN0V2lkdGggPSB0aGlzLnRpdGxlUmVjdFdpZHRoO1xyXG4gIGNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgPSAodGhpcy5oZWlnaHQgLyA0IC0gdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b20pIC8gMjtcclxuICBjb21wYXJpc29uVGV4dFJlY3RXaWR0aCA9IHRoaXMudGl0bGVSZWN0V2lkdGg7XHJcbiAgY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0ID0gKHRoaXMuaGVpZ2h0IC8gNCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4uYm90dG9tKSAvIDI7XHJcblxyXG4gIHggPSBkMy5zY2FsZUxpbmVhcigpLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuICB5ID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwgMF0pO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzVmFsdWU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBwcmV2aW91c0NvbXBhcmlzb25WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcclxuXHJcbiAgLy9UbyByZW1vdmUgb25seSB0aGUgbnVtYmVycyB3aGlsZSBrZWVwaW5nIHRoZSB0aWNrcyBvbiB0aGUgYXhlcywgXHJcbiAgLy95b3UgY2FuIHNlbGVjdCB0aGUgdGV4dCBlbGVtZW50cyBvZiB0aGUgdGlja3MgYW5kIGhpZGUgdGhlbSB1c2luZyBDU1MuIFxyXG4gIC8vSGVyZSdzIGhvdyB5b3UgY2FuIG1vZGlmeSB0aGUgY29kZSB0byBhY2hpZXZlIHRoYXQ6XHJcblxyXG4gIHhBeGlzQ2FsbCA9IGQzLmF4aXNCb3R0b20odGhpcy54KVxyXG4gICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgIC50aWNrU2l6ZU91dGVyKDApOyAvLyBIaWRlIG91dGVyIHRpY2tzXHJcblxyXG4gIHlBeGlzQ2FsbCA9IGQzLmF4aXNMZWZ0KHRoaXMueSlcclxuICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAudGlja1NpemVPdXRlcigxMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCEhY2hhbmdlc1snbWV0cmljJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNOYW1lKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVmFsdWUoKTtcclxuICAgICAgdGhpcy51cGRhdGVNZXRyaWNDb21wYXJpc29uVGV4dCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1snZGF0YXNldCddKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YXNldCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhY2hhbmdlc1sndmFsdWUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY1ZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoISFjaGFuZ2VzWydjb21wYXJpc29uVmFsdWUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljTmFtZSgpOiB2b2lkIHtcclxuICAgIHZhciBuYW1lRWxlbWVudCA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX25hbWVcIilcclxuICAgIG5hbWVFbGVtZW50LnRyYW5zaXRpb24oKS50ZXh0KHRoaXMubWV0cmljLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljVmFsdWUoKTogdm9pZCB7XHJcbiAgICB2YXIgdmFsdWVFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfdmFsdWVcIik7XHJcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucHJldmlvdXNWYWx1ZTtcclxuICAgIGNvbnN0IGVuZCA9IHRoaXMudmFsdWU7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmRhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuSU5URUdFUjpcclxuICAgICAgICB2YWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuREVDSU1BTDpcclxuICAgICAgICB2YWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuUEVSQ0VOVEFHRTpcclxuICAgICAgICB2YWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIHZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHZhbHVlRWxlbWVudC50cmFuc2l0aW9uKCkudGV4dCh0aGlzLnZhbHVlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldHJpY0NvbXBhcmlzb25WYWx1ZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXJ0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLnByZXZpb3VzQ29tcGFyaXNvblZhbHVlO1xyXG4gICAgY29uc3QgZW5kOiBudW1iZXIgfCB1bmRlZmluZWQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZTtcclxuICAgIHZhciBjb21wYXJpc29uVmFsdWVFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfY29tcGFyaXNvblZhbHVlXCIpO1xyXG4gICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC5hdHRyKFwiZmlsbFwiLCAodGhpcy5jb21wYXJpc29uVmFsdWUgfHwgMCkgPj0gMCA/IHRoaXMuY29tcGFyaXNvblRleHRGaWxsQ29sb3IgOiBkMy5jb2xvcihcInJlZFwiKSk7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmRhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuSU5URUdFUjpcclxuICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCEhc3RhcnQgJiYgISFlbmQpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoXCJOL0FcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLkRFQ0lNQUw6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghIXN0YXJ0ICYmICEhZW5kKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwKSAvIDEwMClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIF8gPT4gY29tcGFyaXNvblZhbHVlRWxlbWVudC50ZXh0KFwiTi9BXCIpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoISFzdGFydCAmJiAhIWVuZCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbXBhcmlzb25WYWx1ZUVsZW1lbnQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMDAwKSAvIDEwMCArIFwiJVwiKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gXyA9PiBjb21wYXJpc29uVmFsdWVFbGVtZW50LnRleHQoXCJOL0FcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlRWxlbWVudC50cmFuc2l0aW9uKCkudGV4dCgodGhpcy5jb21wYXJpc29uVmFsdWUgfHwgJ04vQScpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWV0cmljQ29tcGFyaXNvblRleHQoKTogdm9pZCB7XHJcbiAgICB2YXIgY29tcGFyaXNvblRleHRFbGVtZW50ID0gZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfY29tcGFyaXNvblRleHRcIik7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmNvbXBhcmlzb25Db2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUhyQ29tcGFyaXNvbkNvZGUuV0lUSF9QUkVWSU9VU19NT05USDpcclxuICAgICAgICBjb21wYXJpc29uVGV4dEVsZW1lbnQudGV4dChcInZzLiBwcmV2aW91cyBtb250aFwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSHJDb21wYXJpc29uQ29kZS5XSVRIX1BSRVZJT1VTX1lFQVI6XHJcbiAgICAgICAgY29tcGFyaXNvblRleHRFbGVtZW50LnRleHQoXCJ2cy4gcHJldmlvdXMgeWVhclwiKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBjb21wYXJpc29uVGV4dEVsZW1lbnQudGV4dChcIi1cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhc2V0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IG1pblBvaW50ID0gdGhpcy5kYXRhc2V0LnJlZHVjZSgobWluLCBjdXJyZW50KSA9PiBjdXJyZW50LnkgPCBtaW4ueSA/IGN1cnJlbnQgOiBtaW4pO1xyXG4gICAgY29uc3QgbWF4UG9pbnQgPSB0aGlzLmRhdGFzZXQucmVkdWNlKChtYXgsIGN1cnJlbnQpID0+IGN1cnJlbnQueSA+IG1heC55ID8gY3VycmVudCA6IG1heCk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHNjYWxlc1xyXG4gICAgY29uc3QgeFNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgodGhpcy5kYXRhc2V0LCAoZDogYW55KSA9PiBkLngpXSlcclxuICAgICAgLnJhbmdlKFswLCB0aGlzLmdyYXBoV2lkdGhdKTtcclxuXHJcbiAgICBjb25zdCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpXHJcbiAgICAgIC5kb21haW4oW21pblBvaW50LnksIG1heFBvaW50LnldKVxyXG4gICAgICAucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsIDBdKTtcclxuXHJcbiAgICBjb25zdCB4QXhpc0NhbGwgPSBkMy5heGlzQm90dG9tKHhTY2FsZSlcclxuICAgICAgLnRpY2tTaXplSW5uZXIoMTApIC8vIEFkanVzdCB0aGUgbGVuZ3RoIG9mIHRoZSB0aWNrcyBhcyBuZWVkZWRcclxuICAgICAgLnRpY2tTaXplT3V0ZXIoMCk7IC8vIEhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgICBjb25zdCB5QXhpc0NhbGwgPSBkMy5heGlzTGVmdCh5U2NhbGUpXHJcbiAgICAgIC50aWNrU2l6ZUlubmVyKDEwKSAvLyBBZGp1c3QgdGhlIGxlbmd0aCBvZiB0aGUgdGlja3MgYXMgbmVlZGVkXHJcbiAgICAgIC50aWNrU2l6ZU91dGVyKDEwKTsgLy8gRG8gbm90IGhpZGUgb3V0ZXIgdGlja3NcclxuXHJcbiAgICAvLyBVcGRhdGUgYXhlc1xyXG4gICAgLy94QXhpcy5jYWxsKHhBeGlzQ2FsbCk7XHJcbiAgICAvL3lBeGlzLmNhbGwoeUF4aXNDYWxsKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgY29ubmVjdGluZyBsaW5lXHJcbiAgICB0aGlzLmNvbm5lY3RpbmdMaW5lID0gZDMubGluZSgpXHJcbiAgICAgIC54KChkOiBhbnkpID0+IHhTY2FsZShkLngpKVxyXG4gICAgICAueSgoZDogYW55KSA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmRlZmluZWQoKGQsIGkpID0+IGkgPj0gMCAmJiBpIDwgdGhpcy5kYXRhc2V0Lmxlbmd0aCk7XHJcblxyXG4gICAgZDMuc2VsZWN0KFwiI21ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfc2NhdHRlci1wbG90XCIpLnNlbGVjdChcInBhdGhcIilcclxuICAgICAgLmRhdHVtKHRoaXMuZGF0YXNldClcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAuYXR0cihcImRcIiwgdGhpcy5jb25uZWN0aW5nTGluZSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGNpcmNsZXNcclxuICAgIGNvbnN0IGNpcmNsZXM6IGFueSA9IGQzLnNlbGVjdChcIiNtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX3NjYXR0ZXItcGxvdFwiKS5zZWxlY3RBbGwoXCJjaXJjbGVcIilcclxuICAgICAgLmRhdGEodGhpcy5kYXRhc2V0KTtcclxuXHJcbiAgICBjaXJjbGVzLmV4aXQoKS5yZW1vdmUoKTtcclxuXHJcbiAgICBjaXJjbGVzLmVudGVyKClcclxuICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAubWVyZ2UoY2lyY2xlcylcclxuICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAuYXR0cihcImN4XCIsIGQgPT4geFNjYWxlKGQueCkpXHJcbiAgICAgIC5hdHRyKFwiY3lcIiwgZCA9PiB5U2NhbGUoZC55KSlcclxuICAgICAgLmF0dHIoXCJyXCIsIDUpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkID0+IHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBcIiNGRjhDMDBcIjsgLy8gU2V0IGxvd2VzdCBwb2ludCB0byAjRkY4QzAwXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gXCIjMzE1ODk3XCI7IC8vIFNldCBoaWdoZXN0IHBvaW50IHRvICMzMTU4OTdcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE1ha2UgdGhlIG90aGVyIHBvaW50cyB0cmFuc3BhcmVudFxyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIGQzLmNvbG9yKFwiI0ZGOEMwMFwiKSEuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjRkY4QzAwIGNvbG9yXHJcbiAgICAgICAgaWYgKGQgPT09IG1heFBvaW50KSByZXR1cm4gZDMuY29sb3IoXCIjMzE1ODk3XCIpIS5kYXJrZXIoMC4yKTsgLy8gRGFya2VuICMzMTU4OTcgY29sb3JcclxuICAgICAgICByZXR1cm4gXCJub25lXCI7IC8vIE5vIHN0cm9rZSBmb3Igb3RoZXIgcG9pbnRzXHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDMpOyAvLyBTZXQgc3Ryb2tlIHdpZHRoXHJcbiAgfVxyXG5cclxuICBzdmc6IGFueTtcclxuICBpbm5lckdyb3VwOiBhbnk7XHJcbiAgZ3JlZW5Hcm91cDogYW55O1xyXG4gIHRpdGxlR3JvdXA6IGFueTtcclxuICB2YWx1ZUdyb3VwOiBhbnk7XHJcbiAgdmFsdWVUZXh0OiBhbnk7XHJcbiAgZ3JheUdyb3VwOiBhbnk7XHJcbiAgY29tcGFyaXNvblZhbHVlR3JvdXA6IGFueTtcclxuICBjb21wYXJpc29uVGV4dEdyb3VwOiBhbnk7XHJcbiAgY29tcGFyaXNvblZhbHVlVGV4dDogYW55O1xyXG4gIGNvbXBhcmlzb25UZXh0VGV4dDogYW55O1xyXG4gIGNvbm5lY3RpbmdMaW5lOiBhbnk7XHJcblxyXG4gIGludGVydmFsSWQ6IGFueTtcclxuXHJcbiAgYXN5bmMgZHJhd0dyYXBoKCkge1xyXG4gICAgdGhpcy5zdmcgPSBkMy5zZWxlY3QodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudClcclxuICAgICAgLmFwcGVuZChcInN2Z1wiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMub3V0ZXJXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodCk7XHJcblxyXG4gICAgdGhpcy5zdmcuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMub3V0ZXJXaWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5vdXRlckhlaWdodClcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XHJcblxyXG4gICAgdGhpcy5pbm5lckdyb3VwID0gdGhpcy5zdmcuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMubWFyZ2luLmxlZnQgKyBcIixcIiArIHRoaXMubWFyZ2luLnRvcCArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmlubmVyR3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiYmx1ZS1yZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy5pbm5lcldpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmlubmVySGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLmdyZWVuR3JvdXAgPSB0aGlzLmlubmVyR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMucGFkZGluZy5sZWZ0ICsgXCIsXCIgKyB0aGlzLnBhZGRpbmcudG9wICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmVlbi1yZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpXHJcbiAgICAgIC5hdHRyKFwid2lkdGhcIiwgdGhpcy53aWR0aClcclxuICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGhpcy5oZWlnaHQpO1xyXG5cclxuICAgIHRoaXMudGl0bGVHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0aXRsZS1ncm91cFwiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdCArIFwiLFwiICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi50b3AgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy50aXRsZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidGl0bGUtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMudGl0bGVSZWN0V2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMudGl0bGVSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLnRpdGxlR3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl9uYW1lXCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLnRpdGxlUmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMudGl0bGVSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRpdGxlXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCB0aGlzLnRpdGxlRmlsbENvbG9yKVxyXG4gICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCB0aGlzLnRpdGxlUmVjdEhlaWdodClcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAudGV4dCh0aGlzLm1ldHJpYy5uYW1lKTtcclxuXHJcbiAgICB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwibGluZVwiKVxyXG4gICAgICAuYXR0cihcIngxXCIsIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ubGVmdClcclxuICAgICAgLmF0dHIoXCJ5MVwiLCB0aGlzLmdyYXBoSGVpZ2h0ICogMiAvIDMpXHJcbiAgICAgIC5hdHRyKFwieDJcIiwgdGhpcy53aWR0aCAtIHRoaXMuZGl2aXNvckxpbmVNYXJnaW4ucmlnaHQpXHJcbiAgICAgIC5hdHRyKFwieTJcIiwgdGhpcy5ncmFwaEhlaWdodCAqIDIgLyAzKVxyXG4gICAgICAuYXR0cihcInN0cm9rZVwiLCB0aGlzLmRpdmlzb3JMaW5lU3Ryb2tlQ29sb3IpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIHRoaXMuZGl2aXNvckxpbmVTdHJva2VXaWR0aCk7XHJcblxyXG4gICAgY29uc3QgdmFsdWVHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAvIDIgLyAzICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgICB0aGlzLnZhbHVlR3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIHZhbHVlR3JvdXBUcmFuc2xhdGVZICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMudmFsdWVHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInZhbHVlLXJlY3RcIilcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLnZhbHVlUmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLnZhbHVlUmVjdEhlaWdodCk7XHJcblxyXG4gICAgdGhpcy52YWx1ZVRleHQgPSB0aGlzLnZhbHVlR3JvdXAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl92YWx1ZVwiKVxyXG4gICAgICAuYXR0cihcInhcIiwgdGhpcy52YWx1ZVJlY3RXaWR0aCAvIDIpXHJcbiAgICAgIC5hdHRyKFwieVwiLCB0aGlzLnZhbHVlUmVjdEhlaWdodCAvIDIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJncmFwaC12YWx1ZVwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgdGhpcy52YWx1ZUZpbGxDb2xvcilcclxuICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgKHRoaXMudmFsdWVGb250U2l6ZSB8fCB0aGlzLnZhbHVlUmVjdEhlaWdodCkgKyBcInB4XCIpXHJcbiAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgXCJtaWRkbGVcIilcclxuICAgICAgLmF0dHIoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIik7XHJcblxyXG4gICAgY29uc3Qgc3RhcnRWYWx1ZSA9IDA7XHJcbiAgICBjb25zdCBlbmRWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmRhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUlDb3JlU3RhdGlzdGljV2lkZ2V0RGF0YVR5cGUuSU5URUdFUjpcclxuICAgICAgICB0aGlzLnZhbHVlVGV4dFxyXG4gICAgICAgICAgLnRyYW5zaXRpb24oKVxyXG4gICAgICAgICAgLnR3ZWVuKFwidGV4dFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGludGVycG9sYXRvciA9IGQzLmludGVycG9sYXRlTnVtYmVyKHN0YXJ0VmFsdWUsIGVuZFZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHQgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5ERUNJTUFMOlxyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0XHJcbiAgICAgICAgICAudHJhbnNpdGlvbigpXHJcbiAgICAgICAgICAudHdlZW4oXCJ0ZXh0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gZDMuaW50ZXJwb2xhdGVOdW1iZXIoc3RhcnRWYWx1ZSwgZW5kVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZVRleHQudGV4dChNYXRoLnJvdW5kKGludGVycG9sYXRvcih0KSAqIDEwMCkgLyAxMDApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1JQ29yZVN0YXRpc3RpY1dpZGdldERhdGFUeXBlLlBFUkNFTlRBR0U6XHJcbiAgICAgICAgdGhpcy52YWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnZhbHVlVGV4dC50ZXh0KE1hdGgucm91bmQoaW50ZXJwb2xhdG9yKHQpICogMTAwMDApIC8gMTAwICsgXCIlXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZHVyYXRpb24oNTAwKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMudmFsdWVUZXh0LnRleHQodGhpcy52YWx1ZS50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMucHJldmlvdXNWYWx1ZSA9IHRoaXMudmFsdWU7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAgPSB0aGlzLmdyZWVuR3JvdXAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAuYXR0cihcImlkXCIsIFwibWV0cmljX1wiICsgdGhpcy5tZXRyaWMuaWQgKyBcIl9zY2F0dGVyLXBsb3RcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIiwgXCIgKyB0aGlzLmhlaWdodCAvIDIgKyBcIilcIik7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtY29udGFpbmVyXCIpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBkMy5jb2xvcihcInRyYW5zcGFyZW50XCIpIS5icmlnaHRlcigxKSlcclxuICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0aGlzLmdyYXBoV2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMuZ3JhcGhIZWlnaHQpO1xyXG5cclxuXHJcbiAgICBjb25zdCB4QXhpcyA9IHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInggYXhpc1wiKVxyXG4gICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZSgwLFwiICsgdGhpcy5ncmFwaEhlaWdodCArIFwiKVwiKTtcclxuXHJcbiAgICBjb25zdCB5QXhpcyA9IHRoaXMuZ3JheUdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInkgYXhpc1wiKTtcclxuXHJcbiAgICAvL3hBeGlzLmNhbGwoeEF4aXNDYWxsKTtcclxuICAgIC8veUF4aXMuY2FsbCh5QXhpc0NhbGwpO1xyXG5cclxuICAgIC8vIFNlbGVjdCB0ZXh0IGVsZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aWNrcyBhbmQgaGlkZSB0aGVtXHJcbiAgICB0aGlzLmdyYXlHcm91cC5zZWxlY3RBbGwoXCIudGljayB0ZXh0XCIpLmF0dHIoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuXHJcbiAgICBjb25zdCBjb21wYXJpc29uVmFsdWVHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAqIDMgLyA0ICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b207XHJcbiAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwID0gdGhpcy5ncmVlbkdyb3VwLmFwcGVuZChcImdcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImNvbXBhcmlzb24tdmFsdWUtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIGNvbXBhcmlzb25WYWx1ZUdyb3VwVHJhbnNsYXRlWSArIFwiKVwiKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwidmFsdWUtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMuY29tcGFyaXNvblZhbHVlUmVjdFdpZHRoKVxyXG4gICAgICAuYXR0cihcImhlaWdodFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQpO1xyXG5cclxuICAgIGNvbnN0IGNvbXBhcmlzb25WYWx1ZVRleHQgPSB0aGlzLmNvbXBhcmlzb25WYWx1ZUdyb3VwLmFwcGVuZChcInRleHRcIilcclxuICAgICAgLmF0dHIoXCJpZFwiLCBcIm1ldHJpY19cIiArIHRoaXMubWV0cmljLmlkICsgXCJfY29tcGFyaXNvblZhbHVlXCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RXaWR0aCAvIDIpXHJcbiAgICAgIC5hdHRyKFwieVwiLCB0aGlzLmNvbXBhcmlzb25WYWx1ZVJlY3RIZWlnaHQgLyAyKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIsIFwiZ3JhcGgtdmFsdWVcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsICh0aGlzLmNvbXBhcmlzb25WYWx1ZSB8fCAwKSA+PSAwID8gdGhpcy5jb21wYXJpc29uVmFsdWVGaWxsQ29sb3IgOiBkMy5jb2xvcihcInJlZFwiKSlcclxuICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgdGhpcy5jb21wYXJpc29uVmFsdWVSZWN0SGVpZ2h0ICsgXCJweFwiKVxyXG4gICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgIC5hdHRyKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5tZXRyaWMuZGF0YVR5cGUpIHtcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5JTlRFR0VSOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5ERUNJTUFMOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDApIC8gMTAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmR1cmF0aW9uKDUwMClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtSUNvcmVTdGF0aXN0aWNXaWRnZXREYXRhVHlwZS5QRVJDRU5UQUdFOlxyXG4gICAgICAgIGNvbXBhcmlzb25WYWx1ZVRleHRcclxuICAgICAgICAgIC50cmFuc2l0aW9uKClcclxuICAgICAgICAgIC50d2VlbihcInRleHRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0b3IgPSBkMy5pbnRlcnBvbGF0ZU51bWJlcihzdGFydFZhbHVlLCBlbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0ID0+IHtcclxuICAgICAgICAgICAgICBjb21wYXJpc29uVmFsdWVUZXh0LnRleHQoTWF0aC5yb3VuZChpbnRlcnBvbGF0b3IodCkgKiAxMDAwMCkgLyAxMDAgKyBcIiVcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5kdXJhdGlvbig1MDApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29tcGFyaXNvblZhbHVlVGV4dC50ZXh0KCh0aGlzLmNvbXBhcmlzb25WYWx1ZSB8fCAnTi9BJykudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByZXZpb3VzQ29tcGFyaXNvblZhbHVlID0gdGhpcy5jb21wYXJpc29uVmFsdWU7XHJcblxyXG4gICAgY29uc3QgY29tcGFyaXNvblRleHRHcm91cFRyYW5zbGF0ZVkgPSB0aGlzLmhlaWdodCAqIDMgLyA0ICsgdGhpcy5kaXZpc29yTGluZU1hcmdpbi5ib3R0b20gKyB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdEhlaWdodDtcclxuICAgIHRoaXMuY29tcGFyaXNvblRleHRHcm91cCA9IHRoaXMuZ3JlZW5Hcm91cC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJjb21wYXJpc29uLXRleHQtZ3JvdXBcIilcclxuICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLmRpdmlzb3JMaW5lTWFyZ2luLmxlZnQgKyBcIixcIiArIGNvbXBhcmlzb25UZXh0R3JvdXBUcmFuc2xhdGVZICsgXCIpXCIpO1xyXG5cclxuICAgIHRoaXMuY29tcGFyaXNvblRleHRHcm91cC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRleHQtcmVjdFwiKVxyXG4gICAgICAuYXR0cihcIndpZHRoXCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0V2lkdGgpXHJcbiAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0KTtcclxuXHJcbiAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dCA9IHRoaXMuY29tcGFyaXNvblRleHRHcm91cC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwiaWRcIiwgXCJtZXRyaWNfXCIgKyB0aGlzLm1ldHJpYy5pZCArIFwiX2NvbXBhcmlzb25UZXh0XCIpXHJcbiAgICAgIC5hdHRyKFwieFwiLCB0aGlzLmNvbXBhcmlzb25UZXh0UmVjdFdpZHRoIC8gMilcclxuICAgICAgLmF0dHIoXCJ5XCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0IC8gMilcclxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcImdyYXBoLXRleHRcIilcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIHRoaXMuY29tcGFyaXNvblRleHRGaWxsQ29sb3IpXHJcbiAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIHRoaXMuY29tcGFyaXNvblRleHRSZWN0SGVpZ2h0IC8gMiArIFwicHhcIilcclxuICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAuYXR0cihcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubWV0cmljLmNvbXBhcmlzb25Db2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUhyQ29tcGFyaXNvbkNvZGUuV0lUSF9QUkVWSU9VU19NT05USDpcclxuICAgICAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dC50ZXh0KFwidnMuIHByZXZpb3VzIG1vbnRoXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1IckNvbXBhcmlzb25Db2RlLldJVEhfUFJFVklPVVNfWUVBUjpcclxuICAgICAgICB0aGlzLmNvbXBhcmlzb25UZXh0VGV4dC50ZXh0KFwidnMuIHByZXZpb3VzIHllYXJcIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5jb21wYXJpc29uVGV4dFRleHQudGV4dChcIi1cIik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cclxuXHJcbiAgICBjb25zdCBpbml0aWFsRGF0YXNldDogYW55W10gPSB0aGlzLmRhdGFzZXQ7XHJcbiAgICBjb25zdCBtaW5Qb2ludDogYW55ID0gaW5pdGlhbERhdGFzZXQucmVkdWNlKChtaW4sIGN1cnJlbnQpID0+IGN1cnJlbnQueSA8IG1pbi55ID8gY3VycmVudCA6IG1pbik7XHJcbiAgICBjb25zdCBtYXhQb2ludDogYW55ID0gaW5pdGlhbERhdGFzZXQucmVkdWNlKChtYXgsIGN1cnJlbnQpID0+IGN1cnJlbnQueSA+IG1heC55ID8gY3VycmVudCA6IG1heCk7XHJcblxyXG4gICAgY29uc3QgeFNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFswLCBkMy5tYXgoaW5pdGlhbERhdGFzZXQsIGQgPT4gZC54KV0pXHJcbiAgICAgIC5yYW5nZShbMCwgdGhpcy5ncmFwaFdpZHRoXSk7XHJcblxyXG4gICAgY29uc3QgeVNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAuZG9tYWluKFttaW5Qb2ludC55LCBtYXhQb2ludC55XSlcclxuICAgICAgLnJhbmdlKFt0aGlzLmdyYXBoSGVpZ2h0LCAwXSk7XHJcblxyXG4gICAgdGhpcy5jb25uZWN0aW5nTGluZSA9IGQzLmxpbmUoKVxyXG4gICAgICAueCgoZDogYW55KSA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgLnkoKGQ6IGFueSkgPT4geVNjYWxlKGQueSkpXHJcbiAgICAgIC5kZWZpbmVkKChkLCBpKSA9PiBpID49IDAgJiYgaSA8IGluaXRpYWxEYXRhc2V0Lmxlbmd0aCk7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuYXBwZW5kKFwicGF0aFwiKVxyXG4gICAgICAuZGF0dW0oaW5pdGlhbERhdGFzZXQpXHJcbiAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCJkYXJrZ3JheVwiKVxyXG4gICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKVxyXG4gICAgICAuYXR0cihcImRcIiwgdGhpcy5jb25uZWN0aW5nTGluZSk7XHJcblxyXG4gICAgdGhpcy5ncmF5R3JvdXAuc2VsZWN0QWxsKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5kYXRhKGluaXRpYWxEYXRhc2V0KVxyXG4gICAgICAuZW50ZXIoKVxyXG4gICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgIC5hdHRyKFwiY3hcIiwgZCA9PiB4U2NhbGUoZC54KSlcclxuICAgICAgLmF0dHIoXCJjeVwiLCBkID0+IHlTY2FsZShkLnkpKVxyXG4gICAgICAuYXR0cihcInJcIiwgNSlcclxuICAgICAgLmF0dHIoXCJmaWxsXCIsIGQgPT4ge1xyXG4gICAgICAgIGlmIChkID09PSBtaW5Qb2ludCkgcmV0dXJuIFwiI0ZGOEMwMFwiOyAvLyBTZXQgbG93ZXN0IHBvaW50IHRvICNGRjhDMDBcclxuICAgICAgICBpZiAoZCA9PT0gbWF4UG9pbnQpIHJldHVybiBcIiMzMTU4OTdcIjsgLy8gU2V0IGhpZ2hlc3QgcG9pbnQgdG8gIzMxNTg5N1xyXG4gICAgICAgIHJldHVybiBcIm5vbmVcIjsgLy8gU2V0IHRoZSBvdGhlciBwb2ludHMgdHJhbnNwYXJlbnRcclxuICAgICAgfSlcclxuICAgICAgLmF0dHIoXCJzdHJva2VcIiwgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZCA9PT0gbWluUG9pbnQpIHJldHVybiBkMy5jb2xvcihcIiNGRjhDMDBcIikhLmRhcmtlcigwLjIpOyAvLyBEYXJrZW4gI0ZGOEMwMCBjb2xvclxyXG4gICAgICAgIGlmIChkID09PSBtYXhQb2ludCkgcmV0dXJuIGQzLmNvbG9yKFwiIzMxNTg5N1wiKSEuZGFya2VyKDAuMik7IC8vIERhcmtlbiAjMzE1ODk3IGNvbG9yXHJcbiAgICAgICAgcmV0dXJuIFwibm9uZVwiOyAvLyBObyBzdHJva2UgZm9yIG90aGVyIHBvaW50c1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAzKTsgLy8gU2V0IHN0cm9rZSB3aWR0aFxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZHJhd0dyYXBoKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWV0cmljQ29tcGFyaXNvblZhbHVlKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbn0iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXN0YXRpc3RpYy13aWRnZXQtY29udGFpbmVyXCI+XHJcbiAgICBcclxuPC9kaXY+Il19
@@ -22296,16 +22296,21 @@ class CoreStatisticWidgetComponent {
22296
22296
  const start = this.previousComparisonValue;
22297
22297
  const end = this.comparisonValue;
22298
22298
  var comparisonValueElement = d3.select("#metric_" + this.metric.id + "_comparisonValue");
22299
- comparisonValueElement.attr("fill", this.comparisonValue >= 0 ? this.comparisonTextFillColor : d3.color("red"));
22299
+ comparisonValueElement.attr("fill", (this.comparisonValue || 0) >= 0 ? this.comparisonTextFillColor : d3.color("red"));
22300
22300
  switch (this.metric.dataType) {
22301
22301
  case EnumICoreStatisticWidgetDataType.INTEGER:
22302
22302
  comparisonValueElement
22303
22303
  .transition()
22304
22304
  .tween("text", () => {
22305
- const interpolator = d3.interpolateNumber(start, end);
22306
- return t => {
22307
- comparisonValueElement.text(Math.round(interpolator(t)));
22308
- };
22305
+ if (!!start && !!end) {
22306
+ const interpolator = d3.interpolateNumber(start, end);
22307
+ return t => {
22308
+ comparisonValueElement.text(Math.round(interpolator(t)));
22309
+ };
22310
+ }
22311
+ else {
22312
+ return _ => comparisonValueElement.text("N/A");
22313
+ }
22309
22314
  })
22310
22315
  .duration(500);
22311
22316
  break;
@@ -22313,10 +22318,15 @@ class CoreStatisticWidgetComponent {
22313
22318
  comparisonValueElement
22314
22319
  .transition()
22315
22320
  .tween("text", () => {
22316
- const interpolator = d3.interpolateNumber(start, end);
22317
- return t => {
22318
- comparisonValueElement.text(Math.round(interpolator(t) * 100) / 100);
22319
- };
22321
+ if (!!start && !!end) {
22322
+ const interpolator = d3.interpolateNumber(start, end);
22323
+ return t => {
22324
+ comparisonValueElement.text(Math.round(interpolator(t) * 100) / 100);
22325
+ };
22326
+ }
22327
+ else {
22328
+ return _ => comparisonValueElement.text("N/A");
22329
+ }
22320
22330
  })
22321
22331
  .duration(500);
22322
22332
  break;
@@ -22324,15 +22334,20 @@ class CoreStatisticWidgetComponent {
22324
22334
  comparisonValueElement
22325
22335
  .transition()
22326
22336
  .tween("text", () => {
22327
- const interpolator = d3.interpolateNumber(start, end);
22328
- return t => {
22329
- comparisonValueElement.text(Math.round(interpolator(t) * 10000) / 100 + "%");
22330
- };
22337
+ if (!!start && !!end) {
22338
+ const interpolator = d3.interpolateNumber(start, end);
22339
+ return t => {
22340
+ comparisonValueElement.text(Math.round(interpolator(t) * 10000) / 100 + "%");
22341
+ };
22342
+ }
22343
+ else {
22344
+ return _ => comparisonValueElement.text("N/A");
22345
+ }
22331
22346
  })
22332
22347
  .duration(500);
22333
22348
  break;
22334
22349
  default:
22335
- comparisonValueElement.transition().text(this.comparisonValue.toString());
22350
+ comparisonValueElement.transition().text((this.comparisonValue || 'N/A').toString());
22336
22351
  break;
22337
22352
  }
22338
22353
  }
@@ -22355,7 +22370,7 @@ class CoreStatisticWidgetComponent {
22355
22370
  const maxPoint = this.dataset.reduce((max, current) => current.y > max.y ? current : max);
22356
22371
  // Update scales
22357
22372
  const xScale = d3.scaleLinear()
22358
- .domain([0, d3.max(this.dataset, d => d.x)])
22373
+ .domain([0, d3.max(this.dataset, (d) => d.x)])
22359
22374
  .range([0, this.graphWidth]);
22360
22375
  const yScale = d3.scaleLinear()
22361
22376
  .domain([minPoint.y, maxPoint.y])
@@ -22371,8 +22386,8 @@ class CoreStatisticWidgetComponent {
22371
22386
  //yAxis.call(yAxisCall);
22372
22387
  // Update connecting line
22373
22388
  this.connectingLine = d3.line()
22374
- .x(d => xScale(d.x))
22375
- .y(d => yScale(d.y))
22389
+ .x((d) => xScale(d.x))
22390
+ .y((d) => yScale(d.y))
22376
22391
  .defined((d, i) => i >= 0 && i < this.dataset.length);
22377
22392
  d3.select("#metric_" + this.metric.id + "_scatter-plot").select("path")
22378
22393
  .datum(this.dataset)
@@ -22548,7 +22563,7 @@ class CoreStatisticWidgetComponent {
22548
22563
  .attr("x", this.comparisonValueRectWidth / 2)
22549
22564
  .attr("y", this.comparisonValueRectHeight / 2)
22550
22565
  .attr("class", "graph-value")
22551
- .attr("fill", this.comparisonValue >= 0 ? this.comparisonValueFillColor : d3.color("red"))
22566
+ .attr("fill", (this.comparisonValue || 0) >= 0 ? this.comparisonValueFillColor : d3.color("red"))
22552
22567
  .attr("font-size", this.comparisonValueRectHeight + "px")
22553
22568
  .attr("text-anchor", "middle")
22554
22569
  .attr("alignment-baseline", "middle");
@@ -22587,7 +22602,7 @@ class CoreStatisticWidgetComponent {
22587
22602
  .duration(500);
22588
22603
  break;
22589
22604
  default:
22590
- comparisonValueText.text(this.comparisonValue.toString());
22605
+ comparisonValueText.text((this.comparisonValue || 'N/A').toString());
22591
22606
  break;
22592
22607
  }
22593
22608
  this.previousComparisonValue = this.comparisonValue;
@@ -22632,8 +22647,8 @@ class CoreStatisticWidgetComponent {
22632
22647
  .domain([minPoint.y, maxPoint.y])
22633
22648
  .range([this.graphHeight, 0]);
22634
22649
  this.connectingLine = d3.line()
22635
- .x(d => xScale(d.x))
22636
- .y(d => yScale(d.y))
22650
+ .x((d) => xScale(d.x))
22651
+ .y((d) => yScale(d.y))
22637
22652
  .defined((d, i) => i >= 0 && i < initialDataset.length);
22638
22653
  this.grayGroup.append("path")
22639
22654
  .datum(initialDataset)