@tolle_/tolle-ui 18.2.30 → 18.3.1

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.
Files changed (55) hide show
  1. package/esm2022/lib/alert-dialog-dynamic.component.mjs +8 -3
  2. package/esm2022/lib/alert-dialog.component.mjs +39 -6
  3. package/esm2022/lib/alert-dialog.service.mjs +38 -6
  4. package/esm2022/lib/bar-list.component.mjs +95 -0
  5. package/esm2022/lib/category-bar.component.mjs +130 -0
  6. package/esm2022/lib/chart-spark.component.mjs +120 -0
  7. package/esm2022/lib/chart.component.mjs +131 -45
  8. package/esm2022/lib/chart.service.mjs +33 -8
  9. package/esm2022/lib/context-menu.service.mjs +11 -7
  10. package/esm2022/lib/modal-ref.mjs +36 -7
  11. package/esm2022/lib/modal.component.mjs +42 -28
  12. package/esm2022/lib/modal.mjs +2 -29
  13. package/esm2022/lib/modal.service.mjs +26 -4
  14. package/esm2022/lib/progress-circle.component.mjs +138 -0
  15. package/esm2022/lib/resizable-panel.component.mjs +5 -5
  16. package/esm2022/lib/segment.component.mjs +3 -3
  17. package/esm2022/lib/tracker.component.mjs +84 -0
  18. package/esm2022/public-api.mjs +6 -1
  19. package/fesm2022/tolle-ui.mjs +900 -139
  20. package/fesm2022/tolle-ui.mjs.map +1 -1
  21. package/lib/alert-dialog-dynamic.component.d.ts +5 -0
  22. package/lib/alert-dialog.component.d.ts +13 -0
  23. package/lib/bar-list.component.d.ts +39 -0
  24. package/lib/category-bar.component.d.ts +49 -0
  25. package/lib/chart-spark.component.d.ts +49 -0
  26. package/lib/chart.component.d.ts +68 -9
  27. package/lib/chart.service.d.ts +25 -5
  28. package/lib/modal-ref.d.ts +6 -1
  29. package/lib/modal.component.d.ts +7 -4
  30. package/lib/modal.d.ts +9 -3
  31. package/lib/progress-circle.component.d.ts +35 -0
  32. package/lib/tracker.component.d.ts +39 -0
  33. package/package.json +3 -2
  34. package/preset.js +7 -1
  35. package/public-api.d.ts +5 -0
  36. package/registry/docs-content.json +330 -2
  37. package/registry/llms-full.txt +98 -2
  38. package/registry/llms.txt +5 -0
  39. package/registry/manifest.json +380 -3
  40. package/registry/r/alert-dialog-dynamic.json +1 -1
  41. package/registry/r/alert-dialog.json +1 -1
  42. package/registry/r/bar-list.json +21 -0
  43. package/registry/r/category-bar.json +21 -0
  44. package/registry/r/chart-pie.json +1 -1
  45. package/registry/r/chart-spark.json +30 -0
  46. package/registry/r/chart.json +2 -2
  47. package/registry/r/context-menu-trigger.json +1 -1
  48. package/registry/r/context-menu.json +1 -1
  49. package/registry/r/modal.json +3 -3
  50. package/registry/r/progress-circle.json +21 -0
  51. package/registry/r/resizable-panel.json +1 -1
  52. package/registry/r/segment.json +1 -1
  53. package/registry/r/tracker.json +25 -0
  54. package/registry/registry.json +112 -0
  55. package/theme.css +15 -3
