@datagrok-libraries/utils 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/computation-view.d.ts +4 -5
- package/src/computation-view.d.ts.map +1 -1
- package/src/computation-view.js +34 -25
- package/src/function-view.d.ts +24 -51
- package/src/function-view.d.ts.map +1 -1
- package/src/function-view.js +162 -212
- package/src/similarity-metrics.js +1 -1
- package/src/string-utils.d.ts +1 -0
- package/src/string-utils.d.ts.map +1 -1
- package/src/string-utils.js +4 -1
package/package.json
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"fullName": "Utils",
|
|
7
|
-
"version": "0.4.
|
|
7
|
+
"version": "0.4.1",
|
|
8
8
|
"description": "Common utilities",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@types/node": "^14.14.37",
|
|
11
11
|
"cash-dom": "^8.1.1",
|
|
12
|
-
"datagrok-api": "^
|
|
12
|
+
"datagrok-api": "^1.0",
|
|
13
13
|
"dts-bundle": "^0.7.3",
|
|
14
14
|
"exceljs": "^4.3.0",
|
|
15
15
|
"node-fetch": "^2.6.0",
|
|
@@ -16,10 +16,9 @@ import { FunctionView } from './function-view';
|
|
|
16
16
|
* - notifications for changing inputs, completion of computations, etc: {@link onInputChanged}
|
|
17
17
|
* */
|
|
18
18
|
export declare class ComputationView extends FunctionView {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
buildInputForm(call: DG.FuncCall): HTMLElement;
|
|
19
|
+
jiraUrl: string;
|
|
20
|
+
constructor(funccall: DG.FuncCall);
|
|
21
|
+
init(funccall: DG.FuncCall): Promise<void>;
|
|
22
|
+
buildRibbonMenu(): void;
|
|
24
23
|
}
|
|
25
24
|
//# sourceMappingURL=computation-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computation-view.d.ts","sourceRoot":"","sources":["computation-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;KAcK;AACL,qBAAa,eAAgB,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"computation-view.d.ts","sourceRoot":"","sources":["computation-view.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAE7C;;;;;;;;;;;;;;KAcK;AACL,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,EAAE,MAAM,CAAM;gBAET,QAAQ,EAAE,EAAE,CAAC,QAAQ;IAIlB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ;IAMzC,eAAe;CAoBhB"}
|
package/src/computation-view.js
CHANGED
|
@@ -7,7 +7,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
|
|
10
|
+
/* eslint-disable max-len */
|
|
11
|
+
/* eslint-disable valid-jsdoc */
|
|
12
|
+
import * as grok from 'datagrok-api/grok';
|
|
13
|
+
import * as DG from 'datagrok-api/dg';
|
|
11
14
|
import { FunctionView } from './function-view';
|
|
12
15
|
/**
|
|
13
16
|
* Base class for handling Compute models (see https://github.com/datagrok-ai/public/blob/master/help/compute/compute.md).
|
|
@@ -25,32 +28,38 @@ import { FunctionView } from './function-view';
|
|
|
25
28
|
* - notifications for changing inputs, completion of computations, etc: {@link onInputChanged}
|
|
26
29
|
* */
|
|
27
30
|
export class ComputationView extends FunctionView {
|
|
28
|
-
constructor(
|
|
29
|
-
super(
|
|
31
|
+
constructor(funccall) {
|
|
32
|
+
super(funccall);
|
|
33
|
+
this.jiraUrl = '';
|
|
30
34
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return ui.divV(Object.entries(outputs).map(([key, val]) => ui.span([`${key}: `, `${val}`])));
|
|
35
|
+
init(funccall) {
|
|
36
|
+
const _super = Object.create(null, {
|
|
37
|
+
init: { get: () => super.init }
|
|
38
|
+
});
|
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
_super.init.call(this, funccall);
|
|
41
|
+
this.buildRibbonMenu();
|
|
39
42
|
});
|
|
40
|
-
return panel.root;
|
|
41
43
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
buildRibbonMenu() {
|
|
45
|
+
this.ribbonMenu
|
|
46
|
+
.group('Model')
|
|
47
|
+
.group('Export')
|
|
48
|
+
.items(this.supportedExportFormats, (format) => __awaiter(this, void 0, void 0, function* () { return DG.Utils.download(this.exportFilename(format), yield this.export(format)); }))
|
|
49
|
+
.endGroup()
|
|
50
|
+
.items([
|
|
51
|
+
...this.jiraUrl ? ['Report a bug'] : [],
|
|
52
|
+
...this.helpUrl ? ['Get help'] : [],
|
|
53
|
+
], (item) => {
|
|
54
|
+
switch (item) {
|
|
55
|
+
case 'Report a bug':
|
|
56
|
+
window.open(`https://${this.jiraUrl}/CreateIssueDetails!init.jspa?pid=27326&issuetype=1&priority=3&assignee=AZakiev&summary=1651759426359:+user+bug+report&description=System+error:+${grok.shell.lastError}`);
|
|
57
|
+
break;
|
|
58
|
+
case 'Help':
|
|
59
|
+
window.open(this.helpUrl);
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
.endGroup();
|
|
53
63
|
}
|
|
54
|
-
;
|
|
55
64
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0YXRpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbXB1dGF0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGdDQUFnQztBQUNoQyxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBRTFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDOzs7Ozs7Ozs7Ozs7OztLQWNLO0FBQ0wsTUFBTSxPQUFPLGVBQWdCLFNBQVEsWUFBWTtJQUcvQyxZQUFZLFFBQXFCO1FBQy9CLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUhsQixZQUFPLEdBQVcsRUFBRSxDQUFDO0lBSXJCLENBQUM7SUFFYyxJQUFJLENBQUMsUUFBcUI7Ozs7O1lBQ3ZDLE9BQU0sSUFBSSxZQUFDLFFBQVEsRUFBRTtZQUVyQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztLQUFBO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxVQUFVO2FBQ1osS0FBSyxDQUFDLE9BQU8sQ0FBQzthQUNkLEtBQUssQ0FBQyxRQUFRLENBQUM7YUFDZixLQUFLLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQU8sTUFBYyxFQUFFLEVBQUUsZ0RBQUMsT0FBQSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEdBQUEsQ0FBQzthQUN2SSxRQUFRLEVBQUU7YUFDVixLQUFLLENBQUM7WUFDTCxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUEsQ0FBQyxDQUFDLEVBQUU7WUFDdEMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMsQ0FBQyxFQUFFO1NBQ25DLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUNsQixRQUFRLElBQUksRUFBRTtnQkFDZCxLQUFLLGNBQWM7b0JBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsT0FBTyxvSkFBb0osSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUMvTSxNQUFNO2dCQUNSLEtBQUssTUFBTTtvQkFDVCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFRLENBQUMsQ0FBQzthQUM1QjtRQUNILENBQUMsQ0FBQzthQUNELFFBQVEsRUFBRSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHtGdW5jdGlvblZpZXd9IGZyb20gJy4vZnVuY3Rpb24tdmlldyc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgaGFuZGxpbmcgQ29tcHV0ZSBtb2RlbHMgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZGF0YWdyb2stYWkvcHVibGljL2Jsb2IvbWFzdGVyL2hlbHAvY29tcHV0ZS9jb21wdXRlLm1kKS5cbiAqIEluIG1vc3QgY2FzZXMsIHRoZSBjb21wdXRhdGlvbiBpcyBhIHNpbXBsZSB7QGxpbmsgRnVuY31cbiAqIEV4dGVuZCBpdCBpbiBjYXNlcyB3aGVyZSBhIGJlaGF2aW9yIG9yIFVJIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHtAbGluayBGdW5jdGlvblZpZXd9IGlzIG5lZWRlZC5cbiAqXG4gKiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWxpdHkgb3V0LW9mLXRoZS1ib3gsIHdoZXJlIGVhY2ggc2VjdGlvbiBjb3VsZCBiZSBjdXN0b21pemVkOlxuICogLSBhIHN0cnVjdHVyZWQgd2F5IHRvIHJlcHJlc2VudCBpbnB1dCBhbmQgb3V0cHV0IHBhcmFtZXRlcnM6IHtAbGluayBwYXJhbWV0ZXJzfVxuICogLSBnZW5lcmljIHdheSB0byBnZW5lcmF0ZSBVSSBmb3IgaW5wdXRzLCBvdXRwdXRzLCBhbmQgaW50ZXJhY3Rpdml0eSAocnVubmluZyB0aGUgbW9kZWwsIGV0YylcbiAqICAgLSBwZXJzaXN0aW5nIGhpc3RvcmljYWwgcmVzdWx0cyB0byB0aGUgZGIgKHZpYSB7QGxpbmsgcGFyYW1ldGVyc30pXG4gKiAtIGV4cG9ydCAodG8gRXhjZWwgYW5kIFBERik6IHtAbGluayBleHBvcnR9XG4gKiAtIGVhc3kgbG9hZGluZyBvZiBoaXN0b3JpY2FsIHJ1bnNcbiAqIC0gcm91dGluZ1xuICogLSBlbnRlcmluZyB0aGUgcmVhbCwgbWVhc3VyZWQgKGFzIG9wcG9zZWQgdG8gcHJlZGljdGVkKSB2YWx1ZXMgbWFudWFsbHlcbiAqIC0gbm90aWZpY2F0aW9ucyBmb3IgY2hhbmdpbmcgaW5wdXRzLCBjb21wbGV0aW9uIG9mIGNvbXB1dGF0aW9ucywgZXRjOiB7QGxpbmsgb25JbnB1dENoYW5nZWR9XG4gKiAqL1xuZXhwb3J0IGNsYXNzIENvbXB1dGF0aW9uVmlldyBleHRlbmRzIEZ1bmN0aW9uVmlldyB7XG4gIGppcmFVcmw6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKGZ1bmNjYWxsOiBERy5GdW5jQ2FsbCkge1xuICAgIHN1cGVyKGZ1bmNjYWxsKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGluaXQoZnVuY2NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgc3VwZXIuaW5pdChmdW5jY2FsbCk7XG5cbiAgICB0aGlzLmJ1aWxkUmliYm9uTWVudSgpO1xuICB9XG5cbiAgYnVpbGRSaWJib25NZW51KCkge1xuICAgIHRoaXMucmliYm9uTWVudVxuICAgICAgLmdyb3VwKCdNb2RlbCcpXG4gICAgICAuZ3JvdXAoJ0V4cG9ydCcpXG4gICAgICAuaXRlbXModGhpcy5zdXBwb3J0ZWRFeHBvcnRGb3JtYXRzLCBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+IERHLlV0aWxzLmRvd25sb2FkKHRoaXMuZXhwb3J0RmlsZW5hbWUoZm9ybWF0KSwgYXdhaXQgdGhpcy5leHBvcnQoZm9ybWF0KSkpXG4gICAgICAuZW5kR3JvdXAoKVxuICAgICAgLml0ZW1zKFtcbiAgICAgICAgLi4udGhpcy5qaXJhVXJsID8gWydSZXBvcnQgYSBidWcnXTogW10sXG4gICAgICAgIC4uLnRoaXMuaGVscFVybCA/IFsnR2V0IGhlbHAnXTogW10sXG4gICAgICBdLCAoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoaXRlbSkge1xuICAgICAgICBjYXNlICdSZXBvcnQgYSBidWcnOlxuICAgICAgICAgIHdpbmRvdy5vcGVuKGBodHRwczovLyR7dGhpcy5qaXJhVXJsfS9DcmVhdGVJc3N1ZURldGFpbHMhaW5pdC5qc3BhP3BpZD0yNzMyNiZpc3N1ZXR5cGU9MSZwcmlvcml0eT0zJmFzc2lnbmVlPUFaYWtpZXYmc3VtbWFyeT0xNjUxNzU5NDI2MzU5Oit1c2VyK2J1ZytyZXBvcnQmZGVzY3JpcHRpb249U3lzdGVtK2Vycm9yOiske2dyb2suc2hlbGwubGFzdEVycm9yfWApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdIZWxwJzpcbiAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLmhlbHBVcmwhKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5lbmRHcm91cCgpO1xuICB9XG59XG4iXX0=
|
package/src/function-view.d.ts
CHANGED
|
@@ -1,41 +1,27 @@
|
|
|
1
1
|
import * as rxjs from 'rxjs';
|
|
2
2
|
import * as DG from 'datagrok-api/dg';
|
|
3
3
|
export declare class FunctionView extends DG.ViewBase {
|
|
4
|
+
constructor(funcCall: DG.FuncCall);
|
|
5
|
+
get func(): DG.Func;
|
|
4
6
|
onViewInitialized: rxjs.Subject<void>;
|
|
5
7
|
onInputChanged: rxjs.Subject<void>;
|
|
6
8
|
onComputationStarted: rxjs.Subject<DG.FuncCall>;
|
|
7
9
|
onComputationCompleted: rxjs.Subject<DG.FuncCall>;
|
|
8
10
|
onComputationSucceeded: rxjs.Subject<DG.FuncCall>;
|
|
9
11
|
onComputationError: rxjs.Subject<DG.FuncCall>;
|
|
10
|
-
constructor(func: DG.Func);
|
|
11
|
-
/** Override if custom initialization is required */
|
|
12
|
-
init(): void;
|
|
13
12
|
private _type;
|
|
14
13
|
get type(): string;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
renderInputPanel(): Promise<void>;
|
|
27
|
-
/** Output panel for viewing results. On the right side by default */
|
|
28
|
-
outputPanel: HTMLElement;
|
|
29
|
-
/** Override if custom ouptut panel is required */
|
|
30
|
-
buildOutputPanel(): HTMLElement;
|
|
31
|
-
/** Call to update output panel */
|
|
32
|
-
renderOutputPanel(): Promise<void>;
|
|
33
|
-
/** Panel for exporting functions file */
|
|
34
|
-
exportPanel: HTMLElement;
|
|
35
|
-
/** Override if custom export panel is required */
|
|
36
|
-
buildExportPanel(): HTMLElement;
|
|
37
|
-
/** Call to update export panel */
|
|
38
|
-
renderExportPanel(): void;
|
|
14
|
+
readonly context: DG.Context;
|
|
15
|
+
preparedCall: DG.FuncCall | null;
|
|
16
|
+
lastCall?: DG.FuncCall | null;
|
|
17
|
+
_inputFields: Map<string, DG.InputBase>;
|
|
18
|
+
init(funcCall: DG.FuncCall): Promise<void>;
|
|
19
|
+
build(): HTMLElement;
|
|
20
|
+
buildInputBlock(): HTMLElement;
|
|
21
|
+
buildOutputBlock(): HTMLElement;
|
|
22
|
+
buildHistoryBlock(): HTMLElement;
|
|
23
|
+
/** Override to create a custom input control. */
|
|
24
|
+
buildRibbonPanels(): HTMLElement[][];
|
|
39
25
|
/** Filename for exported files. Override for custom names */
|
|
40
26
|
exportFilename(format: string): string;
|
|
41
27
|
/** Override to provide supported export formats.
|
|
@@ -46,50 +32,37 @@ export declare class FunctionView extends DG.ViewBase {
|
|
|
46
32
|
get supportedExportExtensions(): Record<string, string>;
|
|
47
33
|
/** Override to provide custom export. */
|
|
48
34
|
export(format: string): Promise<Blob>;
|
|
49
|
-
/** Panel to deal with historical runs */
|
|
50
|
-
historyPanel: HTMLElement;
|
|
51
|
-
/** Override to provide custom historical runs UI */
|
|
52
|
-
buildHistoryPanel(): HTMLElement;
|
|
53
|
-
/** Call to update history panel */
|
|
54
|
-
renderHistoryPanel(): void;
|
|
55
35
|
/** Saves the computation results to the historical results, returns its id. See also {@link loadRun}. */
|
|
56
36
|
saveRun(call: DG.FuncCall): Promise<string>;
|
|
57
37
|
/** Loads the specified historical results. See also {@link saveRun}. */
|
|
58
38
|
loadRun(runId: string): Promise<DG.FuncCall>;
|
|
59
39
|
/** Loads all the function call of this function. */
|
|
60
40
|
pullRuns(): Promise<DG.FuncCall[]>;
|
|
61
|
-
|
|
62
|
-
prepare(): Promise<void>;
|
|
63
|
-
/** Override to customize ribbon panels */
|
|
64
|
-
buildRibbonPanels(): Promise<HTMLElement[][]>;
|
|
65
|
-
/** Call to update ribbon panels */
|
|
66
|
-
renderRibbonPanels(): Promise<void>;
|
|
67
|
-
/** Builds the complete view. Override it if completely custom implementation is needed,
|
|
68
|
-
* otherwise consider overriding {@link buildInputPanel} and/or {@link buildOutputPanel} */
|
|
69
|
-
build(): HTMLElement;
|
|
70
|
-
render(): Promise<void>;
|
|
71
|
-
/** Override to create a custom input control. */
|
|
72
|
-
buildRibbonPanel(): HTMLElement;
|
|
41
|
+
clearResults(switchToOutput?: boolean): void;
|
|
73
42
|
run(): Promise<void>;
|
|
74
43
|
compute(call: DG.FuncCall): Promise<void>;
|
|
44
|
+
outputParametersToView(call: DG.FuncCall): void;
|
|
45
|
+
renderRunSection(call: DG.FuncCall): HTMLElement;
|
|
75
46
|
showInputs: boolean;
|
|
76
47
|
singleDfParam: boolean;
|
|
77
48
|
paramViewers: Map<string, DG.Viewer[]>;
|
|
78
49
|
resultsTabControl: DG.TabControl | undefined;
|
|
79
50
|
resultTabs: Map<String, HTMLElement>;
|
|
80
51
|
resultsDiv: HTMLElement;
|
|
52
|
+
controlsRoot: HTMLDivElement;
|
|
53
|
+
resultsRoot: HTMLDivElement;
|
|
54
|
+
historyRoot: HTMLDivElement;
|
|
81
55
|
inputsDiv: HTMLDivElement;
|
|
82
|
-
inputFieldsToParameters(call: DG.FuncCall): void;
|
|
83
|
-
/** helper methods */
|
|
84
56
|
appendResultDataFrame(param: DG.FuncCallParam, options?: {
|
|
85
57
|
caption?: string;
|
|
86
58
|
category?: string;
|
|
87
59
|
height?: number;
|
|
88
60
|
}): void;
|
|
61
|
+
appendResultScalar(param: DG.FuncCallParam, options: {
|
|
62
|
+
caption?: string;
|
|
63
|
+
category: string;
|
|
64
|
+
height?: number;
|
|
65
|
+
}): void;
|
|
89
66
|
_appendResultElement(d: HTMLElement, category?: string): void;
|
|
90
|
-
/** helper methods */
|
|
91
|
-
buildInputForm(call: DG.FuncCall): HTMLElement;
|
|
92
|
-
clearResults(clearTabs?: boolean, showOutput?: boolean): void;
|
|
93
|
-
outputParametersToView(call: DG.FuncCall): void;
|
|
94
67
|
}
|
|
95
68
|
//# sourceMappingURL=function-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"function-view.d.ts","sourceRoot":"","sources":["function-view.ts"],"names":[],"mappings":"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"}
|
package/src/function-view.js
CHANGED
|
@@ -7,17 +7,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
/* eslint-disable max-len */
|
|
11
10
|
/* eslint-disable valid-jsdoc */
|
|
11
|
+
/* eslint-disable max-len */
|
|
12
12
|
import wu from 'wu';
|
|
13
13
|
import $ from 'cash-dom';
|
|
14
|
-
import * as rxjs from 'rxjs';
|
|
15
14
|
import * as grok from 'datagrok-api/grok';
|
|
15
|
+
import * as rxjs from 'rxjs';
|
|
16
16
|
import * as ui from 'datagrok-api/ui';
|
|
17
17
|
import * as DG from 'datagrok-api/dg';
|
|
18
18
|
import ExcelJS from 'exceljs';
|
|
19
19
|
export class FunctionView extends DG.ViewBase {
|
|
20
|
-
constructor(
|
|
20
|
+
constructor(funcCall) {
|
|
21
21
|
super();
|
|
22
22
|
this.onViewInitialized = new rxjs.Subject();
|
|
23
23
|
this.onInputChanged = new rxjs.Subject();
|
|
@@ -26,99 +26,114 @@ export class FunctionView extends DG.ViewBase {
|
|
|
26
26
|
this.onComputationSucceeded = new rxjs.Subject(); // emitted anyway if computation ended properly
|
|
27
27
|
this.onComputationError = new rxjs.Subject(); // emitted anyway if computation ended with error
|
|
28
28
|
this._type = 'function';
|
|
29
|
-
this.lastCall = null;
|
|
30
29
|
this._inputFields = new Map();
|
|
31
|
-
/** Input panel for form, run button, etc. On the left side by default */
|
|
32
|
-
this.inputPanel = ui.div();
|
|
33
|
-
/** Output panel for viewing results. On the right side by default */
|
|
34
|
-
this.outputPanel = ui.div();
|
|
35
|
-
/** Panel for exporting functions file */
|
|
36
|
-
this.exportPanel = ui.div();
|
|
37
|
-
/** Panel to deal with historical runs */
|
|
38
|
-
this.historyPanel = ui.div();
|
|
39
30
|
this.showInputs = false;
|
|
40
31
|
this.singleDfParam = false;
|
|
41
32
|
this.paramViewers = new Map();
|
|
42
33
|
this.resultTabs = new Map();
|
|
43
34
|
this.resultsDiv = ui.panel([], 'grok-func-results');
|
|
35
|
+
this.controlsRoot = ui.box();
|
|
36
|
+
this.resultsRoot = ui.box();
|
|
37
|
+
this.historyRoot = ui.divV([], { style: { 'justify-content': 'center' } });
|
|
44
38
|
this.inputsDiv = ui.panel([], 'grok-func-results');
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
init() {
|
|
49
|
-
var _a;
|
|
50
|
-
(_a = this.lastCall) !== null && _a !== void 0 ? _a : (this.lastCall = this.func.prepare());
|
|
51
|
-
this.lastCall.aux['view'] = this;
|
|
52
|
-
this.lastCall.context = DG.Context.cloneDefault();
|
|
53
|
-
this.singleDfParam = wu(this.func.outputs).filter((p) => p.propertyType == DG.TYPE.DATA_FRAME)
|
|
54
|
-
.toArray().length == 1;
|
|
55
|
-
for (const inParam of wu(this.lastCall.inputParams.values())
|
|
56
|
-
.filter((p) => p.property.propertyType == DG.TYPE.DATA_FRAME && p.property.options['viewer'] != null)) {
|
|
57
|
-
this.showInputs = true;
|
|
58
|
-
const self = this;
|
|
59
|
-
this.subs.push(inParam.onChanged.subscribe(function (param) {
|
|
60
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
self.clearResults(true, false);
|
|
62
|
-
param.processOutput();
|
|
63
|
-
self.appendResultDataFrame(param, { height: (self.singleDfParam && !grok.shell.windows.presentationMode) ? 600 : 400,
|
|
64
|
-
category: 'INPUT' });
|
|
65
|
-
});
|
|
66
|
-
}));
|
|
67
|
-
this.renderExportPanel();
|
|
68
|
-
this.renderHistoryPanel();
|
|
69
|
-
this.renderRibbonPanels();
|
|
70
|
-
this.onComputationSucceeded.subscribe(() => __awaiter(this, void 0, void 0, function* () {
|
|
71
|
-
yield this.renderOutputPanel();
|
|
72
|
-
}));
|
|
73
|
-
this.onComputationError.subscribe(() => {
|
|
74
|
-
grok.shell.error('Computation failed');
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
this.root.appendChild(this.build());
|
|
78
|
-
this.name = this.func.friendlyName;
|
|
39
|
+
this.preparedCall = funcCall;
|
|
40
|
+
this.context = DG.Context.cloneDefault();
|
|
41
|
+
this.controlsRoot.style.maxWidth = '370px';
|
|
79
42
|
this.box = true;
|
|
80
43
|
}
|
|
44
|
+
get func() {
|
|
45
|
+
return this.preparedCall.func;
|
|
46
|
+
}
|
|
81
47
|
get type() {
|
|
82
48
|
return this._type;
|
|
83
49
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
/** Override to build completely custom input block (the one with inputs, usually on the left).
|
|
87
|
-
* If only specific field, consider overriding {@link buildCustomInputs}. */
|
|
88
|
-
buildInputPanel() {
|
|
89
|
-
return ui.div([this.buildInputForm(this.lastCall)]);
|
|
90
|
-
}
|
|
91
|
-
/** Call to update input panel */
|
|
92
|
-
renderInputPanel() {
|
|
50
|
+
init(funcCall) {
|
|
51
|
+
var _a;
|
|
93
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
53
|
+
(_a = this.preparedCall) !== null && _a !== void 0 ? _a : (this.preparedCall = funcCall);
|
|
54
|
+
/*
|
|
55
|
+
var meta = EntityMeta.forEntity(f);
|
|
56
|
+
func = await meta.refresh(f);
|
|
57
|
+
*/
|
|
58
|
+
this.preparedCall.aux['view'] = this;
|
|
59
|
+
this.preparedCall.context = this.context;
|
|
60
|
+
this.singleDfParam = wu(this.func.outputs).filter((p) => p.propertyType == DG.TYPE.DATA_FRAME)
|
|
61
|
+
.toArray().length == 1;
|
|
62
|
+
//var fullRunSection = div();
|
|
63
|
+
//var fullDiv = div('ui-panel', [getFullSection(func, call, fullRunSection)]);
|
|
64
|
+
//htmlSetDisplay(fullDiv, false);
|
|
65
|
+
for (const inParam of wu(this.preparedCall.inputParams.values())
|
|
66
|
+
.filter((p) => p.property.propertyType == DG.TYPE.DATA_FRAME && p.property.options['viewer'] != null)) {
|
|
67
|
+
this.showInputs = true;
|
|
68
|
+
const self = this;
|
|
69
|
+
this.subs.push(inParam.onChanged.subscribe(function (param) {
|
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
71
|
+
self.clearResults(false);
|
|
72
|
+
param.processOutput();
|
|
73
|
+
self.appendResultDataFrame(param, { height: (self.singleDfParam && !grok.shell.windows.presentationMode) ? 600 : 400,
|
|
74
|
+
category: 'INPUT' });
|
|
75
|
+
});
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
//this.controlsRoot.appendChild(fullDiv);
|
|
79
|
+
/*advancedModeSwitch.onChanged.listen((_) {
|
|
80
|
+
if (advancedModeSwitch.value)
|
|
81
|
+
fullRunSection.append(runSection);
|
|
82
|
+
else
|
|
83
|
+
funcDiv.append(runSection);
|
|
84
|
+
htmlSetDisplay(fullDiv, advancedModeSwitch.value);
|
|
85
|
+
htmlSetDisplay(funcDiv, !advancedModeSwitch.value);
|
|
86
|
+
});*/
|
|
87
|
+
//setRibbon();
|
|
88
|
+
this.root.appendChild(this.build());
|
|
89
|
+
/*
|
|
90
|
+
Routing.setPath(this.path, f.name, true);
|
|
91
|
+
*/
|
|
92
|
+
this.name = this.func.friendlyName;
|
|
97
93
|
});
|
|
98
94
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
95
|
+
build() {
|
|
96
|
+
const inputBlock = this.buildInputBlock();
|
|
97
|
+
const outputBlock = this.buildOutputBlock();
|
|
98
|
+
const ribbonPanels = this.buildRibbonPanels();
|
|
99
|
+
const historyBlock = this.buildHistoryBlock();
|
|
100
|
+
return ui.splitH([inputBlock, outputBlock]);
|
|
101
|
+
}
|
|
102
|
+
buildInputBlock() {
|
|
103
|
+
const funcDiv = ui.div([this.renderRunSection(this.preparedCall)], 'ui-div');
|
|
104
|
+
this.controlsRoot.innerHTML = '';
|
|
105
|
+
this.controlsRoot.appendChild(funcDiv);
|
|
106
|
+
return this.controlsRoot;
|
|
107
|
+
}
|
|
108
|
+
buildOutputBlock() {
|
|
109
|
+
this.resultsRoot.innerHTML = '';
|
|
110
|
+
this.resultsRoot.appendChild(this.resultsDiv);
|
|
111
|
+
return this.resultsRoot;
|
|
112
|
+
}
|
|
113
|
+
buildHistoryBlock() {
|
|
114
|
+
const newHistoryBlock = ui.iconFA('history', () => {
|
|
115
|
+
this.pullRuns().then((historicalRuns) => __awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
const menu = DG.Menu.popup();
|
|
117
|
+
let i = 0;
|
|
118
|
+
for (const run of historicalRuns) {
|
|
119
|
+
//@ts-ignore
|
|
120
|
+
menu.item(`${run.func.friendlyName} — ${i}`, () => __awaiter(this, void 0, void 0, function* () { return this.historicalRunService.loadRun(run.id); }));
|
|
121
|
+
i++;
|
|
122
|
+
}
|
|
123
|
+
menu.show();
|
|
124
|
+
}));
|
|
111
125
|
});
|
|
126
|
+
this.historyRoot.innerHTML = '';
|
|
127
|
+
this.historyRoot.append(newHistoryBlock);
|
|
128
|
+
return newHistoryBlock;
|
|
112
129
|
}
|
|
113
|
-
/** Override
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.exportPanel.replaceWith(newExportPanel);
|
|
121
|
-
this.exportPanel = newExportPanel;
|
|
130
|
+
/** Override to create a custom input control. */
|
|
131
|
+
buildRibbonPanels() {
|
|
132
|
+
const newRibbonPanels = [...this.getRibbonPanels(), [ui.divH([
|
|
133
|
+
ui.comboPopup(ui.iconFA('arrow-to-bottom'), this.supportedExportFormats, (format) => __awaiter(this, void 0, void 0, function* () { return DG.Utils.download(this.exportFilename(format), yield this.export(format)); })),
|
|
134
|
+
])]];
|
|
135
|
+
this.setRibbonPanels(newRibbonPanels);
|
|
136
|
+
return newRibbonPanels;
|
|
122
137
|
}
|
|
123
138
|
/** Filename for exported files. Override for custom names */
|
|
124
139
|
exportFilename(format) {
|
|
@@ -188,27 +203,6 @@ export class FunctionView extends DG.ViewBase {
|
|
|
188
203
|
return new Blob([buffer], { type: BLOB_TYPE });
|
|
189
204
|
});
|
|
190
205
|
}
|
|
191
|
-
/** Override to provide custom historical runs UI */
|
|
192
|
-
buildHistoryPanel() {
|
|
193
|
-
return ui.iconFA('history', () => {
|
|
194
|
-
this.pullRuns().then((historicalRuns) => __awaiter(this, void 0, void 0, function* () {
|
|
195
|
-
const menu = DG.Menu.popup();
|
|
196
|
-
let i = 0;
|
|
197
|
-
for (const run of historicalRuns) {
|
|
198
|
-
//@ts-ignore
|
|
199
|
-
menu.item(`${run.func.friendlyName} — ${i}`, () => __awaiter(this, void 0, void 0, function* () { return this.historicalRunService.loadRun(run.id); }));
|
|
200
|
-
i++;
|
|
201
|
-
}
|
|
202
|
-
menu.show();
|
|
203
|
-
}));
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
/** Call to update history panel */
|
|
207
|
-
renderHistoryPanel() {
|
|
208
|
-
const newHistoryPanel = this.buildHistoryPanel();
|
|
209
|
-
this.historyPanel.replaceWith(newHistoryPanel);
|
|
210
|
-
this.historyPanel = newHistoryPanel;
|
|
211
|
-
}
|
|
212
206
|
/** Saves the computation results to the historical results, returns its id. See also {@link loadRun}. */
|
|
213
207
|
saveRun(call) {
|
|
214
208
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -230,75 +224,76 @@ export class FunctionView extends DG.ViewBase {
|
|
|
230
224
|
/* await grok.dapi.functions.calls.list();*/
|
|
231
225
|
});
|
|
232
226
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
this.
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
this.
|
|
260
|
-
return ui.divH([this.inputPanel, this.outputPanel]);
|
|
261
|
-
}
|
|
262
|
-
render() {
|
|
263
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
264
|
-
const newRoot = this.build();
|
|
265
|
-
this.root.replaceWith(newRoot);
|
|
266
|
-
this.root = newRoot;
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
/** Override to create a custom input control. */
|
|
270
|
-
buildRibbonPanel() {
|
|
271
|
-
return ui.divH([
|
|
272
|
-
ui.button('RUN', () => { }),
|
|
273
|
-
ui.comboPopup('Export', this.supportedExportFormats, (format) => this.export(format)),
|
|
274
|
-
]);
|
|
227
|
+
clearResults(switchToOutput = true) {
|
|
228
|
+
const categories = [];
|
|
229
|
+
// resultTabs.clear();
|
|
230
|
+
if (this.showInputs) {
|
|
231
|
+
categories.push('INPUT');
|
|
232
|
+
this.resultTabs.set('INPUT', this.inputsDiv);
|
|
233
|
+
}
|
|
234
|
+
for (const p of this.func.outputs) {
|
|
235
|
+
if (categories.includes(p.category))
|
|
236
|
+
continue;
|
|
237
|
+
categories.push(p.category);
|
|
238
|
+
}
|
|
239
|
+
if ((categories.length > 1 || (categories.length == 1 && categories[0] != 'Misc'))) {
|
|
240
|
+
this.resultsTabControl = DG.TabControl.create();
|
|
241
|
+
for (const c of categories) {
|
|
242
|
+
if (!this.resultTabs.has(c))
|
|
243
|
+
this.resultTabs.set(c, ui.div([], 'ui-panel, grok-func-results'));
|
|
244
|
+
let name = c;
|
|
245
|
+
if (this.showInputs && categories.length == 2 && c == 'Misc')
|
|
246
|
+
name = 'OUTPUT';
|
|
247
|
+
this.resultsTabControl.addPane(name, () => { var _a; return (_a = this.resultTabs.get(c)) !== null && _a !== void 0 ? _a : ui.div(); });
|
|
248
|
+
}
|
|
249
|
+
if (categories.length > 1 && this.showInputs && switchToOutput)
|
|
250
|
+
this.resultsTabControl.currentPane = this.resultsTabControl.panes[1];
|
|
251
|
+
this.resultsDiv = this.resultsTabControl.root;
|
|
252
|
+
}
|
|
253
|
+
this.buildOutputBlock();
|
|
275
254
|
}
|
|
276
255
|
run() {
|
|
277
256
|
return __awaiter(this, void 0, void 0, function* () {
|
|
278
|
-
|
|
279
|
-
if (!this.lastCall)
|
|
280
|
-
throw new Error('Func is not prepared!');
|
|
281
|
-
// this.inputFieldsToParameters(this.lastCall);
|
|
257
|
+
this.lastCall = this.preparedCall;
|
|
282
258
|
try {
|
|
283
259
|
yield this.compute(this.lastCall);
|
|
284
260
|
}
|
|
285
261
|
catch (e) {
|
|
286
|
-
this.onComputationError.next(this.lastCall);
|
|
262
|
+
// this.onComputationError.next(this.lastCall);
|
|
287
263
|
}
|
|
288
|
-
|
|
289
|
-
this.
|
|
290
|
-
// this.outputParametersToView(this.lastCall);
|
|
264
|
+
this.onComputationSucceeded.next(this.lastCall);
|
|
265
|
+
this.outputParametersToView(this.lastCall);
|
|
291
266
|
});
|
|
292
267
|
}
|
|
293
268
|
compute(call) {
|
|
294
269
|
return __awaiter(this, void 0, void 0, function* () {
|
|
295
|
-
|
|
296
|
-
this.lastCall = yield call.call(true, undefined, { processed: true });
|
|
297
|
-
ui.setUpdateIndicator(this.outputPanel, false);
|
|
270
|
+
yield call.call(true, undefined, { processed: true });
|
|
298
271
|
});
|
|
299
272
|
}
|
|
300
|
-
|
|
301
|
-
|
|
273
|
+
outputParametersToView(call) {
|
|
274
|
+
this.clearResults(true);
|
|
275
|
+
for (const p of call.outputParams.values()) {
|
|
276
|
+
p.processOutput();
|
|
277
|
+
if (p.property.propertyType == DG.TYPE.DATA_FRAME && p.value != null)
|
|
278
|
+
this.appendResultDataFrame(p, { caption: p.property.name, category: p.property.category });
|
|
279
|
+
else
|
|
280
|
+
this.appendResultScalar(p, { caption: p.property.name, category: p.property.category });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
renderRunSection(call) {
|
|
284
|
+
return ui.wait(() => __awaiter(this, void 0, void 0, function* () {
|
|
285
|
+
const runButton = ui.bigButton('Run', () => __awaiter(this, void 0, void 0, function* () {
|
|
286
|
+
call.aux['view'] = this.dart;
|
|
287
|
+
yield this.run();
|
|
288
|
+
}));
|
|
289
|
+
const editor = ui.div();
|
|
290
|
+
const inputs = yield call.buildEditor(editor, { condensed: true });
|
|
291
|
+
editor.classList.add('ui-form');
|
|
292
|
+
const buttons = ui.divH([this.historyRoot, runButton], { style: { 'justify-content': 'space-between' } });
|
|
293
|
+
editor.appendChild(buttons);
|
|
294
|
+
return editor;
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
302
297
|
appendResultDataFrame(param, options) {
|
|
303
298
|
var _a, _b, _c, _d, _e;
|
|
304
299
|
const df = param.value;
|
|
@@ -393,68 +388,23 @@ export class FunctionView extends DG.ViewBase {
|
|
|
393
388
|
this._appendResultElement(wrapper, options === null || options === void 0 ? void 0 : options.category);
|
|
394
389
|
}
|
|
395
390
|
}
|
|
391
|
+
appendResultScalar(param, options) {
|
|
392
|
+
var _a, _b;
|
|
393
|
+
if (this.resultsTabControl) {
|
|
394
|
+
this.resultsTabControl.getPane(options.category).content.innerHTML = '';
|
|
395
|
+
this.resultsTabControl.getPane(options.category).content.append(ui.span([`${(_a = options.caption) !== null && _a !== void 0 ? _a : param.name}: `, `${param.value}`]));
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
this.resultsDiv.innerHTML = '';
|
|
399
|
+
this.resultsDiv.append(ui.span([`${(_b = options.caption) !== null && _b !== void 0 ? _b : param.name}: `, `${param.value}`]));
|
|
400
|
+
}
|
|
401
|
+
}
|
|
396
402
|
_appendResultElement(d, category) {
|
|
397
403
|
if (category != null && this.resultsTabControl != undefined && this.resultTabs.get(category) != null)
|
|
398
404
|
this.resultTabs.get(category).appendChild(d);
|
|
399
405
|
else
|
|
400
406
|
this.resultsDiv.appendChild(d);
|
|
401
407
|
}
|
|
402
|
-
/** helper methods */
|
|
403
|
-
buildInputForm(call) {
|
|
404
|
-
return ui.wait(() => __awaiter(this, void 0, void 0, function* () {
|
|
405
|
-
const runButton = ui.bigButton('Run', () => __awaiter(this, void 0, void 0, function* () {
|
|
406
|
-
call.aux['view'] = this.dart;
|
|
407
|
-
yield this.run();
|
|
408
|
-
}));
|
|
409
|
-
const editor = ui.div();
|
|
410
|
-
const inputs = yield call.buildEditor(editor, { condensed: true });
|
|
411
|
-
editor.appendChild(ui.buttonsInput([runButton]));
|
|
412
|
-
for (const input of inputs)
|
|
413
|
-
this._inputFields.set(input.property.name, input);
|
|
414
|
-
return editor;
|
|
415
|
-
}));
|
|
416
|
-
}
|
|
417
|
-
;
|
|
418
|
-
clearResults(clearTabs = true, showOutput = true) {
|
|
419
|
-
const categories = [];
|
|
420
|
-
// resultTabs.clear();
|
|
421
|
-
if (this.showInputs) {
|
|
422
|
-
categories.push('INPUT');
|
|
423
|
-
this.resultTabs.set('INPUT', this.inputsDiv);
|
|
424
|
-
}
|
|
425
|
-
for (const p of this.func.outputs) {
|
|
426
|
-
if (categories.includes(p.category))
|
|
427
|
-
continue;
|
|
428
|
-
categories.push(p.category);
|
|
429
|
-
}
|
|
430
|
-
if (clearTabs && (categories.length > 1 || (categories.length == 1 && categories[0] != 'Misc'))) {
|
|
431
|
-
this.resultsTabControl = DG.TabControl.create();
|
|
432
|
-
for (const c of categories) {
|
|
433
|
-
if (!this.resultTabs.has(c))
|
|
434
|
-
this.resultTabs.set(c, ui.div([], 'ui-panel,grok-func-results'));
|
|
435
|
-
let name = c;
|
|
436
|
-
if (this.showInputs && categories.length == 2 && c == 'Misc')
|
|
437
|
-
name = 'OUTPUT';
|
|
438
|
-
this.resultsTabControl.addPane(name, () => { var _a; return (_a = this.resultTabs.get(c)) !== null && _a !== void 0 ? _a : ui.div(); });
|
|
439
|
-
}
|
|
440
|
-
if (categories.length > 1 && this.showInputs && showOutput)
|
|
441
|
-
this.resultsTabControl.currentPane = this.resultsTabControl.panes[1];
|
|
442
|
-
this.resultsDiv = this.resultsTabControl.root;
|
|
443
|
-
}
|
|
444
|
-
else {
|
|
445
|
-
this.resultsDiv = ui.panel([], 'grok-func-results');
|
|
446
|
-
this.resultsTabControl = undefined;
|
|
447
|
-
}
|
|
448
|
-
this.buildOutputPanel();
|
|
449
|
-
}
|
|
450
|
-
outputParametersToView(call) {
|
|
451
|
-
this.clearResults(false, true);
|
|
452
|
-
for (const [, p] of call.outputParams) {
|
|
453
|
-
p.processOutput();
|
|
454
|
-
if (p.property.propertyType == DG.TYPE.DATA_FRAME && p.value != null)
|
|
455
|
-
this.appendResultDataFrame(p, { caption: p.property.name, category: p.property.category });
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
408
|
}
|
|
459
409
|
const getSheetName = (name, direction) => {
|
|
460
410
|
const idealName = `${direction} - ${name}`;
|
|
@@ -483,4 +433,4 @@ const dfToSheet = (sheet, df) => {
|
|
|
483
433
|
Math.max(...df.columns.byIndex(i).categories.map((category) => category.toString().length), df.columns.byIndex(i).name.length) * 1.2;
|
|
484
434
|
}
|
|
485
435
|
};
|
|
486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUU5QixNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxRQUFRO0lBUzNDLFlBQVksSUFBYTtRQUN2QixLQUFLLEVBQUUsQ0FBQztRQVRWLHNCQUFpQixHQUF1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzRCxtQkFBYyxHQUF1QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV4RCx5QkFBb0IsR0FBOEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQywrQkFBK0I7UUFDckcsMkJBQXNCLEdBQThCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsc0RBQXNEO1FBQzlILDJCQUFzQixHQUE4QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLCtDQUErQztRQUN2SCx1QkFBa0IsR0FBOEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxpREFBaUQ7UUFnRDdHLFVBQUssR0FBVyxVQUFVLENBQUM7UUFLNUIsYUFBUSxHQUF1QixJQUFJLENBQUM7UUFDbkMsaUJBQVksR0FBOEIsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFL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QUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ3hCLElBQUksQ0FBQyxHQUFHLENBQ04sR0FBSSxFQUFFLENBQUMsT0FBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUNuRyxFQUFFLENBQUMsT0FBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDckQsR0FBRyxHQUFHLENBQUM7S0FDWDtBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0ICQgZnJvbSAnY2FzaC1kb20nO1xuaW1wb3J0ICogYXMgcnhqcyBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVmlldyBleHRlbmRzIERHLlZpZXdCYXNlIHtcbiAgb25WaWV3SW5pdGlhbGl6ZWQ6IHJ4anMuU3ViamVjdDx2b2lkPiA9IG5ldyByeGpzLlN1YmplY3QoKTtcbiAgb25JbnB1dENoYW5nZWQ6IHJ4anMuU3ViamVjdDx2b2lkPiA9IG5ldyByeGpzLlN1YmplY3QoKTtcblxuICBvbkNvbXB1dGF0aW9uU3RhcnRlZDogcnhqcy5TdWJqZWN0PERHLkZ1bmNDYWxsPiA9IG5ldyByeGpzLlN1YmplY3QoKTsgLy8gZW1pdHRlZCBvbiBjb21wdXRhdGlvbiBzdGFydFxuICBvbkNvbXB1dGF0aW9uQ29tcGxldGVkOiByeGpzLlN1YmplY3Q8REcuRnVuY0NhbGw+ID0gbmV3IHJ4anMuU3ViamVjdCgpOyAvLyBlbWl0dGVkIGFueXdheSBpZiBjb21wdXRhdGlvbiBlbmRlZCBwcm9wZXJseSBvciBub3RcbiAgb25Db21wdXRhdGlvblN1Y2NlZWRlZDogcnhqcy5TdWJqZWN0PERHLkZ1bmNDYWxsPiA9IG5ldyByeGpzLlN1YmplY3QoKTsgLy8gZW1pdHRlZCBhbnl3YXkgaWYgY29tcHV0YXRpb24gZW5kZWQgcHJvcGVybHlcbiAgb25Db21wdXRhdGlvbkVycm9yOiByeGpzLlN1YmplY3Q8REcuRnVuY0NhbGw+ID0gbmV3IHJ4anMuU3ViamVjdCgpOyAvLyBlbWl0dGVkIGFueXdheSBpZiBjb21wdXRhdGlvbiBlbmRlZCB3aXRoIGVycm9yXG5cbiAgY29uc3RydWN0b3IoZnVuYzogREcuRnVuYykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5mdW5jID0gZnVuYztcbiAgfVxuXG4gIC8qKiBPdmVycmlkZSBpZiBjdXN0b20gaW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQgKi9cbiAgaW5pdCgpIHtcbiAgICB0aGlzLmxhc3RDYWxsID8/PSB0aGlzLmZ1bmMucHJlcGFyZSgpO1xuICAgIHRoaXMubGFzdENhbGwuYXV4Wyd2aWV3J10gPSB0aGlzO1xuICAgIHRoaXMubGFzdENhbGwuY29udGV4dCA9IERHLkNvbnRleHQuY2xvbmVEZWZhdWx0KCk7XG5cbiAgICB0aGlzLnNpbmdsZURmUGFyYW0gPSB3dSh0aGlzLmZ1bmMub3V0cHV0cykuZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUpXG4gICAgICAudG9BcnJheSgpLmxlbmd0aCA9PSAxO1xuXG4gICAgZm9yIChjb25zdCBpblBhcmFtIG9mIHd1KHRoaXMubGFzdENhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigocDogREcuRnVuY0NhbGxQYXJhbSkgPT5cbiAgICAgICAgcC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAucHJvcGVydHkub3B0aW9uc1sndmlld2VyJ10gIT0gbnVsbCkpIHtcbiAgICAgIHRoaXMuc2hvd0lucHV0cyA9IHRydWU7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMuc3Vicy5wdXNoKGluUGFyYW0ub25DaGFuZ2VkLnN1YnNjcmliZShhc3luYyBmdW5jdGlvbihwYXJhbTogREcuRnVuY0NhbGxQYXJhbSkge1xuICAgICAgICBzZWxmLmNsZWFyUmVzdWx0cyh0cnVlLCBmYWxzZSk7XG4gICAgICAgIHBhcmFtLnByb2Nlc3NPdXRwdXQoKTtcblxuICAgICAgICBzZWxmLmFwcGVuZFJlc3VsdERhdGFGcmFtZShwYXJhbSxcbiAgICAgICAgICB7aGVpZ2h0OiAoc2VsZi5zaW5nbGVEZlBhcmFtICYmICFncm9rLnNoZWxsLndpbmRvd3MucHJlc2VudGF0aW9uTW9kZSkgPyA2MDAgOiA0MDAsXG4gICAgICAgICAgICBjYXRlZ29yeTogJ0lOUFVUJ30pO1xuICAgICAgfSkpO1xuXG4gICAgICB0aGlzLnJlbmRlckV4cG9ydFBhbmVsKCk7XG4gICAgICB0aGlzLnJlbmRlckhpc3RvcnlQYW5lbCgpO1xuICAgICAgdGhpcy5yZW5kZXJSaWJib25QYW5lbHMoKTtcblxuICAgICAgdGhpcy5vbkNvbXB1dGF0aW9uU3VjY2VlZGVkLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVuZGVyT3V0cHV0UGFuZWwoKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm9uQ29tcHV0YXRpb25FcnJvci5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBncm9rLnNoZWxsLmVycm9yKCdDb21wdXRhdGlvbiBmYWlsZWQnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkKCkpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuZnVuYy5mcmllbmRseU5hbWU7XG4gICAgdGhpcy5ib3ggPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gJ2Z1bmN0aW9uJztcbiAgcHVibGljIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgcHVibGljIGZ1bmM6IERHLkZ1bmM7XG4gIHB1YmxpYyBsYXN0Q2FsbDogREcuRnVuY0NhbGwgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfaW5wdXRGaWVsZHM6IE1hcDxzdHJpbmcsIERHLklucHV0QmFzZT4gPSBuZXcgTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPigpO1xuXG4gIC8qKiBBbGwgaW5wdXRzIHRoYXQgYXJlIGJvdW5kIHRvIGZpZWxkcyAqL1xuICBnZXQgaW5wdXRGaWVsZHMoKTogTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPiB7cmV0dXJuIHRoaXMuX2lucHV0RmllbGRzO31cblxuICAvKiogSW5wdXQgcGFuZWwgZm9yIGZvcm0sIHJ1biBidXR0b24sIGV0Yy4gT24gdGhlIGxlZnQgc2lkZSBieSBkZWZhdWx0ICovXG4gIGlucHV0UGFuZWwgPSB1aS5kaXYoKSBhcyBIVE1MRWxlbWVudDtcblxuICAvKiogT3ZlcnJpZGUgdG8gYnVpbGQgY29tcGxldGVseSBjdXN0b20gaW5wdXQgYmxvY2sgKHRoZSBvbmUgd2l0aCBpbnB1dHMsIHVzdWFsbHkgb24gdGhlIGxlZnQpLlxuICAgKiBJZiBvbmx5IHNwZWNpZmljIGZpZWxkLCBjb25zaWRlciBvdmVycmlkaW5nIHtAbGluayBidWlsZEN1c3RvbUlucHV0c30uICovXG4gIGJ1aWxkSW5wdXRQYW5lbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHVpLmRpdihbdGhpcy5idWlsZElucHV0Rm9ybSh0aGlzLmxhc3RDYWxsISldKTtcbiAgfVxuXG4gIC8qKiBDYWxsIHRvIHVwZGF0ZSBpbnB1dCBwYW5lbCAqL1xuICBhc3luYyByZW5kZXJJbnB1dFBhbmVsKCkge1xuICAgIGNvbnN0IG5ld0lucHV0UGFuZWwgPSB0aGlzLmJ1aWxkSW5wdXRQYW5lbCgpO1xuICAgIHRoaXMuaW5wdXRQYW5lbC5yZXBsYWNlV2l0aChuZXdJbnB1dFBhbmVsKTtcbiAgICB0aGlzLmlucHV0UGFuZWwgPSBuZXdJbnB1dFBhbmVsO1xuICB9XG5cbiAgLyoqIE91dHB1dCBwYW5lbCBmb3Igdmlld2luZyByZXN1bHRzLiBPbiB0aGUgcmlnaHQgc2lkZSBieSBkZWZhdWx0ICovXG4gIG91dHB1dFBhbmVsID0gdWkuZGl2KCkgYXMgSFRNTEVsZW1lbnQ7XG4gIC8qKiBPdmVycmlkZSBpZiBjdXN0b20gb3VwdHV0IHBhbmVsIGlzIHJlcXVpcmVkICovXG4gIGJ1aWxkT3V0cHV0UGFuZWwoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB1aS5kaXYoKTtcbiAgfVxuICAvKiogQ2FsbCB0byB1cGRhdGUgb3V0cHV0IHBhbmVsICovXG4gIGFzeW5jIHJlbmRlck91dHB1dFBhbmVsKCkge1xuICAgIGNvbnN0IG5ld091dHB1dFBhbmVsID0gdGhpcy5idWlsZE91dHB1dFBhbmVsKCk7XG4gICAgY29uc29sZS5sb2coJ25ld091dHB1dFBhbmVsJywgbmV3T3V0cHV0UGFuZWwpO1xuICAgIHRoaXMub3V0cHV0UGFuZWwucmVwbGFjZVdpdGgobmV3T3V0cHV0UGFuZWwpO1xuICAgIHRoaXMub3V0cHV0UGFuZWwgPSBuZXdPdXRwdXRQYW5lbDtcbiAgICBjb25zb2xlLmxvZygnb3V0cHV0UGFuZWwnLCB0aGlzLm91dHB1dFBhbmVsKTtcbiAgfVxuXG4gIC8qKiBQYW5lbCBmb3IgZXhwb3J0aW5nIGZ1bmN0aW9ucyBmaWxlICovXG4gIGV4cG9ydFBhbmVsOiBIVE1MRWxlbWVudCA9IHVpLmRpdigpO1xuICAvKiogT3ZlcnJpZGUgaWYgY3VzdG9tIGV4cG9ydCBwYW5lbCBpcyByZXF1aXJlZCAqL1xuICBidWlsZEV4cG9ydFBhbmVsKCkge1xuICAgIHJldHVybiB1aS5jb21ib1BvcHVwKFxuICAgICAgdWkuaWNvbnMuc2F2ZShudWxsLCAnRXhwb3J0JyksXG4gICAgICB0aGlzLnN1cHBvcnRlZEV4cG9ydEZvcm1hdHMsXG4gICAgICBhc3luYyAoZm9ybWF0OiBzdHJpbmcpID0+XG4gICAgICAgIERHLlV0aWxzLmRvd25sb2FkKHRoaXMuZXhwb3J0RmlsZW5hbWUoZm9ybWF0KSwgYXdhaXQgdGhpcy5leHBvcnQoZm9ybWF0KSksXG4gICAgKTtcbiAgfVxuICAvKiogQ2FsbCB0byB1cGRhdGUgZXhwb3J0IHBhbmVsICovXG4gIHJlbmRlckV4cG9ydFBhbmVsKCkge1xuICAgIGNvbnN0IG5ld0V4cG9ydFBhbmVsID0gdGhpcy5idWlsZEV4cG9ydFBhbmVsKCk7XG4gICAgdGhpcy5leHBvcnRQYW5lbC5yZXBsYWNlV2l0aChuZXdFeHBvcnRQYW5lbCk7XG4gICAgdGhpcy5leHBvcnRQYW5lbCA9IG5ld0V4cG9ydFBhbmVsO1xuICB9XG5cbiAgLyoqIEZpbGVuYW1lIGZvciBleHBvcnRlZCBmaWxlcy4gT3ZlcnJpZGUgZm9yIGN1c3RvbSBuYW1lcyAqL1xuICBleHBvcnRGaWxlbmFtZShmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX0gLSAke25ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKX0uJHt0aGlzLnN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnNbZm9ybWF0XX1gO1xuICB9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXRzLlxuICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC4gKi9cbiAgZ2V0IHN1cHBvcnRlZEV4cG9ydEZvcm1hdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbXG4gICAgICAnRXhjZWwnLFxuICAgIF07XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gZmlsZSBleHRlbnNpb25zIGZvciBleHBvcnRlZCBmb3JtYXRzLlxuICAgKiBUaGVzZSBmb3JtYXRzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFwiRXhwb3J0XCIgcG9wdXAgb24gdGhlIHJpYmJvbiBwYW5lbC4gKi9cbiAgZ2V0IHN1cHBvcnRlZEV4cG9ydEV4dGVuc2lvbnMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdFeGNlbCc6ICd4bHN4JyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIHByb3ZpZGUgY3VzdG9tIGV4cG9ydC4gKi9cbiAgYXN5bmMgZXhwb3J0KGZvcm1hdDogc3RyaW5nKTogUHJvbWlzZTxCbG9iPiB7XG4gICAgaWYgKCF0aGlzLmZ1bmMpIHRocm93IG5ldyBFcnJvcihgTm8gZnVuY3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHZpZXdgKTtcblxuICAgIGNvbnN0IGxhc3RDYWxsID0gdGhpcy5sYXN0Q2FsbDtcbiAgICBpZiAoIWxhc3RDYWxsKSB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkYCk7XG5cbiAgICBpZiAoZm9ybWF0ICE9PSAnRXhjZWwnKSB0aHJvdyBuZXcgRXJyb3IoYEZvcm1hdCBcIiR7Zm9ybWF0fVwiIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG5cbiAgICBjb25zdCBCTE9CX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZXhwb3J0V29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuXG4gICAgY29uc3QgaXNTY2FsYXJUeXBlID0gKHR5cGU6IERHLlRZUEUpID0+IChERy5UWVBFU19TQ0FMQVIuaGFzKHR5cGUpKTtcblxuICAgIGNvbnN0IGlzRGF0YUZyYW1lID0gKHR5cGU6IERHLlRZUEUpID0+ICh0eXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzRGF0YUZyYW1lKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhcklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNTY2FsYXJUeXBlKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc0RhdGFGcmFtZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFyT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc1NjYWxhclR5cGUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuXG4gICAgZGZJbnB1dHMuZm9yRWFjaCgoZGZJbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZJbnB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNjYWxhcklucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGlucHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdJbnB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChpbnB1dFNjYWxhcnNTaGVldCwgc2NhbGFySW5wdXRzLm1hcCgoc2NhbGFySW5wdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhcklucHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJJbnB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwuaW5wdXRzW3NjYWxhcklucHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFySW5wdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgZGZPdXRwdXRzLmZvckVhY2goKGRmT3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZPdXRwdXQubmFtZTtcbiAgICAgIGNvbnN0IGN1cnJlbnREZlNoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcbiAgICAgIGRmVG9TaGVldChjdXJyZW50RGZTaGVldCwgY3VycmVudERmKTtcbiAgICB9KTtcblxuICAgIGlmIChzY2FsYXJPdXRwdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3V0cHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdPdXRwdXQgc2NhbGFycycpO1xuICAgICAgc2NhbGFyc1RvU2hlZXQob3V0cHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJPdXRwdXRzLm1hcCgoc2NhbGFyT3V0cHV0KSA9PiAoe1xuICAgICAgICBjYXB0aW9uOiBzY2FsYXJPdXRwdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhck91dHB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwub3V0cHV0c1tzY2FsYXJPdXRwdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJPdXRwdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZXhwb3J0V29ya2Jvb2sueGxzeC53cml0ZUJ1ZmZlcigpO1xuXG4gICAgcmV0dXJuIG5ldyBCbG9iKFtidWZmZXJdLCB7dHlwZTogQkxPQl9UWVBFfSk7XG4gIH1cblxuICAvKiogUGFuZWwgdG8gZGVhbCB3aXRoIGhpc3RvcmljYWwgcnVucyAqL1xuICBoaXN0b3J5UGFuZWw6IEhUTUxFbGVtZW50ID0gdWkuZGl2KCk7XG4gIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBoaXN0b3JpY2FsIHJ1bnMgVUkgKi9cbiAgYnVpbGRIaXN0b3J5UGFuZWwoKSB7XG4gICAgcmV0dXJuIHVpLmljb25GQSgnaGlzdG9yeScsICgpID0+IHtcbiAgICAgIHRoaXMucHVsbFJ1bnMoKS50aGVuKGFzeW5jIChoaXN0b3JpY2FsUnVucykgPT4ge1xuICAgICAgICBjb25zdCBtZW51ID0gREcuTWVudS5wb3B1cCgpO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgcnVuIG9mIGhpc3RvcmljYWxSdW5zKSB7XG4gICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgbWVudS5pdGVtKGAke3J1bi5mdW5jLmZyaWVuZGx5TmFtZX0g4oCUICR7aX1gLCBhc3luYyAoKSA9PiB0aGlzLmhpc3RvcmljYWxSdW5TZXJ2aWNlLmxvYWRSdW4ocnVuLmlkKSk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIG1lbnUuc2hvdygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqIENhbGwgdG8gdXBkYXRlIGhpc3RvcnkgcGFuZWwgKi9cbiAgcmVuZGVySGlzdG9yeVBhbmVsKCkge1xuICAgIGNvbnN0IG5ld0hpc3RvcnlQYW5lbCA9IHRoaXMuYnVpbGRIaXN0b3J5UGFuZWwoKTtcbiAgICB0aGlzLmhpc3RvcnlQYW5lbC5yZXBsYWNlV2l0aChuZXdIaXN0b3J5UGFuZWwpO1xuICAgIHRoaXMuaGlzdG9yeVBhbmVsID0gbmV3SGlzdG9yeVBhbmVsO1xuICB9XG5cbiAgLyoqIFNhdmVzIHRoZSBjb21wdXRhdGlvbiByZXN1bHRzIHRvIHRoZSBoaXN0b3JpY2FsIHJlc3VsdHMsIHJldHVybnMgaXRzIGlkLiBTZWUgYWxzbyB7QGxpbmsgbG9hZFJ1bn0uICovXG4gIGFzeW5jIHNhdmVSdW4oY2FsbDogREcuRnVuY0NhbGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgIC8qIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuc2F2ZShjYWxsKTsqL1xuICB9XG4gIC8qKiBMb2FkcyB0aGUgc3BlY2lmaWVkIGhpc3RvcmljYWwgcmVzdWx0cy4gU2VlIGFsc28ge0BsaW5rIHNhdmVSdW59LiAqL1xuICBhc3luYyBsb2FkUnVuKHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPERHLkZ1bmNDYWxsPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2QgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgLyogYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5maW5kKGNhbGwuaWQpOyovXG4gIH1cbiAgLyoqIExvYWRzIGFsbCB0aGUgZnVuY3Rpb24gY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLiAqL1xuICBhc3luYyBwdWxsUnVucygpOiBQcm9taXNlPERHLkZ1bmNDYWxsW10+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAvKiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLmxpc3QoKTsqL1xuICB9XG5cbiAgLyoqIFBhc3MgZnVuY3Rpb24gYXJndW1lbnRzJyB2YWx1ZXMgYmVmb3JlIGNvbXB1dGluZyAqL1xuICBhc3luYyBwcmVwYXJlKCkge1xuICAgIGlmICghdGhpcy5mdW5jKSByZXR1cm47XG5cbiAgICB0aGlzLmxhc3RDYWxsID0gdGhpcy5mdW5jLnByZXBhcmUoKSE7XG4gIH1cblxuXG4gIC8qKiBPdmVycmlkZSB0byBjdXN0b21pemUgcmliYm9uIHBhbmVscyAqL1xuICBwdWJsaWMgYXN5bmMgYnVpbGRSaWJib25QYW5lbHMoKTogUHJvbWlzZTxIVE1MRWxlbWVudFtdW10+IHtcbiAgICByZXR1cm4gW1tcbiAgICAgIHRoaXMuYnVpbGRFeHBvcnRQYW5lbCgpLFxuICAgIF1dO1xuICB9XG4gIC8qKiBDYWxsIHRvIHVwZGF0ZSByaWJib24gcGFuZWxzICovXG4gIHB1YmxpYyBhc3luYyByZW5kZXJSaWJib25QYW5lbHMoKSB7XG4gICAgdGhpcy5zZXRSaWJib25QYW5lbHMoYXdhaXQgdGhpcy5idWlsZFJpYmJvblBhbmVscygpKTtcbiAgfVxuXG4gIC8qKiBCdWlsZHMgdGhlIGNvbXBsZXRlIHZpZXcuIE92ZXJyaWRlIGl0IGlmIGNvbXBsZXRlbHkgY3VzdG9tIGltcGxlbWVudGF0aW9uIGlzIG5lZWRlZCxcbiAgICogb3RoZXJ3aXNlIGNvbnNpZGVyIG92ZXJyaWRpbmcge0BsaW5rIGJ1aWxkSW5wdXRQYW5lbH0gYW5kL29yIHtAbGluayBidWlsZE91dHB1dFBhbmVsfSAqL1xuICBidWlsZCgpOiBIVE1MRWxlbWVudCB7XG4gICAgdGhpcy5yZW5kZXJJbnB1dFBhbmVsKCk7XG4gICAgdGhpcy5yZW5kZXJPdXRwdXRQYW5lbCgpO1xuICAgIHJldHVybiB1aS5kaXZIKFt0aGlzLmlucHV0UGFuZWwsIHRoaXMub3V0cHV0UGFuZWxdKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZW5kZXIoKSB7XG4gICAgY29uc3QgbmV3Um9vdCA9IHRoaXMuYnVpbGQoKTtcbiAgICB0aGlzLnJvb3QucmVwbGFjZVdpdGgobmV3Um9vdCk7XG4gICAgdGhpcy5yb290ID0gbmV3Um9vdDtcbiAgfVxuXG4gIC8qKiBPdmVycmlkZSB0byBjcmVhdGUgYSBjdXN0b20gaW5wdXQgY29udHJvbC4gKi9cbiAgYnVpbGRSaWJib25QYW5lbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHVpLmRpdkgoW1xuICAgICAgdWkuYnV0dG9uKCdSVU4nLCAoKSA9PiB7fSksXG4gICAgICB1aS5jb21ib1BvcHVwKCdFeHBvcnQnLFxuICAgICAgICB0aGlzLnN1cHBvcnRlZEV4cG9ydEZvcm1hdHMsIChmb3JtYXQ6IHN0cmluZykgPT4gdGhpcy5leHBvcnQoZm9ybWF0KSksXG4gICAgXSk7XG4gIH1cblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wcmVwYXJlKCk7XG4gICAgaWYgKCF0aGlzLmxhc3RDYWxsKSB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmMgaXMgbm90IHByZXBhcmVkIScpO1xuXG4gICAgLy8gdGhpcy5pbnB1dEZpZWxkc1RvUGFyYW1ldGVycyh0aGlzLmxhc3RDYWxsKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbXB1dGUodGhpcy5sYXN0Q2FsbCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5vbkNvbXB1dGF0aW9uRXJyb3IubmV4dCh0aGlzLmxhc3RDYWxsKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnY29tcGx0ZWVkJywgdGhpcy5sYXN0Q2FsbCk7XG4gICAgdGhpcy5vbkNvbXB1dGF0aW9uQ29tcGxldGVkLm5leHQodGhpcy5sYXN0Q2FsbCk7XG5cbiAgICAvLyB0aGlzLm91dHB1dFBhcmFtZXRlcnNUb1ZpZXcodGhpcy5sYXN0Q2FsbCk7XG4gIH1cblxuICBhc3luYyBjb21wdXRlKGNhbGw6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMub3V0cHV0UGFuZWwsIHRydWUpO1xuICAgIHRoaXMubGFzdENhbGwgPSBhd2FpdCBjYWxsLmNhbGwodHJ1ZSwgdW5kZWZpbmVkLCB7cHJvY2Vzc2VkOiB0cnVlfSk7XG4gICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHRoaXMub3V0cHV0UGFuZWwsIGZhbHNlKTtcbiAgfVxuXG4gIHNob3dJbnB1dHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2luZ2xlRGZQYXJhbTogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXJhbVZpZXdlcnM6IE1hcDxzdHJpbmcsIERHLlZpZXdlcltdPiA9IG5ldyBNYXAoKTtcbiAgcmVzdWx0c1RhYkNvbnRyb2w6IERHLlRhYkNvbnRyb2wgfCB1bmRlZmluZWQ7XG4gIHJlc3VsdFRhYnM6IE1hcDxTdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgcmVzdWx0c0RpdjogSFRNTEVsZW1lbnQgPSB1aS5wYW5lbChbXSwgJ2dyb2stZnVuYy1yZXN1bHRzJyk7XG4gIGlucHV0c0RpdjogSFRNTERpdkVsZW1lbnQgPSB1aS5wYW5lbChbXSwgJ2dyb2stZnVuYy1yZXN1bHRzJyk7XG5cbiAgaW5wdXRGaWVsZHNUb1BhcmFtZXRlcnMoY2FsbDogREcuRnVuY0NhbGwpOiB2b2lkIHsgfVxuXG4gIC8qKiBoZWxwZXIgbWV0aG9kcyAqL1xuICBhcHBlbmRSZXN1bHREYXRhRnJhbWUocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM/OiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXJ9KSB7XG4gICAgY29uc3QgZGYgPSBwYXJhbS52YWx1ZTtcbiAgICBsZXQgY2FwdGlvbiA9IG9wdGlvbnM/LmNhcHRpb247XG4gICAgbGV0IGhlaWdodCA9IG9wdGlvbnM/LmhlaWdodCA/PyA0MDA7XG4gICAgY29uc3Qgdmlld2VyczogREcuVmlld2VyW10gPSBwYXJhbS5hdXhbJ3ZpZXdlcnMnXSA/PyBbXTtcbiAgICBjYXB0aW9uID8/PSBwYXJhbS5hdXhbJ3ZpZXdlclRpdGxlJ10gPz9cbiAgICAgICgodGhpcy5zaW5nbGVEZlBhcmFtICYmIHZpZXdlcnMubGVuZ3RoID09IDEpID8gJycgOiBwYXJhbS5wcm9wZXJ0eS5jYXB0aW9uKSA/PyAnJztcbiAgICBsZXQgZXhpc3RpbmdWaWV3ZXJzOiBERy5WaWV3ZXJbXSB8IHVuZGVmaW5lZCA9IHRoaXMucGFyYW1WaWV3ZXJzLmdldChwYXJhbS5uYW1lKTtcbiAgICBpZiAoZXhpc3RpbmdWaWV3ZXJzICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiBleGlzdGluZ1ZpZXdlcnMpXG4gICAgICAgIHYuZGF0YUZyYW1lID0gZGY7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhpc3RpbmdWaWV3ZXJzID8/PSBbXTtcbiAgICB0aGlzLnBhcmFtVmlld2Vycy5zZXQocGFyYW0ubmFtZSwgZXhpc3RpbmdWaWV3ZXJzKTtcbiAgICBpZiAodmlld2Vycy5sZW5ndGggPT0gMClcbiAgICAgIHZpZXdlcnMucHVzaChkZi5wbG90LmdyaWQoKSk7XG5cbiAgICBjb25zdCBoaWRlTGlzdDogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBibG9ja3M6IG51bWJlciA9IDA7XG4gICAgbGV0IGJsb2NrU2l6ZTogbnVtYmVyID0gMDtcbiAgICBjb25zdCBncmlkV3JhcHBlciA9IHVpLmJsb2NrKFtdKTtcblxuICAgIGNvbnN0IGdyaWRTd2l0Y2ggPSAhd3Uodmlld2Vycykuc29tZSgodjogREcuVmlld2VyKSA9PiB2LnR5cGUgPT0gJ0dyaWQnKTtcbiAgICAkKGdyaWRXcmFwcGVyKS5oaWRlKCk7XG5cbiAgICBjb25zdCBnZXRIZWFkZXIgPSAoc3c6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHMgPSBjYXB0aW9uID8/IGRmLm5hbWUgPz8gJyc7XG4gICAgICBjb25zdCBoZWFkZXIgPSB1aS5kaXYoW10sICdncm9rLWZ1bmMtcmVzdWx0cy1oZWFkZXInKTtcbiAgICAgIGlmIChzICE9ICcnKSB7XG4gICAgICAgIGNvbnN0IGggPSB1aS5oMShzKTtcbiAgICAgICAgdWkuVG9vbHRpcC5iaW5kKGgsICgpID0+IHMpO1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoaCk7XG4gICAgICB9XG4gICAgICBpZiAoZ3JpZFN3aXRjaCkge1xuICAgICAgICBjb25zdCBpY29uID0gdWkuaWNvblN2ZygndGFibGUnLCAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdWkuc2V0RGlzcGxheUFsbChoaWRlTGlzdCwgIXN3KTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5KGdyaWRXcmFwcGVyLCBzdyk7XG4gICAgICAgICAgZ3JpZFdyYXBwZXIuY2xhc3NMaXN0LmFkZChgdWktYmxvY2stJHtibG9ja1NpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLCAnU2hvdyBncmlkJyk7XG4gICAgICAgIGlmICghc3cpXG4gICAgICAgICAgaWNvbi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGljb24pO1xuICAgICAgfVxuICAgICAgaWYgKCFncm9rLnNoZWxsLnRhYmxlcy5pbmNsdWRlcyhkZikpIHtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKHVpLmljb25zLmFkZCgoZTogYW55KSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjb25zdCB2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZpZXdlciBvZiB2aWV3ZXJzKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIudHlwZSAhPSAnR3JpZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWaWV3ZXIgPSBhd2FpdCBkZi5wbG90LmZyb21UeXBlKHZpZXdlci50eXBlKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgICAgICAgbmV3Vmlld2VyLnNldE9wdGlvbnModmlld2VyLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICAgICAgdi5hZGRWaWV3ZXIobmV3Vmlld2VyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKCk7XG4gICAgICAgIH0sXG4gICAgICAgICdBZGQgdG8gd29ya3NwYWNlJyxcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGVhZGVyO1xuICAgIH07XG5cbiAgICBpZiAoZ3JpZFN3aXRjaCkge1xuICAgICAgZ3JpZFdyYXBwZXIuYXBwZW5kQ2hpbGQoZ2V0SGVhZGVyKGZhbHNlKSk7XG4gICAgICBjb25zdCBncmlkID0gZGYucGxvdC5ncmlkKCk7XG4gICAgICBncmlkLnJvb3Quc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgIGdyaWRXcmFwcGVyLmFwcGVuZENoaWxkKGdyaWQucm9vdCk7XG4gICAgICBleGlzdGluZ1ZpZXdlcnMucHVzaChncmlkKTtcbiAgICB9XG5cbiAgICBsZXQgaGVhZGVyID0gZ2V0SGVhZGVyKHRydWUpO1xuICAgIHRoaXMuX2FwcGVuZFJlc3VsdEVsZW1lbnQoZ3JpZFdyYXBwZXIsIG9wdGlvbnM/LmNhdGVnb3J5KTtcbiAgICBmb3IgKGNvbnN0IHZpZXdlciBvZiB2aWV3ZXJzKSB7XG4gICAgICBpZiAodmlld2VyPy50YWdzID09IG51bGwpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgZXhpc3RpbmdWaWV3ZXJzLnB1c2godmlld2VyKTtcbiAgICAgIGNvbnN0IGJsb2NrID0gdmlld2VyLnRhZ3NbJy5ibG9jay1zaXplJ10gPz8gMTAwO1xuICAgICAgY29uc3Qgd3JhcHBlciA9IHVpLmJsb2NrKFtdLCBgdWktYmxvY2stJHtibG9ja31gKTtcbiAgICAgIGlmIChibG9ja3MgKyBibG9jayA8PSAxMDApIHtcbiAgICAgICAgaGlkZUxpc3QucHVzaCh3cmFwcGVyKTtcbiAgICAgICAgYmxvY2tTaXplICs9IGJsb2NrO1xuICAgICAgfVxuICAgICAgYmxvY2tzICs9IGJsb2NrO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoZWFkZXIpO1xuICAgICAgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHZpZXdlci5yb290KTtcbiAgICAgIGlmICh2aWV3ZXIudHlwZSA9PSAnZ3JpZCcpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IHZpZXdlci5nZXRPcHRpb25zKClbJ3Jvd0hlaWdodCddICpcbiAgICAgICAgICAodmlld2VyLmRhdGFGcmFtZSEucm93Q291bnQgKyAxKTtcbiAgICAgICAgaWYgKHRvdGFsSGVpZ2h0IDwgaGVpZ2h0KVxuICAgICAgICAgIGhlaWdodCA9IHRvdGFsSGVpZ2h0O1xuICAgICAgfVxuICAgICAgdmlld2VyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgIHRoaXMuX2FwcGVuZFJlc3VsdEVsZW1lbnQod3JhcHBlciwgb3B0aW9ucz8uY2F0ZWdvcnkpO1xuICAgIH1cbiAgfVxuXG4gIF9hcHBlbmRSZXN1bHRFbGVtZW50KGQ6IEhUTUxFbGVtZW50LCBjYXRlZ29yeT86IHN0cmluZykge1xuICAgIGlmIChjYXRlZ29yeSAhPSBudWxsICYmIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgIT0gdW5kZWZpbmVkICYmIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpICE9IG51bGwpXG4gICAgICB0aGlzLnJlc3VsdFRhYnMuZ2V0KGNhdGVnb3J5KSEuYXBwZW5kQ2hpbGQoZCk7XG4gICAgZWxzZVxuICAgICAgdGhpcy5yZXN1bHRzRGl2LmFwcGVuZENoaWxkKGQpO1xuICB9XG5cbiAgLyoqIGhlbHBlciBtZXRob2RzICovXG4gIGJ1aWxkSW5wdXRGb3JtKGNhbGw6IERHLkZ1bmNDYWxsKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJ1bkJ1dHRvbiA9IHVpLmJpZ0J1dHRvbignUnVuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjYWxsLmF1eFsndmlldyddID0gdGhpcy5kYXJ0O1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bigpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGl0b3IgPSB1aS5kaXYoKTtcbiAgICAgIGNvbnN0IGlucHV0czogREcuSW5wdXRCYXNlW10gPSBhd2FpdCBjYWxsLmJ1aWxkRWRpdG9yKGVkaXRvciwge2NvbmRlbnNlZDogdHJ1ZX0pO1xuICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHVpLmJ1dHRvbnNJbnB1dChbcnVuQnV0dG9uXSkpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpXG4gICAgICAgIHRoaXMuX2lucHV0RmllbGRzLnNldChpbnB1dC5wcm9wZXJ0eS5uYW1lLCBpbnB1dCk7XG4gICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH0pO1xuICB9O1xuXG4gIGNsZWFyUmVzdWx0cyhjbGVhclRhYnM6IGJvb2xlYW4gPSB0cnVlLCBzaG93T3V0cHV0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNhdGVnb3JpZXM6IHN0cmluZ1tdID0gW107XG4gICAgLy8gIHJlc3VsdFRhYnMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5zaG93SW5wdXRzKSB7XG4gICAgICBjYXRlZ29yaWVzLnB1c2goJ0lOUFVUJyk7XG4gICAgICB0aGlzLnJlc3VsdFRhYnMuc2V0KCdJTlBVVCcsIHRoaXMuaW5wdXRzRGl2KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMuZnVuYyEub3V0cHV0cykge1xuICAgICAgaWYgKGNhdGVnb3JpZXMuaW5jbHVkZXMocC5jYXRlZ29yeSkpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2F0ZWdvcmllcy5wdXNoKHAuY2F0ZWdvcnkpO1xuICAgIH1cbiAgICBpZiAoY2xlYXJUYWJzICYmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgfHwgKGNhdGVnb3JpZXMubGVuZ3RoID09IDEgJiYgY2F0ZWdvcmllc1swXSAhPSAnTWlzYycpKSkge1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCA9IERHLlRhYkNvbnRyb2wuY3JlYXRlKCk7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY2F0ZWdvcmllcykge1xuICAgICAgICBpZiAoIXRoaXMucmVzdWx0VGFicy5oYXMoYykpXG4gICAgICAgICAgdGhpcy5yZXN1bHRUYWJzLnNldChjLCB1aS5kaXYoW10sICd1aS1wYW5lbCxncm9rLWZ1bmMtcmVzdWx0cycpKTtcbiAgICAgICAgbGV0IG5hbWUgPSBjO1xuICAgICAgICBpZiAodGhpcy5zaG93SW5wdXRzICYmIGNhdGVnb3JpZXMubGVuZ3RoID09IDIgJiYgYyA9PSAnTWlzYycpXG4gICAgICAgICAgbmFtZSA9ICdPVVRQVVQnO1xuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmFkZFBhbmUobmFtZSwgKCkgPT4gdGhpcy5yZXN1bHRUYWJzLmdldChjKSA/PyB1aS5kaXYoKSk7XG4gICAgICB9XG4gICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAxICYmIHRoaXMuc2hvd0lucHV0cyAmJiBzaG93T3V0cHV0KVxuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5wYW5lc1sxXTtcbiAgICAgIHRoaXMucmVzdWx0c0RpdiA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucm9vdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN1bHRzRGl2ID0gdWkucGFuZWwoW10sICdncm9rLWZ1bmMtcmVzdWx0cycpO1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5idWlsZE91dHB1dFBhbmVsKCk7XG4gIH1cblxuICBvdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGw6IERHLkZ1bmNDYWxsKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlc3VsdHMoZmFsc2UsIHRydWUpO1xuICAgIGZvciAoY29uc3QgWywgcF0gb2YgY2FsbC5vdXRwdXRQYXJhbXMpIHtcbiAgICAgIHAucHJvY2Vzc091dHB1dCgpO1xuICAgICAgaWYgKHAucHJvcGVydHkucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLnZhbHVlICE9IG51bGwpXG4gICAgICAgIHRoaXMuYXBwZW5kUmVzdWx0RGF0YUZyYW1lKHAsIHtjYXB0aW9uOiBwLnByb3BlcnR5Lm5hbWUsIGNhdGVnb3J5OiBwLnByb3BlcnR5LmNhdGVnb3J5fSk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGdldFNoZWV0TmFtZSA9IChuYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogRElSRUNUSU9OKSA9PiB7XG4gIGNvbnN0IGlkZWFsTmFtZSA9IGAke2RpcmVjdGlvbn0gLSAke25hbWV9YDtcbiAgcmV0dXJuIChpZGVhbE5hbWUubGVuZ3RoID4gMzEpID8gbmFtZS5zdWJzdHJpbmcoMCwgMzIpIDogaWRlYWxOYW1lO1xufTtcblxuZW51bSBESVJFQ1RJT04ge1xuICBJTlBVVCA9ICdJbnB1dCcsXG4gIE9VVFBVVCA9ICdPdXRwdXQnXG59XG5cbmNvbnN0IHNjYWxhcnNUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgc2NhbGFyczoge2NhcHRpb246IHN0cmluZywgdmFsdWU6IHN0cmluZywgdW5pdHM6IHN0cmluZ31bXSkgPT4ge1xuICBzaGVldC5hZGRSb3coWydQYXJhbWV0ZXInLCAnVmFsdWUnLCAnVW5pdHMnXSkuZm9udCA9IHtib2xkOiB0cnVlfTtcbiAgc2NhbGFycy5mb3JFYWNoKChzY2FsYXIpID0+IHtcbiAgICBzaGVldC5hZGRSb3coW3NjYWxhci5jYXB0aW9uLCBzY2FsYXIudmFsdWUsIHNjYWxhci51bml0c10pO1xuICB9KTtcblxuICBzaGVldC5nZXRDb2x1bW4oMSkud2lkdGggPSBNYXRoLm1heChcbiAgICAuLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIuY2FwdGlvbi50b1N0cmluZygpLmxlbmd0aCksICdQYXJhbWV0ZXInLmxlbmd0aCxcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lKSA9PiB7XG4gIHNoZWV0LmFkZFJvdygoZGYuY29sdW1ucyBhcyBERy5Db2x1bW5MaXN0KS5uYW1lcygpKS5mb250ID0ge2JvbGQ6IHRydWV9O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLnJvd0NvdW50OyBpKyspXG4gICAgc2hlZXQuYWRkUm93KFsuLi5kZi5yb3coaSkuY2VsbHNdLm1hcCgoY2VsbDogREcuQ2VsbCkgPT4gY2VsbC52YWx1ZSkpO1xuXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZi5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgc2hlZXQuZ2V0Q29sdW1uKGkrMSkud2lkdGggPVxuICAgICAgTWF0aC5tYXgoXG4gICAgICAgIC4uLihkZi5jb2x1bW5zIGFzIERHLkNvbHVtbkxpc3QpLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICAgIChkZi5jb2x1bW5zIGFzIERHLkNvbHVtbkxpc3QpLmJ5SW5kZXgoaSkubmFtZS5sZW5ndGgsXG4gICAgICApICogMS4yO1xuICB9XG59O1xuXG4iXX0=
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZ1bmN0aW9uLXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RDLE9BQU8sT0FBTyxNQUFNLFNBQVMsQ0FBQztBQUU5QixNQUFNLE9BQU8sWUFBYSxTQUFRLEVBQUUsQ0FBQyxRQUFRO0lBQzNDLFlBQVksUUFBcUI7UUFDL0IsS0FBSyxFQUFFLENBQUM7UUFXVixzQkFBaUIsR0FBdUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0QsbUJBQWMsR0FBdUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFeEQseUJBQW9CLEdBQThCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsK0JBQStCO1FBQ3JHLDJCQUFzQixHQUE4QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLHNEQUFzRDtRQUM5SCwyQkFBc0IsR0FBOEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQywrQ0FBK0M7UUFDdkgsdUJBQWtCLEdBQThCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsaURBQWlEO1FBRTdHLFVBQUssR0FBVyxVQUFVLENBQUM7UUFPbkMsaUJBQVksR0FBOEIsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFtUjFFLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsaUJBQVksR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVuRCxlQUFVLEdBQTZCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsZUFBVSxHQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVELGlCQUFZLEdBQW1CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxnQkFBVyxHQUFtQixFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkMsZ0JBQVcsR0FBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBQyxLQUFLLEVBQUUsRUFBQyxpQkFBaUIsRUFBRSxRQUFRLEVBQUMsRUFBQyxDQUFDLENBQUM7UUFDbEYsY0FBUyxHQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBclQ1RCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBYSxDQUFDLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBV0QsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFNSyxJQUFJLENBQUMsUUFBcUI7OztZQUM5QixNQUFBLElBQUksQ0FBQyxZQUFZLG9DQUFqQixJQUFJLENBQUMsWUFBWSxHQUFLLFFBQVEsRUFBQztZQUMvQjs7O2NBR0U7WUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUV6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDM0YsT0FBTyxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUN6Qiw2QkFBNkI7WUFDN0IsOEVBQThFO1lBQzlFLGlDQUFpQztZQUVqQyxLQUFLLE1BQU0sT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQXdCLENBQUM7aUJBQ25GLE1BQU0sQ0FBQyxDQUFDLENBQW1CLEVBQUUsRUFBRSxDQUM5QixDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtnQkFDMUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBZSxLQUF1Qjs7d0JBQy9FLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3pCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFFdEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFDOUIsRUFBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHOzRCQUMvRSxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztpQkFBQSxDQUFDLENBQUMsQ0FBQzthQUNMO1lBR0QseUNBQXlDO1lBRXpDOzs7Ozs7O2lCQU9LO1lBQ0wsY0FBYztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDOztjQUVFO1lBRUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzs7S0FDcEM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTlDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBYSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2hELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBTyxjQUFjLEVBQUUsRUFBRTtnQkFDNUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLEtBQUssTUFBTSxHQUFHLElBQUksY0FBYyxFQUFFO29CQUNoQyxZQUFZO29CQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFTLEVBQUUsZ0RBQUMsT0FBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQSxHQUFBLENBQUMsQ0FBQztvQkFDcEcsQ0FBQyxFQUFFLENBQUM7aUJBQ0w7Z0JBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsQ0FBQyxDQUFBLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsaUJBQWlCO1FBQ2YsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQzNELEVBQUUsQ0FBQyxVQUFVLENBQ1gsRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQzNCLENBQU8sTUFBYyxFQUFFLEVBQUUsZ0RBQUMsT0FBQSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBLEdBQUEsQ0FBQztpQkFDdkcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdEMsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxjQUFjLENBQUMsTUFBYztRQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ25HLENBQUM7SUFFRDttRkFDK0U7SUFDL0UsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTztZQUNMLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQztJQUVEO21GQUMrRTtJQUMvRSxJQUFJLHlCQUF5QjtRQUMzQixPQUFPO1lBQ0wsT0FBTyxFQUFFLE1BQU07U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRCx5Q0FBeUM7SUFDbkMsTUFBTSxDQUFDLE1BQWM7O1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7WUFFdkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFFMUQsSUFBSSxNQUFNLEtBQUssT0FBTztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsTUFBTSxxQkFBcUIsQ0FBQyxDQUFDO1lBRWhGLE1BQU0sU0FBUyxHQUFHLGlGQUFpRixDQUFDO1lBQ3BHLE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRTlDLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFcEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFckUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDckYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDMUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDekYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFFOUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMzQixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUM3RCxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBRWhHLE1BQU0sU0FBUyxHQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBa0IsQ0FBQztnQkFDbEUsU0FBUyxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDdkIsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN2RSxjQUFjLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUk7b0JBQzNELEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ3hDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7aUJBQzFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUVELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDL0QsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUVqRyxNQUFNLFNBQVMsR0FBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQWtCLENBQUM7Z0JBQ3BFLFNBQVMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN6RSxjQUFjLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDdEUsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksWUFBWSxDQUFDLElBQUk7b0JBQzdELEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7b0JBQzFDLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7aUJBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV2RCxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO0tBQUE7SUFFRCx5R0FBeUc7SUFDbkcsT0FBTyxDQUFDLElBQWlCOztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0MsZ0RBQWdEO1FBQ2xELENBQUM7S0FBQTtJQUNELHdFQUF3RTtJQUNsRSxPQUFPLENBQUMsS0FBYTs7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQzdDLG1EQUFtRDtRQUNyRCxDQUFDO0tBQUE7SUFDRCxvREFBb0Q7SUFDOUMsUUFBUTs7WUFDWixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDN0MsNENBQTRDO1FBQzlDLENBQUM7S0FBQTtJQUdELFlBQVksQ0FBQyxpQkFBMEIsSUFBSTtRQUN6QyxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDaEMsdUJBQXVCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDOUM7UUFDRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxTQUFTO1lBQ1gsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0I7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRTtZQUNsRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLDZCQUE2QixDQUFDLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTTtvQkFDMUQsSUFBSSxHQUFHLFFBQVEsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQUMsT0FBQSxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxtQ0FBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUEsRUFBQSxDQUFDLENBQUM7YUFDaEY7WUFDRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksY0FBYztnQkFDNUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFSyxHQUFHOztZQUNQLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUVsQyxJQUFJO2dCQUNGLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUyxDQUFDLENBQUM7YUFDcEM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDViwrQ0FBK0M7YUFDaEQ7WUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFTLENBQUMsQ0FBQztZQUVqRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFFBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7S0FBQTtJQUVLLE9BQU8sQ0FBQyxJQUFpQjs7WUFDN0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO0tBQUE7SUFFRCxzQkFBc0IsQ0FBQyxJQUFpQjtRQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQXdCLEVBQUU7WUFDaEUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJO2dCQUNsRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7O2dCQUV6RixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLEVBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7U0FDekY7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBaUI7UUFDaEMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQVMsRUFBRTtZQUN4QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFTLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDN0IsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFBLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBbUIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUMsS0FBSyxFQUFFLEVBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQ3RHLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNMLENBQUM7SUFhRCxxQkFBcUIsQ0FBQyxLQUF1QixFQUFFLE9BQWlFOztRQUM5RyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLElBQUksT0FBTyxHQUFHLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLENBQUM7UUFDL0IsSUFBSSxNQUFNLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxtQ0FBSSxHQUFHLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQWdCLE1BQUEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUNBQUksRUFBRSxDQUFDO1FBQ3hELE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxJQUFQLE9BQU8sR0FBSyxNQUFBLE1BQUEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsbUNBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsbUNBQUksRUFBRSxFQUFDO1FBQ3BGLElBQUksZUFBZSxHQUE0QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakYsSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFO1lBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksZUFBZTtnQkFDN0IsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFFbkIsT0FBTztTQUNSO1FBQ0QsZUFBZSxhQUFmLGVBQWUsY0FBZixlQUFlLElBQWYsZUFBZSxHQUFLLEVBQUUsRUFBQztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sUUFBUSxHQUFrQixFQUFFLENBQUM7UUFDbkMsSUFBSSxNQUFNLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksU0FBUyxHQUFXLENBQUMsQ0FBQztRQUMxQixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFdEIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUFXLEVBQUUsRUFBRTs7WUFDaEMsTUFBTSxDQUFDLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLENBQUMsSUFBSSxtQ0FBSSxFQUFFLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNwQixFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNoQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDL0IsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLEVBQ0MsV0FBVyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLEVBQUU7b0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUI7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQ3pDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDcEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RDLENBQUMsR0FBUyxFQUFFO3dCQUNWLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFOzRCQUM1QixJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFO2dDQUN6QixNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWMsQ0FBQztnQ0FDbkUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQ0FDMUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzs2QkFDeEI7eUJBQ0Y7b0JBQ0gsQ0FBQyxDQUFBLENBQUMsRUFBRSxDQUFDO2dCQUNQLENBQUMsRUFDRCxrQkFBa0IsQ0FDakIsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFRixJQUFJLFVBQVUsRUFBRTtZQUNkLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQztZQUN2QyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzVCLElBQUksQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSxLQUFJLElBQUk7Z0JBQ3RCLFNBQVM7WUFDWCxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLE1BQU0sS0FBSyxHQUFHLE1BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsbUNBQUksR0FBRyxDQUFDO1lBQ2hELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFlBQVksS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNsRCxJQUFJLE1BQU0sR0FBRyxLQUFLLElBQUksR0FBRyxFQUFFO2dCQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QixTQUFTLElBQUksS0FBSyxDQUFDO2FBQ3BCO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQztZQUNoQixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUU7Z0JBQ3pCLGFBQWE7Z0JBQ2IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDbEQsQ0FBQyxNQUFNLENBQUMsU0FBVSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxXQUFXLEdBQUcsTUFBTTtvQkFDdEIsTUFBTSxHQUFHLFdBQVcsQ0FBQzthQUN4QjtZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3ZEO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXVCLEVBQUUsT0FBK0Q7O1FBQ3pHLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBQSxPQUFPLENBQUMsT0FBTyxtQ0FBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEk7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFBLE9BQU8sQ0FBQyxPQUFPLG1DQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzRjtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxDQUFjLEVBQUUsUUFBaUI7UUFDcEQsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSTtZQUNsRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7O1lBRTlDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBWSxFQUFFLFNBQW9CLEVBQUUsRUFBRTtJQUMxRCxNQUFNLFNBQVMsR0FBRyxHQUFHLFNBQVMsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUMzQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRSxDQUFDLENBQUM7QUFFRixJQUFLLFNBR0o7QUFIRCxXQUFLLFNBQVM7SUFDWiw0QkFBZSxDQUFBO0lBQ2YsOEJBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhJLFNBQVMsS0FBVCxTQUFTLFFBR2I7QUFFRCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQXdCLEVBQUUsT0FBMEQsRUFBRSxFQUFFO0lBQzlHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ2xFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDakMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQ2pGLEdBQUcsR0FBRyxDQUFDO0lBQ1IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUN0SCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hILENBQUMsQ0FBQztBQUVGLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBd0IsRUFBRSxFQUFnQixFQUFFLEVBQUU7SUFDL0QsS0FBSyxDQUFDLE1BQU0sQ0FBRSxFQUFFLENBQUMsT0FBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN4RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUU7UUFDbEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBR3hFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ3hCLElBQUksQ0FBQyxHQUFHLENBQ04sR0FBSSxFQUFFLENBQUMsT0FBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUNuRyxFQUFFLENBQUMsT0FBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDckQsR0FBRyxHQUFHLENBQUM7S0FDWDtBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZhbGlkLWpzZG9jICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0ICQgZnJvbSAnY2FzaC1kb20nO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgRXhjZWxKUyBmcm9tICdleGNlbGpzJztcblxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uVmlldyBleHRlbmRzIERHLlZpZXdCYXNlIHtcbiAgY29uc3RydWN0b3IoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnByZXBhcmVkQ2FsbCA9IGZ1bmNDYWxsO1xuICAgIHRoaXMuY29udGV4dCA9IERHLkNvbnRleHQuY2xvbmVEZWZhdWx0KCk7XG4gICAgdGhpcy5jb250cm9sc1Jvb3Quc3R5bGUubWF4V2lkdGggPSAnMzcwcHgnO1xuICAgIHRoaXMuYm94ID0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBmdW5jKCkge1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVkQ2FsbCEuZnVuYztcbiAgfVxuXG4gIG9uVmlld0luaXRpYWxpemVkOiByeGpzLlN1YmplY3Q8dm9pZD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG4gIG9uSW5wdXRDaGFuZ2VkOiByeGpzLlN1YmplY3Q8dm9pZD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7XG5cbiAgb25Db21wdXRhdGlvblN0YXJ0ZWQ6IHJ4anMuU3ViamVjdDxERy5GdW5jQ2FsbD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7IC8vIGVtaXR0ZWQgb24gY29tcHV0YXRpb24gc3RhcnRcbiAgb25Db21wdXRhdGlvbkNvbXBsZXRlZDogcnhqcy5TdWJqZWN0PERHLkZ1bmNDYWxsPiA9IG5ldyByeGpzLlN1YmplY3QoKTsgLy8gZW1pdHRlZCBhbnl3YXkgaWYgY29tcHV0YXRpb24gZW5kZWQgcHJvcGVybHkgb3Igbm90XG4gIG9uQ29tcHV0YXRpb25TdWNjZWVkZWQ6IHJ4anMuU3ViamVjdDxERy5GdW5jQ2FsbD4gPSBuZXcgcnhqcy5TdWJqZWN0KCk7IC8vIGVtaXR0ZWQgYW55d2F5IGlmIGNvbXB1dGF0aW9uIGVuZGVkIHByb3Blcmx5XG4gIG9uQ29tcHV0YXRpb25FcnJvcjogcnhqcy5TdWJqZWN0PERHLkZ1bmNDYWxsPiA9IG5ldyByeGpzLlN1YmplY3QoKTsgLy8gZW1pdHRlZCBhbnl3YXkgaWYgY29tcHV0YXRpb24gZW5kZWQgd2l0aCBlcnJvclxuXG4gIHByaXZhdGUgX3R5cGU6IHN0cmluZyA9ICdmdW5jdGlvbic7XG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG4gIHJlYWRvbmx5IGNvbnRleHQ6IERHLkNvbnRleHQ7XG4gIHB1YmxpYyBwcmVwYXJlZENhbGw6IERHLkZ1bmNDYWxsIHwgbnVsbDtcbiAgcHVibGljIGxhc3RDYWxsPzogREcuRnVuY0NhbGwgfCBudWxsO1xuICBfaW5wdXRGaWVsZHM6IE1hcDxzdHJpbmcsIERHLklucHV0QmFzZT4gPSBuZXcgTWFwPHN0cmluZywgREcuSW5wdXRCYXNlPigpO1xuXG4gIGFzeW5jIGluaXQoZnVuY0NhbGw6IERHLkZ1bmNDYWxsKSB7XG4gICAgdGhpcy5wcmVwYXJlZENhbGwgPz89IGZ1bmNDYWxsO1xuICAgIC8qXG4gICAgICB2YXIgbWV0YSA9IEVudGl0eU1ldGEuZm9yRW50aXR5KGYpO1xuICAgICAgZnVuYyA9IGF3YWl0IG1ldGEucmVmcmVzaChmKTtcbiAgICAqL1xuXG4gICAgdGhpcy5wcmVwYXJlZENhbGwuYXV4Wyd2aWV3J10gPSB0aGlzO1xuICAgIHRoaXMucHJlcGFyZWRDYWxsLmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG5cbiAgICB0aGlzLnNpbmdsZURmUGFyYW0gPSB3dSh0aGlzLmZ1bmMub3V0cHV0cykuZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUpXG4gICAgICAudG9BcnJheSgpLmxlbmd0aCA9PSAxO1xuICAgIC8vdmFyIGZ1bGxSdW5TZWN0aW9uID0gZGl2KCk7XG4gICAgLy92YXIgZnVsbERpdiA9IGRpdigndWktcGFuZWwnLCBbZ2V0RnVsbFNlY3Rpb24oZnVuYywgY2FsbCwgZnVsbFJ1blNlY3Rpb24pXSk7XG4gICAgLy9odG1sU2V0RGlzcGxheShmdWxsRGl2LCBmYWxzZSk7XG5cbiAgICBmb3IgKGNvbnN0IGluUGFyYW0gb2Ygd3UodGhpcy5wcmVwYXJlZENhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigocDogREcuRnVuY0NhbGxQYXJhbSkgPT5cbiAgICAgICAgcC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAucHJvcGVydHkub3B0aW9uc1sndmlld2VyJ10gIT0gbnVsbCkpIHtcbiAgICAgIHRoaXMuc2hvd0lucHV0cyA9IHRydWU7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMuc3Vicy5wdXNoKGluUGFyYW0ub25DaGFuZ2VkLnN1YnNjcmliZShhc3luYyBmdW5jdGlvbihwYXJhbTogREcuRnVuY0NhbGxQYXJhbSkge1xuICAgICAgICBzZWxmLmNsZWFyUmVzdWx0cyhmYWxzZSk7XG4gICAgICAgIHBhcmFtLnByb2Nlc3NPdXRwdXQoKTtcblxuICAgICAgICBzZWxmLmFwcGVuZFJlc3VsdERhdGFGcmFtZShwYXJhbSxcbiAgICAgICAgICB7aGVpZ2h0OiAoc2VsZi5zaW5nbGVEZlBhcmFtICYmICFncm9rLnNoZWxsLndpbmRvd3MucHJlc2VudGF0aW9uTW9kZSkgPyA2MDAgOiA0MDAsXG4gICAgICAgICAgICBjYXRlZ29yeTogJ0lOUFVUJ30pO1xuICAgICAgfSkpO1xuICAgIH1cblxuXG4gICAgLy90aGlzLmNvbnRyb2xzUm9vdC5hcHBlbmRDaGlsZChmdWxsRGl2KTtcblxuICAgIC8qYWR2YW5jZWRNb2RlU3dpdGNoLm9uQ2hhbmdlZC5saXN0ZW4oKF8pIHtcbiAgICAgIGlmIChhZHZhbmNlZE1vZGVTd2l0Y2gudmFsdWUpXG4gICAgICAgIGZ1bGxSdW5TZWN0aW9uLmFwcGVuZChydW5TZWN0aW9uKTtcbiAgICAgIGVsc2VcbiAgICAgICAgZnVuY0Rpdi5hcHBlbmQocnVuU2VjdGlvbik7XG4gICAgICBodG1sU2V0RGlzcGxheShmdWxsRGl2LCBhZHZhbmNlZE1vZGVTd2l0Y2gudmFsdWUpO1xuICAgICAgaHRtbFNldERpc3BsYXkoZnVuY0RpdiwgIWFkdmFuY2VkTW9kZVN3aXRjaC52YWx1ZSk7XG4gICAgfSk7Ki9cbiAgICAvL3NldFJpYmJvbigpO1xuICAgIHRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkKCkpO1xuICAgIC8qXG4gICAgUm91dGluZy5zZXRQYXRoKHRoaXMucGF0aCwgZi5uYW1lLCB0cnVlKTtcbiAgICAqL1xuXG4gICAgdGhpcy5uYW1lID0gdGhpcy5mdW5jLmZyaWVuZGx5TmFtZTtcbiAgfVxuXG4gIGJ1aWxkKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBpbnB1dEJsb2NrID0gdGhpcy5idWlsZElucHV0QmxvY2soKTtcbiAgICBjb25zdCBvdXRwdXRCbG9jayA9IHRoaXMuYnVpbGRPdXRwdXRCbG9jaygpO1xuICAgIGNvbnN0IHJpYmJvblBhbmVscyA9IHRoaXMuYnVpbGRSaWJib25QYW5lbHMoKTtcbiAgICBjb25zdCBoaXN0b3J5QmxvY2sgPSB0aGlzLmJ1aWxkSGlzdG9yeUJsb2NrKCk7XG5cbiAgICByZXR1cm4gdWkuc3BsaXRIKFtpbnB1dEJsb2NrLCBvdXRwdXRCbG9ja10pO1xuICB9XG5cbiAgYnVpbGRJbnB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBmdW5jRGl2ID0gdWkuZGl2KFt0aGlzLnJlbmRlclJ1blNlY3Rpb24odGhpcy5wcmVwYXJlZENhbGwhKV0sICd1aS1kaXYnKTtcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5pbm5lckhUTUwgPSAnJztcbiAgICB0aGlzLmNvbnRyb2xzUm9vdC5hcHBlbmRDaGlsZChmdW5jRGl2KTtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sc1Jvb3Q7XG4gIH1cblxuICBidWlsZE91dHB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLnJlc3VsdHNSb290LmlubmVySFRNTCA9ICcnO1xuICAgIHRoaXMucmVzdWx0c1Jvb3QuYXBwZW5kQ2hpbGQodGhpcy5yZXN1bHRzRGl2KTtcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzUm9vdDtcbiAgfVxuXG4gIGJ1aWxkSGlzdG9yeUJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBuZXdIaXN0b3J5QmxvY2sgPSB1aS5pY29uRkEoJ2hpc3RvcnknLCAoKSA9PiB7XG4gICAgICB0aGlzLnB1bGxSdW5zKCkudGhlbihhc3luYyAoaGlzdG9yaWNhbFJ1bnMpID0+IHtcbiAgICAgICAgY29uc3QgbWVudSA9IERHLk1lbnUucG9wdXAoKTtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1biBvZiBoaXN0b3JpY2FsUnVucykge1xuICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgIG1lbnUuaXRlbShgJHtydW4uZnVuYy5mcmllbmRseU5hbWV9IOKAlCAke2l9YCwgYXN5bmMgKCkgPT4gdGhpcy5oaXN0b3JpY2FsUnVuU2VydmljZS5sb2FkUnVuKHJ1bi5pZCkpO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBtZW51LnNob3coKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuaGlzdG9yeVJvb3QuaW5uZXJIVE1MID0gJyc7XG4gICAgdGhpcy5oaXN0b3J5Um9vdC5hcHBlbmQobmV3SGlzdG9yeUJsb2NrKTtcbiAgICByZXR1cm4gbmV3SGlzdG9yeUJsb2NrO1xuICB9XG5cbiAgLyoqIE92ZXJyaWRlIHRvIGNyZWF0ZSBhIGN1c3RvbSBpbnB1dCBjb250cm9sLiAqL1xuICBidWlsZFJpYmJvblBhbmVscygpOiBIVE1MRWxlbWVudFtdW10ge1xuICAgIGNvbnN0IG5ld1JpYmJvblBhbmVscyA9IFsuLi50aGlzLmdldFJpYmJvblBhbmVscygpLCBbdWkuZGl2SChbXG4gICAgICB1aS5jb21ib1BvcHVwKFxuICAgICAgICB1aS5pY29uRkEoJ2Fycm93LXRvLWJvdHRvbScpLFxuICAgICAgICB0aGlzLnN1cHBvcnRlZEV4cG9ydEZvcm1hdHMsXG4gICAgICAgIGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4gREcuVXRpbHMuZG93bmxvYWQodGhpcy5leHBvcnRGaWxlbmFtZShmb3JtYXQpLCBhd2FpdCB0aGlzLmV4cG9ydChmb3JtYXQpKSksXG4gICAgXSldXTtcbiAgICB0aGlzLnNldFJpYmJvblBhbmVscyhuZXdSaWJib25QYW5lbHMpO1xuICAgIHJldHVybiBuZXdSaWJib25QYW5lbHM7XG4gIH1cblxuICAvKiogRmlsZW5hbWUgZm9yIGV4cG9ydGVkIGZpbGVzLiBPdmVycmlkZSBmb3IgY3VzdG9tIG5hbWVzICovXG4gIGV4cG9ydEZpbGVuYW1lKGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSAtICR7bmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygpfS4ke3RoaXMuc3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9uc1tmb3JtYXRdfWA7XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBzdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdHMuXG4gICAqIFRoZXNlIGZvcm1hdHMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgXCJFeHBvcnRcIiBwb3B1cCBvbiB0aGUgcmliYm9uIHBhbmVsLiAqL1xuICBnZXQgc3VwcG9ydGVkRXhwb3J0Rm9ybWF0cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICdFeGNlbCcsXG4gICAgXTtcbiAgfVxuXG4gIC8qKiBPdmVycmlkZSB0byBwcm92aWRlIGN1c3RvbSBmaWxlIGV4dGVuc2lvbnMgZm9yIGV4cG9ydGVkIGZvcm1hdHMuXG4gICAqIFRoZXNlIGZvcm1hdHMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgXCJFeHBvcnRcIiBwb3B1cCBvbiB0aGUgcmliYm9uIHBhbmVsLiAqL1xuICBnZXQgc3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0V4Y2VsJzogJ3hsc3gnLFxuICAgIH07XG4gIH1cblxuICAvKiogT3ZlcnJpZGUgdG8gcHJvdmlkZSBjdXN0b20gZXhwb3J0LiAqL1xuICBhc3luYyBleHBvcnQoZm9ybWF0OiBzdHJpbmcpOiBQcm9taXNlPEJsb2I+IHtcbiAgICBpZiAoIXRoaXMuZnVuYykgdGhyb3cgbmV3IEVycm9yKGBObyBmdW5jdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdmlld2ApO1xuXG4gICAgY29uc3QgbGFzdENhbGwgPSB0aGlzLmxhc3RDYWxsO1xuICAgIGlmICghbGFzdENhbGwpIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gd2FzIG5vdCBjYWxsZWRgKTtcblxuICAgIGlmIChmb3JtYXQgIT09ICdFeGNlbCcpIHRocm93IG5ldyBFcnJvcihgRm9ybWF0IFwiJHtmb3JtYXR9XCIgaXMgbm90IHN1cHBvcnRlZC5gKTtcblxuICAgIGNvbnN0IEJMT0JfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbiAgICBjb25zdCBleHBvcnRXb3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XG5cbiAgICBjb25zdCBpc1NjYWxhclR5cGUgPSAodHlwZTogREcuVFlQRSkgPT4gKERHLlRZUEVTX1NDQUxBUi5oYXModHlwZSkpO1xuXG4gICAgY29uc3QgaXNEYXRhRnJhbWUgPSAodHlwZTogREcuVFlQRSkgPT4gKHR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICBjb25zdCBkZklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNEYXRhRnJhbWUoaW5wdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFySW5wdXRzID0gdGhpcy5mdW5jLmlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBpc1NjYWxhclR5cGUoaW5wdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3QgZGZPdXRwdXRzID0gdGhpcy5mdW5jLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IGlzRGF0YUZyYW1lKG91dHB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBzY2FsYXJPdXRwdXRzID0gdGhpcy5mdW5jLm91dHB1dHMuZmlsdGVyKChvdXRwdXQpID0+IGlzU2NhbGFyVHlwZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG5cbiAgICBkZklucHV0cy5mb3JFYWNoKChkZklucHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZklucHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cbiAgICBpZiAoc2NhbGFySW5wdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5wdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0lucHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KGlucHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJJbnB1dHMubWFwKChzY2FsYXJJbnB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFySW5wdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhcklucHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5pbnB1dHNbc2NhbGFySW5wdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJJbnB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBkZk91dHB1dHMuZm9yRWFjaCgoZGZPdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZk91dHB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNjYWxhck91dHB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvdXRwdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ091dHB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChvdXRwdXRTY2FsYXJzU2hlZXQsIHNjYWxhck91dHB1dHMubWFwKChzY2FsYXJPdXRwdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhck91dHB1dC5vcHRpb25zWydjYXB0aW9uJ10gfHwgc2NhbGFyT3V0cHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5vdXRwdXRzW3NjYWxhck91dHB1dC5uYW1lXSxcbiAgICAgICAgdW5pdHM6IHNjYWxhck91dHB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBleHBvcnRXb3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XG5cbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHt0eXBlOiBCTE9CX1RZUEV9KTtcbiAgfVxuXG4gIC8qKiBTYXZlcyB0aGUgY29tcHV0YXRpb24gcmVzdWx0cyB0byB0aGUgaGlzdG9yaWNhbCByZXN1bHRzLCByZXR1cm5zIGl0cyBpZC4gU2VlIGFsc28ge0BsaW5rIGxvYWRSdW59LiAqL1xuICBhc3luYyBzYXZlUnVuKGNhbGw6IERHLkZ1bmNDYWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgICAvKiBhd2FpdCBncm9rLmRhcGkuZnVuY3Rpb25zLmNhbGxzLnNhdmUoY2FsbCk7Ki9cbiAgfVxuICAvKiogTG9hZHMgdGhlIHNwZWNpZmllZCBoaXN0b3JpY2FsIHJlc3VsdHMuIFNlZSBhbHNvIHtAbGluayBzYXZlUnVufS4gKi9cbiAgYXN5bmMgbG9hZFJ1bihydW5JZDogc3RyaW5nKTogUHJvbWlzZTxERy5GdW5jQ2FsbD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgIC8qIGF3YWl0IGdyb2suZGFwaS5mdW5jdGlvbnMuY2FsbHMuZmluZChjYWxsLmlkKTsqL1xuICB9XG4gIC8qKiBMb2FkcyBhbGwgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgdGhpcyBmdW5jdGlvbi4gKi9cbiAgYXN5bmMgcHVsbFJ1bnMoKTogUHJvbWlzZTxERy5GdW5jQ2FsbFtdPiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2QgaXMgbm90IGltcGxlbWVudGVkJyk7XG4gICAgLyogYXdhaXQgZ3Jvay5kYXBpLmZ1bmN0aW9ucy5jYWxscy5saXN0KCk7Ki9cbiAgfVxuXG5cbiAgY2xlYXJSZXN1bHRzKHN3aXRjaFRvT3V0cHV0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNhdGVnb3JpZXM6IHN0cmluZ1tdID0gW107XG4gICAgLy8gIHJlc3VsdFRhYnMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5zaG93SW5wdXRzKSB7XG4gICAgICBjYXRlZ29yaWVzLnB1c2goJ0lOUFVUJyk7XG4gICAgICB0aGlzLnJlc3VsdFRhYnMuc2V0KCdJTlBVVCcsIHRoaXMuaW5wdXRzRGl2KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMuZnVuYy5vdXRwdXRzKSB7XG4gICAgICBpZiAoY2F0ZWdvcmllcy5pbmNsdWRlcyhwLmNhdGVnb3J5KSlcbiAgICAgICAgY29udGludWU7XG4gICAgICBjYXRlZ29yaWVzLnB1c2gocC5jYXRlZ29yeSk7XG4gICAgfVxuICAgIGlmICgoY2F0ZWdvcmllcy5sZW5ndGggPiAxIHx8IChjYXRlZ29yaWVzLmxlbmd0aCA9PSAxICYmIGNhdGVnb3JpZXNbMF0gIT0gJ01pc2MnKSkpIHtcbiAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wgPSBERy5UYWJDb250cm9sLmNyZWF0ZSgpO1xuICAgICAgZm9yIChjb25zdCBjIG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3VsdFRhYnMuaGFzKGMpKVxuICAgICAgICAgIHRoaXMucmVzdWx0VGFicy5zZXQoYywgdWkuZGl2KFtdLCAndWktcGFuZWwsIGdyb2stZnVuYy1yZXN1bHRzJykpO1xuICAgICAgICBsZXQgbmFtZSA9IGM7XG4gICAgICAgIGlmICh0aGlzLnNob3dJbnB1dHMgJiYgY2F0ZWdvcmllcy5sZW5ndGggPT0gMiAmJiBjID09ICdNaXNjJylcbiAgICAgICAgICBuYW1lID0gJ09VVFBVVCc7XG4gICAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuYWRkUGFuZShuYW1lLCAoKSA9PiB0aGlzLnJlc3VsdFRhYnMuZ2V0KGMpID8/IHVpLmRpdigpKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYXRlZ29yaWVzLmxlbmd0aCA+IDEgJiYgdGhpcy5zaG93SW5wdXRzICYmIHN3aXRjaFRvT3V0cHV0KVxuICAgICAgICB0aGlzLnJlc3VsdHNUYWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5wYW5lc1sxXTtcbiAgICAgIHRoaXMucmVzdWx0c0RpdiA9IHRoaXMucmVzdWx0c1RhYkNvbnRyb2wucm9vdDtcbiAgICB9XG4gICAgdGhpcy5idWlsZE91dHB1dEJsb2NrKCk7XG4gIH1cblxuICBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sYXN0Q2FsbCA9IHRoaXMucHJlcGFyZWRDYWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29tcHV0ZSh0aGlzLmxhc3RDYWxsISk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdGhpcy5vbkNvbXB1dGF0aW9uRXJyb3IubmV4dCh0aGlzLmxhc3RDYWxsKTtcbiAgICB9XG4gICAgdGhpcy5vbkNvbXB1dGF0aW9uU3VjY2VlZGVkLm5leHQodGhpcy5sYXN0Q2FsbCEpO1xuXG4gICAgdGhpcy5vdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KHRoaXMubGFzdENhbGwhKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXB1dGUoY2FsbDogREcuRnVuY0NhbGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBjYWxsLmNhbGwodHJ1ZSwgdW5kZWZpbmVkLCB7cHJvY2Vzc2VkOiB0cnVlfSk7XG4gIH1cblxuICBvdXRwdXRQYXJhbWV0ZXJzVG9WaWV3KGNhbGw6IERHLkZ1bmNDYWxsKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlc3VsdHModHJ1ZSk7XG4gICAgZm9yIChjb25zdCBwIG9mIGNhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkge1xuICAgICAgcC5wcm9jZXNzT3V0cHV0KCk7XG4gICAgICBpZiAocC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmIHAudmFsdWUgIT0gbnVsbClcbiAgICAgICAgdGhpcy5hcHBlbmRSZXN1bHREYXRhRnJhbWUocCwge2NhcHRpb246IHAucHJvcGVydHkubmFtZSwgY2F0ZWdvcnk6IHAucHJvcGVydHkuY2F0ZWdvcnl9KTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5hcHBlbmRSZXN1bHRTY2FsYXIocCwge2NhcHRpb246IHAucHJvcGVydHkubmFtZSwgY2F0ZWdvcnk6IHAucHJvcGVydHkuY2F0ZWdvcnl9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJSdW5TZWN0aW9uKGNhbGw6IERHLkZ1bmNDYWxsKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB1aS53YWl0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJ1bkJ1dHRvbiA9IHVpLmJpZ0J1dHRvbignUnVuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjYWxsLmF1eFsndmlldyddID0gdGhpcy5kYXJ0O1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bigpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlZGl0b3IgPSB1aS5kaXYoKTtcbiAgICAgIGNvbnN0IGlucHV0czogREcuSW5wdXRCYXNlW10gPSBhd2FpdCBjYWxsLmJ1aWxkRWRpdG9yKGVkaXRvciwge2NvbmRlbnNlZDogdHJ1ZX0pO1xuICAgICAgZWRpdG9yLmNsYXNzTGlzdC5hZGQoJ3VpLWZvcm0nKTtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSB1aS5kaXZIKFt0aGlzLmhpc3RvcnlSb290LCBydW5CdXR0b25dLCB7c3R5bGU6IHsnanVzdGlmeS1jb250ZW50JzogJ3NwYWNlLWJldHdlZW4nfX0pO1xuICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9KTtcbiAgfVxuXG4gIHNob3dJbnB1dHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2luZ2xlRGZQYXJhbTogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXJhbVZpZXdlcnM6IE1hcDxzdHJpbmcsIERHLlZpZXdlcltdPiA9IG5ldyBNYXAoKTtcbiAgcmVzdWx0c1RhYkNvbnRyb2w6IERHLlRhYkNvbnRyb2wgfCB1bmRlZmluZWQ7XG4gIHJlc3VsdFRhYnM6IE1hcDxTdHJpbmcsIEhUTUxFbGVtZW50PiA9IG5ldyBNYXAoKTtcbiAgcmVzdWx0c0RpdjogSFRNTEVsZW1lbnQgPSB1aS5wYW5lbChbXSwgJ2dyb2stZnVuYy1yZXN1bHRzJyk7XG4gIGNvbnRyb2xzUm9vdDogSFRNTERpdkVsZW1lbnQgPSB1aS5ib3goKTtcbiAgcmVzdWx0c1Jvb3Q6IEhUTUxEaXZFbGVtZW50ID0gdWkuYm94KCk7XG4gIGhpc3RvcnlSb290OiBIVE1MRGl2RWxlbWVudCA9IHVpLmRpdlYoW10sIHtzdHlsZTogeydqdXN0aWZ5LWNvbnRlbnQnOiAnY2VudGVyJ319KTtcbiAgaW5wdXRzRGl2OiBIVE1MRGl2RWxlbWVudCA9IHVpLnBhbmVsKFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMnKTtcblxuICBhcHBlbmRSZXN1bHREYXRhRnJhbWUocGFyYW06IERHLkZ1bmNDYWxsUGFyYW0sIG9wdGlvbnM/OiB7IGNhcHRpb24/OiBzdHJpbmcsIGNhdGVnb3J5Pzogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXJ9KSB7XG4gICAgY29uc3QgZGYgPSBwYXJhbS52YWx1ZTtcbiAgICBsZXQgY2FwdGlvbiA9IG9wdGlvbnM/LmNhcHRpb247XG4gICAgbGV0IGhlaWdodCA9IG9wdGlvbnM/LmhlaWdodCA/PyA0MDA7XG4gICAgY29uc3Qgdmlld2VyczogREcuVmlld2VyW10gPSBwYXJhbS5hdXhbJ3ZpZXdlcnMnXSA/PyBbXTtcbiAgICBjYXB0aW9uID8/PSBwYXJhbS5hdXhbJ3ZpZXdlclRpdGxlJ10gPz9cbiAgICAgICgodGhpcy5zaW5nbGVEZlBhcmFtICYmIHZpZXdlcnMubGVuZ3RoID09IDEpID8gJycgOiBwYXJhbS5wcm9wZXJ0eS5jYXB0aW9uKSA/PyAnJztcbiAgICBsZXQgZXhpc3RpbmdWaWV3ZXJzOiBERy5WaWV3ZXJbXSB8IHVuZGVmaW5lZCA9IHRoaXMucGFyYW1WaWV3ZXJzLmdldChwYXJhbS5uYW1lKTtcbiAgICBpZiAoZXhpc3RpbmdWaWV3ZXJzICE9IG51bGwpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiBleGlzdGluZ1ZpZXdlcnMpXG4gICAgICAgIHYuZGF0YUZyYW1lID0gZGY7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhpc3RpbmdWaWV3ZXJzID8/PSBbXTtcbiAgICB0aGlzLnBhcmFtVmlld2Vycy5zZXQocGFyYW0ubmFtZSwgZXhpc3RpbmdWaWV3ZXJzKTtcbiAgICBpZiAodmlld2Vycy5sZW5ndGggPT0gMClcbiAgICAgIHZpZXdlcnMucHVzaChkZi5wbG90LmdyaWQoKSk7XG5cbiAgICBjb25zdCBoaWRlTGlzdDogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBibG9ja3M6IG51bWJlciA9IDA7XG4gICAgbGV0IGJsb2NrU2l6ZTogbnVtYmVyID0gMDtcbiAgICBjb25zdCBncmlkV3JhcHBlciA9IHVpLmJsb2NrKFtdKTtcblxuICAgIGNvbnN0IGdyaWRTd2l0Y2ggPSAhd3Uodmlld2Vycykuc29tZSgodjogREcuVmlld2VyKSA9PiB2LnR5cGUgPT0gJ0dyaWQnKTtcbiAgICAkKGdyaWRXcmFwcGVyKS5oaWRlKCk7XG5cbiAgICBjb25zdCBnZXRIZWFkZXIgPSAoc3c6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHMgPSBjYXB0aW9uID8/IGRmLm5hbWUgPz8gJyc7XG4gICAgICBjb25zdCBoZWFkZXIgPSB1aS5kaXYoW10sICdncm9rLWZ1bmMtcmVzdWx0cy1oZWFkZXInKTtcbiAgICAgIGlmIChzICE9ICcnKSB7XG4gICAgICAgIGNvbnN0IGggPSB1aS5oMShzKTtcbiAgICAgICAgdWkuVG9vbHRpcC5iaW5kKGgsICgpID0+IHMpO1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoaCk7XG4gICAgICB9XG4gICAgICBpZiAoZ3JpZFN3aXRjaCkge1xuICAgICAgICBjb25zdCBpY29uID0gdWkuaWNvblN2ZygndGFibGUnLCAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdWkuc2V0RGlzcGxheUFsbChoaWRlTGlzdCwgIXN3KTtcbiAgICAgICAgICB1aS5zZXREaXNwbGF5KGdyaWRXcmFwcGVyLCBzdyk7XG4gICAgICAgICAgZ3JpZFdyYXBwZXIuY2xhc3NMaXN0LmFkZChgdWktYmxvY2stJHtibG9ja1NpemV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgLCAnU2hvdyBncmlkJyk7XG4gICAgICAgIGlmICghc3cpXG4gICAgICAgICAgaWNvbi5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGljb24pO1xuICAgICAgfVxuICAgICAgaWYgKCFncm9rLnNoZWxsLnRhYmxlcy5pbmNsdWRlcyhkZikpIHtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKHVpLmljb25zLmFkZCgoZTogYW55KSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjb25zdCB2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZpZXdlciBvZiB2aWV3ZXJzKSB7XG4gICAgICAgICAgICAgIGlmICh2aWV3ZXIudHlwZSAhPSAnR3JpZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWaWV3ZXIgPSBhd2FpdCBkZi5wbG90LmZyb21UeXBlKHZpZXdlci50eXBlKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgICAgICAgbmV3Vmlld2VyLnNldE9wdGlvbnModmlld2VyLmdldE9wdGlvbnMoKSk7XG4gICAgICAgICAgICAgICAgdi5hZGRWaWV3ZXIobmV3Vmlld2VyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKCk7XG4gICAgICAgIH0sXG4gICAgICAgICdBZGQgdG8gd29ya3NwYWNlJyxcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGVhZGVyO1xuICAgIH07XG5cbiAgICBpZiAoZ3JpZFN3aXRjaCkge1xuICAgICAgZ3JpZFdyYXBwZXIuYXBwZW5kQ2hpbGQoZ2V0SGVhZGVyKGZhbHNlKSk7XG4gICAgICBjb25zdCBncmlkID0gZGYucGxvdC5ncmlkKCk7XG4gICAgICBncmlkLnJvb3Quc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgIGdyaWRXcmFwcGVyLmFwcGVuZENoaWxkKGdyaWQucm9vdCk7XG4gICAgICBleGlzdGluZ1ZpZXdlcnMucHVzaChncmlkKTtcbiAgICB9XG5cbiAgICBsZXQgaGVhZGVyID0gZ2V0SGVhZGVyKHRydWUpO1xuICAgIHRoaXMuX2FwcGVuZFJlc3VsdEVsZW1lbnQoZ3JpZFdyYXBwZXIsIG9wdGlvbnM/LmNhdGVnb3J5KTtcbiAgICBmb3IgKGNvbnN0IHZpZXdlciBvZiB2aWV3ZXJzKSB7XG4gICAgICBpZiAodmlld2VyPy50YWdzID09IG51bGwpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgZXhpc3RpbmdWaWV3ZXJzLnB1c2godmlld2VyKTtcbiAgICAgIGNvbnN0IGJsb2NrID0gdmlld2VyLnRhZ3NbJy5ibG9jay1zaXplJ10gPz8gMTAwO1xuICAgICAgY29uc3Qgd3JhcHBlciA9IHVpLmJsb2NrKFtdLCBgdWktYmxvY2stJHtibG9ja31gKTtcbiAgICAgIGlmIChibG9ja3MgKyBibG9jayA8PSAxMDApIHtcbiAgICAgICAgaGlkZUxpc3QucHVzaCh3cmFwcGVyKTtcbiAgICAgICAgYmxvY2tTaXplICs9IGJsb2NrO1xuICAgICAgfVxuICAgICAgYmxvY2tzICs9IGJsb2NrO1xuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoZWFkZXIpO1xuICAgICAgaGVhZGVyID0gdWkuZGl2KFtdLCAnZ3Jvay1mdW5jLXJlc3VsdHMtaGVhZGVyJyk7XG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHZpZXdlci5yb290KTtcbiAgICAgIGlmICh2aWV3ZXIudHlwZSA9PSAnZ3JpZCcpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9IHZpZXdlci5nZXRPcHRpb25zKClbJ3Jvd0hlaWdodCddICpcbiAgICAgICAgICAodmlld2VyLmRhdGFGcmFtZSEucm93Q291bnQgKyAxKTtcbiAgICAgICAgaWYgKHRvdGFsSGVpZ2h0IDwgaGVpZ2h0KVxuICAgICAgICAgIGhlaWdodCA9IHRvdGFsSGVpZ2h0O1xuICAgICAgfVxuICAgICAgdmlld2VyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICAgIHRoaXMuX2FwcGVuZFJlc3VsdEVsZW1lbnQod3JhcHBlciwgb3B0aW9ucz8uY2F0ZWdvcnkpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGVuZFJlc3VsdFNjYWxhcihwYXJhbTogREcuRnVuY0NhbGxQYXJhbSwgb3B0aW9uczogeyBjYXB0aW9uPzogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBoZWlnaHQ/OiBudW1iZXJ9KSB7XG4gICAgaWYgKHRoaXMucmVzdWx0c1RhYkNvbnRyb2wpIHtcbiAgICAgIHRoaXMucmVzdWx0c1RhYkNvbnRyb2wuZ2V0UGFuZShvcHRpb25zLmNhdGVnb3J5KS5jb250ZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgdGhpcy5yZXN1bHRzVGFiQ29udHJvbC5nZXRQYW5lKG9wdGlvbnMuY2F0ZWdvcnkpLmNvbnRlbnQuYXBwZW5kKHVpLnNwYW4oW2Ake29wdGlvbnMuY2FwdGlvbiA/PyBwYXJhbS5uYW1lfTogYCwgYCR7cGFyYW0udmFsdWV9YF0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN1bHRzRGl2LmlubmVySFRNTCA9ICcnO1xuICAgICAgdGhpcy5yZXN1bHRzRGl2LmFwcGVuZCh1aS5zcGFuKFtgJHtvcHRpb25zLmNhcHRpb24gPz8gcGFyYW0ubmFtZX06IGAsIGAke3BhcmFtLnZhbHVlfWBdKSk7XG4gICAgfVxuICB9XG5cbiAgX2FwcGVuZFJlc3VsdEVsZW1lbnQoZDogSFRNTEVsZW1lbnQsIGNhdGVnb3J5Pzogc3RyaW5nKSB7XG4gICAgaWYgKGNhdGVnb3J5ICE9IG51bGwgJiYgdGhpcy5yZXN1bHRzVGFiQ29udHJvbCAhPSB1bmRlZmluZWQgJiYgdGhpcy5yZXN1bHRUYWJzLmdldChjYXRlZ29yeSkgIT0gbnVsbClcbiAgICAgIHRoaXMucmVzdWx0VGFicy5nZXQoY2F0ZWdvcnkpIS5hcHBlbmRDaGlsZChkKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnJlc3VsdHNEaXYuYXBwZW5kQ2hpbGQoZCk7XG4gIH1cbn1cblxuY29uc3QgZ2V0U2hlZXROYW1lID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aW9uOiBESVJFQ1RJT04pID0+IHtcbiAgY29uc3QgaWRlYWxOYW1lID0gYCR7ZGlyZWN0aW9ufSAtICR7bmFtZX1gO1xuICByZXR1cm4gKGlkZWFsTmFtZS5sZW5ndGggPiAzMSkgPyBuYW1lLnN1YnN0cmluZygwLCAzMikgOiBpZGVhbE5hbWU7XG59O1xuXG5lbnVtIERJUkVDVElPTiB7XG4gIElOUFVUID0gJ0lucHV0JyxcbiAgT1VUUFVUID0gJ091dHB1dCdcbn1cblxuY29uc3Qgc2NhbGFyc1RvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBzY2FsYXJzOiB7Y2FwdGlvbjogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCB1bml0czogc3RyaW5nfVtdKSA9PiB7XG4gIHNoZWV0LmFkZFJvdyhbJ1BhcmFtZXRlcicsICdWYWx1ZScsICdVbml0cyddKS5mb250ID0ge2JvbGQ6IHRydWV9O1xuICBzY2FsYXJzLmZvckVhY2goKHNjYWxhcikgPT4ge1xuICAgIHNoZWV0LmFkZFJvdyhbc2NhbGFyLmNhcHRpb24sIHNjYWxhci52YWx1ZSwgc2NhbGFyLnVuaXRzXSk7XG4gIH0pO1xuXG4gIHNoZWV0LmdldENvbHVtbigxKS53aWR0aCA9IE1hdGgubWF4KFxuICAgIC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci5jYXB0aW9uLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1BhcmFtZXRlcicubGVuZ3RoLFxuICApICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMikud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgpLCAnVmFsdWUnLmxlbmd0aCkgKiAxLjI7XG4gIHNoZWV0LmdldENvbHVtbigzKS53aWR0aCA9IE1hdGgubWF4KC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci51bml0cy50b1N0cmluZygpLmxlbmd0aCksICdVbml0cycubGVuZ3RoKSAqIDEuMjtcbn07XG5cbmNvbnN0IGRmVG9TaGVldCA9IChzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIGRmOiBERy5EYXRhRnJhbWUpID0+IHtcbiAgc2hlZXQuYWRkUm93KChkZi5jb2x1bW5zIGFzIERHLkNvbHVtbkxpc3QpLm5hbWVzKCkpLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGYucm93Q291bnQ7IGkrKylcbiAgICBzaGVldC5hZGRSb3coWy4uLmRmLnJvdyhpKS5jZWxsc10ubWFwKChjZWxsOiBERy5DZWxsKSA9PiBjZWxsLnZhbHVlKSk7XG5cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICBzaGVldC5nZXRDb2x1bW4oaSsxKS53aWR0aCA9XG4gICAgICBNYXRoLm1heChcbiAgICAgICAgLi4uKGRmLmNvbHVtbnMgYXMgREcuQ29sdW1uTGlzdCkuYnlJbmRleChpKS5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IGNhdGVnb3J5LnRvU3RyaW5nKCkubGVuZ3RoKSxcbiAgICAgICAgKGRmLmNvbHVtbnMgYXMgREcuQ29sdW1uTGlzdCkuYnlJbmRleChpKS5uYW1lLmxlbmd0aCxcbiAgICAgICkgKiAxLjI7XG4gIH1cbn07XG4iXX0=
|
|
@@ -178,4 +178,4 @@ export function getDiverseSubset(length, n, dist) {
|
|
|
178
178
|
}
|
|
179
179
|
return subset;
|
|
180
180
|
}
|
|
181
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltaWxhcml0eS1tZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2ltaWxhcml0eS1tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTJEO0lBQ3RGLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUIsTUFBTSxFQUFFLGNBQWM7SUFDdEIsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxnQkFBZ0IsRUFBRSx1QkFBdUI7SUFDekMsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsZ0JBQWdCLEVBQUUsdUJBQXVCO0lBQ3pDLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsT0FBTyxFQUFFLGVBQWU7SUFDeEIsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixXQUFXLEVBQUUsbUJBQW1CO0NBQ2pDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTJEO0lBQ3JGLFVBQVUsRUFBRSxnQkFBZ0I7SUFDNUIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxnQkFBZ0IsRUFBRSxxQkFBcUI7SUFDdkMsUUFBUSxFQUFFLGNBQWM7SUFDeEIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxlQUFlLEVBQUUsb0JBQW9CO0lBQ3JDLGdCQUFnQixFQUFFLHFCQUFxQjtJQUN2QyxRQUFRLEVBQUUsY0FBYztJQUN4QixPQUFPLEVBQUUsYUFBYTtJQUN0QixTQUFTLEVBQUUsZUFBZTtJQUMxQixXQUFXLEVBQUUsaUJBQWlCO0NBQy9CLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU5RixNQUFNLFVBQVUs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R0FBRyxjQUFjLENBQUM7YUFDN0I7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckI7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FDZixVQUFVLENBQUMsTUFBTSxFQUE4QixFQUMvQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBUyxHQUFHLEVBQUUsS0FBSztZQUN4RCxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0QXJyYXkgZnJvbSAnLi9iaXQtYXJyYXknO1xuaW1wb3J0IHtyYW5kb21JbnR9IGZyb20gJy4vcmFuZG9tJztcblxuZXhwb3J0IGNvbnN0IHNpbWlsYXJpdHlNZXRyaWM6IHtbbmFtZTogc3RyaW5nXTogKHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSkgPT4gbnVtYmVyfSA9IHtcbiAgJ1Rhbmltb3RvJzogdGFuaW1vdG9TaW1pbGFyaXR5LFxuICAnRGljZSc6IGRpY2VTaW1pbGFyaXR5LFxuICAnQXN5bW1ldHJpYyc6IGFzeW1tZXRyaWNTaW1pbGFyaXR5LFxuICAnQnJhdW4tQmxhbnF1ZXQnOiBicmF1bkJsYW5xdWV0U2ltaWxhcml0eSxcbiAgJ0Nvc2luZSc6IGNvc2luZVNpbWlsYXJpdHksXG4gICdLdWxjenluc2tpJzoga3VsY3p5bnNraVNpbWlsYXJpdHksXG4gICdNYy1Db25uYXVnaGV5JzogbWNDb25uYXVnaGV5U2ltaWxhcml0eSxcbiAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ1NpbWlsYXJpdHksXG4gICdSdXNzZWwnOiBydXNzZWxTaW1pbGFyaXR5LFxuICAnU29rYWwnOiBzb2thbFNpbWlsYXJpdHksXG4gICdIYW1taW5nJzogaGFtbWluZ1NpbWlsYXJpdHksXG4gICdFdWNsaWRlYW4nOiBldWNsaWRlYW5TaW1pbGFyaXR5LFxufTtcblxuZXhwb3J0IGNvbnN0IGRpc3RhbmNlTWV0cmljczoge1tuYW1lOiBzdHJpbmddOiAoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KSA9PiBudW1iZXJ9ID0ge1xuICAnVGFuaW1vdG8nOiB0YW5pbW90b0Rpc3RhbmNlLFxuICAnRGljZSc6IGRpY2VEaXN0YW5jZSxcbiAgJ0FzeW1tZXRyaWMnOiBhc3ltbWV0cmljRGlzdGFuY2UsXG4gICdCcmF1bi1CbGFucXVldCc6IGJyYXVuQmxhbnF1ZXREaXN0YW5jZSxcbiAgJ0Nvc2luZSc6IGNvc2luZURpc3RhbmNlLFxuICAnS3VsY3p5bnNraSc6IGt1bGN6eW5za2lEaXN0YW5jZSxcbiAgJ01jLUNvbm5hdWdoZXknOiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSxcbiAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ0Rpc3RhbmNlLFxuICAnUnVzc2VsJzogcnVzc2VsRGlzdGFuY2UsXG4gICdTb2thbCc6IHNva2FsRGlzdGFuY2UsXG4gICdIYW1taW5nJzogaGFtbWluZ0Rpc3RhbmNlLFxuICAnRXVjbGlkZWFuJzogZXVjbGlkZWFuRGlzdGFuY2UsXG59O1xuXG5leHBvcnQgY29uc3QgQ0hFTV9TSU1JTEFSSVRZX01FVFJJQ1MgPSBbJ1Rhbmltb3RvJywgJ0RpY2UnLCAnQ29zaW5lJywgJ0hhbW1pbmcnLCAnRXVjbGlkZWFuJ107XG5cbmV4cG9ydCBmdW5jdGlvbiB0YW5pbW90b1NpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgaWYgKHRvdGFsID09IDApXG4gICAgcmV0dXJuIDEuMDtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gY29tbW9uIC8gKHRvdGFsIC0gY29tbW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhbmltb3RvRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkodGFuaW1vdG9TaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIDIgKiBjb21tb24gLyB0b3RhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShkaWNlU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3NpbmVTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIE1hdGguc3FydCh0b3RhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3NpbmVEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShjb3NpbmVTaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV1Y2xpZGVhblNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UoZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXVjbGlkZWFuRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguc3FydCh4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKSAtIDIqeC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbW1pbmdTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIHJldHVybiBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKGhhbW1pbmdEaXN0YW5jZSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW1taW5nRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpIC0gMip4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2thbFNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gY29tbW9uIC8gKDIgKiB0b3RhbCAtIDMgKiBjb21tb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29rYWxEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShzb2thbFNpbWlsYXJpdHkoeCwgeSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3VsY3p5bnNraVNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbFByb2QgPT0gMClcbiAgICByZXR1cm4gMC4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiAoY29tbW9uICogdG90YWwpIC8gKDIgKiB0b3RhbFByb2QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3VsY3p5bnNraURpc3RhbmNlKHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGt1bGN6eW5za2lTaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1jQ29ubmF1Z2hleVNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbFByb2QgPT0gMClcbiAgICByZXR1cm4gMC4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiAoY29tbW9uICogdG90YWwgLSB0b3RhbFByb2QpIC8gdG90YWxQcm9kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWNDb25uYXVnaGV5RGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkobWNDb25uYXVnaGV5U2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3ltbWV0cmljU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBtaW4gPSBNYXRoLm1pbih4LnRydWVDb3VudCgpLCB5LnRydWVDb3VudCgpKTtcbiAgaWYgKG1pbiA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW1tZXRyaWNEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShhc3ltbWV0cmljU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmF1bkJsYW5xdWV0U2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBtYXggPSBNYXRoLm1heCh4LnRydWVDb3VudCgpLCB5LnRydWVDb3VudCgpKTtcbiAgaWYgKG1heCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIG1heDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYXVuQmxhbnF1ZXREaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShicmF1bkJsYW5xdWV0U2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydXNzZWxTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGlmICh4Lmxlbmd0aCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIHgubGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVzc2VsRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkocnVzc2VsU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIGNvbnN0IHRvdGFsID0geC5jb3VudEJpdHModHJ1ZSkgKyB5LmNvdW50Qml0cyh0cnVlKTtcbiAgY29uc3QgbGVuID0geC5sZW5ndGg7XG4gIGNvbnN0IGRpZmYgPSBsZW4gLSB0b3RhbCArIGNvbW1vbjtcbiAgaWYgKChjb21tb24gPT0gbGVuKSB8fCAoZGlmZiA9PSBsZW4pKSByZXR1cm4gMS4wO1xuICBlbHNlIHJldHVybiBjb21tb24gLyB0b3RhbCArIGRpZmYgLyAoMiAqIGxlbiAtIHRvdGFsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvZ290R29sZGJlcmdEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShyb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpIHtcbiAgcmV0dXJuIDEvKDErZGlzdGFuY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShzaW1pbGFyaXR5OiBudW1iZXIpIHtcbiAgcmV0dXJuIDEvc2ltaWxhcml0eSAtIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aDogbnVtYmVyLCBuOiBudW1iZXIsIGRpc3Q6IChpMTogbnVtYmVyLCBpMjogbnVtYmVyKSA9PiBudW1iZXIpIHtcbiAgZnVuY3Rpb24gbWF4QnkodmFsdWVzOiBJdGVyYWJsZUl0ZXJhdG9yPG51bWJlcj4sIG9yZGVyQnk6IChpOiBudW1iZXIpID0+IG51bWJlcikge1xuICAgIGxldCBtYXhWYWx1ZSA9IG51bGw7XG4gICAgbGV0IG1heE9yZGVyQnkgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHZhbHVlcykge1xuICAgICAgY29uc3QgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpO1xuICAgICAgaWYgKG1heE9yZGVyQnkgPT0gbnVsbCB8fCBlbGVtZW50T3JkZXJCeSA+IG1heE9yZGVyQnkpIHtcbiAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICBtYXhPcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgfVxuXG4gIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICBjb25zdCBjb21wbGVtZW50ID0gbmV3IFNldCgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICB9XG5cbiAgd2hpbGUgKHN1YnNldC5sZW5ndGggPCBuKSB7XG4gICAgY29uc3QgaWR4ID0gbWF4QnkoXG4gICAgICBjb21wbGVtZW50LnZhbHVlcygpIGFzIEl0ZXJhYmxlSXRlcmF0b3I8bnVtYmVyPixcbiAgICAgIChpKSA9PiBNYXRoLm1pbi5hcHBseShNYXRoLCBzdWJzZXQubWFwKGZ1bmN0aW9uKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGRpc3QoaSwgdmFsKTtcbiAgICAgIH0pKSk7XG4gICAgaWYgKGlkeCkge1xuICAgICAgc3Vic2V0LnB1c2goaWR4KTtcbiAgICAgIGNvbXBsZW1lbnQuZGVsZXRlKGlkeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdWJzZXQ7XG59XG4iXX0=
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltaWxhcml0eS1tZXRyaWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic2ltaWxhcml0eS1tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTJEO0lBQ3RGLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUIsTUFBTSxFQUFFLGNBQWM7SUFDdEIsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxnQkFBZ0IsRUFBRSx1QkFBdUI7SUFDekMsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixZQUFZLEVBQUUsb0JBQW9CO0lBQ2xDLGVBQWUsRUFBRSxzQkFBc0I7SUFDdkMsZ0JBQWdCLEVBQUUsdUJBQXVCO0lBQ3pDLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsT0FBTyxFQUFFLGVBQWU7SUFDeEIsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixXQUFXLEVBQUUsbUJBQW1CO0NBQ2pDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQTJEO0lBQ3JGLFVBQVUsRUFBRSxnQkFBZ0I7SUFDNUIsTUFBTSxFQUFFLFlBQVk7SUFDcEIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxnQkFBZ0IsRUFBRSxxQkFBcUI7SUFDdkMsUUFBUSxFQUFFLGNBQWM7SUFDeEIsWUFBWSxFQUFFLGtCQUFrQjtJQUNoQyxlQUFlLEVBQUUsb0JBQW9CO0lBQ3JDLGdCQUFnQixFQUFFLHFCQUFxQjtJQUN2QyxRQUFRLEVBQUUsY0FBYztJQUN4QixPQUFPLEVBQUUsYUFBYTtJQUN0QixTQUFTLEVBQUUsZUFBZTtJQUMxQixXQUFXLEVBQUUsaUJBQWlCO0NBQy9CLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUU5RixNQUFNLFVBQVUs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R0FBRyxjQUFjLENBQUM7YUFDN0I7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckI7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FDZixVQUFVLENBQUMsTUFBTSxFQUE4QixFQUMvQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBUyxHQUFHLEVBQUUsS0FBSztZQUN4RCxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQml0QXJyYXkgZnJvbSAnLi9iaXQtYXJyYXknO1xuaW1wb3J0IHtyYW5kb21JbnR9IGZyb20gJy4vcmFuZG9tJztcblxuZXhwb3J0IGNvbnN0IHNpbWlsYXJpdHlNZXRyaWM6IHtbbmFtZTogc3RyaW5nXTogKHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSkgPT4gbnVtYmVyfSA9IHtcbiAgJ1Rhbmltb3RvJzogdGFuaW1vdG9TaW1pbGFyaXR5LFxuICAnRGljZSc6IGRpY2VTaW1pbGFyaXR5LFxuICAnQXN5bW1ldHJpYyc6IGFzeW1tZXRyaWNTaW1pbGFyaXR5LFxuICAnQnJhdW4tQmxhbnF1ZXQnOiBicmF1bkJsYW5xdWV0U2ltaWxhcml0eSxcbiAgJ0Nvc2luZSc6IGNvc2luZVNpbWlsYXJpdHksXG4gICdLdWxjenluc2tpJzoga3VsY3p5bnNraVNpbWlsYXJpdHksXG4gICdNYy1Db25uYXVnaGV5JzogbWNDb25uYXVnaGV5U2ltaWxhcml0eSxcbiAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ1NpbWlsYXJpdHksXG4gICdSdXNzZWwnOiBydXNzZWxTaW1pbGFyaXR5LFxuICAnU29rYWwnOiBzb2thbFNpbWlsYXJpdHksXG4gICdIYW1taW5nJzogaGFtbWluZ1NpbWlsYXJpdHksXG4gICdFdWNsaWRlYW4nOiBldWNsaWRlYW5TaW1pbGFyaXR5LFxufTtcblxuZXhwb3J0IGNvbnN0IGRpc3RhbmNlTWV0cmljczoge1tuYW1lOiBzdHJpbmddOiAoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KSA9PiBudW1iZXJ9ID0ge1xuICAnVGFuaW1vdG8nOiB0YW5pbW90b0Rpc3RhbmNlLFxuICAnRGljZSc6IGRpY2VEaXN0YW5jZSxcbiAgJ0FzeW1tZXRyaWMnOiBhc3ltbWV0cmljRGlzdGFuY2UsXG4gICdCcmF1bi1CbGFucXVldCc6IGJyYXVuQmxhbnF1ZXREaXN0YW5jZSxcbiAgJ0Nvc2luZSc6IGNvc2luZURpc3RhbmNlLFxuICAnS3VsY3p5bnNraSc6IGt1bGN6eW5za2lEaXN0YW5jZSxcbiAgJ01jLUNvbm5hdWdoZXknOiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSxcbiAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ0Rpc3RhbmNlLFxuICAnUnVzc2VsJzogcnVzc2VsRGlzdGFuY2UsXG4gICdTb2thbCc6IHNva2FsRGlzdGFuY2UsXG4gICdIYW1taW5nJzogaGFtbWluZ0Rpc3RhbmNlLFxuICAnRXVjbGlkZWFuJzogZXVjbGlkZWFuRGlzdGFuY2UsXG59O1xuXG5leHBvcnQgY29uc3QgQ0hFTV9TSU1JTEFSSVRZX01FVFJJQ1MgPSBbJ1Rhbmltb3RvJywgJ0RpY2UnLCAnQ29zaW5lJywgJ0hhbW1pbmcnLCAnRXVjbGlkZWFuJ107XG5cbmV4cG9ydCBmdW5jdGlvbiB0YW5pbW90b1NpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgaWYgKHRvdGFsID09IDApXG4gICAgcmV0dXJuIDEuMDtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gY29tbW9uIC8gKHRvdGFsIC0gY29tbW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhbmltb3RvRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkodGFuaW1vdG9TaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIDIgKiBjb21tb24gLyB0b3RhbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY2VEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShkaWNlU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3NpbmVTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIE1hdGguc3FydCh0b3RhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3NpbmVEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShjb3NpbmVTaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV1Y2xpZGVhblNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UoZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXVjbGlkZWFuRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguc3FydCh4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKSAtIDIqeC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbW1pbmdTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIHJldHVybiBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKGhhbW1pbmdEaXN0YW5jZSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW1taW5nRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpIC0gMip4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb2thbFNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICByZXR1cm4gY29tbW9uIC8gKDIgKiB0b3RhbCAtIDMgKiBjb21tb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc29rYWxEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShzb2thbFNpbWlsYXJpdHkoeCwgeSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3VsY3p5bnNraVNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbFByb2QgPT0gMClcbiAgICByZXR1cm4gMC4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiAoY29tbW9uICogdG90YWwpIC8gKDIgKiB0b3RhbFByb2QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga3VsY3p5bnNraURpc3RhbmNlKHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGt1bGN6eW5za2lTaW1pbGFyaXR5KHgsIHkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1jQ29ubmF1Z2hleVNpbWlsYXJpdHkoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gIGlmICh0b3RhbFByb2QgPT0gMClcbiAgICByZXR1cm4gMC4wO1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIHJldHVybiAoY29tbW9uICogdG90YWwgLSB0b3RhbFByb2QpIC8gdG90YWxQcm9kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWNDb25uYXVnaGV5RGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkobWNDb25uYXVnaGV5U2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3ltbWV0cmljU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBtaW4gPSBNYXRoLm1pbih4LnRydWVDb3VudCgpLCB5LnRydWVDb3VudCgpKTtcbiAgaWYgKG1pbiA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW1tZXRyaWNEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShhc3ltbWV0cmljU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicmF1bkJsYW5xdWV0U2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBtYXggPSBNYXRoLm1heCh4LnRydWVDb3VudCgpLCB5LnRydWVDb3VudCgpKTtcbiAgaWYgKG1heCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIG1heDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYXVuQmxhbnF1ZXREaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShicmF1bkJsYW5xdWV0U2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydXNzZWxTaW1pbGFyaXR5KHg6IEJpdEFycmF5LCB5OiBCaXRBcnJheSk6IG51bWJlciB7XG4gIGlmICh4Lmxlbmd0aCA9PSAwKVxuICAgIHJldHVybiAwLjA7XG4gIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgcmV0dXJuIGNvbW1vbiAvIHgubGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVzc2VsRGlzdGFuY2UoeDogQml0QXJyYXksIHk6IEJpdEFycmF5KTogbnVtYmVyIHtcbiAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkocnVzc2VsU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gIGNvbnN0IHRvdGFsID0geC5jb3VudEJpdHModHJ1ZSkgKyB5LmNvdW50Qml0cyh0cnVlKTtcbiAgY29uc3QgbGVuID0geC5sZW5ndGg7XG4gIGNvbnN0IGRpZmYgPSBsZW4gLSB0b3RhbCArIGNvbW1vbjtcbiAgaWYgKChjb21tb24gPT0gbGVuKSB8fCAoZGlmZiA9PSBsZW4pKSByZXR1cm4gMS4wO1xuICBlbHNlIHJldHVybiBjb21tb24gLyB0b3RhbCArIGRpZmYgLyAoMiAqIGxlbiAtIHRvdGFsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvZ290R29sZGJlcmdEaXN0YW5jZSh4OiBCaXRBcnJheSwgeTogQml0QXJyYXkpOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShyb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4LCB5KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKGRpc3RhbmNlOiBudW1iZXIpIHtcbiAgcmV0dXJuIDEgLyAoIDEgKyBkaXN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KHNpbWlsYXJpdHk6IG51bWJlcikge1xuICByZXR1cm4gMSAvIHNpbWlsYXJpdHkgLSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGl2ZXJzZVN1YnNldChsZW5ndGg6IG51bWJlciwgbjogbnVtYmVyLCBkaXN0OiAoaTE6IG51bWJlciwgaTI6IG51bWJlcikgPT4gbnVtYmVyKSB7XG4gIGZ1bmN0aW9uIG1heEJ5KHZhbHVlczogSXRlcmFibGVJdGVyYXRvcjxudW1iZXI+LCBvcmRlckJ5OiAoaTogbnVtYmVyKSA9PiBudW1iZXIpIHtcbiAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgIGxldCBtYXhPcmRlckJ5ID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgIG1heFZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgbWF4T3JkZXJCeSA9IGVsZW1lbnRPcmRlckJ5O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF4VmFsdWU7XG4gIH1cblxuICBjb25zdCBzdWJzZXQgPSBbcmFuZG9tSW50KGxlbmd0aCAtIDEpXTtcbiAgY29uc3QgY29tcGxlbWVudCA9IG5ldyBTZXQoKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFzdWJzZXQuaW5jbHVkZXMoaSkpXG4gICAgICBjb21wbGVtZW50LmFkZChpKTtcbiAgfVxuXG4gIHdoaWxlIChzdWJzZXQubGVuZ3RoIDwgbikge1xuICAgIGNvbnN0IGlkeCA9IG1heEJ5KFxuICAgICAgY29tcGxlbWVudC52YWx1ZXMoKSBhcyBJdGVyYWJsZUl0ZXJhdG9yPG51bWJlcj4sXG4gICAgICAoaSkgPT4gTWF0aC5taW4uYXBwbHkoTWF0aCwgc3Vic2V0Lm1hcChmdW5jdGlvbih2YWwsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICB9KSkpO1xuICAgIGlmIChpZHgpIHtcbiAgICAgIHN1YnNldC5wdXNoKGlkeCk7XG4gICAgICBjb21wbGVtZW50LmRlbGV0ZShpZHgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3Vic2V0O1xufVxuIl19
|
package/src/string-utils.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-utils.d.ts","sourceRoot":"","sources":["string-utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAM3C;AAED,qBAAa,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAC7D,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"string-utils.d.ts","sourceRoot":"","sources":["string-utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAM3C;AAED,qBAAa,WAAW;IACtB;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAC7D,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,MAAM;IAI9F,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;CAG1C"}
|
package/src/string-utils.js
CHANGED
|
@@ -16,5 +16,8 @@ export class StringUtils {
|
|
|
16
16
|
static getUniqueName(initialName, existingNames, options) {
|
|
17
17
|
return api.grok_Utils_GetUniqueName(initialName, existingNames, options === null || options === void 0 ? void 0 : options.auto, options === null || options === void 0 ? void 0 : options.idx, options === null || options === void 0 ? void 0 : options.render, options === null || options === void 0 ? void 0 : options.choices);
|
|
18
18
|
}
|
|
19
|
+
static isEmpty(s) {
|
|
20
|
+
return s == null || s == '';
|
|
21
|
+
}
|
|
19
22
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3RyaW5nLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLElBQUksR0FBRyxHQUFRLE1BQU0sQ0FBQztBQUV0QixNQUFNLFVBQVUsWUFBWSxDQUFDLENBQVM7SUFDcEMsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0QjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUM7QUFFRCxNQUFNLE9BQU8sV0FBVztJQUN0Qjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFtQixFQUFFLGFBQXVCLEVBQzdELE9BQWlGO1FBQ25GLE9BQU8sR0FBRyxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLElBQUksRUFBRSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsR0FBRyxFQUFFLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xJLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQWdCO1FBQzdCLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImxldCBhcGkgPSA8YW55PndpbmRvdztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyeVBhcnNlSnNvbihzOiBzdHJpbmcpOiBhbnkge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHMpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ1V0aWxzIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBuYW1lIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gW2V4aXN0aW5nTmFtZXNdLlxuICAgKiBJZiBbZXhpc3RpbmdOYW1lc10gZG9lcyBub3QgY29udGFpbiBbaW5pdGlhbE5hbWVdLCByZXR1cm5zIFtpbml0aWFsTmFtZV0uXG4gICAqIE90aGVyd2lzZSwgdHJpZXMgW2Nob2ljZXNdLCBhbmQgaWYgdGhlIG5hbWVzIGFyZSB0YWtlbiBhbHJlYWR5LCByZXR1cm5zIGEgc3RyaW5nIGluIGEgZm9ybSBvZiAnaW5pdGlhbE5hbWUgKGkpJy5cbiAgICovXG4gIHN0YXRpYyBnZXRVbmlxdWVOYW1lKGluaXRpYWxOYW1lOiBzdHJpbmcsIGV4aXN0aW5nTmFtZXM6IHN0cmluZ1tdLFxuICAgICAgb3B0aW9ucz86IHsgYXV0bz86IGJvb2xlYW4sIGlkeD86IG51bWJlciwgcmVuZGVyPzogRnVuY3Rpb24sIGNob2ljZXM/OiBzdHJpbmdbXSB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYXBpLmdyb2tfVXRpbHNfR2V0VW5pcXVlTmFtZShpbml0aWFsTmFtZSwgZXhpc3RpbmdOYW1lcywgb3B0aW9ucz8uYXV0bywgb3B0aW9ucz8uaWR4LCBvcHRpb25zPy5yZW5kZXIsIG9wdGlvbnM/LmNob2ljZXMpO1xuICB9XG5cbiAgc3RhdGljIGlzRW1wdHkoczogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzID09IG51bGwgfHwgcyA9PSAnJztcbiAgfVxufVxuIl19
|