@cqa-lib/cqa-ui 1.1.495 → 1.1.496
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.
|
@@ -475,15 +475,26 @@ export class MixedVariableInputComponent {
|
|
|
475
475
|
this.placeCaretAfter(chip);
|
|
476
476
|
return;
|
|
477
477
|
}
|
|
478
|
-
|
|
478
|
+
let node = range.startContainer;
|
|
479
|
+
let offset = range.startOffset;
|
|
480
|
+
// Caret may sit on the editor element (e.g. right after a pasted text node).
|
|
481
|
+
// Walk into the previous text node so we replace the trailing word instead
|
|
482
|
+
// of just inserting the chip alongside it.
|
|
479
483
|
if (node.nodeType !== Node.TEXT_NODE) {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
484
|
+
const prev = node.childNodes[offset - 1];
|
|
485
|
+
if (prev && prev.nodeType === Node.TEXT_NODE) {
|
|
486
|
+
node = prev;
|
|
487
|
+
offset = (prev.nodeValue || '').length;
|
|
488
|
+
}
|
|
489
|
+
else {
|
|
490
|
+
range.insertNode(chip);
|
|
491
|
+
this.placeCaretAfter(chip);
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
483
494
|
}
|
|
484
495
|
const text = node.nodeValue || '';
|
|
485
|
-
const before = text.slice(0,
|
|
486
|
-
const after = text.slice(
|
|
496
|
+
const before = text.slice(0, offset);
|
|
497
|
+
const after = text.slice(offset);
|
|
487
498
|
const wordMatch = before.match(VAR_PATH_TAIL_REGEX);
|
|
488
499
|
let beforeKept = wordMatch ? before.slice(0, before.length - wordMatch[1].length) : before;
|
|
489
500
|
let afterKept = after;
|
|
@@ -578,4 +589,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
578
589
|
type: HostListener,
|
|
579
590
|
args: ['document:selectionchange']
|
|
580
591
|
}] } });
|
|
581
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWQtdmFyaWFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9taXhlZC12YXJpYWJsZS1pbnB1dC9taXhlZC12YXJpYWJsZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21peGVkLXZhcmlhYmxlLWlucHV0L21peGVkLXZhcmlhYmxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBWWpNLE1BQU0sUUFBUSxHQUFHLGlFQUFpRSxDQUFDO0FBQ25GLE1BQU0sY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlELE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7QUFDckQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFTL0IsTUFBTSxPQUFPLDJCQUEyQjtJQW9CdEMsWUFDVSxHQUFzQixFQUN0QixPQUFnQztRQURoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQXJCakMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGdCQUFXLEdBQUcsWUFBWSxDQUFDO1FBQzNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQVcs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S0FBSyxDQUFDLENBQUM7UUFDdEIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7d0hBbmpCVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiw2aUJDMUJ4Qyx1eUNBaUNBOzJGRFBhLDJCQUEyQjtrQkFQdkMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2lJQUdyQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFFZ0MsU0FBUztzQkFBL0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWlHckMsV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNckMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVE5Qyx5QkFBeUI7c0JBRHhCLFlBQVk7dUJBQUMsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1peGVkU2VnbWVudCB7XG4gIHR5cGU6ICd0ZXh0JyB8ICd2YXJpYWJsZSc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWl4ZWRWYXJpYWJsZVZhbGlkaXR5IHtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGVycm9yOiBzdHJpbmcgfCBudWxsO1xufVxuXG5jb25zdCBWQVJfUEFUSCA9ICdbQS1aYS16X11bQS1aYS16MC05X10qKD86XFxcXC5bQS1aYS16X11bQS1aYS16MC05X10qfFxcXFxbXFxcXGQrXFxcXF0pKic7XG5jb25zdCBWQVJfTkFNRV9SRUdFWCA9IG5ldyBSZWdFeHAoJ14nICsgVkFSX1BBVEggKyAnJCcpO1xuY29uc3QgVkFSX1RPS0VOX1JFR0VYID0gbmV3IFJlZ0V4cCgnXFxcXCRcXFxceygnICsgVkFSX1BBVEggKyAnKVxcXFx9JywgJ2cnKTtcbmNvbnN0IFZBUl9QQVRIX1RBSUxfUkVHRVggPSBuZXcgUmVnRXhwKCcoJyArIFZBUl9QQVRIICsgJykkJyk7XG5jb25zdCBJTlZBTElEX1ZBUl9NRVNTQUdFID0gJ0ludmFsaWQgdmFyaWFibGUgbmFtZS4nO1xuY29uc3QgQkxVUl9ISURFX0RFTEFZX01TID0gMTUwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtbWl4ZWQtdmFyaWFibGUtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWl4ZWQtdmFyaWFibGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBNaXhlZFZhcmlhYmxlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSB2YWx1ZSA9ICcnO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdUZXh0IElucHV0JztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHZhbGlkaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNaXhlZFZhcmlhYmxlVmFsaWRpdHk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZWRpdG9yJywgeyBzdGF0aWM6IHRydWUgfSkgZWRpdG9yUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgc2hvd1N1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgcGVuZGluZ1dvcmQgPSAnJztcbiAgY2FuQWRkQXNWYXJpYWJsZSA9IGZhbHNlO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgc2VsZWN0aW9uUmFuZ2U6IFJhbmdlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2VsZWN0aW9uTW9kZSA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RFbWl0dGVkID0gJyc7XG4gIHByaXZhdGUgbGFzdFZhbGlkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICkge31cblxuICAvLyAtLS0tIExpZmVjeWNsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCFjaGFuZ2VzWyd2YWx1ZSddIHx8ICF0aGlzLmVkaXRvclJlZikgcmV0dXJuO1xuICAgIGNvbnN0IGluY29taW5nID0gY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgPz8gJyc7XG4gICAgaWYgKGluY29taW5nID09PSB0aGlzLmxhc3RFbWl0dGVkKSByZXR1cm47XG4gICAgdGhpcy5yZW5kZXIoaW5jb21pbmcpO1xuICAgIHRoaXMudmFsaWRhdGUoaW5jb21pbmcpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWwgPSB0aGlzLnZhbHVlIHx8ICcnO1xuICAgIHRoaXMucmVuZGVyKGluaXRpYWwpO1xuICAgIHRoaXMudmFsaWRhdGUoaW5pdGlhbCk7XG4gIH1cblxuICAvLyAtLS0tIEVkaXRvciBldmVudCBoYW5kbGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5mbGF0dGVuU3RydWN0dXJlKCk7XG4gICAgdGhpcy5zYW5pdGl6ZUNoaXBzKCk7XG4gICAgdGhpcy5hdXRvQ2hpcGlmeSgpO1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgdGhpcy5yZWZyZXNoU3VnZ2VzdGlvbigpO1xuICB9XG5cbiAgb25FZGl0b3JGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hTdWdnZXN0aW9uKCk7XG4gIH1cblxuICBvbkVkaXRvckJsdXIoKTogdm9pZCB7XG4gICAgLy8gRGVsYXkgc28gY2xpY2tzIG9uIHN1Z2dlc3Rpb24gYnV0dG9ucyByZWdpc3RlciBiZWZvcmUgd2UgaGlkZSB0aGVtLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hdXRvQ2hpcGlmeSh0cnVlKTtcbiAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICB9LCBCTFVSX0hJREVfREVMQVlfTVMpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHJldHVybjtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgaWYgKHRoaXMuc2hvd1N1Z2dlc3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJlZm9yZUNhcmV0KCk7XG4gICAgICBpZiAobm9kZSAmJiAobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0Py5jb250YWlucygnY3FhLXZhci1jaGlwJykpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLm9uSW5wdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvcGxhaW4nKSA/PyAnJztcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICB0aGlzLmluc2VydFBsYWluVGV4dEF0Q2FyZXQodGV4dCk7XG4gICAgdGhpcy5vbklucHV0KCk7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdGV4dCA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnO1xuICAgIGlmICh0ZXh0KSB7XG4gICAgICB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmluc2VydFBsYWluVGV4dEF0Q2FyZXQodGV4dCk7XG4gICAgfVxuICAgIHRoaXMub25JbnB1dCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ3N0YXJ0JywgWyckZXZlbnQnXSlcbiAgb25EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBvbkRvY3VtZW50TW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dTdWdnZXN0aW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkgcmV0dXJuO1xuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OnNlbGVjdGlvbmNoYW5nZScpXG4gIG9uRG9jdW1lbnRTZWxlY3Rpb25DaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgdGhpcy5yZWZyZXNoU3VnZ2VzdGlvbigpO1xuICB9XG5cbiAgLy8gLS0tLSBTdWdnZXN0aW9uIGFjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgYWRkQXNUZXh0KCk6IHZvaWQge1xuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBhZGRBc1ZhcmlhYmxlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5vcm1hbGl6ZUNhbmRpZGF0ZSh0aGlzLnBlbmRpbmdXb3JkIHx8ICcnKTtcbiAgICBpZiAoIW5hbWUgfHwgIVZBUl9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAmJiB0aGlzLnNlbGVjdGlvblJhbmdlKSB7XG4gICAgICBpZiAodGhpcy5yYW5nZUNyb3NzZXNDaGlwKHRoaXMuc2VsZWN0aW9uUmFuZ2UpKSB7XG4gICAgICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnNlcnRDaGlwUmVwbGFjaW5nUmFuZ2UobmFtZSwgdGhpcy5zZWxlY3Rpb25SYW5nZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5zZXJ0Q2hpcFJlcGxhY2luZ0N1cnJlbnRXb3JkKG5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmhpZGVTdWdnZXN0aW9uKCk7XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgfVxuXG4gIC8vIC0tLS0gVmFsdWUgZW1pc3Npb24gLyB2YWxpZGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBlbWl0VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RyID0gdGhpcy5zZXJpYWxpemUoKTtcbiAgICBpZiAoc3RyICE9PSB0aGlzLmxhc3RFbWl0dGVkKSB7XG4gICAgICB0aGlzLmxhc3RFbWl0dGVkID0gc3RyO1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHN0cik7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGUoc3RyKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGUoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvciA9IHRoaXMuZmluZFZhbGlkYXRpb25FcnJvcihzdHIpO1xuICAgIGNvbnN0IHZhbGlkID0gZXJyb3IgPT09IG51bGw7XG4gICAgaWYgKHRoaXMubGFzdFZhbGlkID09PSB2YWxpZCAmJiB0aGlzLmVycm9yTWVzc2FnZSA9PT0gZXJyb3IpIHJldHVybjtcbiAgICB0aGlzLmxhc3RWYWxpZCA9IHZhbGlkO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgdGhpcy52YWxpZGl0eUNoYW5nZS5lbWl0KHsgdmFsaWQsIGVycm9yIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kVmFsaWRhdGlvbkVycm9yKHN0cjogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzdHIpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGJyYWNlQm9keSA9IC9cXCRcXHsoW159XSopXFx9L2c7XG4gICAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gICAgYnJhY2VCb2R5Lmxhc3RJbmRleCA9IDA7XG4gICAgd2hpbGUgKChtID0gYnJhY2VCb2R5LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBtWzFdO1xuICAgICAgaWYgKGJvZHkgIT09IGJvZHkudHJpbSgpIHx8ICFWQVJfTkFNRV9SRUdFWC50ZXN0KGJvZHkpKSB7XG4gICAgICAgIHJldHVybiBJTlZBTElEX1ZBUl9NRVNTQUdFO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBvcGVuQ291bnQgPSAoc3RyLm1hdGNoKC9cXCRcXHsvZykgfHwgW10pLmxlbmd0aDtcbiAgICBjb25zdCBjbG9zZWRDb3VudCA9IChzdHIubWF0Y2goYnJhY2VCb2R5KSB8fCBbXSkubGVuZ3RoO1xuICAgIGlmIChvcGVuQ291bnQgPiBjbG9zZWRDb3VudCkgcmV0dXJuIElOVkFMSURfVkFSX01FU1NBR0U7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyAtLS0tIFN1Z2dlc3Rpb24gc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIHJlZnJlc2hTdWdnZXN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbEluZm8gPSB0aGlzLmdldFNlbGVjdGVkSW5mbygpO1xuICAgIGlmIChzZWxJbmZvKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVDYW5kaWRhdGUoc2VsSW5mby50ZXh0KTtcbiAgICAgIHRoaXMucGVuZGluZ1dvcmQgPSBub3JtYWxpemVkO1xuICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IHNlbEluZm8ucmFuZ2U7XG4gICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IHRydWU7XG4gICAgICB0aGlzLmNhbkFkZEFzVmFyaWFibGUgPVxuICAgICAgICAhIW5vcm1hbGl6ZWQgJiYgVkFSX05BTUVfUkVHRVgudGVzdChub3JtYWxpemVkKSAmJiAhdGhpcy5yYW5nZUNyb3NzZXNDaGlwKHNlbEluZm8ucmFuZ2UpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBudWxsO1xuICAgIGNvbnN0IHdvcmQgPSB0aGlzLmdldEN1cnJlbnRXb3JkKCk7XG4gICAgdGhpcy5wZW5kaW5nV29yZCA9IHdvcmQ7XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9ICEhd29yZDtcbiAgICB0aGlzLmNhbkFkZEFzVmFyaWFibGUgPSAhIXdvcmQgJiYgVkFSX05BTUVfUkVHRVgudGVzdCh3b3JkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZVN1Z2dlc3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNob3dTdWdnZXN0aW9uICYmICF0aGlzLnBlbmRpbmdXb3JkKSByZXR1cm47XG4gICAgdGhpcy5zaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1dvcmQgPSAnJztcbiAgICB0aGlzLmNhbkFkZEFzVmFyaWFibGUgPSBmYWxzZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ2FuZGlkYXRlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHQgPSB0ZXh0LnRyaW0oKTtcbiAgICBpZiAodC5zdGFydHNXaXRoKCckeycpICYmIHQuZW5kc1dpdGgoJ30nKSkge1xuICAgICAgdCA9IHQuc2xpY2UoMiwgLTEpLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuICAvLyAtLS0tIERPTSBzYW5pdGl6YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGZsYXR0ZW5TdHJ1Y3R1cmUoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB3cmFwcGVycyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdiwgcCcpKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGNvbnN0IHN0cmF5SW5saW5lcyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4nKSkuZmlsdGVyKFxuICAgICAgKHMpID0+ICFzLmNsYXNzTGlzdC5jb250YWlucygnY3FhLXZhci1jaGlwJykgJiYgIXMuY2xvc2VzdCgnLmNxYS12YXItY2hpcCcpLFxuICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIFsuLi53cmFwcGVycywgLi4uc3RyYXlJbmxpbmVzXSkge1xuICAgICAgaWYgKGVsLmNsb3Nlc3QoJy5jcWEtdmFyLWNoaXAnKSkgY29udGludWU7XG4gICAgICB3aGlsZSAoZWwuZmlyc3RDaGlsZCkgZWwucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGVsLmZpcnN0Q2hpbGQsIGVsKTtcbiAgICAgIGVsLnJlbW92ZSgpO1xuICAgIH1cbiAgICBjb25zdCBicnMgPSBBcnJheS5mcm9tKGVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCdicicpKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGZvciAoY29uc3QgYnIgb2YgYnJzKSB7XG4gICAgICBpZiAoYnIuY2xvc2VzdCgnLmNxYS12YXItY2hpcCcpKSBjb250aW51ZTtcbiAgICAgIGJyLnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpLCBicik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZUNoaXBzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY2hpcHMgPSBBcnJheS5mcm9tKGVkaXRvci5xdWVyeVNlbGVjdG9yQWxsKCcuY3FhLXZhci1jaGlwJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgZm9yIChjb25zdCBjaGlwIG9mIGNoaXBzKSB7XG4gICAgICBjb25zdCBuYW1lID0gKGNoaXAuZ2V0QXR0cmlidXRlKCdkYXRhLXZhcicpIHx8ICcnKS50cmltKCk7XG4gICAgICBpZiAoIW5hbWUgfHwgIVZBUl9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgY2hpcC5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpcC50ZXh0Q29udGVudCB8fCAnJyksIGNoaXApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0cnVjdHVyZUJyb2tlbiA9XG4gICAgICAgIGNoaXAuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSAhPT0gJ2ZhbHNlJyB8fFxuICAgICAgICAhY2hpcC5xdWVyeVNlbGVjdG9yKCcuY3FhLXZhci1jaGlwX19yZW1vdmUnKTtcbiAgICAgIGlmIChzdHJ1Y3R1cmVCcm9rZW4pIHtcbiAgICAgICAgY2hpcC5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQodGhpcy5idWlsZENoaXAobmFtZSksIGNoaXApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgc3RyYXkgcmVtb3ZlIGljb25zIGxlZnQgZnJvbSBwYXJ0aWFsIHVuZG8vcmVkbyBzdGF0ZXMuXG4gICAgY29uc3Qgb3JwaGFucyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jcWEtdmFyLWNoaXBfX3JlbW92ZScpKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGZvciAoY29uc3QgbyBvZiBvcnBoYW5zKSB7XG4gICAgICBpZiAoIW8uY2xvc2VzdCgnLmNxYS12YXItY2hpcCcpKSBvLnJlbW92ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLS0gQ2hpcGlmaWNhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgYXV0b0NoaXBpZnkoZm9yY2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY2FyZXRSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBsYXN0Q2hpcDogTm9kZSB8IG51bGwgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCB0biBvZiB0aGlzLmNvbGxlY3REZXNjZW5kYW50VGV4dE5vZGVzKGVkaXRvcikpIHtcbiAgICAgIGlmICghdG4ucGFyZW50Tm9kZSkgY29udGludWU7XG4gICAgICBjb25zdCB0ZXh0ID0gdG4ubm9kZVZhbHVlIHx8ICcnO1xuICAgICAgVkFSX1RPS0VOX1JFR0VYLmxhc3RJbmRleCA9IDA7XG4gICAgICBpZiAoIVZBUl9UT0tFTl9SRUdFWC50ZXN0KHRleHQpKSBjb250aW51ZTtcbiAgICAgIFZBUl9UT0tFTl9SRUdFWC5sYXN0SW5kZXggPSAwO1xuXG4gICAgICBjb25zdCBjYXJldE9mZnNldCA9XG4gICAgICAgICFmb3JjZSAmJiBjYXJldFJhbmdlICYmIGNhcmV0UmFuZ2UuY29sbGFwc2VkICYmIGNhcmV0UmFuZ2Uuc3RhcnRDb250YWluZXIgPT09IHRuXG4gICAgICAgICAgPyBjYXJldFJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgOiAtMTtcblxuICAgICAgY29uc3QgbWF0Y2hlczogQXJyYXk8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH0+ID0gW107XG4gICAgICBsZXQgbTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICAgIHdoaWxlICgobSA9IFZBUl9UT0tFTl9SRUdFWC5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IG0uaW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgbVswXS5sZW5ndGg7XG4gICAgICAgIC8vIEtlZXAgdGhlIHRva2VuIGFzIHBsYWluIHRleHQgd2hpbGUgdGhlIGNhcmV0IGlzIHN0cmljdGx5IGluc2lkZS5cbiAgICAgICAgaWYgKGNhcmV0T2Zmc2V0ID4gc3RhcnQgJiYgY2FyZXRPZmZzZXQgPCBlbmQpIGNvbnRpbnVlO1xuICAgICAgICBtYXRjaGVzLnB1c2goeyBzdGFydCwgZW5kLCBuYW1lOiBtWzFdIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFtYXRjaGVzLmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICBsZXQgY3Vyc29yID0gMDtcbiAgICAgIGZvciAoY29uc3QgbXQgb2YgbWF0Y2hlcykge1xuICAgICAgICBpZiAobXQuc3RhcnQgPiBjdXJzb3IpIHtcbiAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQuc2xpY2UoY3Vyc29yLCBtdC5zdGFydCkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlwID0gdGhpcy5idWlsZENoaXAobXQubmFtZSk7XG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoY2hpcCk7XG4gICAgICAgIGxhc3RDaGlwID0gY2hpcDtcbiAgICAgICAgY3Vyc29yID0gbXQuZW5kO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnNvciA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dC5zbGljZShjdXJzb3IpKSk7XG4gICAgICB9XG4gICAgICB0bi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnLCB0bik7XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCAmJiBsYXN0Q2hpcCkgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIobGFzdENoaXApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsZWN0RGVzY2VuZGFudFRleHROb2Rlcyhyb290OiBFbGVtZW50KTogVGV4dFtdIHtcbiAgICBjb25zdCBvdXQ6IFRleHRbXSA9IFtdO1xuICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocm9vdCwgTm9kZUZpbHRlci5TSE9XX1RFWFQsIHtcbiAgICAgIGFjY2VwdE5vZGU6IChub2RlKSA9PiB7XG4gICAgICAgIGxldCBwOiBOb2RlIHwgbnVsbCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgd2hpbGUgKHAgJiYgcCAhPT0gcm9vdCkge1xuICAgICAgICAgIGlmICgocCBhcyBFbGVtZW50KS5jbGFzc0xpc3Q/LmNvbnRhaW5zPy4oJ2NxYS12YXItY2hpcCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwID0gcC5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGxldCBuOiBOb2RlIHwgbnVsbDtcbiAgICB3aGlsZSAoKG4gPSB3YWxrZXIubmV4dE5vZGUoKSkpIG91dC5wdXNoKG4gYXMgVGV4dCk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8vIC0tLS0gUmVuZGVyIC8gc2VyaWFsaXplIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgcmVuZGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGVkaXRvci5pbm5lckhUTUwgPSAnJztcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgVkFSX1RPS0VOX1JFR0VYLmxhc3RJbmRleCA9IDA7XG4gICAgbGV0IGxhc3RJbmRleCA9IDA7XG4gICAgbGV0IG06IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gICAgd2hpbGUgKChtID0gVkFSX1RPS0VOX1JFR0VYLmV4ZWModmFsdWUpKSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG0uaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlLnNsaWNlKGxhc3RJbmRleCwgbS5pbmRleCkpKTtcbiAgICAgIH1cbiAgICAgIGVkaXRvci5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkQ2hpcChtWzFdKSk7XG4gICAgICBsYXN0SW5kZXggPSBtLmluZGV4ICsgbVswXS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChsYXN0SW5kZXggPCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGVkaXRvci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh2YWx1ZS5zbGljZShsYXN0SW5kZXgpKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGxldCBvdXQgPSAnJztcbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IE5vZGUpOiB2b2lkID0+IHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICBvdXQgKz0gKG5vZGUubm9kZVZhbHVlIHx8ICcnKS5yZXBsYWNlKC9cXHUwMGEwL2csICcgJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkgcmV0dXJuO1xuICAgICAgY29uc3QgZWwgPSBub2RlIGFzIEhUTUxFbGVtZW50O1xuICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnY3FhLXZhci1jaGlwJykpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS12YXInKSB8fCAnJztcbiAgICAgICAgaWYgKG5hbWUpIG91dCArPSAnJHsnICsgbmFtZSArICd9JztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVsLnRhZ05hbWUgPT09ICdCUicpIHtcbiAgICAgICAgb3V0ICs9ICdcXG4nO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc0Jsb2NrID0gZWwudGFnTmFtZSA9PT0gJ0RJVicgfHwgZWwudGFnTmFtZSA9PT0gJ1AnO1xuICAgICAgaWYgKGlzQmxvY2sgJiYgb3V0Lmxlbmd0aCA+IDAgJiYgIW91dC5lbmRzV2l0aCgnXFxuJykpIG91dCArPSAnXFxuJztcbiAgICAgIGVsLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKTtcbiAgICB9O1xuICAgIGVkaXRvci5jaGlsZE5vZGVzLmZvckVhY2god2Fsayk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGlwKG5hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBjaGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGNoaXAuY2xhc3NOYW1lID0gJ2NxYS12YXItY2hpcCc7XG4gICAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpO1xuICAgIGNoaXAuc2V0QXR0cmlidXRlKCdkYXRhLXZhcicsIG5hbWUpO1xuICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIGxhYmVsLmNsYXNzTmFtZSA9ICdjcWEtdmFyLWNoaXBfX2xhYmVsJztcbiAgICBsYWJlbC50ZXh0Q29udGVudCA9ICckeycgKyBuYW1lICsgJ30nO1xuICAgIGNvbnN0IHJlbW92ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICByZW1vdmUuY2xhc3NOYW1lID0gJ2NxYS12YXItY2hpcF9fcmVtb3ZlJztcbiAgICByZW1vdmUudGV4dENvbnRlbnQgPSAnw5cnO1xuICAgIHJlbW92ZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTtcbiAgICByZW1vdmUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNoaXAucmVtb3ZlKCk7XG4gICAgICB0aGlzLm9uSW5wdXQoKTtcbiAgICB9KTtcbiAgICBjaGlwLmFwcGVuZENoaWxkKGxhYmVsKTtcbiAgICBjaGlwLmFwcGVuZENoaWxkKHJlbW92ZSk7XG4gICAgcmV0dXJuIGNoaXA7XG4gIH1cblxuICAvLyAtLS0tIFNlbGVjdGlvbiAvIGNhcmV0IGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0aW9uUmFuZ2UoKTogUmFuZ2UgfCBudWxsIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwgfHwgc2VsLnJhbmdlQ291bnQgPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKCF0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZEluZm8oKTogeyB0ZXh0OiBzdHJpbmc7IHJhbmdlOiBSYW5nZSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsIHx8IHNlbC5yYW5nZUNvdW50ID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuICAgIGlmIChyYW5nZS5jb2xsYXBzZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IuY29udGFpbnMocmFuZ2Uuc3RhcnRDb250YWluZXIpIHx8ICFlZGl0b3IuY29udGFpbnMocmFuZ2UuZW5kQ29udGFpbmVyKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdGV4dCA9IHJhbmdlLnRvU3RyaW5nKCk7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4geyB0ZXh0LCByYW5nZTogcmFuZ2UuY2xvbmVSYW5nZSgpIH07XG4gIH1cblxuICBwcml2YXRlIHJhbmdlQ3Jvc3Nlc0NoaXAocmFuZ2U6IFJhbmdlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udGVudHMgPSByYW5nZS5jbG9uZUNvbnRlbnRzKCk7XG4gICAgcmV0dXJuICEhY29udGVudHMucXVlcnlTZWxlY3Rvcj8uKCcuY3FhLXZhci1jaGlwJyk7XG4gIH1cblxuICBwcml2YXRlIGdldE5vZGVCZWZvcmVDYXJldCgpOiBOb2RlIHwgbnVsbCB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UuY29sbGFwc2VkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB7IHN0YXJ0Q29udGFpbmVyLCBzdGFydE9mZnNldCB9ID0gcmFuZ2U7XG4gICAgaWYgKHN0YXJ0Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gMCkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gc3RhcnRDb250YWluZXIucHJldmlvdXNTaWJsaW5nO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tzdGFydE9mZnNldCAtIDFdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRXb3JkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgaWYgKCFyYW5nZSB8fCAhcmFuZ2UuY29sbGFwc2VkKSByZXR1cm4gJyc7XG4gICAgbGV0IG5vZGU6IE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICBsZXQgb2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zdCBwcmV2ID0gbm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgaWYgKCFwcmV2IHx8IHByZXYubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSByZXR1cm4gJyc7XG4gICAgICBub2RlID0gcHJldjtcbiAgICAgIG9mZnNldCA9IChwcmV2Lm5vZGVWYWx1ZSB8fCAnJykubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gKG5vZGUgYXMgVGV4dCkubm9kZVZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGJyYWNlT3BlbiA9IHRleHQubGFzdEluZGV4T2YoJyR7Jywgb2Zmc2V0IC0gMSk7XG4gICAgaWYgKGJyYWNlT3BlbiAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGNsb3NlSWR4ID0gdGV4dC5pbmRleE9mKCd9JywgYnJhY2VPcGVuICsgMik7XG4gICAgICBjb25zdCB0b2tlbkNsb3NlZEJlZm9yZUNhcmV0ID0gY2xvc2VJZHggIT09IC0xICYmIGNsb3NlSWR4IDwgb2Zmc2V0O1xuICAgICAgaWYgKCF0b2tlbkNsb3NlZEJlZm9yZUNhcmV0KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYnJhY2VPcGVuICsgMjtcbiAgICAgICAgY29uc3QgZW5kID0gY2xvc2VJZHggPT09IC0xID8gdGV4dC5sZW5ndGggOiBjbG9zZUlkeDtcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBvZmZzZXQpLm1hdGNoKFZBUl9QQVRIX1RBSUxfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG4gIH1cblxuICAvLyAtLS0tIENoaXAgaW5zZXJ0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGluc2VydENoaXBSZXBsYWNpbmdSYW5nZShuYW1lOiBzdHJpbmcsIHJhbmdlOiBSYW5nZSk6IHZvaWQge1xuICAgIGNvbnN0IGNoaXAgPSB0aGlzLmJ1aWxkQ2hpcChuYW1lKTtcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgIHJhbmdlLmluc2VydE5vZGUoY2hpcCk7XG4gICAgdGhpcy5zdHJpcEJyYWNlc0Fyb3VuZChjaGlwKTtcbiAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihjaGlwKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0Q2hpcFJlcGxhY2luZ0N1cnJlbnRXb3JkKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgIGNvbnN0IGNoaXAgPSB0aGlzLmJ1aWxkQ2hpcChuYW1lKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGNoaXApO1xuICAgICAgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIoY2hpcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIHJhbmdlLmluc2VydE5vZGUoY2hpcCk7XG4gICAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihjaGlwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IG5vZGUubm9kZVZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGJlZm9yZSA9IHRleHQuc2xpY2UoMCwgcmFuZ2Uuc3RhcnRPZmZzZXQpO1xuICAgIGNvbnN0IGFmdGVyID0gdGV4dC5zbGljZShyYW5nZS5zdGFydE9mZnNldCk7XG4gICAgY29uc3Qgd29yZE1hdGNoID0gYmVmb3JlLm1hdGNoKFZBUl9QQVRIX1RBSUxfUkVHRVgpO1xuICAgIGxldCBiZWZvcmVLZXB0ID0gd29yZE1hdGNoID8gYmVmb3JlLnNsaWNlKDAsIGJlZm9yZS5sZW5ndGggLSB3b3JkTWF0Y2hbMV0ubGVuZ3RoKSA6IGJlZm9yZTtcbiAgICBsZXQgYWZ0ZXJLZXB0ID0gYWZ0ZXI7XG4gICAgaWYgKGJlZm9yZUtlcHQuZW5kc1dpdGgoJyR7JykgJiYgYWZ0ZXJLZXB0LnN0YXJ0c1dpdGgoJ30nKSkge1xuICAgICAgYmVmb3JlS2VwdCA9IGJlZm9yZUtlcHQuc2xpY2UoMCwgLTIpO1xuICAgICAgYWZ0ZXJLZXB0ID0gYWZ0ZXJLZXB0LnNsaWNlKDEpO1xuICAgIH0gZWxzZSBpZiAoYmVmb3JlS2VwdC5lbmRzV2l0aCgnJHsnKSkge1xuICAgICAgYmVmb3JlS2VwdCA9IGJlZm9yZUtlcHQuc2xpY2UoMCwgLTIpO1xuICAgIH1cbiAgICBjb25zdCBmcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGlmIChiZWZvcmVLZXB0KSBmcmFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGJlZm9yZUtlcHQpKTtcbiAgICBmcmFnLmFwcGVuZENoaWxkKGNoaXApO1xuICAgIGlmIChhZnRlcktlcHQpIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYWZ0ZXJLZXB0KSk7XG4gICAgbm9kZS5wYXJlbnROb2RlIS5yZXBsYWNlQ2hpbGQoZnJhZywgbm9kZSk7XG4gICAgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIoY2hpcCk7XG4gIH1cblxuICBwcml2YXRlIHN0cmlwQnJhY2VzQXJvdW5kKGNoaXA6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJldiA9IGNoaXAucHJldmlvdXNTaWJsaW5nO1xuICAgIGNvbnN0IG5leHQgPSBjaGlwLm5leHRTaWJsaW5nO1xuICAgIGlmIChwcmV2ICYmIHByZXYubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zdCB0ID0gcHJldi5ub2RlVmFsdWUgfHwgJyc7XG4gICAgICBpZiAodC5lbmRzV2l0aCgnJHsnKSkgcHJldi5ub2RlVmFsdWUgPSB0LnNsaWNlKDAsIC0yKTtcbiAgICB9XG4gICAgaWYgKG5leHQgJiYgbmV4dC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnN0IHQgPSBuZXh0Lm5vZGVWYWx1ZSB8fCAnJztcbiAgICAgIGlmICh0LnN0YXJ0c1dpdGgoJ30nKSkgbmV4dC5ub2RlVmFsdWUgPSB0LnNsaWNlKDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0UGxhaW5UZXh0QXRDYXJldCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTtcbiAgICAgIHRoaXMucGxhY2VDYXJldEF0RW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgY29uc3Qgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpO1xuICAgIHJhbmdlLmluc2VydE5vZGUobm9kZSk7XG4gICAgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIobm9kZSk7XG4gIH1cblxuICBwcml2YXRlIHBsYWNlQ2FyZXRBZnRlcihub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsKSByZXR1cm47XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIobm9kZSk7XG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHNlbC5hZGRSYW5nZShyYW5nZSk7XG4gIH1cblxuICBwcml2YXRlIHBsYWNlQ2FyZXRBdEVuZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTtcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1taXhlZC12YXItd3JhcHBlclwiPlxuICA8ZGl2XG4gICAgI2VkaXRvclxuICAgIGNsYXNzPVwiY3FhLW1peGVkLXZhci1lZGl0b3JcIlxuICAgIHJvbGU9XCJ0ZXh0Ym94XCJcbiAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgIFthdHRyLmNvbnRlbnRlZGl0YWJsZV09XCIhZGlzYWJsZWRcIlxuICAgIFthdHRyLmRhdGEtcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJlcnJvck1lc3NhZ2UgPyAndHJ1ZScgOiBudWxsXCJcbiAgICBbY2xhc3MuY3FhLW1peGVkLXZhci1lZGl0b3ItLWludmFsaWRdPVwiZXJyb3JNZXNzYWdlXCJcbiAgICAoaW5wdXQpPVwib25JbnB1dCgpXCJcbiAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgKGZvY3VzKT1cIm9uRWRpdG9yRm9jdXMoKVwiXG4gICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuICAgIChibHVyKT1cIm9uRWRpdG9yQmx1cigpXCI+XG4gIDwvZGl2PlxuICA8cCAqbmdJZj1cImVycm9yTWVzc2FnZVwiIGNsYXNzPVwiY3FhLW1peGVkLXZhci1lcnJvclwiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cblxuICA8ZGl2XG4gICAgKm5nSWY9XCJzaG93U3VnZ2VzdGlvblwiXG4gICAgY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLXN1Z2dlc3RcIlxuICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNxYS1taXhlZC12YXItc3VnZ2VzdF9faXRlbVwiIChjbGljayk9XCJhZGRBc1RleHQoKVwiPlxuICAgICAgQWRkIGFzIFRleHQgPHNwYW4gKm5nSWY9XCJwZW5kaW5nV29yZFwiIGNsYXNzPVwiY3FhLW1peGVkLXZhci1zdWdnZXN0X19oaW50XCI+XCJ7eyBwZW5kaW5nV29yZCB9fVwiPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gKm5nSWY9XCJjYW5BZGRBc1ZhcmlhYmxlXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNxYS1taXhlZC12YXItc3VnZ2VzdF9faXRlbSBjcWEtbWl4ZWQtdmFyLXN1Z2dlc3RfX2l0ZW0tLXByaW1hcnlcIlxuICAgICAgKGNsaWNrKT1cImFkZEFzVmFyaWFibGUoKVwiPlxuICAgICAgQWRkIGFzIGxvY2FsIHZhcmlhYmxlIDxzcGFuIGNsYXNzPVwiY3FhLW1peGVkLXZhci1zdWdnZXN0X19oaW50XCI+JHt7ICd7JyB9fXt7IHBlbmRpbmdXb3JkIH19e3sgJ30nIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
592
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4ZWQtdmFyaWFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9taXhlZC12YXJpYWJsZS1pbnB1dC9taXhlZC12YXJpYWJsZS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL21peGVkLXZhcmlhYmxlLWlucHV0L21peGVkLXZhcmlhYmxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBWWpNLE1BQU0sUUFBUSxHQUFHLGlFQUFpRSxDQUFDO0FBQ25GLE1BQU0sY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkUsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlELE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7QUFDckQsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUM7QUFTL0IsTUFBTSxPQUFPLDJCQUEyQjtJQW9CdEMsWUFDVSxHQUFzQixFQUN0QixPQUFnQztRQURoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQXJCakMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUNYLGdCQUFXLEdBQUcsWUFBWSxDQUFDO1FBQzNCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQVcs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ZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWl4ZWRTZWdtZW50IHtcbiAgdHlwZTogJ3RleHQnIHwgJ3ZhcmlhYmxlJztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNaXhlZFZhcmlhYmxlVmFsaWRpdHkge1xuICB2YWxpZDogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG59XG5cbmNvbnN0IFZBUl9QQVRIID0gJ1tBLVphLXpfXVtBLVphLXowLTlfXSooPzpcXFxcLltBLVphLXpfXVtBLVphLXowLTlfXSp8XFxcXFtcXFxcZCtcXFxcXSkqJztcbmNvbnN0IFZBUl9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXicgKyBWQVJfUEFUSCArICckJyk7XG5jb25zdCBWQVJfVE9LRU5fUkVHRVggPSBuZXcgUmVnRXhwKCdcXFxcJFxcXFx7KCcgKyBWQVJfUEFUSCArICcpXFxcXH0nLCAnZycpO1xuY29uc3QgVkFSX1BBVEhfVEFJTF9SRUdFWCA9IG5ldyBSZWdFeHAoJygnICsgVkFSX1BBVEggKyAnKSQnKTtcbmNvbnN0IElOVkFMSURfVkFSX01FU1NBR0UgPSAnSW52YWxpZCB2YXJpYWJsZSBuYW1lLic7XG5jb25zdCBCTFVSX0hJREVfREVMQVlfTVMgPSAxNTA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1taXhlZC12YXJpYWJsZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9taXhlZC12YXJpYWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIE1peGVkVmFyaWFibGVJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1RleHQgSW5wdXQnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgdmFsaWRpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1peGVkVmFyaWFibGVWYWxpZGl0eT4oKTtcblxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBlZGl0b3JSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBzaG93U3VnZ2VzdGlvbiA9IGZhbHNlO1xuICBwZW5kaW5nV29yZCA9ICcnO1xuICBjYW5BZGRBc1ZhcmlhYmxlID0gZmFsc2U7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25SYW5nZTogUmFuZ2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWQgPSAnJztcbiAgcHJpdmF0ZSBsYXN0VmFsaWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgKSB7fVxuXG4gIC8vIC0tLS0gTGlmZWN5Y2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIWNoYW5nZXNbJ3ZhbHVlJ10gfHwgIXRoaXMuZWRpdG9yUmVmKSByZXR1cm47XG4gICAgY29uc3QgaW5jb21pbmcgPSBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA/PyAnJztcbiAgICBpZiAoaW5jb21pbmcgPT09IHRoaXMubGFzdEVtaXR0ZWQpIHJldHVybjtcbiAgICB0aGlzLnJlbmRlcihpbmNvbWluZyk7XG4gICAgdGhpcy52YWxpZGF0ZShpbmNvbWluZyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgaW5pdGlhbCA9IHRoaXMudmFsdWUgfHwgJyc7XG4gICAgdGhpcy5yZW5kZXIoaW5pdGlhbCk7XG4gICAgdGhpcy52YWxpZGF0ZShpbml0aWFsKTtcbiAgfVxuXG4gIC8vIC0tLS0gRWRpdG9yIGV2ZW50IGhhbmRsZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLmZsYXR0ZW5TdHJ1Y3R1cmUoKTtcbiAgICB0aGlzLnNhbml0aXplQ2hpcHMoKTtcbiAgICB0aGlzLmF1dG9DaGlwaWZ5KCk7XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICB0aGlzLnJlZnJlc2hTdWdnZXN0aW9uKCk7XG4gIH1cblxuICBvbkVkaXRvckZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaFN1Z2dlc3Rpb24oKTtcbiAgfVxuXG4gIG9uRWRpdG9yQmx1cigpOiB2b2lkIHtcbiAgICAvLyBEZWxheSBzbyBjbGlja3Mgb24gc3VnZ2VzdGlvbiBidXR0b25zIHJlZ2lzdGVyIGJlZm9yZSB3ZSBoaWRlIHRoZW0uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmF1dG9DaGlwaWZ5KHRydWUpO1xuICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgIH0sIEJMVVJfSElERV9ERUxBWV9NUyk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykgcmV0dXJuO1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBpZiAodGhpcy5zaG93U3VnZ2VzdGlvbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmhpZGVTdWdnZXN0aW9uKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQmVmb3JlQ2FyZXQoKTtcbiAgICAgIGlmIChub2RlICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdjcWEtdmFyLWNoaXAnKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAobm9kZSBhcyBIVE1MRWxlbWVudCkucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMub25JbnB1dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpID8/ICcnO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIHRoaXMuaW5zZXJ0UGxhaW5UZXh0QXRDYXJldCh0ZXh0KTtcbiAgICB0aGlzLm9uSW5wdXQoKTtcbiAgfVxuXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0ZXh0ID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5nZXREYXRhKCd0ZXh0L3BsYWluJykgPz8gJyc7XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuaW5zZXJ0UGxhaW5UZXh0QXRDYXJldCh0ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5vbklucHV0KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkcmFnc3RhcnQnLCBbJyRldmVudCddKVxuICBvbkRyYWdTdGFydChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd1N1Z2dlc3Rpb24pIHJldHVybjtcbiAgICBpZiAodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSByZXR1cm47XG4gICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6c2VsZWN0aW9uY2hhbmdlJylcbiAgb25Eb2N1bWVudFNlbGVjdGlvbkNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcbiAgICB0aGlzLnJlZnJlc2hTdWdnZXN0aW9uKCk7XG4gIH1cblxuICAvLyAtLS0tIFN1Z2dlc3Rpb24gYWN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBhZGRBc1RleHQoKTogdm9pZCB7XG4gICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIGFkZEFzVmFyaWFibGUoKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMubm9ybWFsaXplQ2FuZGlkYXRlKHRoaXMucGVuZGluZ1dvcmQgfHwgJycpO1xuICAgIGlmICghbmFtZSB8fCAhVkFSX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgIGlmICh0aGlzLnJhbmdlQ3Jvc3Nlc0NoaXAodGhpcy5zZWxlY3Rpb25SYW5nZSkpIHtcbiAgICAgICAgdGhpcy5oaWRlU3VnZ2VzdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmluc2VydENoaXBSZXBsYWNpbmdSYW5nZShuYW1lLCB0aGlzLnNlbGVjdGlvblJhbmdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnNlcnRDaGlwUmVwbGFjaW5nQ3VycmVudFdvcmQobmFtZSk7XG4gICAgfVxuICAgIHRoaXMuaGlkZVN1Z2dlc3Rpb24oKTtcbiAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICB9XG5cbiAgLy8gLS0tLSBWYWx1ZSBlbWlzc2lvbiAvIHZhbGlkYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwcml2YXRlIGVtaXRWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdHIgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIGlmIChzdHIgIT09IHRoaXMubGFzdEVtaXR0ZWQpIHtcbiAgICAgIHRoaXMubGFzdEVtaXR0ZWQgPSBzdHI7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoc3RyKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZShzdHIpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZShzdHI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yID0gdGhpcy5maW5kVmFsaWRhdGlvbkVycm9yKHN0cik7XG4gICAgY29uc3QgdmFsaWQgPSBlcnJvciA9PT0gbnVsbDtcbiAgICBpZiAodGhpcy5sYXN0VmFsaWQgPT09IHZhbGlkICYmIHRoaXMuZXJyb3JNZXNzYWdlID09PSBlcnJvcikgcmV0dXJuO1xuICAgIHRoaXMubGFzdFZhbGlkID0gdmFsaWQ7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICB0aGlzLnZhbGlkaXR5Q2hhbmdlLmVtaXQoeyB2YWxpZCwgZXJyb3IgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRWYWxpZGF0aW9uRXJyb3Ioc3RyOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXN0cikgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYnJhY2VCb2R5ID0gL1xcJFxceyhbXn1dKilcXH0vZztcbiAgICBsZXQgbTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICBicmFjZUJvZHkubGFzdEluZGV4ID0gMDtcbiAgICB3aGlsZSAoKG0gPSBicmFjZUJvZHkuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgYm9keSA9IG1bMV07XG4gICAgICBpZiAoYm9keSAhPT0gYm9keS50cmltKCkgfHwgIVZBUl9OQU1FX1JFR0VYLnRlc3QoYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIElOVkFMSURfVkFSX01FU1NBR0U7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9wZW5Db3VudCA9IChzdHIubWF0Y2goL1xcJFxcey9nKSB8fCBbXSkubGVuZ3RoO1xuICAgIGNvbnN0IGNsb3NlZENvdW50ID0gKHN0ci5tYXRjaChicmFjZUJvZHkpIHx8IFtdKS5sZW5ndGg7XG4gICAgaWYgKG9wZW5Db3VudCA+IGNsb3NlZENvdW50KSByZXR1cm4gSU5WQUxJRF9WQVJfTUVTU0FHRTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIC0tLS0gU3VnZ2VzdGlvbiBzdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgcmVmcmVzaFN1Z2dlc3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsSW5mbyA9IHRoaXMuZ2V0U2VsZWN0ZWRJbmZvKCk7XG4gICAgaWYgKHNlbEluZm8pIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZUNhbmRpZGF0ZShzZWxJbmZvLnRleHQpO1xuICAgICAgdGhpcy5wZW5kaW5nV29yZCA9IG5vcm1hbGl6ZWQ7XG4gICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gc2VsSW5mby5yYW5nZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSA9IHRydWU7XG4gICAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2FuQWRkQXNWYXJpYWJsZSA9XG4gICAgICAgICEhbm9ybWFsaXplZCAmJiBWQVJfTkFNRV9SRUdFWC50ZXN0KG5vcm1hbGl6ZWQpICYmICF0aGlzLnJhbmdlQ3Jvc3Nlc0NoaXAoc2VsSW5mby5yYW5nZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IG51bGw7XG4gICAgY29uc3Qgd29yZCA9IHRoaXMuZ2V0Q3VycmVudFdvcmQoKTtcbiAgICB0aGlzLnBlbmRpbmdXb3JkID0gd29yZDtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gISF3b3JkO1xuICAgIHRoaXMuY2FuQWRkQXNWYXJpYWJsZSA9ICEhd29yZCAmJiBWQVJfTkFNRV9SRUdFWC50ZXN0KHdvcmQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlU3VnZ2VzdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2hvd1N1Z2dlc3Rpb24gJiYgIXRoaXMucGVuZGluZ1dvcmQpIHJldHVybjtcbiAgICB0aGlzLnNob3dTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nV29yZCA9ICcnO1xuICAgIHRoaXMuY2FuQWRkQXNWYXJpYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDYW5kaWRhdGUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdCA9IHRleHQudHJpbSgpO1xuICAgIGlmICh0LnN0YXJ0c1dpdGgoJyR7JykgJiYgdC5lbmRzV2l0aCgnfScpKSB7XG4gICAgICB0ID0gdC5zbGljZSgyLCAtMSkudHJpbSgpO1xuICAgIH1cbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIC8vIC0tLS0gRE9NIHNhbml0aXphdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgZmxhdHRlblN0cnVjdHVyZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHdyYXBwZXJzID0gQXJyYXkuZnJvbShlZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnZGl2LCBwJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgY29uc3Qgc3RyYXlJbmxpbmVzID0gQXJyYXkuZnJvbShlZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnc3BhbicpKS5maWx0ZXIoXG4gICAgICAocykgPT4gIXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcWEtdmFyLWNoaXAnKSAmJiAhcy5jbG9zZXN0KCcuY3FhLXZhci1jaGlwJyksXG4gICAgKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgIGZvciAoY29uc3QgZWwgb2YgWy4uLndyYXBwZXJzLCAuLi5zdHJheUlubGluZXNdKSB7XG4gICAgICBpZiAoZWwuY2xvc2VzdCgnLmNxYS12YXItY2hpcCcpKSBjb250aW51ZTtcbiAgICAgIHdoaWxlIChlbC5maXJzdENoaWxkKSBlbC5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoZWwuZmlyc3RDaGlsZCwgZWwpO1xuICAgICAgZWwucmVtb3ZlKCk7XG4gICAgfVxuICAgIGNvbnN0IGJycyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJ2JyJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgZm9yIChjb25zdCBiciBvZiBicnMpIHtcbiAgICAgIGlmIChici5jbG9zZXN0KCcuY3FhLXZhci1jaGlwJykpIGNvbnRpbnVlO1xuICAgICAgYnIucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyksIGJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXplQ2hpcHMoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjaGlwcyA9IEFycmF5LmZyb20oZWRpdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jcWEtdmFyLWNoaXAnKSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBmb3IgKGNvbnN0IGNoaXAgb2YgY2hpcHMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSAoY2hpcC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFyJykgfHwgJycpLnRyaW0oKTtcbiAgICAgIGlmICghbmFtZSB8fCAhVkFSX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBjaGlwLnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlwLnRleHRDb250ZW50IHx8ICcnKSwgY2hpcCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RydWN0dXJlQnJva2VuID1cbiAgICAgICAgY2hpcC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpICE9PSAnZmFsc2UnIHx8XG4gICAgICAgICFjaGlwLnF1ZXJ5U2VsZWN0b3IoJy5jcWEtdmFyLWNoaXBfX3JlbW92ZScpO1xuICAgICAgaWYgKHN0cnVjdHVyZUJyb2tlbikge1xuICAgICAgICBjaGlwLnBhcmVudE5vZGU/LnJlcGxhY2VDaGlsZCh0aGlzLmJ1aWxkQ2hpcChuYW1lKSwgY2hpcCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSBzdHJheSByZW1vdmUgaWNvbnMgbGVmdCBmcm9tIHBhcnRpYWwgdW5kby9yZWRvIHN0YXRlcy5cbiAgICBjb25zdCBvcnBoYW5zID0gQXJyYXkuZnJvbShlZGl0b3IucXVlcnlTZWxlY3RvckFsbCgnLmNxYS12YXItY2hpcF9fcmVtb3ZlJykpIGFzIEhUTUxFbGVtZW50W107XG4gICAgZm9yIChjb25zdCBvIG9mIG9ycGhhbnMpIHtcbiAgICAgIGlmICghby5jbG9zZXN0KCcuY3FhLXZhci1jaGlwJykpIG8ucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tLSBDaGlwaWZpY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBhdXRvQ2hpcGlmeShmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjYXJldFJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgbGV0IGxhc3RDaGlwOiBOb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IHRuIG9mIHRoaXMuY29sbGVjdERlc2NlbmRhbnRUZXh0Tm9kZXMoZWRpdG9yKSkge1xuICAgICAgaWYgKCF0bi5wYXJlbnROb2RlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHRleHQgPSB0bi5ub2RlVmFsdWUgfHwgJyc7XG4gICAgICBWQVJfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMDtcbiAgICAgIGlmICghVkFSX1RPS0VOX1JFR0VYLnRlc3QodGV4dCkpIGNvbnRpbnVlO1xuICAgICAgVkFSX1RPS0VOX1JFR0VYLmxhc3RJbmRleCA9IDA7XG5cbiAgICAgIGNvbnN0IGNhcmV0T2Zmc2V0ID1cbiAgICAgICAgIWZvcmNlICYmIGNhcmV0UmFuZ2UgJiYgY2FyZXRSYW5nZS5jb2xsYXBzZWQgJiYgY2FyZXRSYW5nZS5zdGFydENvbnRhaW5lciA9PT0gdG5cbiAgICAgICAgICA/IGNhcmV0UmFuZ2Uuc3RhcnRPZmZzZXRcbiAgICAgICAgICA6IC0xO1xuXG4gICAgICBjb25zdCBtYXRjaGVzOiBBcnJheTx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyOyBuYW1lOiBzdHJpbmcgfT4gPSBbXTtcbiAgICAgIGxldCBtOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuICAgICAgd2hpbGUgKChtID0gVkFSX1RPS0VOX1JFR0VYLmV4ZWModGV4dCkpICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbS5pbmRleDtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBtWzBdLmxlbmd0aDtcbiAgICAgICAgLy8gS2VlcCB0aGUgdG9rZW4gYXMgcGxhaW4gdGV4dCB3aGlsZSB0aGUgY2FyZXQgaXMgc3RyaWN0bHkgaW5zaWRlLlxuICAgICAgICBpZiAoY2FyZXRPZmZzZXQgPiBzdGFydCAmJiBjYXJldE9mZnNldCA8IGVuZCkgY29udGludWU7XG4gICAgICAgIG1hdGNoZXMucHVzaCh7IHN0YXJ0LCBlbmQsIG5hbWU6IG1bMV0gfSk7XG4gICAgICB9XG4gICAgICBpZiAoIW1hdGNoZXMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgY29uc3QgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIGxldCBjdXJzb3IgPSAwO1xuICAgICAgZm9yIChjb25zdCBtdCBvZiBtYXRjaGVzKSB7XG4gICAgICAgIGlmIChtdC5zdGFydCA+IGN1cnNvcikge1xuICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dC5zbGljZShjdXJzb3IsIG10LnN0YXJ0KSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaXAgPSB0aGlzLmJ1aWxkQ2hpcChtdC5uYW1lKTtcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjaGlwKTtcbiAgICAgICAgbGFzdENoaXAgPSBjaGlwO1xuICAgICAgICBjdXJzb3IgPSBtdC5lbmQ7XG4gICAgICB9XG4gICAgICBpZiAoY3Vyc29yIDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0LnNsaWNlKGN1cnNvcikpKTtcbiAgICAgIH1cbiAgICAgIHRuLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGZyYWcsIHRuKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkICYmIGxhc3RDaGlwKSB0aGlzLnBsYWNlQ2FyZXRBZnRlcihsYXN0Q2hpcCk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3REZXNjZW5kYW50VGV4dE5vZGVzKHJvb3Q6IEVsZW1lbnQpOiBUZXh0W10ge1xuICAgIGNvbnN0IG91dDogVGV4dFtdID0gW107XG4gICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyb290LCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwge1xuICAgICAgYWNjZXB0Tm9kZTogKG5vZGUpID0+IHtcbiAgICAgICAgbGV0IHA6IE5vZGUgfCBudWxsID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB3aGlsZSAocCAmJiBwICE9PSByb290KSB7XG4gICAgICAgICAgaWYgKChwIGFzIEVsZW1lbnQpLmNsYXNzTGlzdD8uY29udGFpbnM/LignY3FhLXZhci1jaGlwJykpIHtcbiAgICAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9SRUpFQ1Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIHAgPSBwLnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbGV0IG46IE5vZGUgfCBudWxsO1xuICAgIHdoaWxlICgobiA9IHdhbGtlci5uZXh0Tm9kZSgpKSkgb3V0LnB1c2gobiBhcyBUZXh0KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLy8gLS0tLSBSZW5kZXIgLyBzZXJpYWxpemUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSByZW5kZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgZWRpdG9yLmlubmVySFRNTCA9ICcnO1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBWQVJfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMDtcbiAgICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgICBsZXQgbTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgICB3aGlsZSAoKG0gPSBWQVJfVE9LRU5fUkVHRVguZXhlYyh2YWx1ZSkpICE9PSBudWxsKSB7XG4gICAgICBpZiAobS5pbmRleCA+IGxhc3RJbmRleCkge1xuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUuc2xpY2UobGFzdEluZGV4LCBtLmluZGV4KSkpO1xuICAgICAgfVxuICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHRoaXMuYnVpbGRDaGlwKG1bMV0pKTtcbiAgICAgIGxhc3RJbmRleCA9IG0uaW5kZXggKyBtWzBdLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGxhc3RJbmRleCA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHZhbHVlLnNsaWNlKGxhc3RJbmRleCkpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgbGV0IG91dCA9ICcnO1xuICAgIGNvbnN0IHdhbGsgPSAobm9kZTogTm9kZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIG91dCArPSAobm9kZS5ub2RlVmFsdWUgfHwgJycpLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSByZXR1cm47XG4gICAgICBjb25zdCBlbCA9IG5vZGUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcWEtdmFyLWNoaXAnKSkge1xuICAgICAgICBjb25zdCBuYW1lID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXZhcicpIHx8ICcnO1xuICAgICAgICBpZiAobmFtZSkgb3V0ICs9ICckeycgKyBuYW1lICsgJ30nO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZWwudGFnTmFtZSA9PT0gJ0JSJykge1xuICAgICAgICBvdXQgKz0gJ1xcbic7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQmxvY2sgPSBlbC50YWdOYW1lID09PSAnRElWJyB8fCBlbC50YWdOYW1lID09PSAnUCc7XG4gICAgICBpZiAoaXNCbG9jayAmJiBvdXQubGVuZ3RoID4gMCAmJiAhb3V0LmVuZHNXaXRoKCdcXG4nKSkgb3V0ICs9ICdcXG4nO1xuICAgICAgZWwuY2hpbGROb2Rlcy5mb3JFYWNoKHdhbGspO1xuICAgIH07XG4gICAgZWRpdG9yLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENoaXAobmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGNoaXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgY2hpcC5jbGFzc05hbWUgPSAnY3FhLXZhci1jaGlwJztcbiAgICBjaGlwLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ2ZhbHNlJyk7XG4gICAgY2hpcC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdmFyJywgbmFtZSk7XG4gICAgY29uc3QgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgbGFiZWwuY2xhc3NOYW1lID0gJ2NxYS12YXItY2hpcF9fbGFiZWwnO1xuICAgIGxhYmVsLnRleHRDb250ZW50ID0gJyR7JyArIG5hbWUgKyAnfSc7XG4gICAgY29uc3QgcmVtb3ZlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgIHJlbW92ZS5jbGFzc05hbWUgPSAnY3FhLXZhci1jaGlwX19yZW1vdmUnO1xuICAgIHJlbW92ZS50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgcmVtb3ZlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuICAgIHJlbW92ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY2hpcC5yZW1vdmUoKTtcbiAgICAgIHRoaXMub25JbnB1dCgpO1xuICAgIH0pO1xuICAgIGNoaXAuYXBwZW5kQ2hpbGQobGFiZWwpO1xuICAgIGNoaXAuYXBwZW5kQ2hpbGQocmVtb3ZlKTtcbiAgICByZXR1cm4gY2hpcDtcbiAgfVxuXG4gIC8vIC0tLS0gU2VsZWN0aW9uIC8gY2FyZXQgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25SYW5nZSgpOiBSYW5nZSB8IG51bGwge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCBzZWwucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmFuZ2UgPSBzZWwuZ2V0UmFuZ2VBdCgwKTtcbiAgICBpZiAoIXRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocmFuZ2Uuc3RhcnRDb250YWluZXIpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkSW5mbygpOiB7IHRleHQ6IHN0cmluZzsgcmFuZ2U6IFJhbmdlIH0gfCBudWxsIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwgfHwgc2VsLnJhbmdlQ291bnQgPT09IDApIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKHJhbmdlLmNvbGxhcHNlZCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVkaXRvci5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikgfHwgIWVkaXRvci5jb250YWlucyhyYW5nZS5lbmRDb250YWluZXIpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0ZXh0ID0gcmFuZ2UudG9TdHJpbmcoKTtcbiAgICBpZiAoIXRleHQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB7IHRleHQsIHJhbmdlOiByYW5nZS5jbG9uZVJhbmdlKCkgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZ2VDcm9zc2VzQ2hpcChyYW5nZTogUmFuZ2UpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlLmNsb25lQ29udGVudHMoKTtcbiAgICByZXR1cm4gISFjb250ZW50cy5xdWVyeVNlbGVjdG9yPy4oJy5jcWEtdmFyLWNoaXAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Tm9kZUJlZm9yZUNhcmV0KCk6IE5vZGUgfCBudWxsIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS5jb2xsYXBzZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHsgc3RhcnRDb250YWluZXIsIHN0YXJ0T2Zmc2V0IH0gPSByYW5nZTtcbiAgICBpZiAoc3RhcnRDb250YWluZXIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBpZiAoc3RhcnRPZmZzZXQgPiAwKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBzdGFydENvbnRhaW5lci5wcmV2aW91c1NpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBzdGFydENvbnRhaW5lci5jaGlsZE5vZGVzW3N0YXJ0T2Zmc2V0IC0gMV0gfHwgbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFdvcmQoKTogc3RyaW5nIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBpZiAoIXJhbmdlIHx8ICFyYW5nZS5jb2xsYXBzZWQpIHJldHVybiAnJztcbiAgICBsZXQgbm9kZTogTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xuICAgIGxldCBvZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnN0IHByZXYgPSBub2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICBpZiAoIXByZXYgfHwgcHJldi5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHJldHVybiAnJztcbiAgICAgIG5vZGUgPSBwcmV2O1xuICAgICAgb2Zmc2V0ID0gKHByZXYubm9kZVZhbHVlIHx8ICcnKS5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IHRleHQgPSAobm9kZSBhcyBUZXh0KS5ub2RlVmFsdWUgfHwgJyc7XG4gICAgY29uc3QgYnJhY2VPcGVuID0gdGV4dC5sYXN0SW5kZXhPZignJHsnLCBvZmZzZXQgLSAxKTtcbiAgICBpZiAoYnJhY2VPcGVuICE9PSAtMSkge1xuICAgICAgY29uc3QgY2xvc2VJZHggPSB0ZXh0LmluZGV4T2YoJ30nLCBicmFjZU9wZW4gKyAyKTtcbiAgICAgIGNvbnN0IHRva2VuQ2xvc2VkQmVmb3JlQ2FyZXQgPSBjbG9zZUlkeCAhPT0gLTEgJiYgY2xvc2VJZHggPCBvZmZzZXQ7XG4gICAgICBpZiAoIXRva2VuQ2xvc2VkQmVmb3JlQ2FyZXQpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBicmFjZU9wZW4gKyAyO1xuICAgICAgICBjb25zdCBlbmQgPSBjbG9zZUlkeCA9PT0gLTEgPyB0ZXh0Lmxlbmd0aCA6IGNsb3NlSWR4O1xuICAgICAgICByZXR1cm4gdGV4dC5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSB0ZXh0LnNsaWNlKDAsIG9mZnNldCkubWF0Y2goVkFSX1BBVEhfVEFJTF9SRUdFWCk7XG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiAnJztcbiAgfVxuXG4gIC8vIC0tLS0gQ2hpcCBpbnNlcnRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHByaXZhdGUgaW5zZXJ0Q2hpcFJlcGxhY2luZ1JhbmdlKG5hbWU6IHN0cmluZywgcmFuZ2U6IFJhbmdlKTogdm9pZCB7XG4gICAgY29uc3QgY2hpcCA9IHRoaXMuYnVpbGRDaGlwKG5hbWUpO1xuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShjaGlwKTtcbiAgICB0aGlzLnN0cmlwQnJhY2VzQXJvdW5kKGNoaXApO1xuICAgIHRoaXMucGxhY2VDYXJldEFmdGVyKGNoaXApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRDaGlwUmVwbGFjaW5nQ3VycmVudFdvcmQobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7XG4gICAgY29uc3QgY2hpcCA9IHRoaXMuYnVpbGRDaGlwKG5hbWUpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hpcCk7XG4gICAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihjaGlwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IG5vZGU6IE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcbiAgICBsZXQgb2Zmc2V0ID0gcmFuZ2Uuc3RhcnRPZmZzZXQ7XG4gICAgLy8gQ2FyZXQgbWF5IHNpdCBvbiB0aGUgZWRpdG9yIGVsZW1lbnQgKGUuZy4gcmlnaHQgYWZ0ZXIgYSBwYXN0ZWQgdGV4dCBub2RlKS5cbiAgICAvLyBXYWxrIGludG8gdGhlIHByZXZpb3VzIHRleHQgbm9kZSBzbyB3ZSByZXBsYWNlIHRoZSB0cmFpbGluZyB3b3JkIGluc3RlYWRcbiAgICAvLyBvZiBqdXN0IGluc2VydGluZyB0aGUgY2hpcCBhbG9uZ3NpZGUgaXQuXG4gICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICBjb25zdCBwcmV2ID0gbm9kZS5jaGlsZE5vZGVzW29mZnNldCAtIDFdO1xuICAgICAgaWYgKHByZXYgJiYgcHJldi5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgbm9kZSA9IHByZXY7XG4gICAgICAgIG9mZnNldCA9IChwcmV2Lm5vZGVWYWx1ZSB8fCAnJykubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShjaGlwKTtcbiAgICAgICAgdGhpcy5wbGFjZUNhcmV0QWZ0ZXIoY2hpcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IG5vZGUubm9kZVZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGJlZm9yZSA9IHRleHQuc2xpY2UoMCwgb2Zmc2V0KTtcbiAgICBjb25zdCBhZnRlciA9IHRleHQuc2xpY2Uob2Zmc2V0KTtcbiAgICBjb25zdCB3b3JkTWF0Y2ggPSBiZWZvcmUubWF0Y2goVkFSX1BBVEhfVEFJTF9SRUdFWCk7XG4gICAgbGV0IGJlZm9yZUtlcHQgPSB3b3JkTWF0Y2ggPyBiZWZvcmUuc2xpY2UoMCwgYmVmb3JlLmxlbmd0aCAtIHdvcmRNYXRjaFsxXS5sZW5ndGgpIDogYmVmb3JlO1xuICAgIGxldCBhZnRlcktlcHQgPSBhZnRlcjtcbiAgICBpZiAoYmVmb3JlS2VwdC5lbmRzV2l0aCgnJHsnKSAmJiBhZnRlcktlcHQuc3RhcnRzV2l0aCgnfScpKSB7XG4gICAgICBiZWZvcmVLZXB0ID0gYmVmb3JlS2VwdC5zbGljZSgwLCAtMik7XG4gICAgICBhZnRlcktlcHQgPSBhZnRlcktlcHQuc2xpY2UoMSk7XG4gICAgfSBlbHNlIGlmIChiZWZvcmVLZXB0LmVuZHNXaXRoKCckeycpKSB7XG4gICAgICBiZWZvcmVLZXB0ID0gYmVmb3JlS2VwdC5zbGljZSgwLCAtMik7XG4gICAgfVxuICAgIGNvbnN0IGZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgaWYgKGJlZm9yZUtlcHQpIGZyYWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYmVmb3JlS2VwdCkpO1xuICAgIGZyYWcuYXBwZW5kQ2hpbGQoY2hpcCk7XG4gICAgaWYgKGFmdGVyS2VwdCkgZnJhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShhZnRlcktlcHQpKTtcbiAgICBub2RlLnBhcmVudE5vZGUhLnJlcGxhY2VDaGlsZChmcmFnLCBub2RlKTtcbiAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihjaGlwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaXBCcmFjZXNBcm91bmQoY2hpcDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2ID0gY2hpcC5wcmV2aW91c1NpYmxpbmc7XG4gICAgY29uc3QgbmV4dCA9IGNoaXAubmV4dFNpYmxpbmc7XG4gICAgaWYgKHByZXYgJiYgcHJldi5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgIGNvbnN0IHQgPSBwcmV2Lm5vZGVWYWx1ZSB8fCAnJztcbiAgICAgIGlmICh0LmVuZHNXaXRoKCckeycpKSBwcmV2Lm5vZGVWYWx1ZSA9IHQuc2xpY2UoMCwgLTIpO1xuICAgIH1cbiAgICBpZiAobmV4dCAmJiBuZXh0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgY29uc3QgdCA9IG5leHQubm9kZVZhbHVlIHx8ICcnO1xuICAgICAgaWYgKHQuc3RhcnRzV2l0aCgnfScpKSBuZXh0Lm5vZGVWYWx1ZSA9IHQuc2xpY2UoMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRQbGFpblRleHRBdENhcmV0KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpO1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuICAgICAgdGhpcy5wbGFjZUNhcmV0QXRFbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShub2RlKTtcbiAgICB0aGlzLnBsYWNlQ2FyZXRBZnRlcihub2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGxhY2VDYXJldEFmdGVyKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwpIHJldHVybjtcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcihub2RlKTtcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGxhY2VDYXJldEF0RW5kKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCkgcmV0dXJuO1xuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHModGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpO1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLW1peGVkLXZhci13cmFwcGVyXCI+XG4gIDxkaXZcbiAgICAjZWRpdG9yXG4gICAgY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLWVkaXRvclwiXG4gICAgcm9sZT1cInRleHRib3hcIlxuICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgW2F0dHIuY29udGVudGVkaXRhYmxlXT1cIiFkaXNhYmxlZFwiXG4gICAgW2F0dHIuZGF0YS1wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImVycm9yTWVzc2FnZSA/ICd0cnVlJyA6IG51bGxcIlxuICAgIFtjbGFzcy5jcWEtbWl4ZWQtdmFyLWVkaXRvci0taW52YWxpZF09XCJlcnJvck1lc3NhZ2VcIlxuICAgIChpbnB1dCk9XCJvbklucHV0KClcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAoZm9jdXMpPVwib25FZGl0b3JGb2N1cygpXCJcbiAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcbiAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgKGJsdXIpPVwib25FZGl0b3JCbHVyKClcIj5cbiAgPC9kaXY+XG4gIDxwICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JNZXNzYWdlIH19PC9wPlxuXG4gIDxkaXZcbiAgICAqbmdJZj1cInNob3dTdWdnZXN0aW9uXCJcbiAgICBjbGFzcz1cImNxYS1taXhlZC12YXItc3VnZ2VzdFwiXG4gICAgKG1vdXNlZG93bik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY3FhLW1peGVkLXZhci1zdWdnZXN0X19pdGVtXCIgKGNsaWNrKT1cImFkZEFzVGV4dCgpXCI+XG4gICAgICBBZGQgYXMgVGV4dCA8c3BhbiAqbmdJZj1cInBlbmRpbmdXb3JkXCIgY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLXN1Z2dlc3RfX2hpbnRcIj5cInt7IHBlbmRpbmdXb3JkIH19XCI8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImNhbkFkZEFzVmFyaWFibGVcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiY3FhLW1peGVkLXZhci1zdWdnZXN0X19pdGVtIGNxYS1taXhlZC12YXItc3VnZ2VzdF9faXRlbS0tcHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwiYWRkQXNWYXJpYWJsZSgpXCI+XG4gICAgICBBZGQgYXMgbG9jYWwgdmFyaWFibGUgPHNwYW4gY2xhc3M9XCJjcWEtbWl4ZWQtdmFyLXN1Z2dlc3RfX2hpbnRcIj4ke3sgJ3snIH19e3sgcGVuZGluZ1dvcmQgfX17eyAnfScgfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -19947,15 +19947,26 @@ class MixedVariableInputComponent {
|
|
|
19947
19947
|
this.placeCaretAfter(chip);
|
|
19948
19948
|
return;
|
|
19949
19949
|
}
|
|
19950
|
-
|
|
19950
|
+
let node = range.startContainer;
|
|
19951
|
+
let offset = range.startOffset;
|
|
19952
|
+
// Caret may sit on the editor element (e.g. right after a pasted text node).
|
|
19953
|
+
// Walk into the previous text node so we replace the trailing word instead
|
|
19954
|
+
// of just inserting the chip alongside it.
|
|
19951
19955
|
if (node.nodeType !== Node.TEXT_NODE) {
|
|
19952
|
-
|
|
19953
|
-
|
|
19954
|
-
|
|
19956
|
+
const prev = node.childNodes[offset - 1];
|
|
19957
|
+
if (prev && prev.nodeType === Node.TEXT_NODE) {
|
|
19958
|
+
node = prev;
|
|
19959
|
+
offset = (prev.nodeValue || '').length;
|
|
19960
|
+
}
|
|
19961
|
+
else {
|
|
19962
|
+
range.insertNode(chip);
|
|
19963
|
+
this.placeCaretAfter(chip);
|
|
19964
|
+
return;
|
|
19965
|
+
}
|
|
19955
19966
|
}
|
|
19956
19967
|
const text = node.nodeValue || '';
|
|
19957
|
-
const before = text.slice(0,
|
|
19958
|
-
const after = text.slice(
|
|
19968
|
+
const before = text.slice(0, offset);
|
|
19969
|
+
const after = text.slice(offset);
|
|
19959
19970
|
const wordMatch = before.match(VAR_PATH_TAIL_REGEX);
|
|
19960
19971
|
let beforeKept = wordMatch ? before.slice(0, before.length - wordMatch[1].length) : before;
|
|
19961
19972
|
let afterKept = after;
|