@@ -74,6 +74,12 @@ export class ChartService {
74
74
  margin = { top: 8, right: 8, bottom: 24, left: 40 };
75
75
  /** Fraction of a band's step spent on padding, split either side. */
76
76
  bandPadding = 0.2;
77
+ /**
78
+ * Which physical axis is the category axis. Bars flip this via `configure()`;
79
+ * every other geometry getter branches on it internally, defaulting to the
80
+ * exact vertical formula when unset, so existing vertical charts are unaffected.
81
+ */
82
+ orientation = 'vertical';
77
83
  scaleMode = 'point';
78
84
  zeroRequired = false;
79
85
  domainMin = 0;
@@ -206,21 +212,36 @@ export class ChartService {
206
212
  return total;
207
213
  }
208
214
  /**
209
- * Maps a data value to an svg y. SVG y grows downward, so the domain maximum
210
- * lands on `plotTop` and the minimum on `plotBottom`.
215
+ * Maps a data value to a position along the *value* axis svg y when
216
+ * vertical (svg y grows downward, so the domain maximum lands on `plotTop`),
217
+ * svg x when horizontal (the domain maximum lands on `plotRight`).
211
218
  */
212
219
  yFor(value) {
213
220
  const span = this.domainMax - this.domainMin;
221
+ if (this.orientation === 'horizontal') {
222
+ if (span <= 0)
223
+ return this.plotLeft;
224
+ const ratio = (value - this.domainMin) / span;
225
+ return this.plotLeft + ratio * this.plotWidth;
226
+ }
214
227
  if (span <= 0)
215
228
  return this.plotBottom;
216
229
  const ratio = (value - this.domainMin) / span;
217
230
  return this.plotBottom - ratio * this.plotHeight;
218
231
  }
219
- /** The svg y of the zero line, clamped into the plot. */
232
+ /** The value-axis position of the zero line, clamped into the plot. */
220
233
  get baselineY() {
221
234
  const zero = Math.min(Math.max(0, this.domainMin), this.domainMax);
222
235
  return this.yFor(zero);
223
236
  }
237
+ /** Length of the plot along the category axis: `plotHeight` when horizontal, else `plotWidth`. */
238
+ get categoryAxisLength() {
239
+ return this.orientation === 'horizontal' ? this.plotHeight : this.plotWidth;
240
+ }
241
+ /** Origin of the plot along the category axis: `plotTop` when horizontal, else `plotLeft`. */
242
+ get categoryAxisOrigin() {
243
+ return this.orientation === 'horizontal' ? this.plotTop : this.plotLeft;
244
+ }
224
245
  /** Width of one band, excluding its padding. Meaningful in band mode. */
225
246
  get bandWidth() {
226
247
  if (this.count === 0)
@@ -231,13 +252,16 @@ export class ChartService {
231
252
  get bandStep() {
232
253
  if (this.count === 0)
233
254
  return 0;
234
- return this.plotWidth / this.count;
255
+ return this.categoryAxisLength / this.count;
235
256
  }
236
- /** Geometry of the band at `index`. */
257
+ /**
258
+ * Geometry of the band at `index`, along the category axis — x when
259
+ * vertical (today's meaning), y when horizontal.
260
+ */
237
261
  bandFor(index) {
238
262
  const step = this.bandStep;
239
263
  const width = this.bandWidth;
240
- const start = this.plotLeft + index * step + (step - width) / 2;
264
+ const start = this.categoryAxisOrigin + index * step + (step - width) / 2;
241
265
  return { start, centre: start + width / 2, width };
242
266
  }
243
267
  /** x of the data point at `index` on the point scale. */
@@ -260,7 +284,7 @@ export class ChartService {
260
284
  hitBandFor(index) {
261
285
  if (this.scaleMode === 'band') {
262
286
  const step = this.bandStep;
263
- const start = this.plotLeft + index * step;
287
+ const start = this.categoryAxisOrigin + index * step;
264
288
  return { start, centre: start + step / 2, width: step };
265
289
  }
266
290
  const x = this.pointX(index);
@@ -334,6 +358,7 @@ export class ChartService {
334
358
  this.height,
335
359
  this.bandPadding,
336
360
  this.scaleMode,
361
+ this.orientation,
337
362
  this.zeroRequired,
338
363
  this.margin.top, this.margin.right, this.margin.bottom, this.margin.left,
339
364
  this.domainMin, this.domainMax, this.tickStep,
@@ -552,4 +577,4 @@ export function buildPath(points, smooth) {
552
577
  }
553
578
  return d;
554
579
  }
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvY2hhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBaUN2QyxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBRW5DOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyw4QkFBOEIsQ0FBQztBQUVuRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDVCxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDM0MsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUVqQiw0RUFBNEU7SUFDNUUsUUFBUSxDQUFDLElBQWM7UUFDckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxRQUFRLENBQUMsR0FBVztRQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENB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QzVFLE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBa0MsRUFBRSxNQUFlO0lBQzNFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDbkMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZFLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqIE9uZSBwbG90dGVkIHNlcmllczogd2hpY2gga2V5IHRvIHJlYWQgb2ZmIGVhY2ggcm93LCBhbmQgaG93IHRvIG5hbWUgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0U2VyaWVzIHtcbiAga2V5OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbi8qKiBTcGFjZSByZXNlcnZlZCBhcm91bmQgdGhlIHBsb3QgYXJlYSBmb3IgYXhlcyBhbmQgbGFiZWxzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFydE1hcmdpbiB7XG4gIHRvcDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xufVxuXG4vKiogQSB5LWF4aXMgdGljazogaXRzIGRhdGEgdmFsdWUsIGl0cyByZXNvbHZlZCBzdmcgeSwgYW5kIGl0cyBmb3JtYXR0ZWQgbGFiZWwuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0VGljayB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuLyoqIEEgaG9yaXpvbnRhbCBzbGljZSBvZiB0aGUgcGxvdCBiZWxvbmdpbmcgdG8gb25lIHggcG9zaXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0QmFuZCB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGNlbnRyZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xufVxuXG4vKiogSG93IHggcG9zaXRpb25zIGFyZSByZXNvbHZlZDogZGlzY3JldGUgYmFuZHMgKGJhcnMpIG9yIHBvaW50cyAobGluZS9hcmVhKS4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0U2NhbGVNb2RlID0gJ3BvaW50JyB8ICdiYW5kJztcblxuLyoqIE51bWJlciBvZiBjaGFydCBwYWxldHRlIHN0ZXBzIHRoYXQgZXhpc3QuIEEgNnRoIHNlcmllcyBkb2VzIG5vdCBnZXQgYSBjb2xvdXIuICovXG5leHBvcnQgY29uc3QgQ0hBUlRfQ09MT1JfTElNSVQgPSA1O1xuXG4vKipcbiAqIFRoZSBwYWludCB1c2VkIGZvciBhIHNlcmllcyBwYXN0IGBDSEFSVF9DT0xPUl9MSU1JVGAuXG4gKlxuICogVGhlIHBhbGV0dGUgaXMgdmFsaWRhdGVkIGZvciBsaWdodG5lc3MsIGNocm9tYSBhbmQgY29sb3VyLWJsaW5kIHNlcGFyYXRpb24gYXRcbiAqIGV4YWN0bHkgZml2ZSBzdGVwczsgZ2VuZXJhdGluZyBhIHNpeHRoIHdvdWxkIGxhbmQgb3V0c2lkZSB0aGF0IHZhbGlkYXRpb24sIGFuZFxuICogd3JhcHBpbmcgYmFjayB0byBzdGVwIDEgd291bGQgbWFrZSB0d28gc2VyaWVzIHNoYXJlIGFuIGlkZW50aXR5LiBCb3RoIGFyZVxuICogd29yc2UgdGhhbiBkcm9wcGluZyB0byBhIG5ldXRyYWwsIHNvIHRoZSBvdmVyZmxvdyBpcyBleHBsaWNpdGx5IHVuY29sb3VyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBDSEFSVF9PVkVSRkxPV19DT0xPUiA9ICdyZ2IodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpJztcblxuLyoqXG4gKiBIYW5kcyBvdXQgcGFsZXR0ZSBzdGVwcyBieSBlbnRpdHkga2V5IHJhdGhlciB0aGFuIGJ5IHBvc2l0aW9uLlxuICpcbiAqIEEga2V5IGtlZXBzIGl0cyBzbG90IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNjYWxlLCB3aGljaCBpcyB3aGF0IG1ha2VzXG4gKiBjb2xvdXIgZm9sbG93IHRoZSBlbnRpdHk6IGZpbHRlcmluZyBhIHNlcmllcyBvdXQgYW5kIGJhY2sgaW4sIG9yIHJlbW92aW5nIGFuXG4gKiBlYXJsaWVyIG9uZSwgbXVzdCBuZXZlciByZXBhaW50IHRoZSBzdXJ2aXZvcnMuIFBhc3QgdGhlIGZpZnRoIGRpc3RpbmN0IGtleVxuICogdGhlIHNjYWxlIHN0b3BzIGNvbG91cmluZyByYXRoZXIgdGhhbiBpbnZlbnRpbmcgYSBzdGVwIG9yIHdyYXBwaW5nIGFyb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENoYXJ0Q29sb3JTY2FsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2xvdHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIG5leHQgPSAwO1xuXG4gIC8qKiBSZXNlcnZlcyBzbG90cyBmb3IgYGtleXNgIGluIG9yZGVyLCBsZWF2aW5nIGFscmVhZHkta25vd24ga2V5cyBhbG9uZS4gKi9cbiAgcmVnaXN0ZXIoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoIXRoaXMuc2xvdHMuaGFzKGtleSkpIHRoaXMuc2xvdHMuc2V0KGtleSwgdGhpcy5uZXh0KyspO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQYWludCBmb3IgYGtleWAsIHJlZ2lzdGVyaW5nIGl0IG9uIGZpcnN0IHNpZ2h0LiAqL1xuICBjb2xvckZvcihrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHNsb3QgPSB0aGlzLnNsb3RzLmdldChrZXkpO1xuICAgIGlmIChzbG90ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNsb3QgPSB0aGlzLm5leHQrKztcbiAgICAgIHRoaXMuc2xvdHMuc2V0KGtleSwgc2xvdCk7XG4gICAgfVxuICAgIGlmIChzbG90ID49IENIQVJUX0NPTE9SX0xJTUlUKSByZXR1cm4gQ0hBUlRfT1ZFUkZMT1dfQ09MT1I7XG4gICAgcmV0dXJuICdyZ2IodmFyKC0tY2hhcnQtJyArIChzbG90ICsgMSkgKyAnKSknO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBga2V5YCBmZWxsIHBhc3QgdGhlIHBhbGV0dGUgYW5kIHJlbmRlcnMgbmV1dHJhbC4gKi9cbiAgaXNPdmVyZmxvdyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNsb3QgPSB0aGlzLnNsb3RzLmdldChrZXkpO1xuICAgIHJldHVybiBzbG90ICE9PSB1bmRlZmluZWQgJiYgc2xvdCA+PSBDSEFSVF9DT0xPUl9MSU1JVDtcbiAgfVxuXG4gIC8qKiBTbG90IGluZGV4IGFzc2lnbmVkIHRvIGBrZXlgLCBvciB1bmRlZmluZWQgd2hlbiBpdCBpcyB1bmtub3duLiAqL1xuICBzbG90T2Yoa2V5OiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNsb3RzLmdldChrZXkpO1xuICB9XG59XG5cbi8qKlxuICogT3ducyBsYXlvdXQsIHNjYWxlcyBhbmQgY29sb3VyIGFzc2lnbm1lbnQgZm9yIG9uZSBgdG9sbGUtY2hhcnRgLCBzbyBldmVyeVxuICogY2hpbGQgZHJhd3MgaW50byB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLiBSZW5kZXJzIG5vdGhpbmcgaXRzZWxmLlxuICpcbiAqIFByb3ZpZGVkIG9uIGBDaGFydENvbXBvbmVudGAsIHNvIGVhY2ggY2hhcnQgZ2V0cyBpdHMgb3duIGluc3RhbmNlLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2hhcnRTZXJ2aWNlIHtcbiAgLyoqIFJvd3MgYmVpbmcgcGxvdHRlZCwgaW4geCBvcmRlci4gKi9cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PltdID0gW107XG4gIC8qKiBTZXJpZXMgZGVmaW5pdGlvbnMsIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCB0YWtlIHBhbGV0dGUgc3RlcHMuICovXG4gIHNlcmllczogQ2hhcnRTZXJpZXNbXSA9IFtdO1xuICAvKiogUm93IGtleSBob2xkaW5nIHRoZSB4IGNhdGVnb3J5L2xhYmVsLiAqL1xuICB4S2V5ID0gJyc7XG4gIC8qKiBXaGV0aGVyIG1hcmtzIHN0YWNrIG9uIGEgc2hhcmVkIGJhc2VsaW5lIHJhdGhlciB0aGFuIHNpdHRpbmcgc2lkZSBieSBzaWRlLiAqL1xuICBzdGFja2VkID0gZmFsc2U7XG4gIC8qKiBGdWxsIHN2ZyB3aWR0aCBpbiBweCwgdHJhY2tlZCBmcm9tIHRoZSBjb250YWluZXIncyBSZXNpemVPYnNlcnZlci4gKi9cbiAgd2lkdGggPSAwO1xuICAvKiogRnVsbCBzdmcgaGVpZ2h0IGluIHB4LiAqL1xuICBoZWlnaHQgPSAyNjA7XG4gIC8qKiBTcGFjZSByZXNlcnZlZCBhcm91bmQgdGhlIHBsb3QgYXJlYS4gKi9cbiAgbWFyZ2luOiBDaGFydE1hcmdpbiA9IHsgdG9wOiA4LCByaWdodDogOCwgYm90dG9tOiAyNCwgbGVmdDogNDAgfTtcbiAgLyoqIEZyYWN0aW9uIG9mIGEgYmFuZCdzIHN0ZXAgc3BlbnQgb24gcGFkZGluZywgc3BsaXQgZWl0aGVyIHNpZGUuICovXG4gIGJhbmRQYWRkaW5nID0gMC4yO1xuXG4gIHByaXZhdGUgc2NhbGVNb2RlOiBDaGFydFNjYWxlTW9kZSA9ICdwb2ludCc7XG4gIHByaXZhdGUgemVyb1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBkb21haW5NaW4gPSAwO1xuICBwcml2YXRlIGRvbWFpbk1heCA9IDE7XG4gIHByaXZhdGUgdGlja1ZhbHVlczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSB0aWNrU3RlcCA9IDE7XG5cbiAgLyoqIFBhbGV0dGUgYXNzaWdubWVudCwga2V5ZWQgYnkgc2VyaWVzIGlkZW50aXR5LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbG9ycyA9IG5ldyBDaGFydENvbG9yU2NhbGUoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxheW91dFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIC8qKiBFbWl0cyBhIHZlcnNpb24gbnVtYmVyIHdoZW5ldmVyIHNjYWxlcywgZGltZW5zaW9ucyBvciBkYXRhIGNoYW5nZS4gKi9cbiAgcmVhZG9ubHkgbGF5b3V0JCA9IHRoaXMubGF5b3V0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2ZUluZGV4U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBJbmRleCBvZiB0aGUgeCBwb3NpdGlvbiB1bmRlciB0aGUgcG9pbnRlciwgb3IgbnVsbCB3aGVuIG5vdCBob3ZlcmluZy4gKi9cbiAgcmVhZG9ubHkgYWN0aXZlSW5kZXgkID0gdGhpcy5hY3RpdmVJbmRleFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBsYXlvdXRWZXJzaW9uID0gMDtcbiAgcHJpdmF0ZSBlbWl0U2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnZW9tZXRyeVxuXG4gIGdldCBwbG90TGVmdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm1hcmdpbi5sZWZ0O1xuICB9XG5cbiAgZ2V0IHBsb3RUb3AoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXJnaW4udG9wO1xuICB9XG5cbiAgZ2V0IHBsb3RXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLndpZHRoIC0gdGhpcy5tYXJnaW4ubGVmdCAtIHRoaXMubWFyZ2luLnJpZ2h0KTtcbiAgfVxuXG4gIGdldCBwbG90SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuaGVpZ2h0IC0gdGhpcy5tYXJnaW4udG9wIC0gdGhpcy5tYXJnaW4uYm90dG9tKTtcbiAgfVxuXG4gIGdldCBwbG90UmlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wbG90TGVmdCArIHRoaXMucGxvdFdpZHRoO1xuICB9XG5cbiAgZ2V0IHBsb3RCb3R0b20oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wbG90VG9wICsgdGhpcy5wbG90SGVpZ2h0O1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiB4IHBvc2l0aW9ucy4gKi9cbiAgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGg7XG4gIH1cblxuICAvKiogSG93IHggaXMgY3VycmVudGx5IHJlc29sdmVkLiBCYXJzIGZsaXAgdGhpcyB0byAnYmFuZCcuICovXG4gIGdldCBtb2RlKCk6IENoYXJ0U2NhbGVNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5zY2FsZU1vZGU7XG4gIH1cblxuICAvKiogUmVzb2x2ZWQgeSB0aWNrcywgd2l0aCBzdmcgY29vcmRpbmF0ZXMgYW5kIGZvcm1hdHRlZCBsYWJlbHMuICovXG4gIGdldCB0aWNrcygpOiBDaGFydFRpY2tbXSB7XG4gICAgcmV0dXJuIHRoaXMudGlja1ZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoe1xuICAgICAgdmFsdWUsXG4gICAgICB5OiB0aGlzLnlGb3IodmFsdWUpLFxuICAgICAgbGFiZWw6IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUpLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IHkgZG9tYWluIGFzIFttaW4sIG1heF0uICovXG4gIGdldCBkb21haW4oKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgcmV0dXJuIFt0aGlzLmRvbWFpbk1pbiwgdGhpcy5kb21haW5NYXhdO1xuICB9XG5cbiAgLyoqIFRoZSB4LWF4aXMgY2F0ZWdvcnkgbGFiZWxzLCBvbmUgcGVyIHJvdy4gKi9cbiAgZ2V0IHhMYWJlbHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHJhdyA9IHJvdz8uW3RoaXMueEtleV07XG4gICAgICByZXR1cm4gcmF3ID09IG51bGwgPyAnJyA6IFN0cmluZyhyYXcpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlZ2lzdHJhdGlvblxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY2hhcnQncyBjb25maWd1cmF0aW9uIGFuZCByZWNvbXB1dGVzIHRoZSBzY2FsZXMuXG4gICAqIENhbGxlZCBieSB0aGUgY29udGFpbmVyIG9uIGlucHV0IGNoYW5nZXMgYW5kIG9uIHJlc2l6ZS5cbiAgICovXG4gIGNvbmZpZ3VyZShjb25maWc6IFBhcnRpYWw8UGljazxDaGFydFNlcnZpY2UsXG4gICAgJ2RhdGEnIHwgJ3NlcmllcycgfCAneEtleScgfCAnc3RhY2tlZCcgfCAnd2lkdGgnIHwgJ2hlaWdodCcgfCAnbWFyZ2luJyB8ICdiYW5kUGFkZGluZyc+Pik6IHZvaWQge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgY29uZmlnKTtcbiAgICBpZiAoY29uZmlnLnNlcmllcykgdGhpcy5zeW5jQ29sb3JTbG90cyhjb25maWcuc2VyaWVzKTtcbiAgICB0aGlzLnJlY29tcHV0ZSgpO1xuICB9XG5cbiAgLyoqIFN3aXRjaGVzIHggdG8gYSBiYW5kIHNjYWxlLiBCYXJzIGNhbGwgdGhpczsgaXQgYWxzbyBmb3JjZXMgemVybyBpbnRvIHRoZSBkb21haW4uICovXG4gIHVzZUJhbmRTY2FsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zY2FsZU1vZGUgPT09ICdiYW5kJyAmJiB0aGlzLnplcm9SZXF1aXJlZCkgcmV0dXJuO1xuICAgIHRoaXMuc2NhbGVNb2RlID0gJ2JhbmQnO1xuICAgIHRoaXMuemVyb1JlcXVpcmVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlY29tcHV0ZSgpO1xuICB9XG5cbiAgLyoqIEZvcmNlcyB6ZXJvIGludG8gdGhlIHkgZG9tYWluLCBmb3IgbWFya3MgYW5jaG9yZWQgdG8gYSBiYXNlbGluZS4gKi9cbiAgcmVxdWlyZVplcm8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuemVyb1JlcXVpcmVkKSByZXR1cm47XG4gICAgdGhpcy56ZXJvUmVxdWlyZWQgPSB0cnVlO1xuICAgIHRoaXMucmVjb21wdXRlKCk7XG4gIH1cblxuICAvKiogUmVzZXJ2ZXMgcGFsZXR0ZSBzbG90cyBpbiBzZXJpZXMgb3JkZXIsIGxlYXZpbmcga25vd24ga2V5cyB1bnRvdWNoZWQuICovXG4gIHByaXZhdGUgc3luY0NvbG9yU2xvdHMoc2VyaWVzOiBDaGFydFNlcmllc1tdKTogdm9pZCB7XG4gICAgdGhpcy5jb2xvcnMucmVnaXN0ZXIoc2VyaWVzLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYWludCBmb3IgYSBzZXJpZXMsIGtleWVkIGJ5IGlkZW50aXR5IHJhdGhlciB0aGFuIGJ5IGluZGV4IGluIHRoZSB2aXNpYmxlXG4gICAqIGFycmF5LiBQYXN0IHRoZSBmaWZ0aCBkaXN0aW5jdCBrZXkgdGhpcyByZXR1cm5zIHRoZSBuZXV0cmFsIG92ZXJmbG93IGNvbG91ci5cbiAgICovXG4gIGNvbG9yRm9yKHNlcmllc0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2xvcnMuY29sb3JGb3Ioc2VyaWVzS2V5KTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBzZXJpZXMgZmVsbCBwYXN0IHRoZSBwYWxldHRlIGFuZCByZW5kZXJzIG5ldXRyYWwuICovXG4gIGlzT3ZlcmZsb3dTZXJpZXMoc2VyaWVzS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2xvcnMuaXNPdmVyZmxvdyhzZXJpZXNLZXkpO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGhlIHNjYWxlc1xuXG4gIC8qKiBSZWFkcyBhIHNlcmllcyB2YWx1ZSBvZmYgYSByb3csIG9yIG51bGwgd2hlbiBpdCBpcyBtaXNzaW5nL25vbi1udW1lcmljLiAqL1xuICB2YWx1ZUF0KHNlcmllc0tleTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgcmF3ID0gdGhpcy5kYXRhW2luZGV4XT8uW3Nlcmllc0tleV07XG4gICAgaWYgKHJhdyA9PSBudWxsIHx8IHJhdyA9PT0gJycpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IG51bSA9IE51bWJlcihyYXcpO1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtKSA/IG51bSA6IG51bGw7XG4gIH1cblxuICAvKiogU3VtIG9mIGV2ZXJ5IHNlcmllcyBiZWxvdyBgc2VyaWVzS2V5YCBhdCBgaW5kZXhgLCBmb3Igc3RhY2tlZCBtYXJrcy4gKi9cbiAgc3RhY2tCYXNlKHNlcmllc0tleTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuc3RhY2tlZCkgcmV0dXJuIDA7XG4gICAgbGV0IGJhc2UgPSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNlcmllcykge1xuICAgICAgaWYgKGl0ZW0ua2V5ID09PSBzZXJpZXNLZXkpIGJyZWFrO1xuICAgICAgYmFzZSArPSB0aGlzLnZhbHVlQXQoaXRlbS5rZXksIGluZGV4KSA/PyAwO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIC8qKiBTdW0gb2YgZXZlcnkgc2VyaWVzIGF0IGBpbmRleGAuICovXG4gIHN0YWNrVG90YWwoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5zZXJpZXMpIHRvdGFsICs9IHRoaXMudmFsdWVBdChpdGVtLmtleSwgaW5kZXgpID8/IDA7XG4gICAgcmV0dXJuIHRvdGFsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYSBkYXRhIHZhbHVlIHRvIGFuIHN2ZyB5LiBTVkcgeSBncm93cyBkb3dud2FyZCwgc28gdGhlIGRvbWFpbiBtYXhpbXVtXG4gICAqIGxhbmRzIG9uIGBwbG90VG9wYCBhbmQgdGhlIG1pbmltdW0gb24gYHBsb3RCb3R0b21gLlxuICAgKi9cbiAgeUZvcih2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBzcGFuID0gdGhpcy5kb21haW5NYXggLSB0aGlzLmRvbWFpbk1pbjtcbiAgICBpZiAoc3BhbiA8PSAwKSByZXR1cm4gdGhpcy5wbG90Qm90dG9tO1xuICAgIGNvbnN0IHJhdGlvID0gKHZhbHVlIC0gdGhpcy5kb21haW5NaW4pIC8gc3BhbjtcbiAgICByZXR1cm4gdGhpcy5wbG90Qm90dG9tIC0gcmF0aW8gKiB0aGlzLnBsb3RIZWlnaHQ7XG4gIH1cblxuICAvKiogVGhlIHN2ZyB5IG9mIHRoZSB6ZXJvIGxpbmUsIGNsYW1wZWQgaW50byB0aGUgcGxvdC4gKi9cbiAgZ2V0IGJhc2VsaW5lWSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHplcm8gPSBNYXRoLm1pbihNYXRoLm1heCgwLCB0aGlzLmRvbWFpbk1pbiksIHRoaXMuZG9tYWluTWF4KTtcbiAgICByZXR1cm4gdGhpcy55Rm9yKHplcm8pO1xuICB9XG5cbiAgLyoqIFdpZHRoIG9mIG9uZSBiYW5kLCBleGNsdWRpbmcgaXRzIHBhZGRpbmcuIE1lYW5pbmdmdWwgaW4gYmFuZCBtb2RlLiAqL1xuICBnZXQgYmFuZFdpZHRoKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY291bnQgPT09IDApIHJldHVybiAwO1xuICAgIHJldHVybiB0aGlzLmJhbmRTdGVwICogKDEgLSB0aGlzLmJhbmRQYWRkaW5nKTtcbiAgfVxuXG4gIC8qKiBEaXN0YW5jZSBiZXR3ZWVuIGFkamFjZW50IGJhbmQgc3RhcnRzLiBCYW5kcyB0aWxlIHRoZSBwbG90IGV4YWN0bHkuICovXG4gIGdldCBiYW5kU3RlcCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmNvdW50ID09PSAwKSByZXR1cm4gMDtcbiAgICByZXR1cm4gdGhpcy5wbG90V2lkdGggLyB0aGlzLmNvdW50O1xuICB9XG5cbiAgLyoqIEdlb21ldHJ5IG9mIHRoZSBiYW5kIGF0IGBpbmRleGAuICovXG4gIGJhbmRGb3IoaW5kZXg6IG51bWJlcik6IENoYXJ0QmFuZCB7XG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuYmFuZFN0ZXA7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmJhbmRXaWR0aDtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucGxvdExlZnQgKyBpbmRleCAqIHN0ZXAgKyAoc3RlcCAtIHdpZHRoKSAvIDI7XG4gICAgcmV0dXJuIHsgc3RhcnQsIGNlbnRyZTogc3RhcnQgKyB3aWR0aCAvIDIsIHdpZHRoIH07XG4gIH1cblxuICAvKiogeCBvZiB0aGUgZGF0YSBwb2ludCBhdCBgaW5kZXhgIG9uIHRoZSBwb2ludCBzY2FsZS4gKi9cbiAgcG9pbnRYKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmNvdW50ID09PSAwKSByZXR1cm4gdGhpcy5wbG90TGVmdDtcbiAgICBpZiAodGhpcy5jb3VudCA9PT0gMSkgcmV0dXJuIHRoaXMucGxvdExlZnQgKyB0aGlzLnBsb3RXaWR0aCAvIDI7XG4gICAgcmV0dXJuIHRoaXMucGxvdExlZnQgKyAoaW5kZXggKiB0aGlzLnBsb3RXaWR0aCkgLyAodGhpcy5jb3VudCAtIDEpO1xuICB9XG5cbiAgLyoqIHggb2YgYGluZGV4YCB1bmRlciB3aGljaGV2ZXIgc2NhbGUgdGhlIGNoYXJ0IGlzIGN1cnJlbnRseSB1c2luZy4gKi9cbiAgeEZvcihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zY2FsZU1vZGUgPT09ICdiYW5kJyA/IHRoaXMuYmFuZEZvcihpbmRleCkuY2VudHJlIDogdGhpcy5wb2ludFgoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwb2ludGVyIGNhdGNobWVudCBhcmVhIGZvciBgaW5kZXhgIOKAlCBkZWxpYmVyYXRlbHkgd2lkZXIgdGhhbiB0aGUgbWFyay5cbiAgICogSW4gYmFuZCBtb2RlIGl0IGlzIHRoZSB3aG9sZSBiYW5kIHN0ZXA7IG9uIHRoZSBwb2ludCBzY2FsZSBpdCBydW5zIHRvIHRoZVxuICAgKiBtaWRwb2ludHMgb2YgdGhlIG5laWdoYm91cmluZyBwb2ludHMsIHNvIHRoZSBwb2ludGVyIG9ubHkgaGFzIHRvIGJlIG5lYXJlc3QuXG4gICAqL1xuICBoaXRCYW5kRm9yKGluZGV4OiBudW1iZXIpOiBDaGFydEJhbmQge1xuICAgIGlmICh0aGlzLnNjYWxlTW9kZSA9PT0gJ2JhbmQnKSB7XG4gICAgICBjb25zdCBzdGVwID0gdGhpcy5iYW5kU3RlcDtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wbG90TGVmdCArIGluZGV4ICogc3RlcDtcbiAgICAgIHJldHVybiB7IHN0YXJ0LCBjZW50cmU6IHN0YXJ0ICsgc3RlcCAvIDIsIHdpZHRoOiBzdGVwIH07XG4gICAgfVxuICAgIGNvbnN0IHggPSB0aGlzLnBvaW50WChpbmRleCk7XG4gICAgY29uc3QgcHJldiA9IGluZGV4ID4gMCA/IHRoaXMucG9pbnRYKGluZGV4IC0gMSkgOiB0aGlzLnBsb3RMZWZ0IC0gKHRoaXMucGxvdFJpZ2h0IC0gdGhpcy5wbG90TGVmdCk7XG4gICAgY29uc3QgbmV4dCA9XG4gICAgICBpbmRleCA8IHRoaXMuY291bnQgLSAxID8gdGhpcy5wb2ludFgoaW5kZXggKyAxKSA6IHRoaXMucGxvdFJpZ2h0ICsgKHRoaXMucGxvdFJpZ2h0IC0gdGhpcy5wbG90TGVmdCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCh0aGlzLnBsb3RMZWZ0LCAocHJldiArIHgpIC8gMik7XG4gICAgY29uc3QgZW5kID0gTWF0aC5taW4odGhpcy5wbG90UmlnaHQsICh4ICsgbmV4dCkgLyAyKTtcbiAgICByZXR1cm4geyBzdGFydCwgY2VudHJlOiB4LCB3aWR0aDogTWF0aC5tYXgoMCwgZW5kIC0gc3RhcnQpIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaG92ZXJpbmdcblxuICAvKiogSW5kZXggY3VycmVudGx5IHVuZGVyIHRoZSBwb2ludGVyLCBvciBudWxsLiAqL1xuICBnZXQgYWN0aXZlSW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlSW5kZXhTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc2V0QWN0aXZlSW5kZXgoaW5kZXg6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleFN1YmplY3QudmFsdWUgPT09IGluZGV4KSByZXR1cm47XG4gICAgdGhpcy5hY3RpdmVJbmRleFN1YmplY3QubmV4dChpbmRleCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkb21haW5zXG5cbiAgcHJpdmF0ZSByZWNvbXB1dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuc3RhY2tlZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHZhbHVlcy5wdXNoKHRoaXMuc3RhY2tUb3RhbChpKSk7XG4gICAgICAvLyBBIHN0YWNrIHN0aWxsIGhhcyB0byBzaG93IGl0cyBvd24gZmxvb3Igd2hlbiBhIHNlcmllcyBnb2VzIG5lZ2F0aXZlLlxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuc2VyaWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdiA9IHRoaXMudmFsdWVBdChpdGVtLmtleSwgaSk7XG4gICAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB2IDwgMCkgdmFsdWVzLnB1c2godik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuc2VyaWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdiA9IHRoaXMudmFsdWVBdChpdGVtLmtleSwgaSk7XG4gICAgICAgICAgaWYgKHYgIT0gbnVsbCkgdmFsdWVzLnB1c2godik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy56ZXJvUmVxdWlyZWQpIHZhbHVlcy5wdXNoKDApO1xuXG4gICAgY29uc3QgW21pbiwgbWF4LCBzdGVwLCB0aWNrc10gPSBuaWNlU2NhbGUodmFsdWVzKTtcbiAgICB0aGlzLmRvbWFpbk1pbiA9IG1pbjtcbiAgICB0aGlzLmRvbWFpbk1heCA9IG1heDtcbiAgICB0aGlzLnRpY2tTdGVwID0gc3RlcDtcbiAgICB0aGlzLnRpY2tWYWx1ZXMgPSB0aWNrcztcblxuICAgIC8vIE9ubHkgdGVsbCBzdWJzY3JpYmVycyB3aGVuIHNvbWV0aGluZyB0aGV5IHdvdWxkIGRyYXcgZGlmZmVyZW50bHkgYWN0dWFsbHlcbiAgICAvLyBjaGFuZ2VkLiBgY29uZmlndXJlKClgIGlzIGNhbGxlZCBmcm9tIG5nT25DaGFuZ2VzLCBhbmQgYW4gYXBwIGJpbmRpbmdcbiAgICAvLyBgW2RhdGFdPVwiaXRlbXMuZmlsdGVyKC4uLilcImAgaGFuZHMgdXMgYSBmcmVzaCBhcnJheSByZWZlcmVuY2Ugb24gZXZlcnlcbiAgICAvLyBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3Mg4oCUIGFuIG9yZGluYXJ5IHRoaW5nIHRvIHdyaXRlLiBFbWl0dGluZyBvbiBldmVyeSBjYWxsXG4gICAgLy8gbWFkZSBzdWJzY3JpYmVycyBtYXJrRm9yQ2hlY2ssIHdoaWNoIHNjaGVkdWxlZCBhbm90aGVyIHBhc3MsIHdoaWNoIGNhbGxlZFxuICAgIC8vIGNvbmZpZ3VyZSBhZ2FpbjogdGhlIGN5Y2xlIG5ldmVyIGNsb3NlZCBhbmQgdGhlIHBhZ2UgbG9ja2VkIHVwLlxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMubGF5b3V0U2lnbmF0dXJlKHZhbHVlcyk7XG4gICAgaWYgKHNpZ25hdHVyZSA9PT0gdGhpcy5sYXN0U2lnbmF0dXJlKSByZXR1cm47XG4gICAgdGhpcy5sYXN0U2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuXG4gICAgdGhpcy5zY2hlZHVsZUVtaXQoKTtcbiAgfVxuXG4gIC8qKiBFdmVyeXRoaW5nIGEgc3Vic2NyaWJlciB3b3VsZCByZW5kZXIgZGlmZmVyZW50bHksIGZsYXR0ZW5lZCBmb3IgY29tcGFyaXNvbi4gKi9cbiAgcHJpdmF0ZSBsYXN0U2lnbmF0dXJlID0gJyc7XG5cbiAgcHJpdmF0ZSBsYXlvdXRTaWduYXR1cmUodmFsdWVzOiBudW1iZXJbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuY291bnQsXG4gICAgICB0aGlzLnhLZXksXG4gICAgICB0aGlzLnN0YWNrZWQsXG4gICAgICB0aGlzLndpZHRoLFxuICAgICAgdGhpcy5oZWlnaHQsXG4gICAgICB0aGlzLmJhbmRQYWRkaW5nLFxuICAgICAgdGhpcy5zY2FsZU1vZGUsXG4gICAgICB0aGlzLnplcm9SZXF1aXJlZCxcbiAgICAgIHRoaXMubWFyZ2luLnRvcCwgdGhpcy5tYXJnaW4ucmlnaHQsIHRoaXMubWFyZ2luLmJvdHRvbSwgdGhpcy5tYXJnaW4ubGVmdCxcbiAgICAgIHRoaXMuZG9tYWluTWluLCB0aGlzLmRvbWFpbk1heCwgdGhpcy50aWNrU3RlcCxcbiAgICAgIHRoaXMudGlja1ZhbHVlcy5qb2luKCcsJyksXG4gICAgICB0aGlzLnNlcmllcy5tYXAoKHMpID0+IHMua2V5ICsgJzonICsgcy5sYWJlbCkuam9pbignLCcpLFxuICAgICAgdGhpcy54TGFiZWxzLmpvaW4oJ1x1MDAwMScpLFxuICAgICAgdmFsdWVzLmpvaW4oJywnKSxcbiAgICBdLmpvaW4oJ1x1MDAwMCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvYWxlc2NlcyBsYXlvdXQgbm90aWZpY2F0aW9ucyBpbnRvIGEgbWljcm90YXNrLCBzbyBzZXZlcmFsIGNoaWxkcmVuXG4gICAqIHJlZ2lzdGVyaW5nIGluIHRoZSBzYW1lIGNoYW5nZS1kZXRlY3Rpb24gcGFzcyBwcm9kdWNlIG9uZSBlbWlzc2lvbiBhZnRlclxuICAgKiB0aGV5IGhhdmUgYWxsIHNldHRsZWQgcmF0aGVyIHRoYW4gb25lIGVhY2ggbWlkLXBhc3MuXG4gICAqL1xuICBwcml2YXRlIHNjaGVkdWxlRW1pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxheW91dFZlcnNpb24rKztcbiAgICBpZiAodGhpcy5lbWl0U2NoZWR1bGVkKSByZXR1cm47XG4gICAgdGhpcy5lbWl0U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICB0aGlzLmVtaXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMubGF5b3V0U3ViamVjdC5uZXh0KHRoaXMubGF5b3V0VmVyc2lvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKiogRm9ybWF0cyBhIHZhbHVlIGZvciBhIHRpY2sgbGFiZWwgYXQgdGhlIGN1cnJlbnQgdGljayBzdGVwJ3MgcHJlY2lzaW9uLiAqL1xuICBmb3JtYXRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWNpbWFscyA9IGRlY2ltYWxzRm9yKHRoaXMudGlja1N0ZXApO1xuICAgIHJldHVybiB2YWx1ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGRlY2ltYWxzLFxuICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkZWNpbWFscyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGF0aHNcblxuICAvKiogU3RyYWlnaHQtc2VnbWVudCBwYXRoIHRocm91Z2ggdGhlIHNlcmllcycgZGVmaW5lZCBwb2ludHMuICovXG4gIGxpbmVQYXRoKHNlcmllc0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoKHRoaXMucG9pbnRzRm9yKHNlcmllc0tleSksIGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBNb25vdG9uZS1jdWJpYyBwYXRoIHRocm91Z2ggdGhlIHNlcmllcycgZGVmaW5lZCBwb2ludHMuICovXG4gIHNtb290aFBhdGgoc2VyaWVzS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBidWlsZFBhdGgodGhpcy5wb2ludHNGb3Ioc2VyaWVzS2V5KSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmlsbGVkLWFyZWEgcGF0aDogdGhlIHNlcmllcycgbGluZSwgY2xvc2VkIGJhY2sgYWxvbmcgaXRzIGJhc2VsaW5lLiBXaGVuXG4gICAqIHN0YWNrZWQsIHRoZSBmbG9vciBpcyB0aGUgdG9wIG9mIHRoZSBzZXJpZXMgYmVsb3cgcmF0aGVyIHRoYW4gemVyby5cbiAgICovXG4gIGFyZWFQYXRoKHNlcmllc0tleTogc3RyaW5nLCBzbW9vdGg6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBvaW50cyA9IHRoaXMucG9pbnRzRm9yKHNlcmllc0tleSk7XG4gICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApIHJldHVybiAnJztcblxuICAgIGNvbnN0IHRvcCA9IGJ1aWxkUGF0aChwb2ludHMsIHNtb290aCk7XG4gICAgY29uc3QgZmxvb3IgPSBwb2ludHNcbiAgICAgIC5tYXAoKHApID0+IHtcbiAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuc3RhY2tlZCA/IHRoaXMuc3RhY2tCYXNlKHNlcmllc0tleSwgcC5pbmRleCkgOiAwO1xuICAgICAgICByZXR1cm4geyB4OiBwLngsIHk6IHRoaXMueUZvcihiYXNlKSwgaW5kZXg6IHAuaW5kZXggfTtcbiAgICAgIH0pXG4gICAgICAucmV2ZXJzZSgpO1xuICAgIGNvbnN0IGJvdHRvbSA9IGJ1aWxkUGF0aChmbG9vciwgc21vb3RoKTtcbiAgICAvLyBSZS1lbnRlciB0aGUgcmV2ZXJzZWQgZmxvb3Igd2l0aCBhIGxpbmUsIHRoZW4gY2xvc2UuXG4gICAgcmV0dXJuIHRvcCArICcgTCAnICsgZmxvb3JbMF0ueCArICcgJyArIGZsb29yWzBdLnkgKyAnICcgKyBib3R0b20ucmVwbGFjZSgvXk0vLCAnTCcpICsgJyBaJztcbiAgfVxuXG4gIC8qKiBSZXNvbHZlZCBzdmcgcG9pbnRzIGZvciBhIHNlcmllcywgc2tpcHBpbmcgcm93cyB3aGVyZSBpdCBoYXMgbm8gdmFsdWUuICovXG4gIHBvaW50c0ZvcihzZXJpZXNLZXk6IHN0cmluZyk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdIHtcbiAgICBjb25zdCBwb2ludHM6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHYgPSB0aGlzLnZhbHVlQXQoc2VyaWVzS2V5LCBpKTtcbiAgICAgIGlmICh2ID09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgY29uc3Qgc3RhY2tlZCA9IHRoaXMuc3RhY2tlZCA/IHRoaXMuc3RhY2tCYXNlKHNlcmllc0tleSwgaSkgKyB2IDogdjtcbiAgICAgIHBvaW50cy5wdXNoKHsgeDogdGhpcy54Rm9yKGkpLCB5OiB0aGlzLnlGb3Ioc3RhY2tlZCksIGluZGV4OiBpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnRzO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHVyZSBoZWxwZXJzXG5cbi8qKiBEZWNpbWFsIHBsYWNlcyB3b3J0aCBzaG93aW5nIGZvciBhIGdpdmVuIHRpY2sgc3RlcC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNpbWFsc0ZvcihzdGVwOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShzdGVwKSB8fCBzdGVwIDw9IDApIHJldHVybiAwO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oNiwgLU1hdGguZmxvb3IoTWF0aC5sb2cxMChzdGVwKSkpKTtcbn1cblxuLyoqXG4gKiBSb3VuZHMgYSByYXcgc3RlcCB1cCB0byB0aGUgbmV4dCAxLzIvNSB4IDEwXm4uXG4gKlxuICogRGl2aWRpbmcgdGhlIHJhbmdlIGJ5IGEgdGljayBjb3VudCBpbnN0ZWFkIHdvdWxkIHByb2R1Y2Ugc3RlcHMgbGlrZSAxOS40IGFuZFxuICogc28gYXhpcyBsYWJlbHMgbGlrZSAxOS40IC8gMzguOCAvIDU4LjIsIHdoaWNoIG5vYm9keSBjYW4gcmVhZCBhIHZhbHVlIG9mZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5pY2VTdGVwKHJhd1N0ZXA6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHJhd1N0ZXApIHx8IHJhd1N0ZXAgPD0gMCkgcmV0dXJuIDE7XG4gIGNvbnN0IG1hZ25pdHVkZSA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nMTAocmF3U3RlcCkpKTtcbiAgY29uc3Qgbm9ybWFsaXNlZCA9IHJhd1N0ZXAgLyBtYWduaXR1ZGU7XG4gIGxldCBtdWx0aXBsaWVyOiBudW1iZXI7XG4gIGlmIChub3JtYWxpc2VkIDw9IDEpIG11bHRpcGxpZXIgPSAxO1xuICBlbHNlIGlmIChub3JtYWxpc2VkIDw9IDIpIG11bHRpcGxpZXIgPSAyO1xuICBlbHNlIGlmIChub3JtYWxpc2VkIDw9IDUpIG11bHRpcGxpZXIgPSA1O1xuICBlbHNlIG11bHRpcGxpZXIgPSAxMDtcbiAgcmV0dXJuIG11bHRpcGxpZXIgKiBtYWduaXR1ZGU7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgcmVhZGFibGUgeSBzY2FsZSBvdmVyIGB2YWx1ZXNgOiByZXR1cm5zIGBbbWluLCBtYXgsIHN0ZXAsIHRpY2tzXWBcbiAqIHdpdGggdGhlIGRvbWFpbiBzbmFwcGVkIG91dHdhcmQgdG8gd2hvbGUgc3RlcHMuXG4gKlxuICogRGVnZW5lcmF0ZSBpbnB1dHMgKGVtcHR5LCBhbGwtaWRlbnRpY2FsKSBzdGlsbCBwcm9kdWNlIGEgdXNhYmxlIG9uZS11bml0XG4gKiBkb21haW4gcmF0aGVyIHRoYW4gYSB6ZXJvLWhlaWdodCBwbG90LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmljZVNjYWxlKHZhbHVlczogbnVtYmVyW10sIHRhcmdldFRpY2tzID0gNSk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV0ge1xuICBjb25zdCBmaW5pdGUgPSB2YWx1ZXMuZmlsdGVyKCh2KSA9PiBOdW1iZXIuaXNGaW5pdGUodikpO1xuXG4gIGxldCBtaW4gPSBmaW5pdGUubGVuZ3RoID8gTWF0aC5taW4oLi4uZmluaXRlKSA6IDA7XG4gIGxldCBtYXggPSBmaW5pdGUubGVuZ3RoID8gTWF0aC5tYXgoLi4uZmluaXRlKSA6IDE7XG5cbiAgaWYgKG1pbiA9PT0gbWF4KSB7XG4gICAgLy8gQSBmbGF0IG9yIHNpbmdsZS1wb2ludCBkb21haW4gaGFzIG5vIHNwYW4gdG8gZGl2aWRlOyBvcGVuIGl0IHRvIG9uZSB1bml0XG4gICAgLy8gYXJvdW5kIHRoZSB2YWx1ZSBzbyB0aGUgbWFyayBzaXRzIG9uIGEgcmVhbCBheGlzIGluc3RlYWQgb2Ygb24gdGhlIGZsb29yLlxuICAgIGlmIChtaW4gPT09IDApIHtcbiAgICAgIG1pbiA9IDA7XG4gICAgICBtYXggPSAxO1xuICAgIH0gZWxzZSBpZiAobWluID4gMCkge1xuICAgICAgbWluID0gTWF0aC5taW4oMCwgbWluKTtcbiAgICAgIG1heCA9IG1heCA9PT0gMCA/IDEgOiBtYXg7XG4gICAgICBpZiAobWluID09PSBtYXgpIG1heCA9IG1pbiArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1heCA9IE1hdGgubWF4KDAsIG1heCk7XG4gICAgICBpZiAobWluID09PSBtYXgpIG1pbiA9IG1heCAtIDE7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RlcCA9IG5pY2VTdGVwKChtYXggLSBtaW4pIC8gdGFyZ2V0VGlja3MpO1xuICAvLyBOdWRnZSBiZWZvcmUgcm91bmRpbmcgb3V0d2FyZDogMTAwLzIwIGxhbmRzIGEgaGFpciBhYm92ZSA1IGluIGJpbmFyeVxuICAvLyBmbG9hdGluZyBwb2ludCwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGFkZCBhIHBoYW50b20gdGljayBhdCAxMjAuXG4gIGNvbnN0IGVwc2lsb24gPSAxZS05O1xuICBjb25zdCBuaWNlTWluID0gTWF0aC5mbG9vcihtaW4gLyBzdGVwICsgZXBzaWxvbikgKiBzdGVwO1xuICBjb25zdCBuaWNlTWF4ID0gTWF0aC5jZWlsKG1heCAvIHN0ZXAgLSBlcHNpbG9uKSAqIHN0ZXA7XG4gIGNvbnN0IGRlY2ltYWxzID0gZGVjaW1hbHNGb3Ioc3RlcCk7XG5cbiAgY29uc3QgdGlja3M6IG51bWJlcltdID0gW107XG4gIGNvbnN0IHRvdGFsID0gTWF0aC5yb3VuZCgobmljZU1heCAtIG5pY2VNaW4pIC8gc3RlcCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IHRvdGFsOyBpKyspIHtcbiAgICB0aWNrcy5wdXNoKE51bWJlcigobmljZU1pbiArIGkgKiBzdGVwKS50b0ZpeGVkKGRlY2ltYWxzKSkpO1xuICB9XG5cbiAgcmV0dXJuIFtOdW1iZXIobmljZU1pbi50b0ZpeGVkKGRlY2ltYWxzKSksIE51bWJlcihuaWNlTWF4LnRvRml4ZWQoZGVjaW1hbHMpKSwgc3RlcCwgdGlja3NdO1xufVxuXG4vKipcbiAqIE1vbm90b25lLWN1YmljIHRhbmdlbnRzIChGcml0c2NoLUNhcmxzb24pLiBMaW1pdGluZyBlYWNoIHRhbmdlbnQgdG8gdGhlXG4gKiBuZWlnaGJvdXJpbmcgc2VjYW50cyBpcyB3aGF0IHN0b3BzIHRoZSBjdXJ2ZSBvdmVyc2hvb3Rpbmc6IGEgcGxhaW5cbiAqIENhdG11bGwtUm9tIHNwbGluZSBidWxnZXMgcGFzdCB0aGUgZGF0YSBhbmQgaW52ZW50cyBwZWFrcyB0aGF0IHdlcmUgbmV2ZXJcbiAqIG1lYXN1cmVkLCB3aGljaCBvbiBhIGNoYXJ0IGlzIGEgZmFsc2Ugc3RhdGVtZW50IGFib3V0IHRoZSBudW1iZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVUYW5nZW50cyh4czogbnVtYmVyW10sIHlzOiBudW1iZXJbXSk6IG51bWJlcltdIHtcbiAgY29uc3QgbiA9IHhzLmxlbmd0aDtcbiAgaWYgKG4gPCAyKSByZXR1cm4gbmV3IEFycmF5KG4pLmZpbGwoMCk7XG5cbiAgY29uc3Qgc2VjYW50czogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgZHggPSB4c1tpICsgMV0gLSB4c1tpXTtcbiAgICBzZWNhbnRzLnB1c2goZHggPT09IDAgPyAwIDogKHlzW2kgKyAxXSAtIHlzW2ldKSAvIGR4KTtcbiAgfVxuXG4gIGNvbnN0IG06IG51bWJlcltdID0gbmV3IEFycmF5KG4pO1xuICBtWzBdID0gc2VjYW50c1swXTtcbiAgbVtuIC0gMV0gPSBzZWNhbnRzW24gLSAyXTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBuIC0gMTsgaSsrKSBtW2ldID0gKHNlY2FudHNbaSAtIDFdICsgc2VjYW50c1tpXSkgLyAyO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykge1xuICAgIGlmIChzZWNhbnRzW2ldID09PSAwKSB7XG4gICAgICAvLyBGbGF0IHNlZ21lbnQ6IGJvdGggZW5kcyBtdXN0IGJlIGZsYXQgb3IgdGhlIGN1cnZlIGxlYXZlcyB0aGUgZGF0YSByYW5nZS5cbiAgICAgIG1baV0gPSAwO1xuICAgICAgbVtpICsgMV0gPSAwO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGEgPSBtW2ldIC8gc2VjYW50c1tpXTtcbiAgICBjb25zdCBiID0gbVtpICsgMV0gLyBzZWNhbnRzW2ldO1xuICAgIC8vIE5lZ2F0aXZlIHJhdGlvcyBtZWFuIHRoZSB0YW5nZW50IHBvaW50cyBhd2F5IGZyb20gdGhlIHNlY2FudC5cbiAgICBpZiAoYSA8IDApIG1baV0gPSAwO1xuICAgIGlmIChiIDwgMCkgbVtpICsgMV0gPSAwO1xuICAgIGNvbnN0IHN1bSA9IGEgKiBhICsgYiAqIGI7XG4gICAgaWYgKHN1bSA+IDkpIHtcbiAgICAgIGNvbnN0IHQgPSAzIC8gTWF0aC5zcXJ0KHN1bSk7XG4gICAgICBtW2ldID0gdCAqIGEgKiBzZWNhbnRzW2ldO1xuICAgICAgbVtpICsgMV0gPSB0ICogYiAqIHNlY2FudHNbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG07XG59XG5cbi8qKiBUdXJucyByZXNvbHZlZCBwb2ludHMgaW50byBhbiBzdmcgcGF0aCwgb3B0aW9uYWxseSBtb25vdG9uZS1zbW9vdGhlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBhdGgocG9pbnRzOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSwgc21vb3RoOiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKHBvaW50cy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgaWYgKHBvaW50cy5sZW5ndGggPT09IDEpIHJldHVybiAnTSAnICsgcG9pbnRzWzBdLnggKyAnICcgKyBwb2ludHNbMF0ueTtcblxuICBjb25zdCBoZWFkID0gJ00gJyArIHBvaW50c1swXS54ICsgJyAnICsgcG9pbnRzWzBdLnk7XG4gIGlmICghc21vb3RoKSB7XG4gICAgcmV0dXJuIGhlYWQgKyBwb2ludHMuc2xpY2UoMSkubWFwKChwKSA9PiAnIEwgJyArIHAueCArICcgJyArIHAueSkuam9pbignJyk7XG4gIH1cblxuICBjb25zdCB4cyA9IHBvaW50cy5tYXAoKHApID0+IHAueCk7XG4gIGNvbnN0IHlzID0gcG9pbnRzLm1hcCgocCkgPT4gcC55KTtcbiAgY29uc3QgbSA9IG1vbm90b25lVGFuZ2VudHMoeHMsIHlzKTtcblxuICBsZXQgZCA9IGhlYWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IGR4ID0geHNbaSArIDFdIC0geHNbaV07XG4gICAgY29uc3QgYzF4ID0geHNbaV0gKyBkeCAvIDM7XG4gICAgY29uc3QgYzF5ID0geXNbaV0gKyAobVtpXSAqIGR4KSAvIDM7XG4gICAgY29uc3QgYzJ4ID0geHNbaSArIDFdIC0gZHggLyAzO1xuICAgIGNvbnN0IGMyeSA9IHlzW2kgKyAxXSAtIChtW2kgKyAxXSAqIGR4KSAvIDM7XG4gICAgZCArPSAnIEMgJyArIGMxeCArICcgJyArIGMxeSArICcgJyArIGMyeCArICcgJyArIGMyeSArICcgJyArIHhzW2kgKyAxXSArICcgJyArIHlzW2kgKyAxXTtcbiAgfVxuICByZXR1cm4gZDtcbn1cbiJdfQ==
580
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvY2hhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBd0N2QyxvRkFBb0Y7QUFDcEYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBRW5DOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyw4QkFBOEIsQ0FBQztBQUVuRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDVCxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDM0MsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUVqQiw0RUFBNEU7SUFDNUUsUUFBUSxDQUFDLElBQWM7UUFDckIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxRQUFRLENBQUMsR0FBVztRQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENB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R0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFbkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqIE9uZSBwbG90dGVkIHNlcmllczogd2hpY2gga2V5IHRvIHJlYWQgb2ZmIGVhY2ggcm93LCBhbmQgaG93IHRvIG5hbWUgaXQuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0U2VyaWVzIHtcbiAga2V5OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbi8qKiBTcGFjZSByZXNlcnZlZCBhcm91bmQgdGhlIHBsb3QgYXJlYSBmb3IgYXhlcyBhbmQgbGFiZWxzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFydE1hcmdpbiB7XG4gIHRvcDogbnVtYmVyO1xuICByaWdodDogbnVtYmVyO1xuICBib3R0b206IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xufVxuXG4vKiogQSB5LWF4aXMgdGljazogaXRzIGRhdGEgdmFsdWUsIGl0cyByZXNvbHZlZCBzdmcgeSwgYW5kIGl0cyBmb3JtYXR0ZWQgbGFiZWwuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0VGljayB7XG4gIHZhbHVlOiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuLyoqIEEgaG9yaXpvbnRhbCBzbGljZSBvZiB0aGUgcGxvdCBiZWxvbmdpbmcgdG8gb25lIHggcG9zaXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0QmFuZCB7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGNlbnRyZTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xufVxuXG4vKiogSG93IHggcG9zaXRpb25zIGFyZSByZXNvbHZlZDogZGlzY3JldGUgYmFuZHMgKGJhcnMpIG9yIHBvaW50cyAobGluZS9hcmVhKS4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0U2NhbGVNb2RlID0gJ3BvaW50JyB8ICdiYW5kJztcblxuLyoqXG4gKiBXaGljaCBwaHlzaWNhbCBheGlzIGNhcnJpZXMgdGhlIGNhdGVnb3J5IHZzIHRoZSB2YWx1ZS4gT25seSB0aGUgYmFuZCBzY2FsZVxuICogKGJhcnMpIHN1cHBvcnRzICdob3Jpem9udGFsJyDigJQgbGluZS9hcmVhIHN0YXkgcG9pbnQtc2NhbGUgYW5kIHZlcnRpY2FsLFxuICogc2FtZSBhcyBUcmVtb3IgbmV2ZXIgb2ZmZXJzIGEgaG9yaXpvbnRhbCBsaW5lL2FyZWEgY2hhcnQgZWl0aGVyLlxuICovXG5leHBvcnQgdHlwZSBDaGFydE9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcblxuLyoqIE51bWJlciBvZiBjaGFydCBwYWxldHRlIHN0ZXBzIHRoYXQgZXhpc3QuIEEgNnRoIHNlcmllcyBkb2VzIG5vdCBnZXQgYSBjb2xvdXIuICovXG5leHBvcnQgY29uc3QgQ0hBUlRfQ09MT1JfTElNSVQgPSA1O1xuXG4vKipcbiAqIFRoZSBwYWludCB1c2VkIGZvciBhIHNlcmllcyBwYXN0IGBDSEFSVF9DT0xPUl9MSU1JVGAuXG4gKlxuICogVGhlIHBhbGV0dGUgaXMgdmFsaWRhdGVkIGZvciBsaWdodG5lc3MsIGNocm9tYSBhbmQgY29sb3VyLWJsaW5kIHNlcGFyYXRpb24gYXRcbiAqIGV4YWN0bHkgZml2ZSBzdGVwczsgZ2VuZXJhdGluZyBhIHNpeHRoIHdvdWxkIGxhbmQgb3V0c2lkZSB0aGF0IHZhbGlkYXRpb24sIGFuZFxuICogd3JhcHBpbmcgYmFjayB0byBzdGVwIDEgd291bGQgbWFrZSB0d28gc2VyaWVzIHNoYXJlIGFuIGlkZW50aXR5LiBCb3RoIGFyZVxuICogd29yc2UgdGhhbiBkcm9wcGluZyB0byBhIG5ldXRyYWwsIHNvIHRoZSBvdmVyZmxvdyBpcyBleHBsaWNpdGx5IHVuY29sb3VyZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBDSEFSVF9PVkVSRkxPV19DT0xPUiA9ICdyZ2IodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpJztcblxuLyoqXG4gKiBIYW5kcyBvdXQgcGFsZXR0ZSBzdGVwcyBieSBlbnRpdHkga2V5IHJhdGhlciB0aGFuIGJ5IHBvc2l0aW9uLlxuICpcbiAqIEEga2V5IGtlZXBzIGl0cyBzbG90IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHNjYWxlLCB3aGljaCBpcyB3aGF0IG1ha2VzXG4gKiBjb2xvdXIgZm9sbG93IHRoZSBlbnRpdHk6IGZpbHRlcmluZyBhIHNlcmllcyBvdXQgYW5kIGJhY2sgaW4sIG9yIHJlbW92aW5nIGFuXG4gKiBlYXJsaWVyIG9uZSwgbXVzdCBuZXZlciByZXBhaW50IHRoZSBzdXJ2aXZvcnMuIFBhc3QgdGhlIGZpZnRoIGRpc3RpbmN0IGtleVxuICogdGhlIHNjYWxlIHN0b3BzIGNvbG91cmluZyByYXRoZXIgdGhhbiBpbnZlbnRpbmcgYSBzdGVwIG9yIHdyYXBwaW5nIGFyb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENoYXJ0Q29sb3JTY2FsZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2xvdHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIG5leHQgPSAwO1xuXG4gIC8qKiBSZXNlcnZlcyBzbG90cyBmb3IgYGtleXNgIGluIG9yZGVyLCBsZWF2aW5nIGFscmVhZHkta25vd24ga2V5cyBhbG9uZS4gKi9cbiAgcmVnaXN0ZXIoa2V5czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoIXRoaXMuc2xvdHMuaGFzKGtleSkpIHRoaXMuc2xvdHMuc2V0KGtleSwgdGhpcy5uZXh0KyspO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBQYWludCBmb3IgYGtleWAsIHJlZ2lzdGVyaW5nIGl0IG9uIGZpcnN0IHNpZ2h0LiAqL1xuICBjb2xvckZvcihrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHNsb3QgPSB0aGlzLnNsb3RzLmdldChrZXkpO1xuICAgIGlmIChzbG90ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNsb3QgPSB0aGlzLm5leHQrKztcbiAgICAgIHRoaXMuc2xvdHMuc2V0KGtleSwgc2xvdCk7XG4gICAgfVxuICAgIGlmIChzbG90ID49IENIQVJUX0NPTE9SX0xJTUlUKSByZXR1cm4gQ0hBUlRfT1ZFUkZMT1dfQ09MT1I7XG4gICAgcmV0dXJuICdyZ2IodmFyKC0tY2hhcnQtJyArIChzbG90ICsgMSkgKyAnKSknO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBga2V5YCBmZWxsIHBhc3QgdGhlIHBhbGV0dGUgYW5kIHJlbmRlcnMgbmV1dHJhbC4gKi9cbiAgaXNPdmVyZmxvdyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNsb3QgPSB0aGlzLnNsb3RzLmdldChrZXkpO1xuICAgIHJldHVybiBzbG90ICE9PSB1bmRlZmluZWQgJiYgc2xvdCA+PSBDSEFSVF9DT0xPUl9MSU1JVDtcbiAgfVxuXG4gIC8qKiBTbG90IGluZGV4IGFzc2lnbmVkIHRvIGBrZXlgLCBvciB1bmRlZmluZWQgd2hlbiBpdCBpcyB1bmtub3duLiAqL1xuICBzbG90T2Yoa2V5OiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNsb3RzLmdldChrZXkpO1xuICB9XG59XG5cbi8qKlxuICogT3ducyBsYXlvdXQsIHNjYWxlcyBhbmQgY29sb3VyIGFzc2lnbm1lbnQgZm9yIG9uZSBgdG9sbGUtY2hhcnRgLCBzbyBldmVyeVxuICogY2hpbGQgZHJhd3MgaW50byB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLiBSZW5kZXJzIG5vdGhpbmcgaXRzZWxmLlxuICpcbiAqIFByb3ZpZGVkIG9uIGBDaGFydENvbXBvbmVudGAsIHNvIGVhY2ggY2hhcnQgZ2V0cyBpdHMgb3duIGluc3RhbmNlLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2hhcnRTZXJ2aWNlIHtcbiAgLyoqIFJvd3MgYmVpbmcgcGxvdHRlZCwgaW4geCBvcmRlci4gKi9cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PltdID0gW107XG4gIC8qKiBTZXJpZXMgZGVmaW5pdGlvbnMsIGluIHRoZSBvcmRlciB0aGV5IHNob3VsZCB0YWtlIHBhbGV0dGUgc3RlcHMuICovXG4gIHNlcmllczogQ2hhcnRTZXJpZXNbXSA9IFtdO1xuICAvKiogUm93IGtleSBob2xkaW5nIHRoZSB4IGNhdGVnb3J5L2xhYmVsLiAqL1xuICB4S2V5ID0gJyc7XG4gIC8qKiBXaGV0aGVyIG1hcmtzIHN0YWNrIG9uIGEgc2hhcmVkIGJhc2VsaW5lIHJhdGhlciB0aGFuIHNpdHRpbmcgc2lkZSBieSBzaWRlLiAqL1xuICBzdGFja2VkID0gZmFsc2U7XG4gIC8qKiBGdWxsIHN2ZyB3aWR0aCBpbiBweCwgdHJhY2tlZCBmcm9tIHRoZSBjb250YWluZXIncyBSZXNpemVPYnNlcnZlci4gKi9cbiAgd2lkdGggPSAwO1xuICAvKiogRnVsbCBzdmcgaGVpZ2h0IGluIHB4LiAqL1xuICBoZWlnaHQgPSAyNjA7XG4gIC8qKiBTcGFjZSByZXNlcnZlZCBhcm91bmQgdGhlIHBsb3QgYXJlYS4gKi9cbiAgbWFyZ2luOiBDaGFydE1hcmdpbiA9IHsgdG9wOiA4LCByaWdodDogOCwgYm90dG9tOiAyNCwgbGVmdDogNDAgfTtcbiAgLyoqIEZyYWN0aW9uIG9mIGEgYmFuZCdzIHN0ZXAgc3BlbnQgb24gcGFkZGluZywgc3BsaXQgZWl0aGVyIHNpZGUuICovXG4gIGJhbmRQYWRkaW5nID0gMC4yO1xuICAvKipcbiAgICogV2hpY2ggcGh5c2ljYWwgYXhpcyBpcyB0aGUgY2F0ZWdvcnkgYXhpcy4gQmFycyBmbGlwIHRoaXMgdmlhIGBjb25maWd1cmUoKWA7XG4gICAqIGV2ZXJ5IG90aGVyIGdlb21ldHJ5IGdldHRlciBicmFuY2hlcyBvbiBpdCBpbnRlcm5hbGx5LCBkZWZhdWx0aW5nIHRvIHRoZVxuICAgKiBleGFjdCB2ZXJ0aWNhbCBmb3JtdWxhIHdoZW4gdW5zZXQsIHNvIGV4aXN0aW5nIHZlcnRpY2FsIGNoYXJ0cyBhcmUgdW5hZmZlY3RlZC5cbiAgICovXG4gIG9yaWVudGF0aW9uOiBDaGFydE9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJztcblxuICBwcml2YXRlIHNjYWxlTW9kZTogQ2hhcnRTY2FsZU1vZGUgPSAncG9pbnQnO1xuICBwcml2YXRlIHplcm9SZXF1aXJlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZG9tYWluTWluID0gMDtcbiAgcHJpdmF0ZSBkb21haW5NYXggPSAxO1xuICBwcml2YXRlIHRpY2tWYWx1ZXM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgdGlja1N0ZXAgPSAxO1xuXG4gIC8qKiBQYWxldHRlIGFzc2lnbm1lbnQsIGtleWVkIGJ5IHNlcmllcyBpZGVudGl0eS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb2xvcnMgPSBuZXcgQ2hhcnRDb2xvclNjYWxlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsYXlvdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICAvKiogRW1pdHMgYSB2ZXJzaW9uIG51bWJlciB3aGVuZXZlciBzY2FsZXMsIGRpbWVuc2lvbnMgb3IgZGF0YSBjaGFuZ2UuICovXG4gIHJlYWRvbmx5IGxheW91dCQgPSB0aGlzLmxheW91dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmVJbmRleFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICAvKiogSW5kZXggb2YgdGhlIHggcG9zaXRpb24gdW5kZXIgdGhlIHBvaW50ZXIsIG9yIG51bGwgd2hlbiBub3QgaG92ZXJpbmcuICovXG4gIHJlYWRvbmx5IGFjdGl2ZUluZGV4JCA9IHRoaXMuYWN0aXZlSW5kZXhTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgbGF5b3V0VmVyc2lvbiA9IDA7XG4gIHByaXZhdGUgZW1pdFNjaGVkdWxlZCA9IGZhbHNlO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2VvbWV0cnlcblxuICBnZXQgcGxvdExlZnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXJnaW4ubGVmdDtcbiAgfVxuXG4gIGdldCBwbG90VG9wKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubWFyZ2luLnRvcDtcbiAgfVxuXG4gIGdldCBwbG90V2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhpcy53aWR0aCAtIHRoaXMubWFyZ2luLmxlZnQgLSB0aGlzLm1hcmdpbi5yaWdodCk7XG4gIH1cblxuICBnZXQgcGxvdEhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLmhlaWdodCAtIHRoaXMubWFyZ2luLnRvcCAtIHRoaXMubWFyZ2luLmJvdHRvbSk7XG4gIH1cblxuICBnZXQgcGxvdFJpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGxvdExlZnQgKyB0aGlzLnBsb3RXaWR0aDtcbiAgfVxuXG4gIGdldCBwbG90Qm90dG9tKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGxvdFRvcCArIHRoaXMucGxvdEhlaWdodDtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgeCBwb3NpdGlvbnMuICovXG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoO1xuICB9XG5cbiAgLyoqIEhvdyB4IGlzIGN1cnJlbnRseSByZXNvbHZlZC4gQmFycyBmbGlwIHRoaXMgdG8gJ2JhbmQnLiAqL1xuICBnZXQgbW9kZSgpOiBDaGFydFNjYWxlTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuc2NhbGVNb2RlO1xuICB9XG5cbiAgLyoqIFJlc29sdmVkIHkgdGlja3MsIHdpdGggc3ZnIGNvb3JkaW5hdGVzIGFuZCBmb3JtYXR0ZWQgbGFiZWxzLiAqL1xuICBnZXQgdGlja3MoKTogQ2hhcnRUaWNrW10ge1xuICAgIHJldHVybiB0aGlzLnRpY2tWYWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHtcbiAgICAgIHZhbHVlLFxuICAgICAgeTogdGhpcy55Rm9yKHZhbHVlKSxcbiAgICAgIGxhYmVsOiB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKiogQ3VycmVudCB5IGRvbWFpbiBhcyBbbWluLCBtYXhdLiAqL1xuICBnZXQgZG9tYWluKCk6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIHJldHVybiBbdGhpcy5kb21haW5NaW4sIHRoaXMuZG9tYWluTWF4XTtcbiAgfVxuXG4gIC8qKiBUaGUgeC1heGlzIGNhdGVnb3J5IGxhYmVscywgb25lIHBlciByb3cuICovXG4gIGdldCB4TGFiZWxzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICBjb25zdCByYXcgPSByb3c/Llt0aGlzLnhLZXldO1xuICAgICAgcmV0dXJuIHJhdyA9PSBudWxsID8gJycgOiBTdHJpbmcocmF3KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZWdpc3RyYXRpb25cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGNoYXJ0J3MgY29uZmlndXJhdGlvbiBhbmQgcmVjb21wdXRlcyB0aGUgc2NhbGVzLlxuICAgKiBDYWxsZWQgYnkgdGhlIGNvbnRhaW5lciBvbiBpbnB1dCBjaGFuZ2VzIGFuZCBvbiByZXNpemUuXG4gICAqL1xuICBjb25maWd1cmUoY29uZmlnOiBQYXJ0aWFsPFBpY2s8Q2hhcnRTZXJ2aWNlLFxuICAgICdkYXRhJyB8ICdzZXJpZXMnIHwgJ3hLZXknIHwgJ3N0YWNrZWQnIHwgJ3dpZHRoJyB8ICdoZWlnaHQnIHwgJ21hcmdpbicgfCAnYmFuZFBhZGRpbmcnIHwgJ29yaWVudGF0aW9uJz4+KTogdm9pZCB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjb25maWcpO1xuICAgIGlmIChjb25maWcuc2VyaWVzKSB0aGlzLnN5bmNDb2xvclNsb3RzKGNvbmZpZy5zZXJpZXMpO1xuICAgIHRoaXMucmVjb21wdXRlKCk7XG4gIH1cblxuICAvKiogU3dpdGNoZXMgeCB0byBhIGJhbmQgc2NhbGUuIEJhcnMgY2FsbCB0aGlzOyBpdCBhbHNvIGZvcmNlcyB6ZXJvIGludG8gdGhlIGRvbWFpbi4gKi9cbiAgdXNlQmFuZFNjYWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNjYWxlTW9kZSA9PT0gJ2JhbmQnICYmIHRoaXMuemVyb1JlcXVpcmVkKSByZXR1cm47XG4gICAgdGhpcy5zY2FsZU1vZGUgPSAnYmFuZCc7XG4gICAgdGhpcy56ZXJvUmVxdWlyZWQgPSB0cnVlO1xuICAgIHRoaXMucmVjb21wdXRlKCk7XG4gIH1cblxuICAvKiogRm9yY2VzIHplcm8gaW50byB0aGUgeSBkb21haW4sIGZvciBtYXJrcyBhbmNob3JlZCB0byBhIGJhc2VsaW5lLiAqL1xuICByZXF1aXJlWmVybygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy56ZXJvUmVxdWlyZWQpIHJldHVybjtcbiAgICB0aGlzLnplcm9SZXF1aXJlZCA9IHRydWU7XG4gICAgdGhpcy5yZWNvbXB1dGUoKTtcbiAgfVxuXG4gIC8qKiBSZXNlcnZlcyBwYWxldHRlIHNsb3RzIGluIHNlcmllcyBvcmRlciwgbGVhdmluZyBrbm93biBrZXlzIHVudG91Y2hlZC4gKi9cbiAgcHJpdmF0ZSBzeW5jQ29sb3JTbG90cyhzZXJpZXM6IENoYXJ0U2VyaWVzW10pOiB2b2lkIHtcbiAgICB0aGlzLmNvbG9ycy5yZWdpc3RlcihzZXJpZXMubWFwKChpdGVtKSA9PiBpdGVtLmtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhaW50IGZvciBhIHNlcmllcywga2V5ZWQgYnkgaWRlbnRpdHkgcmF0aGVyIHRoYW4gYnkgaW5kZXggaW4gdGhlIHZpc2libGVcbiAgICogYXJyYXkuIFBhc3QgdGhlIGZpZnRoIGRpc3RpbmN0IGtleSB0aGlzIHJldHVybnMgdGhlIG5ldXRyYWwgb3ZlcmZsb3cgY29sb3VyLlxuICAgKi9cbiAgY29sb3JGb3Ioc2VyaWVzS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbG9ycy5jb2xvckZvcihzZXJpZXNLZXkpO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiB0aGlzIHNlcmllcyBmZWxsIHBhc3QgdGhlIHBhbGV0dGUgYW5kIHJlbmRlcnMgbmV1dHJhbC4gKi9cbiAgaXNPdmVyZmxvd1NlcmllcyhzZXJpZXNLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbG9ycy5pc092ZXJmbG93KHNlcmllc0tleSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB0aGUgc2NhbGVzXG5cbiAgLyoqIFJlYWRzIGEgc2VyaWVzIHZhbHVlIG9mZiBhIHJvdywgb3IgbnVsbCB3aGVuIGl0IGlzIG1pc3Npbmcvbm9uLW51bWVyaWMuICovXG4gIHZhbHVlQXQoc2VyaWVzS2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgICBjb25zdCByYXcgPSB0aGlzLmRhdGFbaW5kZXhdPy5bc2VyaWVzS2V5XTtcbiAgICBpZiAocmF3ID09IG51bGwgfHwgcmF3ID09PSAnJykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHJhdyk7XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShudW0pID8gbnVtIDogbnVsbDtcbiAgfVxuXG4gIC8qKiBTdW0gb2YgZXZlcnkgc2VyaWVzIGJlbG93IGBzZXJpZXNLZXlgIGF0IGBpbmRleGAsIGZvciBzdGFja2VkIG1hcmtzLiAqL1xuICBzdGFja0Jhc2Uoc2VyaWVzS2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5zdGFja2VkKSByZXR1cm4gMDtcbiAgICBsZXQgYmFzZSA9IDA7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuc2VyaWVzKSB7XG4gICAgICBpZiAoaXRlbS5rZXkgPT09IHNlcmllc0tleSkgYnJlYWs7XG4gICAgICBiYXNlICs9IHRoaXMudmFsdWVBdChpdGVtLmtleSwgaW5kZXgpID8/IDA7XG4gICAgfVxuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgLyoqIFN1bSBvZiBldmVyeSBzZXJpZXMgYXQgYGluZGV4YC4gKi9cbiAgc3RhY2tUb3RhbChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgdG90YWwgPSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNlcmllcykgdG90YWwgKz0gdGhpcy52YWx1ZUF0KGl0ZW0ua2V5LCBpbmRleCkgPz8gMDtcbiAgICByZXR1cm4gdG90YWw7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBhIGRhdGEgdmFsdWUgdG8gYSBwb3NpdGlvbiBhbG9uZyB0aGUgKnZhbHVlKiBheGlzIOKAlCBzdmcgeSB3aGVuXG4gICAqIHZlcnRpY2FsIChzdmcgeSBncm93cyBkb3dud2FyZCwgc28gdGhlIGRvbWFpbiBtYXhpbXVtIGxhbmRzIG9uIGBwbG90VG9wYCksXG4gICAqIHN2ZyB4IHdoZW4gaG9yaXpvbnRhbCAodGhlIGRvbWFpbiBtYXhpbXVtIGxhbmRzIG9uIGBwbG90UmlnaHRgKS5cbiAgICovXG4gIHlGb3IodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgc3BhbiA9IHRoaXMuZG9tYWluTWF4IC0gdGhpcy5kb21haW5NaW47XG4gICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgaWYgKHNwYW4gPD0gMCkgcmV0dXJuIHRoaXMucGxvdExlZnQ7XG4gICAgICBjb25zdCByYXRpbyA9ICh2YWx1ZSAtIHRoaXMuZG9tYWluTWluKSAvIHNwYW47XG4gICAgICByZXR1cm4gdGhpcy5wbG90TGVmdCArIHJhdGlvICogdGhpcy5wbG90V2lkdGg7XG4gICAgfVxuICAgIGlmIChzcGFuIDw9IDApIHJldHVybiB0aGlzLnBsb3RCb3R0b207XG4gICAgY29uc3QgcmF0aW8gPSAodmFsdWUgLSB0aGlzLmRvbWFpbk1pbikgLyBzcGFuO1xuICAgIHJldHVybiB0aGlzLnBsb3RCb3R0b20gLSByYXRpbyAqIHRoaXMucGxvdEhlaWdodDtcbiAgfVxuXG4gIC8qKiBUaGUgdmFsdWUtYXhpcyBwb3NpdGlvbiBvZiB0aGUgemVybyBsaW5lLCBjbGFtcGVkIGludG8gdGhlIHBsb3QuICovXG4gIGdldCBiYXNlbGluZVkoKTogbnVtYmVyIHtcbiAgICBjb25zdCB6ZXJvID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgdGhpcy5kb21haW5NaW4pLCB0aGlzLmRvbWFpbk1heCk7XG4gICAgcmV0dXJuIHRoaXMueUZvcih6ZXJvKTtcbiAgfVxuXG4gIC8qKiBMZW5ndGggb2YgdGhlIHBsb3QgYWxvbmcgdGhlIGNhdGVnb3J5IGF4aXM6IGBwbG90SGVpZ2h0YCB3aGVuIGhvcml6b250YWwsIGVsc2UgYHBsb3RXaWR0aGAuICovXG4gIHByaXZhdGUgZ2V0IGNhdGVnb3J5QXhpc0xlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyB0aGlzLnBsb3RIZWlnaHQgOiB0aGlzLnBsb3RXaWR0aDtcbiAgfVxuXG4gIC8qKiBPcmlnaW4gb2YgdGhlIHBsb3QgYWxvbmcgdGhlIGNhdGVnb3J5IGF4aXM6IGBwbG90VG9wYCB3aGVuIGhvcml6b250YWwsIGVsc2UgYHBsb3RMZWZ0YC4gKi9cbiAgcHJpdmF0ZSBnZXQgY2F0ZWdvcnlBeGlzT3JpZ2luKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/IHRoaXMucGxvdFRvcCA6IHRoaXMucGxvdExlZnQ7XG4gIH1cblxuICAvKiogV2lkdGggb2Ygb25lIGJhbmQsIGV4Y2x1ZGluZyBpdHMgcGFkZGluZy4gTWVhbmluZ2Z1bCBpbiBiYW5kIG1vZGUuICovXG4gIGdldCBiYW5kV2lkdGgoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5jb3VudCA9PT0gMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMuYmFuZFN0ZXAgKiAoMSAtIHRoaXMuYmFuZFBhZGRpbmcpO1xuICB9XG5cbiAgLyoqIERpc3RhbmNlIGJldHdlZW4gYWRqYWNlbnQgYmFuZCBzdGFydHMuIEJhbmRzIHRpbGUgdGhlIHBsb3QgZXhhY3RseS4gKi9cbiAgZ2V0IGJhbmRTdGVwKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY291bnQgPT09IDApIHJldHVybiAwO1xuICAgIHJldHVybiB0aGlzLmNhdGVnb3J5QXhpc0xlbmd0aCAvIHRoaXMuY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogR2VvbWV0cnkgb2YgdGhlIGJhbmQgYXQgYGluZGV4YCwgYWxvbmcgdGhlIGNhdGVnb3J5IGF4aXMg4oCUIHggd2hlblxuICAgKiB2ZXJ0aWNhbCAodG9kYXkncyBtZWFuaW5nKSwgeSB3aGVuIGhvcml6b250YWwuXG4gICAqL1xuICBiYW5kRm9yKGluZGV4OiBudW1iZXIpOiBDaGFydEJhbmQge1xuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmJhbmRTdGVwO1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5iYW5kV2lkdGg7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNhdGVnb3J5QXhpc09yaWdpbiArIGluZGV4ICogc3RlcCArIChzdGVwIC0gd2lkdGgpIC8gMjtcbiAgICByZXR1cm4geyBzdGFydCwgY2VudHJlOiBzdGFydCArIHdpZHRoIC8gMiwgd2lkdGggfTtcbiAgfVxuXG4gIC8qKiB4IG9mIHRoZSBkYXRhIHBvaW50IGF0IGBpbmRleGAgb24gdGhlIHBvaW50IHNjYWxlLiAqL1xuICBwb2ludFgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY291bnQgPT09IDApIHJldHVybiB0aGlzLnBsb3RMZWZ0O1xuICAgIGlmICh0aGlzLmNvdW50ID09PSAxKSByZXR1cm4gdGhpcy5wbG90TGVmdCArIHRoaXMucGxvdFdpZHRoIC8gMjtcbiAgICByZXR1cm4gdGhpcy5wbG90TGVmdCArIChpbmRleCAqIHRoaXMucGxvdFdpZHRoKSAvICh0aGlzLmNvdW50IC0gMSk7XG4gIH1cblxuICAvKiogeCBvZiBgaW5kZXhgIHVuZGVyIHdoaWNoZXZlciBzY2FsZSB0aGUgY2hhcnQgaXMgY3VycmVudGx5IHVzaW5nLiAqL1xuICB4Rm9yKGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNjYWxlTW9kZSA9PT0gJ2JhbmQnID8gdGhpcy5iYW5kRm9yKGluZGV4KS5jZW50cmUgOiB0aGlzLnBvaW50WChpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBvaW50ZXIgY2F0Y2htZW50IGFyZWEgZm9yIGBpbmRleGAg4oCUIGRlbGliZXJhdGVseSB3aWRlciB0aGFuIHRoZSBtYXJrLlxuICAgKiBJbiBiYW5kIG1vZGUgaXQgaXMgdGhlIHdob2xlIGJhbmQgc3RlcDsgb24gdGhlIHBvaW50IHNjYWxlIGl0IHJ1bnMgdG8gdGhlXG4gICAqIG1pZHBvaW50cyBvZiB0aGUgbmVpZ2hib3VyaW5nIHBvaW50cywgc28gdGhlIHBvaW50ZXIgb25seSBoYXMgdG8gYmUgbmVhcmVzdC5cbiAgICovXG4gIGhpdEJhbmRGb3IoaW5kZXg6IG51bWJlcik6IENoYXJ0QmFuZCB7XG4gICAgaWYgKHRoaXMuc2NhbGVNb2RlID09PSAnYmFuZCcpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmJhbmRTdGVwO1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmNhdGVnb3J5QXhpc09yaWdpbiArIGluZGV4ICogc3RlcDtcbiAgICAgIHJldHVybiB7IHN0YXJ0LCBjZW50cmU6IHN0YXJ0ICsgc3RlcCAvIDIsIHdpZHRoOiBzdGVwIH07XG4gICAgfVxuICAgIGNvbnN0IHggPSB0aGlzLnBvaW50WChpbmRleCk7XG4gICAgY29uc3QgcHJldiA9IGluZGV4ID4gMCA/IHRoaXMucG9pbnRYKGluZGV4IC0gMSkgOiB0aGlzLnBsb3RMZWZ0IC0gKHRoaXMucGxvdFJpZ2h0IC0gdGhpcy5wbG90TGVmdCk7XG4gICAgY29uc3QgbmV4dCA9XG4gICAgICBpbmRleCA8IHRoaXMuY291bnQgLSAxID8gdGhpcy5wb2ludFgoaW5kZXggKyAxKSA6IHRoaXMucGxvdFJpZ2h0ICsgKHRoaXMucGxvdFJpZ2h0IC0gdGhpcy5wbG90TGVmdCk7XG4gICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCh0aGlzLnBsb3RMZWZ0LCAocHJldiArIHgpIC8gMik7XG4gICAgY29uc3QgZW5kID0gTWF0aC5taW4odGhpcy5wbG90UmlnaHQsICh4ICsgbmV4dCkgLyAyKTtcbiAgICByZXR1cm4geyBzdGFydCwgY2VudHJlOiB4LCB3aWR0aDogTWF0aC5tYXgoMCwgZW5kIC0gc3RhcnQpIH07XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaG92ZXJpbmdcblxuICAvKiogSW5kZXggY3VycmVudGx5IHVuZGVyIHRoZSBwb2ludGVyLCBvciBudWxsLiAqL1xuICBnZXQgYWN0aXZlSW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlSW5kZXhTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgc2V0QWN0aXZlSW5kZXgoaW5kZXg6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleFN1YmplY3QudmFsdWUgPT09IGluZGV4KSByZXR1cm47XG4gICAgdGhpcy5hY3RpdmVJbmRleFN1YmplY3QubmV4dChpbmRleCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkb21haW5zXG5cbiAgcHJpdmF0ZSByZWNvbXB1dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuc3RhY2tlZCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHZhbHVlcy5wdXNoKHRoaXMuc3RhY2tUb3RhbChpKSk7XG4gICAgICAvLyBBIHN0YWNrIHN0aWxsIGhhcyB0byBzaG93IGl0cyBvd24gZmxvb3Igd2hlbiBhIHNlcmllcyBnb2VzIG5lZ2F0aXZlLlxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuc2VyaWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdiA9IHRoaXMudmFsdWVBdChpdGVtLmtleSwgaSk7XG4gICAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB2IDwgMCkgdmFsdWVzLnB1c2godik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuc2VyaWVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdiA9IHRoaXMudmFsdWVBdChpdGVtLmtleSwgaSk7XG4gICAgICAgICAgaWYgKHYgIT0gbnVsbCkgdmFsdWVzLnB1c2godik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy56ZXJvUmVxdWlyZWQpIHZhbHVlcy5wdXNoKDApO1xuXG4gICAgY29uc3QgW21pbiwgbWF4LCBzdGVwLCB0aWNrc10gPSBuaWNlU2NhbGUodmFsdWVzKTtcbiAgICB0aGlzLmRvbWFpbk1pbiA9IG1pbjtcbiAgICB0aGlzLmRvbWFpbk1heCA9IG1heDtcbiAgICB0aGlzLnRpY2tTdGVwID0gc3RlcDtcbiAgICB0aGlzLnRpY2tWYWx1ZXMgPSB0aWNrcztcblxuICAgIC8vIE9ubHkgdGVsbCBzdWJzY3JpYmVycyB3aGVuIHNvbWV0aGluZyB0aGV5IHdvdWxkIGRyYXcgZGlmZmVyZW50bHkgYWN0dWFsbHlcbiAgICAvLyBjaGFuZ2VkLiBgY29uZmlndXJlKClgIGlzIGNhbGxlZCBmcm9tIG5nT25DaGFuZ2VzLCBhbmQgYW4gYXBwIGJpbmRpbmdcbiAgICAvLyBgW2RhdGFdPVwiaXRlbXMuZmlsdGVyKC4uLilcImAgaGFuZHMgdXMgYSBmcmVzaCBhcnJheSByZWZlcmVuY2Ugb24gZXZlcnlcbiAgICAvLyBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3Mg4oCUIGFuIG9yZGluYXJ5IHRoaW5nIHRvIHdyaXRlLiBFbWl0dGluZyBvbiBldmVyeSBjYWxsXG4gICAgLy8gbWFkZSBzdWJzY3JpYmVycyBtYXJrRm9yQ2hlY2ssIHdoaWNoIHNjaGVkdWxlZCBhbm90aGVyIHBhc3MsIHdoaWNoIGNhbGxlZFxuICAgIC8vIGNvbmZpZ3VyZSBhZ2FpbjogdGhlIGN5Y2xlIG5ldmVyIGNsb3NlZCBhbmQgdGhlIHBhZ2UgbG9ja2VkIHVwLlxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMubGF5b3V0U2lnbmF0dXJlKHZhbHVlcyk7XG4gICAgaWYgKHNpZ25hdHVyZSA9PT0gdGhpcy5sYXN0U2lnbmF0dXJlKSByZXR1cm47XG4gICAgdGhpcy5sYXN0U2lnbmF0dXJlID0gc2lnbmF0dXJlO1xuXG4gICAgdGhpcy5zY2hlZHVsZUVtaXQoKTtcbiAgfVxuXG4gIC8qKiBFdmVyeXRoaW5nIGEgc3Vic2NyaWJlciB3b3VsZCByZW5kZXIgZGlmZmVyZW50bHksIGZsYXR0ZW5lZCBmb3IgY29tcGFyaXNvbi4gKi9cbiAgcHJpdmF0ZSBsYXN0U2lnbmF0dXJlID0gJyc7XG5cbiAgcHJpdmF0ZSBsYXlvdXRTaWduYXR1cmUodmFsdWVzOiBudW1iZXJbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuY291bnQsXG4gICAgICB0aGlzLnhLZXksXG4gICAgICB0aGlzLnN0YWNrZWQsXG4gICAgICB0aGlzLndpZHRoLFxuICAgICAgdGhpcy5oZWlnaHQsXG4gICAgICB0aGlzLmJhbmRQYWRkaW5nLFxuICAgICAgdGhpcy5zY2FsZU1vZGUsXG4gICAgICB0aGlzLm9yaWVudGF0aW9uLFxuICAgICAgdGhpcy56ZXJvUmVxdWlyZWQsXG4gICAgICB0aGlzLm1hcmdpbi50b3AsIHRoaXMubWFyZ2luLnJpZ2h0LCB0aGlzLm1hcmdpbi5ib3R0b20sIHRoaXMubWFyZ2luLmxlZnQsXG4gICAgICB0aGlzLmRvbWFpbk1pbiwgdGhpcy5kb21haW5NYXgsIHRoaXMudGlja1N0ZXAsXG4gICAgICB0aGlzLnRpY2tWYWx1ZXMuam9pbignLCcpLFxuICAgICAgdGhpcy5zZXJpZXMubWFwKChzKSA9PiBzLmtleSArICc6JyArIHMubGFiZWwpLmpvaW4oJywnKSxcbiAgICAgIHRoaXMueExhYmVscy5qb2luKCdcdTAwMDEnKSxcbiAgICAgIHZhbHVlcy5qb2luKCcsJyksXG4gICAgXS5qb2luKCdcdTAwMDAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2FsZXNjZXMgbGF5b3V0IG5vdGlmaWNhdGlvbnMgaW50byBhIG1pY3JvdGFzaywgc28gc2V2ZXJhbCBjaGlsZHJlblxuICAgKiByZWdpc3RlcmluZyBpbiB0aGUgc2FtZSBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgcHJvZHVjZSBvbmUgZW1pc3Npb24gYWZ0ZXJcbiAgICogdGhleSBoYXZlIGFsbCBzZXR0bGVkIHJhdGhlciB0aGFuIG9uZSBlYWNoIG1pZC1wYXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZUVtaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sYXlvdXRWZXJzaW9uKys7XG4gICAgaWYgKHRoaXMuZW1pdFNjaGVkdWxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZW1pdFNjaGVkdWxlZCA9IHRydWU7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgdGhpcy5lbWl0U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmxheW91dFN1YmplY3QubmV4dCh0aGlzLmxheW91dFZlcnNpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZvcm1hdHMgYSB2YWx1ZSBmb3IgYSB0aWNrIGxhYmVsIGF0IHRoZSBjdXJyZW50IHRpY2sgc3RlcCdzIHByZWNpc2lvbi4gKi9cbiAgZm9ybWF0VmFsdWUodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZGVjaW1hbHMgPSBkZWNpbWFsc0Zvcih0aGlzLnRpY2tTdGVwKTtcbiAgICByZXR1cm4gdmFsdWUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkZWNpbWFscyxcbiAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZGVjaW1hbHMsXG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBhdGhzXG5cbiAgLyoqIFN0cmFpZ2h0LXNlZ21lbnQgcGF0aCB0aHJvdWdoIHRoZSBzZXJpZXMnIGRlZmluZWQgcG9pbnRzLiAqL1xuICBsaW5lUGF0aChzZXJpZXNLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGJ1aWxkUGF0aCh0aGlzLnBvaW50c0ZvcihzZXJpZXNLZXkpLCBmYWxzZSk7XG4gIH1cblxuICAvKiogTW9ub3RvbmUtY3ViaWMgcGF0aCB0aHJvdWdoIHRoZSBzZXJpZXMnIGRlZmluZWQgcG9pbnRzLiAqL1xuICBzbW9vdGhQYXRoKHNlcmllc0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoKHRoaXMucG9pbnRzRm9yKHNlcmllc0tleSksIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbGxlZC1hcmVhIHBhdGg6IHRoZSBzZXJpZXMnIGxpbmUsIGNsb3NlZCBiYWNrIGFsb25nIGl0cyBiYXNlbGluZS4gV2hlblxuICAgKiBzdGFja2VkLCB0aGUgZmxvb3IgaXMgdGhlIHRvcCBvZiB0aGUgc2VyaWVzIGJlbG93IHJhdGhlciB0aGFuIHplcm8uXG4gICAqL1xuICBhcmVhUGF0aChzZXJpZXNLZXk6IHN0cmluZywgc21vb3RoOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50c0ZvcihzZXJpZXNLZXkpO1xuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG5cbiAgICBjb25zdCB0b3AgPSBidWlsZFBhdGgocG9pbnRzLCBzbW9vdGgpO1xuICAgIGNvbnN0IGZsb29yID0gcG9pbnRzXG4gICAgICAubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLnN0YWNrZWQgPyB0aGlzLnN0YWNrQmFzZShzZXJpZXNLZXksIHAuaW5kZXgpIDogMDtcbiAgICAgICAgcmV0dXJuIHsgeDogcC54LCB5OiB0aGlzLnlGb3IoYmFzZSksIGluZGV4OiBwLmluZGV4IH07XG4gICAgICB9KVxuICAgICAgLnJldmVyc2UoKTtcbiAgICBjb25zdCBib3R0b20gPSBidWlsZFBhdGgoZmxvb3IsIHNtb290aCk7XG4gICAgLy8gUmUtZW50ZXIgdGhlIHJldmVyc2VkIGZsb29yIHdpdGggYSBsaW5lLCB0aGVuIGNsb3NlLlxuICAgIHJldHVybiB0b3AgKyAnIEwgJyArIGZsb29yWzBdLnggKyAnICcgKyBmbG9vclswXS55ICsgJyAnICsgYm90dG9tLnJlcGxhY2UoL15NLywgJ0wnKSArICcgWic7XG4gIH1cblxuICAvKiogUmVzb2x2ZWQgc3ZnIHBvaW50cyBmb3IgYSBzZXJpZXMsIHNraXBwaW5nIHJvd3Mgd2hlcmUgaXQgaGFzIG5vIHZhbHVlLiAqL1xuICBwb2ludHNGb3Ioc2VyaWVzS2V5OiBzdHJpbmcpOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXSB7XG4gICAgY29uc3QgcG9pbnRzOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2ID0gdGhpcy52YWx1ZUF0KHNlcmllc0tleSwgaSk7XG4gICAgICBpZiAodiA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHN0YWNrZWQgPSB0aGlzLnN0YWNrZWQgPyB0aGlzLnN0YWNrQmFzZShzZXJpZXNLZXksIGkpICsgdiA6IHY7XG4gICAgICBwb2ludHMucHVzaCh7IHg6IHRoaXMueEZvcihpKSwgeTogdGhpcy55Rm9yKHN0YWNrZWQpLCBpbmRleDogaSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBvaW50cztcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHB1cmUgaGVscGVyc1xuXG4vKiogRGVjaW1hbCBwbGFjZXMgd29ydGggc2hvd2luZyBmb3IgYSBnaXZlbiB0aWNrIHN0ZXAuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaW1hbHNGb3Ioc3RlcDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3RlcCkgfHwgc3RlcCA8PSAwKSByZXR1cm4gMDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDYsIC1NYXRoLmZsb29yKE1hdGgubG9nMTAoc3RlcCkpKSk7XG59XG5cbi8qKlxuICogUm91bmRzIGEgcmF3IHN0ZXAgdXAgdG8gdGhlIG5leHQgMS8yLzUgeCAxMF5uLlxuICpcbiAqIERpdmlkaW5nIHRoZSByYW5nZSBieSBhIHRpY2sgY291bnQgaW5zdGVhZCB3b3VsZCBwcm9kdWNlIHN0ZXBzIGxpa2UgMTkuNCBhbmRcbiAqIHNvIGF4aXMgbGFiZWxzIGxpa2UgMTkuNCAvIDM4LjggLyA1OC4yLCB3aGljaCBub2JvZHkgY2FuIHJlYWQgYSB2YWx1ZSBvZmYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuaWNlU3RlcChyYXdTdGVwOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoIU51bWJlci5pc0Zpbml0ZShyYXdTdGVwKSB8fCByYXdTdGVwIDw9IDApIHJldHVybiAxO1xuICBjb25zdCBtYWduaXR1ZGUgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZzEwKHJhd1N0ZXApKSk7XG4gIGNvbnN0IG5vcm1hbGlzZWQgPSByYXdTdGVwIC8gbWFnbml0dWRlO1xuICBsZXQgbXVsdGlwbGllcjogbnVtYmVyO1xuICBpZiAobm9ybWFsaXNlZCA8PSAxKSBtdWx0aXBsaWVyID0gMTtcbiAgZWxzZSBpZiAobm9ybWFsaXNlZCA8PSAyKSBtdWx0aXBsaWVyID0gMjtcbiAgZWxzZSBpZiAobm9ybWFsaXNlZCA8PSA1KSBtdWx0aXBsaWVyID0gNTtcbiAgZWxzZSBtdWx0aXBsaWVyID0gMTA7XG4gIHJldHVybiBtdWx0aXBsaWVyICogbWFnbml0dWRlO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIHJlYWRhYmxlIHkgc2NhbGUgb3ZlciBgdmFsdWVzYDogcmV0dXJucyBgW21pbiwgbWF4LCBzdGVwLCB0aWNrc11gXG4gKiB3aXRoIHRoZSBkb21haW4gc25hcHBlZCBvdXR3YXJkIHRvIHdob2xlIHN0ZXBzLlxuICpcbiAqIERlZ2VuZXJhdGUgaW5wdXRzIChlbXB0eSwgYWxsLWlkZW50aWNhbCkgc3RpbGwgcHJvZHVjZSBhIHVzYWJsZSBvbmUtdW5pdFxuICogZG9tYWluIHJhdGhlciB0aGFuIGEgemVyby1oZWlnaHQgcGxvdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5pY2VTY2FsZSh2YWx1ZXM6IG51bWJlcltdLCB0YXJnZXRUaWNrcyA9IDUpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyW11dIHtcbiAgY29uc3QgZmluaXRlID0gdmFsdWVzLmZpbHRlcigodikgPT4gTnVtYmVyLmlzRmluaXRlKHYpKTtcblxuICBsZXQgbWluID0gZmluaXRlLmxlbmd0aCA/IE1hdGgubWluKC4uLmZpbml0ZSkgOiAwO1xuICBsZXQgbWF4ID0gZmluaXRlLmxlbmd0aCA/IE1hdGgubWF4KC4uLmZpbml0ZSkgOiAxO1xuXG4gIGlmIChtaW4gPT09IG1heCkge1xuICAgIC8vIEEgZmxhdCBvciBzaW5nbGUtcG9pbnQgZG9tYWluIGhhcyBubyBzcGFuIHRvIGRpdmlkZTsgb3BlbiBpdCB0byBvbmUgdW5pdFxuICAgIC8vIGFyb3VuZCB0aGUgdmFsdWUgc28gdGhlIG1hcmsgc2l0cyBvbiBhIHJlYWwgYXhpcyBpbnN0ZWFkIG9mIG9uIHRoZSBmbG9vci5cbiAgICBpZiAobWluID09PSAwKSB7XG4gICAgICBtaW4gPSAwO1xuICAgICAgbWF4ID0gMTtcbiAgICB9IGVsc2UgaWYgKG1pbiA+IDApIHtcbiAgICAgIG1pbiA9IE1hdGgubWluKDAsIG1pbik7XG4gICAgICBtYXggPSBtYXggPT09IDAgPyAxIDogbWF4O1xuICAgICAgaWYgKG1pbiA9PT0gbWF4KSBtYXggPSBtaW4gKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXggPSBNYXRoLm1heCgwLCBtYXgpO1xuICAgICAgaWYgKG1pbiA9PT0gbWF4KSBtaW4gPSBtYXggLSAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0ZXAgPSBuaWNlU3RlcCgobWF4IC0gbWluKSAvIHRhcmdldFRpY2tzKTtcbiAgLy8gTnVkZ2UgYmVmb3JlIHJvdW5kaW5nIG91dHdhcmQ6IDEwMC8yMCBsYW5kcyBhIGhhaXIgYWJvdmUgNSBpbiBiaW5hcnlcbiAgLy8gZmxvYXRpbmcgcG9pbnQsIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBhZGQgYSBwaGFudG9tIHRpY2sgYXQgMTIwLlxuICBjb25zdCBlcHNpbG9uID0gMWUtOTtcbiAgY29uc3QgbmljZU1pbiA9IE1hdGguZmxvb3IobWluIC8gc3RlcCArIGVwc2lsb24pICogc3RlcDtcbiAgY29uc3QgbmljZU1heCA9IE1hdGguY2VpbChtYXggLyBzdGVwIC0gZXBzaWxvbikgKiBzdGVwO1xuICBjb25zdCBkZWNpbWFscyA9IGRlY2ltYWxzRm9yKHN0ZXApO1xuXG4gIGNvbnN0IHRpY2tzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCB0b3RhbCA9IE1hdGgucm91bmQoKG5pY2VNYXggLSBuaWNlTWluKSAvIHN0ZXApO1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSB0b3RhbDsgaSsrKSB7XG4gICAgdGlja3MucHVzaChOdW1iZXIoKG5pY2VNaW4gKyBpICogc3RlcCkudG9GaXhlZChkZWNpbWFscykpKTtcbiAgfVxuXG4gIHJldHVybiBbTnVtYmVyKG5pY2VNaW4udG9GaXhlZChkZWNpbWFscykpLCBOdW1iZXIobmljZU1heC50b0ZpeGVkKGRlY2ltYWxzKSksIHN0ZXAsIHRpY2tzXTtcbn1cblxuLyoqXG4gKiBNb25vdG9uZS1jdWJpYyB0YW5nZW50cyAoRnJpdHNjaC1DYXJsc29uKS4gTGltaXRpbmcgZWFjaCB0YW5nZW50IHRvIHRoZVxuICogbmVpZ2hib3VyaW5nIHNlY2FudHMgaXMgd2hhdCBzdG9wcyB0aGUgY3VydmUgb3ZlcnNob290aW5nOiBhIHBsYWluXG4gKiBDYXRtdWxsLVJvbSBzcGxpbmUgYnVsZ2VzIHBhc3QgdGhlIGRhdGEgYW5kIGludmVudHMgcGVha3MgdGhhdCB3ZXJlIG5ldmVyXG4gKiBtZWFzdXJlZCwgd2hpY2ggb24gYSBjaGFydCBpcyBhIGZhbHNlIHN0YXRlbWVudCBhYm91dCB0aGUgbnVtYmVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbm90b25lVGFuZ2VudHMoeHM6IG51bWJlcltdLCB5czogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IG4gPSB4cy5sZW5ndGg7XG4gIGlmIChuIDwgMikgcmV0dXJuIG5ldyBBcnJheShuKS5maWxsKDApO1xuXG4gIGNvbnN0IHNlY2FudHM6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbiAtIDE7IGkrKykge1xuICAgIGNvbnN0IGR4ID0geHNbaSArIDFdIC0geHNbaV07XG4gICAgc2VjYW50cy5wdXNoKGR4ID09PSAwID8gMCA6ICh5c1tpICsgMV0gLSB5c1tpXSkgLyBkeCk7XG4gIH1cblxuICBjb25zdCBtOiBudW1iZXJbXSA9IG5ldyBBcnJheShuKTtcbiAgbVswXSA9IHNlY2FudHNbMF07XG4gIG1bbiAtIDFdID0gc2VjYW50c1tuIC0gMl07XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbiAtIDE7IGkrKykgbVtpXSA9IChzZWNhbnRzW2kgLSAxXSArIHNlY2FudHNbaV0pIC8gMjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHtcbiAgICBpZiAoc2VjYW50c1tpXSA9PT0gMCkge1xuICAgICAgLy8gRmxhdCBzZWdtZW50OiBib3RoIGVuZHMgbXVzdCBiZSBmbGF0IG9yIHRoZSBjdXJ2ZSBsZWF2ZXMgdGhlIGRhdGEgcmFuZ2UuXG4gICAgICBtW2ldID0gMDtcbiAgICAgIG1baSArIDFdID0gMDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBhID0gbVtpXSAvIHNlY2FudHNbaV07XG4gICAgY29uc3QgYiA9IG1baSArIDFdIC8gc2VjYW50c1tpXTtcbiAgICAvLyBOZWdhdGl2ZSByYXRpb3MgbWVhbiB0aGUgdGFuZ2VudCBwb2ludHMgYXdheSBmcm9tIHRoZSBzZWNhbnQuXG4gICAgaWYgKGEgPCAwKSBtW2ldID0gMDtcbiAgICBpZiAoYiA8IDApIG1baSArIDFdID0gMDtcbiAgICBjb25zdCBzdW0gPSBhICogYSArIGIgKiBiO1xuICAgIGlmIChzdW0gPiA5KSB7XG4gICAgICBjb25zdCB0ID0gMyAvIE1hdGguc3FydChzdW0pO1xuICAgICAgbVtpXSA9IHQgKiBhICogc2VjYW50c1tpXTtcbiAgICAgIG1baSArIDFdID0gdCAqIGIgKiBzZWNhbnRzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtO1xufVxuXG4vKiogVHVybnMgcmVzb2x2ZWQgcG9pbnRzIGludG8gYW4gc3ZnIHBhdGgsIG9wdGlvbmFsbHkgbW9ub3RvbmUtc21vb3RoZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQYXRoKHBvaW50czogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10sIHNtb290aDogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChwb2ludHMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIGlmIChwb2ludHMubGVuZ3RoID09PSAxKSByZXR1cm4gJ00gJyArIHBvaW50c1swXS54ICsgJyAnICsgcG9pbnRzWzBdLnk7XG5cbiAgY29uc3QgaGVhZCA9ICdNICcgKyBwb2ludHNbMF0ueCArICcgJyArIHBvaW50c1swXS55O1xuICBpZiAoIXNtb290aCkge1xuICAgIHJldHVybiBoZWFkICsgcG9pbnRzLnNsaWNlKDEpLm1hcCgocCkgPT4gJyBMICcgKyBwLnggKyAnICcgKyBwLnkpLmpvaW4oJycpO1xuICB9XG5cbiAgY29uc3QgeHMgPSBwb2ludHMubWFwKChwKSA9PiBwLngpO1xuICBjb25zdCB5cyA9IHBvaW50cy5tYXAoKHApID0+IHAueSk7XG4gIGNvbnN0IG0gPSBtb25vdG9uZVRhbmdlbnRzKHhzLCB5cyk7XG5cbiAgbGV0IGQgPSBoZWFkO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBkeCA9IHhzW2kgKyAxXSAtIHhzW2ldO1xuICAgIGNvbnN0IGMxeCA9IHhzW2ldICsgZHggLyAzO1xuICAgIGNvbnN0IGMxeSA9IHlzW2ldICsgKG1baV0gKiBkeCkgLyAzO1xuICAgIGNvbnN0IGMyeCA9IHhzW2kgKyAxXSAtIGR4IC8gMztcbiAgICBjb25zdCBjMnkgPSB5c1tpICsgMV0gLSAobVtpICsgMV0gKiBkeCkgLyAzO1xuICAgIGQgKz0gJyBDICcgKyBjMXggKyAnICcgKyBjMXkgKyAnICcgKyBjMnggKyAnICcgKyBjMnkgKyAnICcgKyB4c1tpICsgMV0gKyAnICcgKyB5c1tpICsgMV07XG4gIH1cbiAgcmV0dXJuIGQ7XG59XG4iXX0=
@@ -67,11 +67,16 @@ export class ContextMenuService {
67
67
  })
68
68
  ]
69
69
  });
70
+ // Position via left/top, not transform: the menu's own
71
+ // data-[state=open]:zoom-in-95/slide-in-from-top-2 enter animation also
72
+ // drives `transform`, and a CSS animation overrides whatever an inline
73
+ // transform says for as long as it's running — so a translate() here
74
+ // would get clobbered by the animation and only "snap" into place once
75
+ // it finishes, which is exactly the top-left-then-jump flash this avoids.
70
76
  Object.assign(menuElement.style, {
71
77
  position: 'fixed',
72
- left: '0',
73
- top: '0',
74
- transform: `translate(${Math.round(x)}px, ${Math.round(y)}px)`
78
+ left: `${Math.round(x)}px`,
79
+ top: `${Math.round(y)}px`,
75
80
  });
76
81
  }
