@aquera/ngx-smart-table 0.0.17-patch-0.4 → 0.0.17-patch-0.6

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.
@@ -139,7 +139,7 @@ export class NileCodeEditor {
139
139
  this.syncingFromDialog = false; // Flag to prevent inline editor from overwriting multiline content
140
140
  this.userEditedInline = false; // Flag to track if user has typed in inline editor
141
141
  this.dialogOriginalValue = ''; // Store original value when dialog opens
142
- this.dialogCurrentValue = ''; // Track current value in dialog
142
+ this.dialogCurrentValue = null; // Track current value in dialog
143
143
  }
144
144
  edit(context) {
145
145
  if (!context.container) {
@@ -414,7 +414,7 @@ export class NileCodeEditor {
414
414
  */
415
415
  getDialogEditorValue() {
416
416
  // Use tracked value from change events (most reliable)
417
- if (this.dialogCurrentValue) {
417
+ if (this.dialogCurrentValue !== null && this.dialogCurrentValue !== undefined) {
418
418
  return this.dialogCurrentValue.replace(/\n+$/, '');
419
419
  }
420
420
  if (!this.dialogEditor)
@@ -443,10 +443,9 @@ export class NileCodeEditor {
443
443
  applyDialogChanges() {
444
444
  if (!this.dialogOpen)
445
445
  return;
446
- // Get the value from dialog editor - try multiple sources
446
+ // Always read live dialog editor state to avoid stale tracked values from debounced updates
447
447
  let dialogValue = this.dialogCurrentValue;
448
- // If no tracked value, try reading directly from dialog editor
449
- if (!dialogValue && this.dialogEditor) {
448
+ if (this.dialogEditor) {
450
449
  try {
451
450
  const shadowRoot = this.dialogEditor.shadowRoot;
452
451
  if (shadowRoot) {
@@ -460,12 +459,12 @@ export class NileCodeEditor {
460
459
  // Fall through
461
460
  }
462
461
  // Fallback to value property
463
- if (!dialogValue) {
462
+ if (dialogValue === null || dialogValue === undefined) {
464
463
  dialogValue = this.dialogEditor.value ?? '';
465
464
  }
466
465
  }
467
466
  // Strip trailing newlines
468
- dialogValue = (dialogValue || '').replace(/\n+$/, '');
467
+ dialogValue = (dialogValue ?? '').replace(/\n+$/, '');
469
468
  // Update tracked value and inline editor
470
469
  this.trackedValue = dialogValue;
471
470
  this.userEditedInline = false;
@@ -507,7 +506,7 @@ export class NileCodeEditor {
507
506
  */
508
507
  closeDialogUI() {
509
508
  this.dialogOpen = false;
510
- this.dialogCurrentValue = '';
509
+ this.dialogCurrentValue = null;
511
510
  if (this.dialog) {
512
511
  this.dialog.open = false;
513
512
  const dialogRef = this.dialog;
@@ -752,7 +751,7 @@ export class NileCodeEditor {
752
751
  this.trackedValue = null;
753
752
  this.userEditedInline = false;
754
753
  this.dialogOriginalValue = '';
755
- this.dialogCurrentValue = '';
754
+ this.dialogCurrentValue = null;
756
755
  }
757
756
  focus() {
758
757
  this.editor?.focus();
@@ -778,4 +777,4 @@ export class NileCodeEditor {
778
777
  return this.editor;
779
778
  }
780
779
  }
781
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1jb2RlLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvZWRpdG9ycy9uaWxlLWNvZGUtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQW1ISDs7R0FFRztBQUNILElBQUksd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBQ3JDLFNBQVMsc0JBQXNCO0lBQzdCLElBQUksd0JBQXdCO1FBQUUsT0FBTztJQUNyQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFFaEMsTUFBTSxPQUFPLEdBQUcsOEJBQThCLENBQUM7SUFDL0MsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEduQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQWlCekIsWUFBNkIsT0FBK0I7UUFBL0IsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFYcEQsbUJBQWMsR0FBcUQsRUFBRSxDQUFDO1FBRXRFLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxzQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxt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LENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEN1c3RvbSBlZGl0b3IgdXNpbmcgTmlsZUNvZGVFZGl0b3IgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFRoaXMgcHJvdmlkZXMgY29kZSBlZGl0aW5nIGNhcGFiaWxpdGllcyB3aXRoIHN5bnRheCBoaWdobGlnaHRpbmcgZm9yIHRhYmxlIGNlbGxzXG4gKi9cblxuaW1wb3J0IHsgQ2VsbEVkaXRvciwgQ2VsbEVkaXRvckNvbnRleHQgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1zdHJhdGVnaWVzLmludGVyZmFjZSc7XG5cbi8qKlxuICogQXV0b2NvbXBsZXRpb24gaXRlbSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUVkaXRvckNvbXBsZXRpb24ge1xuICAvKiogVGhlIGNvbXBsZXRpb24gbGFiZWwgc2hvd24gaW4gZHJvcGRvd24gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgLyoqIFRoZSB2YWx1ZSB0byBpbnNlcnQgKi9cbiAgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBkZXNjcmlwdGlvbiAqL1xuICBkZXRhaWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQXV0b2NvbXBsZXRlIHN0eWxlIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvQ29tcGxldGVTdHlsZSB7XG4gIC8qKiBXaWR0aCBvZiB0aGUgYXV0b2NvbXBsZXRlIGRyb3Bkb3duICovXG4gIHdpZHRoPzogc3RyaW5nO1xuICAvKiogRW5hYmxlIG11bHRpbGluZSBjb250ZW50IGluIGF1dG9jb21wbGV0ZSAqL1xuICBtdWx0aWxpbmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgaW50ZXJmYWNlIGZvciBOaWxlQ29kZUVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbGVDb2RlRWRpdG9yT3B0aW9ucyB7XG4gIC8vIExhbmd1YWdlIGFuZCBzeW50YXhcbiAgLyoqIExhbmd1YWdlIG1vZGUgZm9yIHN5bnRheCBoaWdobGlnaHRpbmcgKi9cbiAgbGFuZ3VhZ2U/OiAnamF2YXNjcmlwdCcgfCAnc3FsJyB8ICdqc29uJyB8ICdodG1sJztcbiAgLyoqIERpc2FibGUgc3ludGF4IGhpZ2hsaWdodGluZyAqL1xuICBkaXNhYmxlU3ludGF4SGlnaGxpZ2h0aW5nPzogYm9vbGVhbjtcblxuICAvLyBFZGl0b3IgYXBwZWFyYW5jZVxuICAvKiogUGxhY2Vob2xkZXIgdGV4dCB3aGVuIGVtcHR5ICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogU2hvdyBsaW5lIG51bWJlcnMgKHNpbmdsZS1saW5lIG1vZGUpICovXG4gIGxpbmVOdW1iZXJzPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgbGluZSBudW1iZXJzIGluIG11bHRpbGluZSBtb2RlICovXG4gIGxpbmVOdW1iZXJzTXVsdGlsaW5lPzogYm9vbGVhbjtcbiAgLyoqIEFsbG93IG11bHRpLWxpbmUgZWRpdGluZyAqL1xuICBtdWx0aWxpbmU/OiBib29sZWFuO1xuICAvKiogUmVuZGVyIHdpdGhvdXQgYm9yZGVyICovXG4gIG5vYm9yZGVyPzogYm9vbGVhbjtcbiAgLyoqIFVzZSBkZWZhdWx0IGZvbnQgaW5zdGVhZCBvZiBpbmhlcml0ICovXG4gIGRlZmF1bHRGb250PzogYm9vbGVhbjtcblxuICAvLyBFZGl0b3IgYmVoYXZpb3JcbiAgLyoqIEF1dG8gZm9jdXMgb24gZWRpdCAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICAvKiogUmVhZC1vbmx5IG1vZGUgKi9cbiAgcmVhZG9ubHk/OiBib29sZWFuO1xuICAvKiogRGlzYWJsZWQgc3RhdGUgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIFRhYi10by1jb21wbGV0ZSAqL1xuICB0YWJDb21wbGV0aW9uPzogYm9vbGVhbjtcbiAgLyoqIEVuYWJsZSBzZWFyY2gga2V5bWFwICovXG4gIGVuYWJsZVNlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBTaG93IGNvZGUgZm9sZGluZyBndXR0ZXJzICovXG4gIGVuYWJsZUZvbGRHdXR0ZXJzPzogYm9vbGVhbjtcbiAgLyoqIEludGVybmFsIHNjcm9sbCBjb250YWluZXIgKi9cbiAgaGFzU2Nyb2xsZXI/OiBib29sZWFuO1xuICAvKiogU2hvdyBleHBhbmQgY29udHJvbCAobmF0aXZlIG5pbGUtY29kZS1lZGl0b3IgZXhwYW5kKSAqL1xuICBleHBhbmRhYmxlPzogYm9vbGVhbjtcbiAgLyoqIEljb24gZm9yIGV4cGFuZCBjb250cm9sICovXG4gIGV4cGFuZEljb24/OiBzdHJpbmc7XG4gIFxuICAvLyBEaWFsb2cgZXhwYW5kIGZlYXR1cmVcbiAgLyoqIFNob3cgZXhwYW5kIGJ1dHRvbiB0byBvcGVuIGZ1bGwgZWRpdG9yIGRpYWxvZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgc2hvd0V4cGFuZEJ1dHRvbj86IGJvb2xlYW47XG4gIC8qKiBEaWFsb2cgdGl0bGUgKGRlZmF1bHQ6ICdFZGl0IENvZGUnKSAqL1xuICBkaWFsb2dUaXRsZT86IHN0cmluZztcbiAgLyoqIERpYWxvZyB3aWR0aCAoZGVmYXVsdDogJzYwMHB4JykgKi9cbiAgZGlhbG9nV2lkdGg/OiBzdHJpbmc7XG4gIC8qKiBEaWFsb2cgbWF4IGhlaWdodCAoZGVmYXVsdDogJzgwdmgnKSAqL1xuICBkaWFsb2dNYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBEaWFsb2cgZWRpdG9yIG1pbiBoZWlnaHQgKGRlZmF1bHQ6ICczMDBweCcpICovXG4gIGRpYWxvZ0VkaXRvckhlaWdodD86IHN0cmluZztcblxuICAvLyBBdXRvY29tcGxldGlvblxuICAvKiogSW5saW5lIGNvbXBsZXRpb24gZGF0YXNldCAqL1xuICBjdXN0b21BdXRvQ29tcGxldGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDb2RlRWRpdG9yQ29tcGxldGlvbltdPiB8IENvZGVFZGl0b3JDb21wbGV0aW9uW107XG4gIC8qKiBQYXRocyB0byBmZXRjaCBjb21wbGV0aW9uIGRhdGFzZXRzIGZyb20gKi9cbiAgY3VzdG9tQ29tcGxldGlvbnNQYXRocz86IHN0cmluZ1tdO1xuICAvKiogRW5hYmxlIHZhcmlhYmxlcyBpbiBzdWdnZXN0aW9ucyAqL1xuICBhbGxvd1ZhcmlhYmxlSW5DdXN0b21TdWdnZXN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgYXV0b2NvbXBsZXRlIGFib3ZlIGN1cnNvciAqL1xuICBhYm92ZUN1cnNvcj86IGJvb2xlYW47XG4gIC8qKiBTdHlsZSBjb25maWcgZm9yIGF1dG9jb21wbGV0ZSBkcm9wZG93biAqL1xuICBhdXRvQ29tcGxldGVTdHlsZT86IEF1dG9Db21wbGV0ZVN0eWxlO1xuXG4gIC8vIENoYW5nZSBoYW5kbGluZ1xuICAvKiogRGVib3VuY2UgY2hhbmdlIGV2ZW50cyAqL1xuICBkZWJvdW5jZT86IGJvb2xlYW47XG4gIC8qKiBEZWJvdW5jZSBkZWxheSBpbiBtcyAqL1xuICBkZWJvdW5jZVRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogRXJyb3Igc3RhdGUgKi9cbiAgZXJyb3I/OiBib29sZWFuO1xuICAvKiogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5ICovXG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcblxuICAvLyBDdXN0b20gdGhlbWVcbiAgLyoqIEN1c3RvbSB0aGVtZSBDU1Mgb2JqZWN0ICovXG4gIGN1c3RvbVRoZW1lQ1NTPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG5cbiAgLy8gVmFsaWRhdGlvbiBiZWhhdmlvclxuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEluamVjdCBnbG9iYWwgc3R5bGVzIGZvciBuaWxlLWNvZGUtZWRpdG9yIGluIHRhYmxlIGNlbGxzXG4gKi9cbmxldCBjb2RlRWRpdG9yU3R5bGVzSW5qZWN0ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGluamVjdENvZGVFZGl0b3JTdHlsZXMoKTogdm9pZCB7XG4gIGlmIChjb2RlRWRpdG9yU3R5bGVzSW5qZWN0ZWQpIHJldHVybjtcbiAgY29kZUVkaXRvclN0eWxlc0luamVjdGVkID0gdHJ1ZTtcblxuICBjb25zdCBzdHlsZUlkID0gJ25pbGUtY29kZS1lZGl0b3ItY2VsbC1zdHlsZXMnO1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHJldHVybjtcblxuICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLmlkID0gc3R5bGVJZDtcbiAgc3R5bGUudGV4dENvbnRlbnQgPSBgXG4gICAgLyogTmlsZSBDb2RlIEVkaXRvciBjZWxsIHN0eWxpbmcgLSBjb25zdHJhaW5lZCB0byBjZWxsIGhlaWdodCAqL1xuICAgIG5pbGUtY29kZS1lZGl0b3Iuc3QtY2VsbC1lZGl0b3Ige1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1heC1oZWlnaHQ6IDMycHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBmb250LWZhbWlseTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgbmlsZS1jb2RlLWVkaXRvci5zdC1jZWxsLWVkaXRvcjo6cGFydChjb2RlLWVkaXRvci1iYXNlKSB7XG4gICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIG1pbi1oZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIG1heC1oZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBFbnN1cmUgcHJvcGVyIHNpemluZyB3aXRoaW4gdGFibGUgY2VsbCAqL1xuICAgIC5zdC1uaWxlLWNvZGUtZWRpdG9yIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWF4LWhlaWdodDogMzJweDtcbiAgICAgIG1pbi1oZWlnaHQ6IDI4cHg7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICAgIC8qIENvZGVNaXJyb3IgY29udGVudCBzaG91bGQgaW5oZXJpdCBmb250IHNpemUgYW5kIGJlIGNvbnN0cmFpbmVkICovXG4gICAgbmlsZS1jb2RlLWVkaXRvci5zdC1jZWxsLWVkaXRvciAuY20tZWRpdG9yIHtcbiAgICAgIG1heC1oZWlnaHQ6IDMycHggIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICB9XG4gICAgbmlsZS1jb2RlLWVkaXRvci5zdC1jZWxsLWVkaXRvciAuY20tc2Nyb2xsZXIge1xuICAgICAgbWF4LWhlaWdodDogMzJweCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgIH1cbiAgICBuaWxlLWNvZGUtZWRpdG9yLnN0LWNlbGwtZWRpdG9yIC5jbS1jb250ZW50LFxuICAgIG5pbGUtY29kZS1lZGl0b3Iuc3QtY2VsbC1lZGl0b3IgLmNtLWxpbmUge1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBmb250LWZhbWlseTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLyogQ29udGFpbmVyIHdyYXBwZXIgZm9yIGVkaXRvciArIGV4cGFuZCBidXR0b24gKi9cbiAgICAuc3QtY29kZS1lZGl0b3Itd3JhcHBlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWF4LWhlaWdodDogMzJweDtcbiAgICAgIGdhcDogNHB4O1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3Itd3JhcHBlciAuc3QtY29kZS1lZGl0b3ItaW5wdXQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1heC1oZWlnaHQ6IDMycHg7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3Itd3JhcHBlciAuc3QtZXhwYW5kLWJ1dHRvbiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDI0cHg7XG4gICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICBtaW4td2lkdGg6IDI0cHg7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBjb2xvcjogdmFyKC0tbmlsZS1jb2xvci1uZXV0cmFsLTUwMCwgIzZiNzI4MCk7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycztcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLXdyYXBwZXIgLnN0LWV4cGFuZC1idXR0b246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tbmlsZS1jb2xvci1uZXV0cmFsLTEwMCwgI2YzZjRmNik7XG4gICAgICBjb2xvcjogdmFyKC0tbmlsZS1jb2xvci1uZXV0cmFsLTcwMCwgIzM3NDE1MSk7XG4gICAgfVxuICAgIC8qIERpYWxvZyBjb2RlIGVkaXRvciBzdHlsaW5nIC0gZml4ZWQgaGVhZGVyL2Zvb3Rlciwgc2Nyb2xsYWJsZSBjb250ZW50ICovXG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZzo6cGFydChwYW5lbCkge1xuICAgICAgbWF4LWhlaWdodDogdmFyKC0tbWF4LWhlaWdodCwgODB2aCkgIWltcG9ydGFudDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZzo6cGFydChoZWFkZXIpIHtcbiAgICAgIGZsZXgtc2hyaW5rOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jb2RlLWVkaXRvci1kaWFsb2c6OnBhcnQoYm9keSkge1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgZmxleDogMSAhaW1wb3J0YW50O1xuICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xuICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3ItZGlhbG9nIG5pbGUtY29kZS1lZGl0b3Ige1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZyBuaWxlLWNvZGUtZWRpdG9yOjpwYXJ0KGNvZGUtZWRpdG9yLWJhc2UpIHtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW5pbGUtY29sb3ItbmV1dHJhbC0yMDAsICNlNWU3ZWIpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDtcbiAgICB9XG4gIGA7XG4gIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVDb2RlRWRpdG9yIGNvbXBvbmVudFxuICogUHJvdmlkZXMgY29kZSBlZGl0aW5nIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgdGFibGUgY2VsbHNcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB2YWx1ZSB0eXBlICh0eXBpY2FsbHkgc3RyaW5nKVxuICovXG5leHBvcnQgY2xhc3MgTmlsZUNvZGVFZGl0b3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDZWxsRWRpdG9yPFQ+IHtcbiAgcHJpdmF0ZSBlZGl0b3I/OiBhbnk7XG4gIHByaXZhdGUgd3JhcHBlcj86IEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIGV4cGFuZEJ1dHRvbj86IEhUTUxCdXR0b25FbGVtZW50O1xuICBwcml2YXRlIGRpYWxvZz86IGFueTtcbiAgcHJpdmF0ZSBkaWFsb2dFZGl0b3I/OiBhbnk7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PHsgZXZlbnQ6IHN0cmluZzsgaGFuZGxlcjogRXZlbnRMaXN0ZW5lciB9PiA9IFtdO1xuICBwcml2YXRlIGNvbnRleHQ/OiBDZWxsRWRpdG9yQ29udGV4dDxUPjtcbiAgcHJpdmF0ZSBkaWFsb2dPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgZXhwYW5kQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuICBwcml2YXRlIGRvY3VtZW50Q2xpY2tIYW5kbGVyPzogKGU6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIHByaXZhdGUgdHJhY2tlZFZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzeW5jaW5nRnJvbURpYWxvZyA9IGZhbHNlOyAvLyBGbGFnIHRvIHByZXZlbnQgaW5saW5lIGVkaXRvciBmcm9tIG92ZXJ3cml0aW5nIG11bHRpbGluZSBjb250ZW50XG4gIHByaXZhdGUgdXNlckVkaXRlZElubGluZSA9IGZhbHNlOyAvLyBGbGFnIHRvIHRyYWNrIGlmIHVzZXIgaGFzIHR5cGVkIGluIGlubGluZSBlZGl0b3JcbiAgcHJpdmF0ZSBkaWFsb2dPcmlnaW5hbFZhbHVlOiBzdHJpbmcgPSAnJzsgLy8gU3RvcmUgb3JpZ2luYWwgdmFsdWUgd2hlbiBkaWFsb2cgb3BlbnNcbiAgcHJpdmF0ZSBkaWFsb2dDdXJyZW50VmFsdWU6IHN0cmluZyA9ICcnOyAvLyBUcmFjayBjdXJyZW50IHZhbHVlIGluIGRpYWxvZ1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucz86IE5pbGVDb2RlRWRpdG9yT3B0aW9ucykge31cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlQ29kZUVkaXRvciByZXF1aXJlcyBhIGNvbnRhaW5lciBlbGVtZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAvLyBJbml0aWFsaXplIHRyYWNrZWQgdmFsdWUgZnJvbSBjb250ZXh0XG4gICAgdGhpcy50cmFja2VkVmFsdWUgPSBTdHJpbmcoY29udGV4dC52YWx1ZSA/PyAnJyk7XG4gICAgdGhpcy5zeW5jaW5nRnJvbURpYWxvZyA9IGZhbHNlO1xuICAgIHRoaXMudXNlckVkaXRlZElubGluZSA9IGZhbHNlO1xuXG4gICAgLy8gSW5qZWN0IGdsb2JhbCBzdHlsZXMgb25jZVxuICAgIGluamVjdENvZGVFZGl0b3JTdHlsZXMoKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBzaG93IGV4cGFuZCBidXR0b24gKGRlZmF1bHQ6IHRydWUpXG4gICAgY29uc3Qgc2hvd0V4cGFuZEJ1dHRvbiA9IHRoaXMub3B0aW9ucz8uc2hvd0V4cGFuZEJ1dHRvbiAhPT0gZmFsc2U7XG5cbiAgICBpZiAoc2hvd0V4cGFuZEJ1dHRvbikge1xuICAgICAgLy8gQ3JlYXRlIHdyYXBwZXIgZm9yIGVkaXRvciArIGV4cGFuZCBidXR0b25cbiAgICAgIHRoaXMud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGhpcy53cmFwcGVyLmNsYXNzTmFtZSA9ICdzdC1jb2RlLWVkaXRvci13cmFwcGVyJztcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICBjb25zdCBlZGl0b3JDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGVkaXRvckNvbnRhaW5lci5jbGFzc05hbWUgPSAnc3QtY29kZS1lZGl0b3ItaW5wdXQnO1xuXG4gICAgICAvLyBDcmVhdGUgTmlsZUNvZGVFZGl0b3IgY3VzdG9tIGVsZW1lbnRcbiAgICAgIHRoaXMuZWRpdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1jb2RlLWVkaXRvcicpO1xuICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBTdHJpbmcoY29udGV4dC52YWx1ZSA/PyAnJyk7XG4gICAgICB0aGlzLmVkaXRvci5jbGFzc05hbWUgPSAnc3QtY2VsbC1lZGl0b3Igc3QtbmlsZS1jb2RlLWVkaXRvcic7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgIHRoaXMuZWRpdG9yLnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgIHRoaXMuZWRpdG9yLnN0eWxlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICAgIHRoaXMuZWRpdG9yLm5vYm9yZGVyID0gdGhpcy5vcHRpb25zPy5ub2JvcmRlciAhPT0gZmFsc2U7XG4gICAgICAvLyBFbmFibGUgbXVsdGlsaW5lIGJ5IGRlZmF1bHQgZm9yIGlubGluZSBlZGl0b3IgdG8gc3VwcG9ydCBwYXN0ZSBhbmQgbXVsdGlsaW5lIGNvbnRlbnRcbiAgICAgIHRoaXMuZWRpdG9yLm11bHRpbGluZSA9IHRoaXMub3B0aW9ucz8ubXVsdGlsaW5lICE9PSBmYWxzZTtcbiAgICAgIHRoaXMuZWRpdG9yLmhhc1Njcm9sbGVyID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGxpbmUgbnVtYmVycyBmb3IgaW5saW5lIGVkaXRvclxuICAgICAgdGhpcy5lZGl0b3IubGluZU51bWJlcnMgPSBmYWxzZTtcblxuICAgICAgZWRpdG9yQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWRpdG9yKTtcbiAgICAgIHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZChlZGl0b3JDb250YWluZXIpO1xuXG4gICAgICAvLyBDcmVhdGUgZXhwYW5kIGJ1dHRvblxuICAgICAgdGhpcy5leHBhbmRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgIHRoaXMuZXhwYW5kQnV0dG9uLmNsYXNzTmFtZSA9ICdzdC1leHBhbmQtYnV0dG9uJztcbiAgICAgIHRoaXMuZXhwYW5kQnV0dG9uLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgIHRoaXMuZXhwYW5kQnV0dG9uLnRpdGxlID0gJ0V4cGFuZCBlZGl0b3InO1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24uaW5uZXJIVE1MID0gJzxuaWxlLWljb24gbmFtZT1cImV4cGFuZC0wNlwiIHNpemU9XCIxNlwiPjwvbmlsZS1pY29uPic7XG4gICAgICBcbiAgICAgIC8vIFVzZSBtb3VzZWRvd24gdG8gc2V0IGZsYWcgQkVGT1JFIGJsdXIgZXZlbnQgZmlyZXNcbiAgICAgIHRoaXMuZXhwYW5kQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5leHBhbmRCdXR0b25DbGlja2VkID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMud3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmV4cGFuZEJ1dHRvbik7XG5cbiAgICAgIC8vIENsZWFyIGNvbnRhaW5lciBhbmQgYXBwZW5kIHdyYXBwZXJcbiAgICAgIGNvbnRleHQuY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy53cmFwcGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIE5pbGVDb2RlRWRpdG9yIGN1c3RvbSBlbGVtZW50IHdpdGhvdXQgd3JhcHBlclxuICAgICAgdGhpcy5lZGl0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWNvZGUtZWRpdG9yJyk7XG4gICAgICB0aGlzLmVkaXRvci52YWx1ZSA9IFN0cmluZyhjb250ZXh0LnZhbHVlID8/ICcnKTtcbiAgICAgIHRoaXMuZWRpdG9yLmNsYXNzTmFtZSA9ICdzdC1jZWxsLWVkaXRvciBzdC1uaWxlLWNvZGUtZWRpdG9yJztcbiAgICAgIHRoaXMuZWRpdG9yLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgdGhpcy5lZGl0b3Iuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgdGhpcy5lZGl0b3Iuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgICAgdGhpcy5lZGl0b3Iubm9ib3JkZXIgPSB0aGlzLm9wdGlvbnM/Lm5vYm9yZGVyICE9PSBmYWxzZTtcbiAgICAgIC8vIEVuYWJsZSBtdWx0aWxpbmUgYnkgZGVmYXVsdCBmb3IgaW5saW5lIGVkaXRvciB0byBzdXBwb3J0IHBhc3RlIGFuZCBtdWx0aWxpbmUgY29udGVudFxuICAgICAgdGhpcy5lZGl0b3IubXVsdGlsaW5lID0gdGhpcy5vcHRpb25zPy5tdWx0aWxpbmUgIT09IGZhbHNlO1xuICAgICAgdGhpcy5lZGl0b3IuaGFzU2Nyb2xsZXIgPSB0cnVlO1xuICAgICAgLy8gTm8gbGluZSBudW1iZXJzIGZvciBpbmxpbmUgZWRpdG9yXG4gICAgICB0aGlzLmVkaXRvci5saW5lTnVtYmVycyA9IGZhbHNlO1xuXG4gICAgICAvLyBDbGVhciBjb250YWluZXIgYW5kIGFwcGVuZCBlZGl0b3JcbiAgICAgIGNvbnRleHQuY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lZGl0b3IpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICB0aGlzLmFwcGx5T3B0aW9ucygpO1xuXG4gICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyc1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycyhjb250ZXh0KTtcblxuICAgIC8vIEF1dG8gZm9jdXMgLSBuZWVkIGEgc2xpZ2h0IGRlbGF5IGZvciBuaWxlLWNvZGUtZWRpdG9yIHRvIGZ1bGx5IGluaXRpYWxpemVcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hdXRvRm9jdXMgIT09IGZhbHNlKSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHRoZSBuaWxlLWFmdGVyLWluaXQgZXZlbnQgd2hpY2ggZmlyZXMgd2hlbiBlZGl0b3IgaXMgcmVhZHlcbiAgICAgIGNvbnN0IGluaXRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRvcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignbmlsZS1hZnRlci1pbml0JywgaW5pdEhhbmRsZXIpO1xuICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgICB9O1xuICAgICAgdGhpcy5lZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1hZnRlci1pbml0JywgaW5pdEhhbmRsZXIpO1xuICAgICAgXG4gICAgICAvLyBGYWxsYmFjazogYWxzbyB0cnkgYWZ0ZXIgYSBkZWxheSBpbiBjYXNlIHRoZSBldmVudCBhbHJlYWR5IGZpcmVkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdGhlIGVkaXRvciBhbmQgcGxhY2UgY3Vyc29yXG4gICAqL1xuICBwcml2YXRlIGZvY3VzRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQ2FsbCB0aGUgY29tcG9uZW50J3MgZm9jdXMgbWV0aG9kXG4gICAgICB0aGlzLmVkaXRvci5mb2N1cygpO1xuICAgICAgXG4gICAgICAvLyBUcnkgdG8gZGlyZWN0bHkgZm9jdXMgdGhlIENvZGVNaXJyb3IgY29udGVudCBhcmVhXG4gICAgICBjb25zdCBzaGFkb3dSb290ID0gdGhpcy5lZGl0b3Iuc2hhZG93Um9vdDtcbiAgICAgIGlmIChzaGFkb3dSb290KSB7XG4gICAgICAgIGNvbnN0IGNtQ29udGVudCA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLmNtLWNvbnRlbnQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKGNtQ29udGVudCkge1xuICAgICAgICAgIGNtQ29udGVudC5mb2N1cygpO1xuICAgICAgICAgIC8vIERpc3BhdGNoIGEgY2xpY2sgZXZlbnQgdG8gZW5zdXJlIGN1cnNvciBwbGFjZW1lbnRcbiAgICAgICAgICBjbUNvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vkb3duJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgICBjbUNvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2V1cCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBTaWxlbnRseSBoYW5kbGUgYW55IGVycm9yc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIHRoZSBsaXZlIHZhbHVlIGRpcmVjdGx5IGZyb20gQ29kZU1pcnJvcidzIGludGVybmFsIHN0YXRlLFxuICAgKiBieXBhc3NpbmcgZGVib3VuY2VkIG5pbGUtY2hhbmdlIGV2ZW50cyBhbmQgdGhlIHBvc3NpYmx5LXN0YWxlIC52YWx1ZSBwcm9wZXJ0eS5cbiAgICogXG4gICAqIFByaW9yaXR5IG9yZGVyOlxuICAgKiAxLiB0cmFja2VkVmFsdWUgLSBhbHdheXMgdXAgdG8gZGF0ZSBmcm9tIGNoYW5nZSBldmVudHNcbiAgICogMi4gQ29kZU1pcnJvciBpbnRlcm5hbCBzdGF0ZSAtIGZvciByZWFsLXRpbWUgcmVhZGluZ1xuICAgKiAzLiBlZGl0b3IudmFsdWUgcHJvcGVydHkgLSBmYWxsYmFja1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRMaXZlRWRpdG9yVmFsdWUoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgdHJhY2tlZCB2YWx1ZSBpZiBhdmFpbGFibGUgKHVwZGF0ZWQgYnkgY2hhbmdlIGV2ZW50cylcbiAgICBpZiAodGhpcy50cmFja2VkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYWNrZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm4gJyc7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHRoaXMuZWRpdG9yLnNoYWRvd1Jvb3Q7XG4gICAgICBpZiAoc2hhZG93Um9vdCkge1xuICAgICAgICBjb25zdCBjbUVkaXRvciA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLmNtLWVkaXRvcicpIGFzIGFueTtcbiAgICAgICAgaWYgKGNtRWRpdG9yPy5jbVZpZXc/LnZpZXcpIHtcbiAgICAgICAgICByZXR1cm4gY21FZGl0b3IuY21WaWV3LnZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBvdGhlciBtZXRob2RzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnZhbHVlID8/ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGZ1bGwgZWRpdG9yIGRpYWxvZ1xuICAgKi9cbiAgcHJpdmF0ZSBvcGVuRGlhbG9nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpYWxvZ09wZW4pIHJldHVybjtcbiAgICB0aGlzLmRpYWxvZ09wZW4gPSB0cnVlO1xuICAgIHRoaXMuZXhwYW5kQnV0dG9uQ2xpY2tlZCA9IGZhbHNlOyAvLyBSZXNldCBmbGFnIG5vdyB0aGF0IGRpYWxvZyBpcyBvcGVuaW5nXG5cbiAgICAvLyBTdG9yZSBvcmlnaW5hbCB2YWx1ZSBmb3IgY2FuY2VsIGZ1bmN0aW9uYWxpdHlcbiAgICB0aGlzLmRpYWxvZ09yaWdpbmFsVmFsdWUgPSB0aGlzLmdldExpdmVFZGl0b3JWYWx1ZSgpO1xuXG4gICAgLy8gQ3JlYXRlIGRpYWxvZyB3aXRoIGNvbmZpZ3VyYWJsZSBkaW1lbnNpb25zXG4gICAgY29uc3QgZGlhbG9nV2lkdGggPSB0aGlzLm9wdGlvbnM/LmRpYWxvZ1dpZHRoIHx8ICc2MDBweCc7XG4gICAgY29uc3QgZGlhbG9nTWF4SGVpZ2h0ID0gdGhpcy5vcHRpb25zPy5kaWFsb2dNYXhIZWlnaHQgfHwgJzgwdmgnO1xuICAgIGNvbnN0IGRpYWxvZ0VkaXRvckhlaWdodCA9IHRoaXMub3B0aW9ucz8uZGlhbG9nRWRpdG9ySGVpZ2h0IHx8ICczMDBweCc7XG4gICAgY29uc3QgZGlhbG9nVGl0bGUgPSB0aGlzLm9wdGlvbnM/LmRpYWxvZ1RpdGxlIHx8ICdFZGl0IENvZGUnO1xuXG4gICAgdGhpcy5kaWFsb2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWRpYWxvZycpO1xuICAgIHRoaXMuZGlhbG9nLmNsYXNzTmFtZSA9ICdzdC1jb2RlLWVkaXRvci1kaWFsb2cnO1xuICAgIHRoaXMuZGlhbG9nLmxhYmVsID0gZGlhbG9nVGl0bGU7XG4gICAgdGhpcy5kaWFsb2cuc3R5bGUuc2V0UHJvcGVydHkoJy0td2lkdGgnLCBkaWFsb2dXaWR0aCk7XG4gICAgdGhpcy5kaWFsb2cuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWF4LWhlaWdodCcsIGRpYWxvZ01heEhlaWdodCk7XG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIGNvbnRlbnQgd3JhcHBlciAtIGZsZXggY29sdW1uIHRvIGhhbmRsZSBmaXhlZCBoZWFkZXIvZm9vdGVyXG4gICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250ZW50V3JhcHBlci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIGNvbnRlbnRXcmFwcGVyLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICBjb250ZW50V3JhcHBlci5zdHlsZS5oZWlnaHQgPSBgY2FsYygke2RpYWxvZ01heEhlaWdodH0gLSA2MHB4KWA7IC8vIEFjY291bnQgZm9yIGRpYWxvZyBoZWFkZXJcbiAgICBjb250ZW50V3JhcHBlci5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke2RpYWxvZ01heEhlaWdodH0gLSA2MHB4KWA7XG5cbiAgICAvLyBDcmVhdGUgZWRpdG9yIGNvbnRlbnQgYXJlYSAtIHRoaXMgaXMgdGhlIHNjcm9sbGFibGUgcGFydFxuICAgIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250ZW50LnN0eWxlLnBhZGRpbmcgPSAnMTZweCc7XG4gICAgY29udGVudC5zdHlsZS5wYWRkaW5nQm90dG9tID0gJzhweCc7XG4gICAgY29udGVudC5zdHlsZS5mbGV4ID0gJzEnO1xuICAgIGNvbnRlbnQuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7XG4gICAgY29udGVudC5zdHlsZS5taW5IZWlnaHQgPSAnMCc7IC8vIEltcG9ydGFudCBmb3IgZmxleCBzaHJpbmtpbmdcblxuICAgIC8vIENyZWF0ZSBmdWxsIGVkaXRvclxuICAgIHRoaXMuZGlhbG9nRWRpdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1jb2RlLWVkaXRvcicpO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLnZhbHVlID0gdGhpcy5kaWFsb2dPcmlnaW5hbFZhbHVlO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLm11bHRpbGluZSA9IHRydWU7XG4gICAgdGhpcy5kaWFsb2dFZGl0b3IubGluZU51bWJlcnNNdWx0aWxpbmUgPSB0cnVlO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLmhhc1Njcm9sbGVyID0gdHJ1ZTtcbiAgICB0aGlzLmRpYWxvZ0VkaXRvci5zdHlsZS5taW5IZWlnaHQgPSBkaWFsb2dFZGl0b3JIZWlnaHQ7XG5cbiAgICAvLyBBcHBseSBzYW1lIG9wdGlvbnMgdG8gZGlhbG9nIGVkaXRvclxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvci5sYW5ndWFnZSA9IHRoaXMub3B0aW9ucy5sYW5ndWFnZTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yLnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy50YWJDb21wbGV0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yLnRhYkNvbXBsZXRpb24gPSB0aGlzLm9wdGlvbnMudGFiQ29tcGxldGlvbjtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZW5hYmxlU2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yLmVuYWJsZVNlYXJjaCA9IHRoaXMub3B0aW9ucy5lbmFibGVTZWFyY2g7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuYWJsZUZvbGRHdXR0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yLmVuYWJsZUZvbGRHdXR0ZXJzID0gdGhpcy5vcHRpb25zLmVuYWJsZUZvbGRHdXR0ZXJzO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5jdXN0b21BdXRvQ29tcGxldGlvbnMpIHtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yLmN1c3RvbUF1dG9Db21wbGV0aW9ucyA9IHRoaXMub3B0aW9ucy5jdXN0b21BdXRvQ29tcGxldGlvbnM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmN1c3RvbUNvbXBsZXRpb25zUGF0aHMpIHtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yLmN1c3RvbUNvbXBsZXRpb25zUGF0aHMgPSB0aGlzLm9wdGlvbnMuY3VzdG9tQ29tcGxldGlvbnNQYXRocztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY3VzdG9tVGhlbWVDU1MpIHtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yLmN1c3RvbVRoZW1lQ1NTID0gdGhpcy5vcHRpb25zLmN1c3RvbVRoZW1lQ1NTO1xuICAgIH1cblxuICAgIHRoaXMuZGlhbG9nRWRpdG9yLmV4cGFuZGFibGUgPSBmYWxzZTtcblxuICAgIC8vIEluaXRpYWxpemUgZGlhbG9nIGN1cnJlbnQgdmFsdWVcbiAgICB0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZSA9IHRoaXMuZGlhbG9nT3JpZ2luYWxWYWx1ZTtcblxuICAgIC8vIFRyYWNrIGNoYW5nZXMgaW4gZGlhbG9nIGVkaXRvclxuICAgIHRoaXMuZGlhbG9nRWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgKGU6IEN1c3RvbUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZSA9IGUuZGV0YWlsPy52YWx1ZSA/PyAnJztcbiAgICB9KTtcblxuICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5kaWFsb2dFZGl0b3IpO1xuICAgIGNvbnRlbnRXcmFwcGVyLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xuXG4gICAgLy8gQ3JlYXRlIGZvb3RlciB3aXRoIE9rIGJ1dHRvbiAtIGZpeGVkIGF0IGJvdHRvbVxuICAgIGNvbnN0IGZvb3RlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGZvb3Rlci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIGZvb3Rlci5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdmbGV4LWVuZCc7XG4gICAgZm9vdGVyLnN0eWxlLnBhZGRpbmcgPSAnMTJweCAxNnB4JztcbiAgICBmb290ZXIuc3R5bGUuYm9yZGVyVG9wID0gJzFweCBzb2xpZCB2YXIoLS1uaWxlLWNvbG9yLW5ldXRyYWwtMjAwLCAjZTVlN2ViKSc7XG4gICAgZm9vdGVyLnN0eWxlLmdhcCA9ICc4cHgnO1xuICAgIGZvb3Rlci5zdHlsZS5mbGV4U2hyaW5rID0gJzAnOyAvLyBQcmV2ZW50IGZvb3RlciBmcm9tIHNocmlua2luZ1xuICAgIGZvb3Rlci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0tbmlsZS1jb2xvci1uZXV0cmFsLTAsICNmZmZmZmYpJztcblxuICAgIGNvbnN0IG9rQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1idXR0b24nKTtcbiAgICBva0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ3ZhcmlhbnQnLCAncHJpbWFyeScpO1xuICAgIG9rQnV0dG9uLnRleHRDb250ZW50ID0gJ09rJztcbiAgICBva0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMuYXBwbHlEaWFsb2dDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBmb290ZXIuYXBwZW5kQ2hpbGQob2tCdXR0b24pO1xuICAgIGNvbnRlbnRXcmFwcGVyLmFwcGVuZENoaWxkKGZvb3Rlcik7XG5cbiAgICB0aGlzLmRpYWxvZy5hcHBlbmRDaGlsZChjb250ZW50V3JhcHBlcik7XG5cbiAgICAvLyBIYW5kbGUgZGlhbG9nIGNsb3NlIGV2ZW50cyAoY2xpY2tpbmcgWCBidXR0b24gLSBjYW5jZWwgY2hhbmdlcylcbiAgICB0aGlzLmRpYWxvZy5hZGRFdmVudExpc3RlbmVyKCduaWxlLXJlcXVlc3QtY2xvc2UnLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIFggYnV0dG9uIG9yIG92ZXJsYXkgY2xpY2sgLSBjYW5jZWwgY2hhbmdlc1xuICAgICAgdGhpcy5jYW5jZWxEaWFsb2dDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgRXNjYXBlIGtleSBpbiBkaWFsb2cgLSBjYW5jZWwgY2hhbmdlc1xuICAgIHRoaXMuZGlhbG9nLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuY2FuY2VsRGlhbG9nQ2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQXBwZW5kIHRvIGJvZHkgYW5kIHNob3dcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZGlhbG9nKTtcbiAgICBcbiAgICAvLyBPcGVuIGRpYWxvZyBhZnRlciBhIHRpY2sgdG8gZW5zdXJlIGl0J3MgaW4gdGhlIERPTVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlhbG9nKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nLm9wZW4gPSB0cnVlO1xuICAgICAgICAvLyBGb2N1cyB0aGUgZGlhbG9nIGVkaXRvclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRpYWxvZ0VkaXRvcj8uZm9jdXMoKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSB0aGUgZGlhbG9nIGVkaXRvclxuICAgKi9cbiAgcHJpdmF0ZSBnZXREaWFsb2dFZGl0b3JWYWx1ZSgpOiBzdHJpbmcge1xuICAgIC8vIFVzZSB0cmFja2VkIHZhbHVlIGZyb20gY2hhbmdlIGV2ZW50cyAobW9zdCByZWxpYWJsZSlcbiAgICBpZiAodGhpcy5kaWFsb2dDdXJyZW50VmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZS5yZXBsYWNlKC9cXG4rJC8sICcnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCF0aGlzLmRpYWxvZ0VkaXRvcikgcmV0dXJuIHRoaXMuZGlhbG9nT3JpZ2luYWxWYWx1ZTtcbiAgICBcbiAgICAvLyBUcnkgdG8gZ2V0IHZhbHVlIGZyb20gQ29kZU1pcnJvcidzIGludGVybmFsIHN0YXRlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSB0aGlzLmRpYWxvZ0VkaXRvci5zaGFkb3dSb290O1xuICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgY29uc3QgY21FZGl0b3IgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5jbS1lZGl0b3InKSBhcyBhbnk7XG4gICAgICAgIGlmIChjbUVkaXRvcj8uY21WaWV3Py52aWV3KSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBjbUVkaXRvci5jbVZpZXcudmlldy5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXFxuKyQvLCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBvdGhlciBtZXRob2RzXG4gICAgfVxuICAgIFxuICAgIC8vIEZhbGxiYWNrIHRvIHZhbHVlIHByb3BlcnR5XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmRpYWxvZ0VkaXRvci52YWx1ZTtcbiAgICByZXR1cm4gKHZhbHVlID8/ICcnKS5yZXBsYWNlKC9cXG4rJC8sICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBjaGFuZ2VzIGZyb20gZGlhbG9nIGFuZCBjbG9zZSBpdFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseURpYWxvZ0NoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpYWxvZ09wZW4pIHJldHVybjtcblxuICAgIC8vIEdldCB0aGUgdmFsdWUgZnJvbSBkaWFsb2cgZWRpdG9yIC0gdHJ5IG11bHRpcGxlIHNvdXJjZXNcbiAgICBsZXQgZGlhbG9nVmFsdWUgPSB0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZTtcbiAgICBcbiAgICAvLyBJZiBubyB0cmFja2VkIHZhbHVlLCB0cnkgcmVhZGluZyBkaXJlY3RseSBmcm9tIGRpYWxvZyBlZGl0b3JcbiAgICBpZiAoIWRpYWxvZ1ZhbHVlICYmIHRoaXMuZGlhbG9nRWRpdG9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gdGhpcy5kaWFsb2dFZGl0b3Iuc2hhZG93Um9vdDtcbiAgICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICBjb25zdCBjbUVkaXRvciA9IHNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLmNtLWVkaXRvcicpIGFzIGFueTtcbiAgICAgICAgICBpZiAoY21FZGl0b3I/LmNtVmlldz8udmlldykge1xuICAgICAgICAgICAgZGlhbG9nVmFsdWUgPSBjbUVkaXRvci5jbVZpZXcudmlldy5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBGYWxsIHRocm91Z2hcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmFsbGJhY2sgdG8gdmFsdWUgcHJvcGVydHlcbiAgICAgIGlmICghZGlhbG9nVmFsdWUpIHtcbiAgICAgICAgZGlhbG9nVmFsdWUgPSB0aGlzLmRpYWxvZ0VkaXRvci52YWx1ZSA/PyAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gU3RyaXAgdHJhaWxpbmcgbmV3bGluZXNcbiAgICBkaWFsb2dWYWx1ZSA9IChkaWFsb2dWYWx1ZSB8fCAnJykucmVwbGFjZSgvXFxuKyQvLCAnJyk7XG4gICAgXG4gICAgLy8gVXBkYXRlIHRyYWNrZWQgdmFsdWUgYW5kIGlubGluZSBlZGl0b3JcbiAgICB0aGlzLnRyYWNrZWRWYWx1ZSA9IGRpYWxvZ1ZhbHVlO1xuICAgIHRoaXMudXNlckVkaXRlZElubGluZSA9IGZhbHNlO1xuICAgIFxuICAgIHRoaXMuc3luY2luZ0Zyb21EaWFsb2cgPSB0cnVlO1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBkaWFsb2dWYWx1ZTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN5bmNpbmdGcm9tRGlhbG9nID0gZmFsc2U7XG4gICAgfSwgMCk7XG4gICAgXG4gICAgLy8gTm90aWZ5IGNvbnRleHQgb2YgdGhlIGNoYW5nZVxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5vbkNoYW5nZShkaWFsb2dWYWx1ZSBhcyB1bmtub3duIGFzIFQpO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGRpYWxvZ1xuICAgIHRoaXMuY2xvc2VEaWFsb2dVSSgpO1xuICAgIFxuICAgIC8vIFJlZm9jdXMgdGhlIGNlbGwgZWRpdG9yIHRvIHN0YXkgaW4gZWRpdCBtb2RlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBkaWFsb2cgY2hhbmdlcyBhbmQgcmV2ZXJ0IHRvIG9yaWdpbmFsIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIGNhbmNlbERpYWxvZ0NoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpYWxvZ09wZW4pIHJldHVybjtcblxuICAgIC8vIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZSAoZG9uJ3QgY2hhbmdlIGFueXRoaW5nKVxuICAgIC8vIHRyYWNrZWRWYWx1ZSBhbmQgaW5saW5lIGVkaXRvciByZW1haW4gYXMgdGhleSB3ZXJlIGJlZm9yZSBkaWFsb2cgb3BlbmVkXG5cbiAgICAvLyBDbG9zZSBkaWFsb2dcbiAgICB0aGlzLmNsb3NlRGlhbG9nVUkoKTtcbiAgICBcbiAgICAvLyBSZWZvY3VzIHRoZSBjZWxsIGVkaXRvciB0byBzdGF5IGluIGVkaXQgbW9kZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhbmQgcmVtb3ZlIHRoZSBkaWFsb2cgVUlcbiAgICovXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dVSSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZSA9ICcnO1xuXG4gICAgaWYgKHRoaXMuZGlhbG9nKSB7XG4gICAgICB0aGlzLmRpYWxvZy5vcGVuID0gZmFsc2U7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZztcbiAgICAgIHRoaXMuZGlhbG9nID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IgPSB1bmRlZmluZWQ7XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBmcm9tIERPTSBhZnRlciBhbmltYXRpb25cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkaWFsb2dSZWY/LnJlbW92ZSgpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUgTmlsZUNvZGVFZGl0b3IgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuXG4gICAgLy8gTGFuZ3VhZ2UgYW5kIHN5bnRheFxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lmxhbmd1YWdlKSB7XG4gICAgICB0aGlzLmVkaXRvci5sYW5ndWFnZSA9IHRoaXMub3B0aW9ucy5sYW5ndWFnZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5kaXNhYmxlU3ludGF4SGlnaGxpZ2h0aW5nKSB7XG4gICAgICB0aGlzLmVkaXRvci5kaXNhYmxlU3ludGF4SGlnaGxpZ2h0aW5nID0gdGhpcy5vcHRpb25zLmRpc2FibGVTeW50YXhIaWdobGlnaHRpbmc7XG4gICAgfVxuXG4gICAgLy8gRWRpdG9yIGFwcGVhcmFuY2VcbiAgICBpZiAodGhpcy5vcHRpb25zPy5wbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5lZGl0b3IucGxhY2Vob2xkZXIgPSB0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubGluZU51bWJlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IubGluZU51bWJlcnMgPSB0aGlzLm9wdGlvbnMubGluZU51bWJlcnM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubGluZU51bWJlcnNNdWx0aWxpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IubGluZU51bWJlcnNNdWx0aWxpbmUgPSB0aGlzLm9wdGlvbnMubGluZU51bWJlcnNNdWx0aWxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubXVsdGlsaW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLm11bHRpbGluZSA9IHRoaXMub3B0aW9ucy5tdWx0aWxpbmU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGVmYXVsdEZvbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuZGVmYXVsdEZvbnQgPSB0aGlzLm9wdGlvbnMuZGVmYXVsdEZvbnQ7XG4gICAgfVxuXG4gICAgLy8gRWRpdG9yIGJlaGF2aW9yXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucmVhZG9ubHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IucmVhZG9ubHkgPSB0aGlzLm9wdGlvbnMucmVhZG9ubHk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZGlzYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuZGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8udGFiQ29tcGxldGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci50YWJDb21wbGV0aW9uID0gdGhpcy5vcHRpb25zLnRhYkNvbXBsZXRpb247XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZW5hYmxlU2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmVuYWJsZVNlYXJjaCA9IHRoaXMub3B0aW9ucy5lbmFibGVTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZW5hYmxlRm9sZEd1dHRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuZW5hYmxlRm9sZEd1dHRlcnMgPSB0aGlzLm9wdGlvbnMuZW5hYmxlRm9sZEd1dHRlcnM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uaGFzU2Nyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuaGFzU2Nyb2xsZXIgPSB0aGlzLm9wdGlvbnMuaGFzU2Nyb2xsZXI7XG4gICAgfVxuXG4gICAgLy8gRXhwYW5kYWJsZSAtIGRlZmF1bHQgdG8gZmFsc2UgZm9yIGNlbGwgZWRpdGluZ1xuICAgIHRoaXMuZWRpdG9yLmV4cGFuZGFibGUgPSB0aGlzLm9wdGlvbnM/LmV4cGFuZGFibGUgPz8gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5leHBhbmRJY29uKSB7XG4gICAgICB0aGlzLmVkaXRvci5leHBhbmRJY29uID0gdGhpcy5vcHRpb25zLmV4cGFuZEljb247XG4gICAgfVxuXG4gICAgLy8gQXV0b2NvbXBsZXRpb25cbiAgICBpZiAodGhpcy5vcHRpb25zPy5jdXN0b21BdXRvQ29tcGxldGlvbnMpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmN1c3RvbUF1dG9Db21wbGV0aW9ucyA9IHRoaXMub3B0aW9ucy5jdXN0b21BdXRvQ29tcGxldGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY3VzdG9tQ29tcGxldGlvbnNQYXRocykge1xuICAgICAgdGhpcy5lZGl0b3IuY3VzdG9tQ29tcGxldGlvbnNQYXRocyA9IHRoaXMub3B0aW9ucy5jdXN0b21Db21wbGV0aW9uc1BhdGhzO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmFsbG93VmFyaWFibGVJbkN1c3RvbVN1Z2dlc3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuYWxsb3dWYXJpYWJsZUluQ3VzdG9tU3VnZ2VzdGlvbiA9IHRoaXMub3B0aW9ucy5hbGxvd1ZhcmlhYmxlSW5DdXN0b21TdWdnZXN0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmFib3ZlQ3Vyc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmFib3ZlQ3Vyc29yID0gdGhpcy5vcHRpb25zLmFib3ZlQ3Vyc29yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmF1dG9Db21wbGV0ZVN0eWxlKSB7XG4gICAgICB0aGlzLmVkaXRvci5hdXRvQ29tcGxldGVTdHlsZSA9IHRoaXMub3B0aW9ucy5hdXRvQ29tcGxldGVTdHlsZTtcbiAgICB9XG5cbiAgICAvLyBDaGFuZ2UgaGFuZGxpbmdcbiAgICBpZiAodGhpcy5vcHRpb25zPy5kZWJvdW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZWJvdW5jZSA9IHRoaXMub3B0aW9ucy5kZWJvdW5jZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5kZWJvdW5jZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuZGVib3VuY2VUaW1lb3V0ID0gdGhpcy5vcHRpb25zLmRlYm91bmNlVGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBWaXN1YWwgc3RhdGVzXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuZXJyb3IgPSB0aGlzLm9wdGlvbnMuZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZXJyb3JNZXNzYWdlKSB7XG4gICAgICB0aGlzLmVkaXRvci5lcnJvck1lc3NhZ2UgPSB0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSB0aGVtZVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmN1c3RvbVRoZW1lQ1NTKSB7XG4gICAgICB0aGlzLmVkaXRvci5jdXN0b21UaGVtZUNTUyA9IHRoaXMub3B0aW9ucy5jdXN0b21UaGVtZUNTUztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGFsbCBldmVudCBsaXN0ZW5lcnMgd2l0aCBwcm9wZXIgY2xlYW51cCB0cmFja2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuXG4gICAgY29uc3QgdmFsaWRhdGVPblNhdmUgPSB0aGlzLm9wdGlvbnM/LnZhbGlkYXRlT25TYXZlICE9PSBmYWxzZTtcblxuICAgIC8vIEhhbmRsZSBrZXlib2FyZCBldmVudHNcbiAgICBjb25zdCBrZXlkb3duSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBlIGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgICBcbiAgICAgIC8vIEZvciBzaW5nbGUtbGluZSBtb2RlLCBFbnRlciBzYXZlc1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnM/Lm11bHRpbGluZSAmJiBrZXlFdmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuc2F2ZVZhbHVlKGNvbnRleHQsIHZhbGlkYXRlT25TYXZlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRXNjYXBlIGNhbmNlbHNcbiAgICAgIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAna2V5ZG93bicsIGhhbmRsZXI6IGtleWRvd25IYW5kbGVyIH0pO1xuXG4gICAgLy8gVXNlIG5pbGUtYmx1ciBldmVudCBmb3Igc2F2aW5nIG9uIGJsdXJcbiAgICBjb25zdCBibHVySGFuZGxlciA9ICgpID0+IHtcbiAgICAgIC8vIERvbid0IHNhdmUgaWYgZGlhbG9nIGlzIG9wZW5cbiAgICAgIGlmICh0aGlzLmRpYWxvZ09wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBEb24ndCBzYXZlIGlmIGV4cGFuZCBidXR0b24gd2FzIGNsaWNrZWQgKG1vdXNlZG93biBzZXRzIHRoaXMgZmxhZylcbiAgICAgIGlmICh0aGlzLmV4cGFuZEJ1dHRvbkNsaWNrZWQpIHtcbiAgICAgICAgLy8gUmVzZXQgZmxhZyAtIHRoZSBjbGljayBoYW5kbGVyIHdpbGwgb3BlbiB0aGUgZGlhbG9nXG4gICAgICAgIHRoaXMuZXhwYW5kQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNhdmUgYW5kIGV4aXQgZWRpdCBtb2RlXG4gICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgfTtcbiAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWJsdXInLCBibHVySGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWJsdXInLCBoYW5kbGVyOiBibHVySGFuZGxlciB9KTtcblxuICAgIC8vIERvY3VtZW50LWxldmVsIG1vdXNlZG93biBoYW5kbGVyIHRvIGRldGVjdCBjbGlja3Mgb3V0c2lkZSB0aGUgZWRpdG9yXG4gICAgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAvLyBEb24ndCBwcm9jZXNzIGlmIGRpYWxvZyBpcyBvcGVuIG9yIGV4cGFuZCBidXR0b24gd2FzIGNsaWNrZWRcbiAgICAgIGlmICh0aGlzLmRpYWxvZ09wZW4gfHwgdGhpcy5leHBhbmRCdXR0b25DbGlja2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIGNvbXBvc2VkUGF0aCB0byBoYW5kbGUgU2hhZG93IERPTSBib3VuZGFyaWVzXG4gICAgICBjb25zdCBwYXRoID0gZS5jb21wb3NlZFBhdGgoKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgYW55IGVsZW1lbnQgaW4gdGhlIHBhdGggaXMgb3VyIHdyYXBwZXIsIGVkaXRvciwgb3IgZXhwYW5kIGJ1dHRvblxuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHBhdGgpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHRoaXMud3JhcHBlciB8fCBlbGVtZW50ID09PSB0aGlzLmVkaXRvciB8fCBlbGVtZW50ID09PSB0aGlzLmV4cGFuZEJ1dHRvbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHNvIGNoZWNrIGlmIGl0J3MgdGhlIGNvbnRhaW5lciAodGhlIGNlbGwpXG4gICAgICAgIGlmIChlbGVtZW50ID09PSBjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDbGljayBpcyBvdXRzaWRlIC0gc2F2ZSBhbmQgZXhpdFxuICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgIH07XG5cbiAgICAvLyBBZGQgd2l0aCBhIHNtYWxsIGRlbGF5IHRvIGF2b2lkIGNhcHR1cmluZyB0aGUgaW5pdGlhbCBjbGljayB0aGF0IG9wZW5lZCB0aGUgZWRpdG9yXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyISwgdHJ1ZSk7XG4gICAgfSwgNTApO1xuXG4gICAgLy8gUmVhbC10aW1lIHZhbHVlIHVwZGF0ZXMgdXNpbmcgbmlsZS1jaGFuZ2VcbiAgICBjb25zdCBjaGFuZ2VIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IGN1c3RvbUV2ZW50LmRldGFpbD8udmFsdWUgPz8gJyc7XG4gICAgICBcbiAgICAgIC8vIERvbid0IHByb2Nlc3MgaWYgd2UncmUgc3luY2luZyBmcm9tIGRpYWxvZyAocHJldmVudHMgZmVlZGJhY2sgbG9vcClcbiAgICAgIGlmICh0aGlzLnN5bmNpbmdGcm9tRGlhbG9nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIHRyYWNrZWQgdmFsdWVcbiAgICAgIHRoaXMudHJhY2tlZFZhbHVlID0gbmV3VmFsdWU7XG4gICAgICBjb250ZXh0Lm9uQ2hhbmdlKG5ld1ZhbHVlIGFzIHVua25vd24gYXMgVCk7XG4gICAgfTtcbiAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWNoYW5nZScsIGNoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jaGFuZ2UnLCBoYW5kbGVyOiBjaGFuZ2VIYW5kbGVyIH0pO1xuXG4gICAgLy8gSGFuZGxlIGV4cGFuZCBldmVudCBpZiBleHBhbmRhYmxlXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZXhwYW5kYWJsZSkge1xuICAgICAgY29uc3QgZXhwYW5kSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBhIGN1c3RvbSBldmVudCB0aGF0IHRoZSBwYXJlbnQgY2FuIGxpc3RlbiB0b1xuICAgICAgICBjb25zdCBleHBhbmRFdmVudCA9IG5ldyBDdXN0b21FdmVudCgnc3QtY29kZS1lZGl0b3ItZXhwYW5kJywge1xuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLmdldEN1cnJlbnRWYWx1ZSgpIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5kaXNwYXRjaEV2ZW50KGV4cGFuZEV2ZW50KTtcbiAgICAgIH07XG4gICAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWV4cGFuZCcsIGV4cGFuZEhhbmRsZXIpO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWV4cGFuZCcsIGhhbmRsZXI6IGV4cGFuZEhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdmFsdWUgd2l0aCBvcHRpb25hbCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHNhdmVWYWx1ZShjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPiwgdmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG5cbiAgICAvLyBDb2RlIGVkaXRvciBkb2Vzbid0IGhhdmUgYnVpbHQtaW4gdmFsaWRhdGlvbiBsaWtlIGlucHV0XG4gICAgLy8gQnV0IHdlIGNhbiBjaGVjayBmb3IgZXJyb3Igc3RhdGVcbiAgICBpZiAodmFsaWRhdGUgJiYgdGhpcy5vcHRpb25zPy5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDdXJyZW50VmFsdWUoKTtcbiAgICBjb250ZXh0Lm9uU2F2ZSh2YWx1ZSk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSBkb2N1bWVudCBjbGljayBoYW5kbGVyXG4gICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIsIHRydWUpO1xuICAgICAgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBkaWFsb2cgaWYgb3BlblxuICAgIGlmICh0aGlzLmRpYWxvZ09wZW4gJiYgdGhpcy5kaWFsb2cpIHtcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGlhbG9nLnJlbW92ZSgpO1xuICAgICAgdGhpcy5kaWFsb2cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvciA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlhbG9nT3BlbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLmVkaXRvcj8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSBbXTtcblxuICAgICAgdGhpcy5lZGl0b3IucmVtb3ZlKCk7XG4gICAgICB0aGlzLmVkaXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgd3JhcHBlciBpZiBleGlzdHNcbiAgICBpZiAodGhpcy53cmFwcGVyKSB7XG4gICAgICB0aGlzLndyYXBwZXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLndyYXBwZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgZXhwYW5kIGJ1dHRvbiByZWZlcmVuY2VcbiAgICB0aGlzLmV4cGFuZEJ1dHRvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5leHBhbmRCdXR0b25DbGlja2VkID0gZmFsc2U7XG4gICAgdGhpcy5zeW5jaW5nRnJvbURpYWxvZyA9IGZhbHNlO1xuICAgIHRoaXMudHJhY2tlZFZhbHVlID0gbnVsbDtcbiAgICB0aGlzLnVzZXJFZGl0ZWRJbmxpbmUgPSBmYWxzZTtcbiAgICB0aGlzLmRpYWxvZ09yaWdpbmFsVmFsdWUgPSAnJztcbiAgICB0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZSA9ICcnO1xuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3I/LmZvY3VzKCk7XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuICcnIGFzIHVua25vd24gYXMgVDtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TGl2ZUVkaXRvclZhbHVlKCk7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xcbiskLywgJycpIGFzIHVua25vd24gYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdmFsdWUgcHJvZ3JhbW1hdGljYWxseVxuICAgKi9cbiAgc2V0VmFsdWUodmFsdWU6IFQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnZhbHVlID0gU3RyaW5nKHZhbHVlID8/ICcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBDb2RlTWlycm9yIGluc3RhbmNlIChpZiBuZWVkZWQgZm9yIGFkdmFuY2VkIHVzYWdlKVxuICAgKi9cbiAgZ2V0RWRpdG9ySW5zdGFuY2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3I7XG4gIH1cbn1cbiJdfQ==
780
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1jb2RlLWVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvZWRpdG9ycy9uaWxlLWNvZGUtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQW1ISDs7R0FFRztBQUNILElBQUksd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBQ3JDLFNBQVMsc0JBQXNCO0lBQzdCLElBQUksd0JBQXdCO1FBQUUsT0FBTztJQUNyQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFFaEMsTUFBTSxPQUFPLEdBQUcsOEJBQThCLENBQUM7SUFDL0MsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU87SUFFN0MsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQixLQUFLLENBQUMsV0FBVyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEduQixDQUFDO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQWlCekIsWUFBNkIsT0FBK0I7UUFBL0IsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFYcEQsbUJBQWMsR0FBcUQsRUFBRSxDQUFDO1FBRXRFLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxzQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxt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LENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3VzdG9tIGVkaXRvciB1c2luZyBOaWxlQ29kZUVkaXRvciBmcm9tIEBhcXVlcmEvbmlsZS1lbGVtZW50c1xuICogVGhpcyBwcm92aWRlcyBjb2RlIGVkaXRpbmcgY2FwYWJpbGl0aWVzIHdpdGggc3ludGF4IGhpZ2hsaWdodGluZyBmb3IgdGFibGUgY2VsbHNcbiAqL1xuXG5pbXBvcnQgeyBDZWxsRWRpdG9yLCBDZWxsRWRpdG9yQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9jZWxsLXN0cmF0ZWdpZXMuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBdXRvY29tcGxldGlvbiBpdGVtIGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlRWRpdG9yQ29tcGxldGlvbiB7XG4gIC8qKiBUaGUgY29tcGxldGlvbiBsYWJlbCBzaG93biBpbiBkcm9wZG93biAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogVGhlIHZhbHVlIHRvIGluc2VydCAqL1xuICB2YWx1ZT86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGRlc2NyaXB0aW9uICovXG4gIGRldGFpbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdXRvY29tcGxldGUgc3R5bGUgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9Db21wbGV0ZVN0eWxlIHtcbiAgLyoqIFdpZHRoIG9mIHRoZSBhdXRvY29tcGxldGUgZHJvcGRvd24gKi9cbiAgd2lkdGg/OiBzdHJpbmc7XG4gIC8qKiBFbmFibGUgbXVsdGlsaW5lIGNvbnRlbnQgaW4gYXV0b2NvbXBsZXRlICovXG4gIG11bHRpbGluZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBpbnRlcmZhY2UgZm9yIE5pbGVDb2RlRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZUNvZGVFZGl0b3JPcHRpb25zIHtcbiAgLy8gTGFuZ3VhZ2UgYW5kIHN5bnRheFxuICAvKiogTGFuZ3VhZ2UgbW9kZSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZyAqL1xuICBsYW5ndWFnZT86ICdqYXZhc2NyaXB0JyB8ICdzcWwnIHwgJ2pzb24nIHwgJ2h0bWwnO1xuICAvKiogRGlzYWJsZSBzeW50YXggaGlnaGxpZ2h0aW5nICovXG4gIGRpc2FibGVTeW50YXhIaWdobGlnaHRpbmc/OiBib29sZWFuO1xuXG4gIC8vIEVkaXRvciBhcHBlYXJhbmNlXG4gIC8qKiBQbGFjZWhvbGRlciB0ZXh0IHdoZW4gZW1wdHkgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBTaG93IGxpbmUgbnVtYmVycyAoc2luZ2xlLWxpbmUgbW9kZSkgKi9cbiAgbGluZU51bWJlcnM/OiBib29sZWFuO1xuICAvKiogU2hvdyBsaW5lIG51bWJlcnMgaW4gbXVsdGlsaW5lIG1vZGUgKi9cbiAgbGluZU51bWJlcnNNdWx0aWxpbmU/OiBib29sZWFuO1xuICAvKiogQWxsb3cgbXVsdGktbGluZSBlZGl0aW5nICovXG4gIG11bHRpbGluZT86IGJvb2xlYW47XG4gIC8qKiBSZW5kZXIgd2l0aG91dCBib3JkZXIgKi9cbiAgbm9ib3JkZXI/OiBib29sZWFuO1xuICAvKiogVXNlIGRlZmF1bHQgZm9udCBpbnN0ZWFkIG9mIGluaGVyaXQgKi9cbiAgZGVmYXVsdEZvbnQ/OiBib29sZWFuO1xuXG4gIC8vIEVkaXRvciBiZWhhdmlvclxuICAvKiogQXV0byBmb2N1cyBvbiBlZGl0ICovXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIC8qKiBSZWFkLW9ubHkgbW9kZSAqL1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIC8qKiBEaXNhYmxlZCBzdGF0ZSAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBFbmFibGUgVGFiLXRvLWNvbXBsZXRlICovXG4gIHRhYkNvbXBsZXRpb24/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBrZXltYXAgKi9cbiAgZW5hYmxlU2VhcmNoPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgY29kZSBmb2xkaW5nIGd1dHRlcnMgKi9cbiAgZW5hYmxlRm9sZEd1dHRlcnM/OiBib29sZWFuO1xuICAvKiogSW50ZXJuYWwgc2Nyb2xsIGNvbnRhaW5lciAqL1xuICBoYXNTY3JvbGxlcj86IGJvb2xlYW47XG4gIC8qKiBTaG93IGV4cGFuZCBjb250cm9sIChuYXRpdmUgbmlsZS1jb2RlLWVkaXRvciBleHBhbmQpICovXG4gIGV4cGFuZGFibGU/OiBib29sZWFuO1xuICAvKiogSWNvbiBmb3IgZXhwYW5kIGNvbnRyb2wgKi9cbiAgZXhwYW5kSWNvbj86IHN0cmluZztcbiAgXG4gIC8vIERpYWxvZyBleHBhbmQgZmVhdHVyZVxuICAvKiogU2hvdyBleHBhbmQgYnV0dG9uIHRvIG9wZW4gZnVsbCBlZGl0b3IgZGlhbG9nIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93RXhwYW5kQnV0dG9uPzogYm9vbGVhbjtcbiAgLyoqIERpYWxvZyB0aXRsZSAoZGVmYXVsdDogJ0VkaXQgQ29kZScpICovXG4gIGRpYWxvZ1RpdGxlPzogc3RyaW5nO1xuICAvKiogRGlhbG9nIHdpZHRoIChkZWZhdWx0OiAnNjAwcHgnKSAqL1xuICBkaWFsb2dXaWR0aD86IHN0cmluZztcbiAgLyoqIERpYWxvZyBtYXggaGVpZ2h0IChkZWZhdWx0OiAnODB2aCcpICovXG4gIGRpYWxvZ01heEhlaWdodD86IHN0cmluZztcbiAgLyoqIERpYWxvZyBlZGl0b3IgbWluIGhlaWdodCAoZGVmYXVsdDogJzMwMHB4JykgKi9cbiAgZGlhbG9nRWRpdG9ySGVpZ2h0Pzogc3RyaW5nO1xuXG4gIC8vIEF1dG9jb21wbGV0aW9uXG4gIC8qKiBJbmxpbmUgY29tcGxldGlvbiBkYXRhc2V0ICovXG4gIGN1c3RvbUF1dG9Db21wbGV0aW9ucz86IFJlY29yZDxzdHJpbmcsIENvZGVFZGl0b3JDb21wbGV0aW9uW10+IHwgQ29kZUVkaXRvckNvbXBsZXRpb25bXTtcbiAgLyoqIFBhdGhzIHRvIGZldGNoIGNvbXBsZXRpb24gZGF0YXNldHMgZnJvbSAqL1xuICBjdXN0b21Db21wbGV0aW9uc1BhdGhzPzogc3RyaW5nW107XG4gIC8qKiBFbmFibGUgdmFyaWFibGVzIGluIHN1Z2dlc3Rpb25zICovXG4gIGFsbG93VmFyaWFibGVJbkN1c3RvbVN1Z2dlc3Rpb24/OiBib29sZWFuO1xuICAvKiogU2hvdyBhdXRvY29tcGxldGUgYWJvdmUgY3Vyc29yICovXG4gIGFib3ZlQ3Vyc29yPzogYm9vbGVhbjtcbiAgLyoqIFN0eWxlIGNvbmZpZyBmb3IgYXV0b2NvbXBsZXRlIGRyb3Bkb3duICovXG4gIGF1dG9Db21wbGV0ZVN0eWxlPzogQXV0b0NvbXBsZXRlU3R5bGU7XG5cbiAgLy8gQ2hhbmdlIGhhbmRsaW5nXG4gIC8qKiBEZWJvdW5jZSBjaGFuZ2UgZXZlbnRzICovXG4gIGRlYm91bmNlPzogYm9vbGVhbjtcbiAgLyoqIERlYm91bmNlIGRlbGF5IGluIG1zICovXG4gIGRlYm91bmNlVGltZW91dD86IG51bWJlcjtcblxuICAvLyBWaXN1YWwgc3RhdGVzXG4gIC8qKiBFcnJvciBzdGF0ZSAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8vIEN1c3RvbSB0aGVtZVxuICAvKiogQ3VzdG9tIHRoZW1lIENTUyBvYmplY3QgKi9cbiAgY3VzdG9tVGhlbWVDU1M/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcblxuICAvLyBWYWxpZGF0aW9uIGJlaGF2aW9yXG4gIC8qKiBWYWxpZGF0ZSBiZWZvcmUgc2F2aW5nIChkZWZhdWx0OiB0cnVlKSAqL1xuICB2YWxpZGF0ZU9uU2F2ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSW5qZWN0IGdsb2JhbCBzdHlsZXMgZm9yIG5pbGUtY29kZS1lZGl0b3IgaW4gdGFibGUgY2VsbHNcbiAqL1xubGV0IGNvZGVFZGl0b3JTdHlsZXNJbmplY3RlZCA9IGZhbHNlO1xuZnVuY3Rpb24gaW5qZWN0Q29kZUVkaXRvclN0eWxlcygpOiB2b2lkIHtcbiAgaWYgKGNvZGVFZGl0b3JTdHlsZXNJbmplY3RlZCkgcmV0dXJuO1xuICBjb2RlRWRpdG9yU3R5bGVzSW5qZWN0ZWQgPSB0cnVlO1xuXG4gIGNvbnN0IHN0eWxlSWQgPSAnbmlsZS1jb2RlLWVkaXRvci1jZWxsLXN0eWxlcyc7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzdHlsZUlkKSkgcmV0dXJuO1xuXG4gIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUuaWQgPSBzdHlsZUlkO1xuICBzdHlsZS50ZXh0Q29udGVudCA9IGBcbiAgICAvKiBOaWxlIENvZGUgRWRpdG9yIGNlbGwgc3R5bGluZyAtIGNvbnN0cmFpbmVkIHRvIGNlbGwgaGVpZ2h0ICovXG4gICAgbmlsZS1jb2RlLWVkaXRvci5zdC1jZWxsLWVkaXRvciB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWF4LWhlaWdodDogMzJweDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICBuaWxlLWNvZGUtZWRpdG9yLnN0LWNlbGwtZWRpdG9yOjpwYXJ0KGNvZGUtZWRpdG9yLWJhc2UpIHtcbiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgbWluLWhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgbWF4LWhlaWdodDogMzJweCAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC8qIEVuc3VyZSBwcm9wZXIgc2l6aW5nIHdpdGhpbiB0YWJsZSBjZWxsICovXG4gICAgLnN0LW5pbGUtY29kZS1lZGl0b3Ige1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtYXgtaGVpZ2h0OiAzMnB4O1xuICAgICAgbWluLWhlaWdodDogMjhweDtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLyogQ29kZU1pcnJvciBjb250ZW50IHNob3VsZCBpbmhlcml0IGZvbnQgc2l6ZSBhbmQgYmUgY29uc3RyYWluZWQgKi9cbiAgICBuaWxlLWNvZGUtZWRpdG9yLnN0LWNlbGwtZWRpdG9yIC5jbS1lZGl0b3Ige1xuICAgICAgbWF4LWhlaWdodDogMzJweCAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgIH1cbiAgICBuaWxlLWNvZGUtZWRpdG9yLnN0LWNlbGwtZWRpdG9yIC5jbS1zY3JvbGxlciB7XG4gICAgICBtYXgtaGVpZ2h0OiAzMnB4ICFpbXBvcnRhbnQ7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIG5pbGUtY29kZS1lZGl0b3Iuc3QtY2VsbC1lZGl0b3IgLmNtLWNvbnRlbnQsXG4gICAgbmlsZS1jb2RlLWVkaXRvci5zdC1jZWxsLWVkaXRvciAuY20tbGluZSB7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAvKiBDb250YWluZXIgd3JhcHBlciBmb3IgZWRpdG9yICsgZXhwYW5kIGJ1dHRvbiAqL1xuICAgIC5zdC1jb2RlLWVkaXRvci13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtYXgtaGVpZ2h0OiAzMnB4O1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuICAgIC5zdC1jb2RlLWVkaXRvci13cmFwcGVyIC5zdC1jb2RlLWVkaXRvci1pbnB1dCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWF4LWhlaWdodDogMzJweDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICAgIC5zdC1jb2RlLWVkaXRvci13cmFwcGVyIC5zdC1leHBhbmQtYnV0dG9uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB3aWR0aDogMjRweDtcbiAgICAgIGhlaWdodDogMjRweDtcbiAgICAgIG1pbi13aWR0aDogMjRweDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGNvbG9yOiB2YXIoLS1uaWxlLWNvbG9yLW5ldXRyYWwtNTAwLCAjNmI3MjgwKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3Itd3JhcHBlciAuc3QtZXhwYW5kLWJ1dHRvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1uaWxlLWNvbG9yLW5ldXRyYWwtMTAwLCAjZjNmNGY2KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1uaWxlLWNvbG9yLW5ldXRyYWwtNzAwLCAjMzc0MTUxKTtcbiAgICB9XG4gICAgLyogRGlhbG9nIGNvZGUgZWRpdG9yIHN0eWxpbmcgLSBmaXhlZCBoZWFkZXIvZm9vdGVyLCBzY3JvbGxhYmxlIGNvbnRlbnQgKi9cbiAgICAuc3QtY29kZS1lZGl0b3ItZGlhbG9nOjpwYXJ0KHBhbmVsKSB7XG4gICAgICBtYXgtaGVpZ2h0OiB2YXIoLS1tYXgtaGVpZ2h0LCA4MHZoKSAhaW1wb3J0YW50O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3ItZGlhbG9nOjpwYXJ0KGhlYWRlcikge1xuICAgICAgZmxleC1zaHJpbms6IDAgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnN0LWNvZGUtZWRpdG9yLWRpYWxvZzo6cGFydChib2R5KSB7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgICBmbGV4OiAxICFpbXBvcnRhbnQ7XG4gICAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XG4gICAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5zdC1jb2RlLWVkaXRvci1kaWFsb2cgbmlsZS1jb2RlLWVkaXRvciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgICAuc3QtY29kZS1lZGl0b3ItZGlhbG9nIG5pbGUtY29kZS1lZGl0b3I6OnBhcnQoY29kZS1lZGl0b3ItYmFzZSkge1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbmlsZS1jb2xvci1uZXV0cmFsLTIwMCwgI2U1ZTdlYikgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgYDtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbi8qKlxuICogQ3VzdG9tIGVkaXRvciB0aGF0IHVzZXMgTmlsZUNvZGVFZGl0b3IgY29tcG9uZW50XG4gKiBQcm92aWRlcyBjb2RlIGVkaXRpbmcgd2l0aCBzeW50YXggaGlnaGxpZ2h0aW5nIGZvciB0YWJsZSBjZWxsc1xuICogQHRlbXBsYXRlIFQgVGhlIHZhbHVlIHR5cGUgKHR5cGljYWxseSBzdHJpbmcpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlQ29kZUVkaXRvcjxUID0gc3RyaW5nPiBpbXBsZW1lbnRzIENlbGxFZGl0b3I8VD4ge1xuICBwcml2YXRlIGVkaXRvcj86IGFueTtcbiAgcHJpdmF0ZSB3cmFwcGVyPzogSFRNTERpdkVsZW1lbnQ7XG4gIHByaXZhdGUgZXhwYW5kQnV0dG9uPzogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gIHByaXZhdGUgZGlhbG9nPzogYW55O1xuICBwcml2YXRlIGRpYWxvZ0VkaXRvcj86IGFueTtcbiAgcHJpdmF0ZSBldmVudExpc3RlbmVyczogQXJyYXk8eyBldmVudDogc3RyaW5nOyBoYW5kbGVyOiBFdmVudExpc3RlbmVyIH0+ID0gW107XG4gIHByaXZhdGUgY29udGV4dD86IENlbGxFZGl0b3JDb250ZXh0PFQ+O1xuICBwcml2YXRlIGRpYWxvZ09wZW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBleHBhbmRCdXR0b25DbGlja2VkID0gZmFsc2U7XG4gIHByaXZhdGUgZG9jdW1lbnRDbGlja0hhbmRsZXI/OiAoZTogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSB0cmFja2VkVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN5bmNpbmdGcm9tRGlhbG9nID0gZmFsc2U7IC8vIEZsYWcgdG8gcHJldmVudCBpbmxpbmUgZWRpdG9yIGZyb20gb3ZlcndyaXRpbmcgbXVsdGlsaW5lIGNvbnRlbnRcbiAgcHJpdmF0ZSB1c2VyRWRpdGVkSW5saW5lID0gZmFsc2U7IC8vIEZsYWcgdG8gdHJhY2sgaWYgdXNlciBoYXMgdHlwZWQgaW4gaW5saW5lIGVkaXRvclxuICBwcml2YXRlIGRpYWxvZ09yaWdpbmFsVmFsdWU6IHN0cmluZyA9ICcnOyAvLyBTdG9yZSBvcmlnaW5hbCB2YWx1ZSB3aGVuIGRpYWxvZyBvcGVuc1xuICBwcml2YXRlIGRpYWxvZ0N1cnJlbnRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIGN1cnJlbnQgdmFsdWUgaW4gZGlhbG9nXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zPzogTmlsZUNvZGVFZGl0b3JPcHRpb25zKSB7fVxuXG4gIGVkaXQoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05pbGVDb2RlRWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIC8vIEluaXRpYWxpemUgdHJhY2tlZCB2YWx1ZSBmcm9tIGNvbnRleHRcbiAgICB0aGlzLnRyYWNrZWRWYWx1ZSA9IFN0cmluZyhjb250ZXh0LnZhbHVlID8/ICcnKTtcbiAgICB0aGlzLnN5bmNpbmdGcm9tRGlhbG9nID0gZmFsc2U7XG4gICAgdGhpcy51c2VyRWRpdGVkSW5saW5lID0gZmFsc2U7XG5cbiAgICAvLyBJbmplY3QgZ2xvYmFsIHN0eWxlcyBvbmNlXG4gICAgaW5qZWN0Q29kZUVkaXRvclN0eWxlcygpO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHNob3cgZXhwYW5kIGJ1dHRvbiAoZGVmYXVsdDogdHJ1ZSlcbiAgICBjb25zdCBzaG93RXhwYW5kQnV0dG9uID0gdGhpcy5vcHRpb25zPy5zaG93RXhwYW5kQnV0dG9uICE9PSBmYWxzZTtcblxuICAgIGlmIChzaG93RXhwYW5kQnV0dG9uKSB7XG4gICAgICAvLyBDcmVhdGUgd3JhcHBlciBmb3IgZWRpdG9yICsgZXhwYW5kIGJ1dHRvblxuICAgICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0aGlzLndyYXBwZXIuY2xhc3NOYW1lID0gJ3N0LWNvZGUtZWRpdG9yLXdyYXBwZXInO1xuXG4gICAgICAvLyBDcmVhdGUgdGhlIGVkaXRvciBjb250YWluZXJcbiAgICAgIGNvbnN0IGVkaXRvckNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZWRpdG9yQ29udGFpbmVyLmNsYXNzTmFtZSA9ICdzdC1jb2RlLWVkaXRvci1pbnB1dCc7XG5cbiAgICAgIC8vIENyZWF0ZSBOaWxlQ29kZUVkaXRvciBjdXN0b20gZWxlbWVudFxuICAgICAgdGhpcy5lZGl0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWNvZGUtZWRpdG9yJyk7XG4gICAgICB0aGlzLmVkaXRvci52YWx1ZSA9IFN0cmluZyhjb250ZXh0LnZhbHVlID8/ICcnKTtcbiAgICAgIHRoaXMuZWRpdG9yLmNsYXNzTmFtZSA9ICdzdC1jZWxsLWVkaXRvciBzdC1uaWxlLWNvZGUtZWRpdG9yJztcbiAgICAgIHRoaXMuZWRpdG9yLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgdGhpcy5lZGl0b3Iuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgdGhpcy5lZGl0b3Iuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgICAgdGhpcy5lZGl0b3Iubm9ib3JkZXIgPSB0aGlzLm9wdGlvbnM/Lm5vYm9yZGVyICE9PSBmYWxzZTtcbiAgICAgIC8vIEVuYWJsZSBtdWx0aWxpbmUgYnkgZGVmYXVsdCBmb3IgaW5saW5lIGVkaXRvciB0byBzdXBwb3J0IHBhc3RlIGFuZCBtdWx0aWxpbmUgY29udGVudFxuICAgICAgdGhpcy5lZGl0b3IubXVsdGlsaW5lID0gdGhpcy5vcHRpb25zPy5tdWx0aWxpbmUgIT09IGZhbHNlO1xuICAgICAgdGhpcy5lZGl0b3IuaGFzU2Nyb2xsZXIgPSB0cnVlO1xuICAgICAgLy8gTm8gbGluZSBudW1iZXJzIGZvciBpbmxpbmUgZWRpdG9yXG4gICAgICB0aGlzLmVkaXRvci5saW5lTnVtYmVycyA9IGZhbHNlO1xuXG4gICAgICBlZGl0b3JDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lZGl0b3IpO1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKGVkaXRvckNvbnRhaW5lcik7XG5cbiAgICAgIC8vIENyZWF0ZSBleHBhbmQgYnV0dG9uXG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24uY2xhc3NOYW1lID0gJ3N0LWV4cGFuZC1idXR0b24nO1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24udHlwZSA9ICdidXR0b24nO1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24udGl0bGUgPSAnRXhwYW5kIGVkaXRvcic7XG4gICAgICB0aGlzLmV4cGFuZEJ1dHRvbi5pbm5lckhUTUwgPSAnPG5pbGUtaWNvbiBuYW1lPVwiZXhwYW5kLTA2XCIgc2l6ZT1cIjE2XCI+PC9uaWxlLWljb24+JztcbiAgICAgIFxuICAgICAgLy8gVXNlIG1vdXNlZG93biB0byBzZXQgZmxhZyBCRUZPUkUgYmx1ciBldmVudCBmaXJlc1xuICAgICAgdGhpcy5leHBhbmRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmV4cGFuZEJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHRoaXMuZXhwYW5kQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLm9wZW5EaWFsb2coKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZXhwYW5kQnV0dG9uKTtcblxuICAgICAgLy8gQ2xlYXIgY29udGFpbmVyIGFuZCBhcHBlbmQgd3JhcHBlclxuICAgICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgICBjb250ZXh0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLndyYXBwZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgTmlsZUNvZGVFZGl0b3IgY3VzdG9tIGVsZW1lbnQgd2l0aG91dCB3cmFwcGVyXG4gICAgICB0aGlzLmVkaXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtY29kZS1lZGl0b3InKTtcbiAgICAgIHRoaXMuZWRpdG9yLnZhbHVlID0gU3RyaW5nKGNvbnRleHQudmFsdWUgPz8gJycpO1xuICAgICAgdGhpcy5lZGl0b3IuY2xhc3NOYW1lID0gJ3N0LWNlbGwtZWRpdG9yIHN0LW5pbGUtY29kZS1lZGl0b3InO1xuICAgICAgdGhpcy5lZGl0b3Iuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICB0aGlzLmVkaXRvci5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCc7XG4gICAgICB0aGlzLmVkaXRvci5ub2JvcmRlciA9IHRoaXMub3B0aW9ucz8ubm9ib3JkZXIgIT09IGZhbHNlO1xuICAgICAgLy8gRW5hYmxlIG11bHRpbGluZSBieSBkZWZhdWx0IGZvciBpbmxpbmUgZWRpdG9yIHRvIHN1cHBvcnQgcGFzdGUgYW5kIG11bHRpbGluZSBjb250ZW50XG4gICAgICB0aGlzLmVkaXRvci5tdWx0aWxpbmUgPSB0aGlzLm9wdGlvbnM/Lm11bHRpbGluZSAhPT0gZmFsc2U7XG4gICAgICB0aGlzLmVkaXRvci5oYXNTY3JvbGxlciA9IHRydWU7XG4gICAgICAvLyBObyBsaW5lIG51bWJlcnMgZm9yIGlubGluZSBlZGl0b3JcbiAgICAgIHRoaXMuZWRpdG9yLmxpbmVOdW1iZXJzID0gZmFsc2U7XG5cbiAgICAgIC8vIENsZWFyIGNvbnRhaW5lciBhbmQgYXBwZW5kIGVkaXRvclxuICAgICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgICBjb250ZXh0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVkaXRvcik7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgIHRoaXMuYXBwbHlPcHRpb25zKCk7XG5cbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuXG4gICAgLy8gQXV0byBmb2N1cyAtIG5lZWQgYSBzbGlnaHQgZGVsYXkgZm9yIG5pbGUtY29kZS1lZGl0b3IgdG8gZnVsbHkgaW5pdGlhbGl6ZVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmF1dG9Gb2N1cyAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgdGhlIG5pbGUtYWZ0ZXItaW5pdCBldmVudCB3aGljaCBmaXJlcyB3aGVuIGVkaXRvciBpcyByZWFkeVxuICAgICAgY29uc3QgaW5pdEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5yZW1vdmVFdmVudExpc3RlbmVyKCduaWxlLWFmdGVyLWluaXQnLCBpbml0SGFuZGxlcik7XG4gICAgICAgIHRoaXMuZm9jdXNFZGl0b3IoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmVkaXRvci5hZGRFdmVudExpc3RlbmVyKCduaWxlLWFmdGVyLWluaXQnLCBpbml0SGFuZGxlcik7XG4gICAgICBcbiAgICAgIC8vIEZhbGxiYWNrOiBhbHNvIHRyeSBhZnRlciBhIGRlbGF5IGluIGNhc2UgdGhlIGV2ZW50IGFscmVhZHkgZmlyZWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgZWRpdG9yIGFuZCBwbGFjZSBjdXJzb3JcbiAgICovXG4gIHByaXZhdGUgZm9jdXNFZGl0b3IoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBDYWxsIHRoZSBjb21wb25lbnQncyBmb2N1cyBtZXRob2RcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7XG4gICAgICBcbiAgICAgIC8vIFRyeSB0byBkaXJlY3RseSBmb2N1cyB0aGUgQ29kZU1pcnJvciBjb250ZW50IGFyZWFcbiAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSB0aGlzLmVkaXRvci5zaGFkb3dSb290O1xuICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgY29uc3QgY21Db250ZW50ID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcuY20tY29udGVudCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoY21Db250ZW50KSB7XG4gICAgICAgICAgY21Db250ZW50LmZvY3VzKCk7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggYSBjbGljayBldmVudCB0byBlbnN1cmUgY3Vyc29yIHBsYWNlbWVudFxuICAgICAgICAgIGNtQ29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgICAgIGNtQ29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZXVwJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBhbnkgZXJyb3JzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIGxpdmUgdmFsdWUgZGlyZWN0bHkgZnJvbSBDb2RlTWlycm9yJ3MgaW50ZXJuYWwgc3RhdGUsXG4gICAqIGJ5cGFzc2luZyBkZWJvdW5jZWQgbmlsZS1jaGFuZ2UgZXZlbnRzIGFuZCB0aGUgcG9zc2libHktc3RhbGUgLnZhbHVlIHByb3BlcnR5LlxuICAgKiBcbiAgICogUHJpb3JpdHkgb3JkZXI6XG4gICAqIDEuIHRyYWNrZWRWYWx1ZSAtIGFsd2F5cyB1cCB0byBkYXRlIGZyb20gY2hhbmdlIGV2ZW50c1xuICAgKiAyLiBDb2RlTWlycm9yIGludGVybmFsIHN0YXRlIC0gZm9yIHJlYWwtdGltZSByZWFkaW5nXG4gICAqIDMuIGVkaXRvci52YWx1ZSBwcm9wZXJ0eSAtIGZhbGxiYWNrXG4gICAqL1xuICBwcml2YXRlIGdldExpdmVFZGl0b3JWYWx1ZSgpOiBzdHJpbmcge1xuICAgIC8vIFVzZSB0cmFja2VkIHZhbHVlIGlmIGF2YWlsYWJsZSAodXBkYXRlZCBieSBjaGFuZ2UgZXZlbnRzKVxuICAgIGlmICh0aGlzLnRyYWNrZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhY2tlZFZhbHVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybiAnJztcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaGFkb3dSb290ID0gdGhpcy5lZGl0b3Iuc2hhZG93Um9vdDtcbiAgICAgIGlmIChzaGFkb3dSb290KSB7XG4gICAgICAgIGNvbnN0IGNtRWRpdG9yID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcuY20tZWRpdG9yJykgYXMgYW55O1xuICAgICAgICBpZiAoY21FZGl0b3I/LmNtVmlldz8udmlldykge1xuICAgICAgICAgIHJldHVybiBjbUVkaXRvci5jbVZpZXcudmlldy5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG90aGVyIG1ldGhvZHNcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudmFsdWUgPz8gJyc7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiB0aGUgZnVsbCBlZGl0b3IgZGlhbG9nXG4gICAqL1xuICBwcml2YXRlIG9wZW5EaWFsb2coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlhbG9nT3BlbikgcmV0dXJuO1xuICAgIHRoaXMuZGlhbG9nT3BlbiA9IHRydWU7XG4gICAgdGhpcy5leHBhbmRCdXR0b25DbGlja2VkID0gZmFsc2U7IC8vIFJlc2V0IGZsYWcgbm93IHRoYXQgZGlhbG9nIGlzIG9wZW5pbmdcblxuICAgIC8vIFN0b3JlIG9yaWdpbmFsIHZhbHVlIGZvciBjYW5jZWwgZnVuY3Rpb25hbGl0eVxuICAgIHRoaXMuZGlhbG9nT3JpZ2luYWxWYWx1ZSA9IHRoaXMuZ2V0TGl2ZUVkaXRvclZhbHVlKCk7XG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIHdpdGggY29uZmlndXJhYmxlIGRpbWVuc2lvbnNcbiAgICBjb25zdCBkaWFsb2dXaWR0aCA9IHRoaXMub3B0aW9ucz8uZGlhbG9nV2lkdGggfHwgJzYwMHB4JztcbiAgICBjb25zdCBkaWFsb2dNYXhIZWlnaHQgPSB0aGlzLm9wdGlvbnM/LmRpYWxvZ01heEhlaWdodCB8fCAnODB2aCc7XG4gICAgY29uc3QgZGlhbG9nRWRpdG9ySGVpZ2h0ID0gdGhpcy5vcHRpb25zPy5kaWFsb2dFZGl0b3JIZWlnaHQgfHwgJzMwMHB4JztcbiAgICBjb25zdCBkaWFsb2dUaXRsZSA9IHRoaXMub3B0aW9ucz8uZGlhbG9nVGl0bGUgfHwgJ0VkaXQgQ29kZSc7XG5cbiAgICB0aGlzLmRpYWxvZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ25pbGUtZGlhbG9nJyk7XG4gICAgdGhpcy5kaWFsb2cuY2xhc3NOYW1lID0gJ3N0LWNvZGUtZWRpdG9yLWRpYWxvZyc7XG4gICAgdGhpcy5kaWFsb2cubGFiZWwgPSBkaWFsb2dUaXRsZTtcbiAgICB0aGlzLmRpYWxvZy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13aWR0aCcsIGRpYWxvZ1dpZHRoKTtcbiAgICB0aGlzLmRpYWxvZy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgtaGVpZ2h0JywgZGlhbG9nTWF4SGVpZ2h0KTtcblxuICAgIC8vIENyZWF0ZSBkaWFsb2cgY29udGVudCB3cmFwcGVyIC0gZmxleCBjb2x1bW4gdG8gaGFuZGxlIGZpeGVkIGhlYWRlci9mb290ZXJcbiAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnRlbnRXcmFwcGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgY29udGVudFdyYXBwZXIuc3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgIGNvbnRlbnRXcmFwcGVyLnN0eWxlLmhlaWdodCA9IGBjYWxjKCR7ZGlhbG9nTWF4SGVpZ2h0fSAtIDYwcHgpYDsgLy8gQWNjb3VudCBmb3IgZGlhbG9nIGhlYWRlclxuICAgIGNvbnRlbnRXcmFwcGVyLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKCR7ZGlhbG9nTWF4SGVpZ2h0fSAtIDYwcHgpYDtcblxuICAgIC8vIENyZWF0ZSBlZGl0b3IgY29udGVudCBhcmVhIC0gdGhpcyBpcyB0aGUgc2Nyb2xsYWJsZSBwYXJ0XG4gICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnRlbnQuc3R5bGUucGFkZGluZyA9ICcxNnB4JztcbiAgICBjb250ZW50LnN0eWxlLnBhZGRpbmdCb3R0b20gPSAnOHB4JztcbiAgICBjb250ZW50LnN0eWxlLmZsZXggPSAnMSc7XG4gICAgY29udGVudC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICBjb250ZW50LnN0eWxlLm1pbkhlaWdodCA9ICcwJzsgLy8gSW1wb3J0YW50IGZvciBmbGV4IHNocmlua2luZ1xuXG4gICAgLy8gQ3JlYXRlIGZ1bGwgZWRpdG9yXG4gICAgdGhpcy5kaWFsb2dFZGl0b3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWNvZGUtZWRpdG9yJyk7XG4gICAgdGhpcy5kaWFsb2dFZGl0b3IudmFsdWUgPSB0aGlzLmRpYWxvZ09yaWdpbmFsVmFsdWU7XG4gICAgdGhpcy5kaWFsb2dFZGl0b3IubXVsdGlsaW5lID0gdHJ1ZTtcbiAgICB0aGlzLmRpYWxvZ0VkaXRvci5saW5lTnVtYmVyc011bHRpbGluZSA9IHRydWU7XG4gICAgdGhpcy5kaWFsb2dFZGl0b3IuaGFzU2Nyb2xsZXIgPSB0cnVlO1xuICAgIHRoaXMuZGlhbG9nRWRpdG9yLnN0eWxlLm1pbkhlaWdodCA9IGRpYWxvZ0VkaXRvckhlaWdodDtcblxuICAgIC8vIEFwcGx5IHNhbWUgb3B0aW9ucyB0byBkaWFsb2cgZWRpdG9yXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yLmxhbmd1YWdlID0gdGhpcy5vcHRpb25zLmxhbmd1YWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5wbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IucGxhY2Vob2xkZXIgPSB0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXI7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnRhYkNvbXBsZXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IudGFiQ29tcGxldGlvbiA9IHRoaXMub3B0aW9ucy50YWJDb21wbGV0aW9uO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5lbmFibGVTZWFyY2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IuZW5hYmxlU2VhcmNoID0gdGhpcy5vcHRpb25zLmVuYWJsZVNlYXJjaDtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZW5hYmxlRm9sZEd1dHRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IuZW5hYmxlRm9sZEd1dHRlcnMgPSB0aGlzLm9wdGlvbnMuZW5hYmxlRm9sZEd1dHRlcnM7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmN1c3RvbUF1dG9Db21wbGV0aW9ucykge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IuY3VzdG9tQXV0b0NvbXBsZXRpb25zID0gdGhpcy5vcHRpb25zLmN1c3RvbUF1dG9Db21wbGV0aW9ucztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY3VzdG9tQ29tcGxldGlvbnNQYXRocykge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IuY3VzdG9tQ29tcGxldGlvbnNQYXRocyA9IHRoaXMub3B0aW9ucy5jdXN0b21Db21wbGV0aW9uc1BhdGhzO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zPy5jdXN0b21UaGVtZUNTUykge1xuICAgICAgdGhpcy5kaWFsb2dFZGl0b3IuY3VzdG9tVGhlbWVDU1MgPSB0aGlzLm9wdGlvbnMuY3VzdG9tVGhlbWVDU1M7XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dFZGl0b3IuZXhwYW5kYWJsZSA9IGZhbHNlO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBkaWFsb2cgY3VycmVudCB2YWx1ZVxuICAgIHRoaXMuZGlhbG9nQ3VycmVudFZhbHVlID0gdGhpcy5kaWFsb2dPcmlnaW5hbFZhbHVlO1xuXG4gICAgLy8gVHJhY2sgY2hhbmdlcyBpbiBkaWFsb2cgZWRpdG9yXG4gICAgdGhpcy5kaWFsb2dFZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCAoZTogQ3VzdG9tRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuZGlhbG9nQ3VycmVudFZhbHVlID0gZS5kZXRhaWw/LnZhbHVlID8/ICcnO1xuICAgIH0pO1xuXG4gICAgY29udGVudC5hcHBlbmRDaGlsZCh0aGlzLmRpYWxvZ0VkaXRvcik7XG4gICAgY29udGVudFdyYXBwZXIuYXBwZW5kQ2hpbGQoY29udGVudCk7XG5cbiAgICAvLyBDcmVhdGUgZm9vdGVyIHdpdGggT2sgYnV0dG9uIC0gZml4ZWQgYXQgYm90dG9tXG4gICAgY29uc3QgZm9vdGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZm9vdGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgZm9vdGVyLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2ZsZXgtZW5kJztcbiAgICBmb290ZXIuc3R5bGUucGFkZGluZyA9ICcxMnB4IDE2cHgnO1xuICAgIGZvb3Rlci5zdHlsZS5ib3JkZXJUb3AgPSAnMXB4IHNvbGlkIHZhcigtLW5pbGUtY29sb3ItbmV1dHJhbC0yMDAsICNlNWU3ZWIpJztcbiAgICBmb290ZXIuc3R5bGUuZ2FwID0gJzhweCc7XG4gICAgZm9vdGVyLnN0eWxlLmZsZXhTaHJpbmsgPSAnMCc7IC8vIFByZXZlbnQgZm9vdGVyIGZyb20gc2hyaW5raW5nXG4gICAgZm9vdGVyLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd2YXIoLS1uaWxlLWNvbG9yLW5ldXRyYWwtMCwgI2ZmZmZmZiknO1xuXG4gICAgY29uc3Qgb2tCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWJ1dHRvbicpO1xuICAgIG9rQnV0dG9uLnNldEF0dHJpYnV0ZSgndmFyaWFudCcsICdwcmltYXJ5Jyk7XG4gICAgb2tCdXR0b24udGV4dENvbnRlbnQgPSAnT2snO1xuICAgIG9rQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5hcHBseURpYWxvZ0NoYW5nZXMoKTtcbiAgICB9KTtcblxuICAgIGZvb3Rlci5hcHBlbmRDaGlsZChva0J1dHRvbik7XG4gICAgY29udGVudFdyYXBwZXIuYXBwZW5kQ2hpbGQoZm9vdGVyKTtcblxuICAgIHRoaXMuZGlhbG9nLmFwcGVuZENoaWxkKGNvbnRlbnRXcmFwcGVyKTtcblxuICAgIC8vIEhhbmRsZSBkaWFsb2cgY2xvc2UgZXZlbnRzIChjbGlja2luZyBYIGJ1dHRvbiAtIGNhbmNlbCBjaGFuZ2VzKVxuICAgIHRoaXMuZGlhbG9nLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtcmVxdWVzdC1jbG9zZScsIChlOiBFdmVudCkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgLy8gWCBidXR0b24gb3Igb3ZlcmxheSBjbGljayAtIGNhbmNlbCBjaGFuZ2VzXG4gICAgICB0aGlzLmNhbmNlbERpYWxvZ0NoYW5nZXMoKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBFc2NhcGUga2V5IGluIGRpYWxvZyAtIGNhbmNlbCBjaGFuZ2VzXG4gICAgdGhpcy5kaWFsb2cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5jYW5jZWxEaWFsb2dDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBcHBlbmQgdG8gYm9keSBhbmQgc2hvd1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kaWFsb2cpO1xuICAgIFxuICAgIC8vIE9wZW4gZGlhbG9nIGFmdGVyIGEgdGljayB0byBlbnN1cmUgaXQncyBpbiB0aGUgRE9NXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaWFsb2cpIHtcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbiA9IHRydWU7XG4gICAgICAgIC8vIEZvY3VzIHRoZSBkaWFsb2cgZWRpdG9yXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlhbG9nRWRpdG9yPy5mb2N1cygpO1xuICAgICAgICB9LCAxMDApO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB2YWx1ZSBmcm9tIHRoZSBkaWFsb2cgZWRpdG9yXG4gICAqL1xuICBwcml2YXRlIGdldERpYWxvZ0VkaXRvclZhbHVlKCk6IHN0cmluZyB7XG4gICAgLy8gVXNlIHRyYWNrZWQgdmFsdWUgZnJvbSBjaGFuZ2UgZXZlbnRzIChtb3N0IHJlbGlhYmxlKVxuICAgIGlmICh0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaWFsb2dDdXJyZW50VmFsdWUucmVwbGFjZSgvXFxuKyQvLCAnJyk7XG4gICAgfVxuICAgIFxuICAgIGlmICghdGhpcy5kaWFsb2dFZGl0b3IpIHJldHVybiB0aGlzLmRpYWxvZ09yaWdpbmFsVmFsdWU7XG4gICAgXG4gICAgLy8gVHJ5IHRvIGdldCB2YWx1ZSBmcm9tIENvZGVNaXJyb3IncyBpbnRlcm5hbCBzdGF0ZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaGFkb3dSb290ID0gdGhpcy5kaWFsb2dFZGl0b3Iuc2hhZG93Um9vdDtcbiAgICAgIGlmIChzaGFkb3dSb290KSB7XG4gICAgICAgIGNvbnN0IGNtRWRpdG9yID0gc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcuY20tZWRpdG9yJykgYXMgYW55O1xuICAgICAgICBpZiAoY21FZGl0b3I/LmNtVmlldz8udmlldykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY21FZGl0b3IuY21WaWV3LnZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xcbiskLywgJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGYWxsIHRocm91Z2ggdG8gb3RoZXIgbWV0aG9kc1xuICAgIH1cbiAgICBcbiAgICAvLyBGYWxsYmFjayB0byB2YWx1ZSBwcm9wZXJ0eVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kaWFsb2dFZGl0b3IudmFsdWU7XG4gICAgcmV0dXJuICh2YWx1ZSA/PyAnJykucmVwbGFjZSgvXFxuKyQvLCAnJyk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgY2hhbmdlcyBmcm9tIGRpYWxvZyBhbmQgY2xvc2UgaXRcbiAgICovXG4gIHByaXZhdGUgYXBwbHlEaWFsb2dDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaWFsb2dPcGVuKSByZXR1cm47XG5cbiAgICAvLyBBbHdheXMgcmVhZCBsaXZlIGRpYWxvZyBlZGl0b3Igc3RhdGUgdG8gYXZvaWQgc3RhbGUgdHJhY2tlZCB2YWx1ZXMgZnJvbSBkZWJvdW5jZWQgdXBkYXRlc1xuICAgIGxldCBkaWFsb2dWYWx1ZSA9IHRoaXMuZGlhbG9nQ3VycmVudFZhbHVlO1xuICAgIGlmICh0aGlzLmRpYWxvZ0VkaXRvcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IHRoaXMuZGlhbG9nRWRpdG9yLnNoYWRvd1Jvb3Q7XG4gICAgICAgIGlmIChzaGFkb3dSb290KSB7XG4gICAgICAgICAgY29uc3QgY21FZGl0b3IgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5jbS1lZGl0b3InKSBhcyBhbnk7XG4gICAgICAgICAgaWYgKGNtRWRpdG9yPy5jbVZpZXc/LnZpZXcpIHtcbiAgICAgICAgICAgIGRpYWxvZ1ZhbHVlID0gY21FZGl0b3IuY21WaWV3LnZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjayB0byB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgaWYgKGRpYWxvZ1ZhbHVlID09PSBudWxsIHx8IGRpYWxvZ1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGlhbG9nVmFsdWUgPSB0aGlzLmRpYWxvZ0VkaXRvci52YWx1ZSA/PyAnJztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gU3RyaXAgdHJhaWxpbmcgbmV3bGluZXNcbiAgICBkaWFsb2dWYWx1ZSA9IChkaWFsb2dWYWx1ZSA/PyAnJykucmVwbGFjZSgvXFxuKyQvLCAnJyk7XG4gICAgXG4gICAgLy8gVXBkYXRlIHRyYWNrZWQgdmFsdWUgYW5kIGlubGluZSBlZGl0b3JcbiAgICB0aGlzLnRyYWNrZWRWYWx1ZSA9IGRpYWxvZ1ZhbHVlO1xuICAgIHRoaXMudXNlckVkaXRlZElubGluZSA9IGZhbHNlO1xuICAgIFxuICAgIHRoaXMuc3luY2luZ0Zyb21EaWFsb2cgPSB0cnVlO1xuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3IudmFsdWUgPSBkaWFsb2dWYWx1ZTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN5bmNpbmdGcm9tRGlhbG9nID0gZmFsc2U7XG4gICAgfSwgMCk7XG4gICAgXG4gICAgLy8gTm90aWZ5IGNvbnRleHQgb2YgdGhlIGNoYW5nZVxuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5vbkNoYW5nZShkaWFsb2dWYWx1ZSBhcyB1bmtub3duIGFzIFQpO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGRpYWxvZ1xuICAgIHRoaXMuY2xvc2VEaWFsb2dVSSgpO1xuICAgIFxuICAgIC8vIFJlZm9jdXMgdGhlIGNlbGwgZWRpdG9yIHRvIHN0YXkgaW4gZWRpdCBtb2RlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzRWRpdG9yKCk7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCBkaWFsb2cgY2hhbmdlcyBhbmQgcmV2ZXJ0IHRvIG9yaWdpbmFsIHZhbHVlXG4gICAqL1xuICBwcml2YXRlIGNhbmNlbERpYWxvZ0NoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpYWxvZ09wZW4pIHJldHVybjtcblxuICAgIC8vIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZSAoZG9uJ3QgY2hhbmdlIGFueXRoaW5nKVxuICAgIC8vIHRyYWNrZWRWYWx1ZSBhbmQgaW5saW5lIGVkaXRvciByZW1haW4gYXMgdGhleSB3ZXJlIGJlZm9yZSBkaWFsb2cgb3BlbmVkXG5cbiAgICAvLyBDbG9zZSBkaWFsb2dcbiAgICB0aGlzLmNsb3NlRGlhbG9nVUkoKTtcbiAgICBcbiAgICAvLyBSZWZvY3VzIHRoZSBjZWxsIGVkaXRvciB0byBzdGF5IGluIGVkaXQgbW9kZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhbmQgcmVtb3ZlIHRoZSBkaWFsb2cgVUlcbiAgICovXG4gIHByaXZhdGUgY2xvc2VEaWFsb2dVSSgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmRpYWxvZ0N1cnJlbnRWYWx1ZSA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5kaWFsb2cpIHtcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4gPSBmYWxzZTtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nO1xuICAgICAgdGhpcy5kaWFsb2cgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRpYWxvZ0VkaXRvciA9IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgLy8gUmVtb3ZlIGZyb20gRE9NIGFmdGVyIGFuaW1hdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRpYWxvZ1JlZj8ucmVtb3ZlKCk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSBOaWxlQ29kZUVkaXRvciBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGFwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG5cbiAgICAvLyBMYW5ndWFnZSBhbmQgc3ludGF4XG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubGFuZ3VhZ2UpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmxhbmd1YWdlID0gdGhpcy5vcHRpb25zLmxhbmd1YWdlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRpc2FibGVTeW50YXhIaWdobGlnaHRpbmcpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRpc2FibGVTeW50YXhIaWdobGlnaHRpbmcgPSB0aGlzLm9wdGlvbnMuZGlzYWJsZVN5bnRheEhpZ2hsaWdodGluZztcbiAgICB9XG5cbiAgICAvLyBFZGl0b3IgYXBwZWFyYW5jZVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmVkaXRvci5wbGFjZWhvbGRlciA9IHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5saW5lTnVtYmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5saW5lTnVtYmVycyA9IHRoaXMub3B0aW9ucy5saW5lTnVtYmVycztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5saW5lTnVtYmVyc011bHRpbGluZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5saW5lTnVtYmVyc011bHRpbGluZSA9IHRoaXMub3B0aW9ucy5saW5lTnVtYmVyc011bHRpbGluZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5tdWx0aWxpbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IubXVsdGlsaW5lID0gdGhpcy5vcHRpb25zLm11bHRpbGluZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5kZWZhdWx0Rm9udCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZWZhdWx0Rm9udCA9IHRoaXMub3B0aW9ucy5kZWZhdWx0Rm9udDtcbiAgICB9XG5cbiAgICAvLyBFZGl0b3IgYmVoYXZpb3JcbiAgICBpZiAodGhpcy5vcHRpb25zPy5yZWFkb25seSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5yZWFkb25seSA9IHRoaXMub3B0aW9ucy5yZWFkb25seTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5kaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5kaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy50YWJDb21wbGV0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnRhYkNvbXBsZXRpb24gPSB0aGlzLm9wdGlvbnMudGFiQ29tcGxldGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5lbmFibGVTZWFyY2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuZW5hYmxlU2VhcmNoID0gdGhpcy5vcHRpb25zLmVuYWJsZVNlYXJjaDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5lbmFibGVGb2xkR3V0dGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5lbmFibGVGb2xkR3V0dGVycyA9IHRoaXMub3B0aW9ucy5lbmFibGVGb2xkR3V0dGVycztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5oYXNTY3JvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5oYXNTY3JvbGxlciA9IHRoaXMub3B0aW9ucy5oYXNTY3JvbGxlcjtcbiAgICB9XG5cbiAgICAvLyBFeHBhbmRhYmxlIC0gZGVmYXVsdCB0byBmYWxzZSBmb3IgY2VsbCBlZGl0aW5nXG4gICAgdGhpcy5lZGl0b3IuZXhwYW5kYWJsZSA9IHRoaXMub3B0aW9ucz8uZXhwYW5kYWJsZSA/PyBmYWxzZTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmV4cGFuZEljb24pIHtcbiAgICAgIHRoaXMuZWRpdG9yLmV4cGFuZEljb24gPSB0aGlzLm9wdGlvbnMuZXhwYW5kSWNvbjtcbiAgICB9XG5cbiAgICAvLyBBdXRvY29tcGxldGlvblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmN1c3RvbUF1dG9Db21wbGV0aW9ucykge1xuICAgICAgdGhpcy5lZGl0b3IuY3VzdG9tQXV0b0NvbXBsZXRpb25zID0gdGhpcy5vcHRpb25zLmN1c3RvbUF1dG9Db21wbGV0aW9ucztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5jdXN0b21Db21wbGV0aW9uc1BhdGhzKSB7XG4gICAgICB0aGlzLmVkaXRvci5jdXN0b21Db21wbGV0aW9uc1BhdGhzID0gdGhpcy5vcHRpb25zLmN1c3RvbUNvbXBsZXRpb25zUGF0aHM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYWxsb3dWYXJpYWJsZUluQ3VzdG9tU3VnZ2VzdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5hbGxvd1ZhcmlhYmxlSW5DdXN0b21TdWdnZXN0aW9uID0gdGhpcy5vcHRpb25zLmFsbG93VmFyaWFibGVJbkN1c3RvbVN1Z2dlc3Rpb247XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYWJvdmVDdXJzb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lZGl0b3IuYWJvdmVDdXJzb3IgPSB0aGlzLm9wdGlvbnMuYWJvdmVDdXJzb3I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYXV0b0NvbXBsZXRlU3R5bGUpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmF1dG9Db21wbGV0ZVN0eWxlID0gdGhpcy5vcHRpb25zLmF1dG9Db21wbGV0ZVN0eWxlO1xuICAgIH1cblxuICAgIC8vIENoYW5nZSBoYW5kbGluZ1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRlYm91bmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmRlYm91bmNlID0gdGhpcy5vcHRpb25zLmRlYm91bmNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRlYm91bmNlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5kZWJvdW5jZVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuZGVib3VuY2VUaW1lb3V0O1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5lcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVkaXRvci5lcnJvciA9IHRoaXMub3B0aW9ucy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmVycm9yTWVzc2FnZSA9IHRoaXMub3B0aW9ucy5lcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9tIHRoZW1lXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY3VzdG9tVGhlbWVDU1MpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmN1c3RvbVRoZW1lQ1NTID0gdGhpcy5vcHRpb25zLmN1c3RvbVRoZW1lQ1NTO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZWRpdG9yKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucz8udmFsaWRhdGVPblNhdmUgIT09IGZhbHNlO1xuXG4gICAgLy8gSGFuZGxlIGtleWJvYXJkIGV2ZW50c1xuICAgIGNvbnN0IGtleWRvd25IYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlFdmVudCA9IGUgYXMgS2V5Ym9hcmRFdmVudDtcbiAgICAgIFxuICAgICAgLy8gRm9yIHNpbmdsZS1saW5lIG1vZGUsIEVudGVyIHNhdmVzXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucz8ubXVsdGlsaW5lICYmIGtleUV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFc2NhcGUgY2FuY2Vsc1xuICAgICAgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25DYW5jZWwoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlkb3duSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICdrZXlkb3duJywgaGFuZGxlcjoga2V5ZG93bkhhbmRsZXIgfSk7XG5cbiAgICAvLyBVc2UgbmlsZS1ibHVyIGV2ZW50IGZvciBzYXZpbmcgb24gYmx1clxuICAgIGNvbnN0IGJsdXJIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgLy8gRG9uJ3Qgc2F2ZSBpZiBkaWFsb2cgaXMgb3BlblxuICAgICAgaWYgKHRoaXMuZGlhbG9nT3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERvbid0IHNhdmUgaWYgZXhwYW5kIGJ1dHRvbiB3YXMgY2xpY2tlZCAobW91c2Vkb3duIHNldHMgdGhpcyBmbGFnKVxuICAgICAgaWYgKHRoaXMuZXhwYW5kQnV0dG9uQ2xpY2tlZCkge1xuICAgICAgICAvLyBSZXNldCBmbGFnIC0gdGhlIGNsaWNrIGhhbmRsZXIgd2lsbCBvcGVuIHRoZSBkaWFsb2dcbiAgICAgICAgdGhpcy5leHBhbmRCdXR0b25DbGlja2VkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2F2ZSBhbmQgZXhpdCBlZGl0IG1vZGVcbiAgICAgIHRoaXMuc2F2ZVZhbHVlKGNvbnRleHQsIHZhbGlkYXRlT25TYXZlKTtcbiAgICB9O1xuICAgIHRoaXMuZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtYmx1cicsIGJsdXJIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtYmx1cicsIGhhbmRsZXI6IGJsdXJIYW5kbGVyIH0pO1xuXG4gICAgLy8gRG9jdW1lbnQtbGV2ZWwgbW91c2Vkb3duIGhhbmRsZXIgdG8gZGV0ZWN0IGNsaWNrcyBvdXRzaWRlIHRoZSBlZGl0b3JcbiAgICB0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIC8vIERvbid0IHByb2Nlc3MgaWYgZGlhbG9nIGlzIG9wZW4gb3IgZXhwYW5kIGJ1dHRvbiB3YXMgY2xpY2tlZFxuICAgICAgaWYgKHRoaXMuZGlhbG9nT3BlbiB8fCB0aGlzLmV4cGFuZEJ1dHRvbkNsaWNrZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgY29tcG9zZWRQYXRoIHRvIGhhbmRsZSBTaGFkb3cgRE9NIGJvdW5kYXJpZXNcbiAgICAgIGNvbnN0IHBhdGggPSBlLmNvbXBvc2VkUGF0aCgpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBhbnkgZWxlbWVudCBpbiB0aGUgcGF0aCBpcyBvdXIgd3JhcHBlciwgZWRpdG9yLCBvciBleHBhbmQgYnV0dG9uXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0aCkge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gdGhpcy53cmFwcGVyIHx8IGVsZW1lbnQgPT09IHRoaXMuZWRpdG9yIHx8IGVsZW1lbnQgPT09IHRoaXMuZXhwYW5kQnV0dG9uKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsc28gY2hlY2sgaWYgaXQncyB0aGUgY29udGFpbmVyICh0aGUgY2VsbClcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IGNvbnRleHQuY29udGFpbmVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENsaWNrIGlzIG91dHNpZGUgLSBzYXZlIGFuZCBleGl0XG4gICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgfTtcblxuICAgIC8vIEFkZCB3aXRoIGEgc21hbGwgZGVsYXkgdG8gYXZvaWQgY2FwdHVyaW5nIHRoZSBpbml0aWFsIGNsaWNrIHRoYXQgb3BlbmVkIHRoZSBlZGl0b3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuZG9jdW1lbnRDbGlja0hhbmRsZXIhLCB0cnVlKTtcbiAgICB9LCA1MCk7XG5cbiAgICAvLyBSZWFsLXRpbWUgdmFsdWUgdXBkYXRlcyB1c2luZyBuaWxlLWNoYW5nZVxuICAgIGNvbnN0IGNoYW5nZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY3VzdG9tRXZlbnQuZGV0YWlsPy52YWx1ZSA/PyAnJztcbiAgICAgIFxuICAgICAgLy8gRG9uJ3QgcHJvY2VzcyBpZiB3ZSdyZSBzeW5jaW5nIGZyb20gZGlhbG9nIChwcmV2ZW50cyBmZWVkYmFjayBsb29wKVxuICAgICAgaWYgKHRoaXMuc3luY2luZ0Zyb21EaWFsb2cpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgdHJhY2tlZCB2YWx1ZVxuICAgICAgdGhpcy50cmFja2VkVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIGNvbnRleHQub25DaGFuZ2UobmV3VmFsdWUgYXMgdW5rbm93biBhcyBUKTtcbiAgICB9O1xuICAgIHRoaXMuZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWNoYW5nZScsIGhhbmRsZXI6IGNoYW5nZUhhbmRsZXIgfSk7XG5cbiAgICAvLyBIYW5kbGUgZXhwYW5kIGV2ZW50IGlmIGV4cGFuZGFibGVcbiAgICBpZiAodGhpcy5vcHRpb25zPy5leHBhbmRhYmxlKSB7XG4gICAgICBjb25zdCBleHBhbmRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAvLyBFbWl0IGEgY3VzdG9tIGV2ZW50IHRoYXQgdGhlIHBhcmVudCBjYW4gbGlzdGVuIHRvXG4gICAgICAgIGNvbnN0IGV4cGFuZEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdzdC1jb2RlLWVkaXRvci1leHBhbmQnLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lZGl0b3I/LmRpc3BhdGNoRXZlbnQoZXhwYW5kRXZlbnQpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtZXhwYW5kJywgZXhwYW5kSGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtZXhwYW5kJywgaGFuZGxlcjogZXhwYW5kSGFuZGxlciB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB2YWx1ZSB3aXRoIG9wdGlvbmFsIHZhbGlkYXRpb25cbiAgICovXG4gIHByaXZhdGUgc2F2ZVZhbHVlKGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+LCB2YWxpZGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcblxuICAgIC8vIENvZGUgZWRpdG9yIGRvZXNuJ3QgaGF2ZSBidWlsdC1pbiB2YWxpZGF0aW9uIGxpa2UgaW5wdXRcbiAgICAvLyBCdXQgd2UgY2FuIGNoZWNrIGZvciBlcnJvciBzdGF0ZVxuICAgIGlmICh2YWxpZGF0ZSAmJiB0aGlzLm9wdGlvbnM/LmVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIGNvbnRleHQub25TYXZlKHZhbHVlKTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIGRvY3VtZW50IGNsaWNrIGhhbmRsZXJcbiAgICBpZiAodGhpcy5kb2N1bWVudENsaWNrSGFuZGxlcikge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5kb2N1bWVudENsaWNrSGFuZGxlciwgdHJ1ZSk7XG4gICAgICB0aGlzLmRvY3VtZW50Q2xpY2tIYW5kbGVyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGRpYWxvZyBpZiBvcGVuXG4gICAgaWYgKHRoaXMuZGlhbG9nT3BlbiAmJiB0aGlzLmRpYWxvZykge1xuICAgICAgdGhpcy5kaWFsb2cub3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kaWFsb2cucmVtb3ZlKCk7XG4gICAgICB0aGlzLmRpYWxvZyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGlhbG9nRWRpdG9yID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kaWFsb2dPcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yPy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuXG4gICAgICB0aGlzLmVkaXRvci5yZW1vdmUoKTtcbiAgICAgIHRoaXMuZWRpdG9yID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSB3cmFwcGVyIGlmIGV4aXN0c1xuICAgIGlmICh0aGlzLndyYXBwZXIpIHtcbiAgICAgIHRoaXMud3JhcHBlci5yZW1vdmUoKTtcbiAgICAgIHRoaXMud3JhcHBlciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDbGVhciBleHBhbmQgYnV0dG9uIHJlZmVyZW5jZVxuICAgIHRoaXMuZXhwYW5kQnV0dG9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmV4cGFuZEJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN5bmNpbmdGcm9tRGlhbG9nID0gZmFsc2U7XG4gICAgdGhpcy50cmFja2VkVmFsdWUgPSBudWxsO1xuICAgIHRoaXMudXNlckVkaXRlZElubGluZSA9IGZhbHNlO1xuICAgIHRoaXMuZGlhbG9nT3JpZ2luYWxWYWx1ZSA9ICcnO1xuICAgIHRoaXMuZGlhbG9nQ3VycmVudFZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yPy5mb2N1cygpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybiAnJyBhcyB1bmtub3duIGFzIFQ7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldExpdmVFZGl0b3JWYWx1ZSgpO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXG4rJC8sICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHZhbHVlIHByb2dyYW1tYXRpY2FsbHlcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICB0aGlzLmVkaXRvci52YWx1ZSA9IFN0cmluZyh2YWx1ZSA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQ29kZU1pcnJvciBpbnN0YW5jZSAoaWYgbmVlZGVkIGZvciBhZHZhbmNlZCB1c2FnZSlcbiAgICovXG4gIGdldEVkaXRvckluc3RhbmNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { OUFormatter } from './ou-formatter';
2
+ const BUILTIN_FORMATTERS = {
3
+ ouFormatter: () => new OUFormatter(),
4
+ };
5
+ const customFormatters = {};
6
+ /**
7
+ * Resolve a formatter by name. Looks up custom formatters first, then built-in.
8
+ * Returns undefined if the name is not registered.
9
+ */
10
+ export function resolveFormatter(name) {
11
+ const factory = customFormatters[name] ?? BUILTIN_FORMATTERS[name];
12
+ return factory ? factory() : undefined;
13
+ }
14
+ /**
15
+ * Register a custom formatter so it can be referenced by string name
16
+ * in column configs (e.g. `formatter: 'myFormatter'`).
17
+ */
18
+ export function registerFormatter(name, factory) {
19
+ customFormatters[name] = factory;
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGVyLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9mb3JtYXR0ZXJzL2Zvcm1hdHRlci1yZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJN0MsTUFBTSxrQkFBa0IsR0FBcUM7SUFDM0QsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksV0FBVyxFQUFFO0NBQ3JDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFxQyxFQUFFLENBQUM7QUFFOUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQVk7SUFDM0MsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsT0FBeUI7SUFDdkUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZWxsRm9ybWF0dGVyIH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT1VGb3JtYXR0ZXIgfSBmcm9tICcuL291LWZvcm1hdHRlcic7XG5cbnR5cGUgRm9ybWF0dGVyRmFjdG9yeSA9ICgpID0+IENlbGxGb3JtYXR0ZXI8YW55PjtcblxuY29uc3QgQlVJTFRJTl9GT1JNQVRURVJTOiBSZWNvcmQ8c3RyaW5nLCBGb3JtYXR0ZXJGYWN0b3J5PiA9IHtcbiAgb3VGb3JtYXR0ZXI6ICgpID0+IG5ldyBPVUZvcm1hdHRlcigpLFxufTtcblxuY29uc3QgY3VzdG9tRm9ybWF0dGVyczogUmVjb3JkPHN0cmluZywgRm9ybWF0dGVyRmFjdG9yeT4gPSB7fTtcblxuLyoqXG4gKiBSZXNvbHZlIGEgZm9ybWF0dGVyIGJ5IG5hbWUuIExvb2tzIHVwIGN1c3RvbSBmb3JtYXR0ZXJzIGZpcnN0LCB0aGVuIGJ1aWx0LWluLlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIG5hbWUgaXMgbm90IHJlZ2lzdGVyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRm9ybWF0dGVyKG5hbWU6IHN0cmluZyk6IENlbGxGb3JtYXR0ZXI8YW55PiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGZhY3RvcnkgPSBjdXN0b21Gb3JtYXR0ZXJzW25hbWVdID8/IEJVSUxUSU5fRk9STUFUVEVSU1tuYW1lXTtcbiAgcmV0dXJuIGZhY3RvcnkgPyBmYWN0b3J5KCkgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjdXN0b20gZm9ybWF0dGVyIHNvIGl0IGNhbiBiZSByZWZlcmVuY2VkIGJ5IHN0cmluZyBuYW1lXG4gKiBpbiBjb2x1bW4gY29uZmlncyAoZS5nLiBgZm9ybWF0dGVyOiAnbXlGb3JtYXR0ZXInYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZvcm1hdHRlcihuYW1lOiBzdHJpbmcsIGZhY3Rvcnk6IEZvcm1hdHRlckZhY3RvcnkpOiB2b2lkIHtcbiAgY3VzdG9tRm9ybWF0dGVyc1tuYW1lXSA9IGZhY3Rvcnk7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './ou-formatter';
2
+ export * from './formatter-registry';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2Zvcm1hdHRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9vdS1mb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtYXR0ZXItcmVnaXN0cnknO1xuIl19
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Convert an LDAP Distinguished Name (DN) string to a human-readable path.
3
+ *
4
+ * @example
5
+ * "OU=Engineering,OU=India,DC=company,DC=com"
6
+ * → "Engineering / India (company.com)"
7
+ *
8
+ * "CN=John Smith,OU=Admins,OU=Engineering,DC=company,DC=com"
9
+ * → "John Smith / Admins / Engineering (company.com)"
10
+ *
11
+ * "OU=R\\,D,OU=Teams,DC=example,DC=org"
12
+ * → "R,D / Teams (example.org)"
13
+ */
14
+ export function dnToHumanReadable(dn) {
15
+ if (!/^\s*\S/.test(dn)) {
16
+ return '';
17
+ }
18
+ const pathParts = [];
19
+ const domainParts = [];
20
+ for (const match of dn.matchAll(/(?:^|(?<!\\),)\s*(CN|OU|DC)=((?:\\.|[^,])+)/g)) {
21
+ const key = match[1];
22
+ const value = match[2]
23
+ .trim()
24
+ .replace(/\\([,\\#+<>;"=])/g, '$1');
25
+ if (/^(?:CN|OU)$/.test(key)) {
26
+ pathParts.push(value);
27
+ }
28
+ else if (/^DC$/.test(key)) {
29
+ domainParts.push(value);
30
+ }
31
+ }
32
+ const path = pathParts.join(' / ');
33
+ const domain = domainParts.join('.');
34
+ return path && domain
35
+ ? `${path} (${domain})`
36
+ : path || domain || dn;
37
+ }
38
+ /**
39
+ * Cell formatter that converts LDAP Distinguished Name (DN) strings
40
+ * into human-readable OU paths with optional domain suffix.
41
+ *
42
+ * @example
43
+ * // In column config:
44
+ * formatter: new OUFormatter()
45
+ *
46
+ * // With options:
47
+ * formatter: new OUFormatter({ separator: ' > ', showDomain: false })
48
+ *
49
+ * // Handles arrays from multiselect:
50
+ * // ['OU=Eng,DC=co,DC=com', 'OU=HR,DC=co,DC=com'] → "Eng (co.com), HR (co.com)"
51
+ */
52
+ export class OUFormatter {
53
+ constructor(options) {
54
+ this.options = options;
55
+ }
56
+ format(value) {
57
+ if (Array.isArray(value)) {
58
+ return value
59
+ .map(v => this.formatSingle(v))
60
+ .filter(v => !!v)
61
+ .join(this.options?.arraySeparator ?? ', ');
62
+ }
63
+ return this.formatSingle(value);
64
+ }
65
+ formatSingle(value) {
66
+ if (value === null || value === undefined || typeof value !== 'string' || !/^\s*\S/.test(value)) {
67
+ return this.options?.emptyText ?? '';
68
+ }
69
+ const separator = this.options?.separator ?? ' / ';
70
+ const showDomain = this.options?.showDomain !== false;
71
+ const pathParts = [];
72
+ const domainParts = [];
73
+ for (const match of value.matchAll(/(?:^|(?<!\\),)\s*(CN|OU|DC)=((?:\\.|[^,])+)/g)) {
74
+ const key = match[1];
75
+ const val = match[2]
76
+ .trim()
77
+ .replace(/\\([,\\#+<>;"=])/g, '$1');
78
+ if (/^(?:CN|OU)$/.test(key)) {
79
+ pathParts.push(val);
80
+ }
81
+ else if (/^DC$/.test(key)) {
82
+ domainParts.push(val);
83
+ }
84
+ }
85
+ const path = pathParts.join(separator);
86
+ const domain = domainParts.join('.');
87
+ if (path && domain && showDomain)
88
+ return `${path} (${domain})`;
89
+ if (path)
90
+ return path;
91
+ if (domain && showDomain)
92
+ return domain;
93
+ return value;
94
+ }
95
+ }
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3UtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9mb3JtYXR0ZXJzL291LWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFBVTtJQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUN0QixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsTUFBTSxTQUFTLEdBQWEsRUFBRSxDQUFDO0lBQy9CLE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQztJQUVqQyxLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsOENBQThDLENBQUMsRUFBRTtRQUMvRSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNuQixJQUFJLEVBQUU7YUFDTixPQUFPLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkI7YUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QjtLQUNGO0lBRUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXJDLE9BQU8sSUFBSSxJQUFJLE1BQU07UUFDbkIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLE1BQU0sR0FBRztRQUN2QixDQUFDLENBQUMsSUFBSSxJQUFJLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQWFEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUE2QixPQUE0QjtRQUE1QixZQUFPLEdBQVAsT0FBTyxDQUFxQjtJQUFHLENBQUM7SUFFN0QsTUFBTSxDQUFDLEtBQXdCO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLEtBQUs7aUJBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQy9GLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDO1NBQ3RDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDO1FBQ25ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxLQUFLLEtBQUssQ0FBQztRQUV0RCxNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUM7UUFDL0IsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO1FBRWpDLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyw4Q0FBOEMsQ0FBQyxFQUFFO1lBQ2xGLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNqQixJQUFJLEVBQUU7aUJBQ04sT0FBTyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBRXRDLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0IsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNyQjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdkI7U0FDRjtRQUVELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyQyxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksVUFBVTtZQUFFLE9BQU8sR0FBRyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUM7UUFDL0QsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEIsSUFBSSxNQUFNLElBQUksVUFBVTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ3hDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2VsbEZvcm1hdHRlciB9IGZyb20gJy4uL21vZGVscy9jZWxsLXN0cmF0ZWdpZXMuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBDb252ZXJ0IGFuIExEQVAgRGlzdGluZ3Vpc2hlZCBOYW1lIChETikgc3RyaW5nIHRvIGEgaHVtYW4tcmVhZGFibGUgcGF0aC5cbiAqXG4gKiBAZXhhbXBsZVxuICogXCJPVT1FbmdpbmVlcmluZyxPVT1JbmRpYSxEQz1jb21wYW55LERDPWNvbVwiXG4gKiAgIOKGkiBcIkVuZ2luZWVyaW5nIC8gSW5kaWEgKGNvbXBhbnkuY29tKVwiXG4gKlxuICogXCJDTj1Kb2huIFNtaXRoLE9VPUFkbWlucyxPVT1FbmdpbmVlcmluZyxEQz1jb21wYW55LERDPWNvbVwiXG4gKiAgIOKGkiBcIkpvaG4gU21pdGggLyBBZG1pbnMgLyBFbmdpbmVlcmluZyAoY29tcGFueS5jb20pXCJcbiAqXG4gKiBcIk9VPVJcXFxcLEQsT1U9VGVhbXMsREM9ZXhhbXBsZSxEQz1vcmdcIlxuICogICDihpIgXCJSLEQgLyBUZWFtcyAoZXhhbXBsZS5vcmcpXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRuVG9IdW1hblJlYWRhYmxlKGRuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIS9eXFxzKlxcUy8udGVzdChkbikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBwYXRoUGFydHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGRvbWFpblBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgZG4ubWF0Y2hBbGwoLyg/Ol58KD88IVxcXFwpLClcXHMqKENOfE9VfERDKT0oKD86XFxcXC58W14sXSkrKS9nKSkge1xuICAgIGNvbnN0IGtleSA9IG1hdGNoWzFdO1xuICAgIGNvbnN0IHZhbHVlID0gbWF0Y2hbMl1cbiAgICAgIC50cmltKClcbiAgICAgIC5yZXBsYWNlKC9cXFxcKFssXFxcXCMrPD47XCI9XSkvZywgJyQxJyk7XG5cbiAgICBpZiAoL14oPzpDTnxPVSkkLy50ZXN0KGtleSkpIHtcbiAgICAgIHBhdGhQYXJ0cy5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKC9eREMkLy50ZXN0KGtleSkpIHtcbiAgICAgIGRvbWFpblBhcnRzLnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBwYXRoUGFydHMuam9pbignIC8gJyk7XG4gIGNvbnN0IGRvbWFpbiA9IGRvbWFpblBhcnRzLmpvaW4oJy4nKTtcblxuICByZXR1cm4gcGF0aCAmJiBkb21haW5cbiAgICA/IGAke3BhdGh9ICgke2RvbWFpbn0pYFxuICAgIDogcGF0aCB8fCBkb21haW4gfHwgZG47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT1VGb3JtYXR0ZXJPcHRpb25zIHtcbiAgLyoqIFNlcGFyYXRvciBiZXR3ZWVuIE9VIGNvbXBvbmVudHMgKGRlZmF1bHQ6ICcgLyAnKSAqL1xuICBzZXBhcmF0b3I/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIGRvbWFpbiBzdWZmaXggZnJvbSBEQyBjb21wb25lbnRzIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93RG9tYWluPzogYm9vbGVhbjtcbiAgLyoqIEZhbGxiYWNrIHRleHQgd2hlbiB2YWx1ZSBpcyBlbXB0eSBvciBub3QgYSB2YWxpZCBETiAoZGVmYXVsdDogJycpICovXG4gIGVtcHR5VGV4dD86IHN0cmluZztcbiAgLyoqIFNlcGFyYXRvciBiZXR3ZWVuIG11bHRpcGxlIGZvcm1hdHRlZCBETnMgd2hlbiB2YWx1ZSBpcyBhbiBhcnJheSAoZGVmYXVsdDogJywgJykgKi9cbiAgYXJyYXlTZXBhcmF0b3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2VsbCBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBMREFQIERpc3Rpbmd1aXNoZWQgTmFtZSAoRE4pIHN0cmluZ3NcbiAqIGludG8gaHVtYW4tcmVhZGFibGUgT1UgcGF0aHMgd2l0aCBvcHRpb25hbCBkb21haW4gc3VmZml4LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJbiBjb2x1bW4gY29uZmlnOlxuICogZm9ybWF0dGVyOiBuZXcgT1VGb3JtYXR0ZXIoKVxuICpcbiAqIC8vIFdpdGggb3B0aW9uczpcbiAqIGZvcm1hdHRlcjogbmV3IE9VRm9ybWF0dGVyKHsgc2VwYXJhdG9yOiAnID4gJywgc2hvd0RvbWFpbjogZmFsc2UgfSlcbiAqXG4gKiAvLyBIYW5kbGVzIGFycmF5cyBmcm9tIG11bHRpc2VsZWN0OlxuICogLy8gWydPVT1FbmcsREM9Y28sREM9Y29tJywgJ09VPUhSLERDPWNvLERDPWNvbSddIOKGkiBcIkVuZyAoY28uY29tKSwgSFIgKGNvLmNvbSlcIlxuICovXG5leHBvcnQgY2xhc3MgT1VGb3JtYXR0ZXIgaW1wbGVtZW50cyBDZWxsRm9ybWF0dGVyPHN0cmluZyB8IHN0cmluZ1tdPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucz86IE9VRm9ybWF0dGVyT3B0aW9ucykge31cblxuICBmb3JtYXQodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAubWFwKHYgPT4gdGhpcy5mb3JtYXRTaW5nbGUodikpXG4gICAgICAgIC5maWx0ZXIodiA9PiAhIXYpXG4gICAgICAgIC5qb2luKHRoaXMub3B0aW9ucz8uYXJyYXlTZXBhcmF0b3IgPz8gJywgJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFNpbmdsZSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFNpbmdsZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICEvXlxccypcXFMvLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zPy5lbXB0eVRleHQgPz8gJyc7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5vcHRpb25zPy5zZXBhcmF0b3IgPz8gJyAvICc7XG4gICAgY29uc3Qgc2hvd0RvbWFpbiA9IHRoaXMub3B0aW9ucz8uc2hvd0RvbWFpbiAhPT0gZmFsc2U7XG5cbiAgICBjb25zdCBwYXRoUGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZG9tYWluUGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIHZhbHVlLm1hdGNoQWxsKC8oPzpefCg/PCFcXFxcKSwpXFxzKihDTnxPVXxEQyk9KCg/OlxcXFwufFteLF0pKykvZykpIHtcbiAgICAgIGNvbnN0IGtleSA9IG1hdGNoWzFdO1xuICAgICAgY29uc3QgdmFsID0gbWF0Y2hbMl1cbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAucmVwbGFjZSgvXFxcXChbLFxcXFwjKzw+O1wiPV0pL2csICckMScpO1xuXG4gICAgICBpZiAoL14oPzpDTnxPVSkkLy50ZXN0KGtleSkpIHtcbiAgICAgICAgcGF0aFBhcnRzLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSBpZiAoL15EQyQvLnRlc3Qoa2V5KSkge1xuICAgICAgICBkb21haW5QYXJ0cy5wdXNoKHZhbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aCA9IHBhdGhQYXJ0cy5qb2luKHNlcGFyYXRvcik7XG4gICAgY29uc3QgZG9tYWluID0gZG9tYWluUGFydHMuam9pbignLicpO1xuXG4gICAgaWYgKHBhdGggJiYgZG9tYWluICYmIHNob3dEb21haW4pIHJldHVybiBgJHtwYXRofSAoJHtkb21haW59KWA7XG4gICAgaWYgKHBhdGgpIHJldHVybiBwYXRoO1xuICAgIGlmIChkb21haW4gJiYgc2hvd0RvbWFpbikgcmV0dXJuIGRvbWFpbjtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==