velocious 1.0.159 → 1.0.161
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/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +5 -4
- package/build/src/testing/test-files-finder.d.ts.map +1 -1
- package/build/src/testing/test-files-finder.js +26 -7
- package/build/src/testing/test-runner.d.ts +5 -0
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +57 -26
- package/build/src/testing/test.d.ts +1 -0
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +5 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/routes/resolver.js"],"names":[],"mappings":"AAUA;IAIE;;;;;OAKG;IACH,kDAJG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACmF,OAAO,EAA/H,OAAO,kCAAkC,EAAE,OAAO,GAAG,OAAO,4CAA4C,EAAE,OAAO;QACvD,QAAQ,EAAlE,OAAO,mCAAmC,EAAE,OAAO;KAC7D,EAUA;IAlBD,iCAAiC;IACjC,QADW,MAAM,GAAG,SAAS,CACvB;IAaJ,qDAAkC;IAClC,YAA8B;IAC9B,2HAAsB;IACtB,8DAAwB;IAG1B,yBA+EC;IAED;;;;OAIG;IACH,2BAJW,OAAO,iBAAiB,EAAE,OAAO,QACjC,MAAM,GACJ;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS,CAsB1C;IAED;;;;;OAKG;IACH,6CAJG;QAAqB,MAAM,EAAnB,MAAM;QAC0C,eAAe,EAA/D,cAAc,kBAAkB,EAAE,OAAO;KACjD,GAAU,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/routes/resolver.js"],"names":[],"mappings":"AAUA;IAIE;;;;;OAKG;IACH,kDAJG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACmF,OAAO,EAA/H,OAAO,kCAAkC,EAAE,OAAO,GAAG,OAAO,4CAA4C,EAAE,OAAO;QACvD,QAAQ,EAAlE,OAAO,mCAAmC,EAAE,OAAO;KAC7D,EAUA;IAlBD,iCAAiC;IACjC,QADW,MAAM,GAAG,SAAS,CACvB;IAaJ,qDAAkC;IAClC,YAA8B;IAC9B,2HAAsB;IACtB,8DAAwB;IAG1B,yBA+EC;IAED;;;;OAIG;IACH,2BAJW,OAAO,iBAAiB,EAAE,OAAO,QACjC,MAAM,GACJ;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS,CAsB1C;IAED;;;;;OAKG;IACH,6CAJG;QAAqB,MAAM,EAAnB,MAAM;QAC0C,eAAe,EAA/D,cAAc,kBAAkB,EAAE,OAAO;KACjD,GAAU,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;OAGG;IACH,uBAHW,IAAI,GACF,MAAM,CAqBlB;IAED;;;OAGG;IACH,iCAHW,GAAG,GACD,GAAG,CA2Bf;CACF;uBAjNoB,cAAc"}
|
|
@@ -131,11 +131,12 @@ export default class VelociousRoutesResolver {
|
|
|
131
131
|
const timestamp = this._formatTimestamp(new Date());
|
|
132
132
|
const remoteAddress = request.remoteAddress?.() || request.header("x-forwarded-for") || "unknown";
|
|
133
133
|
const loggedParams = /** @type {Record<string, unknown>} */ (this._sanitizeParamsForLogging(this.params));
|
|
134
|
+
const logMethod = this.configuration.getEnvironment() === "test" ? "debug" : "info";
|
|
134
135
|
delete loggedParams.action;
|
|
135
136
|
delete loggedParams.controller;
|
|
136
|
-
await this.logger
|
|
137
|
-
await this.logger
|
|
138
|
-
await this.logger
|
|
137
|
+
await this.logger[logMethod](() => `Started ${request.httpMethod()} "${request.path()}" for ${remoteAddress} at ${timestamp}`);
|
|
138
|
+
await this.logger[logMethod](() => `Processing by ${controllerClass.name}#${action}`);
|
|
139
|
+
await this.logger[logMethod](() => [` Parameters:`, loggedParams]);
|
|
139
140
|
}
|
|
140
141
|
/**
|
|
141
142
|
* @param {Date} date - Date value.
|
|
@@ -186,4 +187,4 @@ export default class VelociousRoutesResolver {
|
|
|
186
187
|
return value;
|
|
187
188
|
}
|
|
188
189
|
}
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL3Jlc29sdmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxLQUFLLENBQUE7QUFDakMsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDbkMsT0FBTyxZQUFZLE1BQU0sc0RBQXNELENBQUE7QUFDL0UsT0FBTyxXQUFXLE1BQU0sMEJBQTBCLENBQUE7QUFFbEQsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFDMUMsaUNBQWlDO0lBQ2pDLE1BQU0sQ0FBQTtJQUVOOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzdELElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ2pELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBRW5ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksY0FBYyxD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QUE7SUFDdEgsQ0FBQztJQUVEOzs7T0FHRztJQUNILHlCQUF5QixDQUFDLEtBQUs7UUFDN0IsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFLENBQUM7WUFDbEMsT0FBTztnQkFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNqQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7YUFDbkIsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2xFLENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxrQ0FBa0M7WUFDbEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO1lBRWpCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQzFELENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2Rpcm5hbWV9IGZyb20gXCJwYXRoXCJcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSBcInVybFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzL3Byb21pc2VzXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuLi9sb2dnZXIuanNcIlxuaW1wb3J0IFVwbG9hZGVkRmlsZSBmcm9tIFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3VwbG9hZGVkLWZpbGUvdXBsb2FkZWQtZmlsZS5qc1wiXG5pbXBvcnQgZW5zdXJlRXJyb3IgZnJvbSBcIi4uL3V0aWxzL2Vuc3VyZS1lcnJvci5qc1wiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c1JvdXRlc1Jlc29sdmVyIHtcbiAgLyoqIEB0eXBlIHtMb2dnZXIgfCB1bmRlZmluZWR9ICovXG4gIGxvZ2dlclxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9odHRwLXNlcnZlci9jbGllbnQvcmVxdWVzdC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3dlYnNvY2tldC1yZXF1ZXN0LmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVxdWVzdCAtIFJlcXVlc3Qgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC9yZXNwb25zZS5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlc3BvbnNlIC0gUmVzcG9uc2Ugb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIHJlcXVlc3QsIHJlc3BvbnNlfSkge1xuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uZmlndXJhdGlvbiBnaXZlblwiKVxuICAgIGlmICghcmVxdWVzdCkgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVxdWVzdCBnaXZlblwiKVxuICAgIGlmICghcmVzcG9uc2UpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlc3BvbnNlIGdpdmVuXCIpXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5wYXJhbXMgPSByZXF1ZXN0LnBhcmFtcygpXG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdFxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZSgpIHtcbiAgICBsZXQgY29udHJvbGxlclBhdGhcbiAgICBsZXQgY3VycmVudFJvdXRlID0gdGhpcy5jb25maWd1cmF0aW9uLnJvdXRlcy5yb290Um91dGVcbiAgICBjb25zdCByYXdQYXRoID0gdGhpcy5yZXF1ZXN0LnBhdGgoKVxuICAgIGNvbnN0IGN1cnJlbnRQYXRoID0gcmF3UGF0aC5zcGxpdChcIj9cIilbMF1cbiAgICBsZXQgdmlld1BhdGhcblxuICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gdGhpcy5tYXRjaFBhdGhXaXRoUm91dGVzKGN1cnJlbnRSb3V0ZSwgY3VycmVudFBhdGgpXG4gICAgY29uc3QgYWN0aW9uUGFyYW0gPSB0aGlzLnBhcmFtcy5hY3Rpb25cbiAgICBjb25zdCBjb250cm9sbGVyUGFyYW0gPSB0aGlzLnBhcmFtcy5jb250cm9sbGVyXG4gICAgY29uc3QgYWN0aW9uVmFsdWUgPSB0eXBlb2YgYWN0aW9uUGFyYW0gPT0gXCJzdHJpbmdcIiA/IGFjdGlvblBhcmFtIDogKEFycmF5LmlzQXJyYXkoYWN0aW9uUGFyYW0pID8gYWN0aW9uUGFyYW1bMF0gOiB1bmRlZmluZWQpXG4gICAgbGV0IGFjdGlvbiA9IHR5cGVvZiBhY3Rpb25WYWx1ZSA9PSBcInN0cmluZ1wiID8gaW5mbGVjdGlvbi5jYW1lbGl6ZShhY3Rpb25WYWx1ZS5yZXBsYWNlQWxsKFwiLVwiLCBcIl9cIiksIHRydWUpIDogdW5kZWZpbmVkXG4gICAgbGV0IGNvbnRyb2xsZXIgPSB0eXBlb2YgY29udHJvbGxlclBhcmFtID09IFwic3RyaW5nXCIgPyBjb250cm9sbGVyUGFyYW0gOiAoQXJyYXkuaXNBcnJheShjb250cm9sbGVyUGFyYW0pID8gY29udHJvbGxlclBhcmFtWzBdIDogdW5kZWZpbmVkKVxuXG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuICAgICAgY29uc3QgX19kaXJuYW1lID0gZGlybmFtZShfX2ZpbGVuYW1lKVxuICAgICAgY29uc3QgcmVxdWVzdGVkUGF0aCA9IGN1cnJlbnRQYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKSB8fCBcIl9yb290XCJcbiAgICAgIGNvbnN0IGF0dGVtcHRlZENvbnRyb2xsZXJQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7cmVxdWVzdGVkUGF0aH0vY29udHJvbGxlci5qc2BcblxuICAgICAgYXdhaXQgKHRoaXMubG9nZ2VyIHx8IG5ldyBMb2dnZXIoXCJSb3V0ZXNSZXNvbHZlclwiLCB7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSkpLndhcm4oYE5vIHJvdXRlIG1hdGNoZWQgZm9yICR7cmF3UGF0aH0uIFRyaWVkIGNvbnRyb2xsZXIgYXQgJHthdHRlbXB0ZWRDb250cm9sbGVyUGF0aH1gKVxuXG4gICAgICBjb250cm9sbGVyID0gXCJlcnJvcnNcIlxuICAgICAgY29udHJvbGxlclBhdGggPSBcIi4vYnVpbHQtaW4vZXJyb3JzL2NvbnRyb2xsZXIuanNcIlxuICAgICAgYWN0aW9uID0gXCJub3RGb3VuZFwiXG4gICAgICB2aWV3UGF0aCA9IGF3YWl0IGZzLnJlYWxwYXRoKGAke19fZGlybmFtZX0vYnVpbHQtaW4vZXJyb3JzYClcbiAgICB9IGVsc2UgaWYgKGFjdGlvbikge1xuICAgICAgaWYgKCFjb250cm9sbGVyKSBjb250cm9sbGVyID0gXCJfcm9vdFwiXG5cbiAgICAgIGNvbnRyb2xsZXJQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7Y29udHJvbGxlcn0vY29udHJvbGxlci5qc2BcbiAgICAgIHZpZXdQYXRoID0gYCR7dGhpcy5jb25maWd1cmF0aW9uLmdldERpcmVjdG9yeSgpfS9zcmMvcm91dGVzLyR7Y29udHJvbGxlcn1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWF0Y2hlZCB0aGUgcm91dGUgYnV0IGRpZG4ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdDogJHtyYXdQYXRofSAoYWN0aW9uOiAke2FjdGlvbn0sIGNvbnRyb2xsZXI6ICR7Y29udHJvbGxlcn0sIHBhcmFtczogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnBhcmFtcyl9KWApXG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlckNsYXNzSW1wb3J0ID0gYXdhaXQgaW1wb3J0KGNvbnRyb2xsZXJQYXRoKVxuICAgIGNvbnN0IGNvbnRyb2xsZXJDbGFzcyA9IGNvbnRyb2xsZXJDbGFzc0ltcG9ydC5kZWZhdWx0XG4gICAgY29uc3QgY29udHJvbGxlckluc3RhbmNlID0gbmV3IGNvbnRyb2xsZXJDbGFzcyh7XG4gICAgICBhY3Rpb24sXG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmNvbmZpZ3VyYXRpb24sXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtcyxcbiAgICAgIHJlcXVlc3Q6IHRoaXMucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlLFxuICAgICAgdmlld1BhdGhcbiAgICB9KVxuXG4gICAgaWYgKCEoYWN0aW9uIGluIGNvbnRyb2xsZXJJbnN0YW5jZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBhY3Rpb24gb24gY29udHJvbGxlcjogJHtjb250cm9sbGVyfSMke2FjdGlvbn1gKVxuICAgIH1cblxuICAgIHRoaXMubG9nZ2VyIHx8PSBuZXcgTG9nZ2VyKGNvbnRyb2xsZXJDbGFzcy5uYW1lLCB7Y29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9ufSlcblxuICAgIGF3YWl0IHRoaXMuX2xvZ0FjdGlvblN0YXJ0KHthY3Rpb24sIGNvbnRyb2xsZXJDbGFzc30pXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmF0aW9uLmVuc3VyZUNvbm5lY3Rpb25zKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY29udHJvbGxlckluc3RhbmNlLl9ydW5CZWZvcmVDYWxsYmFja3MoKVxuICAgICAgICBhd2FpdCBjb250cm9sbGVySW5zdGFuY2VbYWN0aW9uXSgpXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlbnN1cmVkRXJyb3IgPSBlbnN1cmVFcnJvcihlcnJvcilcbiAgICAgIGNvbnN0IGVycm9yQ29udGV4dCA9IHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICBodHRwTWV0aG9kOiB0aGlzLnJlcXVlc3QuaHR0cE1ldGhvZCgpLFxuICAgICAgICBwYXRoOiB0aGlzLnJlcXVlc3QucGF0aCgpLFxuICAgICAgICBzdGFnZTogXCJjb250cm9sbGVyLWFjdGlvblwiXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yV2l0aENvbnRleHQgPSAvKiogQHR5cGUge3t2ZWxvY2lvdXNDb250ZXh0Pzogb2JqZWN0fX0gKi8gKGVuc3VyZWRFcnJvcilcblxuICAgICAgZXJyb3JXaXRoQ29udGV4dC52ZWxvY2lvdXNDb250ZXh0ID0ge1xuICAgICAgICAuLi4oZXJyb3JXaXRoQ29udGV4dC52ZWxvY2lvdXNDb250ZXh0IHx8IHt9KSxcbiAgICAgICAgY29udHJvbGxlckFjdGlvbjogZXJyb3JDb250ZXh0XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVuc3VyZWRFcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vYmFzZS1yb3V0ZS5qc1wiKS5kZWZhdWx0fSByb3V0ZSAtIFJvdXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFBhdGguXG4gICAqIEByZXR1cm5zIHt7cmVzdFBhdGg6IHN0cmluZ30gfCB1bmRlZmluZWR9IC0gUkVTVCBwYXRoIG1ldGFkYXRhIGZvciB0aGlzIHJvdXRlLlxuICAgKi9cbiAgbWF0Y2hQYXRoV2l0aFJvdXRlcyhyb3V0ZSwgcGF0aCkge1xuICAgIGNvbnN0IHBhdGhXaXRob3V0U2xhc2ggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKS5zcGxpdChcIj9cIilbMF1cblxuICAgIGZvciAoY29uc3Qgc3ViUm91dGUgb2Ygcm91dGUucm91dGVzKSB7XG4gICAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN1YlJvdXRlLm1hdGNoV2l0aFBhdGgoe1xuICAgICAgICBwYXJhbXM6IHRoaXMucGFyYW1zLFxuICAgICAgICBwYXRoOiBwYXRoV2l0aG91dFNsYXNoLFxuICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3RcbiAgICAgIH0pXG5cbiAgICAgIGlmICghbWF0Y2hSZXN1bHQpIGNvbnRpbnVlXG5cbiAgICAgIGNvbnN0IHtyZXN0UGF0aH0gPSBtYXRjaFJlc3VsdFxuXG4gICAgICBpZiAocmVzdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hQYXRoV2l0aFJvdXRlcyhzdWJSb3V0ZSwgcmVzdFBhdGgpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXRjaFJlc3VsdFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hY3Rpb24gLSBBY3Rpb24uXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL2NvbnRyb2xsZXIuanNcIikuZGVmYXVsdH0gYXJncy5jb250cm9sbGVyQ2xhc3MgLSBDb250cm9sbGVyIGNsYXNzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgX2xvZ0FjdGlvblN0YXJ0KHthY3Rpb24sIGNvbnRyb2xsZXJDbGFzc30pIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5yZXF1ZXN0XG4gICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5fZm9ybWF0VGltZXN0YW1wKG5ldyBEYXRlKCkpXG4gICAgY29uc3QgcmVtb3RlQWRkcmVzcyA9IHJlcXVlc3QucmVtb3RlQWRkcmVzcz8uKCkgfHwgcmVxdWVzdC5oZWFkZXIoXCJ4LWZvcndhcmRlZC1mb3JcIikgfHwgXCJ1bmtub3duXCJcbiAgICBjb25zdCBsb2dnZWRQYXJhbXMgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodGhpcy5fc2FuaXRpemVQYXJhbXNGb3JMb2dnaW5nKHRoaXMucGFyYW1zKSlcblxuICAgIGRlbGV0ZSBsb2dnZWRQYXJhbXMuYWN0aW9uXG4gICAgZGVsZXRlIGxvZ2dlZFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5pbmZvKCgpID0+IGBTdGFydGVkICR7cmVxdWVzdC5odHRwTWV0aG9kKCl9IFwiJHtyZXF1ZXN0LnBhdGgoKX1cIiBmb3IgJHtyZW1vdGVBZGRyZXNzfSBhdCAke3RpbWVzdGFtcH1gKVxuICAgIGF3YWl0IHRoaXMubG9nZ2VyLmluZm8oKCkgPT4gYFByb2Nlc3NpbmcgYnkgJHtjb250cm9sbGVyQ2xhc3MubmFtZX0jJHthY3Rpb259YClcbiAgICBhd2FpdCB0aGlzLmxvZ2dlci5pbmZvKCgpID0+IFtgICBQYXJhbWV0ZXJzOmAsIGxvZ2dlZFBhcmFtc10pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZSB2YWx1ZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdGltZXN0YW1wLlxuICAgKi9cbiAgX2Zvcm1hdFRpbWVzdGFtcChkYXRlKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bSAtIE51bS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBwYWQuXG4gICAgICovXG4gICAgY29uc3QgcGFkID0gKG51bSkgPT4gU3RyaW5nKG51bSkucGFkU3RhcnQoMiwgXCIwXCIpXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgIGNvbnN0IG1vbnRoID0gcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpXG4gICAgY29uc3QgZGF5ID0gcGFkKGRhdGUuZ2V0RGF0ZSgpKVxuICAgIGNvbnN0IGhvdXJzID0gcGFkKGRhdGUuZ2V0SG91cnMoKSlcbiAgICBjb25zdCBtaW51dGVzID0gcGFkKGRhdGUuZ2V0TWludXRlcygpKVxuICAgIGNvbnN0IHNlY29uZHMgPSBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpXG4gICAgY29uc3Qgb2Zmc2V0TWludXRlcyA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKVxuICAgIGNvbnN0IG9mZnNldFNpZ24gPSBvZmZzZXRNaW51dGVzID4gMCA/IFwiLVwiIDogXCIrXCJcbiAgICBjb25zdCBvZmZzZXRUb3RhbE1pbnV0ZXMgPSBNYXRoLmFicyhvZmZzZXRNaW51dGVzKVxuICAgIGNvbnN0IG9mZnNldEhvdXJzID0gcGFkKE1hdGguZmxvb3Iob2Zmc2V0VG90YWxNaW51dGVzIC8gNjApKVxuICAgIGNvbnN0IG9mZnNldFJlbWFpbmluZ01pbnV0ZXMgPSBwYWQob2Zmc2V0VG90YWxNaW51dGVzICUgNjApXG5cbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9ICR7aG91cnN9OiR7bWludXRlc306JHtzZWNvbmRzfSAke29mZnNldFNpZ259JHtvZmZzZXRIb3Vyc30ke29mZnNldFJlbWFpbmluZ01pbnV0ZXN9YFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFZhbHVlIHRvIHVzZS5cbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgc2FuaXRpemUgcGFyYW1zIGZvciBsb2dnaW5nLlxuICAgKi9cbiAgX3Nhbml0aXplUGFyYW1zRm9yTG9nZ2luZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVwbG9hZGVkRmlsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3NOYW1lOiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICBmaWxlbmFtZTogdmFsdWUuZmlsZW5hbWUoKSxcbiAgICAgICAgc2l6ZTogdmFsdWUuc2l6ZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiB0aGlzLl9zYW5pdGl6ZVBhcmFtc0ZvckxvZ2dpbmcoaXRlbSkpXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5fc2FuaXRpemVQYXJhbXNGb3JMb2dnaW5nKHZhbHVlW2tleV0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG4iXX0=
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL3Jlc29sdmVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFBO0FBQzVCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxLQUFLLENBQUE7QUFDakMsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDbkMsT0FBTyxZQUFZLE1BQU0sc0RBQXNELENBQUE7QUFDL0UsT0FBTyxXQUFXLE1BQU0sMEJBQTBCLENBQUE7QUFFbEQsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFDMUMsaUNBQWlDO0lBQ2pDLE1BQU0sQ0FBQTtJQUVOOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBQzdELElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ2pELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBRW5ELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLElBQUksY0FBYyxDQUFBO1FBQ2xCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQTtRQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ25DLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDekMsSUFBSSxRQUFRLENBQUE7UUFFWixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBQ3ZFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFBO1FBQ3RDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFBO1FBQzlDLE1BQU0sV0FBVyxHQUFHLE9BQU8sV0FBVyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDNUgsSUFBSSxNQUFNLEdBQUcsT0FBTyxXQUFXLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDckgsSUFBSSxVQUFVLEdBQUcsT0FBTyxlQUFlLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUV6SSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDakQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3JDLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQTtZQUMvRCxNQUFNLHVCQUF1QixHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsZUFBZSxhQUFhLGdCQUFnQixDQUFBO1lBRWhILE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixPQUFPLHlCQUF5Qix1QkFBdUIsRUFBRSxDQUFDLENBQUE7WUFFaEwsVUFBVSxHQUFHLFFBQVEsQ0FBQTtZQUNyQixjQUFjLEdBQUcsaUNBQWlDLENBQUE7WUFDbEQsTUFBTSxHQUFHLFVBQVUsQ0FBQTtZQUNuQixRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxrQkFBa0IsQ0FBQyxDQUFBO1FBQzlELENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVO2dCQUFFLFVBQVUsR0FBRyxPQUFPLENBQUE7WUFFckMsY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsZUFBZSxVQUFVLGdCQUFnQixDQUFBO1lBQzlGLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLGVBQWUsVUFBVSxFQUFFLENBQUE7UUFDNUUsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxPQUFPLGFBQWEsTUFBTSxpQkFBaUIsVUFBVSxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM1SyxDQUFDO1FBRUQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUMxRCxNQUFNLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUE7UUFDckQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBQztZQUM3QyxNQUFNO1lBQ04sYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFVBQVU7WUFDVixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRO1NBQ1QsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxVQUFVLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQTtRQUMxRSxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEVBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1FBRXJGLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFDLE1BQU0sRUFBRSxlQUFlLEVBQUMsQ0FBQyxDQUFBO1FBRXJELElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDcEQsTUFBTSxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO2dCQUM5QyxNQUFNLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUE7WUFDcEMsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN2QyxNQUFNLFlBQVksR0FBRztnQkFDbkIsTUFBTTtnQkFDTixVQUFVO2dCQUNWLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDckMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUN6QixLQUFLLEVBQUUsbUJBQW1CO2FBQzNCLENBQUE7WUFFRCxNQUFNLGdCQUFnQixHQUFHLDBDQUEwQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUE7WUFFbEYsZ0JBQWdCLENBQUMsZ0JBQWdCLEdBQUc7Z0JBQ2xDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7Z0JBQzVDLGdCQUFnQixFQUFFLFlBQVk7YUFDL0IsQ0FBQTtZQUVELE1BQU0sWUFBWSxDQUFBO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJO1FBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTlELEtBQUssTUFBTSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7Z0JBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUMsQ0FBQTtZQUVGLElBQUksQ0FBQyxXQUFXO2dCQUFFLFNBQVE7WUFFMUIsTUFBTSxFQUFDLFFBQVEsRUFBQyxHQUFHLFdBQVcsQ0FBQTtZQUU5QixJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUNyRCxDQUFDO1lBRUQsT0FBTyxXQUFXLENBQUE7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBQyxNQUFNLEVBQUUsZUFBZSxFQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUE7UUFDNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUNuRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksU0FBUyxDQUFBO1FBQ2pHLE1BQU0sWUFBWSxHQUFHLHNDQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQ3pHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtRQUVuRixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUE7UUFDMUIsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFBO1FBRTlCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsYUFBYSxPQUFPLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDOUgsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixlQUFlLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDckYsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQixDQUFDLElBQUk7UUFDbkI7OztXQUdHO1FBQ0gsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUMvQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUMvQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDbEMsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUN0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUM5QyxNQUFNLFVBQVUsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtRQUNoRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDbEQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUM1RCxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUUzRCxPQUFPLEdBQUcsSUFBSSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksVUFBVSxHQUFHLFdBQVcsR0FBRyxzQkFBc0IsRUFBRSxDQUFBO0lBQ3RILENBQUM7SUFFRDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxLQUFLO1FBQzdCLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRSxDQUFDO1lBQ2xDLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDakMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO2FBQ25CLENBQUE7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxDQUFDO1FBRUQsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdkMsa0NBQWtDO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQTtZQUVqQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUMxRCxDQUFDO1lBRUQsT0FBTyxNQUFNLENBQUE7UUFDZixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaXJuYW1lfSBmcm9tIFwicGF0aFwiXG5pbXBvcnQge2ZpbGVVUkxUb1BhdGh9IGZyb20gXCJ1cmxcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy9wcm9taXNlc1wiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7TG9nZ2VyfSBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBVcGxvYWRlZEZpbGUgZnJvbSBcIi4uL2h0dHAtc2VydmVyL2NsaWVudC91cGxvYWRlZC1maWxlL3VwbG9hZGVkLWZpbGUuanNcIlxuaW1wb3J0IGVuc3VyZUVycm9yIGZyb20gXCIuLi91dGlscy9lbnN1cmUtZXJyb3IuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNSb3V0ZXNSZXNvbHZlciB7XG4gIC8qKiBAdHlwZSB7TG9nZ2VyIHwgdW5kZWZpbmVkfSAqL1xuICBsb2dnZXJcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vaHR0cC1zZXJ2ZXIvY2xpZW50L3JlcXVlc3QuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2h0dHAtc2VydmVyL2NsaWVudC93ZWJzb2NrZXQtcmVxdWVzdC5qc1wiKS5kZWZhdWx0fSBhcmdzLnJlcXVlc3QgLSBSZXF1ZXN0IG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9odHRwLXNlcnZlci9jbGllbnQvcmVzcG9uc2UuanNcIikuZGVmYXVsdH0gYXJncy5yZXNwb25zZSAtIFJlc3BvbnNlIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCByZXF1ZXN0LCByZXNwb25zZX0pIHtcbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbmZpZ3VyYXRpb24gZ2l2ZW5cIilcbiAgICBpZiAoIXJlcXVlc3QpIHRocm93IG5ldyBFcnJvcihcIk5vIHJlcXVlc3QgZ2l2ZW5cIilcbiAgICBpZiAoIXJlc3BvbnNlKSB0aHJvdyBuZXcgRXJyb3IoXCJObyByZXNwb25zZSBnaXZlblwiKVxuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMucGFyYW1zID0gcmVxdWVzdC5wYXJhbXMoKVxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmUoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXJQYXRoXG4gICAgbGV0IGN1cnJlbnRSb3V0ZSA9IHRoaXMuY29uZmlndXJhdGlvbi5yb3V0ZXMucm9vdFJvdXRlXG4gICAgY29uc3QgcmF3UGF0aCA9IHRoaXMucmVxdWVzdC5wYXRoKClcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IHJhd1BhdGguc3BsaXQoXCI/XCIpWzBdXG4gICAgbGV0IHZpZXdQYXRoXG5cbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHRoaXMubWF0Y2hQYXRoV2l0aFJvdXRlcyhjdXJyZW50Um91dGUsIGN1cnJlbnRQYXRoKVxuICAgIGNvbnN0IGFjdGlvblBhcmFtID0gdGhpcy5wYXJhbXMuYWN0aW9uXG4gICAgY29uc3QgY29udHJvbGxlclBhcmFtID0gdGhpcy5wYXJhbXMuY29udHJvbGxlclxuICAgIGNvbnN0IGFjdGlvblZhbHVlID0gdHlwZW9mIGFjdGlvblBhcmFtID09IFwic3RyaW5nXCIgPyBhY3Rpb25QYXJhbSA6IChBcnJheS5pc0FycmF5KGFjdGlvblBhcmFtKSA/IGFjdGlvblBhcmFtWzBdIDogdW5kZWZpbmVkKVxuICAgIGxldCBhY3Rpb24gPSB0eXBlb2YgYWN0aW9uVmFsdWUgPT0gXCJzdHJpbmdcIiA/IGluZmxlY3Rpb24uY2FtZWxpemUoYWN0aW9uVmFsdWUucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpLCB0cnVlKSA6IHVuZGVmaW5lZFxuICAgIGxldCBjb250cm9sbGVyID0gdHlwZW9mIGNvbnRyb2xsZXJQYXJhbSA9PSBcInN0cmluZ1wiID8gY29udHJvbGxlclBhcmFtIDogKEFycmF5LmlzQXJyYXkoY29udHJvbGxlclBhcmFtKSA/IGNvbnRyb2xsZXJQYXJhbVswXSA6IHVuZGVmaW5lZClcblxuICAgIGlmICghbWF0Y2hSZXN1bHQpIHtcbiAgICAgIGNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbiAgICAgIGNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSlcbiAgICAgIGNvbnN0IHJlcXVlc3RlZFBhdGggPSBjdXJyZW50UGF0aC5yZXBsYWNlKC9eXFwvLywgXCJcIikgfHwgXCJfcm9vdFwiXG4gICAgICBjb25zdCBhdHRlbXB0ZWRDb250cm9sbGVyUGF0aCA9IGAke3RoaXMuY29uZmlndXJhdGlvbi5nZXREaXJlY3RvcnkoKX0vc3JjL3JvdXRlcy8ke3JlcXVlc3RlZFBhdGh9L2NvbnRyb2xsZXIuanNgXG5cbiAgICAgIGF3YWl0ICh0aGlzLmxvZ2dlciB8fCBuZXcgTG9nZ2VyKFwiUm91dGVzUmVzb2x2ZXJcIiwge2NvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbn0pKS53YXJuKGBObyByb3V0ZSBtYXRjaGVkIGZvciAke3Jhd1BhdGh9LiBUcmllZCBjb250cm9sbGVyIGF0ICR7YXR0ZW1wdGVkQ29udHJvbGxlclBhdGh9YClcblxuICAgICAgY29udHJvbGxlciA9IFwiZXJyb3JzXCJcbiAgICAgIGNvbnRyb2xsZXJQYXRoID0gXCIuL2J1aWx0LWluL2Vycm9ycy9jb250cm9sbGVyLmpzXCJcbiAgICAgIGFjdGlvbiA9IFwibm90Rm91bmRcIlxuICAgICAgdmlld1BhdGggPSBhd2FpdCBmcy5yZWFscGF0aChgJHtfX2Rpcm5hbWV9L2J1aWx0LWluL2Vycm9yc2ApXG4gICAgfSBlbHNlIGlmIChhY3Rpb24pIHtcbiAgICAgIGlmICghY29udHJvbGxlcikgY29udHJvbGxlciA9IFwiX3Jvb3RcIlxuXG4gICAgICBjb250cm9sbGVyUGF0aCA9IGAke3RoaXMuY29uZmlndXJhdGlvbi5nZXREaXJlY3RvcnkoKX0vc3JjL3JvdXRlcy8ke2NvbnRyb2xsZXJ9L2NvbnRyb2xsZXIuanNgXG4gICAgICB2aWV3UGF0aCA9IGAke3RoaXMuY29uZmlndXJhdGlvbi5nZXREaXJlY3RvcnkoKX0vc3JjL3JvdXRlcy8ke2NvbnRyb2xsZXJ9YFxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hdGNoZWQgdGhlIHJvdXRlIGJ1dCBkaWRuJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggaXQ6ICR7cmF3UGF0aH0gKGFjdGlvbjogJHthY3Rpb259LCBjb250cm9sbGVyOiAke2NvbnRyb2xsZXJ9LCBwYXJhbXM6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhbXMpfSlgKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXJDbGFzc0ltcG9ydCA9IGF3YWl0IGltcG9ydChjb250cm9sbGVyUGF0aClcbiAgICBjb25zdCBjb250cm9sbGVyQ2xhc3MgPSBjb250cm9sbGVyQ2xhc3NJbXBvcnQuZGVmYXVsdFxuICAgIGNvbnN0IGNvbnRyb2xsZXJJbnN0YW5jZSA9IG5ldyBjb250cm9sbGVyQ2xhc3Moe1xuICAgICAgYWN0aW9uLFxuICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5jb25maWd1cmF0aW9uLFxuICAgICAgY29udHJvbGxlcixcbiAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMsXG4gICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICByZXNwb25zZTogdGhpcy5yZXNwb25zZSxcbiAgICAgIHZpZXdQYXRoXG4gICAgfSlcblxuICAgIGlmICghKGFjdGlvbiBpbiBjb250cm9sbGVySW5zdGFuY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgYWN0aW9uIG9uIGNvbnRyb2xsZXI6ICR7Y29udHJvbGxlcn0jJHthY3Rpb259YClcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2dlciB8fD0gbmV3IExvZ2dlcihjb250cm9sbGVyQ2xhc3MubmFtZSwge2NvbmZpZ3VyYXRpb246IHRoaXMuY29uZmlndXJhdGlvbn0pXG5cbiAgICBhd2FpdCB0aGlzLl9sb2dBY3Rpb25TdGFydCh7YWN0aW9uLCBjb250cm9sbGVyQ2xhc3N9KVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGNvbnRyb2xsZXJJbnN0YW5jZS5fcnVuQmVmb3JlQ2FsbGJhY2tzKClcbiAgICAgICAgYXdhaXQgY29udHJvbGxlckluc3RhbmNlW2FjdGlvbl0oKVxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZW5zdXJlZEVycm9yID0gZW5zdXJlRXJyb3IoZXJyb3IpXG4gICAgICBjb25zdCBlcnJvckNvbnRleHQgPSB7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY29udHJvbGxlcixcbiAgICAgICAgaHR0cE1ldGhvZDogdGhpcy5yZXF1ZXN0Lmh0dHBNZXRob2QoKSxcbiAgICAgICAgcGF0aDogdGhpcy5yZXF1ZXN0LnBhdGgoKSxcbiAgICAgICAgc3RhZ2U6IFwiY29udHJvbGxlci1hY3Rpb25cIlxuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvcldpdGhDb250ZXh0ID0gLyoqIEB0eXBlIHt7dmVsb2Npb3VzQ29udGV4dD86IG9iamVjdH19ICovIChlbnN1cmVkRXJyb3IpXG5cbiAgICAgIGVycm9yV2l0aENvbnRleHQudmVsb2Npb3VzQ29udGV4dCA9IHtcbiAgICAgICAgLi4uKGVycm9yV2l0aENvbnRleHQudmVsb2Npb3VzQ29udGV4dCB8fCB7fSksXG4gICAgICAgIGNvbnRyb2xsZXJBY3Rpb246IGVycm9yQ29udGV4dFxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlbnN1cmVkRXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL2Jhc2Utcm91dGUuanNcIikuZGVmYXVsdH0gcm91dGUgLSBSb3V0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBQYXRoLlxuICAgKiBAcmV0dXJucyB7e3Jlc3RQYXRoOiBzdHJpbmd9IHwgdW5kZWZpbmVkfSAtIFJFU1QgcGF0aCBtZXRhZGF0YSBmb3IgdGhpcyByb3V0ZS5cbiAgICovXG4gIG1hdGNoUGF0aFdpdGhSb3V0ZXMocm91dGUsIHBhdGgpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dFNsYXNoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgXCJcIikuc3BsaXQoXCI/XCIpWzBdXG5cbiAgICBmb3IgKGNvbnN0IHN1YlJvdXRlIG9mIHJvdXRlLnJvdXRlcykge1xuICAgICAgY29uc3QgbWF0Y2hSZXN1bHQgPSBzdWJSb3V0ZS5tYXRjaFdpdGhQYXRoKHtcbiAgICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtcyxcbiAgICAgICAgcGF0aDogcGF0aFdpdGhvdXRTbGFzaCxcbiAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0XG4gICAgICB9KVxuXG4gICAgICBpZiAoIW1hdGNoUmVzdWx0KSBjb250aW51ZVxuXG4gICAgICBjb25zdCB7cmVzdFBhdGh9ID0gbWF0Y2hSZXN1bHRcblxuICAgICAgaWYgKHJlc3RQYXRoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoUGF0aFdpdGhSb3V0ZXMoc3ViUm91dGUsIHJlc3RQYXRoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWF0Y2hSZXN1bHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYWN0aW9uIC0gQWN0aW9uLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9jb250cm9sbGVyLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29udHJvbGxlckNsYXNzIC0gQ29udHJvbGxlciBjbGFzcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIF9sb2dBY3Rpb25TdGFydCh7YWN0aW9uLCBjb250cm9sbGVyQ2xhc3N9KSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucmVxdWVzdFxuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMuX2Zvcm1hdFRpbWVzdGFtcChuZXcgRGF0ZSgpKVxuICAgIGNvbnN0IHJlbW90ZUFkZHJlc3MgPSByZXF1ZXN0LnJlbW90ZUFkZHJlc3M/LigpIHx8IHJlcXVlc3QuaGVhZGVyKFwieC1mb3J3YXJkZWQtZm9yXCIpIHx8IFwidW5rbm93blwiXG4gICAgY29uc3QgbG9nZ2VkUGFyYW1zID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHRoaXMuX3Nhbml0aXplUGFyYW1zRm9yTG9nZ2luZyh0aGlzLnBhcmFtcykpXG4gICAgY29uc3QgbG9nTWV0aG9kID0gdGhpcy5jb25maWd1cmF0aW9uLmdldEVudmlyb25tZW50KCkgPT09IFwidGVzdFwiID8gXCJkZWJ1Z1wiIDogXCJpbmZvXCJcblxuICAgIGRlbGV0ZSBsb2dnZWRQYXJhbXMuYWN0aW9uXG4gICAgZGVsZXRlIGxvZ2dlZFBhcmFtcy5jb250cm9sbGVyXG5cbiAgICBhd2FpdCB0aGlzLmxvZ2dlcltsb2dNZXRob2RdKCgpID0+IGBTdGFydGVkICR7cmVxdWVzdC5odHRwTWV0aG9kKCl9IFwiJHtyZXF1ZXN0LnBhdGgoKX1cIiBmb3IgJHtyZW1vdGVBZGRyZXNzfSBhdCAke3RpbWVzdGFtcH1gKVxuICAgIGF3YWl0IHRoaXMubG9nZ2VyW2xvZ01ldGhvZF0oKCkgPT4gYFByb2Nlc3NpbmcgYnkgJHtjb250cm9sbGVyQ2xhc3MubmFtZX0jJHthY3Rpb259YClcbiAgICBhd2FpdCB0aGlzLmxvZ2dlcltsb2dNZXRob2RdKCgpID0+IFtgICBQYXJhbWV0ZXJzOmAsIGxvZ2dlZFBhcmFtc10pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtEYXRlfSBkYXRlIC0gRGF0ZSB2YWx1ZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgdGltZXN0YW1wLlxuICAgKi9cbiAgX2Zvcm1hdFRpbWVzdGFtcChkYXRlKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bSAtIE51bS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBwYWQuXG4gICAgICovXG4gICAgY29uc3QgcGFkID0gKG51bSkgPT4gU3RyaW5nKG51bSkucGFkU3RhcnQoMiwgXCIwXCIpXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgIGNvbnN0IG1vbnRoID0gcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpXG4gICAgY29uc3QgZGF5ID0gcGFkKGRhdGUuZ2V0RGF0ZSgpKVxuICAgIGNvbnN0IGhvdXJzID0gcGFkKGRhdGUuZ2V0SG91cnMoKSlcbiAgICBjb25zdCBtaW51dGVzID0gcGFkKGRhdGUuZ2V0TWludXRlcygpKVxuICAgIGNvbnN0IHNlY29uZHMgPSBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpXG4gICAgY29uc3Qgb2Zmc2V0TWludXRlcyA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKVxuICAgIGNvbnN0IG9mZnNldFNpZ24gPSBvZmZzZXRNaW51dGVzID4gMCA/IFwiLVwiIDogXCIrXCJcbiAgICBjb25zdCBvZmZzZXRUb3RhbE1pbnV0ZXMgPSBNYXRoLmFicyhvZmZzZXRNaW51dGVzKVxuICAgIGNvbnN0IG9mZnNldEhvdXJzID0gcGFkKE1hdGguZmxvb3Iob2Zmc2V0VG90YWxNaW51dGVzIC8gNjApKVxuICAgIGNvbnN0IG9mZnNldFJlbWFpbmluZ01pbnV0ZXMgPSBwYWQob2Zmc2V0VG90YWxNaW51dGVzICUgNjApXG5cbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9ICR7aG91cnN9OiR7bWludXRlc306JHtzZWNvbmRzfSAke29mZnNldFNpZ259JHtvZmZzZXRIb3Vyc30ke29mZnNldFJlbWFpbmluZ01pbnV0ZXN9YFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFZhbHVlIHRvIHVzZS5cbiAgICogQHJldHVybnMge2FueX0gLSBUaGUgc2FuaXRpemUgcGFyYW1zIGZvciBsb2dnaW5nLlxuICAgKi9cbiAgX3Nhbml0aXplUGFyYW1zRm9yTG9nZ2luZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVwbG9hZGVkRmlsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3NOYW1lOiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICBmaWxlbmFtZTogdmFsdWUuZmlsZW5hbWUoKSxcbiAgICAgICAgc2l6ZTogdmFsdWUuc2l6ZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiB0aGlzLl9zYW5pdGl6ZVBhcmFtc0ZvckxvZ2dpbmcoaXRlbSkpXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqL1xuICAgICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdGhpcy5fc2FuaXRpemVQYXJhbXNGb3JMb2dnaW5nKHZhbHVlW2tleV0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-files-finder.d.ts","sourceRoot":"","sources":["../../../src/testing/test-files-finder.js"],"names":[],"mappings":"AAUA;IACE,+BAA+C;IAE/C;;;;;OAKG;IACH,kEAJG;QAAqB,SAAS,EAAtB,MAAM;QACU,WAAW,GAA3B,MAAM,EAAE;QACO,WAAW,EAA1B,MAAM,EAAE;KAClB,EAoCA;IAhCC,
|
|
1
|
+
{"version":3,"file":"test-files-finder.d.ts","sourceRoot":"","sources":["../../../src/testing/test-files-finder.js"],"names":[],"mappings":"AAUA;IACE,+BAA+C;IAE/C;;;;;OAKG;IACH,kEAJG;QAAqB,SAAS,EAAtB,MAAM;QACU,WAAW,GAA3B,MAAM,EAAE;QACO,WAAW,EAA1B,MAAM,EAAE;KAClB,EAoCA;IAhCC,kBAAwC;IACxC,eAA8B;IAG5B,sBAAkE;IASpE,qBAAqB;IACrB,sBAA8B;IAE9B,uBAAuB;IACvB,YADW,MAAM,EAAE,CACC;IAEpB,4CAA4C;IAC5C,iBADW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CACf;IAEzB,uBAAuB;IACvB,UADW,MAAM,EAAE,CACuD;IAE1E,uBAAuB;IACvB,eADW,MAAM,EAAE,CACI;IAEvB,uBAAuB;IACvB,UADW,MAAM,EAAE,CACD;IAElB,uBAA0B;IAG5B;;OAEG;IACH,iBAFa,OAAO,CAAC,MAAM,EAAE,CAAC,CAgB7B;IAED;;OAEG;IACH,yBAFa,MAAM,CAEwD;IAE3E,wCAIC;IAED;;OAEG;IACH,mCAFa,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;OAGG;IACH,2BAHW,MAAa,OAAO,CAAC,IAAI,CAAC,GACxB,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAwBzB;IAED;;;;OAIG;IACH,iCAJW,MAAM,aACN,MAAM,GACJ,OAAO,CA2BnB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,eAFa,OAAO,CAAC,IAAI,CAAC,CAgDzB;IAED;;;OAGG;IACH,+BAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,MAAM,CAKlB;CACF;uBA3PoB,cAAc"}
|
|
@@ -15,10 +15,10 @@ export default class TestFilesFinder {
|
|
|
15
15
|
*/
|
|
16
16
|
constructor({ directory, directories, processArgs, ...restArgs }) {
|
|
17
17
|
restArgsError(restArgs);
|
|
18
|
-
this.directory = directory;
|
|
18
|
+
this.directory = path.resolve(directory);
|
|
19
19
|
this.logger = new Logger(this);
|
|
20
20
|
if (directories) {
|
|
21
|
-
this.directories = directories;
|
|
21
|
+
this.directories = directories.map((entry) => path.resolve(entry));
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
24
|
this.directories = [
|
|
@@ -161,13 +161,31 @@ export default class TestFilesFinder {
|
|
|
161
161
|
for (const testArg of this.testArgs) {
|
|
162
162
|
const forceDirectory = testArg.endsWith("/") || testArg.endsWith(path.sep);
|
|
163
163
|
const fullPath = path.isAbsolute(testArg) ? testArg : path.resolve(this.directory, testArg);
|
|
164
|
-
const
|
|
164
|
+
const baseName = path.basename(this.directory);
|
|
165
|
+
const hasBasePrefix = testArg === baseName || testArg.startsWith(`${baseName}/`) || testArg.startsWith(`${baseName}${path.sep}`);
|
|
166
|
+
const basePrefixedFullPath = (!path.isAbsolute(testArg) && hasBasePrefix) ? path.resolve(path.dirname(this.directory), testArg) : null;
|
|
167
|
+
const fullPathCandidates = basePrefixedFullPath ? [basePrefixedFullPath] : [fullPath];
|
|
165
168
|
if (forceDirectory) {
|
|
166
|
-
this.
|
|
169
|
+
const preferredLocalPath = this.toLocalPath(basePrefixedFullPath || fullPath);
|
|
170
|
+
this.directoryArgs.push(this.ensureTrailingSlash(preferredLocalPath));
|
|
167
171
|
continue;
|
|
168
172
|
}
|
|
169
173
|
try {
|
|
170
|
-
|
|
174
|
+
let stats;
|
|
175
|
+
let resolvedFullPath;
|
|
176
|
+
for (const candidatePath of fullPathCandidates) {
|
|
177
|
+
try {
|
|
178
|
+
stats = await fs.stat(candidatePath);
|
|
179
|
+
resolvedFullPath = candidatePath;
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Keep searching
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (!stats || !resolvedFullPath)
|
|
187
|
+
throw new Error("Path not found");
|
|
188
|
+
const localPath = this.toLocalPath(resolvedFullPath);
|
|
171
189
|
if (stats.isDirectory()) {
|
|
172
190
|
this.directoryArgs.push(this.ensureTrailingSlash(localPath));
|
|
173
191
|
}
|
|
@@ -176,7 +194,8 @@ export default class TestFilesFinder {
|
|
|
176
194
|
}
|
|
177
195
|
}
|
|
178
196
|
catch {
|
|
179
|
-
this.
|
|
197
|
+
const fallbackLocalPath = this.toLocalPath(basePrefixedFullPath || fullPath);
|
|
198
|
+
this.fileArgs.push(fallbackLocalPath);
|
|
180
199
|
}
|
|
181
200
|
}
|
|
182
201
|
this._argsPrepared = true;
|
|
@@ -199,4 +218,4 @@ export default class TestFilesFinder {
|
|
|
199
218
|
return relativePath.split(path.sep).join("/");
|
|
200
219
|
}
|
|
201
220
|
}
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1maWxlcy1maW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy90ZXN0LWZpbGVzLWZpbmRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUV2QixPQUFPLFVBQVUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ25DLE9BQU8sYUFBYSxNQUFNLDZCQUE2QixDQUFBO0FBRXZELGlIQUFpSDtBQUNqSCxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWU7SUFDbEMsTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUUvQzs7Ozs7T0FLRztJQUNILFlBQVksRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUM1RCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU5QixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRztnQkFDakIsR0FBRyxJQUFJLENBQUMsU0FBUyxZQUFZO2dCQUM3QixHQUFHLElBQUksQ0FBQyxTQUFTLFFBQVE7Z0JBQ3pCLEdBQUcsSUFBSSxDQUFDLFNBQVMsT0FBTzthQUN6QixDQUFBO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBRTlCLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUVwQiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUE7UUFFekIsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFMUUsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFBO1FBRXZCLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUVsQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQTtJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsYUFBYTtRQUNqQixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUV4QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNyQyxLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDMUMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUE7UUFFbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILHFCQUFxQixLQUFLLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFBLENBQUMsQ0FBQztJQUUzRSxLQUFLLENBQUMsc0JBQXNCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQTtRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLCtCQUErQjtRQUNuQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQTtRQUU3QixLQUFLLE1BQU0sZ0JBQWdCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUU3RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDekMsQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxRQUFRO1FBQ3ZCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixNQUFNLGNBQWMsR0FBRyxRQUFRLEVBQUUsQ0FBQTtZQUNqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFBO1lBRXRDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFBO1lBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLEdBQUcsY0FBYyxDQUFBO1lBRW5ELGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUMxQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBRXpDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNwQixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHO1FBQzFCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUVuQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QixJQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ2pELFNBQVE7Z0JBQ1YsQ0FBQztnQkFFRCxNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtnQkFDakMsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDNUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtnQkFFckQsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDVixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBQ25DLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7b0JBQ2hDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMEJBQTBCLENBQUMsSUFBSSxFQUFFLFNBQVM7UUFDeEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN2RSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnRUFBZ0UsRUFBRSxJQUFJLENBQUMsQ0FBQTtvQkFDekYsT0FBTyxJQUFJLENBQUE7Z0JBQ2IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxDQUFBO29CQUNyRSxPQUFPLElBQUksQ0FBQTtnQkFDYixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0NBQStDLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDeEUsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsSUFBSTtRQUNwQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFNO1FBRTlCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDMUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDM0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUU1QyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtnQkFDNUQsU0FBUTtZQUNWLENBQUM7WUFFRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO2dCQUVyQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtnQkFDOUQsQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDL0IsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDL0IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsU0FBUztRQUMzQixJQUFJLFNBQVMsS0FBSyxFQUFFO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFDdEMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUE7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxRQUFRO1FBQ2xCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM1RCxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgZmlsZUV4aXN0cyBmcm9tIFwiLi4vdXRpbHMvZmlsZS1leGlzdHMuanNcIlxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuLi9sb2dnZXIuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbi8vIEluY3JlZGlibHkgY29tcGxleCBjbGFzcyB0byBmaW5kIGZpbGVzIGluIG11bHRpcGxlIHNpbXVsdGFuaW91cyBydW5uaW5nIHByb21pc2VzIHRvIGRvIGl0IGFzIGZhc3QgYXMgcG9zc2libGUuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0RmlsZXNGaW5kZXIge1xuICBzdGF0aWMgSUdOT1JFRF9OQU1FUyA9IFtcIi5naXRcIiwgXCJub2RlX21vZHVsZXNcIl1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGlyZWN0b3J5IC0gRGlyZWN0b3J5IHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLmRpcmVjdG9yaWVzXSAtIERpcmVjdG9yaWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzLnByb2Nlc3NBcmdzIC0gUHJvY2VzcyBhcmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RpcmVjdG9yeSwgZGlyZWN0b3JpZXMsIHByb2Nlc3NBcmdzLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5kaXJlY3RvcnkgPSBkaXJlY3RvcnlcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcblxuICAgIGlmIChkaXJlY3Rvcmllcykge1xuICAgICAgdGhpcy5kaXJlY3RvcmllcyA9IGRpcmVjdG9yaWVzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlyZWN0b3JpZXMgPSBbXG4gICAgICAgIGAke3RoaXMuZGlyZWN0b3J5fS9fX3Rlc3RzX19gLFxuICAgICAgICBgJHt0aGlzLmRpcmVjdG9yeX0vdGVzdHNgLFxuICAgICAgICBgJHt0aGlzLmRpcmVjdG9yeX0vc3BlY2BcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLmZpbmRpbmdDb3VudCA9IDBcbiAgICB0aGlzLnByb2Nlc3NBcmdzID0gcHJvY2Vzc0FyZ3NcblxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgdGhpcy5mb3VuZEZpbGVzID0gW11cblxuICAgIC8qKiBAdHlwZSB7UmVjb3JkPG51bWJlciwgUHJvbWlzZTx2b2lkPj59ICovXG4gICAgdGhpcy5maW5kaW5nUHJvbWlzZXMgPSB7fVxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLnRlc3RBcmdzID0gdGhpcy5wcm9jZXNzQXJncy5maWx0ZXIoKHByb2Nlc3NBcmcsIGluZGV4KSA9PiBpbmRleCAhPSAwKVxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLmRpcmVjdG9yeUFyZ3MgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLmZpbGVBcmdzID0gW11cblxuICAgIHRoaXMuX2FyZ3NQcmVwYXJlZCA9IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fSAtIFJlc29sdmVzIHdpdGggdGhlIHRlc3QgZmlsZXMuXG4gICAqL1xuICBhc3luYyBmaW5kVGVzdEZpbGVzKCkge1xuICAgIGF3YWl0IHRoaXMucHJlcGFyZUFyZ3MoKVxuXG4gICAgYXdhaXQgdGhpcy53aXRoRmluZGluZ0NvdW50KGFzeW5jICgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIHRoaXMuZGlyZWN0b3JpZXMpIHtcbiAgICAgICAgaWYgKGF3YWl0IGZpbGVFeGlzdHMoZGlyZWN0b3J5KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZmluZFRlc3RGaWxlc0luRGlyKGRpcmVjdG9yeSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBhd2FpdCB0aGlzLndhaXRGb3JGaW5kaW5nUHJvbWlzZXMoKVxuXG4gICAgcmV0dXJuIHRoaXMuZm91bmRGaWxlc1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gVGhlIGluZyBwcm9taXNlcyBsZW5ndGguXG4gICAqL1xuICBmaW5kaW5nUHJvbWlzZXNMZW5ndGgoKSB7IHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZpbmRpbmdQcm9taXNlcykubGVuZ3RoIH1cblxuICBhc3luYyB3YWl0Rm9yRmluZGluZ1Byb21pc2VzKCkge1xuICAgIHdoaWxlICh0aGlzLmZpbmRpbmdQcm9taXNlc0xlbmd0aCgpID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy53YWl0Rm9yRmluZGluZ1Byb21pc2VzSXRlcmF0aW9uKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHdhaXRGb3JGaW5kaW5nUHJvbWlzZXNJdGVyYXRpb24oKSB7XG4gICAgY29uc3QgdW5maW5pc2hlZFByb21pc2VzID0gW11cblxuICAgIGZvciAoY29uc3QgZmluZGluZ1Byb21pc2VJZCBpbiB0aGlzLmZpbmRpbmdQcm9taXNlcykge1xuICAgICAgY29uc3QgZmluZGluZ1Byb21pc2UgPSB0aGlzLmZpbmRpbmdQcm9taXNlc1tmaW5kaW5nUHJvbWlzZUlkXVxuXG4gICAgICB1bmZpbmlzaGVkUHJvbWlzZXMucHVzaChmaW5kaW5nUHJvbWlzZSlcbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh1bmZpbmlzaGVkUHJvbWlzZXMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbigpIDogUHJvbWlzZTx2b2lkPn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIHdpdGhGaW5kaW5nQ291bnQoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGZpbmRpbmdQcm9taXNlID0gY2FsbGJhY2soKVxuICAgICAgY29uc3QgZmluZGluZ0NvdW50ID0gdGhpcy5maW5kaW5nQ291bnRcblxuICAgICAgdGhpcy5maW5kaW5nQ291bnQgKz0gMVxuICAgICAgdGhpcy5maW5kaW5nUHJvbWlzZXNbZmluZGluZ0NvdW50XSA9IGZpbmRpbmdQcm9taXNlXG5cbiAgICAgIGZpbmRpbmdQcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5maW5kaW5nUHJvbWlzZXNbZmluZGluZ0NvdW50XVxuXG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgLSBEaXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBmaW5kVGVzdEZpbGVzSW5EaXIoZGlyKSB7XG4gICAgYXdhaXQgdGhpcy53aXRoRmluZGluZ0NvdW50KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihkaXIpXG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoVGVzdEZpbGVzRmluZGVyLklHTk9SRURfTkFNRVMuaW5jbHVkZXMoZmlsZSkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBgJHtkaXJ9LyR7ZmlsZX1gXG4gICAgICAgIGNvbnN0IGxvY2FsUGF0aCA9IGZ1bGxQYXRoLnJlcGxhY2UoYCR7dGhpcy5kaXJlY3Rvcnl9L2AsIFwiXCIpXG4gICAgICAgIGNvbnN0IGlzRGlyID0gKGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpKS5pc0RpcmVjdG9yeSgpXG5cbiAgICAgICAgaWYgKGlzRGlyKSB7XG4gICAgICAgICAgdGhpcy5maW5kVGVzdEZpbGVzSW5EaXIoZnVsbFBhdGgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNGaWxlTWF0Y2hpbmdSZXF1aXJlbWVudHMoZmlsZSwgbG9jYWxQYXRoKSkge1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZpbGVzLnB1c2goZnVsbFBhdGgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZSAtIEZpbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbFBhdGggLSBMb2NhbCBwYXRoLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGZpbGUgbWF0Y2hpbmcgcmVxdWlyZW1lbnRzLlxuICAgKi9cbiAgaXNGaWxlTWF0Y2hpbmdSZXF1aXJlbWVudHMoZmlsZSwgbG9jYWxQYXRoKSB7XG4gICAgaWYgKHRoaXMuZGlyZWN0b3J5QXJncy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGRpcmVjdG9yeUFyZyBvZiB0aGlzLmRpcmVjdG9yeUFyZ3MpIHtcbiAgICAgICAgaWYgKGxvY2FsUGF0aC5zdGFydHNXaXRoKGRpcmVjdG9yeUFyZykgJiYgdGhpcy5sb29rc0xpa2VUZXN0RmlsZShmaWxlKSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiRm91bmQgdGVzdCBmaWxlIGJlY2F1c2UgbWF0Y2hpbmcgZGlyIGFuZCBsb29rcyBsaWtlIHRoaXMgZmlsZTpcIiwgZmlsZSlcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsZUFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmaWxlQXJnIG9mIHRoaXMuZmlsZUFyZ3MpIHtcbiAgICAgICAgaWYgKGZpbGVBcmcgPT0gbG9jYWxQYXRoKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJGb3VuZCB0ZXN0IGZpbGUgYmVjYXVzZSBtYXRjaGluZyBmaWxlIGFyZzpcIiwgZmlsZSlcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsZUFyZ3MubGVuZ3RoID09IDAgJiYgdGhpcy5kaXJlY3RvcnlBcmdzLmxlbmd0aCA9PSAwICYmIHRoaXMubG9va3NMaWtlVGVzdEZpbGUoZmlsZSkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiRm91bmQgdGVzdCBmaWxlIGJlY2F1c2UgbG9va3MgbGlrZSB0aGlzIGZpbGU6XCIsIGZpbGUpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlIC0gRmlsZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBsb29rcyBsaWtlIHRlc3QgZmlsZS5cbiAgICovXG4gIGxvb2tzTGlrZVRlc3RGaWxlKGZpbGUpIHtcbiAgICByZXR1cm4gQm9vbGVhbihmaWxlLm1hdGNoKC8tKHNwZWN8dGVzdClcXC4obXwpanMkLykpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiB0ZXN0IGFyZ3MgYXJlIHByZXBhcmVkLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZUFyZ3MoKSB7XG4gICAgaWYgKHRoaXMuX2FyZ3NQcmVwYXJlZCkgcmV0dXJuXG5cbiAgICBmb3IgKGNvbnN0IHRlc3RBcmcgb2YgdGhpcy50ZXN0QXJncykge1xuICAgICAgY29uc3QgZm9yY2VEaXJlY3RvcnkgPSB0ZXN0QXJnLmVuZHNXaXRoKFwiL1wiKSB8fCB0ZXN0QXJnLmVuZHNXaXRoKHBhdGguc2VwKVxuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmlzQWJzb2x1dGUodGVzdEFyZykgPyB0ZXN0QXJnIDogcGF0aC5yZXNvbHZlKHRoaXMuZGlyZWN0b3J5LCB0ZXN0QXJnKVxuICAgICAgY29uc3QgbG9jYWxQYXRoID0gdGhpcy50b0xvY2FsUGF0aChmdWxsUGF0aClcblxuICAgICAgaWYgKGZvcmNlRGlyZWN0b3J5KSB7XG4gICAgICAgIHRoaXMuZGlyZWN0b3J5QXJncy5wdXNoKHRoaXMuZW5zdXJlVHJhaWxpbmdTbGFzaChsb2NhbFBhdGgpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZnVsbFBhdGgpXG5cbiAgICAgICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICB0aGlzLmRpcmVjdG9yeUFyZ3MucHVzaCh0aGlzLmVuc3VyZVRyYWlsaW5nU2xhc2gobG9jYWxQYXRoKSlcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICAgIHRoaXMuZmlsZUFyZ3MucHVzaChsb2NhbFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aGlzLmZpbGVBcmdzLnB1c2gobG9jYWxQYXRoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2FyZ3NQcmVwYXJlZCA9IHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxQYXRoIC0gTG9jYWwgcGF0aC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBOb3JtYWxpemVkIGxvY2FsIHBhdGggd2l0aCB0cmFpbGluZyBzbGFzaC5cbiAgICovXG4gIGVuc3VyZVRyYWlsaW5nU2xhc2gobG9jYWxQYXRoKSB7XG4gICAgaWYgKGxvY2FsUGF0aCA9PT0gXCJcIikgcmV0dXJuIGxvY2FsUGF0aFxuICAgIHJldHVybiBsb2NhbFBhdGguZW5kc1dpdGgoXCIvXCIpID8gbG9jYWxQYXRoIDogYCR7bG9jYWxQYXRofS9gXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bGxQYXRoIC0gRnVsbCBwYXRoLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIExvY2FsIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJhc2UgZGlyZWN0b3J5LlxuICAgKi9cbiAgdG9Mb2NhbFBhdGgoZnVsbFBhdGgpIHtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCBmdWxsUGF0aClcbiAgICByZXR1cm4gcmVsYXRpdmVQYXRoLnNwbGl0KHBhdGguc2VwKS5qb2luKFwiL1wiKVxuICB9XG59XG4iXX0=
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1maWxlcy1maW5kZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy90ZXN0LWZpbGVzLWZpbmRlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUV2QixPQUFPLFVBQVUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNoRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ25DLE9BQU8sYUFBYSxNQUFNLDZCQUE2QixDQUFBO0FBRXZELGlIQUFpSDtBQUNqSCxNQUFNLENBQUMsT0FBTyxPQUFPLGVBQWU7SUFDbEMsTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUUvQzs7Ozs7T0FLRztJQUNILFlBQVksRUFBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUM1RCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUIsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUNwRSxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUc7Z0JBQ2pCLEdBQUcsSUFBSSxDQUFDLFNBQVMsWUFBWTtnQkFDN0IsR0FBRyxJQUFJLENBQUMsU0FBUyxRQUFRO2dCQUN6QixHQUFHLElB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SUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUE7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsU0FBUztRQUMzQixJQUFJLFNBQVMsS0FBSyxFQUFFO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFDdEMsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUE7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxRQUFRO1FBQ2xCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUM1RCxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgZmlsZUV4aXN0cyBmcm9tIFwiLi4vdXRpbHMvZmlsZS1leGlzdHMuanNcIlxuaW1wb3J0IHtMb2dnZXJ9IGZyb20gXCIuLi9sb2dnZXIuanNcIlxuaW1wb3J0IHJlc3RBcmdzRXJyb3IgZnJvbSBcIi4uL3V0aWxzL3Jlc3QtYXJncy1lcnJvci5qc1wiXG5cbi8vIEluY3JlZGlibHkgY29tcGxleCBjbGFzcyB0byBmaW5kIGZpbGVzIGluIG11bHRpcGxlIHNpbXVsdGFuaW91cyBydW5uaW5nIHByb21pc2VzIHRvIGRvIGl0IGFzIGZhc3QgYXMgcG9zc2libGUuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0RmlsZXNGaW5kZXIge1xuICBzdGF0aWMgSUdOT1JFRF9OQU1FUyA9IFtcIi5naXRcIiwgXCJub2RlX21vZHVsZXNcIl1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuZGlyZWN0b3J5IC0gRGlyZWN0b3J5IHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmdzLmRpcmVjdG9yaWVzXSAtIERpcmVjdG9yaWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzLnByb2Nlc3NBcmdzIC0gUHJvY2VzcyBhcmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2RpcmVjdG9yeSwgZGlyZWN0b3JpZXMsIHByb2Nlc3NBcmdzLCAuLi5yZXN0QXJnc30pIHtcbiAgICByZXN0QXJnc0Vycm9yKHJlc3RBcmdzKVxuXG4gICAgdGhpcy5kaXJlY3RvcnkgPSBwYXRoLnJlc29sdmUoZGlyZWN0b3J5KVxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuXG4gICAgaWYgKGRpcmVjdG9yaWVzKSB7XG4gICAgICB0aGlzLmRpcmVjdG9yaWVzID0gZGlyZWN0b3JpZXMubWFwKChlbnRyeSkgPT4gcGF0aC5yZXNvbHZlKGVudHJ5KSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXJlY3RvcmllcyA9IFtcbiAgICAgICAgYCR7dGhpcy5kaXJlY3Rvcnl9L19fdGVzdHNfX2AsXG4gICAgICAgIGAke3RoaXMuZGlyZWN0b3J5fS90ZXN0c2AsXG4gICAgICAgIGAke3RoaXMuZGlyZWN0b3J5fS9zcGVjYFxuICAgICAgXVxuICAgIH1cblxuICAgIHRoaXMuZmluZGluZ0NvdW50ID0gMFxuICAgIHRoaXMucHJvY2Vzc0FyZ3MgPSBwcm9jZXNzQXJnc1xuXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICB0aGlzLmZvdW5kRmlsZXMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8bnVtYmVyLCBQcm9taXNlPHZvaWQ+Pn0gKi9cbiAgICB0aGlzLmZpbmRpbmdQcm9taXNlcyA9IHt9XG5cbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIHRoaXMudGVzdEFyZ3MgPSB0aGlzLnByb2Nlc3NBcmdzLmZpbHRlcigocHJvY2Vzc0FyZywgaW5kZXgpID0+IGluZGV4ICE9IDApXG5cbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIHRoaXMuZGlyZWN0b3J5QXJncyA9IFtdXG5cbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIHRoaXMuZmlsZUFyZ3MgPSBbXVxuXG4gICAgdGhpcy5fYXJnc1ByZXBhcmVkID0gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmdbXT59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIGFzeW5jIGZpbmRUZXN0RmlsZXMoKSB7XG4gICAgYXdhaXQgdGhpcy5wcmVwYXJlQXJncygpXG5cbiAgICBhd2FpdCB0aGlzLndpdGhGaW5kaW5nQ291bnQoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgdGhpcy5kaXJlY3Rvcmllcykge1xuICAgICAgICBpZiAoYXdhaXQgZmlsZUV4aXN0cyhkaXJlY3RvcnkpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maW5kVGVzdEZpbGVzSW5EaXIoZGlyZWN0b3J5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIGF3YWl0IHRoaXMud2FpdEZvckZpbmRpbmdQcm9taXNlcygpXG5cbiAgICByZXR1cm4gdGhpcy5mb3VuZEZpbGVzXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgaW5nIHByb21pc2VzIGxlbmd0aC5cbiAgICovXG4gIGZpbmRpbmdQcm9taXNlc0xlbmd0aCgpIHsgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmluZGluZ1Byb21pc2VzKS5sZW5ndGggfVxuXG4gIGFzeW5jIHdhaXRGb3JGaW5kaW5nUHJvbWlzZXMoKSB7XG4gICAgd2hpbGUgKHRoaXMuZmluZGluZ1Byb21pc2VzTGVuZ3RoKCkgPiAwKSB7XG4gICAgICBhd2FpdCB0aGlzLndhaXRGb3JGaW5kaW5nUHJvbWlzZXNJdGVyYXRpb24oKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgd2FpdEZvckZpbmRpbmdQcm9taXNlc0l0ZXJhdGlvbigpIHtcbiAgICBjb25zdCB1bmZpbmlzaGVkUHJvbWlzZXMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBmaW5kaW5nUHJvbWlzZUlkIGluIHRoaXMuZmluZGluZ1Byb21pc2VzKSB7XG4gICAgICBjb25zdCBmaW5kaW5nUHJvbWlzZSA9IHRoaXMuZmluZGluZ1Byb21pc2VzW2ZpbmRpbmdQcm9taXNlSWRdXG5cbiAgICAgIHVuZmluaXNoZWRQcm9taXNlcy5wdXNoKGZpbmRpbmdQcm9taXNlKVxuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHVuZmluaXNoZWRQcm9taXNlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCkgOiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgd2l0aEZpbmRpbmdDb3VudChjYWxsYmFjaykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgZmluZGluZ1Byb21pc2UgPSBjYWxsYmFjaygpXG4gICAgICBjb25zdCBmaW5kaW5nQ291bnQgPSB0aGlzLmZpbmRpbmdDb3VudFxuXG4gICAgICB0aGlzLmZpbmRpbmdDb3VudCArPSAxXG4gICAgICB0aGlzLmZpbmRpbmdQcm9taXNlc1tmaW5kaW5nQ291bnRdID0gZmluZGluZ1Byb21pc2VcblxuICAgICAgZmluZGluZ1Byb21pc2UuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbmRpbmdQcm9taXNlc1tmaW5kaW5nQ291bnRdXG5cbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpci5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGZpbmRUZXN0RmlsZXNJbkRpcihkaXIpIHtcbiAgICBhd2FpdCB0aGlzLndpdGhGaW5kaW5nQ291bnQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGRpcilcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGlmIChUZXN0RmlsZXNGaW5kZXIuSUdOT1JFRF9OQU1FUy5pbmNsdWRlcyhmaWxlKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGAke2Rpcn0vJHtmaWxlfWBcbiAgICAgICAgY29uc3QgbG9jYWxQYXRoID0gZnVsbFBhdGgucmVwbGFjZShgJHt0aGlzLmRpcmVjdG9yeX0vYCwgXCJcIilcbiAgICAgICAgY29uc3QgaXNEaXIgPSAoYXdhaXQgZnMuc3RhdChmdWxsUGF0aCkpLmlzRGlyZWN0b3J5KClcblxuICAgICAgICBpZiAoaXNEaXIpIHtcbiAgICAgICAgICB0aGlzLmZpbmRUZXN0RmlsZXNJbkRpcihmdWxsUGF0aClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0ZpbGVNYXRjaGluZ1JlcXVpcmVtZW50cyhmaWxlLCBsb2NhbFBhdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmZvdW5kRmlsZXMucHVzaChmdWxsUGF0aClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlIC0gRmlsZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsUGF0aCAtIExvY2FsIHBhdGguXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgZmlsZSBtYXRjaGluZyByZXF1aXJlbWVudHMuXG4gICAqL1xuICBpc0ZpbGVNYXRjaGluZ1JlcXVpcmVtZW50cyhmaWxlLCBsb2NhbFBhdGgpIHtcbiAgICBpZiAodGhpcy5kaXJlY3RvcnlBcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZGlyZWN0b3J5QXJnIG9mIHRoaXMuZGlyZWN0b3J5QXJncykge1xuICAgICAgICBpZiAobG9jYWxQYXRoLnN0YXJ0c1dpdGgoZGlyZWN0b3J5QXJnKSAmJiB0aGlzLmxvb2tzTGlrZVRlc3RGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJGb3VuZCB0ZXN0IGZpbGUgYmVjYXVzZSBtYXRjaGluZyBkaXIgYW5kIGxvb2tzIGxpa2UgdGhpcyBmaWxlOlwiLCBmaWxlKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWxlQXJncy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbGVBcmcgb2YgdGhpcy5maWxlQXJncykge1xuICAgICAgICBpZiAoZmlsZUFyZyA9PSBsb2NhbFBhdGgpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIkZvdW5kIHRlc3QgZmlsZSBiZWNhdXNlIG1hdGNoaW5nIGZpbGUgYXJnOlwiLCBmaWxlKVxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWxlQXJncy5sZW5ndGggPT0gMCAmJiB0aGlzLmRpcmVjdG9yeUFyZ3MubGVuZ3RoID09IDAgJiYgdGhpcy5sb29rc0xpa2VUZXN0RmlsZShmaWxlKSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJGb3VuZCB0ZXN0IGZpbGUgYmVjYXVzZSBsb29rcyBsaWtlIHRoaXMgZmlsZTpcIiwgZmlsZSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGUgLSBGaWxlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGxvb2tzIGxpa2UgdGVzdCBmaWxlLlxuICAgKi9cbiAgbG9va3NMaWtlVGVzdEZpbGUoZmlsZSkge1xuICAgIHJldHVybiBCb29sZWFuKGZpbGUubWF0Y2goLy0oc3BlY3x0ZXN0KVxcLihtfClqcyQvKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIHRlc3QgYXJncyBhcmUgcHJlcGFyZWQuXG4gICAqL1xuICBhc3luYyBwcmVwYXJlQXJncygpIHtcbiAgICBpZiAodGhpcy5fYXJnc1ByZXBhcmVkKSByZXR1cm5cblxuICAgIGZvciAoY29uc3QgdGVzdEFyZyBvZiB0aGlzLnRlc3RBcmdzKSB7XG4gICAgICBjb25zdCBmb3JjZURpcmVjdG9yeSA9IHRlc3RBcmcuZW5kc1dpdGgoXCIvXCIpIHx8IHRlc3RBcmcuZW5kc1dpdGgocGF0aC5zZXApXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZSh0ZXN0QXJnKSA/IHRlc3RBcmcgOiBwYXRoLnJlc29sdmUodGhpcy5kaXJlY3RvcnksIHRlc3RBcmcpXG4gICAgICBjb25zdCBiYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUodGhpcy5kaXJlY3RvcnkpXG4gICAgICBjb25zdCBoYXNCYXNlUHJlZml4ID0gdGVzdEFyZyA9PT0gYmFzZU5hbWUgfHwgdGVzdEFyZy5zdGFydHNXaXRoKGAke2Jhc2VOYW1lfS9gKSB8fCB0ZXN0QXJnLnN0YXJ0c1dpdGgoYCR7YmFzZU5hbWV9JHtwYXRoLnNlcH1gKVxuICAgICAgY29uc3QgYmFzZVByZWZpeGVkRnVsbFBhdGggPSAoIXBhdGguaXNBYnNvbHV0ZSh0ZXN0QXJnKSAmJiBoYXNCYXNlUHJlZml4KSA/IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUodGhpcy5kaXJlY3RvcnkpLCB0ZXN0QXJnKSA6IG51bGxcbiAgICAgIGNvbnN0IGZ1bGxQYXRoQ2FuZGlkYXRlcyA9IGJhc2VQcmVmaXhlZEZ1bGxQYXRoID8gW2Jhc2VQcmVmaXhlZEZ1bGxQYXRoXSA6IFtmdWxsUGF0aF1cblxuICAgICAgaWYgKGZvcmNlRGlyZWN0b3J5KSB7XG4gICAgICAgIGNvbnN0IHByZWZlcnJlZExvY2FsUGF0aCA9IHRoaXMudG9Mb2NhbFBhdGgoYmFzZVByZWZpeGVkRnVsbFBhdGggfHwgZnVsbFBhdGgpXG4gICAgICAgIHRoaXMuZGlyZWN0b3J5QXJncy5wdXNoKHRoaXMuZW5zdXJlVHJhaWxpbmdTbGFzaChwcmVmZXJyZWRMb2NhbFBhdGgpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgc3RhdHNcbiAgICAgICAgbGV0IHJlc29sdmVkRnVsbFBhdGhcblxuICAgICAgICBmb3IgKGNvbnN0IGNhbmRpZGF0ZVBhdGggb2YgZnVsbFBhdGhDYW5kaWRhdGVzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXRzID0gYXdhaXQgZnMuc3RhdChjYW5kaWRhdGVQYXRoKVxuICAgICAgICAgICAgcmVzb2x2ZWRGdWxsUGF0aCA9IGNhbmRpZGF0ZVBhdGhcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBLZWVwIHNlYXJjaGluZ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdHMgfHwgIXJlc29sdmVkRnVsbFBhdGgpIHRocm93IG5ldyBFcnJvcihcIlBhdGggbm90IGZvdW5kXCIpXG4gICAgICAgIGNvbnN0IGxvY2FsUGF0aCA9IHRoaXMudG9Mb2NhbFBhdGgocmVzb2x2ZWRGdWxsUGF0aClcblxuICAgICAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIHRoaXMuZGlyZWN0b3J5QXJncy5wdXNoKHRoaXMuZW5zdXJlVHJhaWxpbmdTbGFzaChsb2NhbFBhdGgpKVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRzLmlzRmlsZSgpKSB7XG4gICAgICAgICAgdGhpcy5maWxlQXJncy5wdXNoKGxvY2FsUGF0aClcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrTG9jYWxQYXRoID0gdGhpcy50b0xvY2FsUGF0aChiYXNlUHJlZml4ZWRGdWxsUGF0aCB8fCBmdWxsUGF0aClcbiAgICAgICAgdGhpcy5maWxlQXJncy5wdXNoKGZhbGxiYWNrTG9jYWxQYXRoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2FyZ3NQcmVwYXJlZCA9IHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxQYXRoIC0gTG9jYWwgcGF0aC5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBOb3JtYWxpemVkIGxvY2FsIHBhdGggd2l0aCB0cmFpbGluZyBzbGFzaC5cbiAgICovXG4gIGVuc3VyZVRyYWlsaW5nU2xhc2gobG9jYWxQYXRoKSB7XG4gICAgaWYgKGxvY2FsUGF0aCA9PT0gXCJcIikgcmV0dXJuIGxvY2FsUGF0aFxuICAgIHJldHVybiBsb2NhbFBhdGguZW5kc1dpdGgoXCIvXCIpID8gbG9jYWxQYXRoIDogYCR7bG9jYWxQYXRofS9gXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bGxQYXRoIC0gRnVsbCBwYXRoLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIExvY2FsIHBhdGggcmVsYXRpdmUgdG8gdGhlIGJhc2UgZGlyZWN0b3J5LlxuICAgKi9cbiAgdG9Mb2NhbFBhdGgoZnVsbFBhdGgpIHtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHRoaXMuZGlyZWN0b3J5LCBmdWxsUGF0aClcbiAgICByZXR1cm4gcmVsYXRpdmVQYXRoLnNwbGl0KHBhdGguc2VwKS5qb2luKFwiL1wiKVxuICB9XG59XG4iXX0=
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @property {boolean} [databaseCleaning.truncate] - Truncate tables between tests.
|
|
8
8
|
* @property {boolean} [focus] - Whether this test is focused.
|
|
9
9
|
* @property {() => (void|Promise<void>)} [function] - Test callback function.
|
|
10
|
+
* @property {number} [retry] - Number of retries when a test fails.
|
|
10
11
|
* @property {string} [type] - Test type identifier.
|
|
11
12
|
*/
|
|
12
13
|
/**
|
|
@@ -145,6 +146,10 @@ export type TestArgs = {
|
|
|
145
146
|
* - Test callback function.
|
|
146
147
|
*/
|
|
147
148
|
function?: () => (void | Promise<void>);
|
|
149
|
+
/**
|
|
150
|
+
* - Number of retries when a test fails.
|
|
151
|
+
*/
|
|
152
|
+
retry?: number;
|
|
148
153
|
/**
|
|
149
154
|
* - Test type identifier.
|
|
150
155
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"AASA
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"AASA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AAEH;;GAEG;AAEH;;;GAGG;AAEH;;;;;;;;GAQG;AAEH;IACE;;;;OAIG;IACH,uDAHG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACjB,SAAS,EAA7B,KAAK,CAAC,MAAM,CAAC;KACvB,EAYA;IANC,sDAAmC;IACnC,qBAA2B;IAE3B,qBAAqB;IACrB,yBAAyB;IACzB,oBAAoB;IAGtB;;OAEG;IACH,oBAFa,OAAO,qBAAqB,EAAE,OAAO,CAED;IAEjD;;OAEG;IACH,gBAFa,MAAM,EAAE,CAEoB;IAEzC;;OAEG;IACH,eAFa,OAAO,CAAC,WAAW,CAAC,CAehC;IAXG,0BAIE;IASN;;OAEG;IACH,iBAFa,OAAO,CAAC,aAAa,CAAC,CAQlC;IAJG,8BAAyC;IAM7C;;OAEG;IACH,mBAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;OAEG;IACH,YAFa,OAAO,CAE0D;IAE9E;;OAEG;IACH,kBAFa,MAAM,CAMlB;IAED;;OAEG;IACH,sBAFa,MAAM,CAMlB;IAED;;OAEG;IACH,iBAFa,MAAM,CAMlB;IAED;;OAEG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,CAgBzB;IAbC,0BAA6B;IAM7B,uBAA0C;IAS5C;;OAEG;IACH,uBAFa,OAAO,CAQnB;IAED;;OAEG;IACH,OAFa,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;OAGG;IACH,oBAHW,aAAa,GACX;QAAC,gBAAgB,EAAE,OAAO,CAAA;KAAC,CA6BvC;IAED;;;;;;;;OAQG;IACH,0EAPG;QAAuD,WAAW,EAA1D,KAAK,CAAC,iCAAiC,CAAC;QACO,YAAY,EAA3D,KAAK,CAAC,iCAAiC,CAAC;QACpB,KAAK,EAAzB,aAAa;QACE,YAAY,EAA3B,MAAM,EAAE;QACK,WAAW,EAAxB,MAAM;KACd,GAAU,OAAO,CAAC,IAAI,CAAC,CAyGzB;CACF;;;;;kBApUa,WAAW;;;;aACX,aAAa;;;;uBAExB;QAAsC,WAAW,GAAtC,OAAO;QACoB,QAAQ,GAAnC,OAAO;KAClB;;;;YAAW,OAAO;;;;eACP,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;;;YAC1B,MAAM;;;;WACN,MAAM;;;;;;UAKN,QAAQ;;;;cACR,CAAS,IAAQ,EAAR,QAAQ,KAAI,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;0CAI1C,CAAS,IAA8F,EAA9F;IAAC,aAAa,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAC,KAAI,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;;;;cAK9H,2BAA2B;;;;;;UAK3B,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;;;;uBACxB,OAAO;;;;iBACP,iCAAiC,EAAE;;;;kBACnC,iCAAiC,EAAE;;;;WACnC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;;;;UACxB,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;;wBAzCnB,0BAA0B;0BAExB,qBAAqB"}
|
|
@@ -4,7 +4,7 @@ import Application from "../../src/application.js";
|
|
|
4
4
|
import BacktraceCleaner from "../utils/backtrace-cleaner.js";
|
|
5
5
|
import RequestClient from "./request-client.js";
|
|
6
6
|
import restArgsError from "../utils/rest-args-error.js";
|
|
7
|
-
import { tests } from "./test.js";
|
|
7
|
+
import { testEvents, tests } from "./test.js";
|
|
8
8
|
/**
|
|
9
9
|
* @typedef {object} TestArgs
|
|
10
10
|
* @property {Application} [application] - Application instance for integration tests.
|
|
@@ -14,6 +14,7 @@ import { tests } from "./test.js";
|
|
|
14
14
|
* @property {boolean} [databaseCleaning.truncate] - Truncate tables between tests.
|
|
15
15
|
* @property {boolean} [focus] - Whether this test is focused.
|
|
16
16
|
* @property {() => (void|Promise<void>)} [function] - Test callback function.
|
|
17
|
+
* @property {number} [retry] - Number of retries when a test fails.
|
|
17
18
|
* @property {string} [type] - Test type identifier.
|
|
18
19
|
*/
|
|
19
20
|
/**
|
|
@@ -208,35 +209,65 @@ export default class TestRunner {
|
|
|
208
209
|
testArgs.client = await this.requestClient();
|
|
209
210
|
}
|
|
210
211
|
console.log(`${leftPadding}it ${testDescription}`);
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
212
|
+
const retryCount = typeof testArgs.retry === "number" && Number.isFinite(testArgs.retry)
|
|
213
|
+
? Math.max(0, Math.floor(testArgs.retry))
|
|
214
|
+
: 0;
|
|
215
|
+
let retriesUsed = 0;
|
|
216
|
+
while (true) {
|
|
217
|
+
let shouldRetry = false;
|
|
218
|
+
/** @type {unknown} */
|
|
219
|
+
let failedError;
|
|
220
|
+
try {
|
|
221
|
+
for (const beforeEachData of newBeforeEaches) {
|
|
222
|
+
await beforeEachData.callback({ configuration: this.getConfiguration(), testArgs, testData });
|
|
223
|
+
}
|
|
224
|
+
await testData.function(testArgs);
|
|
225
|
+
this._successfulTests++;
|
|
214
226
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
addTrackedStackToError(error);
|
|
223
|
-
const backtraceCleaner = new BacktraceCleaner(error);
|
|
224
|
-
const cleanedStack = backtraceCleaner.getCleanedStack();
|
|
225
|
-
const stackLines = cleanedStack?.split("\n");
|
|
226
|
-
if (stackLines) {
|
|
227
|
-
for (const stackLine of stackLines) {
|
|
228
|
-
console.error(`${leftPadding} ${stackLine}`);
|
|
229
|
-
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
if (retriesUsed < retryCount) {
|
|
229
|
+
retriesUsed++;
|
|
230
|
+
shouldRetry = true;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
failedError = error;
|
|
230
234
|
}
|
|
231
235
|
}
|
|
232
|
-
|
|
233
|
-
|
|
236
|
+
finally {
|
|
237
|
+
for (const afterEachData of newAfterEaches) {
|
|
238
|
+
await afterEachData.callback({ configuration: this.getConfiguration(), testArgs, testData });
|
|
239
|
+
}
|
|
234
240
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
241
|
+
if (shouldRetry)
|
|
242
|
+
continue;
|
|
243
|
+
if (failedError) {
|
|
244
|
+
this._failedTests++;
|
|
245
|
+
if (failedError instanceof Error) {
|
|
246
|
+
console.error(`${leftPadding} Test failed:`, failedError.message);
|
|
247
|
+
addTrackedStackToError(failedError);
|
|
248
|
+
const backtraceCleaner = new BacktraceCleaner(failedError);
|
|
249
|
+
const cleanedStack = backtraceCleaner.getCleanedStack();
|
|
250
|
+
const stackLines = cleanedStack?.split("\n");
|
|
251
|
+
if (stackLines) {
|
|
252
|
+
for (const stackLine of stackLines) {
|
|
253
|
+
console.error(`${leftPadding} ${stackLine}`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
console.error(`${leftPadding} Test failed with a ${typeof failedError}:`, failedError);
|
|
259
|
+
}
|
|
260
|
+
testEvents.emit("testFailed", {
|
|
261
|
+
configuration: this.getConfiguration(),
|
|
262
|
+
descriptions,
|
|
263
|
+
error: failedError,
|
|
264
|
+
testArgs,
|
|
265
|
+
testData,
|
|
266
|
+
testDescription,
|
|
267
|
+
testRunner: this
|
|
268
|
+
});
|
|
239
269
|
}
|
|
270
|
+
break;
|
|
240
271
|
}
|
|
241
272
|
}
|
|
242
273
|
for (const subDescription in tests.subs) {
|
|
@@ -255,4 +286,4 @@ export default class TestRunner {
|
|
|
255
286
|
}
|
|
256
287
|
}
|
|
257
288
|
}
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy90ZXN0LXJ1bm5lci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sZ0NBQWdDLENBQUE7QUFDckUsT0FBTyxXQUFXLE1BQU0sMEJBQTBCLENBQUE7QUFDbEQsT0FBTyxnQkFBZ0IsTUFBTSwrQkFBK0IsQ0FBQTtBQUM1RCxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBRS9COzs7Ozs7Ozs7O0dBVUc7QUFFSDs7OztHQUlHO0FBRUg7O0dBRUc7QUFFSDs7O0dBR0c7QUFFSDs7Ozs7Ozs7R0FRRztBQUVILE1BQU0sQ0FBQyxPQUFPLE9BQU8sVUFBVTtJQUM3Qjs7OztPQUlHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsR0FBRyxRQUFRLEVBQUM7UUFDakQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXZCLElBQUksQ0FBQyxhQUFhO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO1FBRWhFLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFBO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFBO1FBRTNCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUE7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFBLENBQUMsQ0FBQztJQUVqRDs7T0FFRztJQUNILFlBQVksS0FBSyxP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O0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHthZGRUcmFja2VkU3RhY2tUb0Vycm9yfSBmcm9tIFwiLi4vdXRpbHMvd2l0aC10cmFja2VkLXN0YWNrLmpzXCJcbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tIFwiLi4vLi4vc3JjL2FwcGxpY2F0aW9uLmpzXCJcbmltcG9ydCBCYWNrdHJhY2VDbGVhbmVyIGZyb20gXCIuLi91dGlscy9iYWNrdHJhY2UtY2xlYW5lci5qc1wiXG5pbXBvcnQgUmVxdWVzdENsaWVudCBmcm9tIFwiLi9yZXF1ZXN0LWNsaWVudC5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCB7dGVzdHN9IGZyb20gXCIuL3Rlc3QuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlc3RBcmdzXG4gKiBAcHJvcGVydHkge0FwcGxpY2F0aW9ufSBbYXBwbGljYXRpb25dIC0gQXBwbGljYXRpb24gaW5zdGFuY2UgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICogQHByb3BlcnR5IHtSZXF1ZXN0Q2xpZW50fSBbY2xpZW50XSAtIEhUVFAgY2xpZW50IGZvciByZXF1ZXN0IHRlc3RzLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtkYXRhYmFzZUNsZWFuaW5nXSAtIERhdGFiYXNlIGNsZWFudXAgb3B0aW9ucyBmb3IgdGVzdHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkYXRhYmFzZUNsZWFuaW5nLnRyYW5zYWN0aW9uXSAtIFVzZSB0cmFuc2FjdGlvbnMgdG8gcm9sbGJhY2sgYmV0d2VlbiB0ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RhdGFiYXNlQ2xlYW5pbmcudHJ1bmNhdGVdIC0gVHJ1bmNhdGUgdGFibGVzIGJldHdlZW4gdGVzdHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmb2N1c10gLSBXaGV0aGVyIHRoaXMgdGVzdCBpcyBmb2N1c2VkLlxuICogQHByb3BlcnR5IHsoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gW2Z1bmN0aW9uXSAtIFRlc3QgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3R5cGVdIC0gVGVzdCB0eXBlIGlkZW50aWZpZXIuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUZXN0RGF0YVxuICogQHByb3BlcnR5IHtUZXN0QXJnc30gYXJncyAtIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRlc3QuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKFRlc3RBcmdzKSA6ICh2b2lkfFByb21pc2U8dm9pZD4pfSBmdW5jdGlvbiAtIFRlc3QgY2FsbGJhY2sgdG8gZXhlY3V0ZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtmdW5jdGlvbih7Y29uZmlndXJhdGlvbjogaW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCB0ZXN0QXJnczogVGVzdEFyZ3MsIHRlc3REYXRhOiBUZXN0RGF0YX0pIDogKHZvaWR8UHJvbWlzZTx2b2lkPil9IEFmdGVyQmVmb3JlRWFjaENhbGxiYWNrVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tPYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge0FmdGVyQmVmb3JlRWFjaENhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBIb29rIGNhbGxiYWNrIHRvIGV4ZWN1dGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBUZXN0c0FyZ3VtZW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFRlc3REYXRhPn0gYXJncyAtIEFyZ3VtZW50cyBrZXllZCBieSB0ZXN0IGRlc2NyaXB0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbYW55VGVzdHNGb2N1c3NlZF0gLSBXaGV0aGVyIGFueSB0ZXN0cyBpbiB0aGUgdHJlZSBhcmUgZm9jdXNlZC5cbiAqIEBwcm9wZXJ0eSB7QWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tPYmplY3RUeXBlW119IGFmdGVyRWFjaGVzIC0gQWZ0ZXItZWFjaCBob29rcyBmb3IgdGhpcyBzY29wZS5cbiAqIEBwcm9wZXJ0eSB7QWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tPYmplY3RUeXBlW119IGJlZm9yZUVhY2hlcyAtIEJlZm9yZS1lYWNoIGhvb2tzIGZvciB0aGlzIHNjb3BlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBUZXN0RGF0YT59IHRlc3RzIC0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIG5vZGUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIFRlc3RzQXJndW1lbnQ+fSBzdWJzIC0gT3B0aW9uYWwgY2hpbGQgbm9kZXMuIEVhY2ggaXRlbSBpcyBhbm90aGVyIGBOb2RlYCwgYWxsb3dpbmcgcmVjdXJzaW9uLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RSdW5uZXIge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYXJncy50ZXN0RmlsZXMgLSBUZXN0IGZpbGVzLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIHRlc3RGaWxlcywgLi4ucmVzdEFyZ3N9KSB7XG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIGlmICghY29uZmlndXJhdGlvbikgdGhyb3cgbmV3IEVycm9yKFwiY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZFwiKVxuXG4gICAgdGhpcy5fY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLl90ZXN0RmlsZXMgPSB0ZXN0RmlsZXNcblxuICAgIHRoaXMuX2ZhaWxlZFRlc3RzID0gMFxuICAgIHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cyA9IDBcbiAgICB0aGlzLl90ZXN0c0NvdW50ID0gMFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkgeyByZXR1cm4gdGhpcy5fY29uZmlndXJhdGlvbiB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gLSBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIGdldFRlc3RGaWxlcygpIHsgcmV0dXJuIHRoaXMuX3Rlc3RGaWxlcyB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEFwcGxpY2F0aW9uPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBhcHBsaWNhdGlvbi5cbiAgICovXG4gIGFzeW5jIGFwcGxpY2F0aW9uKCkge1xuICAgIGlmICghdGhpcy5fYXBwbGljYXRpb24pIHtcbiAgICAgIHRoaXMuX2FwcGxpY2F0aW9uID0gbmV3IEFwcGxpY2F0aW9uKHtcbiAgICAgICAgY29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCksXG4gICAgICAgIGh0dHBTZXJ2ZXI6IHtwb3J0OiAzMTAwNn0sXG4gICAgICAgIHR5cGU6IFwidGVzdC1ydW5uZXJcIlxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5fYXBwbGljYXRpb24uaW5pdGlhbGl6ZSgpXG4gICAgICBhd2FpdCB0aGlzLl9hcHBsaWNhdGlvbi5zdGFydEh0dHBTZXJ2ZXIoKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlcXVlc3RDbGllbnQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIHJlcXVlc3QgY2xpZW50LlxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdENsaWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX3JlcXVlc3RDbGllbnQpIHtcbiAgICAgIHRoaXMuX3JlcXVlc3RDbGllbnQgPSBuZXcgUmVxdWVzdENsaWVudCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RDbGllbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgaW1wb3J0VGVzdEZpbGVzKCkge1xuICAgIGF3YWl0IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldEVudmlyb25tZW50SGFuZGxlcigpLmltcG9ydFRlc3RGaWxlcyh0aGlzLmdldFRlc3RGaWxlcygpKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgZmFpbGVkLlxuICAgKi9cbiAgaXNGYWlsZWQoKSB7IHJldHVybiB0aGlzLl9mYWlsZWRUZXN0cyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2ZhaWxlZFRlc3RzID4gMCB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gVGhlIGZhaWxlZCB0ZXN0cy5cbiAgICovXG4gIGdldEZhaWxlZFRlc3RzKCkge1xuICAgIGlmICh0aGlzLl9mYWlsZWRUZXN0cyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJUZXN0cyBoYXNuJ3QgYmVlbiBydW4geWV0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5fZmFpbGVkVGVzdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSBzdWNjZXNzZnVsIHRlc3RzLlxuICAgKi9cbiAgZ2V0U3VjY2Vzc2Z1bFRlc3RzKCkge1xuICAgIGlmICh0aGlzLl9zdWNjZXNzZnVsVGVzdHMgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKFwiVGVzdHMgaGFzbid0IGJlZW4gcnVuIHlldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuX3N1Y2Nlc3NmdWxUZXN0c1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IC0gVGhlIHRlc3RzIGNvdW50LlxuICAgKi9cbiAgZ2V0VGVzdHNDb3VudCgpIHtcbiAgICBpZiAodGhpcy5fdGVzdHNDb3VudCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJUZXN0cyBoYXNuJ3QgYmVlbiBydW4geWV0XCIpXG5cbiAgICByZXR1cm4gdGhpcy5fdGVzdHNDb3VudFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBwcmVwYXJlKCkge1xuICAgIHRoaXMuYW55VGVzdHNGb2N1c3NlZCA9IGZhbHNlXG4gICAgdGhpcy5fZmFpbGVkVGVzdHMgPSAwXG4gICAgdGhpcy5fc3VjY2Vzc2Z1bFRlc3RzID0gMFxuICAgIHRoaXMuX3Rlc3RzQ291bnQgPSAwXG4gICAgYXdhaXQgdGhpcy5pbXBvcnRUZXN0RmlsZXMoKVxuICAgIGF3YWl0IHRoaXMuYW5hbHl6ZVRlc3RzKHRlc3RzKVxuICAgIHRoaXMuX29ubHlGb2N1c3NlZCA9IHRoaXMuYW55VGVzdHNGb2N1c3NlZFxuXG4gICAgY29uc3QgdGVzdGluZ0NvbmZpZ1BhdGggPSB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRUZXN0aW5nKClcblxuICAgIGlmICh0ZXN0aW5nQ29uZmlnUGF0aCkge1xuICAgICAgYXdhaXQgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0RW52aXJvbm1lbnRIYW5kbGVyKCkuaW1wb3J0VGVzdGluZ0NvbmZpZ1BhdGgoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGFueSB0ZXN0cyBmb2N1c3NlZC5cbiAgICovXG4gIGFyZUFueVRlc3RzRm9jdXNzZWQoKSB7XG4gICAgaWYgKHRoaXMuYW55VGVzdHNGb2N1c3NlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIYXNuJ3QgYmVlbiBkZXRlY3RlZCB5ZXRcIilcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hbnlUZXN0c0ZvY3Vzc2VkXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJ1bigpIHtcbiAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5lbnN1cmVDb25uZWN0aW9ucyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLnJ1blRlc3RzKHtcbiAgICAgICAgYWZ0ZXJFYWNoZXM6IFtdLFxuICAgICAgICBiZWZvcmVFYWNoZXM6IFtdLFxuICAgICAgICB0ZXN0cyxcbiAgICAgICAgZGVzY3JpcHRpb25zOiBbXSxcbiAgICAgICAgaW5kZW50TGV2ZWw6IDBcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1Rlc3RzQXJndW1lbnR9IHRlc3RzIC0gVGVzdHMuXG4gICAqIEByZXR1cm5zIHt7YW55VGVzdHNGb2N1c3NlZDogYm9vbGVhbn19IC0gV2hldGhlciBhbnkgdGVzdHMgaW4gdGhlIHRyZWUgYXJlIGZvY3VzZWQuXG4gICAqL1xuICBhbmFseXplVGVzdHModGVzdHMpIHtcbiAgICBsZXQgYW55VGVzdHNGb2N1c3NlZEZvdW5kID0gZmFsc2VcblxuICAgIGZvciAoY29uc3QgdGVzdERlc2NyaXB0aW9uIGluIHRlc3RzLnRlc3RzKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IHRlc3RzLnRlc3RzW3Rlc3REZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IHRlc3RBcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGVzdERhdGEuYXJncylcblxuICAgICAgdGhpcy5fdGVzdHNDb3VudCsrXG5cbiAgICAgIGlmICh0ZXN0QXJncy5mb2N1cykge1xuICAgICAgICBhbnlUZXN0c0ZvY3Vzc2VkRm91bmQgPSB0cnVlXG4gICAgICAgIHRoaXMuYW55VGVzdHNGb2N1c3NlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN1YkRlc2NyaXB0aW9uIGluIHRlc3RzLnN1YnMpIHtcbiAgICAgIGNvbnN0IHN1YlRlc3QgPSB0ZXN0cy5zdWJzW3N1YkRlc2NyaXB0aW9uXVxuICAgICAgY29uc3Qge2FueVRlc3RzRm9jdXNzZWR9ID0gdGhpcy5hbmFseXplVGVzdHMoc3ViVGVzdClcblxuICAgICAgaWYgKGFueVRlc3RzRm9jdXNzZWQpIHtcbiAgICAgICAgYW55VGVzdHNGb2N1c3NlZEZvdW5kID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBzdWJUZXN0LmFueVRlc3RzRm9jdXNzZWQgPSBhbnlUZXN0c0ZvY3Vzc2VkXG4gICAgfVxuXG4gICAgcmV0dXJuIHthbnlUZXN0c0ZvY3Vzc2VkOiBhbnlUZXN0c0ZvY3Vzc2VkRm91bmR9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtBcnJheTxBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGU+fSBhcmdzLmFmdGVyRWFjaGVzIC0gQWZ0ZXIgZWFjaGVzLlxuICAgKiBAcGFyYW0ge0FycmF5PEFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZT59IGFyZ3MuYmVmb3JlRWFjaGVzIC0gQmVmb3JlIGVhY2hlcy5cbiAgICogQHBhcmFtIHtUZXN0c0FyZ3VtZW50fSBhcmdzLnRlc3RzIC0gVGVzdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MuZGVzY3JpcHRpb25zIC0gRGVzY3JpcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbmRlbnRMZXZlbCAtIEluZGVudCBsZXZlbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJ1blRlc3RzKHthZnRlckVhY2hlcywgYmVmb3JlRWFjaGVzLCB0ZXN0cywgZGVzY3JpcHRpb25zLCBpbmRlbnRMZXZlbH0pIHtcbiAgICBjb25zdCBsZWZ0UGFkZGluZyA9IFwiIFwiLnJlcGVhdChpbmRlbnRMZXZlbCAqIDIpXG4gICAgY29uc3QgbmV3QWZ0ZXJFYWNoZXMgPSBbLi4uYWZ0ZXJFYWNoZXMsIC4uLnRlc3RzLmFmdGVyRWFjaGVzXVxuICAgIGNvbnN0IG5ld0JlZm9yZUVhY2hlcyA9IFsuLi5iZWZvcmVFYWNoZXMsIC4uLnRlc3RzLmJlZm9yZUVhY2hlc11cblxuICAgIGZvciAoY29uc3QgdGVzdERlc2NyaXB0aW9uIGluIHRlc3RzLnRlc3RzKSB7XG4gICAgICBjb25zdCB0ZXN0RGF0YSA9IHRlc3RzLnRlc3RzW3Rlc3REZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IHRlc3RBcmdzID0gLyoqIEB0eXBlIHtUZXN0QXJnc30gKi8gKE9iamVjdC5hc3NpZ24oe30sIHRlc3REYXRhLmFyZ3MpKVxuXG4gICAgICBpZiAodGhpcy5fb25seUZvY3Vzc2VkICYmICF0ZXN0QXJncy5mb2N1cykgY29udGludWVcblxuICAgICAgaWYgKHRlc3RBcmdzLnR5cGUgPT0gXCJtb2RlbFwiIHx8IHRlc3RBcmdzLnR5cGUgPT0gXCJyZXF1ZXN0XCIpIHtcbiAgICAgICAgdGVzdEFyZ3MuYXBwbGljYXRpb24gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uKClcbiAgICAgIH1cblxuICAgICAgaWYgKHRlc3RBcmdzLnR5cGUgPT0gXCJyZXF1ZXN0XCIpIHtcbiAgICAgICAgdGVzdEFyZ3MuY2xpZW50ID0gYXdhaXQgdGhpcy5yZXF1ZXN0Q2xpZW50KClcbiAgICAgIH1cblxuICAgICAgY29uc29sZS5sb2coYCR7bGVmdFBhZGRpbmd9aXQgJHt0ZXN0RGVzY3JpcHRpb259YClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCBiZWZvcmVFYWNoRGF0YSBvZiBuZXdCZWZvcmVFYWNoZXMpIHtcbiAgICAgICAgICBhd2FpdCBiZWZvcmVFYWNoRGF0YS5jYWxsYmFjayh7Y29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCksIHRlc3RBcmdzLCB0ZXN0RGF0YX0pXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0ZXN0RGF0YS5mdW5jdGlvbih0ZXN0QXJncylcbiAgICAgICAgdGhpcy5fc3VjY2Vzc2Z1bFRlc3RzKytcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuX2ZhaWxlZFRlc3RzKytcblxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bGVmdFBhZGRpbmd9ICBUZXN0IGZhaWxlZDpgLCBlcnJvci5tZXNzYWdlKVxuICAgICAgICAgIGFkZFRyYWNrZWRTdGFja1RvRXJyb3IoZXJyb3IpXG5cbiAgICAgICAgICBjb25zdCBiYWNrdHJhY2VDbGVhbmVyID0gbmV3IEJhY2t0cmFjZUNsZWFuZXIoZXJyb3IpXG4gICAgICAgICAgY29uc3QgY2xlYW5lZFN0YWNrID0gYmFja3RyYWNlQ2xlYW5lci5nZXRDbGVhbmVkU3RhY2soKVxuICAgICAgICAgIGNvbnN0IHN0YWNrTGluZXMgPSBjbGVhbmVkU3RhY2s/LnNwbGl0KFwiXFxuXCIpXG5cbiAgICAgICAgICBpZiAoc3RhY2tMaW5lcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdGFja0xpbmUgb2Ygc3RhY2tMaW5lcykge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2xlZnRQYWRkaW5nfSAgJHtzdGFja0xpbmV9YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgJHtsZWZ0UGFkZGluZ30gIFRlc3QgZmFpbGVkIHdpdGggYSAke3R5cGVvZiBlcnJvcn06YCwgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZvciAoY29uc3QgYWZ0ZXJFYWNoRGF0YSBvZiBuZXdBZnRlckVhY2hlcykge1xuICAgICAgICAgIGF3YWl0IGFmdGVyRWFjaERhdGEuY2FsbGJhY2soe2NvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLCB0ZXN0QXJncywgdGVzdERhdGF9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdWJEZXNjcmlwdGlvbiBpbiB0ZXN0cy5zdWJzKSB7XG4gICAgICBjb25zdCBzdWJUZXN0ID0gdGVzdHMuc3Vic1tzdWJEZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IG5ld0RlY3JpcHRpb25zID0gZGVzY3JpcHRpb25zLmNvbmNhdChbc3ViRGVzY3JpcHRpb25dKVxuXG4gICAgICBpZiAoIXRoaXMuX29ubHlGb2N1c3NlZCB8fCBzdWJUZXN0LmFueVRlc3RzRm9jdXNzZWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7bGVmdFBhZGRpbmd9JHtzdWJEZXNjcmlwdGlvbn1gKVxuICAgICAgICBhd2FpdCB0aGlzLnJ1blRlc3RzKHtcbiAgICAgICAgICBhZnRlckVhY2hlczogbmV3QWZ0ZXJFYWNoZXMsXG4gICAgICAgICAgYmVmb3JlRWFjaGVzOiBuZXdCZWZvcmVFYWNoZXMsXG4gICAgICAgICAgdGVzdHM6IHN1YlRlc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb25zOiBuZXdEZWNyaXB0aW9ucyxcbiAgICAgICAgICBpbmRlbnRMZXZlbDogaW5kZW50TGV2ZWwgKyAxXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy90ZXN0LXJ1bm5lci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sZ0NBQWdDLENBQUE7QUFDckUsT0FBTyxXQUFXLE1BQU0sMEJBQTBCLENBQUE7QUFDbEQsT0FBTyxnQkFBZ0IsTUFBTSwrQkFBK0IsQ0FBQTtBQUM1RCxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUUzQzs7Ozs7Ozs7Ozs7R0FXRztBQUVIOzs7O0dBSUc7QUFFSDs7R0FFRztBQUVIOzs7R0FHRztBQUVIOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxDQUFDLE9BQU8sT0FBTyxVQUFVO0lBQzdCOzs7O09BSUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsRUFBQztRQUNqRCxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFdkIsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFFaEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUE7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFFM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUE7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQTtRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQTtJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsS0FBSyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUEsQ0FBQyxDQUFDO0lBRWpEOztPQUVHO0lBQ0gsWUFBWSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUM7SUFFekM7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQztnQkFDbEMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdEMsVUFBVSxFQUFFLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBQztnQkFDekIsSUFBSSxFQUFFLGFBQWE7YUFDcEIsQ0FBQyxDQUFBO1lBRUYsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFBO1lBQ3BDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQTtRQUMzQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFBO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFBO1FBQzNDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUE7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWU7UUFDbkIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUM1RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFOUU7O09BRUc7SUFDSCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFFakYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFBO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO1FBRXJGLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFBO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtRQUVoRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUE7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFBO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUE7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUE7UUFDcEIsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7UUFDNUIsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFBO1FBRTFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsVUFBVSxFQUFFLENBQUE7UUFFOUQsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1FBQzdDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQTtJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsR0FBRztRQUNQLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsaUJBQWlCLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDekQsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNsQixXQUFXLEVBQUUsRUFBRTtnQkFDZixZQUFZLEVBQUUsRUFBRTtnQkFDaEIsS0FBSztnQkFDTCxZQUFZLEVBQUUsRUFBRTtnQkFDaEIsV0FBVyxFQUFFLENBQUM7YUFDZixDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsS0FBSztRQUNoQixJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQTtRQUVqQyxLQUFLLE1BQU0sZUFBZSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUVqRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7WUFFbEIsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLHFCQUFxQixHQUFHLElBQUksQ0FBQTtnQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssTUFBTSxjQUFjLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7WUFDMUMsTUFBTSxFQUFDLGdCQUFnQixFQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUVyRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLHFCQUFxQixHQUFHLElBQUksQ0FBQTtZQUM5QixDQUFDO1lBRUQsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFBO1FBQzdDLENBQUM7UUFFRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBQztRQUMxRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUMvQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzdELE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFaEUsS0FBSyxNQUFNLGVBQWUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUM3QyxNQUFNLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1lBRTNFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO2dCQUFFLFNBQVE7WUFFbkQsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUMzRCxRQUFRLENBQUMsV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQ2pELENBQUM7WUFFRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQy9CLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7WUFDOUMsQ0FBQztZQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLE1BQU0sZUFBZSxFQUFFLENBQUMsQ0FBQTtZQUVsRCxNQUFNLFVBQVUsR0FBRyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDdEYsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ0wsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFBO1lBRW5CLE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFBO2dCQUN2QixzQkFBc0I7Z0JBQ3RCLElBQUksV0FBVyxDQUFBO2dCQUVmLElBQUksQ0FBQztvQkFDSCxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO3dCQUM3QyxNQUFNLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7b0JBQzdGLENBQUM7b0JBRUQsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO29CQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtnQkFDekIsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLElBQUksV0FBVyxHQUFHLFVBQVUsRUFBRSxDQUFDO3dCQUM3QixXQUFXLEVBQUUsQ0FBQTt3QkFDYixXQUFXLEdBQUcsSUFBSSxDQUFBO29CQUNwQixDQUFDO3lCQUFNLENBQUM7d0JBQ04sV0FBVyxHQUFHLEtBQUssQ0FBQTtvQkFDckIsQ0FBQztnQkFDSCxDQUFDO3dCQUFTLENBQUM7b0JBQ1QsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDM0MsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFBO29CQUM1RixDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxXQUFXO29CQUFFLFNBQVE7Z0JBRXpCLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtvQkFFbkIsSUFBSSxXQUFXLFlBQVksS0FBSyxFQUFFLENBQUM7d0JBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTt3QkFDbEUsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUE7d0JBRW5DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTt3QkFDMUQsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUE7d0JBQ3ZELE1BQU0sVUFBVSxHQUFHLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7d0JBRTVDLElBQUksVUFBVSxFQUFFLENBQUM7NEJBQ2YsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQ0FDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFBOzRCQUMvQyxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxXQUFXLHdCQUF3QixPQUFPLFdBQVcsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFBO29CQUN6RixDQUFDO29CQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO3dCQUM1QixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO3dCQUN0QyxZQUFZO3dCQUNaLEtBQUssRUFBRSxXQUFXO3dCQUNsQixRQUFRO3dCQUNSLFFBQVE7d0JBQ1IsZUFBZTt3QkFDZixVQUFVLEVBQUUsSUFBSTtxQkFDakIsQ0FBQyxDQUFBO2dCQUNKLENBQUM7Z0JBRUQsTUFBSztZQUNQLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxNQUFNLGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUMxQyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtZQUU1RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFBO2dCQUM5QyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ2xCLFdBQVcsRUFBRSxjQUFjO29CQUMzQixZQUFZLEVBQUUsZUFBZTtvQkFDN0IsS0FBSyxFQUFFLE9BQU87b0JBQ2QsWUFBWSxFQUFFLGNBQWM7b0JBQzVCLFdBQVcsRUFBRSxXQUFXLEdBQUcsQ0FBQztpQkFDN0IsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHthZGRUcmFja2VkU3RhY2tUb0Vycm9yfSBmcm9tIFwiLi4vdXRpbHMvd2l0aC10cmFja2VkLXN0YWNrLmpzXCJcbmltcG9ydCBBcHBsaWNhdGlvbiBmcm9tIFwiLi4vLi4vc3JjL2FwcGxpY2F0aW9uLmpzXCJcbmltcG9ydCBCYWNrdHJhY2VDbGVhbmVyIGZyb20gXCIuLi91dGlscy9iYWNrdHJhY2UtY2xlYW5lci5qc1wiXG5pbXBvcnQgUmVxdWVzdENsaWVudCBmcm9tIFwiLi9yZXF1ZXN0LWNsaWVudC5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcbmltcG9ydCB7dGVzdEV2ZW50cywgdGVzdHN9IGZyb20gXCIuL3Rlc3QuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFRlc3RBcmdzXG4gKiBAcHJvcGVydHkge0FwcGxpY2F0aW9ufSBbYXBwbGljYXRpb25dIC0gQXBwbGljYXRpb24gaW5zdGFuY2UgZm9yIGludGVncmF0aW9uIHRlc3RzLlxuICogQHByb3BlcnR5IHtSZXF1ZXN0Q2xpZW50fSBbY2xpZW50XSAtIEhUVFAgY2xpZW50IGZvciByZXF1ZXN0IHRlc3RzLlxuICogQHByb3BlcnR5IHtvYmplY3R9IFtkYXRhYmFzZUNsZWFuaW5nXSAtIERhdGFiYXNlIGNsZWFudXAgb3B0aW9ucyBmb3IgdGVzdHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtkYXRhYmFzZUNsZWFuaW5nLnRyYW5zYWN0aW9uXSAtIFVzZSB0cmFuc2FjdGlvbnMgdG8gcm9sbGJhY2sgYmV0d2VlbiB0ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2RhdGFiYXNlQ2xlYW5pbmcudHJ1bmNhdGVdIC0gVHJ1bmNhdGUgdGFibGVzIGJldHdlZW4gdGVzdHMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmb2N1c10gLSBXaGV0aGVyIHRoaXMgdGVzdCBpcyBmb2N1c2VkLlxuICogQHByb3BlcnR5IHsoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gW2Z1bmN0aW9uXSAtIFRlc3QgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3JldHJ5XSAtIE51bWJlciBvZiByZXRyaWVzIHdoZW4gYSB0ZXN0IGZhaWxzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0eXBlXSAtIFRlc3QgdHlwZSBpZGVudGlmaWVyLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVzdERhdGFcbiAqIEBwcm9wZXJ0eSB7VGVzdEFyZ3N9IGFyZ3MgLSBBcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0ZXN0LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihUZXN0QXJncykgOiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gZnVuY3Rpb24gLSBUZXN0IGNhbGxiYWNrIHRvIGV4ZWN1dGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24oe2NvbmZpZ3VyYXRpb246IGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgdGVzdEFyZ3M6IFRlc3RBcmdzLCB0ZXN0RGF0YTogVGVzdERhdGF9KSA6ICh2b2lkfFByb21pc2U8dm9pZD4pfSBBZnRlckJlZm9yZUVhY2hDYWxsYmFja1R5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVxuICogQHByb3BlcnR5IHtBZnRlckJlZm9yZUVhY2hDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gSG9vayBjYWxsYmFjayB0byBleGVjdXRlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVGVzdHNBcmd1bWVudFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBUZXN0RGF0YT59IGFyZ3MgLSBBcmd1bWVudHMga2V5ZWQgYnkgdGVzdCBkZXNjcmlwdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FueVRlc3RzRm9jdXNzZWRdIC0gV2hldGhlciBhbnkgdGVzdHMgaW4gdGhlIHRyZWUgYXJlIGZvY3VzZWQuXG4gKiBAcHJvcGVydHkge0FmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVtdfSBhZnRlckVhY2hlcyAtIEFmdGVyLWVhY2ggaG9va3MgZm9yIHRoaXMgc2NvcGUuXG4gKiBAcHJvcGVydHkge0FmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVtdfSBiZWZvcmVFYWNoZXMgLSBCZWZvcmUtZWFjaCBob29rcyBmb3IgdGhpcyBzY29wZS5cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgVGVzdERhdGE+fSB0ZXN0cyAtIEEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBub2RlLlxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBUZXN0c0FyZ3VtZW50Pn0gc3VicyAtIE9wdGlvbmFsIGNoaWxkIG5vZGVzLiBFYWNoIGl0ZW0gaXMgYW5vdGhlciBgTm9kZWAsIGFsbG93aW5nIHJlY3Vyc2lvbi5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0UnVubmVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFyZ3MudGVzdEZpbGVzIC0gVGVzdCBmaWxlcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCB0ZXN0RmlsZXMsIC4uLnJlc3RBcmdzfSkge1xuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcImNvbmZpZ3VyYXRpb24gaXMgcmVxdWlyZWRcIilcblxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5fdGVzdEZpbGVzID0gdGVzdEZpbGVzXG5cbiAgICB0aGlzLl9mYWlsZWRUZXN0cyA9IDBcbiAgICB0aGlzLl9zdWNjZXNzZnVsVGVzdHMgPSAwXG4gICAgdGhpcy5fdGVzdHNDb3VudCA9IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSAtIFRoZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZ2V0Q29uZmlndXJhdGlvbigpIHsgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb24gfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IC0gVGhlIHRlc3QgZmlsZXMuXG4gICAqL1xuICBnZXRUZXN0RmlsZXMoKSB7IHJldHVybiB0aGlzLl90ZXN0RmlsZXMgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcHBsaWNhdGlvbj59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgYXBwbGljYXRpb24uXG4gICAqL1xuICBhc3luYyBhcHBsaWNhdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuX2FwcGxpY2F0aW9uKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbiA9IG5ldyBBcHBsaWNhdGlvbih7XG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgICBodHRwU2VydmVyOiB7cG9ydDogMzEwMDZ9LFxuICAgICAgICB0eXBlOiBcInRlc3QtcnVubmVyXCJcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMuX2FwcGxpY2F0aW9uLmluaXRpYWxpemUoKVxuICAgICAgYXdhaXQgdGhpcy5fYXBwbGljYXRpb24uc3RhcnRIdHRwU2VydmVyKClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZXF1ZXN0Q2xpZW50Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSByZXF1ZXN0IGNsaWVudC5cbiAgICovXG4gIGFzeW5jIHJlcXVlc3RDbGllbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9yZXF1ZXN0Q2xpZW50KSB7XG4gICAgICB0aGlzLl9yZXF1ZXN0Q2xpZW50ID0gbmV3IFJlcXVlc3RDbGllbnQoKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2xpZW50XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGltcG9ydFRlc3RGaWxlcygpIHtcbiAgICBhd2FpdCB0aGlzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRFbnZpcm9ubWVudEhhbmRsZXIoKS5pbXBvcnRUZXN0RmlsZXModGhpcy5nZXRUZXN0RmlsZXMoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGZhaWxlZC5cbiAgICovXG4gIGlzRmFpbGVkKCkgeyByZXR1cm4gdGhpcy5fZmFpbGVkVGVzdHMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9mYWlsZWRUZXN0cyA+IDAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSBmYWlsZWQgdGVzdHMuXG4gICAqL1xuICBnZXRGYWlsZWRUZXN0cygpIHtcbiAgICBpZiAodGhpcy5fZmFpbGVkVGVzdHMgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKFwiVGVzdHMgaGFzbid0IGJlZW4gcnVuIHlldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZhaWxlZFRlc3RzXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn0gLSBUaGUgc3VjY2Vzc2Z1bCB0ZXN0cy5cbiAgICovXG4gIGdldFN1Y2Nlc3NmdWxUZXN0cygpIHtcbiAgICBpZiAodGhpcy5fc3VjY2Vzc2Z1bFRlc3RzID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihcIlRlc3RzIGhhc24ndCBiZWVuIHJ1biB5ZXRcIilcblxuICAgIHJldHVybiB0aGlzLl9zdWNjZXNzZnVsVGVzdHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSAtIFRoZSB0ZXN0cyBjb3VudC5cbiAgICovXG4gIGdldFRlc3RzQ291bnQoKSB7XG4gICAgaWYgKHRoaXMuX3Rlc3RzQ291bnQgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKFwiVGVzdHMgaGFzbid0IGJlZW4gcnVuIHlldFwiKVxuXG4gICAgcmV0dXJuIHRoaXMuX3Rlc3RzQ291bnRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZSgpIHtcbiAgICB0aGlzLmFueVRlc3RzRm9jdXNzZWQgPSBmYWxzZVxuICAgIHRoaXMuX2ZhaWxlZFRlc3RzID0gMFxuICAgIHRoaXMuX3N1Y2Nlc3NmdWxUZXN0cyA9IDBcbiAgICB0aGlzLl90ZXN0c0NvdW50ID0gMFxuICAgIGF3YWl0IHRoaXMuaW1wb3J0VGVzdEZpbGVzKClcbiAgICBhd2FpdCB0aGlzLmFuYWx5emVUZXN0cyh0ZXN0cylcbiAgICB0aGlzLl9vbmx5Rm9jdXNzZWQgPSB0aGlzLmFueVRlc3RzRm9jdXNzZWRcblxuICAgIGNvbnN0IHRlc3RpbmdDb25maWdQYXRoID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZ2V0VGVzdGluZygpXG5cbiAgICBpZiAodGVzdGluZ0NvbmZpZ1BhdGgpIHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLmdldEVudmlyb25tZW50SGFuZGxlcigpLmltcG9ydFRlc3RpbmdDb25maWdQYXRoKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBhbnkgdGVzdHMgZm9jdXNzZWQuXG4gICAqL1xuICBhcmVBbnlUZXN0c0ZvY3Vzc2VkKCkge1xuICAgIGlmICh0aGlzLmFueVRlc3RzRm9jdXNzZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSGFzbid0IGJlZW4gZGV0ZWN0ZWQgeWV0XCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYW55VGVzdHNGb2N1c3NlZFxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBydW4oKSB7XG4gICAgYXdhaXQgdGhpcy5nZXRDb25maWd1cmF0aW9uKCkuZW5zdXJlQ29ubmVjdGlvbnMoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5ydW5UZXN0cyh7XG4gICAgICAgIGFmdGVyRWFjaGVzOiBbXSxcbiAgICAgICAgYmVmb3JlRWFjaGVzOiBbXSxcbiAgICAgICAgdGVzdHMsXG4gICAgICAgIGRlc2NyaXB0aW9uczogW10sXG4gICAgICAgIGluZGVudExldmVsOiAwXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtUZXN0c0FyZ3VtZW50fSB0ZXN0cyAtIFRlc3RzLlxuICAgKiBAcmV0dXJucyB7e2FueVRlc3RzRm9jdXNzZWQ6IGJvb2xlYW59fSAtIFdoZXRoZXIgYW55IHRlc3RzIGluIHRoZSB0cmVlIGFyZSBmb2N1c2VkLlxuICAgKi9cbiAgYW5hbHl6ZVRlc3RzKHRlc3RzKSB7XG4gICAgbGV0IGFueVRlc3RzRm9jdXNzZWRGb3VuZCA9IGZhbHNlXG5cbiAgICBmb3IgKGNvbnN0IHRlc3REZXNjcmlwdGlvbiBpbiB0ZXN0cy50ZXN0cykge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSB0ZXN0cy50ZXN0c1t0ZXN0RGVzY3JpcHRpb25dXG4gICAgICBjb25zdCB0ZXN0QXJncyA9IE9iamVjdC5hc3NpZ24oe30sIHRlc3REYXRhLmFyZ3MpXG5cbiAgICAgIHRoaXMuX3Rlc3RzQ291bnQrK1xuXG4gICAgICBpZiAodGVzdEFyZ3MuZm9jdXMpIHtcbiAgICAgICAgYW55VGVzdHNGb2N1c3NlZEZvdW5kID0gdHJ1ZVxuICAgICAgICB0aGlzLmFueVRlc3RzRm9jdXNzZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdWJEZXNjcmlwdGlvbiBpbiB0ZXN0cy5zdWJzKSB7XG4gICAgICBjb25zdCBzdWJUZXN0ID0gdGVzdHMuc3Vic1tzdWJEZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IHthbnlUZXN0c0ZvY3Vzc2VkfSA9IHRoaXMuYW5hbHl6ZVRlc3RzKHN1YlRlc3QpXG5cbiAgICAgIGlmIChhbnlUZXN0c0ZvY3Vzc2VkKSB7XG4gICAgICAgIGFueVRlc3RzRm9jdXNzZWRGb3VuZCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgc3ViVGVzdC5hbnlUZXN0c0ZvY3Vzc2VkID0gYW55VGVzdHNGb2N1c3NlZFxuICAgIH1cblxuICAgIHJldHVybiB7YW55VGVzdHNGb2N1c3NlZDogYW55VGVzdHNGb2N1c3NlZEZvdW5kfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7QXJyYXk8QWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tPYmplY3RUeXBlPn0gYXJncy5hZnRlckVhY2hlcyAtIEFmdGVyIGVhY2hlcy5cbiAgICogQHBhcmFtIHtBcnJheTxBZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGU+fSBhcmdzLmJlZm9yZUVhY2hlcyAtIEJlZm9yZSBlYWNoZXMuXG4gICAqIEBwYXJhbSB7VGVzdHNBcmd1bWVudH0gYXJncy50ZXN0cyAtIFRlc3RzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzLmRlc2NyaXB0aW9ucyAtIERlc2NyaXB0aW9ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5kZW50TGV2ZWwgLSBJbmRlbnQgbGV2ZWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBydW5UZXN0cyh7YWZ0ZXJFYWNoZXMsIGJlZm9yZUVhY2hlcywgdGVzdHMsIGRlc2NyaXB0aW9ucywgaW5kZW50TGV2ZWx9KSB7XG4gICAgY29uc3QgbGVmdFBhZGRpbmcgPSBcIiBcIi5yZXBlYXQoaW5kZW50TGV2ZWwgKiAyKVxuICAgIGNvbnN0IG5ld0FmdGVyRWFjaGVzID0gWy4uLmFmdGVyRWFjaGVzLCAuLi50ZXN0cy5hZnRlckVhY2hlc11cbiAgICBjb25zdCBuZXdCZWZvcmVFYWNoZXMgPSBbLi4uYmVmb3JlRWFjaGVzLCAuLi50ZXN0cy5iZWZvcmVFYWNoZXNdXG5cbiAgICBmb3IgKGNvbnN0IHRlc3REZXNjcmlwdGlvbiBpbiB0ZXN0cy50ZXN0cykge1xuICAgICAgY29uc3QgdGVzdERhdGEgPSB0ZXN0cy50ZXN0c1t0ZXN0RGVzY3JpcHRpb25dXG4gICAgICBjb25zdCB0ZXN0QXJncyA9IC8qKiBAdHlwZSB7VGVzdEFyZ3N9ICovIChPYmplY3QuYXNzaWduKHt9LCB0ZXN0RGF0YS5hcmdzKSlcblxuICAgICAgaWYgKHRoaXMuX29ubHlGb2N1c3NlZCAmJiAhdGVzdEFyZ3MuZm9jdXMpIGNvbnRpbnVlXG5cbiAgICAgIGlmICh0ZXN0QXJncy50eXBlID09IFwibW9kZWxcIiB8fCB0ZXN0QXJncy50eXBlID09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgIHRlc3RBcmdzLmFwcGxpY2F0aW9uID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvbigpXG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXN0QXJncy50eXBlID09IFwicmVxdWVzdFwiKSB7XG4gICAgICAgIHRlc3RBcmdzLmNsaWVudCA9IGF3YWl0IHRoaXMucmVxdWVzdENsaWVudCgpXG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGUubG9nKGAke2xlZnRQYWRkaW5nfWl0ICR7dGVzdERlc2NyaXB0aW9ufWApXG5cbiAgICAgIGNvbnN0IHJldHJ5Q291bnQgPSB0eXBlb2YgdGVzdEFyZ3MucmV0cnkgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzRmluaXRlKHRlc3RBcmdzLnJldHJ5KVxuICAgICAgICA/IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodGVzdEFyZ3MucmV0cnkpKVxuICAgICAgICA6IDBcbiAgICAgIGxldCByZXRyaWVzVXNlZCA9IDBcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgbGV0IHNob3VsZFJldHJ5ID0gZmFsc2VcbiAgICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqL1xuICAgICAgICBsZXQgZmFpbGVkRXJyb3JcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAoY29uc3QgYmVmb3JlRWFjaERhdGEgb2YgbmV3QmVmb3JlRWFjaGVzKSB7XG4gICAgICAgICAgICBhd2FpdCBiZWZvcmVFYWNoRGF0YS5jYWxsYmFjayh7Y29uZmlndXJhdGlvbjogdGhpcy5nZXRDb25maWd1cmF0aW9uKCksIHRlc3RBcmdzLCB0ZXN0RGF0YX0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgdGVzdERhdGEuZnVuY3Rpb24odGVzdEFyZ3MpXG4gICAgICAgICAgdGhpcy5fc3VjY2Vzc2Z1bFRlc3RzKytcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAocmV0cmllc1VzZWQgPCByZXRyeUNvdW50KSB7XG4gICAgICAgICAgICByZXRyaWVzVXNlZCsrXG4gICAgICAgICAgICBzaG91bGRSZXRyeSA9IHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmFpbGVkRXJyb3IgPSBlcnJvclxuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFmdGVyRWFjaERhdGEgb2YgbmV3QWZ0ZXJFYWNoZXMpIHtcbiAgICAgICAgICAgIGF3YWl0IGFmdGVyRWFjaERhdGEuY2FsbGJhY2soe2NvbmZpZ3VyYXRpb246IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpLCB0ZXN0QXJncywgdGVzdERhdGF9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaG91bGRSZXRyeSkgY29udGludWVcblxuICAgICAgICBpZiAoZmFpbGVkRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsZWRUZXN0cysrXG5cbiAgICAgICAgICBpZiAoZmFpbGVkRXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtsZWZ0UGFkZGluZ30gIFRlc3QgZmFpbGVkOmAsIGZhaWxlZEVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICBhZGRUcmFja2VkU3RhY2tUb0Vycm9yKGZhaWxlZEVycm9yKVxuXG4gICAgICAgICAgICBjb25zdCBiYWNrdHJhY2VDbGVhbmVyID0gbmV3IEJhY2t0cmFjZUNsZWFuZXIoZmFpbGVkRXJyb3IpXG4gICAgICAgICAgICBjb25zdCBjbGVhbmVkU3RhY2sgPSBiYWNrdHJhY2VDbGVhbmVyLmdldENsZWFuZWRTdGFjaygpXG4gICAgICAgICAgICBjb25zdCBzdGFja0xpbmVzID0gY2xlYW5lZFN0YWNrPy5zcGxpdChcIlxcblwiKVxuXG4gICAgICAgICAgICBpZiAoc3RhY2tMaW5lcykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN0YWNrTGluZSBvZiBzdGFja0xpbmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtsZWZ0UGFkZGluZ30gICR7c3RhY2tMaW5lfWApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHtsZWZ0UGFkZGluZ30gIFRlc3QgZmFpbGVkIHdpdGggYSAke3R5cGVvZiBmYWlsZWRFcnJvcn06YCwgZmFpbGVkRXJyb3IpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGVzdEV2ZW50cy5lbWl0KFwidGVzdEZhaWxlZFwiLCB7XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmdldENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgICAgIGVycm9yOiBmYWlsZWRFcnJvcixcbiAgICAgICAgICAgIHRlc3RBcmdzLFxuICAgICAgICAgICAgdGVzdERhdGEsXG4gICAgICAgICAgICB0ZXN0RGVzY3JpcHRpb24sXG4gICAgICAgICAgICB0ZXN0UnVubmVyOiB0aGlzXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdWJEZXNjcmlwdGlvbiBpbiB0ZXN0cy5zdWJzKSB7XG4gICAgICBjb25zdCBzdWJUZXN0ID0gdGVzdHMuc3Vic1tzdWJEZXNjcmlwdGlvbl1cbiAgICAgIGNvbnN0IG5ld0RlY3JpcHRpb25zID0gZGVzY3JpcHRpb25zLmNvbmNhdChbc3ViRGVzY3JpcHRpb25dKVxuXG4gICAgICBpZiAoIXRoaXMuX29ubHlGb2N1c3NlZCB8fCBzdWJUZXN0LmFueVRlc3RzRm9jdXNzZWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCR7bGVmdFBhZGRpbmd9JHtzdWJEZXNjcmlwdGlvbn1gKVxuICAgICAgICBhd2FpdCB0aGlzLnJ1blRlc3RzKHtcbiAgICAgICAgICBhZnRlckVhY2hlczogbmV3QWZ0ZXJFYWNoZXMsXG4gICAgICAgICAgYmVmb3JlRWFjaGVzOiBuZXdCZWZvcmVFYWNoZXMsXG4gICAgICAgICAgdGVzdHM6IHN1YlRlc3QsXG4gICAgICAgICAgZGVzY3JpcHRpb25zOiBuZXdEZWNyaXB0aW9ucyxcbiAgICAgICAgICBpbmRlbnRMZXZlbDogaW5kZW50TGV2ZWwgKyAxXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -34,6 +34,7 @@ export function fit(description: string, arg1: object | (() => (void | Promise<v
|
|
|
34
34
|
* @returns {void} - No return value.
|
|
35
35
|
*/
|
|
36
36
|
export function it(description: string, arg1: object | (() => (void | Promise<void>)), arg2?: undefined | (() => (void | Promise<void>))): void;
|
|
37
|
+
export const testEvents: import("eventemitter3").EventEmitter<string | symbol, any>;
|
|
37
38
|
/** @type {import("./test-runner.js").TestsArgument} */
|
|
38
39
|
export const tests: import("./test-runner.js").TestsArgument;
|
|
39
40
|
declare class Expect extends BaseExpect {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/testing/test.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/testing/test.js"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { formatValue, minifiedStringify } from "./format-value.js";
|
|
3
3
|
import { anythingDifferent } from "set-state-compare/build/diff-utils.js";
|
|
4
|
+
import EventEmitter from "../utils/event-emitter.js";
|
|
4
5
|
import restArgsError from "../utils/rest-args-error.js";
|
|
5
6
|
/** @type {import("./test-runner.js").TestsArgument} */
|
|
6
7
|
const tests = {
|
|
@@ -12,6 +13,7 @@ const tests = {
|
|
|
12
13
|
subs: {},
|
|
13
14
|
tests: {}
|
|
14
15
|
};
|
|
16
|
+
const testEvents = new EventEmitter();
|
|
15
17
|
let currentPath = [tests];
|
|
16
18
|
/**
|
|
17
19
|
* @param {import("./test-runner.js").AfterBeforeEachCallbackType} callback - Callback function.
|
|
@@ -491,5 +493,6 @@ globalThis.describe = describe;
|
|
|
491
493
|
globalThis.expect = expect;
|
|
492
494
|
globalThis.it = it;
|
|
493
495
|
globalThis.fit = fit;
|
|
494
|
-
|
|
495
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3Rlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQTtBQUN2RSxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUV2RCx1REFBdUQ7QUFDdkQsTUFBTSxLQUFLLEdBQUc7SUFDWiw2RUFBNkU7SUFDN0UsV0FBVyxFQUFFLEVBQUU7SUFDZixJQUFJLEVBQUUsRUFBRTtJQUVSLDZFQUE2RTtJQUM3RSxZQUFZLEVBQUUsRUFBRTtJQUNoQixJQUFJLEVBQUUsRUFBRTtJQUNSLEtBQUssRUFBRSxFQUFFO0NBQ1YsQ0FBQTtBQUVELElBQUksV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7QUFFekI7OztHQUdHO0FBQ0gsU0FBUyxVQUFVLENBQUMsUUFBUTtJQUMxQixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUV2RCxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUE7QUFDM0MsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsU0FBUyxDQUFDLFFBQVE7SUFDekIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFFdkQsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFBO0FBQzFDLENBQUM7QUFFRCxNQUFNLFVBQVU7SUFDZDs7O09BR0c7SUFDSCxLQUFLLENBQUMsU0FBUyxLQUFzQixDQUFDO0lBRXRDOzs7T0FHRztJQUNILEtBQUssQ0FB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SUFBSSxFQUFFLElBQUk7SUFDbEMsSUFBSSxRQUFRLENBQUE7SUFFWix5Q0FBeUM7SUFDekMsSUFBSSxZQUFZLENBQUE7SUFFaEIsSUFBSSxPQUFPLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ25CLFFBQVEsR0FBRyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQTtJQUMxQixDQUFDO1NBQU0sSUFBSSxPQUFPLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNyQyxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ25CLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQy9DLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUE7SUFDdEUsQ0FBQztJQUVELE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUE7QUFDaEQsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxVQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtBQUNoQyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtBQUNsQyxVQUFVLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtBQUM5QixVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtBQUMxQixVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQTtBQUNsQixVQUFVLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQTtBQUVwQixPQUFPLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtmb3JtYXRWYWx1ZSwgbWluaWZpZWRTdHJpbmdpZnl9IGZyb20gXCIuL2Zvcm1hdC12YWx1ZS5qc1wiXG5pbXBvcnQge2FueXRoaW5nRGlmZmVyZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvZGlmZi11dGlscy5qc1wiXG5pbXBvcnQgcmVzdEFyZ3NFcnJvciBmcm9tIFwiLi4vdXRpbHMvcmVzdC1hcmdzLWVycm9yLmpzXCJcblxuLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLlRlc3RzQXJndW1lbnR9ICovXG5jb25zdCB0ZXN0cyA9IHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVtdfSAqL1xuICBhZnRlckVhY2hlczogW10sXG4gIGFyZ3M6IHt9LFxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5BZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVbXX0gKi9cbiAgYmVmb3JlRWFjaGVzOiBbXSxcbiAgc3Viczoge30sXG4gIHRlc3RzOiB7fVxufVxuXG5sZXQgY3VycmVudFBhdGggPSBbdGVzdHNdXG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmVmb3JlRWFjaChjYWxsYmFjaykge1xuICBjb25zdCBjdXJyZW50VGVzdCA9IGN1cnJlbnRQYXRoW2N1cnJlbnRQYXRoLmxlbmd0aCAtIDFdXG5cbiAgY3VycmVudFRlc3QuYmVmb3JlRWFjaGVzLnB1c2goe2NhbGxiYWNrfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tUeXBlfSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhZnRlckVhY2goY2FsbGJhY2spIHtcbiAgY29uc3QgY3VycmVudFRlc3QgPSBjdXJyZW50UGF0aFtjdXJyZW50UGF0aC5sZW5ndGggLSAxXVxuXG4gIGN1cnJlbnRUZXN0LmFmdGVyRWFjaGVzLnB1c2goe2NhbGxiYWNrfSlcbn1cblxuY2xhc3MgQmFzZUV4cGVjdCB7XG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJ1bkJlZm9yZSgpIHsgLyogZG8gbm90aGluZyAqLyB9XG5cbiAgLyoqXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgcnVuQWZ0ZXIoKSB7IC8qIGRvIG5vdGhpbmcgKi8gfVxufVxuXG5jbGFzcyBFeHBlY3RUb0NoYW5nZSBleHRlbmRzIEJhc2VFeHBlY3Qge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IGFyZ3MuY2hhbmdlQ2FsbGJhY2sgLSBDaGFuZ2UgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7RXhwZWN0fSBhcmdzLmV4cGVjdCAtIEV4cGVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjaGFuZ2VDYWxsYmFjaywgZXhwZWN0LCAuLi5yZXN0QXJnc30pIHtcbiAgICBzdXBlcigpXG4gICAgcmVzdEFyZ3NFcnJvcihyZXN0QXJncylcblxuICAgIHRoaXMuZXhwZWN0ID0gZXhwZWN0XG4gICAgdGhpcy5jaGFuZ2VDYWxsYmFjayA9IGNoYW5nZUNhbGxiYWNrXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IC0gQ291bnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtFeHBlY3R9IC0gVGhlIGJ5LlxuICAgKi9cbiAgYnkoY291bnQpIHtcbiAgICB0aGlzLmNvdW50ID0gY291bnRcblxuICAgIHJldHVybiB0aGlzLmV4cGVjdFxuICB9XG5cbiAgYXN5bmMgcnVuQmVmb3JlKCkge1xuICAgIHRoaXMub2xkQ291bnQgPSBhd2FpdCB0aGlzLmNoYW5nZUNhbGxiYWNrKClcbiAgfVxuXG4gIGFzeW5jIHJ1bkFmdGVyKCkge1xuICAgIHRoaXMubmV3Q291bnQgPSBhd2FpdCB0aGlzLmNoYW5nZUNhbGxiYWNrKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBpZiAodGhpcy5uZXdDb3VudCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMub2xkQ291bnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0VG9DaGFuZ2Ugbm90IGV4ZWN1dGVkIHByb3Blcmx5XCIpXG4gICAgfVxuXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMubmV3Q291bnQgLSB0aGlzLm9sZENvdW50XG5cbiAgICBpZiAoZGlmZmVyZW5jZSAhPSB0aGlzLmNvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHRvIGNoYW5nZSBieSAke3RoaXMuY291bnR9IGJ1dCBjaGFuZ2VkIGJ5ICR7ZGlmZmVyZW5jZX1gKVxuICAgIH1cbiAgfVxufVxuXG5jbGFzcyBFeHBlY3QgZXh0ZW5kcyBCYXNlRXhwZWN0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSBvYmplY3QgLSBPYmplY3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvYmplY3QpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5fb2JqZWN0ID0gb2JqZWN0XG5cbiAgICAvKiogQHR5cGUge0FycmF5PEV4cGVjdCB8IEV4cGVjdFRvQ2hhbmdlPn0gKi9cbiAgICB0aGlzLmV4cGVjdGF0aW9ucyA9IFtdXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtmdW5jdGlvbigpOiBQcm9taXNlPG51bWJlcj59IGNoYW5nZUNhbGxiYWNrIC0gQ2hhbmdlIGNhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7RXhwZWN0VG9DaGFuZ2V9IC0gVGhlIGFuZCBjaGFuZ2UuXG4gICAqL1xuICBhbmRDaGFuZ2UoY2hhbmdlQ2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy50b0NoYW5nZShjaGFuZ2VDYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBBIHZhbHVlLlxuICAgKi9cbiAgZ2V0IG5vdCgpIHtcbiAgICB0aGlzLl9ub3QgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSByZXN1bHQgLSBSZXN1bHQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvQmUocmVzdWx0KSB7XG4gICAgaWYgKHRoaXMuX25vdCkge1xuICAgICAgaWYgKHRoaXMuX29iamVjdCA9PT0gcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IG9iamVjdFByaW50ID0gZm9ybWF0VmFsdWUodGhpcy5fb2JqZWN0KVxuICAgICAgICBjb25zdCByZXN1bHRQcmludCA9IGZvcm1hdFZhbHVlKHJlc3VsdClcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhcyB1bmV4cGVjdGVkIG5vdCB0byBiZSAke3Jlc3VsdFByaW50fWApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9vYmplY3QgIT09IHJlc3VsdCkge1xuICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcbiAgICAgICAgY29uc3QgcmVzdWx0UHJpbnQgPSBmb3JtYXRWYWx1ZShyZXN1bHQpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdFByaW50fSB3YXNuJ3QgZXhwZWN0ZWQgYmUgJHtyZXN1bHRQcmludH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmVzdWx0IC0gUmVzdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0b0JlTGVzc1RoYW5PckVxdWFsKHJlc3VsdCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fb2JqZWN0ICE9PSBcIm51bWJlclwiIHx8IHR5cGVvZiByZXN1bHQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgbnVtYmVycyBidXQgZ290ICR7dHlwZW9mIHRoaXMuX29iamVjdH0gYW5kICR7dHlwZW9mIHJlc3VsdH1gKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ub3QpIHtcbiAgICAgIGlmICh0aGlzLl9vYmplY3QgPD0gcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IG9iamVjdFByaW50ID0gZm9ybWF0VmFsdWUodGhpcy5fb2JqZWN0KVxuICAgICAgICBjb25zdCByZXN1bHRQcmludCA9IGZvcm1hdFZhbHVlKHJlc3VsdClcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhcyB1bmV4cGVjdGVkIHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke3Jlc3VsdFByaW50fWApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9vYmplY3QgPiByZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG4gICAgICAgIGNvbnN0IHJlc3VsdFByaW50ID0gZm9ybWF0VmFsdWUocmVzdWx0KVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gd2Fzbid0IGV4cGVjdGVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAke3Jlc3VsdFByaW50fWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvQmVEZWZpbmVkKCkge1xuICAgIGlmICh0aGlzLl9ub3QpIHtcbiAgICAgIGlmICh0aGlzLl9vYmplY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhc27CtHQgZXhwZWN0ZWQgdG8gYmUgZGVmaW5lZGApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9vYmplY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhc24ndCBleHBlY3RlZCBiZSB1bmRlZmluZWRgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge25ldyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3dufSBrbGFzcyAtIENsYXNzIGNvbnN0cnVjdG9yIHRvIGNoZWNrIGFnYWluc3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvQmVJbnN0YW5jZU9mKGtsYXNzKSB7XG4gICAgaWYgKCEodGhpcy5fb2JqZWN0IGluc3RhbmNlb2Yga2xhc3MpKSB7XG4gICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke29iamVjdFByaW50fSB0byBiZSBhICR7a2xhc3MubmFtZX0gYnV0IGl0IHdhc24ndGApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvQmVGYWxzZSgpIHtcbiAgICB0aGlzLnRvQmUoZmFsc2UpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdG9CZU51bGwoKSB7XG4gICAgdGhpcy50b0JlKG51bGwpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdG9CZVVuZGVmaW5lZCgpIHtcbiAgICB0aGlzLnRvQmUodW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvQmVUcnVlKCkge1xuICAgIHRoaXMudG9CZSh0cnVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogUHJvbWlzZTxudW1iZXI+fSBjaGFuZ2VDYWxsYmFjayAtIENoYW5nZSBjYWxsYmFjay5cbiAgICogQHJldHVybnMge0V4cGVjdFRvQ2hhbmdlfSAtIFRoZSBjaGFuZ2UuXG4gICAqL1xuICB0b0NoYW5nZShjaGFuZ2VDYWxsYmFjaykge1xuICAgIGlmICh0aGlzLl9ub3QpIHRocm93IG5ldyBFcnJvcihcIm5vdCBzdHViXCIpXG5cbiAgICBjb25zdCBleHBlY3RUb0NoYW5nZSA9IG5ldyBFeHBlY3RUb0NoYW5nZSh7Y2hhbmdlQ2FsbGJhY2ssIGV4cGVjdDogdGhpc30pXG5cbiAgICB0aGlzLmV4cGVjdGF0aW9ucy5wdXNoKGV4cGVjdFRvQ2hhbmdlKVxuXG4gICAgcmV0dXJuIGV4cGVjdFRvQ2hhbmdlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlVG9Db250YWluIC0gVmFsdWUgdG8gY29udGFpbi5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdG9Db250YWluKHZhbHVlVG9Db250YWluKSB7XG4gICAgaWYgKHRoaXMuX25vdCkgdGhyb3cgbmV3IEVycm9yKFwibm90IHN0dWJcIilcblxuICAgIGlmICh0eXBlb2YgdGhpcy5fb2JqZWN0ID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmICghdGhpcy5fb2JqZWN0LmluY2x1ZGVzKFN0cmluZyh2YWx1ZVRvQ29udGFpbikpKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdFByaW50ID0gbWluaWZpZWRTdHJpbmdpZnkodGhpcy5fb2JqZWN0KVxuICAgICAgICBjb25zdCB2YWx1ZVByaW50ID0gdHlwZW9mIHZhbHVlVG9Db250YWluID09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IG1pbmlmaWVkU3RyaW5naWZ5KHZhbHVlVG9Db250YWluKVxuICAgICAgICAgIDogZm9ybWF0VmFsdWUodmFsdWVUb0NvbnRhaW4pXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdFByaW50fSBkb2Vzbid0IGNvbnRhaW4gJHt2YWx1ZVByaW50fWApXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fb2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhcnJheSBvciBzdHJpbmcgYnV0IGdvdCAke3R5cGVvZiB0aGlzLl9vYmplY3R9YClcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX29iamVjdC5pbmNsdWRlcyh2YWx1ZVRvQ29udGFpbikpIHtcbiAgICAgIGNvbnN0IG9iamVjdFByaW50ID0gZm9ybWF0VmFsdWUodGhpcy5fb2JqZWN0KVxuICAgICAgY29uc3QgdmFsdWVQcmludCA9IHR5cGVvZiB2YWx1ZVRvQ29udGFpbiA9PSBcInN0cmluZ1wiXG4gICAgICAgID8gbWluaWZpZWRTdHJpbmdpZnkodmFsdWVUb0NvbnRhaW4pXG4gICAgICAgIDogZm9ybWF0VmFsdWUodmFsdWVUb0NvbnRhaW4pXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gZG9lc24ndCBjb250YWluICR7dmFsdWVQcmludH1gKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gcmVzdWx0IC0gUmVzdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0b0VxdWFsKHJlc3VsdCkge1xuICAgIGlmICh0aGlzLl9ub3QpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fb2JqZWN0ID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlc3VsdCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmICghYW55dGhpbmdEaWZmZXJlbnQodGhpcy5fb2JqZWN0LCByZXN1bHQpKSB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG4gICAgICAgICAgY29uc3QgcmVzdWx0UHJpbnQgPSBmb3JtYXRWYWx1ZShyZXN1bHQpXG5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhcyB1bmV4cGVjdGVkIGVxdWFsIHRvICR7cmVzdWx0UHJpbnR9YClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX29iamVjdCA9PSByZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcbiAgICAgICAgICBjb25zdCByZXN1bHRQcmludCA9IGZvcm1hdFZhbHVlKHJlc3VsdClcblxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gd2FzIHVuZXhwZWN0ZWQgZXF1YWwgdG8gJHtyZXN1bHRQcmludH1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fb2JqZWN0ID09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlc3VsdCA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmIChhbnl0aGluZ0RpZmZlcmVudCh0aGlzLl9vYmplY3QsIHJlc3VsdCkpIHtcbiAgICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcbiAgICAgICAgICBjb25zdCByZXN1bHRQcmludCA9IGZvcm1hdFZhbHVlKHJlc3VsdClcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX29iamVjdCkgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxTdHJpbmdzID0gdGhpcy5fb2JqZWN0Lm1hcCgoaXRlbSkgPT4gbWluaWZpZWRTdHJpbmdpZnkoaXRlbSkpXG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFN0cmluZ3MgPSByZXN1bHQubWFwKChpdGVtKSA9PiBtaW5pZmllZFN0cmluZ2lmeShpdGVtKSlcblxuICAgICAgICAgICAgY29uc3QgbWlzc2luZ0l0ZW1zID0gZXhwZWN0ZWRTdHJpbmdzLmZpbHRlcigoaXRlbSkgPT4gIWFjdHVhbFN0cmluZ3MuaW5jbHVkZXMoaXRlbSkpXG4gICAgICAgICAgICBjb25zdCB1bmV4cGVjdGVkSXRlbXMgPSBhY3R1YWxTdHJpbmdzLmZpbHRlcigoaXRlbSkgPT4gIWV4cGVjdGVkU3RyaW5ncy5pbmNsdWRlcyhpdGVtKSlcblxuICAgICAgICAgICAgY29uc3QgZGlmZlBhcnRzID0gW11cblxuICAgICAgICAgICAgaWYgKG1pc3NpbmdJdGVtcy5sZW5ndGggPiAwKSBkaWZmUGFydHMucHVzaChgbWlzc2luZyAke21pc3NpbmdJdGVtcy5qb2luKFwiLCBcIil9YClcbiAgICAgICAgICAgIGlmICh1bmV4cGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgZGlmZlBhcnRzLnB1c2goYHVuZXhwZWN0ZWQgJHt1bmV4cGVjdGVkSXRlbXMuam9pbihcIiwgXCIpfWApXG5cbiAgICAgICAgICAgIGNvbnN0IGRpZmZNZXNzYWdlID0gZGlmZlBhcnRzLmxlbmd0aCA+IDAgPyBgIChkaWZmOiAke2RpZmZQYXJ0cy5qb2luKFwiOyBcIil9KWAgOiBcIlwiXG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gd2Fzbid0IGVxdWFsIHRvICR7cmVzdWx0UHJpbnR9JHtkaWZmTWVzc2FnZX1gKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gd2Fzbid0IGVxdWFsIHRvICR7cmVzdWx0UHJpbnR9YClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX29iamVjdCAhPSByZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcbiAgICAgICAgICBjb25zdCByZXN1bHRQcmludCA9IGZvcm1hdFZhbHVlKHJlc3VsdClcblxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gd2Fzbid0IGVxdWFsIHRvICR7cmVzdWx0UHJpbnR9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXggLSBSZWdleC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdG9NYXRjaChyZWdleCkge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fb2JqZWN0ICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN0cmluZyBidXQgZ290ICR7dHlwZW9mIHRoaXMuX29iamVjdH1gKVxuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gdGhpcy5fb2JqZWN0Lm1hdGNoKHJlZ2V4KVxuICAgIGNvbnN0IG9iamVjdFByaW50ID0gbWluaWZpZWRTdHJpbmdpZnkodGhpcy5fb2JqZWN0KVxuXG4gICAgaWYgKHRoaXMuX25vdCkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gc2hvdWxkbid0IG1hdGNoICR7cmVnZXh9YClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IGRpZG4ndCBtYXRjaCAke3JlZ2V4fWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEB0ZW1wbGF0ZSBUIGV4dGVuZHMgRXJyb3JcbiAgICogQHBhcmFtIHtzdHJpbmd8VH0gZXhwZWN0ZWRFcnJvciAtIEV4cGVjdGVkIGVycm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgdG9UaHJvd0Vycm9yKGV4cGVjdGVkRXJyb3IpIHtcbiAgICBpZiAodGhpcy5fbm90KSB0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3R1YlwiKVxuXG4gICAgbGV0IGZhaWxlZEVycm9yXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLl9vYmplY3QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGZ1bmN0aW9uIGJ1dCBnb3QgJHt0eXBlb2YgdGhpcy5fb2JqZWN0fWApXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuX29iamVjdCgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZhaWxlZEVycm9yID0gZXJyb3JcbiAgICB9XG5cbiAgICBpZiAoIWZhaWxlZEVycm9yKSB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCB0byBmYWlsIGJ1dCBkaWRuJ3RcIilcblxuICAgIGxldCBleHBlY3RlZEVycm9yTWVzc2FnZSwgZmFpbGVkRXJyb3JNZXNzYWdlXG5cbiAgICBpZiAodHlwZW9mIGZhaWxlZEVycm9yID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZhaWxlZEVycm9yTWVzc2FnZSA9IGZhaWxlZEVycm9yXG4gICAgfSBlbHNlIGlmIChmYWlsZWRFcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBmYWlsZWRFcnJvck1lc3NhZ2UgPSBmYWlsZWRFcnJvci5tZXNzYWdlXG4gICAgfSBlbHNlIHtcbiAgICAgIGZhaWxlZEVycm9yTWVzc2FnZSA9IFN0cmluZyhmYWlsZWRFcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkRXJyb3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2UgPSBleHBlY3RlZEVycm9yXG4gICAgfSBlbHNlIGlmIChleHBlY3RlZEVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlID0gZXhwZWN0ZWRFcnJvci5tZXNzYWdlXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlID0gU3RyaW5nKGV4cGVjdGVkRXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEVycm9yTWVzc2FnZSAhPSBleHBlY3RlZEVycm9yTWVzc2FnZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byBmYWlsIHdpdGggJyR7ZXhwZWN0ZWRFcnJvck1lc3NhZ2V9JyBidXQgZmFpbGVkIHdpdGggJyR7ZmFpbGVkRXJyb3JNZXNzYWdlfSdgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSAtIFJlc29sdmVzIHdpdGggdGhlIGV4ZWN1dGUuXG4gICAqL1xuICBhc3luYyBleGVjdXRlKCkge1xuICAgIGZvciAoY29uc3QgZXhwZWN0YXRpb24gb2YgdGhpcy5leHBlY3RhdGlvbnMpIHtcbiAgICAgIGF3YWl0IGV4cGVjdGF0aW9uLnJ1bkJlZm9yZSgpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl9vYmplY3QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBmdW5jdGlvbiBidXQgZ290ICR7dHlwZW9mIHRoaXMuX29iamVjdH1gKVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX29iamVjdCgpXG5cbiAgICBmb3IgKGNvbnN0IGV4cGVjdGF0aW9uIG9mIHRoaXMuZXhwZWN0YXRpb25zKSB7XG4gICAgICBhd2FpdCBleHBlY3RhdGlvbi5ydW5BZnRlcigpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBleHBlY3RhdGlvbiBvZiB0aGlzLmV4cGVjdGF0aW9ucykge1xuICAgICAgYXdhaXQgZXhwZWN0YXRpb24uZXhlY3V0ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gcmVzdWx0IC0gUmVzdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0b0hhdmVBdHRyaWJ1dGVzKHJlc3VsdCkge1xuICAgIGlmICh0aGlzLl9ub3QpIHRocm93IG5ldyBFcnJvcihcIm5vdCBzdHViXCIpXG5cbiAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIGFueVtdPn0gKi9cbiAgICBjb25zdCBkaWZmZXJlbmNlcyA9IHt9XG4gICAgY29uc3Qgb2JqZWN0QXNSZWNvcmQgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodGhpcy5fb2JqZWN0KVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmVzdWx0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJlc3VsdFtrZXldXG5cbiAgICAgIGlmICghKGtleSBpbiBvYmplY3RBc1JlY29yZCkpIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLl9vYmplY3QuY29uc3RydWN0b3IubmFtZX0gZG9lc24ndCByZXNwb25kIHRvICR7a2V5fWApXG5cbiAgICAgIGNvbnN0IG9iamVjdFZhbHVlID0gLyoqIEB0eXBlIHsoKSA9PiB1bmtub3dufSAqLyAob2JqZWN0QXNSZWNvcmRba2V5XSkoKVxuXG4gICAgICBpZiAodmFsdWUgIT0gb2JqZWN0VmFsdWUpIHtcbiAgICAgICAgZGlmZmVyZW5jZXNba2V5XSA9IFt2YWx1ZSwgb2JqZWN0VmFsdWVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGRpZmZlcmVuY2VzKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9iamVjdCBoYWQgZGlmZmVyZXQgdmFsdWVzOiAke21pbmlmaWVkU3RyaW5naWZ5KGRpZmZlcmVuY2VzKX1gKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiAtIERlc2NyaXB0aW9uLlxuICogQHBhcmFtIHtvYmplY3R8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gYXJnMSAtIEFyZzEuXG4gKiBAcGFyYW0ge3VuZGVmaW5lZHwoKCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPikpfSBbYXJnMl0gLSBBcmcyLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVzY3JpYmUoZGVzY3JpcHRpb24sIGFyZzEsIGFyZzIpIHtcbiAgbGV0IHRlc3RBcmdzLCB0ZXN0RnVuY3Rpb25cblxuICBpZiAodHlwZW9mIGFyZzIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGVzdEZ1bmN0aW9uID0gYXJnMlxuICAgIHRlc3RBcmdzID0gYXJnMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IGFyZzFcbiAgICB0ZXN0QXJncyA9IHt9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZGVzY3JpYmU6ICR7YXJnMX0sICR7YXJnMn1gKVxuICB9XG5cbiAgY29uc3QgY3VycmVudFRlc3QgPSBjdXJyZW50UGF0aFtjdXJyZW50UGF0aC5sZW5ndGggLSAxXVxuICBjb25zdCBuZXdUZXN0QXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRUZXN0LmFyZ3MsIHRlc3RBcmdzKVxuXG4gIGlmIChkZXNjcmlwdGlvbiBpbiBjdXJyZW50VGVzdC5zdWJzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgdGVzdCBkZXNjcmlwdGlvbjogJHtkZXNjcmlwdGlvbn1gKVxuICB9XG5cbiAgY29uc3QgbmV3VGVzdERhdGEgPSB7YWZ0ZXJFYWNoZXM6IFtdLCBhcmdzOiBuZXdUZXN0QXJncywgYmVmb3JlRWFjaGVzOiBbXSwgc3Viczoge30sIHRlc3RzOiB7fX1cblxuICBjdXJyZW50VGVzdC5zdWJzW2Rlc2NyaXB0aW9uXSA9IG5ld1Rlc3REYXRhXG4gIGN1cnJlbnRQYXRoLnB1c2gobmV3VGVzdERhdGEpXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0ZXN0RnVuY3Rpb24oKVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQYXRoLnBvcCgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gYXJnIC0gQXJnLlxuICogQHJldHVybnMge0V4cGVjdH0gLSBUaGUgZXhwZWN0LlxuICovXG5mdW5jdGlvbiBleHBlY3QoYXJnKSB7XG4gIHJldHVybiBuZXcgRXhwZWN0KGFyZylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gLSBEZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IGFyZzEgLSBBcmcxLlxuICogQHBhcmFtIHt1bmRlZmluZWR8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gW2FyZzJdIC0gQXJnMi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXQoZGVzY3JpcHRpb24sIGFyZzEsIGFyZzIpIHtcbiAgY29uc3QgY3VycmVudFRlc3QgPSBjdXJyZW50UGF0aFtjdXJyZW50UGF0aC5sZW5ndGggLSAxXVxuICBsZXQgdGVzdEFyZ3NcblxuICAvKiogQHR5cGUgeygpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pfSAqL1xuICBsZXQgdGVzdEZ1bmN0aW9uXG5cbiAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IGFyZzFcbiAgICB0ZXN0QXJncyA9IHt9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZzIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGVzdEZ1bmN0aW9uID0gYXJnMlxuICAgIHRlc3RBcmdzID0gYXJnMVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgZm9yIGl0OiAke2Rlc2NyaXB0aW9ufSwgJHthcmcxfWApXG4gIH1cblxuICBjb25zdCBuZXdUZXN0QXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRUZXN0LmFyZ3MsIHRlc3RBcmdzKVxuXG4gIGN1cnJlbnRUZXN0LnRlc3RzW2Rlc2NyaXB0aW9uXSA9IHthcmdzOiBuZXdUZXN0QXJncywgZnVuY3Rpb246IHRlc3RGdW5jdGlvbn1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gLSBEZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IGFyZzEgLSBBcmcxLlxuICogQHBhcmFtIHt1bmRlZmluZWR8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gW2FyZzJdIC0gQXJnMi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZml0KGRlc2NyaXB0aW9uLCBhcmcxLCBhcmcyKSB7XG4gIGxldCB0ZXN0QXJnc1xuXG4gIC8qKiBAdHlwZSB7KCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPil9ICovXG4gIGxldCB0ZXN0RnVuY3Rpb25cblxuICBpZiAodHlwZW9mIGFyZzEgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGVzdEZ1bmN0aW9uID0gYXJnMVxuICAgIHRlc3RBcmdzID0ge2ZvY3VzOiB0cnVlfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IGFyZzJcbiAgICB0ZXN0QXJncyA9IE9iamVjdC5hc3NpZ24oe2ZvY3VzOiB0cnVlfSwgYXJnMSlcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIGZvciBpdDogJHtkZXNjcmlwdGlvbn0sICR7YXJnMX1gKVxuICB9XG5cbiAgcmV0dXJuIGl0KGRlc2NyaXB0aW9uLCB0ZXN0QXJncywgdGVzdEZ1bmN0aW9uKVxufVxuXG4vLyBNYWtlIHRoZSBtZXRob2RzIGdsb2JhbCBzbyB0aGV5IGNhbiBiZSB1c2VkIGluIHRlc3QgZmlsZXNcbmdsb2JhbFRoaXMuYWZ0ZXJFYWNoID0gYWZ0ZXJFYWNoXG5nbG9iYWxUaGlzLmJlZm9yZUVhY2ggPSBiZWZvcmVFYWNoXG5nbG9iYWxUaGlzLmRlc2NyaWJlID0gZGVzY3JpYmVcbmdsb2JhbFRoaXMuZXhwZWN0ID0gZXhwZWN0XG5nbG9iYWxUaGlzLml0ID0gaXRcbmdsb2JhbFRoaXMuZml0ID0gZml0XG5cbmV4cG9ydCB7YWZ0ZXJFYWNoLCBiZWZvcmVFYWNoLCBkZXNjcmliZSwgZXhwZWN0LCBmaXQsIGl0LCB0ZXN0c31cbiJdfQ==
|
|
496
|
+
globalThis.testEvents = testEvents;
|
|
497
|
+
export { afterEach, beforeEach, describe, expect, fit, it, testEvents, tests };
|
|
498
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3Rlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQTtBQUN2RSxPQUFPLFlBQVksTUFBTSwyQkFBMkIsQ0FBQTtBQUNwRCxPQUFPLGFBQWEsTUFBTSw2QkFBNkIsQ0FBQTtBQUV2RCx1REFBdUQ7QUFDdkQsTUFBTSxLQUFLLEdBQUc7SUFDWiw2RUFBNkU7SUFDN0UsV0FBVyxFQUFFLEVBQUU7SUFDZixJQUFJLEVBQUUsRUFBRTtJQUVSLDZFQUE2RTtJQUM3RSxZQUFZLEVBQUUsRUFBRTtJQUNoQixJQUFJLEVBQUUsRUFBRTtJQUNSLEtBQUssRUFBRSxFQUFFO0NBQ1YsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7QUFFckMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUV6Qjs7O0dBR0c7QUFDSCxTQUFTLFVBQVUsQ0FBQyxRQUFRO0lBQzFCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBRXZELFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQTtBQUMzQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxTQUFTLENBQUMsUUFBUTtJQUN6QixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUV2RCxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUE7QUFDMUMsQ0FBQztBQUVELE1BQU0s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QUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtmb3JtYXRWYWx1ZSwgbWluaWZpZWRTdHJpbmdpZnl9IGZyb20gXCIuL2Zvcm1hdC12YWx1ZS5qc1wiXG5pbXBvcnQge2FueXRoaW5nRGlmZmVyZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvZGlmZi11dGlscy5qc1wiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCByZXN0QXJnc0Vycm9yIGZyb20gXCIuLi91dGlscy9yZXN0LWFyZ3MtZXJyb3IuanNcIlxuXG4vKiogQHR5cGUge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuVGVzdHNBcmd1bWVudH0gKi9cbmNvbnN0IHRlc3RzID0ge1xuICAvKiogQHR5cGUge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQWZ0ZXJCZWZvcmVFYWNoQ2FsbGJhY2tPYmplY3RUeXBlW119ICovXG4gIGFmdGVyRWFjaGVzOiBbXSxcbiAgYXJnczoge30sXG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVtdfSAqL1xuICBiZWZvcmVFYWNoZXM6IFtdLFxuICBzdWJzOiB7fSxcbiAgdGVzdHM6IHt9XG59XG5cbmNvbnN0IHRlc3RFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxubGV0IGN1cnJlbnRQYXRoID0gW3Rlc3RzXVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5BZnRlckJlZm9yZUVhY2hDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJlZm9yZUVhY2goY2FsbGJhY2spIHtcbiAgY29uc3QgY3VycmVudFRlc3QgPSBjdXJyZW50UGF0aFtjdXJyZW50UGF0aC5sZW5ndGggLSAxXVxuXG4gIGN1cnJlbnRUZXN0LmJlZm9yZUVhY2hlcy5wdXNoKHtjYWxsYmFja30pXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYWZ0ZXJFYWNoKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGN1cnJlbnRUZXN0ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMV1cblxuICBjdXJyZW50VGVzdC5hZnRlckVhY2hlcy5wdXNoKHtjYWxsYmFja30pXG59XG5cbmNsYXNzIEJhc2VFeHBlY3Qge1xuICAvKipcbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBydW5CZWZvcmUoKSB7IC8qIGRvIG5vdGhpbmcgKi8gfVxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHJ1bkFmdGVyKCkgeyAvKiBkbyBub3RoaW5nICovIH1cbn1cblxuY2xhc3MgRXhwZWN0VG9DaGFuZ2UgZXh0ZW5kcyBCYXNlRXhwZWN0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogUHJvbWlzZTxudW1iZXI+fSBhcmdzLmNoYW5nZUNhbGxiYWNrIC0gQ2hhbmdlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge0V4cGVjdH0gYXJncy5leHBlY3QgLSBFeHBlY3QuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y2hhbmdlQ2FsbGJhY2ssIGV4cGVjdCwgLi4ucmVzdEFyZ3N9KSB7XG4gICAgc3VwZXIoKVxuICAgIHJlc3RBcmdzRXJyb3IocmVzdEFyZ3MpXG5cbiAgICB0aGlzLmV4cGVjdCA9IGV4cGVjdFxuICAgIHRoaXMuY2hhbmdlQ2FsbGJhY2sgPSBjaGFuZ2VDYWxsYmFja1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAtIENvdW50IHZhbHVlLlxuICAgKiBAcmV0dXJucyB7RXhwZWN0fSAtIFRoZSBieS5cbiAgICovXG4gIGJ5KGNvdW50KSB7XG4gICAgdGhpcy5jb3VudCA9IGNvdW50XG5cbiAgICByZXR1cm4gdGhpcy5leHBlY3RcbiAgfVxuXG4gIGFzeW5jIHJ1bkJlZm9yZSgpIHtcbiAgICB0aGlzLm9sZENvdW50ID0gYXdhaXQgdGhpcy5jaGFuZ2VDYWxsYmFjaygpXG4gIH1cblxuICBhc3luYyBydW5BZnRlcigpIHtcbiAgICB0aGlzLm5ld0NvdW50ID0gYXdhaXQgdGhpcy5jaGFuZ2VDYWxsYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgaWYgKHRoaXMubmV3Q291bnQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm9sZENvdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkV4cGVjdFRvQ2hhbmdlIG5vdCBleGVjdXRlZCBwcm9wZXJseVwiKVxuICAgIH1cblxuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB0aGlzLm5ld0NvdW50IC0gdGhpcy5vbGRDb3VudFxuXG4gICAgaWYgKGRpZmZlcmVuY2UgIT0gdGhpcy5jb3VudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCB0byBjaGFuZ2UgYnkgJHt0aGlzLmNvdW50fSBidXQgY2hhbmdlZCBieSAke2RpZmZlcmVuY2V9YClcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgRXhwZWN0IGV4dGVuZHMgQmFzZUV4cGVjdCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gb2JqZWN0IC0gT2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Iob2JqZWN0KSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX29iamVjdCA9IG9iamVjdFxuXG4gICAgLyoqIEB0eXBlIHtBcnJheTxFeHBlY3QgfCBFeHBlY3RUb0NoYW5nZT59ICovXG4gICAgdGhpcy5leHBlY3RhdGlvbnMgPSBbXVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogUHJvbWlzZTxudW1iZXI+fSBjaGFuZ2VDYWxsYmFjayAtIENoYW5nZSBjYWxsYmFjay5cbiAgICogQHJldHVybnMge0V4cGVjdFRvQ2hhbmdlfSAtIFRoZSBhbmQgY2hhbmdlLlxuICAgKi9cbiAgYW5kQ2hhbmdlKGNoYW5nZUNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMudG9DaGFuZ2UoY2hhbmdlQ2FsbGJhY2spXG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3RoaXN9IC0gQSB2YWx1ZS5cbiAgICovXG4gIGdldCBub3QoKSB7XG4gICAgdGhpcy5fbm90ID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gcmVzdWx0IC0gUmVzdWx0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0b0JlKHJlc3VsdCkge1xuICAgIGlmICh0aGlzLl9ub3QpIHtcbiAgICAgIGlmICh0aGlzLl9vYmplY3QgPT09IHJlc3VsdCkge1xuICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcbiAgICAgICAgY29uc3QgcmVzdWx0UHJpbnQgPSBmb3JtYXRWYWx1ZShyZXN1bHQpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdFByaW50fSB3YXMgdW5leHBlY3RlZCBub3QgdG8gYmUgJHtyZXN1bHRQcmludH1gKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fb2JqZWN0ICE9PSByZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG4gICAgICAgIGNvbnN0IHJlc3VsdFByaW50ID0gZm9ybWF0VmFsdWUocmVzdWx0KVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gd2Fzbid0IGV4cGVjdGVkIGJlICR7cmVzdWx0UHJpbnR9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlc3VsdCAtIFJlc3VsdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdG9CZUxlc3NUaGFuT3JFcXVhbChyZXN1bHQpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX29iamVjdCAhPT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIG51bWJlcnMgYnV0IGdvdCAke3R5cGVvZiB0aGlzLl9vYmplY3R9IGFuZCAke3R5cGVvZiByZXN1bHR9YClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbm90KSB7XG4gICAgICBpZiAodGhpcy5fb2JqZWN0IDw9IHJlc3VsdCkge1xuICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcbiAgICAgICAgY29uc3QgcmVzdWx0UHJpbnQgPSBmb3JtYXRWYWx1ZShyZXN1bHQpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdFByaW50fSB3YXMgdW5leHBlY3RlZCB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHtyZXN1bHRQcmludH1gKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fb2JqZWN0ID4gcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IG9iamVjdFByaW50ID0gZm9ybWF0VmFsdWUodGhpcy5fb2JqZWN0KVxuICAgICAgICBjb25zdCByZXN1bHRQcmludCA9IGZvcm1hdFZhbHVlKHJlc3VsdClcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhc24ndCBleHBlY3RlZCB0byBiZSBncmVhdGVyIHRoYW4gJHtyZXN1bHRQcmludH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0b0JlRGVmaW5lZCgpIHtcbiAgICBpZiAodGhpcy5fbm90KSB7XG4gICAgICBpZiAodGhpcy5fb2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdFByaW50fSB3YXNuwrR0IGV4cGVjdGVkIHRvIGJlIGRlZmluZWRgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdFByaW50fSB3YXNuJ3QgZXhwZWN0ZWQgYmUgdW5kZWZpbmVkYClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtuZXcgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bn0ga2xhc3MgLSBDbGFzcyBjb25zdHJ1Y3RvciB0byBjaGVjayBhZ2FpbnN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0b0JlSW5zdGFuY2VPZihrbGFzcykge1xuICAgIGlmICghKHRoaXMuX29iamVjdCBpbnN0YW5jZW9mIGtsYXNzKSkge1xuICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtvYmplY3RQcmludH0gdG8gYmUgYSAke2tsYXNzLm5hbWV9IGJ1dCBpdCB3YXNuJ3RgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0b0JlRmFsc2UoKSB7XG4gICAgdGhpcy50b0JlKGZhbHNlKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvQmVOdWxsKCkge1xuICAgIHRoaXMudG9CZShudWxsKVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvQmVVbmRlZmluZWQoKSB7XG4gICAgdGhpcy50b0JlKHVuZGVmaW5lZClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB0b0JlVHJ1ZSgpIHtcbiAgICB0aGlzLnRvQmUodHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKCk6IFByb21pc2U8bnVtYmVyPn0gY2hhbmdlQ2FsbGJhY2sgLSBDaGFuZ2UgY2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtFeHBlY3RUb0NoYW5nZX0gLSBUaGUgY2hhbmdlLlxuICAgKi9cbiAgdG9DaGFuZ2UoY2hhbmdlQ2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5fbm90KSB0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3R1YlwiKVxuXG4gICAgY29uc3QgZXhwZWN0VG9DaGFuZ2UgPSBuZXcgRXhwZWN0VG9DaGFuZ2Uoe2NoYW5nZUNhbGxiYWNrLCBleHBlY3Q6IHRoaXN9KVxuXG4gICAgdGhpcy5leHBlY3RhdGlvbnMucHVzaChleHBlY3RUb0NoYW5nZSlcblxuICAgIHJldHVybiBleHBlY3RUb0NoYW5nZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVRvQ29udGFpbiAtIFZhbHVlIHRvIGNvbnRhaW4uXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvQ29udGFpbih2YWx1ZVRvQ29udGFpbikge1xuICAgIGlmICh0aGlzLl9ub3QpIHRocm93IG5ldyBFcnJvcihcIm5vdCBzdHViXCIpXG5cbiAgICBpZiAodHlwZW9mIHRoaXMuX29iamVjdCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAoIXRoaXMuX29iamVjdC5pbmNsdWRlcyhTdHJpbmcodmFsdWVUb0NvbnRhaW4pKSkge1xuICAgICAgICBjb25zdCBvYmplY3RQcmludCA9IG1pbmlmaWVkU3RyaW5naWZ5KHRoaXMuX29iamVjdClcbiAgICAgICAgY29uc3QgdmFsdWVQcmludCA9IHR5cGVvZiB2YWx1ZVRvQ29udGFpbiA9PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBtaW5pZmllZFN0cmluZ2lmeSh2YWx1ZVRvQ29udGFpbilcbiAgICAgICAgICA6IGZvcm1hdFZhbHVlKHZhbHVlVG9Db250YWluKVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvYmplY3RQcmludH0gZG9lc24ndCBjb250YWluICR7dmFsdWVQcmludH1gKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuX29iamVjdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXJyYXkgb3Igc3RyaW5nIGJ1dCBnb3QgJHt0eXBlb2YgdGhpcy5fb2JqZWN0fWApXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9vYmplY3QuaW5jbHVkZXModmFsdWVUb0NvbnRhaW4pKSB7XG4gICAgICBjb25zdCBvYmplY3RQcmludCA9IGZvcm1hdFZhbHVlKHRoaXMuX29iamVjdClcbiAgICAgIGNvbnN0IHZhbHVlUHJpbnQgPSB0eXBlb2YgdmFsdWVUb0NvbnRhaW4gPT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG1pbmlmaWVkU3RyaW5naWZ5KHZhbHVlVG9Db250YWluKVxuICAgICAgICA6IGZvcm1hdFZhbHVlKHZhbHVlVG9Db250YWluKVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IGRvZXNuJ3QgY29udGFpbiAke3ZhbHVlUHJpbnR9YClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHJlc3VsdCAtIFJlc3VsdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdG9FcXVhbChyZXN1bHQpIHtcbiAgICBpZiAodGhpcy5fbm90KSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuX29iamVjdCA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZXN1bHQgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoIWFueXRoaW5nRGlmZmVyZW50KHRoaXMuX29iamVjdCwgcmVzdWx0KSkge1xuICAgICAgICAgIGNvbnN0IG9iamVjdFByaW50ID0gZm9ybWF0VmFsdWUodGhpcy5fb2JqZWN0KVxuICAgICAgICAgIGNvbnN0IHJlc3VsdFByaW50ID0gZm9ybWF0VmFsdWUocmVzdWx0KVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdFByaW50fSB3YXMgdW5leHBlY3RlZCBlcXVhbCB0byAke3Jlc3VsdFByaW50fWApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9vYmplY3QgPT0gcmVzdWx0KSB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG4gICAgICAgICAgY29uc3QgcmVzdWx0UHJpbnQgPSBmb3JtYXRWYWx1ZShyZXN1bHQpXG5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhcyB1bmV4cGVjdGVkIGVxdWFsIHRvICR7cmVzdWx0UHJpbnR9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuX29iamVjdCA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZXN1bHQgPT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoYW55dGhpbmdEaWZmZXJlbnQodGhpcy5fb2JqZWN0LCByZXN1bHQpKSB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG4gICAgICAgICAgY29uc3QgcmVzdWx0UHJpbnQgPSBmb3JtYXRWYWx1ZShyZXN1bHQpXG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9vYmplY3QpICYmIEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgY29uc3QgYWN0dWFsU3RyaW5ncyA9IHRoaXMuX29iamVjdC5tYXAoKGl0ZW0pID0+IG1pbmlmaWVkU3RyaW5naWZ5KGl0ZW0pKVxuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRTdHJpbmdzID0gcmVzdWx0Lm1hcCgoaXRlbSkgPT4gbWluaWZpZWRTdHJpbmdpZnkoaXRlbSkpXG5cbiAgICAgICAgICAgIGNvbnN0IG1pc3NpbmdJdGVtcyA9IGV4cGVjdGVkU3RyaW5ncy5maWx0ZXIoKGl0ZW0pID0+ICFhY3R1YWxTdHJpbmdzLmluY2x1ZGVzKGl0ZW0pKVxuICAgICAgICAgICAgY29uc3QgdW5leHBlY3RlZEl0ZW1zID0gYWN0dWFsU3RyaW5ncy5maWx0ZXIoKGl0ZW0pID0+ICFleHBlY3RlZFN0cmluZ3MuaW5jbHVkZXMoaXRlbSkpXG5cbiAgICAgICAgICAgIGNvbnN0IGRpZmZQYXJ0cyA9IFtdXG5cbiAgICAgICAgICAgIGlmIChtaXNzaW5nSXRlbXMubGVuZ3RoID4gMCkgZGlmZlBhcnRzLnB1c2goYG1pc3NpbmcgJHttaXNzaW5nSXRlbXMuam9pbihcIiwgXCIpfWApXG4gICAgICAgICAgICBpZiAodW5leHBlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIGRpZmZQYXJ0cy5wdXNoKGB1bmV4cGVjdGVkICR7dW5leHBlY3RlZEl0ZW1zLmpvaW4oXCIsIFwiKX1gKVxuXG4gICAgICAgICAgICBjb25zdCBkaWZmTWVzc2FnZSA9IGRpZmZQYXJ0cy5sZW5ndGggPiAwID8gYCAoZGlmZjogJHtkaWZmUGFydHMuam9pbihcIjsgXCIpfSlgIDogXCJcIlxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhc24ndCBlcXVhbCB0byAke3Jlc3VsdFByaW50fSR7ZGlmZk1lc3NhZ2V9YClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhc24ndCBlcXVhbCB0byAke3Jlc3VsdFByaW50fWApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9vYmplY3QgIT0gcmVzdWx0KSB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0UHJpbnQgPSBmb3JtYXRWYWx1ZSh0aGlzLl9vYmplY3QpXG4gICAgICAgICAgY29uc3QgcmVzdWx0UHJpbnQgPSBmb3JtYXRWYWx1ZShyZXN1bHQpXG5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHdhc24ndCBlcXVhbCB0byAke3Jlc3VsdFByaW50fWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtSZWdFeHB9IHJlZ2V4IC0gUmVnZXguXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHRvTWF0Y2gocmVnZXgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX29iamVjdCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBzdHJpbmcgYnV0IGdvdCAke3R5cGVvZiB0aGlzLl9vYmplY3R9YClcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IHRoaXMuX29iamVjdC5tYXRjaChyZWdleClcbiAgICBjb25zdCBvYmplY3RQcmludCA9IG1pbmlmaWVkU3RyaW5naWZ5KHRoaXMuX29iamVjdClcblxuICAgIGlmICh0aGlzLl9ub3QpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7b2JqZWN0UHJpbnR9IHNob3VsZG4ndCBtYXRjaCAke3JlZ2V4fWApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29iamVjdFByaW50fSBkaWRuJ3QgbWF0Y2ggJHtyZWdleH1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAdGVtcGxhdGUgVCBleHRlbmRzIEVycm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfFR9IGV4cGVjdGVkRXJyb3IgLSBFeHBlY3RlZCBlcnJvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHRvVGhyb3dFcnJvcihleHBlY3RlZEVycm9yKSB7XG4gICAgaWYgKHRoaXMuX25vdCkgdGhyb3cgbmV3IEVycm9yKFwibm90IHN0dWJcIilcblxuICAgIGxldCBmYWlsZWRFcnJvclxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fb2JqZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBmdW5jdGlvbiBidXQgZ290ICR7dHlwZW9mIHRoaXMuX29iamVjdH1gKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLl9vYmplY3QoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBmYWlsZWRFcnJvciA9IGVycm9yXG4gICAgfVxuXG4gICAgaWYgKCFmYWlsZWRFcnJvcikgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgdG8gZmFpbCBidXQgZGlkbid0XCIpXG5cbiAgICBsZXQgZXhwZWN0ZWRFcnJvck1lc3NhZ2UsIGZhaWxlZEVycm9yTWVzc2FnZVxuXG4gICAgaWYgKHR5cGVvZiBmYWlsZWRFcnJvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICBmYWlsZWRFcnJvck1lc3NhZ2UgPSBmYWlsZWRFcnJvclxuICAgIH0gZWxzZSBpZiAoZmFpbGVkRXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgZmFpbGVkRXJyb3JNZXNzYWdlID0gZmFpbGVkRXJyb3IubWVzc2FnZVxuICAgIH0gZWxzZSB7XG4gICAgICBmYWlsZWRFcnJvck1lc3NhZ2UgPSBTdHJpbmcoZmFpbGVkRXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBleHBlY3RlZEVycm9yID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlID0gZXhwZWN0ZWRFcnJvclxuICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRFcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBleHBlY3RlZEVycm9yTWVzc2FnZSA9IGV4cGVjdGVkRXJyb3IubWVzc2FnZVxuICAgIH0gZWxzZSB7XG4gICAgICBleHBlY3RlZEVycm9yTWVzc2FnZSA9IFN0cmluZyhleHBlY3RlZEVycm9yKVxuICAgIH1cblxuICAgIGlmIChmYWlsZWRFcnJvck1lc3NhZ2UgIT0gZXhwZWN0ZWRFcnJvck1lc3NhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgdG8gZmFpbCB3aXRoICcke2V4cGVjdGVkRXJyb3JNZXNzYWdlfScgYnV0IGZhaWxlZCB3aXRoICcke2ZhaWxlZEVycm9yTWVzc2FnZX0nYClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge1Byb21pc2U8YW55Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBleGVjdXRlLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBmb3IgKGNvbnN0IGV4cGVjdGF0aW9uIG9mIHRoaXMuZXhwZWN0YXRpb25zKSB7XG4gICAgICBhd2FpdCBleHBlY3RhdGlvbi5ydW5CZWZvcmUoKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5fb2JqZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZnVuY3Rpb24gYnV0IGdvdCAke3R5cGVvZiB0aGlzLl9vYmplY3R9YClcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9vYmplY3QoKVxuXG4gICAgZm9yIChjb25zdCBleHBlY3RhdGlvbiBvZiB0aGlzLmV4cGVjdGF0aW9ucykge1xuICAgICAgYXdhaXQgZXhwZWN0YXRpb24ucnVuQWZ0ZXIoKVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZXhwZWN0YXRpb24gb2YgdGhpcy5leHBlY3RhdGlvbnMpIHtcbiAgICAgIGF3YWl0IGV4cGVjdGF0aW9uLmV4ZWN1dGUoKVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHJlc3VsdCAtIFJlc3VsdC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgdG9IYXZlQXR0cmlidXRlcyhyZXN1bHQpIHtcbiAgICBpZiAodGhpcy5fbm90KSB0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3R1YlwiKVxuXG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnlbXT59ICovXG4gICAgY29uc3QgZGlmZmVyZW5jZXMgPSB7fVxuICAgIGNvbnN0IG9iamVjdEFzUmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHRoaXMuX29iamVjdClcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHJlc3VsdCkge1xuICAgICAgY29uc3QgdmFsdWUgPSByZXN1bHRba2V5XVxuXG4gICAgICBpZiAoIShrZXkgaW4gb2JqZWN0QXNSZWNvcmQpKSB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5fb2JqZWN0LmNvbnN0cnVjdG9yLm5hbWV9IGRvZXNuJ3QgcmVzcG9uZCB0byAke2tleX1gKVxuXG4gICAgICBjb25zdCBvYmplY3RWYWx1ZSA9IC8qKiBAdHlwZSB7KCkgPT4gdW5rbm93bn0gKi8gKG9iamVjdEFzUmVjb3JkW2tleV0pKClcblxuICAgICAgaWYgKHZhbHVlICE9IG9iamVjdFZhbHVlKSB7XG4gICAgICAgIGRpZmZlcmVuY2VzW2tleV0gPSBbdmFsdWUsIG9iamVjdFZhbHVlXVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhkaWZmZXJlbmNlcykubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPYmplY3QgaGFkIGRpZmZlcmV0IHZhbHVlczogJHttaW5pZmllZFN0cmluZ2lmeShkaWZmZXJlbmNlcyl9YClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gLSBEZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IGFyZzEgLSBBcmcxLlxuICogQHBhcmFtIHt1bmRlZmluZWR8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gW2FyZzJdIC0gQXJnMi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlc2NyaWJlKGRlc2NyaXB0aW9uLCBhcmcxLCBhcmcyKSB7XG4gIGxldCB0ZXN0QXJncywgdGVzdEZ1bmN0aW9uXG5cbiAgaWYgKHR5cGVvZiBhcmcyID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IGFyZzJcbiAgICB0ZXN0QXJncyA9IGFyZzFcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0ZXN0RnVuY3Rpb24gPSBhcmcxXG4gICAgdGVzdEFyZ3MgPSB7fVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgZm9yIGRlc2NyaWJlOiAke2FyZzF9LCAke2FyZzJ9YClcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRUZXN0ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMV1cbiAgY29uc3QgbmV3VGVzdEFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50VGVzdC5hcmdzLCB0ZXN0QXJncylcblxuICBpZiAoZGVzY3JpcHRpb24gaW4gY3VycmVudFRlc3Quc3Vicykge1xuICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHRlc3QgZGVzY3JpcHRpb246ICR7ZGVzY3JpcHRpb259YClcbiAgfVxuXG4gIGNvbnN0IG5ld1Rlc3REYXRhID0ge2FmdGVyRWFjaGVzOiBbXSwgYXJnczogbmV3VGVzdEFyZ3MsIGJlZm9yZUVhY2hlczogW10sIHN1YnM6IHt9LCB0ZXN0czoge319XG5cbiAgY3VycmVudFRlc3Quc3Vic1tkZXNjcmlwdGlvbl0gPSBuZXdUZXN0RGF0YVxuICBjdXJyZW50UGF0aC5wdXNoKG5ld1Rlc3REYXRhKVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgdGVzdEZ1bmN0aW9uKClcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UGF0aC5wb3AoKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IGFyZyAtIEFyZy5cbiAqIEByZXR1cm5zIHtFeHBlY3R9IC0gVGhlIGV4cGVjdC5cbiAqL1xuZnVuY3Rpb24gZXhwZWN0KGFyZykge1xuICByZXR1cm4gbmV3IEV4cGVjdChhcmcpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIC0gRGVzY3JpcHRpb24uXG4gKiBAcGFyYW0ge29iamVjdHwoKCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPikpfSBhcmcxIC0gQXJnMS5cbiAqIEBwYXJhbSB7dW5kZWZpbmVkfCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IFthcmcyXSAtIEFyZzIuXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGl0KGRlc2NyaXB0aW9uLCBhcmcxLCBhcmcyKSB7XG4gIGNvbnN0IGN1cnJlbnRUZXN0ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMV1cbiAgbGV0IHRlc3RBcmdzXG5cbiAgLyoqIEB0eXBlIHsoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gKi9cbiAgbGV0IHRlc3RGdW5jdGlvblxuXG4gIGlmICh0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0ZXN0RnVuY3Rpb24gPSBhcmcxXG4gICAgdGVzdEFyZ3MgPSB7fVxuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IGFyZzJcbiAgICB0ZXN0QXJncyA9IGFyZzFcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIGZvciBpdDogJHtkZXNjcmlwdGlvbn0sICR7YXJnMX1gKVxuICB9XG5cbiAgY29uc3QgbmV3VGVzdEFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50VGVzdC5hcmdzLCB0ZXN0QXJncylcblxuICBjdXJyZW50VGVzdC50ZXN0c1tkZXNjcmlwdGlvbl0gPSB7YXJnczogbmV3VGVzdEFyZ3MsIGZ1bmN0aW9uOiB0ZXN0RnVuY3Rpb259XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIC0gRGVzY3JpcHRpb24uXG4gKiBAcGFyYW0ge29iamVjdHwoKCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPikpfSBhcmcxIC0gQXJnMS5cbiAqIEBwYXJhbSB7dW5kZWZpbmVkfCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IFthcmcyXSAtIEFyZzIuXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGZpdChkZXNjcmlwdGlvbiwgYXJnMSwgYXJnMikge1xuICBsZXQgdGVzdEFyZ3NcblxuICAvKiogQHR5cGUgeygpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pfSAqL1xuICBsZXQgdGVzdEZ1bmN0aW9uXG5cbiAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IGFyZzFcbiAgICB0ZXN0QXJncyA9IHtmb2N1czogdHJ1ZX1cbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0ZXN0RnVuY3Rpb24gPSBhcmcyXG4gICAgdGVzdEFyZ3MgPSBPYmplY3QuYXNzaWduKHtmb2N1czogdHJ1ZX0sIGFyZzEpXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgaXQ6ICR7ZGVzY3JpcHRpb259LCAke2FyZzF9YClcbiAgfVxuXG4gIHJldHVybiBpdChkZXNjcmlwdGlvbiwgdGVzdEFyZ3MsIHRlc3RGdW5jdGlvbilcbn1cblxuLy8gTWFrZSB0aGUgbWV0aG9kcyBnbG9iYWwgc28gdGhleSBjYW4gYmUgdXNlZCBpbiB0ZXN0IGZpbGVzXG5nbG9iYWxUaGlzLmFmdGVyRWFjaCA9IGFmdGVyRWFjaFxuZ2xvYmFsVGhpcy5iZWZvcmVFYWNoID0gYmVmb3JlRWFjaFxuZ2xvYmFsVGhpcy5kZXNjcmliZSA9IGRlc2NyaWJlXG5nbG9iYWxUaGlzLmV4cGVjdCA9IGV4cGVjdFxuZ2xvYmFsVGhpcy5pdCA9IGl0XG5nbG9iYWxUaGlzLmZpdCA9IGZpdFxuZ2xvYmFsVGhpcy50ZXN0RXZlbnRzID0gdGVzdEV2ZW50c1xuXG5leHBvcnQge2FmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgZml0LCBpdCwgdGVzdEV2ZW50cywgdGVzdHN9XG4iXX0=
|