77
82
  async positionSubmenu(triggerElement, submenuElement) {
@@ -100,9 +105,8 @@ export class ContextMenuService {
100
105
  });
101
106
  Object.assign(submenuElement.style, {
102
107
  position: 'fixed',
103
- left: '0',
104
- top: '0',
105
- transform: `translate(${Math.round(x)}px, ${Math.round(y)}px)`
108
+ left: `${Math.round(x)}px`,
109
+ top: `${Math.round(y)}px`,
106
110
  });
107
111
  }
108
112
  performAction(actionId) {
@@ -118,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118
122
  providedIn: 'root'
119
123
  }]
120
124
  }] });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvbnRleHQtbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBMkI5RSxNQUFNLE9BQU8sa0JBQWtCO0lBQ3JCLE1BQU0sR0FBcUI7UUFDakMsQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsQ0FBQztRQUNKLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEtBQUs7S0FDZCxDQUFDO0lBRU8sWUFBWSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO0lBRTdELElBQUksQ0FBQyxNQUtKO1FBQ0MsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFL0QsK0JBQStCO1FBQy9CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ2hCLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTztZQUNoQixLQUFLO1lBQ0wsTUFBTSxFQUFFLElBQUk7WUFDWixjQUFjO1lBQ2QsUUFBUTtTQUNULENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxL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YWJsZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb21wdXRlUG9zaXRpb24sIG9mZnNldCwgc2hpZnQsIGZsaXAsIHNpemUgfSBmcm9tICdAZmxvYXRpbmctdWkvZG9tJztcblxuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnVJdGVtID0ge1xuICBpZD86IHN0cmluZztcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZGVzdHJ1Y3RpdmU/OiBib29sZWFuO1xuICBzZXBhcmF0b3I/OiBib29sZWFuO1xuICBzdWJtZW51PzogQ29udGV4dE1lbnVJdGVtW107XG4gIHNob3J0Y3V0Pzogc3RyaW5nO1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgdHlwZT86ICdkZWZhdWx0JyB8ICdjaGVja2JveCcgfCAncmFkaW8nO1xufVxuXG5leHBvcnQgdHlwZSBDb250ZXh0TWVudVN0YXRlID0ge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbiAgaXRlbXM6IENvbnRleHRNZW51SXRlbVtdO1xuICBpc09wZW46IGJvb2xlYW47XG4gIHRyaWdnZXJFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIG9uQWN0aW9uPzogKGFjdGlvbklkOiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51U2VydmljZSB7XG4gIHByaXZhdGUgX3N0YXRlOiBDb250ZXh0TWVudVN0YXRlID0ge1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBpdGVtczogW10sXG4gICAgaXNPcGVuOiBmYWxzZVxuICB9O1xuXG4gIHJlYWRvbmx5IHN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q29udGV4dE1lbnVTdGF0ZT4oKTtcblxuICBvcGVuKGNvbmZpZzoge1xuICAgIGV2ZW50OiBNb3VzZUV2ZW50O1xuICAgIGl0ZW1zPzogQ29udGV4dE1lbnVJdGVtW107XG4gICAgdHJpZ2dlckVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgICBvbkFjdGlvbj86IChhY3Rpb25JZDogc3RyaW5nKSA9PiB2b2lkO1xuICB9KSB7XG4gICAgY29uc3QgeyBldmVudCwgaXRlbXMgPSBbXSwgdHJpZ2dlckVsZW1lbnQsIG9uQWN0aW9uIH0gPSBjb25maWc7XG5cbiAgICAvLyBQcmV2ZW50IGJyb3dzZXIgY29udGV4dCBtZW51XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHRoaXMuX3N0YXRlID0ge1xuICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IGV2ZW50LmNsaWVudFksXG4gICAgICBpdGVtcyxcbiAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgIHRyaWdnZXJFbGVtZW50LFxuICAgICAgb25BY3Rpb25cbiAgICB9O1xuXG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQuZW1pdCh0aGlzLl9zdGF0ZSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9zdGF0ZSA9IHsgLi4udGhpcy5fc3RhdGUsIGlzT3BlbjogZmFsc2UgfTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlZC5lbWl0KHRoaXMuX3N0YXRlKTtcbiAgfVxuXG4gIGFzeW5jIHBvc2l0aW9uTWVudShtZW51RWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3N0YXRlO1xuICAgIGlmICghc3RhdGUuaXNPcGVuIHx8ICFtZW51RWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gQ3JlYXRlIGEgcHJlY2lzZSB2aXJ0dWFsIGVsZW1lbnQgZm9yIHRoZSBtb3VzZSBjb29yZGluYXRlc1xuICAgIGNvbnN0IHZpcnR1YWxFbCA9IHtcbiAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgeDogc3RhdGUueCxcbiAgICAgICAgICB5OiBzdGF0ZS55LFxuICAgICAgICAgIHRvcDogc3RhdGUueSxcbiAgICAgICAgICBsZWZ0OiBzdGF0ZS54LFxuICAgICAgICAgIHJpZ2h0OiBzdGF0ZS54LFxuICAgICAgICAgIGJvdHRvbTogc3RhdGUueSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgeyB4LCB5IH0gPSBhd2FpdCBjb21wdXRlUG9zaXRpb24odmlydHVhbEVsIGFzIGFueSwgbWVudUVsZW1lbnQsIHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsIC8vIFN0YW5kYXJkOiBNZW51IHRvcC1sZWZ0IGFsaWducyB3aXRoIG1vdXNlXG4gICAgICBzdHJhdGVneTogJ2ZpeGVkJyxcbiAgICAgIG1pZGRsZXdhcmU6IFtcbiAgICAgICAgb2Zmc2V0KDIpLCAvLyBTbGlnaHQgb2Zmc2V0IHNvIG1vdXNlIGlzbid0IGNvdmVyaW5nIHRoZSBmaXJzdCBwaXhlbFxuICAgICAgICBmbGlwKHtcbiAgICAgICAgICBwYWRkaW5nOiAxMCxcbiAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IFsnYm90dG9tLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wLWVuZCddXG4gICAgICAgIH0pLFxuICAgICAgICBzaGlmdCh7IHBhZGRpbmc6IDEwIH0pLFxuICAgICAgICBzaXplKHtcbiAgICAgICAgICBhcHBseSh7IGF2YWlsYWJsZUhlaWdodCwgYXZhaWxhYmxlV2lkdGgsIGVsZW1lbnRzIH0pIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudHMuZmxvYXRpbmcuc3R5bGUsIHtcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0OiBgJHtNYXRoLm1heCgxMDAsIGF2YWlsYWJsZUhlaWdodCAtIDE2KX1weGAsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiBgJHtNYXRoLm1heCgyMDAsIGF2YWlsYWJsZVdpZHRoIC0gMTYpfXB4YCxcbiAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIE9iamVjdC5hc3NpZ24obWVudUVsZW1lbnQuc3R5bGUsIHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICB0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHtNYXRoLnJvdW5kKHgpfXB4LCAke01hdGgucm91bmQoeSl9cHgpYFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcG9zaXRpb25TdWJtZW51KHRyaWdnZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgc3VibWVudUVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCF0cmlnZ2VyRWxlbWVudCB8fCAhc3VibWVudUVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IHsgeCwgeSB9ID0gYXdhaXQgY29tcHV0ZVBvc2l0aW9uKHRyaWdnZXJFbGVtZW50LCBzdWJtZW51RWxlbWVudCwge1xuICAgICAgcGxhY2VtZW50OiAncmlnaHQtc3RhcnQnLCAvLyBTdGFuZGFyZDogU3VibWVudSBvcGVucyB0byB0aGUgcmlnaHRcbiAgICAgIHN0cmF0ZWd5OiAnZml4ZWQnLFxuICAgICAgbWlkZGxld2FyZTogW1xuICAgICAgICBvZmZzZXQoLTQpLCAvLyBPdmVybGFwIHNsaWdodGx5IHdpdGggcGFyZW50IG1lbnVcbiAgICAgICAgZmxpcCh7XG4gICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbJ2xlZnQtc3RhcnQnLCAnYm90dG9tLXN0YXJ0J11cbiAgICAgICAgfSksXG4gICAgICAgIHNoaWZ0KHsgcGFkZGluZzogMTAgfSksXG4gICAgICAgIHNpemUoe1xuICAgICAgICAgIGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVXaWR0aCwgZWxlbWVudHMgfSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50cy5mbG9hdGluZy5zdHlsZSwge1xuICAgICAgICAgICAgICBtYXhIZWlnaHQ6IGAke01hdGgubWF4KDEwMCwgYXZhaWxhYmxlSGVpZ2h0IC0gMTYpfXB4YCxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IGAke01hdGgubWF4KDIwMCwgYXZhaWxhYmxlV2lkdGggLSAxNil9cHhgLFxuICAgICAgICAgICAgICBvdmVyZmxvd1k6ICdhdXRvJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmFzc2lnbihzdWJtZW51RWxlbWVudC5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIHRyYW5zZm9ybTogYHRyYW5zbGF0ZSgke01hdGgucm91bmQoeCl9cHgsICR7TWF0aC5yb3VuZCh5KX1weClgXG4gICAgfSk7XG4gIH1cblxuICBwZXJmb3JtQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zdGF0ZS5vbkFjdGlvbj8uKGFjdGlvbklkKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cbn0iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NvbnRleHQtbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBMkI5RSxNQUFNLE9BQU8sa0JBQWtCO0lBQ3JCLE1BQU0sR0FBcUI7UUFDakMsQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsQ0FBQztRQUNKLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEtBQUs7S0FDZCxDQUFDO0lBRU8sWUFBWSxHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO0lBRTdELElBQUksQ0FBQyxNQUtKO1FBQ0MsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFFL0QsK0JBQStCO1FBQy9CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ2hCLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTztZQUNoQixLQUFLO1lBQ0wsTUFBTSxFQUFFLElBQUk7WUFDWixjQUFjO1lBQ2QsUUFBUTtTQUNULENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBd0I7UUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRTFDLDZEQUE2RDtRQUM3RCxNQUFNLFNBQVMsR0FBRztZQUNoQixxQkFBcUI7Z0JBQ25CLE9BQU87b0JBQ0wsS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxFQUFFLENBQUM7b0JBQ1QsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNWLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDVixHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNiLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDZCxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2hCLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQztRQUVGLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxlQUFlLENBQUMsU0FBZ0IsRUFBRSxXQUFXLEVBQUU7WUFDcEUsU0FBUyxFQUFFLGNBQWMsRUFBRSw0Q0FBNEM7WUFDdkUsUUFBUSxFQUFFLE9BQU87WUFDakIsVUFBVSxFQUFFO2dCQUNWLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSx3REFBd0Q7Z0JBQ25FLElBQUksQ0FBQztvQkFDSCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxrQkFBa0IsRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO2lCQUMzRCxDQUFDO2dCQUNGLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDO29CQUNILEtBQUssQ0FBQyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFO3dCQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFOzRCQUNyQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLEdBQUcsRUFBRSxDQUFDLElBQUk7NEJBQ3JELFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGNBQWMsR0FBRyxFQUFFLENBQUMsSUFBSTs0QkFDbkQsU0FBUyxFQUFFLE1BQU07eUJBQ2xCLENBQUMsQ0FBQztvQkFDTCxDQUFDO2lCQUNGLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLHFFQUFxRTtRQUNyRSx1RUFBdUU7UUFDdkUsMEVBQTBFO1FBQzFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUMvQixRQUFRLEVBQUUsT0FBTztZQUNqQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzFCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDMUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsY0FBMkIsRUFBRSxjQUEyQjtRQUM1RSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFFL0MsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLGVBQWUsQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFO1lBQ3JFLFNBQVMsRUFBRSxhQUFhLEVBQUUsdUNBQXVDO1lBQ2pFLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFVBQVUsRUFBRTtnQkFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxvQ0FBb0M7Z0JBQ2hELElBQUksQ0FBQztvQkFDSCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxrQkFBa0IsRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUM7aUJBQ25ELENBQUM7Z0JBQ0YsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUM7b0JBQ0gsS0FBSyxDQUFDLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUU7d0JBQ2pELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7NEJBQ3JDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsR0FBRyxFQUFFLENBQUMsSUFBSTs0QkFDckQsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsY0FBYyxHQUFHLEVBQUUsQ0FBQyxJQUFJOzRCQUNuRCxTQUFTLEVBQUUsTUFBTTt5QkFDbEIsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQ2xDLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDMUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWdCO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQzt3R0FoSVUsa0JBQWtCOzRHQUFsQixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY29tcHV0ZVBvc2l0aW9uLCBvZmZzZXQsIHNoaWZ0LCBmbGlwLCBzaXplIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2RvbSc7XG5cbmV4cG9ydCB0eXBlIENvbnRleHRNZW51SXRlbSA9IHtcbiAgaWQ/OiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGRlc3RydWN0aXZlPzogYm9vbGVhbjtcbiAgc2VwYXJhdG9yPzogYm9vbGVhbjtcbiAgc3VibWVudT86IENvbnRleHRNZW51SXRlbVtdO1xuICBzaG9ydGN1dD86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIHR5cGU/OiAnZGVmYXVsdCcgfCAnY2hlY2tib3gnIHwgJ3JhZGlvJztcbn1cblxuZXhwb3J0IHR5cGUgQ29udGV4dE1lbnVTdGF0ZSA9IHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIGl0ZW1zOiBDb250ZXh0TWVudUl0ZW1bXTtcbiAgaXNPcGVuOiBib29sZWFuO1xuICB0cmlnZ2VyRWxlbWVudD86IEhUTUxFbGVtZW50O1xuICBvbkFjdGlvbj86IChhY3Rpb25JZDogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudVNlcnZpY2Uge1xuICBwcml2YXRlIF9zdGF0ZTogQ29udGV4dE1lbnVTdGF0ZSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDAsXG4gICAgaXRlbXM6IFtdLFxuICAgIGlzT3BlbjogZmFsc2VcbiAgfTtcblxuICByZWFkb25seSBzdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbnRleHRNZW51U3RhdGU+KCk7XG5cbiAgb3Blbihjb25maWc6IHtcbiAgICBldmVudDogTW91c2VFdmVudDtcbiAgICBpdGVtcz86IENvbnRleHRNZW51SXRlbVtdO1xuICAgIHRyaWdnZXJFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gICAgb25BY3Rpb24/OiAoYWN0aW9uSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgfSkge1xuICAgIGNvbnN0IHsgZXZlbnQsIGl0ZW1zID0gW10sIHRyaWdnZXJFbGVtZW50LCBvbkFjdGlvbiB9ID0gY29uZmlnO1xuXG4gICAgLy8gUHJldmVudCBicm93c2VyIGNvbnRleHQgbWVudVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICB0aGlzLl9zdGF0ZSA9IHtcbiAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICB5OiBldmVudC5jbGllbnRZLFxuICAgICAgaXRlbXMsXG4gICAgICBpc09wZW46IHRydWUsXG4gICAgICB0cmlnZ2VyRWxlbWVudCxcbiAgICAgIG9uQWN0aW9uXG4gICAgfTtcblxuICAgIHRoaXMuc3RhdGVDaGFuZ2VkLmVtaXQodGhpcy5fc3RhdGUpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5fc3RhdGUgPSB7IC4uLnRoaXMuX3N0YXRlLCBpc09wZW46IGZhbHNlIH07XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQuZW1pdCh0aGlzLl9zdGF0ZSk7XG4gIH1cblxuICBhc3luYyBwb3NpdGlvbk1lbnUobWVudUVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9zdGF0ZTtcbiAgICBpZiAoIXN0YXRlLmlzT3BlbiB8fCAhbWVudUVsZW1lbnQpIHJldHVybjtcblxuICAgIC8vIENyZWF0ZSBhIHByZWNpc2UgdmlydHVhbCBlbGVtZW50IGZvciB0aGUgbW91c2UgY29vcmRpbmF0ZXNcbiAgICBjb25zdCB2aXJ0dWFsRWwgPSB7XG4gICAgICBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIHg6IHN0YXRlLngsXG4gICAgICAgICAgeTogc3RhdGUueSxcbiAgICAgICAgICB0b3A6IHN0YXRlLnksXG4gICAgICAgICAgbGVmdDogc3RhdGUueCxcbiAgICAgICAgICByaWdodDogc3RhdGUueCxcbiAgICAgICAgICBib3R0b206IHN0YXRlLnksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHsgeCwgeSB9ID0gYXdhaXQgY29tcHV0ZVBvc2l0aW9uKHZpcnR1YWxFbCBhcyBhbnksIG1lbnVFbGVtZW50LCB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLCAvLyBTdGFuZGFyZDogTWVudSB0b3AtbGVmdCBhbGlnbnMgd2l0aCBtb3VzZVxuICAgICAgc3RyYXRlZ3k6ICdmaXhlZCcsXG4gICAgICBtaWRkbGV3YXJlOiBbXG4gICAgICAgIG9mZnNldCgyKSwgLy8gU2xpZ2h0IG9mZnNldCBzbyBtb3VzZSBpc24ndCBjb3ZlcmluZyB0aGUgZmlyc3QgcGl4ZWxcbiAgICAgICAgZmxpcCh7XG4gICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbJ2JvdHRvbS1lbmQnLCAndG9wLXN0YXJ0JywgJ3RvcC1lbmQnXVxuICAgICAgICB9KSxcbiAgICAgICAgc2hpZnQoeyBwYWRkaW5nOiAxMCB9KSxcbiAgICAgICAgc2l6ZSh7XG4gICAgICAgICAgYXBwbHkoeyBhdmFpbGFibGVIZWlnaHQsIGF2YWlsYWJsZVdpZHRoLCBlbGVtZW50cyB9KSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG4gICAgICAgICAgICAgIG1heEhlaWdodDogYCR7TWF0aC5tYXgoMTAwLCBhdmFpbGFibGVIZWlnaHQgLSAxNil9cHhgLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogYCR7TWF0aC5tYXgoMjAwLCBhdmFpbGFibGVXaWR0aCAtIDE2KX1weGAsXG4gICAgICAgICAgICAgIG92ZXJmbG93WTogJ2F1dG8nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICAvLyBQb3NpdGlvbiB2aWEgbGVmdC90b3AsIG5vdCB0cmFuc2Zvcm06IHRoZSBtZW51J3Mgb3duXG4gICAgLy8gZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NS9zbGlkZS1pbi1mcm9tLXRvcC0yIGVudGVyIGFuaW1hdGlvbiBhbHNvXG4gICAgLy8gZHJpdmVzIGB0cmFuc2Zvcm1gLCBhbmQgYSBDU1MgYW5pbWF0aW9uIG92ZXJyaWRlcyB3aGF0ZXZlciBhbiBpbmxpbmVcbiAgICAvLyB0cmFuc2Zvcm0gc2F5cyBmb3IgYXMgbG9uZyBhcyBpdCdzIHJ1bm5pbmcg4oCUIHNvIGEgdHJhbnNsYXRlKCkgaGVyZVxuICAgIC8vIHdvdWxkIGdldCBjbG9iYmVyZWQgYnkgdGhlIGFuaW1hdGlvbiBhbmQgb25seSBcInNuYXBcIiBpbnRvIHBsYWNlIG9uY2VcbiAgICAvLyBpdCBmaW5pc2hlcywgd2hpY2ggaXMgZXhhY3RseSB0aGUgdG9wLWxlZnQtdGhlbi1qdW1wIGZsYXNoIHRoaXMgYXZvaWRzLlxuICAgIE9iamVjdC5hc3NpZ24obWVudUVsZW1lbnQuc3R5bGUsIHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgbGVmdDogYCR7TWF0aC5yb3VuZCh4KX1weGAsXG4gICAgICB0b3A6IGAke01hdGgucm91bmQoeSl9cHhgLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcG9zaXRpb25TdWJtZW51KHRyaWdnZXJFbGVtZW50OiBIVE1MRWxlbWVudCwgc3VibWVudUVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCF0cmlnZ2VyRWxlbWVudCB8fCAhc3VibWVudUVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IHsgeCwgeSB9ID0gYXdhaXQgY29tcHV0ZVBvc2l0aW9uKHRyaWdnZXJFbGVtZW50LCBzdWJtZW51RWxlbWVudCwge1xuICAgICAgcGxhY2VtZW50OiAncmlnaHQtc3RhcnQnLCAvLyBTdGFuZGFyZDogU3VibWVudSBvcGVucyB0byB0aGUgcmlnaHRcbiAgICAgIHN0cmF0ZWd5OiAnZml4ZWQnLFxuICAgICAgbWlkZGxld2FyZTogW1xuICAgICAgICBvZmZzZXQoLTQpLCAvLyBPdmVybGFwIHNsaWdodGx5IHdpdGggcGFyZW50IG1lbnVcbiAgICAgICAgZmxpcCh7XG4gICAgICAgICAgcGFkZGluZzogMTAsXG4gICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBbJ2xlZnQtc3RhcnQnLCAnYm90dG9tLXN0YXJ0J11cbiAgICAgICAgfSksXG4gICAgICAgIHNoaWZ0KHsgcGFkZGluZzogMTAgfSksXG4gICAgICAgIHNpemUoe1xuICAgICAgICAgIGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0LCBhdmFpbGFibGVXaWR0aCwgZWxlbWVudHMgfSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50cy5mbG9hdGluZy5zdHlsZSwge1xuICAgICAgICAgICAgICBtYXhIZWlnaHQ6IGAke01hdGgubWF4KDEwMCwgYXZhaWxhYmxlSGVpZ2h0IC0gMTYpfXB4YCxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IGAke01hdGgubWF4KDIwMCwgYXZhaWxhYmxlV2lkdGggLSAxNil9cHhgLFxuICAgICAgICAgICAgICBvdmVyZmxvd1k6ICdhdXRvJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmFzc2lnbihzdWJtZW51RWxlbWVudC5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBsZWZ0OiBgJHtNYXRoLnJvdW5kKHgpfXB4YCxcbiAgICAgIHRvcDogYCR7TWF0aC5yb3VuZCh5KX1weGAsXG4gICAgfSk7XG4gIH1cblxuICBwZXJmb3JtQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zdGF0ZS5vbkFjdGlvbj8uKGFjdGlvbklkKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cbn0iXX0=
