@sumaris-net/ngx-components 1.17.1 → 1.18.0-rc1
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.
- package/bundles/sumaris-net.ngx-components.umd.js +570 -492
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +5 -0
- package/esm2015/src/app/shared/hotkeys/hotkeys.service.js +7 -11
- package/esm2015/src/app/shared/inputs.js +1 -1
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +102 -61
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +20 -5
- package/esm2015/src/app/shared/material/chips/material.chips.js +26 -23
- package/esm2015/src/app/shared/material/material.module.js +1 -1
- package/fesm2015/sumaris-net.ngx-components.js +541 -472
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/hotkeys/hotkeys.service.d.ts +2 -3
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +8 -3
- package/src/app/shared/material/autocomplete/testing/autocomplete.test.d.ts +5 -3
- package/src/theme/_ngx-components.scss +67 -20
- package/sumaris-net.ngx-components.metadata.json +1 -1
package/doc/changelog.md
CHANGED
|
@@ -269,3 +269,8 @@
|
|
|
269
269
|
|
|
270
270
|
# 1.17.0
|
|
271
271
|
[fix] GraphQL: set NetworkStatus.error on error object in order to throw corresponding exception
|
|
272
|
+
|
|
273
|
+
# 1.18.0
|
|
274
|
+
[enh] Autocomplete field: Add search bar on mobile
|
|
275
|
+
[fix] Autocomplete field: Fix style when multiple=true
|
|
276
|
+
[fix] Autocomplete field: Fix default displayWith when multiple=true (manage array value)
|
|
@@ -6,19 +6,18 @@ import { DOCUMENT } from '@angular/common';
|
|
|
6
6
|
import { MatDialog } from '@angular/material/dialog';
|
|
7
7
|
import { HotkeysDialogComponent } from './dialog/hotkeys-dialog.component';
|
|
8
8
|
import { isNotNilOrBlank } from '../functions';
|
|
9
|
-
import { ModalController
|
|
9
|
+
import { ModalController } from '@ionic/angular';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "@angular/platform-browser";
|
|
12
12
|
import * as i2 from "@angular/material/dialog";
|
|
13
13
|
import * as i3 from "@angular/common";
|
|
14
14
|
import * as i4 from "@ionic/angular";
|
|
15
15
|
export class Hotkeys {
|
|
16
|
-
constructor(eventManager, dialog, document, modalController
|
|
16
|
+
constructor(eventManager, dialog, document, modalController) {
|
|
17
17
|
this.eventManager = eventManager;
|
|
18
18
|
this.dialog = dialog;
|
|
19
19
|
this.document = document;
|
|
20
20
|
this.modalController = modalController;
|
|
21
|
-
this.popoverController = popoverController;
|
|
22
21
|
this._debug = false;
|
|
23
22
|
this._hotkeys = new Map();
|
|
24
23
|
this._defaults = {
|
|
@@ -47,12 +46,10 @@ export class Hotkeys {
|
|
|
47
46
|
return new Observable(observer => {
|
|
48
47
|
const handler = (e) => __awaiter(this, void 0, void 0, function* () {
|
|
49
48
|
// Get top component from ModalController
|
|
50
|
-
const top =
|
|
49
|
+
const top = yield this.modalController.getTop();
|
|
51
50
|
// If modal present, check its component name against hotkey element name (fix #181)
|
|
52
|
-
if (top && top.component['name'] !== merged.elementName)
|
|
53
|
-
e.preventDefault();
|
|
51
|
+
if (top && top.component['name'] !== merged.elementName)
|
|
54
52
|
return;
|
|
55
|
-
}
|
|
56
53
|
if (e instanceof KeyboardEvent && e.repeat)
|
|
57
54
|
return; // skip when repeated
|
|
58
55
|
if (merged.preventDefault)
|
|
@@ -75,7 +72,7 @@ export class Hotkeys {
|
|
|
75
72
|
});
|
|
76
73
|
}
|
|
77
74
|
}
|
|
78
|
-
Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1.EventManager), i0.ɵɵinject(i2.MatDialog), i0.ɵɵinject(i3.DOCUMENT), i0.ɵɵinject(i4.ModalController)
|
|
75
|
+
Hotkeys.ɵprov = i0.ɵɵdefineInjectable({ factory: function Hotkeys_Factory() { return new Hotkeys(i0.ɵɵinject(i1.EventManager), i0.ɵɵinject(i2.MatDialog), i0.ɵɵinject(i3.DOCUMENT), i0.ɵɵinject(i4.ModalController)); }, token: Hotkeys, providedIn: "root" });
|
|
79
76
|
Hotkeys.decorators = [
|
|
80
77
|
{ type: Injectable, args: [{
|
|
81
78
|
providedIn: 'root'
|
|
@@ -85,7 +82,6 @@ Hotkeys.ctorParameters = () => [
|
|
|
85
82
|
{ type: EventManager },
|
|
86
83
|
{ type: MatDialog },
|
|
87
84
|
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
|
88
|
-
{ type: ModalController }
|
|
89
|
-
{ type: PopoverController }
|
|
85
|
+
{ type: ModalController }
|
|
90
86
|
];
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90a2V5cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaG90a2V5cy9ob3RrZXlzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQWEvQyxNQUFNLE9BQU8sT0FBTztJQVVsQixZQUFvQixZQUEwQixFQUMxQixNQUFpQixFQUNDLFFBQWEsRUFDL0IsZUFBZ0M7UUFIaEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNDLGFBQVEsR0FBUixRQUFRLENBQUs7UUFDL0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBWDVDLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVyQixjQUFTLEdBQXFCO1lBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN0QixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDO1FBTUEsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUV6RyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDO2FBQ2hDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUV6QyxlQUFlO1FBQ2Ysd0NBQXdDO0lBQzFDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBeUI7UUFFbkMsTUFBTSxNQUFNLG1DQUFPLElBQUksQ0FBQyxTQUFTLEdBQUssT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFdkMsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsT0FBTyxDQUFDLElBQUksTUFBTSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNsRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNwRDthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUM1RTtRQUVELE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IsTUFBTSxPQUFPLEdBQUcsQ0FBTyxDQUFVLEVBQUUsRUFBRTtnQkFFbkMseUNBQXlDO2dCQUN6QyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hELG9GQUFvRjtnQkFDcEYsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxNQUFNLENBQUMsV0FBVztvQkFBRSxPQUFPO2dCQUVoRSxJQUFJLENBQUMsWUFBWSxhQUFhLElBQUksQ0FBQyxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLHFCQUFxQjtnQkFDekUsSUFBSSxNQUFNLENBQUMsY0FBYztvQkFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzlDLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsT0FBTyxDQUFDLElBQUksZUFBZSxDQUFDLENBQUM7Z0JBQ25GLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsQ0FBQyxDQUFBLENBQUM7WUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRW5GLE9BQU8sR0FBRyxFQUFFO2dCQUNWLE9BQU8sRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDdkMsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7OztZQWxFRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQWxCTyxZQUFZO1lBR1osU0FBUzs0Q0E0QkYsTUFBTSxTQUFDLFFBQVE7WUF6QnRCLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0V2ZW50TWFuYWdlcn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtIb3RrZXlzRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuL2RpYWxvZy9ob3RrZXlzLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtpc05vdE5pbE9yQmxhbmt9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge01vZGFsQ29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGVsZW1lbnQ6IGFueTtcbiAgZWxlbWVudE5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAga2V5czogc3RyaW5nO1xuICBwcmV2ZW50RGVmYXVsdDogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSG90a2V5cyB7XG5cbiAgcHJpdmF0ZSBfZGVidWcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaG90a2V5cyA9IG5ldyBNYXAoKTtcblxuICBwcml2YXRlIF9kZWZhdWx0czogUGFydGlhbDxPcHRpb25zPiA9IHtcbiAgICBlbGVtZW50OiB0aGlzLmRvY3VtZW50LFxuICAgIHByZXZlbnREZWZhdWx0OiB0cnVlXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBldmVudE1hbmFnZXI6IEV2ZW50TWFuYWdlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbaG90a2V5c10gU3RhcnRpbmcgaG90a2V5cyBzZXJ2aWNlLi4uIFByZXNzIFNoaWZ0Kz8gdG8gZ2V0IGhlbHAgbW9kYWwuJyk7XG5cbiAgICB0aGlzLmFkZFNob3J0Y3V0KHtrZXlzOiAnc2hpZnQuPyd9KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW5IZWxwTW9kYWwoKSk7XG5cbiAgICAvLyBGb3IgREVWIG9ubHlcbiAgICAvL3RoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBhZGRTaG9ydGN1dChvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+KTogT2JzZXJ2YWJsZTxVSUV2ZW50PiB7XG5cbiAgICBjb25zdCBtZXJnZWQgPSB7Li4udGhpcy5fZGVmYXVsdHMsIC4uLm9wdGlvbnN9O1xuICAgIGNvbnN0IGV2ZW50ID0gYGtleWRvd24uJHttZXJnZWQua2V5c31gO1xuXG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhtZXJnZWQuZGVzY3JpcHRpb24pKSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtob3RrZXlzXSBBZGQgc2hvcnRjdXQgeyR7b3B0aW9ucy5rZXlzfX06ICR7bWVyZ2VkLmRlc2NyaXB0aW9ufWApO1xuICAgICAgdGhpcy5faG90a2V5cy5zZXQobWVyZ2VkLmtleXMsIG1lcmdlZC5kZXNjcmlwdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2hvdGtleXNdIEFkZCBzaG9ydGN1dCB7JHtvcHRpb25zLmtleXN9fWApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gYXN5bmMgKGU6IFVJRXZlbnQpID0+IHtcblxuICAgICAgICAvLyBHZXQgdG9wIGNvbXBvbmVudCBmcm9tIE1vZGFsQ29udHJvbGxlclxuICAgICAgICBjb25zdCB0b3AgPSBhd2FpdCB0aGlzLm1vZGFsQ29udHJvbGxlci5nZXRUb3AoKTtcbiAgICAgICAgLy8gSWYgbW9kYWwgcHJlc2VudCwgY2hlY2sgaXRzIGNvbXBvbmVudCBuYW1lIGFnYWluc3QgaG90a2V5IGVsZW1lbnQgbmFtZSAoZml4ICMxODEpXG4gICAgICAgIGlmICh0b3AgJiYgdG9wLmNvbXBvbmVudFsnbmFtZSddICE9PSBtZXJnZWQuZWxlbWVudE5hbWUpIHJldHVybjtcblxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgZS5yZXBlYXQpIHJldHVybjsgLy8gc2tpcCB3aGVuIHJlcGVhdGVkXG4gICAgICAgIGlmIChtZXJnZWQucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGBbaG90a2V5c10gU2hvcnRjdXQgeyR7b3B0aW9ucy5rZXlzfX0gZGV0ZWN0ZWQuLi5gKTtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGRpc3Bvc2UgPSB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKG1lcmdlZC5lbGVtZW50LCBldmVudCwgaGFuZGxlcik7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy5faG90a2V5cy5kZWxldGUobWVyZ2VkLmtleXMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5IZWxwTW9kYWwoKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihIb3RrZXlzRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGRhdGE6IHRoaXMuX2hvdGtleXNcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -228,4 +228,4 @@ export function focusPreviousInput(event, elements, opts) {
|
|
|
228
228
|
}
|
|
229
229
|
return false;
|
|
230
230
|
}
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBR2hHLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFjO0lBQy9DLElBQUksS0FBSyxDQUFDLGdCQUFnQjtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUFjLENBQUM7SUFDcEMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4QixvQkFBb0I7SUFDcEIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTVDLElBQUksT0FBTyxLQUFLLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtRQUMzQyxJQUFJO1lBQ0YsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7S0FDRjtJQUVELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7UUFDL0MsSUFBSTtZQUNGLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9B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UUFBUSxrQkFBRyxXQUFXLElBQUssSUFBSSxFQUFFLENBQUM7SUFFcEcsSUFBSSxlQUFlLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDcEMsdUJBQXVCO1FBQ3ZCLGVBQWUsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VsZW1lbnRSZWYsIFF1ZXJ5TGlzdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0ZvY3VzYWJsZUVsZW1lbnQsIGlzRm9jdXNhYmxlRWxlbWVudH0gZnJvbSAnLi9mb2N1c2FibGUnO1xuaW1wb3J0IHtpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCB0b0Jvb2xlYW4sIHRvTnVtYmVyfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElucHV0Q29udGVudChldmVudDogVUlFdmVudCkge1xuICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBpbnB1dCA9IChldmVudC50YXJnZXQgYXMgYW55KTtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIHRydWU7XG5cbiAgLy8gTm90aGluZyB0byBzZWxlY3RcbiAgaWYgKGlzTmlsT3JCbGFuayhpbnB1dC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGlucHV0LnNlbGVjdFJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlucHV0LnNlbGVjdFJhbmdlKGlucHV0LnZhbHVlLmxlbmd0aCwgMCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBzZWxlY3QgaW5wdXQgY29udGVudCwgdXNpbmcgc2VsZWN0UmFuZ2UoKScsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlucHV0ICYmIHR5cGVvZiBpbnB1dC5zZWxlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgaW5wdXQuc2VsZWN0KCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBzZWxlY3QgaW5wdXQgY29udGVudCwgdXNpbmcgc2VsZWN0KCknLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdElucHV0UmFuZ2UoaW5wdXQ6IGFueSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleD86IG51bWJlcikge1xuICBpZiAoaW5wdXQgJiYgdHlwZW9mIGlucHV0LnNldFNlbGVjdGlvblJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG5cbiAgICAvLyBObyBjb250ZW50XG4gICAgaWYgKGlzTmlsT3JCbGFuayhpbnB1dC52YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuICAgIHRyeSB7XG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydEluZGV4LCBpc05vdE5pbChlbmRJbmRleCkgPyBlbmRJbmRleCA6IHN0YXJ0SW5kZXgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHNlbGVjdCBpbnB1dCByYW5nZScsIGVycik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FyZXRQb3NpdGlvbihpbnB1dDogYW55KTogbnVtYmVyIHtcbiAgaWYgKGlucHV0ICYmIGlucHV0LnNlbGVjdGlvblN0YXJ0KSB7XG4gICAgcmV0dXJuIGlucHV0LnNlbGVjdGlvbkRpcmVjdGlvbiA/XG4gICAgICAoaW5wdXQuc2VsZWN0aW9uRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gaW5wdXQuc2VsZWN0aW9uU3RhcnQgOiBpbnB1dC5zZWxlY3Rpb25FbmQpIDogaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW92ZUlucHV0Q2FyZXRUb1NlcGFyYXRvcihldmVudDogS2V5Ym9hcmRFdmVudCwgc2VwYXJhdG9yOiBzdHJpbmcsIGZvcndhcmQ/OiBib29sZWFuKSB7XG4gIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFzZXBhcmF0b3IpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgaW5wdXQgPSAoZXZlbnQudGFyZ2V0IGFzIGFueSk7XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGNhcmV0UG9zaXRpb24gPSBnZXRDYXJldFBvc2l0aW9uKGlucHV0KTtcblxuICAvLyBERUJVR1xuICAvL2NvbnNvbGUuZGVidWcoJ2NhcmV0UG9zaXRpb249JywgY2FyZXRQb3NpdGlvbik7XG5cbiAgaWYgKGNhcmV0UG9zaXRpb24gPT09IC0xKSByZXR1cm4gdHJ1ZTsgLy8gQ2FyZXQgcG9zIG5vdCBmb3VuZDogc2tpcFxuXG4gIC8vIEdldCBpbnB1dCB2YWx1ZVxuICBjb25zdCB2YWx1ZSA9IGlucHV0LnZhbHVlIGFzIHN0cmluZztcblxuICAvLyBObyBjb250ZW50OiBza2lwXG4gIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgdHJ5IHtcblxuXG4gICAgaWYgKHZhbHVlICYmIGNhcmV0UG9zaXRpb24gPD0gdmFsdWUubGVuZ3RoKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiSW5wdXQgdGV4dCB2YWx1ZTogXCIsIHZhbHVlKTtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkN1cnNvciBhdDogXCIsIGNhcmV0UG9zaXRpb24pO1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiVGV4dCBhZnRlciBjdXJzb3I6IFwiLCB2YWx1ZS5zdWJzdHIoY2FyZXRQb3NpdGlvbikpO1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiTmV4dCBzZXBhcmF0b3IgYXQ6IFwiLCB2YWx1ZS5pbmRleE9mKHNlcGFyYXRvciwgY2FyZXRQb3NpdGlvbikpO1xuXG4gICAgICBmb3J3YXJkID0gZm9yd2FyZCAhPT0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gKGZvcndhcmQgPyB2YWx1ZS5pbmRleE9mKHNlcGFyYXRvciwgY2FyZXRQb3NpdGlvbikgOiB2YWx1ZS5sYXN0SW5kZXhPZihzZXBhcmF0b3IsIGNhcmV0UG9zaXRpb24pKTtcbiAgICAgIGlmIChzZXBhcmF0b3JJbmRleCAhPT0gLTEgJiYgKChmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ICsgMSA8IHZhbHVlLmxlbmd0aClcbiAgICAgICAgfHwgKCFmb3J3YXJkICYmIHNlcGFyYXRvckluZGV4ID4gMCkpKSB7XG4gICAgICAgIGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgICAgIC8vIE1vdmUgYWZ0ZXIgdGhlIG5leHQgc2VwYXJhdG9yXG4gICAgICAgICAgaWYgKHNlbGVjdElucHV0UmFuZ2UoaW5wdXQsIHNlcGFyYXRvckluZGV4ICsgKGZvcndhcmQgPyAxIDogLTEpKSkge1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBtb3ZlIGNhcmV0IHRvIG5leHQgc2VwYXJhdG9yJywgZXJyKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOdW1iZXJJbnB1dChldmVudDogS2V5Ym9hcmRFdmVudCwgYWxsb3dEZWNpbWFsczogYm9vbGVhbiwgZGVjaW1hbFNlcGFyYXRvcj86IHN0cmluZykge1xuICAvL2lucHV0IG51bWJlciBlbnRlcmVkIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0XG4gIGlmICgoZXZlbnQud2hpY2ggPj0gNDggJiYgZXZlbnQud2hpY2ggPD0gNTcpIHx8IChldmVudC53aGljaCA+PSAzNyAmJiBldmVudC53aGljaCA8PSA0MCkpIHtcbiAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG51bWJlciBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgIC8vIE9LXG4gIH1cbiAgLy8gRGVjaW1hbCBzZXBhcmF0b3JcbiAgZWxzZSBpZiAoYWxsb3dEZWNpbWFscyAmJiAoKCFkZWNpbWFsU2VwYXJhdG9yICYmIChldmVudC5rZXkgPT09ICcuJyB8fCBldmVudC5rZXkgPT09ICcsJykpXG4gICAgfHwgKGRlY2ltYWxTZXBhcmF0b3IgJiYgZXZlbnQua2V5ID09PSBkZWNpbWFsU2VwYXJhdG9yKSkpIHtcbiAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IGRlY2ltYWwgc2VwYXJhdG9yIGVudGVyZWQgOicgKyBldmVudC5jb2RlKTtcbiAgICAvLyBPS1xuICB9IGVsc2Uge1xuICAgIC8vaW5wdXQgY29tbWFuZCBlbnRlcmVkIG9mIGRlbGV0ZSwgYmFja3NwYWNlIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0LCBvciBuZWdhdGl2ZSBzaWduXG4gICAgaWYgKChldmVudC5rZXlDb2RlID49IDM3ICYmIGV2ZW50LmtleUNvZGUgPD0gNDApIHx8IGV2ZW50LmtleUNvZGUgPT0gNDYgfHwgZXZlbnQud2hpY2ggPT0gOCB8fCBldmVudC5rZXlDb2RlID09IDkgfHwgZXZlbnQua2V5Q29kZSA9PSA0NSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBjb21tYW5kIGVudGVyZWQgOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSk7XG4gICAgICAvLyBPS1xuICAgIH1cbiAgICAvLyBDYW5jZWwgb3RoZXIga2V5Ym9hcmQgZXZlbnRzXG4gICAgZWxzZSB7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG5vdCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlICsgJyAnICsgZXZlbnQuY29kZSApO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvY3VzSW5wdXQoZWxlbWVudDogRWxlbWVudFJlZikge1xuICBjb25zdCBpbnB1dEVsZW1lbnQgPSBhc0lucHV0RWxlbWVudChlbGVtZW50KTtcbiAgaWYgKGlucHV0RWxlbWVudClcbiAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgZWxzZSB7XG4gICAgY29uc29sZS53YXJuKCdUcnlpbmcgdG8gZm9jdXMgb24gdGhpcyBlbGVtZW50OicsIGVsZW1lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRUYWJJbmRleChlbGVtZW50OiBFbGVtZW50UmVmLCB0YWJJbmRleDogbnVtYmVyKSB7XG4gIGlmKGlzSW5wdXRFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC50YWJpbmRleCA9IHRhYkluZGV4O1xuICB9XG4gIGVsc2UgaWYgKGVsZW1lbnQgJiYgaXNJbnB1dEVsZW1lbnQoZWxlbWVudC5uYXRpdmVFbGVtZW50KSkge1xuICAgIGVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRhYkluZGV4O1xuICB9XG4gIGVsc2Uge1xuICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGNoYW5nZSB0YWJpbmRleCBvbiB0aGlzIGVsZW1lbnQ6JywgZWxlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dEVsZW1lbnQgZXh0ZW5kcyBGb2N1c2FibGVFbGVtZW50IHtcbiAgdGFiaW5kZXg/OiBudW1iZXI7XG4gIHRhYkluZGV4PzogbnVtYmVyO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHZhbHVlOiBhbnk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnB1dEVsZW1lbnQob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgSW5wdXRFbGVtZW50IHtcbiAgcmV0dXJuIGlzRm9jdXNhYmxlRWxlbWVudChvYmplY3QpXG4gICAgJiYgKCd2YWx1ZScgaW4gb2JqZWN0XG4gICAgICAvLyBoYXMgdmFsdWUgaXMgbm90IGFsd2F5cyBzZXQgKG5laXRoZXIgdGFiaW5kZXgpIGNoZWNrIG9uIDIgcHJvcGVydGllcyB3aXRoIGEgbG9naWNhbCBPUlxuICAgICAgfHwgKCd0YWJpbmRleCcgaW4gb2JqZWN0IHx8ICd0YWJJbmRleCcgaW4gb2JqZWN0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0lucHV0RWxlbWVudChvYmplY3Q6IEVsZW1lbnRSZWYpOiBJbnB1dEVsZW1lbnR8dW5kZWZpbmVkIHtcbiAgaWYgKG9iamVjdCkge1xuICAgIGlmIChpc0lucHV0RWxlbWVudChvYmplY3QpKSByZXR1cm4gb2JqZWN0O1xuICAgIGlmIChvYmplY3QubmF0aXZlRWxlbWVudCAmJiBpc0lucHV0RWxlbWVudChvYmplY3QubmF0aXZlRWxlbWVudCkpIHJldHVybiBvYmplY3QubmF0aXZlRWxlbWVudDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFiaW5kZXhDb21wYXJhdG9yKGE6IElucHV0RWxlbWVudCwgYjogSW5wdXRFbGVtZW50KSB7XG4gIGNvbnN0IHZhbHVlQSA9IGEudGFiaW5kZXggfHwgYS50YWJJbmRleDtcbiAgY29uc3QgdmFsdWVCID0gYi50YWJpbmRleCB8fCBiLnRhYkluZGV4O1xuICByZXR1cm4gdmFsdWVBID09PSB2YWx1ZUIgPyAwIDogKHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAtMSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuR2FpbkZvY3VzT3B0aW9ucyB7XG4gIG1pblRhYmluZGV4PzogbnVtYmVyO1xuICBtYXhUYWJpbmRleD86IG51bWJlcjtcbiAgZXhjbHVkZUVtcHR5SW5wdXQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyBleHRlbmRzIENhbkdhaW5Gb2N1c09wdGlvbnMge1xuICBzb3J0QnlUYWJJbmRleD86IGJvb2xlYW47XG4gIGRlYnVnPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbkhhdmVGb2N1cyhpbnB1dDogSW5wdXRFbGVtZW50LCBvcHRzPzogQ2FuR2FpbkZvY3VzT3B0aW9ucyk6IGJvb2xlYW4ge1xuICBpZiAoIWlucHV0KSByZXR1cm4gZmFsc2U7XG4gIC8vIEV4Y2x1ZGUgZGlzYWJsZWQgZWxlbWVudFxuICByZXR1cm4gIXRvQm9vbGVhbihpbnB1dC5kaXNhYmxlZCwgZmFsc2UpXG4gICAgLy8gRXhjbHVkZSBoaWRkZW4gZWxlbWVudFxuICAgICYmICF0b0Jvb2xlYW4oaW5wdXQuaGlkZGVuLCBmYWxzZSlcbiAgICAvLyBFeGNsdWRlIG1pblRhYkluZGV4IDwgZWxlbWVudC50YWJJbmRleFxuICAgICYmIChpc05pbChvcHRzLm1pblRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpID4gb3B0cy5taW5UYWJpbmRleClcbiAgICAvLyBFeGNsdWRlIG1heFRhYkluZGV4ID4gZWxlbWVudC50YWJJbmRleFxuICAgICYmIChpc05pbChvcHRzLm1heFRhYmluZGV4KSB8fCB0b051bWJlcihpbnB1dC50YWJJbmRleCwgaW5wdXQudGFiaW5kZXgpIDwgb3B0cy5tYXhUYWJpbmRleClcbiAgICAvLyBFeGNsdWRlIG5pbCBpbnB1dCB2YWx1ZVxuICAgICYmICghb3B0cy5leGNsdWRlRW1wdHlJbnB1dCB8fCBpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvY3VzYWJsZUlucHV0RWxlbWVudHMoZWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPiwgb3B0cz86IEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyk6IElucHV0RWxlbWVudFtdIHtcbiAgb3B0cyA9IHtzb3J0QnlUYWJJbmRleDogZmFsc2UsIGV4Y2x1ZGVFbXB0eUlucHV0OiBmYWxzZSwgLi4ub3B0c307XG5cbiAgLy8gRm9jdXMgdG8gZmlyc3QgaW5wdXRcbiAgY29uc3QgZmlsdGVyZWRFbGVtZW50czogSW5wdXRFbGVtZW50W10gPSBlbGVtZW50c1xuXG4gICAgLy8gVHJhbnNmb3JtIHRvIGlucHV0XG4gICAgLm1hcChhc0lucHV0RWxlbWVudClcblxuICAgIC5maWx0ZXIoaW5wdXQgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZWQgPSBjYW5IYXZlRm9jdXMoaW5wdXQsIG9wdHMpO1xuICAgICAgLy8gREVCVUdcbiAgICAgIGlmIChpbnB1dCAmJiBvcHRzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGBbaW5wdXRzXSBGb2N1c2FibGUgaW5wdXQge2NhbkZvY3VzOiAke2luY2x1ZGVkfSwgdGFiSW5kZXg6ICR7aW5wdXQudGFiSW5kZXh8fGlucHV0LnRhYmluZGV4fX1gLCBpbnB1dCk7XG4gICAgICByZXR1cm4gaW5jbHVkZWQ7XG4gICAgfSk7XG5cbiAgLy8gU29ydCBieSB0YWJJbmRleFxuICBpZiAob3B0cy5zb3J0QnlUYWJJbmRleCkge1xuICAgIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzLnNvcnQodGFiaW5kZXhDb21wYXJhdG9yKTtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xuXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGZvY3VzTmV4dElucHV0KGV2ZW50OiBVSUV2ZW50fHVuZGVmaW5lZCwgZWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPiwgb3B0cz86IEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyk6IGJvb2xlYW4ge1xuXG4gIC8vIENhbmNlbGxpbmcgZXZlbnQgKGUuZy4gd2hlbiBlbWl0dGVkIGJ5IChrZXlkb3duLnRhYikgKVxuICBpZiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLy8gR2V0IGN1cnJlbnQgaW5kZXhcbiAgY29uc3QgbWluVGFiaW5kZXggPSBldmVudCAmJiBpc0lucHV0RWxlbWVudChldmVudC50YXJnZXQpID8gKGV2ZW50LnRhcmdldC50YWJJbmRleCB8fCBldmVudC50YXJnZXQudGFiaW5kZXgpIDogdW5kZWZpbmVkO1xuXG4gIC8vIEdldCBmb2N1c2FibGUgaW5wdXQgZWxlbWVudHNcbiAgY29uc3QgZm9jdXNhYmxlSW5wdXRzOiBJbnB1dEVsZW1lbnRbXSA9IGdldEZvY3VzYWJsZUlucHV0RWxlbWVudHMoZWxlbWVudHMsIHttaW5UYWJpbmRleCwgLi4ub3B0c30pO1xuXG4gIGlmIChpc05vdEVtcHR5QXJyYXkoZm9jdXNhYmxlSW5wdXRzKSkge1xuICAgIC8vIEZvY3VzIG9uIGZpcnN0IGlucHV0c1xuICAgIGZvY3VzYWJsZUlucHV0c1swXS5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9jdXNQcmV2aW91c0lucHV0KGV2ZW50OiBVSUV2ZW50fHVuZGVmaW5lZCwgZWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPiwgb3B0cz86IEdldEZvY3VzYWJsZUlucHV0T3B0aW9ucyk6IGJvb2xlYW4ge1xuXG4gIC8vIENhbmNlbGxpbmcgZXZlbnQgKGUuZy4gd2hlbiBlbWl0dGVkIGJ5IChrZXlkb3duLnRhYikgKVxuICBpZiAoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLy8gR2V0IGN1cnJlbnQgaW5kZXhcbiAgY29uc3QgbWF4VGFiaW5kZXggPSBldmVudCAmJiBpc0lucHV0RWxlbWVudChldmVudC50YXJnZXQpID8gKGV2ZW50LnRhcmdldC50YWJJbmRleCB8fCBldmVudC50YXJnZXQudGFiaW5kZXgpIDogdW5kZWZpbmVkO1xuXG4gIC8vIEdldCBmb2N1c2FibGUgaW5wdXQgZWxlbWVudHNcbiAgY29uc3QgZm9jdXNhYmxlSW5wdXRzOiBJbnB1dEVsZW1lbnRbXSA9IGdldEZvY3VzYWJsZUlucHV0RWxlbWVudHMoZWxlbWVudHMsIHttYXhUYWJpbmRleCwgLi4ub3B0c30pO1xuXG4gIGlmIChpc05vdEVtcHR5QXJyYXkoZm9jdXNhYmxlSW5wdXRzKSkge1xuICAgIC8vIEZvY3VzIG9uIGxhc3QgaW5wdXRzXG4gICAgZm9jdXNhYmxlSW5wdXRzW2ZvY3VzYWJsZUlucHV0cy5sZW5ndGggLTFdLmZvY3VzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbiJdfQ==
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvaW5wdXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUIsa0JBQWtCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBS2hHLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFjO0lBQy9DLElBQUksS0FBSyxDQUFDLGdCQUFnQjtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUFjLENBQUM7SUFDcEMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4QixvQkFBb0I7SUFDcEIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTVDLElBQUksT0FBTyxLQUFLLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRTtRQUMzQyxJQUFJO1lBQ0YsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7S0FDRjtJQUVELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7UUFDL0MsSUFBSTtZQUNGLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9B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UUFBUSxrQkFBRyxXQUFXLElBQUssSUFBSSxFQUFFLENBQUM7SUFFcEcsSUFBSSxlQUFlLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDcEMsdUJBQXVCO1FBQ3ZCLGVBQWUsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VsZW1lbnRSZWYsIFF1ZXJ5TGlzdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0ZvY3VzYWJsZUVsZW1lbnQsIGlzRm9jdXNhYmxlRWxlbWVudH0gZnJvbSAnLi9mb2N1c2FibGUnO1xuaW1wb3J0IHtpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsLCB0b0Jvb2xlYW4sIHRvTnVtYmVyfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJbnB1dENvbnRlbnQoZXZlbnQ6IFVJRXZlbnQpIHtcbiAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgaW5wdXQgPSAoZXZlbnQudGFyZ2V0IGFzIGFueSk7XG4gIGlmICghaW5wdXQpIHJldHVybiB0cnVlO1xuXG4gIC8vIE5vdGhpbmcgdG8gc2VsZWN0XG4gIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBpbnB1dC5zZWxlY3RSYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbnB1dC5zZWxlY3RSYW5nZShpbnB1dC52YWx1ZS5sZW5ndGgsIDApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdFJhbmdlKCknLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbnB1dCAmJiB0eXBlb2YgaW5wdXQuc2VsZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlucHV0LnNlbGVjdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qgc2VsZWN0IGlucHV0IGNvbnRlbnQsIHVzaW5nIHNlbGVjdCgpJywgZXJyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RJbnB1dFJhbmdlKGlucHV0OiBhbnksIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg/OiBudW1iZXIpIHtcbiAgaWYgKGlucHV0ICYmIHR5cGVvZiBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgLy8gTm8gY29udGVudFxuICAgIGlmIChpc05pbE9yQmxhbmsoaW5wdXQudmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnRJbmRleCwgaXNOb3ROaWwoZW5kSW5kZXgpID8gZW5kSW5kZXggOiBzdGFydEluZGV4KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBzZWxlY3QgaW5wdXQgcmFuZ2UnLCBlcnIpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb24oaW5wdXQ6IGFueSk6IG51bWJlciB7XG4gIGlmIChpbnB1dCAmJiBpbnB1dC5zZWxlY3Rpb25TdGFydCkge1xuICAgIHJldHVybiBpbnB1dC5zZWxlY3Rpb25EaXJlY3Rpb24gP1xuICAgICAgKGlucHV0LnNlbGVjdGlvbkRpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IGlucHV0LnNlbGVjdGlvblN0YXJ0IDogaW5wdXQuc2VsZWN0aW9uRW5kKSA6IGlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdmVJbnB1dENhcmV0VG9TZXBhcmF0b3IoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHNlcGFyYXRvcjogc3RyaW5nLCBmb3J3YXJkPzogYm9vbGVhbikge1xuICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhc2VwYXJhdG9yKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGlucHV0ID0gKGV2ZW50LnRhcmdldCBhcyBhbnkpO1xuICBpZiAoIWlucHV0KSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBjYXJldFBvc2l0aW9uID0gZ2V0Q2FyZXRQb3NpdGlvbihpbnB1dCk7XG5cbiAgLy8gREVCVUdcbiAgLy9jb25zb2xlLmRlYnVnKCdjYXJldFBvc2l0aW9uPScsIGNhcmV0UG9zaXRpb24pO1xuXG4gIGlmIChjYXJldFBvc2l0aW9uID09PSAtMSkgcmV0dXJuIHRydWU7IC8vIENhcmV0IHBvcyBub3QgZm91bmQ6IHNraXBcblxuICAvLyBHZXQgaW5wdXQgdmFsdWVcbiAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZSBhcyBzdHJpbmc7XG5cbiAgLy8gTm8gY29udGVudDogc2tpcFxuICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG4gIHRyeSB7XG5cblxuICAgIGlmICh2YWx1ZSAmJiBjYXJldFBvc2l0aW9uIDw9IHZhbHVlLmxlbmd0aCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIklucHV0IHRleHQgdmFsdWU6IFwiLCB2YWx1ZSk7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJDdXJzb3IgYXQ6IFwiLCBjYXJldFBvc2l0aW9uKTtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlRleHQgYWZ0ZXIgY3Vyc29yOiBcIiwgdmFsdWUuc3Vic3RyKGNhcmV0UG9zaXRpb24pKTtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIk5leHQgc2VwYXJhdG9yIGF0OiBcIiwgdmFsdWUuaW5kZXhPZihzZXBhcmF0b3IsIGNhcmV0UG9zaXRpb24pKTtcblxuICAgICAgZm9yd2FyZCA9IGZvcndhcmQgIT09IGZhbHNlO1xuXG4gICAgICBjb25zdCBzZXBhcmF0b3JJbmRleCA9IChmb3J3YXJkID8gdmFsdWUuaW5kZXhPZihzZXBhcmF0b3IsIGNhcmV0UG9zaXRpb24pIDogdmFsdWUubGFzdEluZGV4T2Yoc2VwYXJhdG9yLCBjYXJldFBvc2l0aW9uKSk7XG4gICAgICBpZiAoc2VwYXJhdG9ySW5kZXggIT09IC0xICYmICgoZm9yd2FyZCAmJiBzZXBhcmF0b3JJbmRleCArIDEgPCB2YWx1ZS5sZW5ndGgpXG4gICAgICAgIHx8ICghZm9yd2FyZCAmJiBzZXBhcmF0b3JJbmRleCA+IDApKSkge1xuICAgICAgICBpZiAoaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAvLyBNb3ZlIGFmdGVyIHRoZSBuZXh0IHNlcGFyYXRvclxuICAgICAgICAgIGlmIChzZWxlY3RJbnB1dFJhbmdlKGlucHV0LCBzZXBhcmF0b3JJbmRleCArIChmb3J3YXJkID8gMSA6IC0xKSkpIHtcbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIGtleWJvYXJkIGV2ZW50XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgbW92ZSBjYXJldCB0byBuZXh0IHNlcGFyYXRvcicsIGVycik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTnVtYmVySW5wdXQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFsbG93RGVjaW1hbHM6IGJvb2xlYW4sIGRlY2ltYWxTZXBhcmF0b3I/OiBzdHJpbmcpIHtcbiAgLy9pbnB1dCBudW1iZXIgZW50ZXJlZCBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodFxuICBpZiAoKGV2ZW50LndoaWNoID49IDQ4ICYmIGV2ZW50LndoaWNoIDw9IDU3KSB8fCAoZXZlbnQud2hpY2ggPj0gMzcgJiYgZXZlbnQud2hpY2ggPD0gNDApKSB7XG4gICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAvLyBPS1xuICB9XG4gIC8vIERlY2ltYWwgc2VwYXJhdG9yXG4gIGVsc2UgaWYgKGFsbG93RGVjaW1hbHMgJiYgKCghZGVjaW1hbFNlcGFyYXRvciAmJiAoZXZlbnQua2V5ID09PSAnLicgfHwgZXZlbnQua2V5ID09PSAnLCcpKVxuICAgIHx8IChkZWNpbWFsU2VwYXJhdG9yICYmIGV2ZW50LmtleSA9PT0gZGVjaW1hbFNlcGFyYXRvcikpKSB7XG4gICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBkZWNpbWFsIHNlcGFyYXRvciBlbnRlcmVkIDonICsgZXZlbnQuY29kZSk7XG4gICAgLy8gT0tcbiAgfSBlbHNlIHtcbiAgICAvL2lucHV0IGNvbW1hbmQgZW50ZXJlZCBvZiBkZWxldGUsIGJhY2tzcGFjZSBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodCwgb3IgbmVnYXRpdmUgc2lnblxuICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSB8fCBldmVudC5rZXlDb2RlID09IDQ2IHx8IGV2ZW50LndoaWNoID09IDggfHwgZXZlbnQua2V5Q29kZSA9PSA5IHx8IGV2ZW50LmtleUNvZGUgPT0gNDUpIHtcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgY29tbWFuZCBlbnRlcmVkIDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuICAgICAgLy8gT0tcbiAgICB9XG4gICAgLy8gQ2FuY2VsIG90aGVyIGtleWJvYXJkIGV2ZW50c1xuICAgIGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBub3QgbnVtYmVyIGVudGVyZWQgOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSArICcgJyArIGV2ZW50LmNvZGUgKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c0lucHV0KGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gYXNJbnB1dEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmIChpbnB1dEVsZW1lbnQpXG4gICAgaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gIGVsc2Uge1xuICAgIGNvbnNvbGUud2FybignVHJ5aW5nIHRvIGZvY3VzIG9uIHRoaXMgZWxlbWVudDonLCBlbGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0VGFiSW5kZXgoZWxlbWVudDogRWxlbWVudFJlZiwgdGFiSW5kZXg6IG51bWJlcikge1xuICBpZihpc0lucHV0RWxlbWVudChlbGVtZW50KSkge1xuICAgIGVsZW1lbnQudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgfVxuICBlbHNlIGlmIChlbGVtZW50ICYmIGlzSW5wdXRFbGVtZW50KGVsZW1lbnQubmF0aXZlRWxlbWVudCkpIHtcbiAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSB0YWJJbmRleDtcbiAgfVxuICBlbHNlIHtcbiAgICBjb25zb2xlLndhcm4oJ1RyeWluZyB0byBjaGFuZ2UgdGFiaW5kZXggb24gdGhpcyBlbGVtZW50OicsIGVsZW1lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRFbGVtZW50IGV4dGVuZHMgRm9jdXNhYmxlRWxlbWVudCB7XG4gIHRhYmluZGV4PzogbnVtYmVyO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB2YWx1ZTogYW55O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5wdXRFbGVtZW50KG9iamVjdDogYW55KTogb2JqZWN0IGlzIElucHV0RWxlbWVudCB7XG4gIHJldHVybiBpc0ZvY3VzYWJsZUVsZW1lbnQob2JqZWN0KVxuICAgICYmICgndmFsdWUnIGluIG9iamVjdFxuICAgICAgLy8gaGFzIHZhbHVlIGlzIG5vdCBhbHdheXMgc2V0IChuZWl0aGVyIHRhYmluZGV4KSBjaGVjayBvbiAyIHByb3BlcnRpZXMgd2l0aCBhIGxvZ2ljYWwgT1JcbiAgICAgIHx8ICgndGFiaW5kZXgnIGluIG9iamVjdCB8fCAndGFiSW5kZXgnIGluIG9iamVjdCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNJbnB1dEVsZW1lbnQob2JqZWN0OiBFbGVtZW50UmVmKTogSW5wdXRFbGVtZW50fHVuZGVmaW5lZCB7XG4gIGlmIChvYmplY3QpIHtcbiAgICBpZiAoaXNJbnB1dEVsZW1lbnQob2JqZWN0KSkgcmV0dXJuIG9iamVjdDtcbiAgICBpZiAob2JqZWN0Lm5hdGl2ZUVsZW1lbnQgJiYgaXNJbnB1dEVsZW1lbnQob2JqZWN0Lm5hdGl2ZUVsZW1lbnQpKSByZXR1cm4gb2JqZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmluZGV4Q29tcGFyYXRvcihhOiBJbnB1dEVsZW1lbnQsIGI6IElucHV0RWxlbWVudCkge1xuICBjb25zdCB2YWx1ZUEgPSBhLnRhYmluZGV4IHx8IGEudGFiSW5kZXg7XG4gIGNvbnN0IHZhbHVlQiA9IGIudGFiaW5kZXggfHwgYi50YWJJbmRleDtcbiAgcmV0dXJuIHZhbHVlQSA9PT0gdmFsdWVCID8gMCA6ICh2YWx1ZUEgPiB2YWx1ZUIgPyAxIDogLTEpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbkdhaW5Gb2N1c09wdGlvbnMge1xuICBtaW5UYWJpbmRleD86IG51bWJlcjtcbiAgbWF4VGFiaW5kZXg/OiBudW1iZXI7XG4gIGV4Y2x1ZGVFbXB0eUlucHV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMgZXh0ZW5kcyBDYW5HYWluRm9jdXNPcHRpb25zIHtcbiAgc29ydEJ5VGFiSW5kZXg/OiBib29sZWFuO1xuICBkZWJ1Zz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5IYXZlRm9jdXMoaW5wdXQ6IElucHV0RWxlbWVudCwgb3B0cz86IENhbkdhaW5Gb2N1c09wdGlvbnMpOiBib29sZWFuIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIGZhbHNlO1xuICAvLyBFeGNsdWRlIGRpc2FibGVkIGVsZW1lbnRcbiAgcmV0dXJuICF0b0Jvb2xlYW4oaW5wdXQuZGlzYWJsZWQsIGZhbHNlKVxuICAgIC8vIEV4Y2x1ZGUgaGlkZGVuIGVsZW1lbnRcbiAgICAmJiAhdG9Cb29sZWFuKGlucHV0LmhpZGRlbiwgZmFsc2UpXG4gICAgLy8gRXhjbHVkZSBtaW5UYWJJbmRleCA8IGVsZW1lbnQudGFiSW5kZXhcbiAgICAmJiAoaXNOaWwob3B0cy5taW5UYWJpbmRleCkgfHwgdG9OdW1iZXIoaW5wdXQudGFiSW5kZXgsIGlucHV0LnRhYmluZGV4KSA+IG9wdHMubWluVGFiaW5kZXgpXG4gICAgLy8gRXhjbHVkZSBtYXhUYWJJbmRleCA+IGVsZW1lbnQudGFiSW5kZXhcbiAgICAmJiAoaXNOaWwob3B0cy5tYXhUYWJpbmRleCkgfHwgdG9OdW1iZXIoaW5wdXQudGFiSW5kZXgsIGlucHV0LnRhYmluZGV4KSA8IG9wdHMubWF4VGFiaW5kZXgpXG4gICAgLy8gRXhjbHVkZSBuaWwgaW5wdXQgdmFsdWVcbiAgICAmJiAoIW9wdHMuZXhjbHVkZUVtcHR5SW5wdXQgfHwgaXNOaWxPckJsYW5rKGlucHV0LnZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4sIG9wdHM/OiBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMpOiBJbnB1dEVsZW1lbnRbXSB7XG4gIG9wdHMgPSB7c29ydEJ5VGFiSW5kZXg6IGZhbHNlLCBleGNsdWRlRW1wdHlJbnB1dDogZmFsc2UsIC4uLm9wdHN9O1xuXG4gIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gIGNvbnN0IGZpbHRlcmVkRWxlbWVudHM6IElucHV0RWxlbWVudFtdID0gZWxlbWVudHNcblxuICAgIC8vIFRyYW5zZm9ybSB0byBpbnB1dFxuICAgIC5tYXAoYXNJbnB1dEVsZW1lbnQpXG5cbiAgICAuZmlsdGVyKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IGluY2x1ZGVkID0gY2FuSGF2ZUZvY3VzKGlucHV0LCBvcHRzKTtcbiAgICAgIC8vIERFQlVHXG4gICAgICBpZiAoaW5wdXQgJiYgb3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgW2lucHV0c10gRm9jdXNhYmxlIGlucHV0IHtjYW5Gb2N1czogJHtpbmNsdWRlZH0sIHRhYkluZGV4OiAke2lucHV0LnRhYkluZGV4fHxpbnB1dC50YWJpbmRleH19YCwgaW5wdXQpO1xuICAgICAgcmV0dXJuIGluY2x1ZGVkO1xuICAgIH0pO1xuXG4gIC8vIFNvcnQgYnkgdGFiSW5kZXhcbiAgaWYgKG9wdHMuc29ydEJ5VGFiSW5kZXgpIHtcbiAgICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cy5zb3J0KHRhYmluZGV4Q29tcGFyYXRvcik7XG4gIH1cblxuICByZXR1cm4gZmlsdGVyZWRFbGVtZW50cztcblxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c05leHRJbnB1dChldmVudDogVUlFdmVudHx1bmRlZmluZWQsIGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4sIG9wdHM/OiBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMpOiBib29sZWFuIHtcblxuICAvLyBDYW5jZWxsaW5nIGV2ZW50IChlLmcuIHdoZW4gZW1pdHRlZCBieSAoa2V5ZG93bi50YWIpIClcbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vIEdldCBjdXJyZW50IGluZGV4XG4gIGNvbnN0IG1pblRhYmluZGV4ID0gZXZlbnQgJiYgaXNJbnB1dEVsZW1lbnQoZXZlbnQudGFyZ2V0KSA/IChldmVudC50YXJnZXQudGFiSW5kZXggfHwgZXZlbnQudGFyZ2V0LnRhYmluZGV4KSA6IHVuZGVmaW5lZDtcblxuICAvLyBHZXQgZm9jdXNhYmxlIGlucHV0IGVsZW1lbnRzXG4gIGNvbnN0IGZvY3VzYWJsZUlucHV0czogSW5wdXRFbGVtZW50W10gPSBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzLCB7bWluVGFiaW5kZXgsIC4uLm9wdHN9KTtcblxuICBpZiAoaXNOb3RFbXB0eUFycmF5KGZvY3VzYWJsZUlucHV0cykpIHtcbiAgICAvLyBGb2N1cyBvbiBmaXJzdCBpbnB1dHNcbiAgICBmb2N1c2FibGVJbnB1dHNbMF0uZm9jdXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvY3VzUHJldmlvdXNJbnB1dChldmVudDogVUlFdmVudHx1bmRlZmluZWQsIGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4sIG9wdHM/OiBHZXRGb2N1c2FibGVJbnB1dE9wdGlvbnMpOiBib29sZWFuIHtcblxuICAvLyBDYW5jZWxsaW5nIGV2ZW50IChlLmcuIHdoZW4gZW1pdHRlZCBieSAoa2V5ZG93bi50YWIpIClcbiAgaWYgKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vIEdldCBjdXJyZW50IGluZGV4XG4gIGNvbnN0IG1heFRhYmluZGV4ID0gZXZlbnQgJiYgaXNJbnB1dEVsZW1lbnQoZXZlbnQudGFyZ2V0KSA/IChldmVudC50YXJnZXQudGFiSW5kZXggfHwgZXZlbnQudGFyZ2V0LnRhYmluZGV4KSA6IHVuZGVmaW5lZDtcblxuICAvLyBHZXQgZm9jdXNhYmxlIGlucHV0IGVsZW1lbnRzXG4gIGNvbnN0IGZvY3VzYWJsZUlucHV0czogSW5wdXRFbGVtZW50W10gPSBnZXRGb2N1c2FibGVJbnB1dEVsZW1lbnRzKGVsZW1lbnRzLCB7bWF4VGFiaW5kZXgsIC4uLm9wdHN9KTtcblxuICBpZiAoaXNOb3RFbXB0eUFycmF5KGZvY3VzYWJsZUlucHV0cykpIHtcbiAgICAvLyBGb2N1cyBvbiBsYXN0IGlucHV0c1xuICAgIGZvY3VzYWJsZUlucHV0c1tmb2N1c2FibGVJbnB1dHMubGVuZ3RoIC0xXS5mb2N1cygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4iXX0=
|