@@ -1,10 +1,19 @@
1
- import { Subject } from 'rxjs';
1
+ import { BehaviorSubject, Subject } from 'rxjs';
2
+ /**
3
+ * Safety net if the exit animation's `animationend` never fires — reduced
4
+ * motion, no matching keyframe, or a panel that never rendered — so a modal
5
+ * can never get stuck open forever.
6
+ */
7
+ const CLOSE_FALLBACK_MS = 300;
2
8
  export class ModalRef {
3
9
  overlay;
4
10
  modal;
5
11
  stack;
6
12
  _afterClosed$ = new Subject();
7
13
  afterClosed$ = this._afterClosed$.asObservable();
14
+ _closingSubject = new BehaviorSubject(false);
15
+ /** True once `close()` has been called — drives the panel's exit animation. */
16
+ closing$ = this._closingSubject.asObservable();
8
17
  constructor(overlay, modal, stack) {
9
18
  this.overlay = overlay;
10
19
  this.modal = modal;
@@ -18,14 +27,34 @@ export class ModalRef {
18
27
  });
19
28
  }
20
29
  /**
21
- * Closes the modal instantly.
30
+ * Closes the modal. Signals the panel and backdrop to play their exit
31
+ * animation, then tears down the overlay once it finishes (or after
32
+ * `CLOSE_FALLBACK_MS`, whichever comes first).
22
33
  * @param result Data to pass back to the caller
23
34
  */
24
35
  close(result) {
25
- this._afterClosed$.next(result);
26
- this._afterClosed$.complete();
27
- this.overlay.dispose(); // Instant disposal (No animation timer)
28
- this.stack.unregister(this);
36
+ if (this._closingSubject.value)
37
+ return;
38
+ this._closingSubject.next(true);
39
+ this.overlay.backdropElement?.setAttribute('data-state', 'closed');
40
+ let finished = false;
41
+ const finish = () => {
42
+ if (finished)
43
+ return;
44
+ finished = true;
45
+ this._afterClosed$.next(result);
46
+ this._afterClosed$.complete();
47
+ this.overlay.dispose();
48
+ this.stack.unregister(this);
49
+ };
50
+ const panel = this.overlay.overlayElement.querySelector('[data-state]');
51
+ if (panel) {
52
+ panel.addEventListener('animationend', finish, { once: true });
53
+ setTimeout(finish, CLOSE_FALLBACK_MS);
54
+ }
55
+ else {
56
+ finish();
57
+ }
29
58
  }
30
59
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9tb2RhbC1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixNQUFNLE9BQU8sUUFBUTtJQUtUO0lBQ0Q7SUFDQztJQU5PLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBd0IsQ0FBQztJQUNyRSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVqRCxZQUNVLE9BQW1CLEVBQ3BCLEtBQVksRUFDWCxLQUF3QjtRQUZ4QixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWCxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUVoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxQix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFVO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsd0NBQXdDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gJy4vbW9kYWwnO1xuaW1wb3J0IHsgTW9kYWxTdGFja1NlcnZpY2UgfSBmcm9tICcuL21vZGFsLXN0YWNrLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgTW9kYWxSZWY8UiA9IGFueT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hZnRlckNsb3NlZCQgPSBuZXcgU3ViamVjdDxSIHwgdW5kZWZpbmVkIHwgbnVsbD4oKTtcbiAgYWZ0ZXJDbG9zZWQkID0gdGhpcy5fYWZ0ZXJDbG9zZWQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheVJlZixcbiAgICBwdWJsaWMgbW9kYWw6IE1vZGFsLFxuICAgIHByaXZhdGUgc3RhY2s6IE1vZGFsU3RhY2tTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RhY2sucmVnaXN0ZXIodGhpcyk7XG5cbiAgICAvLyBIYW5kbGUgQmFja2Ryb3AgQ2xpY2tcbiAgICB0aGlzLm92ZXJsYXkuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5tb2RhbC5iYWNrZHJvcENsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1vZGFsIGluc3RhbnRseS5cbiAgICogQHBhcmFtIHJlc3VsdCBEYXRhIHRvIHBhc3MgYmFjayB0byB0aGUgY2FsbGVyXG4gICAqL1xuICBjbG9zZShyZXN1bHQ/OiBSKTogdm9pZCB7XG4gICAgdGhpcy5fYWZ0ZXJDbG9zZWQkLm5leHQocmVzdWx0KTtcbiAgICB0aGlzLl9hZnRlckNsb3NlZCQuY29tcGxldGUoKTtcbiAgICB0aGlzLm92ZXJsYXkuZGlzcG9zZSgpOyAvLyBJbnN0YW50IGRpc3Bvc2FsIChObyBhbmltYXRpb24gdGltZXIpXG4gICAgdGhpcy5zdGFjay51bnJlZ2lzdGVyKHRoaXMpO1xuICB9XG59XG4iXX0=
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtcmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9tb2RhbC1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJaEQ7Ozs7R0FJRztBQUNILE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRTlCLE1BQU0sT0FBTyxRQUFRO0lBU1Q7SUFDRDtJQUNDO0lBVk8sYUFBYSxHQUFHLElBQUksT0FBTyxFQUF3QixDQUFDO0lBQ3JFLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRWhDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN2RSwrRUFBK0U7SUFDdEUsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFeEQsWUFDVSxPQUFtQixFQUNwQixLQUFZLEVBQ1gsS0FBd0I7UUFGeEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNwQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1gsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFFaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUIsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxNQUFVO1FBQ2QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFbkUsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLFFBQVE7Z0JBQUUsT0FBTztZQUNyQixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQWMsY0FBYyxDQUFDLENBQUM7UUFDckYsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0QsVUFBVSxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxFQUFFLENBQUM7UUFDWCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICcuL21vZGFsJztcbmltcG9ydCB7IE1vZGFsU3RhY2tTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1zdGFjay5zZXJ2aWNlJztcblxuLyoqXG4gKiBTYWZldHkgbmV0IGlmIHRoZSBleGl0IGFuaW1hdGlvbidzIGBhbmltYXRpb25lbmRgIG5ldmVyIGZpcmVzIOKAlCByZWR1Y2VkXG4gKiBtb3Rpb24sIG5vIG1hdGNoaW5nIGtleWZyYW1lLCBvciBhIHBhbmVsIHRoYXQgbmV2ZXIgcmVuZGVyZWQg4oCUIHNvIGEgbW9kYWxcbiAqIGNhbiBuZXZlciBnZXQgc3R1Y2sgb3BlbiBmb3JldmVyLlxuICovXG5jb25zdCBDTE9TRV9GQUxMQkFDS19NUyA9IDMwMDtcblxuZXhwb3J0IGNsYXNzIE1vZGFsUmVmPFIgPSBhbnk+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWZ0ZXJDbG9zZWQkID0gbmV3IFN1YmplY3Q8UiB8IHVuZGVmaW5lZCB8IG51bGw+KCk7XG4gIGFmdGVyQ2xvc2VkJCA9IHRoaXMuX2FmdGVyQ2xvc2VkJC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jbG9zaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogVHJ1ZSBvbmNlIGBjbG9zZSgpYCBoYXMgYmVlbiBjYWxsZWQg4oCUIGRyaXZlcyB0aGUgcGFuZWwncyBleGl0IGFuaW1hdGlvbi4gKi9cbiAgcmVhZG9ubHkgY2xvc2luZyQgPSB0aGlzLl9jbG9zaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXlSZWYsXG4gICAgcHVibGljIG1vZGFsOiBNb2RhbCxcbiAgICBwcml2YXRlIHN0YWNrOiBNb2RhbFN0YWNrU2VydmljZVxuICApIHtcbiAgICB0aGlzLnN0YWNrLnJlZ2lzdGVyKHRoaXMpO1xuXG4gICAgLy8gSGFuZGxlIEJhY2tkcm9wIENsaWNrXG4gICAgdGhpcy5vdmVybGF5LmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubW9kYWwuYmFja2Ryb3BDbG9zZSkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBtb2RhbC4gU2lnbmFscyB0aGUgcGFuZWwgYW5kIGJhY2tkcm9wIHRvIHBsYXkgdGhlaXIgZXhpdFxuICAgKiBhbmltYXRpb24sIHRoZW4gdGVhcnMgZG93biB0aGUgb3ZlcmxheSBvbmNlIGl0IGZpbmlzaGVzIChvciBhZnRlclxuICAgKiBgQ0xPU0VfRkFMTEJBQ0tfTVNgLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QpLlxuICAgKiBAcGFyYW0gcmVzdWx0IERhdGEgdG8gcGFzcyBiYWNrIHRvIHRoZSBjYWxsZXJcbiAgICovXG4gIGNsb3NlKHJlc3VsdD86IFIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2xvc2luZ1N1YmplY3QudmFsdWUpIHJldHVybjtcbiAgICB0aGlzLl9jbG9zaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIHRoaXMub3ZlcmxheS5iYWNrZHJvcEVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScsICdjbG9zZWQnKTtcblxuICAgIGxldCBmaW5pc2hlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGZpbmlzaCA9ICgpID0+IHtcbiAgICAgIGlmIChmaW5pc2hlZCkgcmV0dXJuO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fYWZ0ZXJDbG9zZWQkLm5leHQocmVzdWx0KTtcbiAgICAgIHRoaXMuX2FmdGVyQ2xvc2VkJC5jb21wbGV0ZSgpO1xuICAgICAgdGhpcy5vdmVybGF5LmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuc3RhY2sudW5yZWdpc3Rlcih0aGlzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLm92ZXJsYXkub3ZlcmxheUVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJ1tkYXRhLXN0YXRlXScpO1xuICAgIGlmIChwYW5lbCkge1xuICAgICAgcGFuZWwuYWRkRXZlbnRMaXN0ZW5lcignYW5pbWF0aW9uZW5kJywgZmluaXNoLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICBzZXRUaW1lb3V0KGZpbmlzaCwgQ0xPU0VfRkFMTEJBQ0tfTVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5pc2goKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==