@cdktn/provider-generator 0.25.0-pre.61 → 0.25.0-pre.64
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/get/__tests__/generator/module-docs-registry.test.d.ts +2 -0
- package/build/get/__tests__/generator/module-docs-registry.test.js +91 -0
- package/build/get/__tests__/registry-class-invalidation.test.d.ts +2 -0
- package/build/get/__tests__/registry-class-invalidation.test.js +120 -0
- package/build/get/__tests__/target-versions.test.js +29 -1
- package/build/get/constructs-maker.js +19 -2
- package/build/get/generator/module-generator.d.ts +3 -2
- package/build/get/generator/module-generator.js +15 -17
- package/package.json +4 -4
- package/src/get/__tests__/generator/module-docs-registry.test.ts +89 -0
- package/src/get/__tests__/registry-class-invalidation.test.ts +123 -0
- package/src/get/__tests__/target-versions.test.ts +43 -0
- package/src/get/constructs-maker.ts +43 -7
- package/src/get/generator/module-generator.ts +20 -18
|
@@ -257,6 +257,15 @@ class ConstructsMaker {
|
|
|
257
257
|
commons_2.logger.info(`The CDKTN version has changed, generating all constraints. The previous version was ${previousConstraints.cdktf}, the current version is ${commons_3.DISPLAY_VERSION}`);
|
|
258
258
|
return constraints;
|
|
259
259
|
}
|
|
260
|
+
// Generated docs links, and the prose naming the registry around them, follow
|
|
261
|
+
// the project's declared targets, so output from the other registry class is
|
|
262
|
+
// stale even when every provider version still matches.
|
|
263
|
+
const previousRegistry = (0, commons_3.registryForTargetVersions)(previousConstraints.targetVersions);
|
|
264
|
+
const currentRegistry = (0, commons_3.registryForTargetVersions)(this.options.targetVersions);
|
|
265
|
+
if (previousRegistry.hostname !== currentRegistry.hostname) {
|
|
266
|
+
commons_2.logger.info(`The target registry has changed from ${previousRegistry.displayName} to ${currentRegistry.displayName}, generating all constraints.`);
|
|
267
|
+
return constraints;
|
|
268
|
+
}
|
|
260
269
|
const constraintsToGenerate = constraints.filter((constraint) => {
|
|
261
270
|
const constraintMatches = previousConstraints.providers[constraint.fqn] === constraint.version;
|
|
262
271
|
let providerFolderExists = false;
|
|
@@ -282,7 +291,7 @@ class ConstructsMaker {
|
|
|
282
291
|
async generateTypescriptModule(target, schema) {
|
|
283
292
|
const endTSTimer = (0, commons_2.logTimespan)(`Generate Typescript for ${target.name}`);
|
|
284
293
|
target.spec = schema;
|
|
285
|
-
new module_generator_1.ModuleGenerator(this.code, [target]);
|
|
294
|
+
new module_generator_1.ModuleGenerator(this.code, [target], this.options.targetVersions);
|
|
286
295
|
endTSTimer();
|
|
287
296
|
}
|
|
288
297
|
async generateTypescript(target, schemas) {
|
|
@@ -317,7 +326,15 @@ class ConstructsMaker {
|
|
|
317
326
|
// ignore
|
|
318
327
|
commons_2.logger.debug(`Could not read versions file, this is expected if there are no pre-existing local providers: ${e}`);
|
|
319
328
|
}
|
|
329
|
+
// Keys are fully qualified and the host is whichever registry the fetching CLI
|
|
330
|
+
// resolved from, so a provider regenerated this run can arrive under a different
|
|
331
|
+
// host than the file already holds. Carrying the old key forward as well would
|
|
332
|
+
// leave two entries for one provider, and the stale one sorts first.
|
|
333
|
+
const regenerated = new Set(Object.keys(this.versions).map((fqpn) => fqpn.split("/").slice(1).join("/")));
|
|
320
334
|
const versions = allowedConstraints.reduce((acc, constraint) => {
|
|
335
|
+
if (regenerated.has(constraint.fqn)) {
|
|
336
|
+
return acc;
|
|
337
|
+
}
|
|
321
338
|
const provider = Object.entries(previousVersions).find(([name]) =>
|
|
322
339
|
// This could be more refined, but it's good enough for now
|
|
323
340
|
name.endsWith(constraint.fqn));
|
|
@@ -630,4 +647,4 @@ const determineGoModuleName = async (dir) => {
|
|
|
630
647
|
throw new Error(`Could not determine the root Go module name. No go.mod found in ${dir} and any parent directories`);
|
|
631
648
|
};
|
|
632
649
|
exports.determineGoModuleName = determineGoModuleName;
|
|
633
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1tYWtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZXQvY29uc3RydWN0cy1tYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpR0Esb0RBOEtDO0FBL1FELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNENBQStDO0FBQy9DLDRDQVl3QjtBQUN4Qiw0Q0FBMkQ7QUFDM0QsdUVBQTRFO0FBQzVFLG1FQUErRDtBQUMvRCwrQkFBNEI7QUFDNUIsNERBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsY0FBSSxFQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDaEUsR0FBRyxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQUM7SUFDSCwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUVpQixDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxnRkFBZ0Y7SUFDaEYsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFD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RUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUQsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7Z0JBQzlHLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELElBQUksc0RBQXNELENBQ2pILENBQUM7UUFDSixDQUFDO1FBQ0QsMEVBQTBFO1FBQzFFLDhDQUE4QztRQUM5QyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ3pCLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsUUFBUSxVQUFVLEtBQUssV0FBVyxFQUFFO0lBRXJDLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUVBQW1FLEdBQUcsNkJBQTZCLENBQ3BHLENBQUM7QUFDSixDQUFDLENBQUM7QUFuQ1csUUFBQSxxQkFBcUIseUJBbUNoQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IENvZGVNYWtlciB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7IGV4ZWMsIG1rZHRlbXAgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxuICBsb2dnZXIsXG4gIGxvZ1RpbWVzcGFuLFxuICBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gIFByb3ZpZGVyU2NoZW1hLFxuICBNb2R1bGVTY2hlbWEsXG4gIEVycm9ycyxcbiAgdHlwZSBMYW5ndWFnZU9wdGlvbnMsXG4gIHR5cGUgVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnMsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgRElTUExBWV9WRVJTSU9OLCBMYW5ndWFnZSB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3IgfSBmcm9tIFwiLi9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBNb2R1bGVHZW5lcmF0b3IgfSBmcm9tIFwiLi9nZW5lcmF0b3IvbW9kdWxlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gXCJnbG9iXCI7XG5pbXBvcnQgeyByZWFkU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcblxuY29uc3QgcGFjbWFrTW9kdWxlID0gcmVxdWlyZS5yZXNvbHZlKFwianNpaS1wYWNtYWsvYmluL2pzaWktcGFjbWFrXCIpO1xuY29uc3QganNpaU1vZHVsZSA9IHJlcXVpcmUucmVzb2x2ZShcImpzaWkvYmluL2pzaWlcIik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlsZXMgYG5wbSBwYWNrYCB3b3VsZCBwdWJsaXNoIGZvciB0aGUgcGFja2FnZSBhdCBgZGlyYCwgYXMgcGF0aHMgcmVsYXRpdmUgdG8gYGRpcmAuIFRoaXMgaXMgdGhlIHNldFxuICoganNpaSBuZWVkcyB0byBjb21waWxlIGFnYWluc3QgYSBkZXBlbmRlbmN5IOKAlCBpdHMgc291cmNlcyBhbmQgZGVjbGFyZWQgbWV0YWRhdGEg4oCUIGFuZCBleGNsdWRlcyBidWlsZCBvdXRwdXRzXG4gKiAoYGRpc3RgLCBgLnBhY2stc3RhZ2luZ2AsIGBub2RlX21vZHVsZXNgLCB0c2J1aWxkaW5mbywgLi4uKSB0aGF0IGEgYmxhbmtldCBkaXJlY3RvcnkgY29weSB3b3VsZCBvdGhlcndpc2UgcHVsbCBpbi5cbiAqXG4gKiBAcGFyYW0gZGlyIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgcGFja2FnZSBkaXJlY3RvcnkgdG8gaW5zcGVjdCAobXVzdCBjb250YWluIGEgcGFja2FnZS5qc29uKS5cbiAqIEByZXR1cm5zIFB1Ymxpc2hhYmxlIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIGBkaXJgLCB3aXRoIGAuLmAtZXNjYXBlIHBhdGhzIChmcm9tIGZvbGxvd2luZyBwbnBtIHN5bWxpbmtzKSBkcm9wcGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUHVibGlzaGFibGVGaWxlcyhkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcIm5wbVwiLCBbXCJwYWNrXCIsIFwiLS1kcnktcnVuXCIsIFwiLS1qc29uXCJdLCB7XG4gICAgY3dkOiBkaXIsXG4gIH0pO1xuICAvLyBucG0gPD0xMSByZXBvcnRzIGFuIGFycmF5IG9mIHBhY2tlZCBwYWNrYWdlczsgbnBtID49MTIgcmVwb3J0cyBhbiBvYmplY3RcbiAgLy8ga2V5ZWQgYnkgcGFja2FnZSBuYW1lLiBBY2NlcHQgZWl0aGVyIHNvIHRoZSBidWlsZCBpcyBucG0tdmVyc2lvbiBhZ25vc3RpYy5cbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzdGRvdXQpIGFzXG4gICAgfCBBcnJheTx7IGZpbGVzOiB7IHBhdGg6IHN0cmluZyB9W10gfT5cbiAgICB8IFJlY29yZDxzdHJpbmcsIHsgZmlsZXM6IHsgcGF0aDogc3RyaW5nIH1bXSB9PjtcbiAgY29uc3QgcGFja0luZm8gPSBBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWRbMF0gOiBPYmplY3QudmFsdWVzKHBhcnNlZClbMF07XG4gIC8vIERyb3AgYC4uYC1lc2NhcGUgcGF0aHMgbnBtIGVtaXRzIHdoZW4gZm9sbG93aW5nIHBucG0ncyBub2RlX21vZHVsZXMgc3ltbGlua3MuXG4gIHJldHVybiBwYWNrSW5mby5maWxlcy5tYXAoKGYpID0+IGYucGF0aCkuZmlsdGVyKChwKSA9PiAhcC5pbmNsdWRlcyhcIi4uXCIpKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUpTSUlPcHRpb25zIHtcbiAgZW50cnlwb2ludDogc3RyaW5nO1xuICBkZXBzOiBzdHJpbmdbXTtcbiAgbW9kdWxlS2V5OiBzdHJpbmc7XG4gIGV4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCBFeHBvcnREZWZpbml0aW9uIHwgc3RyaW5nPjtcbiAganNpaT86IEpzaWlPdXRwdXRPcHRpb25zO1xuICBweXRob24/OiBQeXRob25PdXRwdXRPcHRpb25zO1xuICBqYXZhPzogSmF2YU91dHB1dE9wdGlvbnM7XG4gIGNzaGFycD86IENTaGFycE91dHB1dE9wdGlvbnM7XG4gIGdvbGFuZz86IEdvTGFuZ091dHB1dE9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNpaU91dHB1dE9wdGlvbnMge1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0aG9uT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSmF2YU91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgcGFja2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENTaGFycE91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR29MYW5nT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcGFja2FnZXMuaHRtbCNjb25kaXRpb25hbC1leHBvcnRzIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0RGVmaW5pdGlvbiB7XG4gIG5vZGU/OiBzdHJpbmc7XG4gIGltcG9ydD86IHN0cmluZztcbiAgcmVxdWlyZT86IHN0cmluZztcbiAgZGVmYXVsdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlSnNpaUxhbmd1YWdlKFxuICBjb2RlOiBDb2RlTWFrZXIsXG4gIG9wdHM6IEdlbmVyYXRlSlNJSU9wdGlvbnMsXG4gIG91dHB1dFBhdGg6IHN0cmluZyxcbiAgZGlzYWxsb3dlZEZpbGVHbG9iczogc3RyaW5nW10gPSBbXSxcbikge1xuICBhd2FpdCBta2R0ZW1wKGFzeW5jIChzdGFnaW5nKSA9PiB7XG4gICAgLy8gdGhpcyBpcyBub3QgdHlwZXNjcmlwdCwgc28gd2UgZ2VuZXJhdGUgaW4gYSBzdGFnaW5nIGRpcmVjdG9yeSBhbmRcbiAgICAvLyB1c2UganNpaS1zcmNtYWsgdG8gY29tcGlsZSBhbmQgZXh0cmFjdCB0aGUgbGFuZ3VhZ2Utc3BlY2lmaWMgc291cmNlXG4gICAgLy8gaW50byBvdXIgcHJvamVjdC5cbiAgICBhd2FpdCBjb2RlLnNhdmUoc3RhZ2luZyk7XG5cbiAgICAvLyBhcyB0aGUgYWJvdmUgZ2VuZXJhdGVkIHRoZSBUeXBlc2NyaXB0IGNvZGUgZm9yIGFsbCBwcm92aWRlcnMgYW5kIG1vZHVsZXMsXG4gICAgLy8gd2UgbmVlZCB0byBmaWx0ZXIgb3V0IHRoZSBvbmVzIHdlIGRvbid0IG5lZWQgc28gdGhleSBkb24ndCBlbmQgdXAgaW4gdGhlIEpTSUkgYnVuZGxlIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IGRpc2FsbG93ZWRGaWxlR2xvYnMuZmxhdE1hcCgocGF0dGVybikgPT5cbiAgICAgIGdsb2Iuc3luYyhwYXR0ZXJuLCB7IGN3ZDogc3RhZ2luZyB9KSxcbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsZXNUb0RlbGV0ZS5tYXAoKGZpbGUpID0+IGZzLnJlbW92ZShwYXRoLmpvaW4oc3RhZ2luZywgZmlsZSkpKSxcbiAgICApO1xuXG4gICAgLy8gQ29tcGlsZSB3aXRoIEpTSUlcbiAgICBjb25zdCBqc2lpQXJncyA9IFtcIi0tc2lsZW5jZS13YXJuaW5nc1wiLCBcInJlc2VydmVkLXdvcmRcIl07XG4gICAgY29uc3QganNpaUVudHJ5cG9pbnQgPSBvcHRzLmVudHJ5cG9pbnQ7XG4gICAgY29uc3QgYmFzZXBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBwYXRoLmRpcm5hbWUoanNpaUVudHJ5cG9pbnQpLFxuICAgICAgcGF0aC5iYXNlbmFtZShqc2lpRW50cnlwb2ludCwgXCIudHNcIiksXG4gICAgKTtcblxuICAgIGNvbnN0IG1vZHVsZUtleSA9IG9wdHMubW9kdWxlS2V5LnJlcGxhY2UoL1xcLi9nLCBcIlwiKS5yZXBsYWNlKC9cXC8vZywgXCJcIik7XG4gICAgY29uc3QgbW9kdWxlRGlycyA9IG9wdHMuZGVwcztcbiAgICBjb25zdCB0YXJnZXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgY29uc3QgZGVwczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgZGlyIG9mIG1vZHVsZURpcnMpIHtcbiAgICAgIC8vIHJlYWQgbW9kdWxlIG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGguam9pbihkaXIsIFwicGFja2FnZS5qc29uXCIpKTtcbiAgICAgIGNvbnN0IG1vZHVsZU5hbWU6IHN0cmluZyA9IG1ldGFkYXRhLm5hbWU7XG4gICAgICBjb25zdCBtb2R1bGVWZXJzaW9uOiBzdHJpbmcgPSBtZXRhZGF0YS52ZXJzaW9uO1xuXG4gICAgICBjb25zdCB0YXJnZXRkaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIHBhdGguam9pbihzdGFnaW5nLCBcIm5vZGVfbW9kdWxlc1wiKSxcbiAgICAgICAgbW9kdWxlTmFtZSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAodGFyZ2V0ZGlyKTtcbiAgICAgIC8vIENvcHkgb25seSB0aGUgZGVwJ3MgcHVibGlzaGFibGUgZmlsZXMgKHdoYXQgYG5wbSBwYWNrYCB3b3VsZCBzaGlwKSBpbnRvIHRoZSBqc2lpIGNvbXBpbGUgYnVuZGxlLlxuICAgICAgZm9yIChjb25zdCByZWxQYXRoIG9mIGF3YWl0IHJlc29sdmVQdWJsaXNoYWJsZUZpbGVzKGRpcikpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gcGF0aC5qb2luKGRpciwgcmVsUGF0aCk7XG4gICAgICAgIGNvbnN0IGRzdCA9IHBhdGguam9pbih0YXJnZXRkaXIsIHJlbFBhdGgpO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5kaXJuYW1lKGRzdCkpO1xuICAgICAgICBhd2FpdCBmcy5jb3B5KHNyYywgZHN0LCB7IGRlcmVmZXJlbmNlOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdG8gXCJkZXBzXCIgYW5kIFwicGVlciBkZXBzXCJcbiAgICAgIGlmICghbW9kdWxlTmFtZS5zdGFydHNXaXRoKFwiQHR5cGVzL1wiKSkge1xuICAgICAgICBkZXBzW21vZHVsZU5hbWVdID0gbW9kdWxlVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcGtnID0ge1xuICAgICAgbmFtZTogbW9kdWxlS2V5LFxuICAgICAgdmVyc2lvbjogXCIwLjAuMFwiLFxuICAgICAgYXV0aG9yOiBcImdlbmVyYXRlZEBnZW5lcmF0ZWQuY29tXCIsXG4gICAgICBtYWluOiBgJHtiYXNlcGF0aH0uanNgLFxuICAgICAgdHlwZXM6IGAke2Jhc2VwYXRofS5kLnRzYCxcbiAgICAgIGxpY2Vuc2U6IFwiVU5MSUNFTlNFRFwiLFxuICAgICAgcmVwb3NpdG9yeTogeyB1cmw6IFwiaHR0cDovL2dlbmVyYXRlZFwiLCB0eXBlOiBcImdpdFwiIH0sXG4gICAgICBqc2lpOiB7XG4gICAgICAgIG91dGRpcjogXCJkaXN0XCIsXG4gICAgICAgIHRhcmdldHM6IHRhcmdldHMsXG4gICAgICB9LFxuICAgICAgZGVwZW5kZW5jaWVzOiBkZXBzLFxuICAgICAgcGVlckRlcGVuZGVuY2llczogZGVwcyxcbiAgICB9O1xuXG4gICAgaWYgKG9wdHMuZXhwb3J0cykge1xuICAgICAgKHBrZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KS5leHBvcnRzID0gb3B0cy5leHBvcnRzO1xuICAgIH1cbiAgICBpZiAob3B0cy5weXRob24pIHtcbiAgICAgIHRhcmdldHMucHl0aG9uID0ge1xuICAgICAgICBkaXN0TmFtZTogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgbW9kdWxlOiBvcHRzLnB5dGhvbi5tb2R1bGVOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5qYXZhKSB7XG4gICAgICB0YXJnZXRzLmphdmEgPSB7XG4gICAgICAgIHBhY2thZ2U6IG9wdHMuamF2YS5wYWNrYWdlLFxuICAgICAgICBtYXZlbjoge1xuICAgICAgICAgIGdyb3VwSWQ6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgICAgYXJ0aWZhY3RJZDogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuY3NoYXJwKSB7XG4gICAgICB0YXJnZXRzLmRvdG5ldCA9IHtcbiAgICAgICAgbmFtZXNwYWNlOiBvcHRzLmNzaGFycC5uYW1lc3BhY2UsXG4gICAgICAgIHBhY2thZ2VJZDogb3B0cy5jc2hhcnAubmFtZXNwYWNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5nb2xhbmcpIHtcbiAgICAgIHRhcmdldHMuZ28gPSB7XG4gICAgICAgIG1vZHVsZU5hbWU6IG9wdHMuZ29sYW5nLm1vZHVsZU5hbWUsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBvcHRzLmdvbGFuZy5wYWNrYWdlTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgcGF0aC5qb2luKHN0YWdpbmcsIFwicGFja2FnZS5qc29uXCIpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkocGtnLCB1bmRlZmluZWQsIDIpLFxuICAgICk7XG5cbiAgICBjb25zdCBlbmRKc2lpVGltZXIgPSBsb2dUaW1lc3BhbihcImpzaWlcIik7XG4gICAgYXdhaXQgZXhlYyhqc2lpTW9kdWxlLCBqc2lpQXJncywge1xuICAgICAgY3dkOiBzdGFnaW5nLFxuICAgIH0pO1xuICAgIGVuZEpzaWlUaW1lcigpO1xuXG4gICAgLy8gZXh0cmFjdCAuanNpaSBpZiByZXF1ZXN0ZWRcbiAgICBpZiAob3B0cy5qc2lpKSB7XG4gICAgICBhd2FpdCBmcy5jb3B5KHBhdGguam9pbihzdGFnaW5nLCBcIi5qc2lpXCIpLCBvcHRzLmpzaWkucGF0aCk7XG4gICAgfVxuXG4gICAgLy8gcnVuIHBhY21hayB0byBnZW5lcmF0ZSBjb2RlXG4gICAgY29uc3QgZW5kSnNpaVBhY21ha1RpbWVyID0gbG9nVGltZXNwYW4oXCJqc2lpLXBhY21ha1wiKTtcbiAgICBhd2FpdCBleGVjKHBhY21ha01vZHVsZSwgW1wiLS1jb2RlLW9ubHlcIl0sIHsgY3dkOiBzdGFnaW5nIH0pO1xuICAgIGVuZEpzaWlQYWNtYWtUaW1lcigpO1xuXG4gICAgaWYgKG9wdHMucHl0aG9uKSB7XG4gICAgICBjb25zdCByZWxkaXIgPSBvcHRzLnB5dGhvbi5tb2R1bGVOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7IC8vIGpzaWkgcmVwbGFjZXMgXCIuXCIgd2l0aCBcIi9cIlxuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L3B5dGhvbi9zcmNcIiwgcmVsZGlyKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5weXRob24ub3V0ZGlyLCByZWxkaXIpO1xuICAgICAgYXdhaXQgZnMubW92ZShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuamF2YSkge1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvamF2YS9zcmMvXCIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmphdmEub3V0ZGlyLCBcInNyYy9cIik7XG4gICAgICAvLyBQcmUtY3JlYXRlIHNoYXJlZCBwYWNrYWdlIGRpcmVjdG9yaWVzLlxuICAgICAgY29uc3QgcGFja2FnZURpciA9IG9wdHMuamF2YS5wYWNrYWdlLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5qb2luKHRhcmdldCwgXCJtYWluL2phdmFcIiwgcGFja2FnZURpcikpO1xuICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguam9pbih0YXJnZXQsIFwibWFpbi9yZXNvdXJjZXNcIiwgcGFja2FnZURpcikpO1xuICAgICAgYXdhaXQgZnMuY29weShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmNzaGFycCkge1xuICAgICAgY29uc3QgcmVsZGlyID0gb3B0cy5jc2hhcnAubmFtZXNwYWNlO1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvZG90bmV0L1wiLCByZWxkaXIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmNzaGFycC5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5nb2xhbmcpIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMuZ29sYW5nLnBhY2thZ2VOYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvZ28vXCIsIHJlbGRpcikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuZ29sYW5nLm91dGRpciwgcmVsZGlyKTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgICAgLy8gcmVtb3ZlIGdvLm1vZCBhcyB0aGlzIHdvdWxkIG1ha2UgaXQgYSBzdWJtb2R1bGVcbiAgICAgIGF3YWl0IGZzLnJlbW92ZShwYXRoLmpvaW4odGFyZ2V0LCBcImdvLm1vZFwiKSk7XG4gICAgfVxuXG4gICAgW1widmVyc2lvbnMuanNvblwiLCBcImNvbnN0cmFpbnRzLmpzb25cIl0uZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZnMuY29weVN5bmMoXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKHN0YWdpbmcsIGZpbGUpLFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShvdXRwdXRQYXRoLCBmaWxlKSxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gY29weSAke2ZpbGV9OiAke2V9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG50eXBlIENvbnN0cmFpbnRGaWxlID0ge1xuICBwcm92aWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNka3RmOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGRlY2xhcmVkIHRhcmdldFZlcnNpb25zIChjZGt0Zi5qc29uKSwgc3RhbXBlZCBmb3JcbiAgICogZGlhZ25vc3RpY3MvY2FjaGUgZGVidWdnaW5nLiBQdXJlbHkgaW5mb3JtYXRpb25hbCAtIG5ldmVyIHJlYWQgYmFjayB0b1xuICAgKiBkZWNpZGUgd2hldGhlciBjYWNoZWQgb3V0cHV0IGlzIHN0YWxlLCBzaW5jZSBpdCBkb2Vzbid0IGFmZmVjdCB0aGVcbiAgICogZ2VuZXJhdGVkIHN1cmZhY2UgKHRoZSBmdWxsIHN1cmZhY2UgaXMgYWx3YXlzIGdlbmVyYXRlZDsgbmFycm93aW5nXG4gICAqIGhhcHBlbnMgYXQgc3ludGgpLlxuICAgKi9cbiAgdGFyZ2V0VmVyc2lvbnM/OiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucztcbiAgLyoqXG4gICAqIElkZW50aXR5IG9mIHRoZSBDTEkgKHRlcnJhZm9ybS9vcGVudG9mdSkgdGhhdCBmZXRjaGVkIHRoZSBzY2hlbWFzIHVzZWRcbiAgICogZm9yIHRoaXMgZ2VuZXJhdGlvbiwgc3RhbXBlZCBmb3IgZGlhZ25vc3RpY3MvY2FjaGUgZGVidWdnaW5nLlxuICAgKi9cbiAgY2xpPzogeyBuYW1lPzogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEdldE9wdGlvbnMge1xuICByZWFkb25seSB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2U7XG4gIHJlYWRvbmx5IGNvZGVNYWtlck91dHB1dDogc3RyaW5nO1xuICByZWFkb25seSBqc2lpUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQYXRoIHRvIGNvcHkgdGhlIG91dHB1dCAuanNpaSBmaWxlLlxuICAgKiBAZGVmYXVsdCAtIGpzaWkgZmlsZSBpcyBub3QgZW1pdHRlZFxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0SnNpaT86IHN0cmluZztcbiAgLyoqXG4gICAqIExhbmd1YWdlLXNwZWNpZmljIGNvZGUgZ2VuZXJhdGlvbiBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2VPcHRpb25zPzogTGFuZ3VhZ2VPcHRpb25zO1xuICAvKipcbiAgICogVGhlIHByb2plY3QncyBkZWNsYXJlZCB0YXJnZXRWZXJzaW9ucyAoY2RrdGYuanNvbikuIFVzZWQgdG8gZHJpdmUgdGhlXG4gICAqIGZldGNoLXRpbWUgZW1pc3Npb24tZ2FwIHdhcm5pbmcgaW4gQGNka3RuL3Byb3ZpZGVyLXNjaGVtYSBhbmQgdG8gc3RhbXBcbiAgICogdGhlIGdlbmVyYXRlZCBjb25zdHJhaW50cy5qc29uIGZvciBkaWFnbm9zdGljcy4gRG9lcyBOT1QgZmlsdGVyIGNvZGVnZW46XG4gICAqIHRoZSBmdWxsIHN1cmZhY2UgaXMgYWx3YXlzIGdlbmVyYXRlZCwgbmFycm93aW5nIGhhcHBlbnMgYXQgc3ludGguXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRWZXJzaW9ucz86IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0c01ha2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlTWFrZXJPdXRkaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXI7XG4gIHByaXZhdGUgdmVyc2lvbnM6IHsgW3Byb3ZpZGVyTmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG4gIC8qKiBSZXNvdXJjZSBkaXJlY3RvcnkgbmFtZXMgZW1pdHRlZCBwZXIgcHJvdmlkZXIgZm9sZGVyIGR1cmluZyB0aGlzIHJ1biAqL1xuICBwdWJsaWMgZW1pdHRlZFJlc291cmNlRm9sZGVyczogeyBbcHJvdmlkZXJOYW1lOiBzdHJpbmddOiBzdHJpbmdbXSB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogR2V0T3B0aW9ucyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYUNhY2hlUGF0aD86IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydFRlbGVtZXRyeTogKHBheWxvYWQ6IHtcbiAgICAgIHRhcmdldExhbmd1YWdlOiBzdHJpbmc7XG4gICAgICB0cmFja2luZ1BheWxvYWQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfSkgPT4gUHJvbWlzZTx2b2lkPiA9IGFzeW5jICgpID0+IHt9LFxuICApIHtcbiAgICB0aGlzLmNvZGVNYWtlck91dGRpciA9IHBhdGgucmVzb2x2ZSh0aGlzLm9wdGlvbnMuY29kZU1ha2VyT3V0cHV0KTtcbiAgICBmcy5ta2RpcnBTeW5jKHRoaXMuY29kZU1ha2VyT3V0ZGlyKTtcbiAgICB0aGlzLmNvZGUgPSBuZXcgQ29kZU1ha2VyKCk7XG4gICAgdGhpcy52ZXJzaW9ucyA9IHt9O1xuICAgIHRoaXMuZW1pdHRlZFJlc291cmNlRm9sZGVycyA9IHt9O1xuICB9XG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVUeXBlc2NyaXB0UHJvdmlkZXIoXG4gICAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgICBzY2hlbWE6IFByb3ZpZGVyU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBlbmRUU1RpbWVyID0gbG9nVGltZXNwYW4oYEdlbmVyYXRlIFR5cGVzY3JpcHQgZm9yICR7dGFyZ2V0Lm5hbWV9YCk7XG4gICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyR2VuZXJhdG9yKHRoaXMuY29kZSwgc2NoZW1hLCB7XG4gICAgICBpbXBvcnRFeHRlbnNpb246IHRoaXMub3B0aW9ucy5sYW5ndWFnZU9wdGlvbnM/LmltcG9ydEV4dGVuc2lvbixcbiAgICAgIHRhcmdldFZlcnNpb25zOiB0aGlzLm9wdGlvbnMudGFyZ2V0VmVyc2lvbnMsXG4gICAgfSk7XG4gICAgZ2VuZXJhdG9yLmdlbmVyYXRlKHRhcmdldCk7XG5cbiAgICB0aGlzLnZlcnNpb25zID0geyAuLi50aGlzLnZlcnNpb25zLCAuLi5nZW5lcmF0b3IudmVyc2lvbnMgfTtcbiAgICB0aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMgPSB7XG4gICAgICAuLi50aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMsXG4gICAgICAuLi5nZW5lcmF0b3IuZW1pdHRlZFJlc291cmNlRm9sZGVycyxcbiAgICB9O1xuICAgIGVuZFRTVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmaWx0ZXJBbHJlYWR5R2VuZXJhdGVkKFxuICAgIGNvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBsZXQgY29uc3RyYWludHNGaWxlID0gXCJ7fVwiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdHJhaW50c0ZpbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcImNvbnN0cmFpbnRzLmpzb25cIiksXG4gICAgICAgIFwidXRmOFwiLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBjb25zdHJhaW50cy5qc29uIGZpbGUgd2hpbGUgZmlsdGVyaW5nOiAke2V9LiBUaGlzIG1lYW5zIG5vIHByb3ZpZGVycyB3ZXJlIGdlbmVyYXRlZCwgc28gYWxsIGNvbnN0cmFpbnRzIG5lZWQgdG8gYmUgZ2VuZXJhdGVkLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIGNvbnN0cmFpbnRzLmpzb24gZmlsZTogJHtjb25zdHJhaW50c0ZpbGV9YCk7XG5cbiAgICBsZXQgcHJldmlvdXNDb25zdHJhaW50czogUGFydGlhbDxDb25zdHJhaW50RmlsZT4gPSB7fTtcbiAgICB0cnkge1xuICAgICAgcHJldmlvdXNDb25zdHJhaW50cyA9IEpTT04ucGFyc2UoY29uc3RyYWludHNGaWxlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBwYXJzZSBjb25zdHJhaW50cy5qc29uIGZpbGUgd2hpbGUgZmlsdGVyaW5nOiAke2V9LiBHZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRm91bmQgcHJldmlvdXMgY29uc3RyYWludHM6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgICFwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyB8fFxuICAgICAgdHlwZW9mIHByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzICE9PSBcIm9iamVjdFwiXG4gICAgKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIHByb3ZpZGVycyBpbiBjb25zdHJhaW50cy5qc29uIGZpbGUsIGdlbmVyYXRpbmcgYWxsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludHMgZmlsZSB3YXMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBpZiAocHJldmlvdXNDb25zdHJhaW50cy5jZGt0ZiAhPT0gRElTUExBWV9WRVJTSU9OKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYFRoZSBDREtUTiB2ZXJzaW9uIGhhcyBjaGFuZ2VkLCBnZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy4gVGhlIHByZXZpb3VzIHZlcnNpb24gd2FzICR7cHJldmlvdXNDb25zdHJhaW50cy5jZGt0Zn0sIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgJHtESVNQTEFZX1ZFUlNJT059YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgY29uc3QgY29uc3RyYWludHNUb0dlbmVyYXRlID0gY29uc3RyYWludHMuZmlsdGVyKChjb25zdHJhaW50KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJhaW50TWF0Y2hlcyA9XG4gICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzIVtjb25zdHJhaW50LmZxbl0gPT09IGNvbnN0cmFpbnQudmVyc2lvbjtcbiAgICAgIGxldCBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZhbHNlO1xuXG4gICAgICBzd2l0Y2ggKHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6XG4gICAgICAgICAgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiLCBjb25zdHJhaW50Lm5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOlxuICAgICAgICBjYXNlIExhbmd1YWdlLkpBVkE6XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgY29uc3RyYWludC5uYW1lKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExhbmd1YWdlLkdPOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbihcbiAgICAgICAgICAgICAgdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnQubmFtZXNwYWNlIHx8IFwiaGFzaGljb3JwXCIsXG4gICAgICAgICAgICAgIGNvbnN0cmFpbnQubmFtZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvdmlkZXJFeGlzdHMgPSBjb25zdHJhaW50TWF0Y2hlcyAmJiBwcm92aWRlckZvbGRlckV4aXN0cztcbiAgICAgIHJldHVybiAhcHJvdmlkZXJFeGlzdHM7XG4gICAgfSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ29uc3RyYWludHMgdG8gZ2VuZXJhdGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVUeXBlc2NyaXB0TW9kdWxlKFxuICAgIHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICAgIHNjaGVtYTogTW9kdWxlU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBlbmRUU1RpbWVyID0gbG9nVGltZXNwYW4oYEdlbmVyYXRlIFR5cGVzY3JpcHQgZm9yICR7dGFyZ2V0Lm5hbWV9YCk7XG4gICAgdGFyZ2V0LnNwZWMgPSBzY2hlbWE7XG4gICAgbmV3IE1vZHVsZUdlbmVyYXRvcih0aGlzLmNvZGUsIFt0YXJnZXRdKTtcbiAgICBlbmRUU1RpbWVyKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdChcbiAgICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgICBzY2hlbWFzOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHJlYWRTY2hlbWE+PixcbiAgKSB7XG4gICAgaWYgKHRhcmdldC5pc01vZHVsZSkge1xuICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hcy5tb2R1bGVTY2hlbWE/Llt0YXJnZXQubW9kdWxlS2V5XTtcbiAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICBgQ291bGQgbm90IGdlbmVyYXRlIHNjaGVtYSBmb3IgbW9kdWxlICR7dGFyZ2V0Lm1vZHVsZUtleX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlVHlwZXNjcmlwdE1vZHVsZShcbiAgICAgICAgdGFyZ2V0IGFzIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldC5pc1Byb3ZpZGVyKSB7XG4gICAgICBpZiAoIXNjaGVtYXMucHJvdmlkZXJTY2hlbWEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKGBDb3VsZCBub3QgZ2VuZXJhdGUgc2NoZW1hIGZvciBwcm92aWRlcnNgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVR5cGVzY3JpcHRQcm92aWRlcihcbiAgICAgICAgdGFyZ2V0IGFzIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICAgICAgICBzY2hlbWFzLnByb3ZpZGVyU2NoZW1hLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVW5rbm93biB0YXJnZXQgdHlwZSB1c2VkIHRvIGdlbmVyYXRlIGJpbmRpbmdzOiAke3RhcmdldC5uYW1lfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVtaXRzIGEgdmVyc2lvbnMuanNvbiBmaWxlIHdpdGggYSBtYXAgb2YgdGhlIHVzZWQgdmVyc2lvbiBmb3IgZWFjaCBwcm92aWRlciBmcXBuXG4gIHByaXZhdGUgdXBkYXRlVmVyc2lvbnNGaWxlKFxuICAgIGFsbG93ZWRDb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYFVwZGF0aW5nIHZlcnNpb25zIGZpbGUgd2l0aCBnZW5lcmF0ZWQgdmVyc2lvbnMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdGhpcy52ZXJzaW9ucyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9IHdpdGggYWxsb3dlZCBjb25zdHJhaW50cyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBhbGxvd2VkQ29uc3RyYWludHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IFwidmVyc2lvbnMuanNvblwiO1xuICAgIGxldCBwcmV2aW91c1ZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIHByZXZpb3VzVmVyc2lvbnMgPSBKU09OLnBhcnNlKFxuICAgICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBmaWxlUGF0aCksIFwidXRmOFwiKSxcbiAgICAgICk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJlYWQgZXhpc3RpbmcgdmVyc2lvbnMgZmlsZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmV2aW91c1ZlcnNpb25zLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgMixcbiAgICAgICAgKX1gLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCByZWFkIHZlcnNpb25zIGZpbGUsIHRoaXMgaXMgZXhwZWN0ZWQgaWYgdGhlcmUgYXJlIG5vIHByZS1leGlzdGluZyBsb2NhbCBwcm92aWRlcnM6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9ucyA9IGFsbG93ZWRDb25zdHJhaW50cy5yZWR1Y2UoKGFjYywgY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBPYmplY3QuZW50cmllcyhwcmV2aW91c1ZlcnNpb25zKS5maW5kKChbbmFtZV0pID0+XG4gICAgICAgIC8vIFRoaXMgY291bGQgYmUgbW9yZSByZWZpbmVkLCBidXQgaXQncyBnb29kIGVub3VnaCBmb3Igbm93XG4gICAgICAgIG5hbWUuZW5kc1dpdGgoY29uc3RyYWludC5mcW4pLFxuICAgICAgKTtcblxuICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSA9IHByb3ZpZGVyO1xuICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogdmVyc2lvbiB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBXcml0aW5nIHZlcnNpb25zIGZpbGUgKCR7ZmlsZVBhdGh9KTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdmVyc2lvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoSlNPTi5zdHJpbmdpZnkoeyAuLi52ZXJzaW9ucywgLi4udGhpcy52ZXJzaW9ucyB9LCBudWxsLCAyKSk7XG4gICAgdGhpcy5jb2RlLmNsb3NlRmlsZShmaWxlUGF0aCk7XG4gICAgcmV0dXJuIGZpbGVQYXRoO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlbW92ZUZvbGRlcnNUaGF0U2hvdWxkTm90RXhpc3QoXG4gICAgY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3Q6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBSZW1vdmluZyBwcm92aWRlcnMgZXhjZXB0IGZvciAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBjb25zdHJhaW50c1RoYXRTaG91bGRFeGlzdCxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgLy8gQWxsIGxhbmd1YWdlcyBiZXNpZGVzIFRTIGtlZXAgdGhlaXIgcHJvdmlkZXJzIGluIHRoZSBzYW1lIGZvbGRlcnMgYXMgbW9kdWxlc1xuICAgIC8vIHRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSBmb3IgdXMgdG8gZGlzdGluZ3Vpc2ggYSBubyBsb25nZXIgcmVxdWlyZWQgcHJvdmlkZXJcbiAgICAvLyBmcm9tIGEgbWFudWFsbHkgd3JpdHRlbiBjb25zdHJ1Y3Qgb3IgYSBtb2R1bGVcbiAgICBpZiAoIXRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZpbGVzSW5Qcm92aWRlcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgcHJvdmlkZXJzRm9sZGVyID0gcGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiKTtcbiAgICB0cnkge1xuICAgICAgZmlsZXNJblByb3ZpZGVycyA9IGF3YWl0IGZzLnJlYWRkaXIocHJvdmlkZXJzRm9sZGVyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBFcnJvciBsaXN0aW5nIGZpbGVzIGluIHByb3ZpZGVycyBmb2xkZXIgJyR7cHJvdmlkZXJzRm9sZGVyfSc6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb2xkZXJzID0gZmlsZXNJblByb3ZpZGVycy5maWx0ZXIoKGZpbGUpID0+XG4gICAgICBmc1xuICAgICAgICAuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBcInByb3ZpZGVyc1wiLCBmaWxlKSlcbiAgICAgICAgLmlzRGlyZWN0b3J5KCksXG4gICAgKTtcblxuICAgIHJldHVybiBmb2xkZXJzLmZvckVhY2goKGZvbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc2hvdWxkRXhpc3QgPSBjb25zdHJhaW50c1RoYXRTaG91bGRFeGlzdC5zb21lKFxuICAgICAgICAoY29uc3RyYWludCkgPT4gY29uc3RyYWludC5uYW1lID09PSBmb2xkZXIsXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNob3VsZEV4aXN0KSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVtb3ZpbmcgZm9sZGVyICR7Zm9sZGVyfSBmcm9tIHByb3ZpZGVyc2ApO1xuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgZm9sZGVyKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHJlc291cmNlIGRpcmVjdG9yaWVzIHVuZGVyIGBwcm92aWRlcnMvYCB0aGF0IHRoaXMgcnVuIGRpZCBub3QgZW1pdCwgc28gZWFjaCBwcm92aWRlciBmb2xkZXIgaG9sZHNcbiAgICogZXhhY3RseSB0aGUgcmVzb3VyY2VzIGluIHRoZSB2ZXJzaW9uIGl0IHdhcyBnZW5lcmF0ZWQgYWdhaW5zdC5cbiAgICpcbiAgICogV2Fsa3Mgb25seSBwcm92aWRlcnMgcHJlc2VudCBpbiBgZW1pdHRlZFJlc291cmNlRm9sZGVyc2AsIGtlZXBpbmcgYW55IHByb3ZpZGVyIHRoaXMgcnVuIHNraXBwZWQuIFdpdGhpbiB0aG9zZSxcbiAgICogcmVtb3ZlcyBldmVyeSBzdWJkaXJlY3Rvcnkgbm90IGVtaXR0ZWQgYW5kIGxlYXZlcyBwcm92aWRlci1sZXZlbCBmaWxlcyAoYGluZGV4LnRzYCwgYGxhenktaW5kZXgudHNgKSBpbiBwbGFjZS5cbiAgICogRGVsZXRlcyBmaWxlcywgc28gaXQgbXVzdCBydW4gYWZ0ZXIgYHNhdmUoKWAgaGFzIHdyaXR0ZW4gdGhlIGN1cnJlbnQgcnVuJ3Mgb3V0cHV0LlxuICAgKlxuICAgKiBUeXBlU2NyaXB0IG9ubHk6IGBwcm92aWRlcnMvPG5hbWU+LzxyZXNvdXJjZT4vYCBtYXBzIG9uZS10by1vbmUgb250byB0aGUgZW1pdHRlZCBpbmRleCBleHBvcnRzLiBPdGhlciBsYW5ndWFnZXNcbiAgICogY28tbG9jYXRlIHByb3ZpZGVycyBhbmQgbW9kdWxlcyBpbiB0aGUgc2FtZSBmb2xkZXJzLCB3aGljaCBtYWtlcyBhIGRyb3BwZWQgcmVzb3VyY2UgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhXG4gICAqIGhhbmQtd3JpdHRlbiBjb25zdHJ1Y3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVtb3ZlT3JwaGFuZWRSZXNvdXJjZUZvbGRlcnMoKSB7XG4gICAgaWYgKCF0aGlzLmlzSmF2YXNjcmlwdFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3Byb3ZpZGVyLCBlbWl0dGVkRm9sZGVyc10gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0aGlzLmVtaXR0ZWRSZXNvdXJjZUZvbGRlcnMsXG4gICAgKSkge1xuICAgICAgY29uc3QgcHJvdmlkZXJGb2xkZXIgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICBcInByb3ZpZGVyc1wiLFxuICAgICAgICBwcm92aWRlcixcbiAgICAgICk7XG5cbiAgICAgIGxldCBlbnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIocHJvdmlkZXJGb2xkZXIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYENvdWxkIG5vdCBsaXN0IHJlc291cmNlIGZvbGRlcnMgaW4gJyR7cHJvdmlkZXJGb2xkZXJ9JzogJHtlfWAsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBTZXQoZW1pdHRlZEZvbGRlcnMpO1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChleHBlY3RlZC5oYXMoZW50cnkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnRyeVBhdGggPSBwYXRoLnJlc29sdmUocHJvdmlkZXJGb2xkZXIsIGVudHJ5KTtcbiAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhlbnRyeVBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAvLyBMZWF2ZSBpbmRleC50cyAvIGxhenktaW5kZXgudHMgYW5kIGFueSBvdGhlciBwcm92aWRlci1sZXZlbCBmaWxlcyBhbG9uZS5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBgUmVtb3Zpbmcgb3JwaGFuZWQgcmVzb3VyY2UgZm9sZGVyICcke2VudHJ5fScgZnJvbSBwcm92aWRlciAnJHtwcm92aWRlcn0nOiBpdCB3YXMgbm90IGVtaXR0ZWQgZm9yIHRoZSBjdXJyZW50IHByb3ZpZGVyIHZlcnNpb25gLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBmcy5yZW1vdmUoZW50cnlQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlbWl0cyBhIGNvbnN0cmFpbnRzLmpzb24gZmlsZSB3aXRoIGEgbWFwIG9mIHRoZSB1c2VkIHByb3ZpZGVyIGZxcG5zIGFuZCB2ZXJzaW9uIGNvbnN0cmFpbnRzXG4gIC8vIHRoaXMgaXMgdXNlZCBmb3IgY2FjaGluZyBwdXJwb3Nlc1xuICBwcml2YXRlIGVtaXRDb25zdHJhaW50c0ZpbGUoXG4gICAgYWxsb3dlZENvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICAgIHByb3ZpZGVyU2NoZW1hPzogUHJvdmlkZXJTY2hlbWEsXG4gICkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gXCJjb25zdHJhaW50cy5qc29uXCI7XG5cbiAgICBjb25zdCBjb250ZW50OiBDb25zdHJhaW50RmlsZSA9IHtcbiAgICAgIGNka3RmOiBESVNQTEFZX1ZFUlNJT04sXG4gICAgICBwcm92aWRlcnM6IGFsbG93ZWRDb25zdHJhaW50c1xuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5mcW4ubG9jYWxlQ29tcGFyZShiLmZxbikpXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKGNhcnJ5LCBpdGVtKSA9PiAoe1xuICAgICAgICAgICAgLi4uY2FycnksXG4gICAgICAgICAgICBbaXRlbS5mcW5dOiBpdGVtLnZlcnNpb24sXG4gICAgICAgICAgfSksXG4gICAgICAgICAge30sXG4gICAgICAgICksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0VmVyc2lvbnMpIHtcbiAgICAgIGNvbnRlbnQudGFyZ2V0VmVyc2lvbnMgPSB0aGlzLm9wdGlvbnMudGFyZ2V0VmVyc2lvbnM7XG4gICAgfVxuXG4gICAgaWYgKHByb3ZpZGVyU2NoZW1hPy5jbGlfbmFtZSB8fCBwcm92aWRlclNjaGVtYT8uY2xpX3ZlcnNpb24pIHtcbiAgICAgIGNvbnRlbnQuY2xpID0ge1xuICAgICAgICBuYW1lOiBwcm92aWRlclNjaGVtYS5jbGlfbmFtZSxcbiAgICAgICAgdmVyc2lvbjogcHJvdmlkZXJTY2hlbWEuY2xpX3ZlcnNpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZShmaWxlUGF0aCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoSlNPTi5zdHJpbmdpZnkoY29udGVudCwgbnVsbCwgMikpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQpIHtcbiAgICAvLyBNb2R1bGUgZGVwZW5kZW5jaWVzIHdlIGNvbXBpbGUgYWdhaW5zdC4gU3RhdGljIHJlcXVpcmUucmVzb2x2ZSBjYWxscyBzb1xuICAgIC8vIGtuaXAgLyBwbnBtIHN0cmljdCBpc29sYXRpb24gY2FuIHNlZSB0aGUgZGVwcy5cbiAgICBjb25zdCBkZXBzID0gW1xuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcIkB0eXBlcy9ub2RlL3BhY2thZ2UuanNvblwiKSksXG4gICAgICBwYXRoLmRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKFwiY29uc3RydWN0cy9wYWNrYWdlLmpzb25cIikpLFxuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcImNka3RuL3BhY2thZ2UuanNvblwiKSksXG4gICAgXTtcbiAgICBjb25zdCBvcHRzOiBHZW5lcmF0ZUpTSUlPcHRpb25zID0ge1xuICAgICAgZW50cnlwb2ludDogdGFyZ2V0LmZpbGVOYW1lLFxuICAgICAgZGVwcyxcbiAgICAgIG1vZHVsZUtleTogdGFyZ2V0Lm1vZHVsZUtleSxcbiAgICAgIGV4cG9ydHM6IHRhcmdldC5pc1Byb3ZpZGVyIC8vIE1vZHVsZXMgYXJlIHNtYWxsIGVub3VnaCB0aGF0IHdlIGRvbid0IG5lZWQgdGhpcyBvcHRpbWl6YXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBcIi5cIjoge1xuICAgICAgICAgICAgICBpbXBvcnQ6IGAuL3Byb3ZpZGVycy8ke3RhcmdldC5uYW1lfS9pbmRleC5qc2AsXG4gICAgICAgICAgICAgIHJlcXVpcmU6IGAuL3Byb3ZpZGVycy8ke3RhcmdldC5uYW1lfS9sYXp5LWluZGV4LmpzYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgLy8gdXNlZCBmb3IgdGVzdGluZy5cbiAgICBpZiAodGhpcy5vcHRpb25zLm91dHB1dEpzaWkpIHtcbiAgICAgIG9wdHMuanNpaSA9IHsgcGF0aDogdGhpcy5vcHRpb25zLm91dHB1dEpzaWkgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1B5dGhvblRhcmdldCkge1xuICAgICAgb3B0cy5weXRob24gPSB7XG4gICAgICAgIG91dGRpcjogdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgIG1vZHVsZU5hbWU6IHRhcmdldC5zcmNNYWtOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0phdmFUYXJnZXQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dC5pbmNsdWRlcyhcIi9cIikgfHxcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dC5pbmNsdWRlcyhcIlxcXFxcIilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgICAgYFdoZW4gdXNpbmcgSmF2YSB0aGUgXCJjb2RlTWFrZXJPdXRwdXRcIiBvcHRpb24gaW4gdGhlIGNka3RmLmpzb24gbXVzdCBiZSB0aGUgb3JnYW5pemF0aW9uIGlkZW50aWZpZXIgZm9yIHlvdXIgcHJvamVjdCAoZS5nLiBjb20ubXktY29tcGFueSksIG5vdCBhIHBhdGguIFRoZSBnZW5lcmF0ZWQgSmF2YSBjb2RlIHdpbGwgYmUgcGxhY2VkIGluIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBnaXZlbiBkaXJlY3RvcnkuIElmIHlvdSBhcmUgbWlncmF0aW5nIGZyb20gYSA8IDAuMTkgdmVyc2lvbiBvZiBjZGt0ZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGNvZGVtYWtlck91dHB1dCB0byBcImltcG9ydHNcIi5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBvcHRzLmphdmEgPSB7XG4gICAgICAgIG91dGRpcjogXCIuXCIsIC8vIGdlbmVyYXRlZCBqYXZhIGZpbGVzIGFyZW4ndCBwYWNrYWdlZCwgc28ganVzdCBpbmNsdWRlIGRpcmVjdGx5IGluIGFwcFxuICAgICAgICBwYWNrYWdlOiBgJHt0aGlzLm9wdGlvbnMuY29kZU1ha2VyT3V0cHV0fS4ke3RhcmdldC5zcmNNYWtOYW1lfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ3NoYXJwVGFyZ2V0KSB7XG4gICAgICBvcHRzLmNzaGFycCA9IHtcbiAgICAgICAgb3V0ZGlyOiB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgbmFtZXNwYWNlOiB0YXJnZXQuc3JjTWFrTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNHb1RhcmdldCkge1xuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgbmVlZGVkIGZvciBtb2R1bGVzIHNvbWVob3dcbiAgICAgIC8vIGNvbnN0IHRhcmdldFR5cGUgPSB0YXJnZXQuaXNQcm92aWRlciA/ICdwcm92aWRlcicgOiAnbW9kdWxlJztcblxuICAgICAgLy8ganNpaS1zcmNtYWMgd2lsbCBwcm9kdWNlIGEgZm9sZGVyIGluc2lkZSB0aGlzIGRpciBuYW1lZCBhZnRlciBcInBhY2thZ2VOYW1lXCJcbiAgICAgIC8vIHNvIHRoaXMgcmVzdWx0cyBpbiBlLmcuIC5nZW4vaGFzaGljb3JwL3JhbmRvbVxuICAgICAgY29uc3Qgb3V0ZGlyID0gcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCB0YXJnZXQubmFtZXNwYWNlID8/IFwiXCIpO1xuXG4gICAgICBvcHRzLmdvbGFuZyA9IHtcbiAgICAgICAgb3V0ZGlyLFxuICAgICAgICBtb2R1bGVOYW1lOiBhd2FpdCBkZXRlcm1pbmVHb01vZHVsZU5hbWUob3V0ZGlyKSwgLy8gZS5nLiBgZ2l0aHViLmNvbS9vcmcvdXNlcnByb2plY3QvLmdlbi9oYXNoaWNvcnBgXG4gICAgICAgIHBhY2thZ2VOYW1lOiB0YXJnZXQuc3JjTWFrTmFtZSwgLy8gcGFja2FnZSB3aWxsIGJlIG5hbWVkIGUuZy4gcmFuZG9tIGZvciBoYXNoaWNvcnAvcmFuZG9tXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyAmJlxuICAgICAgIXByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUy5pbmNsdWRlcyhgLS1tYXgtb2xkLXNwYWNlLXNpemVgKVxuICAgICkge1xuICAgICAgbG9nZ2VyLndhcm4oYGZvdW5kIE5PREVfT1BUSU9OUyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRob3V0IGEgc2V0dGluZyBmb3IgLS1tYXgtb2xkLXNwYWNlLXNpemUuXG5UaGUgcHJvdmlkZXIgZ2VuZXJhdGlvbiBuZWVkcyBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiBtZW1vcnkgKH4xM0dCKSBmb3Igc29tZSBwcm92aWRlcnMgYW5kIGxhbmd1YWdlcy5cblNvIGNka3RuLWNsaSBzZXRzIGl0IHRvIE5PREVfT1BUSU9OUz1cIi0tbWF4LW9sZC1zcGFjZS1zaXplPTE2Mzg0XCIgYnkgZGVmYXVsdC4gQXMgeW91ciBlbnZpcm9ubWVudCBhbHJlYWR5IGNvbnRhaW5zXG5hIE5PREVfT1BUSU9OUyB2YXJpYWJsZSwgd2Ugd29uJ3Qgb3ZlcnJpZGUgaXQuIEhlbmNlLCB0aGUgcHJvdmlkZXIgZ2VuZXJhdGlvbiBtaWdodCBmYWlsIHdpdGggYW4gb3V0IG9mIG1lbW9yeSBlcnJvci5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5jcmVhc2UgbWVtb3J5IHRvIGFsbG93IGdlbmVyYXRpbmcgbGFyZ2UgcHJvdmlkZXJzIChpLmUuIGF3cyBvciBhenVyZXJtIGZvciBHbylcbiAgICAgIC8vIHNyY21hayBpcyBnb2luZyB0byBzcGF3biBhIGNoaWxkcHJvY2VzcyAoZm9yIGpzaWktcGFjbWFrKSB3aGljaCBpcyBnb2luZyB0byBiZSBhZmZlY3RlZCBieSB0aGlzIGVudiB2YXJcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OUyA9IFwiLS1tYXgtb2xkLXNwYWNlLXNpemU9MTYzODRcIjtcbiAgICB9XG5cbiAgICBjb25zdCBqc2lpVGltZXIgPSBsb2dUaW1lc3BhbihcIkpTSUlcIik7XG4gICAgYXdhaXQgZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGhpcy5jb2RlLCBvcHRzLCB0aGlzLmNvZGVNYWtlck91dGRpciwgW1xuICAgICAgdGFyZ2V0LmlzTW9kdWxlID8gXCJwcm92aWRlcnMvKipcIiA6IFwibW9kdWxlcy8qKlwiLFxuICAgIF0pO1xuICAgIGpzaWlUaW1lcigpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjaGVtYXModGFyZ2V0czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSkge1xuICAgIHJldHVybiBhd2FpdCByZWFkU2NoZW1hKFxuICAgICAgdGFyZ2V0cyxcbiAgICAgIHRoaXMuc2NoZW1hQ2FjaGVQYXRoLFxuICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGUoXG4gICAgYWxsQ29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICAgY29uc3RyYWludHNUb0dlbmVyYXRlID0gYWxsQ29uc3RyYWludHMsXG4gICkge1xuICAgIGNvbnN0IHRhcmdldHMgPSBjb25zdHJhaW50c1RvR2VuZXJhdGUubWFwKChjb25zdHJhaW50KSA9PlxuICAgICAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LmZyb20oY29uc3RyYWludCwgdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlKSxcbiAgICApO1xuXG4gICAgY29uc3QgZW5kU2NoZW1hVGltZXIgPSBsb2dUaW1lc3BhbihcIkdhdGhlcmluZyBzY2hlbWFcIik7XG4gICAgY29uc3Qgc2NoZW1hcyA9IGF3YWl0IHRoaXMuZ2V0U2NoZW1hcyhjb25zdHJhaW50c1RvR2VuZXJhdGUpO1xuICAgIGVuZFNjaGVtYVRpbWVyKCk7XG5cbiAgICBjb25zdCBlbmRHZW5lcmF0ZVRpbWVyID0gbG9nVGltZXNwYW4oXCJHZW5lcmF0ZSBUU1wiKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKCh0YXJnZXQpID0+IHRoaXMuZ2VuZXJhdGVUeXBlc2NyaXB0KHRhcmdldCwgc2NoZW1hcykpLFxuICAgICk7XG4gICAgZW5kR2VuZXJhdGVUaW1lcigpO1xuXG4gICAgdGhpcy51cGRhdGVWZXJzaW9uc0ZpbGUoYWxsQ29uc3RyYWludHMpO1xuICAgIHRoaXMuZW1pdENvbnN0cmFpbnRzRmlsZShhbGxDb25zdHJhaW50cywgc2NoZW1hcy5wcm92aWRlclNjaGVtYSk7XG5cbiAgICBpZiAodGhpcy5pc0phdmFzY3JpcHRUYXJnZXQpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVPcnBoYW5lZFJlc291cmNlRm9sZGVycygpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc0phdmFzY3JpcHRUYXJnZXQgfHwgdGhpcy5vcHRpb25zLm91dHB1dEpzaWkpIHtcbiAgICAgIGNvbnN0IG51bWJlck9mV29ya2VycyA9IE1hdGgubWF4KFxuICAgICAgICAxLFxuICAgICAgICB0aGlzLm9wdGlvbnMuanNpaVBhcmFsbGVsaXNtID09PSAtMVxuICAgICAgICAgID8gdGFyZ2V0cy5sZW5ndGhcbiAgICAgICAgICA6IHRoaXMub3B0aW9ucy5qc2lpUGFyYWxsZWxpc20gfHwgMSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHdvcmsgPSBbLi4udGFyZ2V0c107XG4gICAgICBjb25zdCB3b3JrZXJzID0gbmV3IEFycmF5KG51bWJlck9mV29ya2VycykuZmlsbChhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclRhcmdldCB8IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCh0YXJnZXQgPSB3b3JrLnBvcCgpKSkge1xuICAgICAgICAgIGNvbnN0IGVuZEpzaWlUYXJnZXQgPSBsb2dUaW1lc3BhbihcbiAgICAgICAgICAgIGBHZW5lcmF0aW5nIEpTSUkgYmluZGluZ3MgZm9yICR7dGFyZ2V0Lm5hbWV9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UodGFyZ2V0KTtcbiAgICAgICAgICBlbmRKc2lpVGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh3b3JrZXJzLm1hcCgoZm4pID0+IGZuKCkpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlcG9ydFRlbGVtZXRyeSh7XG4gICAgICAgIHRyYWNraW5nUGF5bG9hZDogdGFyZ2V0LnRyYWNraW5nUGF5bG9hZCxcbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IHRhcmdldC50YXJnZXRMYW5ndWFnZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzUHl0aG9uVGFyZ2V0KSB7XG4gICAgICBjb25zdCBlbmRQeXRob25UaW1lciA9IGxvZ1RpbWVzcGFuKFwiUHl0aG9uIHBvc3QtcHJvY2Vzc2luZ1wiKTtcbiAgICAgIC8vIFJlbW92ZSBmcm9tIC4gaW1wb3J0IC4uLiBzdGF0ZW1lbnRzIGZyb20gcm9vdCBsZXZlbCBfX2luaXRfXy5weVxuICAgICAgLy8gVGhpcyByZW1vdmVzIHJvb3QtbGV2ZWwgaW1wb3J0cyBvZiBuYW1lc3BhY2VzLCBidXQgc2F2ZXMgMjVzIHN5bnRoIHRpbWUgZm9yIHRoZSBhd3MgcHJvdmlkZXIgYWxvbmVcbiAgICAgIGNvbnN0IGFsbEluaXRQeVBhdGhzID0gZ2xvYlxuICAgICAgICAuc3luYyhcIioqL19faW5pdF9fLnB5XCIsIHtcbiAgICAgICAgICBjd2Q6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICB9KVxuICAgICAgICAvLyBzb3J0IGJ5IGRlcHRoLCBzbyB3ZSBzdGFydCB3aXRoIHRoZSBzaGFsbG93ZXN0IGZpbGVzXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnNwbGl0KFwiL1wiKS5sZW5ndGggLSBiLnNwbGl0KFwiL1wiKS5sZW5ndGgpO1xuXG4gICAgICBjb25zdCB2aXNpdGVkRGlyZWN0b3JpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGluaXRQeVBhdGggb2YgYWxsSW5pdFB5UGF0aHMpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5UGF0aCA9IHBhdGguZGlybmFtZShpbml0UHlQYXRoKTtcbiAgICAgICAgaWYgKHZpc2l0ZWREaXJlY3Rvcmllcy5zb21lKChkaXIpID0+IGRpcmVjdG9yeVBhdGguc3RhcnRzV2l0aChkaXIpKSkge1xuICAgICAgICAgIC8vIHdlIGFscmVhZHkgcHJvY2Vzc2VkIHRoaXMgZGlyZWN0b3J5XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmlzaXRlZERpcmVjdG9yaWVzLnB1c2goZGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgY29uc3QgYWJzb2x1dGVJbml0UHlQYXRoID0gcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBpbml0UHlQYXRoKTtcbiAgICAgICAgY29uc3QgaW5pdFB5ID0gYXdhaXQgZnMucmVhZEZpbGUoYWJzb2x1dGVJbml0UHlQYXRoLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGluaXRQeVdpdGhvdXRJbXBvcnRzID0gaW5pdFB5LnJlcGxhY2UoL2Zyb20gXFwuIGltcG9ydCAuKlxcbi9nLCBcIlwiKTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKGFic29sdXRlSW5pdFB5UGF0aCwgaW5pdFB5V2l0aG91dEltcG9ydHMpO1xuICAgICAgfVxuXG4gICAgICBlbmRQeXRob25UaW1lcigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZShvdXRkaXIgPSB0aGlzLmNvZGVNYWtlck91dGRpcikge1xuICAgIGF3YWl0IHRoaXMuY29kZS5zYXZlKG91dGRpcik7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0phdmFzY3JpcHRUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuVFlQRVNDUklQVDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzUHl0aG9uVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlBZVEhPTjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzSmF2YVRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5KQVZBO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNDc2hhcnBUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuQ1NIQVJQO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNHb1RhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5HTztcbiAgfVxufVxuXG4vKipcbiAqIHNlYXJjaGVzIGZvciB0aGUgY2xvc2VzdCBgZ28ubW9kYCBmaWxlIGFuZCByZXR1cm5zIHRoZSBuZXN0ZWQgZ28gbW9kdWxlIG5hbWUgZm9yIGBkaXJgXG4gKiBlLmcuICgvZGlyLy5nZW4vKSA9PiBjZGsudGYvc3RhY2svLmdlbiBpZiB0aGUgcGFyZW50IGRpciBvZiAuZ2VuIGhhcyBhIGdvLm1vZCBmb3IgXCJtb2R1bGUgY2RrLnRmL3N0YWNrXCJcbiAqXG4gKiBAcGFyYW0gZGlyIHRoZSBkaXJlY3RvcnkgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tIChzZWFyY2hlcyB1cHdhcmRzKVxuICogQHJldHVybnMgdGhlIHBhY2thZ2UgbmFtZSBmb3IgYGRpcmBcbiAqIEB0aHJvd3MgYW4gRXJyb3IgaWYgbm8gZ28ubW9kIHdhcyBmb3VuZFxuICovXG5leHBvcnQgY29uc3QgZGV0ZXJtaW5lR29Nb2R1bGVOYW1lID0gYXN5bmMgKGRpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgbGV0IHByZXZpb3VzRGlyO1xuICBsZXQgY3VycmVudERpciA9IHBhdGgucmVzb2x2ZShkaXIpO1xuXG4gIGRvIHtcbiAgICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihjdXJyZW50RGlyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIGRpcmVjdG9yeSBtaWdodCBub3QgZXhpc3QgeWV0LCBidXQgd2Ugc3RpbGwgd2FsayB1cHdhcmRzIGZyb20gdGhlcmUsIHNvIGlnbm9yZSAnRU5PRU5UJ1xuICAgICAgaWYgKGUuY29kZSAhPT0gXCJFTk9FTlRcIikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmlsZXMuaW5jbHVkZXMoXCJnby5tb2RcIikpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBwYXRoLnJlc29sdmUoY3VycmVudERpciwgXCJnby5tb2RcIik7XG4gICAgICBjb25zdCBnb21vZCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGUpO1xuICAgICAgY29uc3QgbWF0Y2ggPSAvXm1vZHVsZVxccyooXFxTKilcXHMqJC9tLmV4ZWMoZ29tb2QudG9TdHJpbmcoKSk7XG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0pIHtcbiAgICAgICAgY29uc3QgY2hpbGRkaXIgPSBwYXRoLnJlbGF0aXZlKGN1cnJlbnREaXIsIGRpcikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7IC8vIHJlcGxhY2UgJ1xcJyB3aXRoICcvJyBmb3Igd2luZG93cyBwYXRoc1xuICAgICAgICByZXR1cm4gY2hpbGRkaXIubGVuZ3RoID4gMCA/IGAke21hdGNoWzFdfS8ke2NoaWxkZGlyfWAgOiBtYXRjaFsxXTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHJvb3QgR28gbW9kdWxlIG5hbWUuIEZvdW5kICR7ZmlsZX0gYnV0IGZhaWxlZCB0byByZWdleCBtYXRjaCB0aGUgbW9kdWxlIG5hbWUgZGlyZWN0aXZlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGdvIHVwIG9uZSBkaXJlY3RvcnkuIEFzIGRpcm5hbWUoJy8nKSB3aWxsIHJldHVybiAnLycgd2UgY2FuY2VsIHRoZSBsb29wXG4gICAgLy8gYXMgc29vbiBhcyB0aGUgZGlyIGRvZXMgbm90IGNoYW5nZSBhbnltb3JlLlxuICAgIHByZXZpb3VzRGlyID0gY3VycmVudERpcjtcbiAgICBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICB9IHdoaWxlIChjdXJyZW50RGlyICE9PSBwcmV2aW91c0Rpcik7XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSByb290IEdvIG1vZHVsZSBuYW1lLiBObyBnby5tb2QgZm91bmQgaW4gJHtkaXJ9IGFuZCBhbnkgcGFyZW50IGRpcmVjdG9yaWVzYCxcbiAgKTtcbn07XG4iXX0=
|
|
650
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1tYWtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZXQvY29uc3RydWN0cy1tYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxR0Esb0RBOEtDO0FBblJELCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNENBQStDO0FBQy9DLDRDQVl3QjtBQUN4Qiw0Q0FJd0I7QUFDeEIsdUVBQTRFO0FBQzVFLG1FQUErRDtBQUMvRCwrQkFBNEI7QUFDNUIsNERBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsY0FBSSxFQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDaEUsR0FBRyxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQUM7SUFDSCwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUVpQixDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxnRkFBZ0Y7SUFDaEYsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFD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QUFDO2dCQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMseUNBQXlDO2dCQUM5RyxPQUFPLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHNEQUFzRCxJQUFJLHNEQUFzRCxDQUNqSCxDQUFDO1FBQ0osQ0FBQztRQUNELDBFQUEwRTtRQUMxRSw4Q0FBOEM7UUFDOUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUN6QixVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxDQUFDLFFBQVEsVUFBVSxLQUFLLFdBQVcsRUFBRTtJQUVyQyxNQUFNLElBQUksS0FBSyxDQUNiLG1FQUFtRSxHQUFHLDZCQUE2QixDQUNwRyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBbkNXLFFBQUEscUJBQXFCLHlCQW1DaEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDb2RlTWFrZXIgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBleGVjLCBta2R0ZW1wIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQge1xuICBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludCxcbiAgbG9nZ2VyLFxuICBsb2dUaW1lc3BhbixcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyVGFyZ2V0LFxuICBQcm92aWRlclNjaGVtYSxcbiAgTW9kdWxlU2NoZW1hLFxuICBFcnJvcnMsXG4gIHR5cGUgTGFuZ3VhZ2VPcHRpb25zLFxuICB0eXBlIFRlcnJhZm9ybVRhcmdldFZlcnNpb25zLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7XG4gIERJU1BMQVlfVkVSU0lPTixcbiAgTGFuZ3VhZ2UsXG4gIHJlZ2lzdHJ5Rm9yVGFyZ2V0VmVyc2lvbnMsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3IgfSBmcm9tIFwiLi9nZW5lcmF0b3IvcHJvdmlkZXItZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBNb2R1bGVHZW5lcmF0b3IgfSBmcm9tIFwiLi9nZW5lcmF0b3IvbW9kdWxlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gXCJnbG9iXCI7XG5pbXBvcnQgeyByZWFkU2NoZW1hIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1zY2hlbWFcIjtcblxuY29uc3QgcGFjbWFrTW9kdWxlID0gcmVxdWlyZS5yZXNvbHZlKFwianNpaS1wYWNtYWsvYmluL2pzaWktcGFjbWFrXCIpO1xuY29uc3QganNpaU1vZHVsZSA9IHJlcXVpcmUucmVzb2x2ZShcImpzaWkvYmluL2pzaWlcIik7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlsZXMgYG5wbSBwYWNrYCB3b3VsZCBwdWJsaXNoIGZvciB0aGUgcGFja2FnZSBhdCBgZGlyYCwgYXMgcGF0aHMgcmVsYXRpdmUgdG8gYGRpcmAuIFRoaXMgaXMgdGhlIHNldFxuICoganNpaSBuZWVkcyB0byBjb21waWxlIGFnYWluc3QgYSBkZXBlbmRlbmN5IOKAlCBpdHMgc291cmNlcyBhbmQgZGVjbGFyZWQgbWV0YWRhdGEg4oCUIGFuZCBleGNsdWRlcyBidWlsZCBvdXRwdXRzXG4gKiAoYGRpc3RgLCBgLnBhY2stc3RhZ2luZ2AsIGBub2RlX21vZHVsZXNgLCB0c2J1aWxkaW5mbywgLi4uKSB0aGF0IGEgYmxhbmtldCBkaXJlY3RvcnkgY29weSB3b3VsZCBvdGhlcndpc2UgcHVsbCBpbi5cbiAqXG4gKiBAcGFyYW0gZGlyIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgcGFja2FnZSBkaXJlY3RvcnkgdG8gaW5zcGVjdCAobXVzdCBjb250YWluIGEgcGFja2FnZS5qc29uKS5cbiAqIEByZXR1cm5zIFB1Ymxpc2hhYmxlIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIGBkaXJgLCB3aXRoIGAuLmAtZXNjYXBlIHBhdGhzIChmcm9tIGZvbGxvd2luZyBwbnBtIHN5bWxpbmtzKSBkcm9wcGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUHVibGlzaGFibGVGaWxlcyhkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcIm5wbVwiLCBbXCJwYWNrXCIsIFwiLS1kcnktcnVuXCIsIFwiLS1qc29uXCJdLCB7XG4gICAgY3dkOiBkaXIsXG4gIH0pO1xuICAvLyBucG0gPD0xMSByZXBvcnRzIGFuIGFycmF5IG9mIHBhY2tlZCBwYWNrYWdlczsgbnBtID49MTIgcmVwb3J0cyBhbiBvYmplY3RcbiAgLy8ga2V5ZWQgYnkgcGFja2FnZSBuYW1lLiBBY2NlcHQgZWl0aGVyIHNvIHRoZSBidWlsZCBpcyBucG0tdmVyc2lvbiBhZ25vc3RpYy5cbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShzdGRvdXQpIGFzXG4gICAgfCBBcnJheTx7IGZpbGVzOiB7IHBhdGg6IHN0cmluZyB9W10gfT5cbiAgICB8IFJlY29yZDxzdHJpbmcsIHsgZmlsZXM6IHsgcGF0aDogc3RyaW5nIH1bXSB9PjtcbiAgY29uc3QgcGFja0luZm8gPSBBcnJheS5pc0FycmF5KHBhcnNlZCkgPyBwYXJzZWRbMF0gOiBPYmplY3QudmFsdWVzKHBhcnNlZClbMF07XG4gIC8vIERyb3AgYC4uYC1lc2NhcGUgcGF0aHMgbnBtIGVtaXRzIHdoZW4gZm9sbG93aW5nIHBucG0ncyBub2RlX21vZHVsZXMgc3ltbGlua3MuXG4gIHJldHVybiBwYWNrSW5mby5maWxlcy5tYXAoKGYpID0+IGYucGF0aCkuZmlsdGVyKChwKSA9PiAhcC5pbmNsdWRlcyhcIi4uXCIpKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUpTSUlPcHRpb25zIHtcbiAgZW50cnlwb2ludDogc3RyaW5nO1xuICBkZXBzOiBzdHJpbmdbXTtcbiAgbW9kdWxlS2V5OiBzdHJpbmc7XG4gIGV4cG9ydHM/OiBSZWNvcmQ8c3RyaW5nLCBFeHBvcnREZWZpbml0aW9uIHwgc3RyaW5nPjtcbiAganNpaT86IEpzaWlPdXRwdXRPcHRpb25zO1xuICBweXRob24/OiBQeXRob25PdXRwdXRPcHRpb25zO1xuICBqYXZhPzogSmF2YU91dHB1dE9wdGlvbnM7XG4gIGNzaGFycD86IENTaGFycE91dHB1dE9wdGlvbnM7XG4gIGdvbGFuZz86IEdvTGFuZ091dHB1dE9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNpaU91dHB1dE9wdGlvbnMge1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0aG9uT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSmF2YU91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgcGFja2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENTaGFycE91dHB1dE9wdGlvbnMge1xuICBvdXRkaXI6IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR29MYW5nT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG4gIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcGFja2FnZXMuaHRtbCNjb25kaXRpb25hbC1leHBvcnRzIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0RGVmaW5pdGlvbiB7XG4gIG5vZGU/OiBzdHJpbmc7XG4gIGltcG9ydD86IHN0cmluZztcbiAgcmVxdWlyZT86IHN0cmluZztcbiAgZGVmYXVsdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlSnNpaUxhbmd1YWdlKFxuICBjb2RlOiBDb2RlTWFrZXIsXG4gIG9wdHM6IEdlbmVyYXRlSlNJSU9wdGlvbnMsXG4gIG91dHB1dFBhdGg6IHN0cmluZyxcbiAgZGlzYWxsb3dlZEZpbGVHbG9iczogc3RyaW5nW10gPSBbXSxcbikge1xuICBhd2FpdCBta2R0ZW1wKGFzeW5jIChzdGFnaW5nKSA9PiB7XG4gICAgLy8gdGhpcyBpcyBub3QgdHlwZXNjcmlwdCwgc28gd2UgZ2VuZXJhdGUgaW4gYSBzdGFnaW5nIGRpcmVjdG9yeSBhbmRcbiAgICAvLyB1c2UganNpaS1zcmNtYWsgdG8gY29tcGlsZSBhbmQgZXh0cmFjdCB0aGUgbGFuZ3VhZ2Utc3BlY2lmaWMgc291cmNlXG4gICAgLy8gaW50byBvdXIgcHJvamVjdC5cbiAgICBhd2FpdCBjb2RlLnNhdmUoc3RhZ2luZyk7XG5cbiAgICAvLyBhcyB0aGUgYWJvdmUgZ2VuZXJhdGVkIHRoZSBUeXBlc2NyaXB0IGNvZGUgZm9yIGFsbCBwcm92aWRlcnMgYW5kIG1vZHVsZXMsXG4gICAgLy8gd2UgbmVlZCB0byBmaWx0ZXIgb3V0IHRoZSBvbmVzIHdlIGRvbid0IG5lZWQgc28gdGhleSBkb24ndCBlbmQgdXAgaW4gdGhlIEpTSUkgYnVuZGxlIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgY29uc3QgZmlsZXNUb0RlbGV0ZSA9IGRpc2FsbG93ZWRGaWxlR2xvYnMuZmxhdE1hcCgocGF0dGVybikgPT5cbiAgICAgIGdsb2Iuc3luYyhwYXR0ZXJuLCB7IGN3ZDogc3RhZ2luZyB9KSxcbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsZXNUb0RlbGV0ZS5tYXAoKGZpbGUpID0+IGZzLnJlbW92ZShwYXRoLmpvaW4oc3RhZ2luZywgZmlsZSkpKSxcbiAgICApO1xuXG4gICAgLy8gQ29tcGlsZSB3aXRoIEpTSUlcbiAgICBjb25zdCBqc2lpQXJncyA9IFtcIi0tc2lsZW5jZS13YXJuaW5nc1wiLCBcInJlc2VydmVkLXdvcmRcIl07XG4gICAgY29uc3QganNpaUVudHJ5cG9pbnQgPSBvcHRzLmVudHJ5cG9pbnQ7XG4gICAgY29uc3QgYmFzZXBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBwYXRoLmRpcm5hbWUoanNpaUVudHJ5cG9pbnQpLFxuICAgICAgcGF0aC5iYXNlbmFtZShqc2lpRW50cnlwb2ludCwgXCIudHNcIiksXG4gICAgKTtcblxuICAgIGNvbnN0IG1vZHVsZUtleSA9IG9wdHMubW9kdWxlS2V5LnJlcGxhY2UoL1xcLi9nLCBcIlwiKS5yZXBsYWNlKC9cXC8vZywgXCJcIik7XG4gICAgY29uc3QgbW9kdWxlRGlycyA9IG9wdHMuZGVwcztcbiAgICBjb25zdCB0YXJnZXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgY29uc3QgZGVwczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGZvciAoY29uc3QgZGlyIG9mIG1vZHVsZURpcnMpIHtcbiAgICAgIC8vIHJlYWQgbW9kdWxlIG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGZzLnJlYWRKc29uKHBhdGguam9pbihkaXIsIFwicGFja2FnZS5qc29uXCIpKTtcbiAgICAgIGNvbnN0IG1vZHVsZU5hbWU6IHN0cmluZyA9IG1ldGFkYXRhLm5hbWU7XG4gICAgICBjb25zdCBtb2R1bGVWZXJzaW9uOiBzdHJpbmcgPSBtZXRhZGF0YS52ZXJzaW9uO1xuXG4gICAgICBjb25zdCB0YXJnZXRkaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIHBhdGguam9pbihzdGFnaW5nLCBcIm5vZGVfbW9kdWxlc1wiKSxcbiAgICAgICAgbW9kdWxlTmFtZSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAodGFyZ2V0ZGlyKTtcbiAgICAgIC8vIENvcHkgb25seSB0aGUgZGVwJ3MgcHVibGlzaGFibGUgZmlsZXMgKHdoYXQgYG5wbSBwYWNrYCB3b3VsZCBzaGlwKSBpbnRvIHRoZSBqc2lpIGNvbXBpbGUgYnVuZGxlLlxuICAgICAgZm9yIChjb25zdCByZWxQYXRoIG9mIGF3YWl0IHJlc29sdmVQdWJsaXNoYWJsZUZpbGVzKGRpcikpIHtcbiAgICAgICAgY29uc3Qgc3JjID0gcGF0aC5qb2luKGRpciwgcmVsUGF0aCk7XG4gICAgICAgIGNvbnN0IGRzdCA9IHBhdGguam9pbih0YXJnZXRkaXIsIHJlbFBhdGgpO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5kaXJuYW1lKGRzdCkpO1xuICAgICAgICBhd2FpdCBmcy5jb3B5KHNyYywgZHN0LCB7IGRlcmVmZXJlbmNlOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdG8gXCJkZXBzXCIgYW5kIFwicGVlciBkZXBzXCJcbiAgICAgIGlmICghbW9kdWxlTmFtZS5zdGFydHNXaXRoKFwiQHR5cGVzL1wiKSkge1xuICAgICAgICBkZXBzW21vZHVsZU5hbWVdID0gbW9kdWxlVmVyc2lvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcGtnID0ge1xuICAgICAgbmFtZTogbW9kdWxlS2V5LFxuICAgICAgdmVyc2lvbjogXCIwLjAuMFwiLFxuICAgICAgYXV0aG9yOiBcImdlbmVyYXRlZEBnZW5lcmF0ZWQuY29tXCIsXG4gICAgICBtYWluOiBgJHtiYXNlcGF0aH0uanNgLFxuICAgICAgdHlwZXM6IGAke2Jhc2VwYXRofS5kLnRzYCxcbiAgICAgIGxpY2Vuc2U6IFwiVU5MSUNFTlNFRFwiLFxuICAgICAgcmVwb3NpdG9yeTogeyB1cmw6IFwiaHR0cDovL2dlbmVyYXRlZFwiLCB0eXBlOiBcImdpdFwiIH0sXG4gICAgICBqc2lpOiB7XG4gICAgICAgIG91dGRpcjogXCJkaXN0XCIsXG4gICAgICAgIHRhcmdldHM6IHRhcmdldHMsXG4gICAgICB9LFxuICAgICAgZGVwZW5kZW5jaWVzOiBkZXBzLFxuICAgICAgcGVlckRlcGVuZGVuY2llczogZGVwcyxcbiAgICB9O1xuXG4gICAgaWYgKG9wdHMuZXhwb3J0cykge1xuICAgICAgKHBrZyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KS5leHBvcnRzID0gb3B0cy5leHBvcnRzO1xuICAgIH1cbiAgICBpZiAob3B0cy5weXRob24pIHtcbiAgICAgIHRhcmdldHMucHl0aG9uID0ge1xuICAgICAgICBkaXN0TmFtZTogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgbW9kdWxlOiBvcHRzLnB5dGhvbi5tb2R1bGVOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5qYXZhKSB7XG4gICAgICB0YXJnZXRzLmphdmEgPSB7XG4gICAgICAgIHBhY2thZ2U6IG9wdHMuamF2YS5wYWNrYWdlLFxuICAgICAgICBtYXZlbjoge1xuICAgICAgICAgIGdyb3VwSWQ6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgICAgYXJ0aWZhY3RJZDogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuY3NoYXJwKSB7XG4gICAgICB0YXJnZXRzLmRvdG5ldCA9IHtcbiAgICAgICAgbmFtZXNwYWNlOiBvcHRzLmNzaGFycC5uYW1lc3BhY2UsXG4gICAgICAgIHBhY2thZ2VJZDogb3B0cy5jc2hhcnAubmFtZXNwYWNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5nb2xhbmcpIHtcbiAgICAgIHRhcmdldHMuZ28gPSB7XG4gICAgICAgIG1vZHVsZU5hbWU6IG9wdHMuZ29sYW5nLm1vZHVsZU5hbWUsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBvcHRzLmdvbGFuZy5wYWNrYWdlTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgcGF0aC5qb2luKHN0YWdpbmcsIFwicGFja2FnZS5qc29uXCIpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkocGtnLCB1bmRlZmluZWQsIDIpLFxuICAgICk7XG5cbiAgICBjb25zdCBlbmRKc2lpVGltZXIgPSBsb2dUaW1lc3BhbihcImpzaWlcIik7XG4gICAgYXdhaXQgZXhlYyhqc2lpTW9kdWxlLCBqc2lpQXJncywge1xuICAgICAgY3dkOiBzdGFnaW5nLFxuICAgIH0pO1xuICAgIGVuZEpzaWlUaW1lcigpO1xuXG4gICAgLy8gZXh0cmFjdCAuanNpaSBpZiByZXF1ZXN0ZWRcbiAgICBpZiAob3B0cy5qc2lpKSB7XG4gICAgICBhd2FpdCBmcy5jb3B5KHBhdGguam9pbihzdGFnaW5nLCBcIi5qc2lpXCIpLCBvcHRzLmpzaWkucGF0aCk7XG4gICAgfVxuXG4gICAgLy8gcnVuIHBhY21hayB0byBnZW5lcmF0ZSBjb2RlXG4gICAgY29uc3QgZW5kSnNpaVBhY21ha1RpbWVyID0gbG9nVGltZXNwYW4oXCJqc2lpLXBhY21ha1wiKTtcbiAgICBhd2FpdCBleGVjKHBhY21ha01vZHVsZSwgW1wiLS1jb2RlLW9ubHlcIl0sIHsgY3dkOiBzdGFnaW5nIH0pO1xuICAgIGVuZEpzaWlQYWNtYWtUaW1lcigpO1xuXG4gICAgaWYgKG9wdHMucHl0aG9uKSB7XG4gICAgICBjb25zdCByZWxkaXIgPSBvcHRzLnB5dGhvbi5tb2R1bGVOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7IC8vIGpzaWkgcmVwbGFjZXMgXCIuXCIgd2l0aCBcIi9cIlxuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJkaXN0L3B5dGhvbi9zcmNcIiwgcmVsZGlyKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5weXRob24ub3V0ZGlyLCByZWxkaXIpO1xuICAgICAgYXdhaXQgZnMubW92ZShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuamF2YSkge1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvamF2YS9zcmMvXCIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmphdmEub3V0ZGlyLCBcInNyYy9cIik7XG4gICAgICAvLyBQcmUtY3JlYXRlIHNoYXJlZCBwYWNrYWdlIGRpcmVjdG9yaWVzLlxuICAgICAgY29uc3QgcGFja2FnZURpciA9IG9wdHMuamF2YS5wYWNrYWdlLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5qb2luKHRhcmdldCwgXCJtYWluL2phdmFcIiwgcGFja2FnZURpcikpO1xuICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguam9pbih0YXJnZXQsIFwibWFpbi9yZXNvdXJjZXNcIiwgcGFja2FnZURpcikpO1xuICAgICAgYXdhaXQgZnMuY29weShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmNzaGFycCkge1xuICAgICAgY29uc3QgcmVsZGlyID0gb3B0cy5jc2hhcnAubmFtZXNwYWNlO1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvZG90bmV0L1wiLCByZWxkaXIpKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLmNzaGFycC5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5nb2xhbmcpIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMuZ29sYW5nLnBhY2thZ2VOYW1lO1xuICAgICAgY29uc3Qgc291cmNlID0gcGF0aC5yZXNvbHZlKHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvZ28vXCIsIHJlbGRpcikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuZ29sYW5nLm91dGRpciwgcmVsZGlyKTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgICAgLy8gcmVtb3ZlIGdvLm1vZCBhcyB0aGlzIHdvdWxkIG1ha2UgaXQgYSBzdWJtb2R1bGVcbiAgICAgIGF3YWl0IGZzLnJlbW92ZShwYXRoLmpvaW4odGFyZ2V0LCBcImdvLm1vZFwiKSk7XG4gICAgfVxuXG4gICAgW1widmVyc2lvbnMuanNvblwiLCBcImNvbnN0cmFpbnRzLmpzb25cIl0uZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZnMuY29weVN5bmMoXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKHN0YWdpbmcsIGZpbGUpLFxuICAgICAgICAgIHBhdGgucmVzb2x2ZShvdXRwdXRQYXRoLCBmaWxlKSxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gY29weSAke2ZpbGV9OiAke2V9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG50eXBlIENvbnN0cmFpbnRGaWxlID0ge1xuICBwcm92aWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNka3RmOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGRlY2xhcmVkIHRhcmdldFZlcnNpb25zIChjZGt0Zi5qc29uKS4gUmVhZCBiYWNrIGJ5XG4gICAqIGBmaWx0ZXJBbHJlYWR5R2VuZXJhdGVkYCB0byBjb21wYXJlIHJlZ2lzdHJ5ICpjbGFzc2VzKjogd2hpY2ggcmVnaXN0cnkgdGhlXG4gICAqIGdlbmVyYXRlZCBkb2NzIGxpbmtzIHBvaW50IGF0IGZvbGxvd3MgZnJvbSB0aGlzLCBzbyBvdXRwdXQgcHJvZHVjZWQgZm9yIHRoZVxuICAgKiBvdGhlciBjbGFzcyBpcyBzdGFsZS4gVGhlIHZlcnNpb24gcmFuZ2VzIHRoZW1zZWx2ZXMgZG8gbm90IGFmZmVjdCB0aGVcbiAgICogZ2VuZXJhdGVkIHN1cmZhY2UgLSB0aGUgZnVsbCBzdXJmYWNlIGlzIGFsd2F5cyBnZW5lcmF0ZWQgYW5kIG5hcnJvd2luZ1xuICAgKiBoYXBwZW5zIGF0IHN5bnRoIC0gc28gYSByYW5nZSBtb3Zpbmcgd2l0aGluIGEgY2xhc3MgaXMgbm90IGEgcmVhc29uIHRvXG4gICAqIHJlZ2VuZXJhdGUuXG4gICAqL1xuICB0YXJnZXRWZXJzaW9ucz86IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zO1xuICAvKipcbiAgICogSWRlbnRpdHkgb2YgdGhlIENMSSAodGVycmFmb3JtL29wZW50b2Z1KSB0aGF0IGZldGNoZWQgdGhlIHNjaGVtYXMgdXNlZFxuICAgKiBmb3IgdGhpcyBnZW5lcmF0aW9uLCBzdGFtcGVkIGZvciBkaWFnbm9zdGljcy9jYWNoZSBkZWJ1Z2dpbmcuXG4gICAqL1xuICBjbGk/OiB7IG5hbWU/OiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZTtcbiAgcmVhZG9ubHkgY29kZU1ha2VyT3V0cHV0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGpzaWlQYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBhdGggdG8gY29weSB0aGUgb3V0cHV0IC5qc2lpIGZpbGUuXG4gICAqIEBkZWZhdWx0IC0ganNpaSBmaWxlIGlzIG5vdCBlbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRKc2lpPzogc3RyaW5nO1xuICAvKipcbiAgICogTGFuZ3VhZ2Utc3BlY2lmaWMgY29kZSBnZW5lcmF0aW9uIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZU9wdGlvbnM/OiBMYW5ndWFnZU9wdGlvbnM7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGRlY2xhcmVkIHRhcmdldFZlcnNpb25zIChjZGt0Zi5qc29uKS4gVXNlZCB0byBkcml2ZSB0aGVcbiAgICogZmV0Y2gtdGltZSBlbWlzc2lvbi1nYXAgd2FybmluZyBpbiBAY2RrdG4vcHJvdmlkZXItc2NoZW1hIGFuZCB0byBzdGFtcFxuICAgKiB0aGUgZ2VuZXJhdGVkIGNvbnN0cmFpbnRzLmpzb24gZm9yIGRpYWdub3N0aWNzLiBEb2VzIE5PVCBmaWx0ZXIgY29kZWdlbjpcbiAgICogdGhlIGZ1bGwgc3VyZmFjZSBpcyBhbHdheXMgZ2VuZXJhdGVkLCBuYXJyb3dpbmcgaGFwcGVucyBhdCBzeW50aC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25zdHJ1Y3RzTWFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVNYWtlck91dGRpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcjtcbiAgcHJpdmF0ZSB2ZXJzaW9uczogeyBbcHJvdmlkZXJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbiAgLyoqIFJlc291cmNlIGRpcmVjdG9yeSBuYW1lcyBlbWl0dGVkIHBlciBwcm92aWRlciBmb2xkZXIgZHVyaW5nIHRoaXMgcnVuICovXG4gIHB1YmxpYyBlbWl0dGVkUmVzb3VyY2VGb2xkZXJzOiB7IFtwcm92aWRlck5hbWU6IHN0cmluZ106IHN0cmluZ1tdIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBHZXRPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hQ2FjaGVQYXRoPzogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVwb3J0VGVsZW1ldHJ5OiAocGF5bG9hZDoge1xuICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IHN0cmluZztcbiAgICAgIHRyYWNraW5nUGF5bG9hZDogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9KSA9PiBQcm9taXNlPHZvaWQ+ID0gYXN5bmMgKCkgPT4ge30sXG4gICkge1xuICAgIHRoaXMuY29kZU1ha2VyT3V0ZGlyID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQpO1xuICAgIGZzLm1rZGlycFN5bmModGhpcy5jb2RlTWFrZXJPdXRkaXIpO1xuICAgIHRoaXMuY29kZSA9IG5ldyBDb2RlTWFrZXIoKTtcbiAgICB0aGlzLnZlcnNpb25zID0ge307XG4gICAgdGhpcy5lbWl0dGVkUmVzb3VyY2VGb2xkZXJzID0ge307XG4gIH1cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVR5cGVzY3JpcHRQcm92aWRlcihcbiAgICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICAgIHNjaGVtYTogUHJvdmlkZXJTY2hlbWEsXG4gICkge1xuICAgIGNvbnN0IGVuZFRTVGltZXIgPSBsb2dUaW1lc3BhbihgR2VuZXJhdGUgVHlwZXNjcmlwdCBmb3IgJHt0YXJnZXQubmFtZX1gKTtcbiAgICBjb25zdCBnZW5lcmF0b3IgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJHZW5lcmF0b3IodGhpcy5jb2RlLCBzY2hlbWEsIHtcbiAgICAgIGltcG9ydEV4dGVuc2lvbjogdGhpcy5vcHRpb25zLmxhbmd1YWdlT3B0aW9ucz8uaW1wb3J0RXh0ZW5zaW9uLFxuICAgICAgdGFyZ2V0VmVyc2lvbnM6IHRoaXMub3B0aW9ucy50YXJnZXRWZXJzaW9ucyxcbiAgICB9KTtcbiAgICBnZW5lcmF0b3IuZ2VuZXJhdGUodGFyZ2V0KTtcblxuICAgIHRoaXMudmVyc2lvbnMgPSB7IC4uLnRoaXMudmVyc2lvbnMsIC4uLmdlbmVyYXRvci52ZXJzaW9ucyB9O1xuICAgIHRoaXMuZW1pdHRlZFJlc291cmNlRm9sZGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZW1pdHRlZFJlc291cmNlRm9sZGVycyxcbiAgICAgIC4uLmdlbmVyYXRvci5lbWl0dGVkUmVzb3VyY2VGb2xkZXJzLFxuICAgIH07XG4gICAgZW5kVFNUaW1lcigpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbHRlckFscmVhZHlHZW5lcmF0ZWQoXG4gICAgY29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxldCBjb25zdHJhaW50c0ZpbGUgPSBcInt9XCI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0cmFpbnRzRmlsZSA9IGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgICAgICBwYXRoLmpvaW4odGhpcy5jb2RlTWFrZXJPdXRkaXIsIFwiY29uc3RyYWludHMuanNvblwiKSxcbiAgICAgICAgXCJ1dGY4XCIsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYENvdWxkIG5vdCBmaW5kIGNvbnN0cmFpbnRzLmpzb24gZmlsZSB3aGlsZSBmaWx0ZXJpbmc6ICR7ZX0uIFRoaXMgbWVhbnMgbm8gcHJvdmlkZXJzIHdlcmUgZ2VuZXJhdGVkLCBzbyBhbGwgY29uc3RyYWludHMgbmVlZCB0byBiZSBnZW5lcmF0ZWQuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgY29uc3RyYWludHMuanNvbiBmaWxlOiAke2NvbnN0cmFpbnRzRmlsZX1gKTtcblxuICAgIGxldCBwcmV2aW91c0NvbnN0cmFpbnRzOiBQYXJ0aWFsPENvbnN0cmFpbnRGaWxlPiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBwcmV2aW91c0NvbnN0cmFpbnRzID0gSlNPTi5wYXJzZShjb25zdHJhaW50c0ZpbGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQ291bGQgbm90IHBhcnNlIGNvbnN0cmFpbnRzLmpzb24gZmlsZSB3aGlsZSBmaWx0ZXJpbmc6ICR7ZX0uIEdlbmVyYXRpbmcgYWxsIGNvbnN0cmFpbnRzLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBGb3VuZCBwcmV2aW91cyBjb25zdHJhaW50czogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcHJldmlvdXNDb25zdHJhaW50cyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgICl9YCxcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgIXByZXZpb3VzQ29uc3RyYWludHMucHJvdmlkZXJzIHx8XG4gICAgICB0eXBlb2YgcHJldmlvdXNDb25zdHJhaW50cy5wcm92aWRlcnMgIT09IFwib2JqZWN0XCJcbiAgICApIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgcHJvdmlkZXJzIGluIGNvbnN0cmFpbnRzLmpzb24gZmlsZSwgZ2VuZXJhdGluZyBhbGwgY29uc3RyYWludHMuIFRoZSBjb25zdHJhaW50cyBmaWxlIHdhcyAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHByZXZpb3VzQ29uc3RyYWludHMsXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICAyLFxuICAgICAgICApfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c0NvbnN0cmFpbnRzLmNka3RmICE9PSBESVNQTEFZX1ZFUlNJT04pIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgVGhlIENES1ROIHZlcnNpb24gaGFzIGNoYW5nZWQsIGdlbmVyYXRpbmcgYWxsIGNvbnN0cmFpbnRzLiBUaGUgcHJldmlvdXMgdmVyc2lvbiB3YXMgJHtwcmV2aW91c0NvbnN0cmFpbnRzLmNka3RmfSwgdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAke0RJU1BMQVlfVkVSU0lPTn1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZWQgZG9jcyBsaW5rcywgYW5kIHRoZSBwcm9zZSBuYW1pbmcgdGhlIHJlZ2lzdHJ5IGFyb3VuZCB0aGVtLCBmb2xsb3dcbiAgICAvLyB0aGUgcHJvamVjdCdzIGRlY2xhcmVkIHRhcmdldHMsIHNvIG91dHB1dCBmcm9tIHRoZSBvdGhlciByZWdpc3RyeSBjbGFzcyBpc1xuICAgIC8vIHN0YWxlIGV2ZW4gd2hlbiBldmVyeSBwcm92aWRlciB2ZXJzaW9uIHN0aWxsIG1hdGNoZXMuXG4gICAgY29uc3QgcHJldmlvdXNSZWdpc3RyeSA9IHJlZ2lzdHJ5Rm9yVGFyZ2V0VmVyc2lvbnMoXG4gICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLnRhcmdldFZlcnNpb25zLFxuICAgICk7XG4gICAgY29uc3QgY3VycmVudFJlZ2lzdHJ5ID0gcmVnaXN0cnlGb3JUYXJnZXRWZXJzaW9ucyhcbiAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRWZXJzaW9ucyxcbiAgICApO1xuICAgIGlmIChwcmV2aW91c1JlZ2lzdHJ5Lmhvc3RuYW1lICE9PSBjdXJyZW50UmVnaXN0cnkuaG9zdG5hbWUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgVGhlIHRhcmdldCByZWdpc3RyeSBoYXMgY2hhbmdlZCBmcm9tICR7cHJldmlvdXNSZWdpc3RyeS5kaXNwbGF5TmFtZX0gdG8gJHtjdXJyZW50UmVnaXN0cnkuZGlzcGxheU5hbWV9LCBnZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG5cbiAgICBjb25zdCBjb25zdHJhaW50c1RvR2VuZXJhdGUgPSBjb25zdHJhaW50cy5maWx0ZXIoKGNvbnN0cmFpbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbnN0cmFpbnRNYXRjaGVzID1cbiAgICAgICAgcHJldmlvdXNDb25zdHJhaW50cy5wcm92aWRlcnMhW2NvbnN0cmFpbnQuZnFuXSA9PT0gY29uc3RyYWludC52ZXJzaW9uO1xuICAgICAgbGV0IHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZmFsc2U7XG5cbiAgICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlKSB7XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuVFlQRVNDUklQVDpcbiAgICAgICAgICBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5jb2RlTWFrZXJPdXRkaXIsIFwicHJvdmlkZXJzXCIsIGNvbnN0cmFpbnQubmFtZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTpcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6XG4gICAgICAgICAgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgcGF0aC5qb2luKHRoaXMuY29kZU1ha2VyT3V0ZGlyLCBjb25zdHJhaW50Lm5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTGFuZ3VhZ2UuR086XG4gICAgICAgICAgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgcGF0aC5qb2luKFxuICAgICAgICAgICAgICB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgICAgICAgY29uc3RyYWludC5uYW1lc3BhY2UgfHwgXCJoYXNoaWNvcnBcIixcbiAgICAgICAgICAgICAgY29uc3RyYWludC5uYW1lLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm92aWRlckV4aXN0cyA9IGNvbnN0cmFpbnRNYXRjaGVzICYmIHByb3ZpZGVyRm9sZGVyRXhpc3RzO1xuICAgICAgcmV0dXJuICFwcm92aWRlckV4aXN0cztcbiAgICB9KTtcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBDb25zdHJhaW50cyB0byBnZW5lcmF0ZTogJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgY29uc3RyYWludHNUb0dlbmVyYXRlLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gY29uc3RyYWludHNUb0dlbmVyYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVR5cGVzY3JpcHRNb2R1bGUoXG4gICAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gICAgc2NoZW1hOiBNb2R1bGVTY2hlbWEsXG4gICkge1xuICAgIGNvbnN0IGVuZFRTVGltZXIgPSBsb2dUaW1lc3BhbihgR2VuZXJhdGUgVHlwZXNjcmlwdCBmb3IgJHt0YXJnZXQubmFtZX1gKTtcbiAgICB0YXJnZXQuc3BlYyA9IHNjaGVtYTtcbiAgICBuZXcgTW9kdWxlR2VuZXJhdG9yKHRoaXMuY29kZSwgW3RhcmdldF0sIHRoaXMub3B0aW9ucy50YXJnZXRWZXJzaW9ucyk7XG4gICAgZW5kVFNUaW1lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVR5cGVzY3JpcHQoXG4gICAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICAgc2NoZW1hczogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiByZWFkU2NoZW1hPj4sXG4gICkge1xuICAgIGlmICh0YXJnZXQuaXNNb2R1bGUpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYXMubW9kdWxlU2NoZW1hPy5bdGFyZ2V0Lm1vZHVsZUtleV07XG4gICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgYENvdWxkIG5vdCBnZW5lcmF0ZSBzY2hlbWEgZm9yIG1vZHVsZSAke3RhcmdldC5tb2R1bGVLZXl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVR5cGVzY3JpcHRNb2R1bGUoXG4gICAgICAgIHRhcmdldCBhcyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0YXJnZXQuaXNQcm92aWRlcikge1xuICAgICAgaWYgKCFzY2hlbWFzLnByb3ZpZGVyU2NoZW1hKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChgQ291bGQgbm90IGdlbmVyYXRlIHNjaGVtYSBmb3IgcHJvdmlkZXJzYCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVUeXBlc2NyaXB0UHJvdmlkZXIoXG4gICAgICAgIHRhcmdldCBhcyBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgICAgICAgc2NoZW1hcy5wcm92aWRlclNjaGVtYSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gdGFyZ2V0IHR5cGUgdXNlZCB0byBnZW5lcmF0ZSBiaW5kaW5nczogJHt0YXJnZXQubmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBlbWl0cyBhIHZlcnNpb25zLmpzb24gZmlsZSB3aXRoIGEgbWFwIG9mIHRoZSB1c2VkIHZlcnNpb24gZm9yIGVhY2ggcHJvdmlkZXIgZnFwblxuICBwcml2YXRlIHVwZGF0ZVZlcnNpb25zRmlsZShcbiAgICBhbGxvd2VkQ29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVcGRhdGluZyB2ZXJzaW9ucyBmaWxlIHdpdGggZ2VuZXJhdGVkIHZlcnNpb25zICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMudmVyc2lvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfSB3aXRoIGFsbG93ZWQgY29uc3RyYWludHMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYWxsb3dlZENvbnN0cmFpbnRzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBcInZlcnNpb25zLmpzb25cIjtcbiAgICBsZXQgcHJldmlvdXNWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBwcmV2aW91c1ZlcnNpb25zID0gSlNPTi5wYXJzZShcbiAgICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgZmlsZVBhdGgpLCBcInV0ZjhcIiksXG4gICAgICApO1xuXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZWFkIGV4aXN0aW5nIHZlcnNpb25zIGZpbGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNWZXJzaW9ucyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgcmVhZCB2ZXJzaW9ucyBmaWxlLCB0aGlzIGlzIGV4cGVjdGVkIGlmIHRoZXJlIGFyZSBubyBwcmUtZXhpc3RpbmcgbG9jYWwgcHJvdmlkZXJzOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gS2V5cyBhcmUgZnVsbHkgcXVhbGlmaWVkIGFuZCB0aGUgaG9zdCBpcyB3aGljaGV2ZXIgcmVnaXN0cnkgdGhlIGZldGNoaW5nIENMSVxuICAgIC8vIHJlc29sdmVkIGZyb20sIHNvIGEgcHJvdmlkZXIgcmVnZW5lcmF0ZWQgdGhpcyBydW4gY2FuIGFycml2ZSB1bmRlciBhIGRpZmZlcmVudFxuICAgIC8vIGhvc3QgdGhhbiB0aGUgZmlsZSBhbHJlYWR5IGhvbGRzLiBDYXJyeWluZyB0aGUgb2xkIGtleSBmb3J3YXJkIGFzIHdlbGwgd291bGRcbiAgICAvLyBsZWF2ZSB0d28gZW50cmllcyBmb3Igb25lIHByb3ZpZGVyLCBhbmQgdGhlIHN0YWxlIG9uZSBzb3J0cyBmaXJzdC5cbiAgICBjb25zdCByZWdlbmVyYXRlZCA9IG5ldyBTZXQoXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnZlcnNpb25zKS5tYXAoKGZxcG4pID0+XG4gICAgICAgIGZxcG4uc3BsaXQoXCIvXCIpLnNsaWNlKDEpLmpvaW4oXCIvXCIpLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbnMgPSBhbGxvd2VkQ29uc3RyYWludHMucmVkdWNlKChhY2MsIGNvbnN0cmFpbnQpID0+IHtcbiAgICAgIGlmIChyZWdlbmVyYXRlZC5oYXMoY29uc3RyYWludC5mcW4pKSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gT2JqZWN0LmVudHJpZXMocHJldmlvdXNWZXJzaW9ucykuZmluZCgoW25hbWVdKSA9PlxuICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1vcmUgcmVmaW5lZCwgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIG5vd1xuICAgICAgICBuYW1lLmVuZHNXaXRoKGNvbnN0cmFpbnQuZnFuKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICBjb25zdCBbbmFtZSwgdmVyc2lvbl0gPSBwcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbbmFtZV06IHZlcnNpb24gfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgV3JpdGluZyB2ZXJzaW9ucyBmaWxlICgke2ZpbGVQYXRofSk6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHZlcnNpb25zLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKEpTT04uc3RyaW5naWZ5KHsgLi4udmVyc2lvbnMsIC4uLnRoaXMudmVyc2lvbnMgfSwgbnVsbCwgMikpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZW1vdmVGb2xkZXJzVGhhdFNob3VsZE5vdEV4aXN0KFxuICAgIGNvbnN0cmFpbnRzVGhhdFNob3VsZEV4aXN0OiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUmVtb3ZpbmcgcHJvdmlkZXJzIGV4Y2VwdCBmb3IgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3QsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIC8vIEFsbCBsYW5ndWFnZXMgYmVzaWRlcyBUUyBrZWVwIHRoZWlyIHByb3ZpZGVycyBpbiB0aGUgc2FtZSBmb2xkZXJzIGFzIG1vZHVsZXNcbiAgICAvLyB0aGlzIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIHVzIHRvIGRpc3Rpbmd1aXNoIGEgbm8gbG9uZ2VyIHJlcXVpcmVkIHByb3ZpZGVyXG4gICAgLy8gZnJvbSBhIG1hbnVhbGx5IHdyaXR0ZW4gY29uc3RydWN0IG9yIGEgbW9kdWxlXG4gICAgaWYgKCF0aGlzLmlzSmF2YXNjcmlwdFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmaWxlc0luUHJvdmlkZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHByb3ZpZGVyc0ZvbGRlciA9IHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIik7XG4gICAgdHJ5IHtcbiAgICAgIGZpbGVzSW5Qcm92aWRlcnMgPSBhd2FpdCBmcy5yZWFkZGlyKHByb3ZpZGVyc0ZvbGRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRXJyb3IgbGlzdGluZyBmaWxlcyBpbiBwcm92aWRlcnMgZm9sZGVyICcke3Byb3ZpZGVyc0ZvbGRlcn0nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9sZGVycyA9IGZpbGVzSW5Qcm92aWRlcnMuZmlsdGVyKChmaWxlKSA9PlxuICAgICAgZnNcbiAgICAgICAgLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgZmlsZSkpXG4gICAgICAgIC5pc0RpcmVjdG9yeSgpLFxuICAgICk7XG5cbiAgICByZXR1cm4gZm9sZGVycy5mb3JFYWNoKChmb2xkZXIpID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZEV4aXN0ID0gY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3Quc29tZShcbiAgICAgICAgKGNvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQubmFtZSA9PT0gZm9sZGVyLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFzaG91bGRFeGlzdCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFJlbW92aW5nIGZvbGRlciAke2ZvbGRlcn0gZnJvbSBwcm92aWRlcnNgKTtcbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLnJlc29sdmUodGhpcy5jb2RlTWFrZXJPdXRkaXIsIFwicHJvdmlkZXJzXCIsIGZvbGRlcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSByZXNvdXJjZSBkaXJlY3RvcmllcyB1bmRlciBgcHJvdmlkZXJzL2AgdGhhdCB0aGlzIHJ1biBkaWQgbm90IGVtaXQsIHNvIGVhY2ggcHJvdmlkZXIgZm9sZGVyIGhvbGRzXG4gICAqIGV4YWN0bHkgdGhlIHJlc291cmNlcyBpbiB0aGUgdmVyc2lvbiBpdCB3YXMgZ2VuZXJhdGVkIGFnYWluc3QuXG4gICAqXG4gICAqIFdhbGtzIG9ubHkgcHJvdmlkZXJzIHByZXNlbnQgaW4gYGVtaXR0ZWRSZXNvdXJjZUZvbGRlcnNgLCBrZWVwaW5nIGFueSBwcm92aWRlciB0aGlzIHJ1biBza2lwcGVkLiBXaXRoaW4gdGhvc2UsXG4gICAqIHJlbW92ZXMgZXZlcnkgc3ViZGlyZWN0b3J5IG5vdCBlbWl0dGVkIGFuZCBsZWF2ZXMgcHJvdmlkZXItbGV2ZWwgZmlsZXMgKGBpbmRleC50c2AsIGBsYXp5LWluZGV4LnRzYCkgaW4gcGxhY2UuXG4gICAqIERlbGV0ZXMgZmlsZXMsIHNvIGl0IG11c3QgcnVuIGFmdGVyIGBzYXZlKClgIGhhcyB3cml0dGVuIHRoZSBjdXJyZW50IHJ1bidzIG91dHB1dC5cbiAgICpcbiAgICogVHlwZVNjcmlwdCBvbmx5OiBgcHJvdmlkZXJzLzxuYW1lPi88cmVzb3VyY2U+L2AgbWFwcyBvbmUtdG8tb25lIG9udG8gdGhlIGVtaXR0ZWQgaW5kZXggZXhwb3J0cy4gT3RoZXIgbGFuZ3VhZ2VzXG4gICAqIGNvLWxvY2F0ZSBwcm92aWRlcnMgYW5kIG1vZHVsZXMgaW4gdGhlIHNhbWUgZm9sZGVycywgd2hpY2ggbWFrZXMgYSBkcm9wcGVkIHJlc291cmNlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYVxuICAgKiBoYW5kLXdyaXR0ZW4gY29uc3RydWN0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbW92ZU9ycGhhbmVkUmVzb3VyY2VGb2xkZXJzKCkge1xuICAgIGlmICghdGhpcy5pc0phdmFzY3JpcHRUYXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtwcm92aWRlciwgZW1pdHRlZEZvbGRlcnNdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgdGhpcy5lbWl0dGVkUmVzb3VyY2VGb2xkZXJzLFxuICAgICkpIHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyRm9sZGVyID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgXCJwcm92aWRlcnNcIixcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICApO1xuXG4gICAgICBsZXQgZW50cmllczogc3RyaW5nW10gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVudHJpZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHByb3ZpZGVyRm9sZGVyKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBDb3VsZCBub3QgbGlzdCByZXNvdXJjZSBmb2xkZXJzIGluICcke3Byb3ZpZGVyRm9sZGVyfSc6ICR7ZX1gLFxuICAgICAgICApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgU2V0KGVtaXR0ZWRGb2xkZXJzKTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBpZiAoZXhwZWN0ZWQuaGFzKGVudHJ5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50cnlQYXRoID0gcGF0aC5yZXNvbHZlKHByb3ZpZGVyRm9sZGVyLCBlbnRyeSk7XG4gICAgICAgIGlmICghZnMuc3RhdFN5bmMoZW50cnlQYXRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgLy8gTGVhdmUgaW5kZXgudHMgLyBsYXp5LWluZGV4LnRzIGFuZCBhbnkgb3RoZXIgcHJvdmlkZXItbGV2ZWwgZmlsZXMgYWxvbmUuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgYFJlbW92aW5nIG9ycGhhbmVkIHJlc291cmNlIGZvbGRlciAnJHtlbnRyeX0nIGZyb20gcHJvdmlkZXIgJyR7cHJvdmlkZXJ9JzogaXQgd2FzIG5vdCBlbWl0dGVkIGZvciB0aGUgY3VycmVudCBwcm92aWRlciB2ZXJzaW9uYCxcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgZnMucmVtb3ZlKGVudHJ5UGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZW1pdHMgYSBjb25zdHJhaW50cy5qc29uIGZpbGUgd2l0aCBhIG1hcCBvZiB0aGUgdXNlZCBwcm92aWRlciBmcXBucyBhbmQgdmVyc2lvbiBjb25zdHJhaW50c1xuICAvLyB0aGlzIGlzIHVzZWQgZm9yIGNhY2hpbmcgcHVycG9zZXNcbiAgcHJpdmF0ZSBlbWl0Q29uc3RyYWludHNGaWxlKFxuICAgIGFsbG93ZWRDb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgICBwcm92aWRlclNjaGVtYT86IFByb3ZpZGVyU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IFwiY29uc3RyYWludHMuanNvblwiO1xuXG4gICAgY29uc3QgY29udGVudDogQ29uc3RyYWludEZpbGUgPSB7XG4gICAgICBjZGt0ZjogRElTUExBWV9WRVJTSU9OLFxuICAgICAgcHJvdmlkZXJzOiBhbGxvd2VkQ29uc3RyYWludHNcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZnFuLmxvY2FsZUNvbXBhcmUoYi5mcW4pKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChjYXJyeSwgaXRlbSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmNhcnJ5LFxuICAgICAgICAgICAgW2l0ZW0uZnFuXTogaXRlbS52ZXJzaW9uLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zKSB7XG4gICAgICBjb250ZW50LnRhcmdldFZlcnNpb25zID0gdGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zO1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlclNjaGVtYT8uY2xpX25hbWUgfHwgcHJvdmlkZXJTY2hlbWE/LmNsaV92ZXJzaW9uKSB7XG4gICAgICBjb250ZW50LmNsaSA9IHtcbiAgICAgICAgbmFtZTogcHJvdmlkZXJTY2hlbWEuY2xpX25hbWUsXG4gICAgICAgIHZlcnNpb246IHByb3ZpZGVyU2NoZW1hLmNsaV92ZXJzaW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKEpTT04uc3RyaW5naWZ5KGNvbnRlbnQsIG51bGwsIDIpKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlSnNpaUxhbmd1YWdlKHRhcmdldDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgLy8gTW9kdWxlIGRlcGVuZGVuY2llcyB3ZSBjb21waWxlIGFnYWluc3QuIFN0YXRpYyByZXF1aXJlLnJlc29sdmUgY2FsbHMgc29cbiAgICAvLyBrbmlwIC8gcG5wbSBzdHJpY3QgaXNvbGF0aW9uIGNhbiBzZWUgdGhlIGRlcHMuXG4gICAgY29uc3QgZGVwcyA9IFtcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJAdHlwZXMvbm9kZS9wYWNrYWdlLmpzb25cIikpLFxuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcImNvbnN0cnVjdHMvcGFja2FnZS5qc29uXCIpKSxcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJjZGt0bi9wYWNrYWdlLmpzb25cIikpLFxuICAgIF07XG4gICAgY29uc3Qgb3B0czogR2VuZXJhdGVKU0lJT3B0aW9ucyA9IHtcbiAgICAgIGVudHJ5cG9pbnQ6IHRhcmdldC5maWxlTmFtZSxcbiAgICAgIGRlcHMsXG4gICAgICBtb2R1bGVLZXk6IHRhcmdldC5tb2R1bGVLZXksXG4gICAgICBleHBvcnRzOiB0YXJnZXQuaXNQcm92aWRlciAvLyBNb2R1bGVzIGFyZSBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBuZWVkIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgICAgXCIuXCI6IHtcbiAgICAgICAgICAgICAgaW1wb3J0OiBgLi9wcm92aWRlcnMvJHt0YXJnZXQubmFtZX0vaW5kZXguanNgLFxuICAgICAgICAgICAgICByZXF1aXJlOiBgLi9wcm92aWRlcnMvJHt0YXJnZXQubmFtZX0vbGF6eS1pbmRleC5qc2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIC8vIHVzZWQgZm9yIHRlc3RpbmcuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpKSB7XG4gICAgICBvcHRzLmpzaWkgPSB7IHBhdGg6IHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNQeXRob25UYXJnZXQpIHtcbiAgICAgIG9wdHMucHl0aG9uID0ge1xuICAgICAgICBvdXRkaXI6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICBtb2R1bGVOYW1lOiB0YXJnZXQuc3JjTWFrTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNKYXZhVGFyZ2V0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQuaW5jbHVkZXMoXCIvXCIpIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQuaW5jbHVkZXMoXCJcXFxcXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIGBXaGVuIHVzaW5nIEphdmEgdGhlIFwiY29kZU1ha2VyT3V0cHV0XCIgb3B0aW9uIGluIHRoZSBjZGt0Zi5qc29uIG11c3QgYmUgdGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyIGZvciB5b3VyIHByb2plY3QgKGUuZy4gY29tLm15LWNvbXBhbnkpLCBub3QgYSBwYXRoLiBUaGUgZ2VuZXJhdGVkIEphdmEgY29kZSB3aWxsIGJlIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBJZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGEgPCAwLjE5IHZlcnNpb24gb2YgY2RrdGYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb2RlbWFrZXJPdXRwdXQgdG8gXCJpbXBvcnRzXCIuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgb3B0cy5qYXZhID0ge1xuICAgICAgICBvdXRkaXI6IFwiLlwiLCAvLyBnZW5lcmF0ZWQgamF2YSBmaWxlcyBhcmVuJ3QgcGFja2FnZWQsIHNvIGp1c3QgaW5jbHVkZSBkaXJlY3RseSBpbiBhcHBcbiAgICAgICAgcGFja2FnZTogYCR7dGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dH0uJHt0YXJnZXQuc3JjTWFrTmFtZX1gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NzaGFycFRhcmdldCkge1xuICAgICAgb3B0cy5jc2hhcnAgPSB7XG4gICAgICAgIG91dGRpcjogdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgIG5hbWVzcGFjZTogdGFyZ2V0LnNyY01ha05hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzR29UYXJnZXQpIHtcbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIG5lZWRlZCBmb3IgbW9kdWxlcyBzb21laG93XG4gICAgICAvLyBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmlzUHJvdmlkZXIgPyAncHJvdmlkZXInIDogJ21vZHVsZSc7XG5cbiAgICAgIC8vIGpzaWktc3JjbWFjIHdpbGwgcHJvZHVjZSBhIGZvbGRlciBpbnNpZGUgdGhpcyBkaXIgbmFtZWQgYWZ0ZXIgXCJwYWNrYWdlTmFtZVwiXG4gICAgICAvLyBzbyB0aGlzIHJlc3VsdHMgaW4gZS5nLiAuZ2VuL2hhc2hpY29ycC9yYW5kb21cbiAgICAgIGNvbnN0IG91dGRpciA9IHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgdGFyZ2V0Lm5hbWVzcGFjZSA/PyBcIlwiKTtcblxuICAgICAgb3B0cy5nb2xhbmcgPSB7XG4gICAgICAgIG91dGRpcixcbiAgICAgICAgbW9kdWxlTmFtZTogYXdhaXQgZGV0ZXJtaW5lR29Nb2R1bGVOYW1lKG91dGRpciksIC8vIGUuZy4gYGdpdGh1Yi5jb20vb3JnL3VzZXJwcm9qZWN0Ly5nZW4vaGFzaGljb3JwYFxuICAgICAgICBwYWNrYWdlTmFtZTogdGFyZ2V0LnNyY01ha05hbWUsIC8vIHBhY2thZ2Ugd2lsbCBiZSBuYW1lZCBlLmcuIHJhbmRvbSBmb3IgaGFzaGljb3JwL3JhbmRvbVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgJiZcbiAgICAgICFwcm9jZXNzLmVudi5OT0RFX09QVElPTlMuaW5jbHVkZXMoYC0tbWF4LW9sZC1zcGFjZS1zaXplYClcbiAgICApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBmb3VuZCBOT0RFX09QVElPTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aG91dCBhIHNldHRpbmcgZm9yIC0tbWF4LW9sZC1zcGFjZS1zaXplLlxuVGhlIHByb3ZpZGVyIGdlbmVyYXRpb24gbmVlZHMgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgbWVtb3J5ICh+MTNHQikgZm9yIHNvbWUgcHJvdmlkZXJzIGFuZCBsYW5ndWFnZXMuXG5TbyBjZGt0bi1jbGkgc2V0cyBpdCB0byBOT0RFX09QVElPTlM9XCItLW1heC1vbGQtc3BhY2Utc2l6ZT0xNjM4NFwiIGJ5IGRlZmF1bHQuIEFzIHlvdXIgZW52aXJvbm1lbnQgYWxyZWFkeSBjb250YWluc1xuYSBOT0RFX09QVElPTlMgdmFyaWFibGUsIHdlIHdvbid0IG92ZXJyaWRlIGl0LiBIZW5jZSwgdGhlIHByb3ZpZGVyIGdlbmVyYXRpb24gbWlnaHQgZmFpbCB3aXRoIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluY3JlYXNlIG1lbW9yeSB0byBhbGxvdyBnZW5lcmF0aW5nIGxhcmdlIHByb3ZpZGVycyAoaS5lLiBhd3Mgb3IgYXp1cmVybSBmb3IgR28pXG4gICAgICAvLyBzcmNtYWsgaXMgZ29pbmcgdG8gc3Bhd24gYSBjaGlsZHByb2Nlc3MgKGZvciBqc2lpLXBhY21haykgd2hpY2ggaXMgZ29pbmcgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBlbnYgdmFyXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgPSBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTE2Mzg0XCI7XG4gICAgfVxuXG4gICAgY29uc3QganNpaVRpbWVyID0gbG9nVGltZXNwYW4oXCJKU0lJXCIpO1xuICAgIGF3YWl0IGdlbmVyYXRlSnNpaUxhbmd1YWdlKHRoaXMuY29kZSwgb3B0cywgdGhpcy5jb2RlTWFrZXJPdXRkaXIsIFtcbiAgICAgIHRhcmdldC5pc01vZHVsZSA/IFwicHJvdmlkZXJzLyoqXCIgOiBcIm1vZHVsZXMvKipcIixcbiAgICBdKTtcbiAgICBqc2lpVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTY2hlbWFzKHRhcmdldHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10pIHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZFNjaGVtYShcbiAgICAgIHRhcmdldHMsXG4gICAgICB0aGlzLnNjaGVtYUNhY2hlUGF0aCxcbiAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRWZXJzaW9ucyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlKFxuICAgIGFsbENvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICAgIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSA9IGFsbENvbnN0cmFpbnRzLFxuICApIHtcbiAgICBjb25zdCB0YXJnZXRzID0gY29uc3RyYWludHNUb0dlbmVyYXRlLm1hcCgoY29uc3RyYWludCkgPT5cbiAgICAgIENvbnN0cnVjdHNNYWtlclRhcmdldC5mcm9tKGNvbnN0cmFpbnQsIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSksXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZFNjaGVtYVRpbWVyID0gbG9nVGltZXNwYW4oXCJHYXRoZXJpbmcgc2NoZW1hXCIpO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCB0aGlzLmdldFNjaGVtYXMoY29uc3RyYWludHNUb0dlbmVyYXRlKTtcbiAgICBlbmRTY2hlbWFUaW1lcigpO1xuXG4gICAgY29uc3QgZW5kR2VuZXJhdGVUaW1lciA9IGxvZ1RpbWVzcGFuKFwiR2VuZXJhdGUgVFNcIik7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiB0aGlzLmdlbmVyYXRlVHlwZXNjcmlwdCh0YXJnZXQsIHNjaGVtYXMpKSxcbiAgICApO1xuICAgIGVuZEdlbmVyYXRlVGltZXIoKTtcblxuICAgIHRoaXMudXBkYXRlVmVyc2lvbnNGaWxlKGFsbENvbnN0cmFpbnRzKTtcbiAgICB0aGlzLmVtaXRDb25zdHJhaW50c0ZpbGUoYWxsQ29uc3RyYWludHMsIHNjaGVtYXMucHJvdmlkZXJTY2hlbWEpO1xuXG4gICAgaWYgKHRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0KSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlT3JwaGFuZWRSZXNvdXJjZUZvbGRlcnMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0IHx8IHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpKSB7XG4gICAgICBjb25zdCBudW1iZXJPZldvcmtlcnMgPSBNYXRoLm1heChcbiAgICAgICAgMSxcbiAgICAgICAgdGhpcy5vcHRpb25zLmpzaWlQYXJhbGxlbGlzbSA9PT0gLTFcbiAgICAgICAgICA/IHRhcmdldHMubGVuZ3RoXG4gICAgICAgICAgOiB0aGlzLm9wdGlvbnMuanNpaVBhcmFsbGVsaXNtIHx8IDEsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB3b3JrID0gWy4uLnRhcmdldHNdO1xuICAgICAgY29uc3Qgd29ya2VycyA9IG5ldyBBcnJheShudW1iZXJPZldvcmtlcnMpLmZpbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQgfCB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICgodGFyZ2V0ID0gd29yay5wb3AoKSkpIHtcbiAgICAgICAgICBjb25zdCBlbmRKc2lpVGFyZ2V0ID0gbG9nVGltZXNwYW4oXG4gICAgICAgICAgICBgR2VuZXJhdGluZyBKU0lJIGJpbmRpbmdzIGZvciAke3RhcmdldC5uYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSnNpaUxhbmd1YWdlKHRhcmdldCk7XG4gICAgICAgICAgZW5kSnNpaVRhcmdldCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod29ya2Vycy5tYXAoKGZuKSA9PiBmbigpKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgYXdhaXQgdGhpcy5yZXBvcnRUZWxlbWV0cnkoe1xuICAgICAgICB0cmFja2luZ1BheWxvYWQ6IHRhcmdldC50cmFja2luZ1BheWxvYWQsXG4gICAgICAgIHRhcmdldExhbmd1YWdlOiB0YXJnZXQudGFyZ2V0TGFuZ3VhZ2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1B5dGhvblRhcmdldCkge1xuICAgICAgY29uc3QgZW5kUHl0aG9uVGltZXIgPSBsb2dUaW1lc3BhbihcIlB5dGhvbiBwb3N0LXByb2Nlc3NpbmdcIik7XG4gICAgICAvLyBSZW1vdmUgZnJvbSAuIGltcG9ydCAuLi4gc3RhdGVtZW50cyBmcm9tIHJvb3QgbGV2ZWwgX19pbml0X18ucHlcbiAgICAgIC8vIFRoaXMgcmVtb3ZlcyByb290LWxldmVsIGltcG9ydHMgb2YgbmFtZXNwYWNlcywgYnV0IHNhdmVzIDI1cyBzeW50aCB0aW1lIGZvciB0aGUgYXdzIHByb3ZpZGVyIGFsb25lXG4gICAgICBjb25zdCBhbGxJbml0UHlQYXRocyA9IGdsb2JcbiAgICAgICAgLnN5bmMoXCIqKi9fX2luaXRfXy5weVwiLCB7XG4gICAgICAgICAgY3dkOiB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgfSlcbiAgICAgICAgLy8gc29ydCBieSBkZXB0aCwgc28gd2Ugc3RhcnQgd2l0aCB0aGUgc2hhbGxvd2VzdCBmaWxlc1xuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zcGxpdChcIi9cIikubGVuZ3RoIC0gYi5zcGxpdChcIi9cIikubGVuZ3RoKTtcblxuICAgICAgY29uc3QgdmlzaXRlZERpcmVjdG9yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBpbml0UHlQYXRoIG9mIGFsbEluaXRQeVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBwYXRoLmRpcm5hbWUoaW5pdFB5UGF0aCk7XG4gICAgICAgIGlmICh2aXNpdGVkRGlyZWN0b3JpZXMuc29tZSgoZGlyKSA9PiBkaXJlY3RvcnlQYXRoLnN0YXJ0c1dpdGgoZGlyKSkpIHtcbiAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGlzIGRpcmVjdG9yeVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZpc2l0ZWREaXJlY3Rvcmllcy5wdXNoKGRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFic29sdXRlSW5pdFB5UGF0aCA9IHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgaW5pdFB5UGF0aCk7XG4gICAgICAgIGNvbnN0IGluaXRQeSA9IGF3YWl0IGZzLnJlYWRGaWxlKGFic29sdXRlSW5pdFB5UGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICBjb25zdCBpbml0UHlXaXRob3V0SW1wb3J0cyA9IGluaXRQeS5yZXBsYWNlKC9mcm9tIFxcLiBpbXBvcnQgLipcXG4vZywgXCJcIik7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShhYnNvbHV0ZUluaXRQeVBhdGgsIGluaXRQeVdpdGhvdXRJbXBvcnRzKTtcbiAgICAgIH1cblxuICAgICAgZW5kUHl0aG9uVGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmUob3V0ZGlyID0gdGhpcy5jb2RlTWFrZXJPdXRkaXIpIHtcbiAgICBhd2FpdCB0aGlzLmNvZGUuc2F2ZShvdXRkaXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNKYXZhc2NyaXB0VGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlRZUEVTQ1JJUFQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1B5dGhvblRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5QWVRIT047XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0phdmFUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuSkFWQTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzQ3NoYXJwVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkNTSEFSUDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzR29UYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuR087XG4gIH1cbn1cblxuLyoqXG4gKiBzZWFyY2hlcyBmb3IgdGhlIGNsb3Nlc3QgYGdvLm1vZGAgZmlsZSBhbmQgcmV0dXJucyB0aGUgbmVzdGVkIGdvIG1vZHVsZSBuYW1lIGZvciBgZGlyYFxuICogZS5nLiAoL2Rpci8uZ2VuLykgPT4gY2RrLnRmL3N0YWNrLy5nZW4gaWYgdGhlIHBhcmVudCBkaXIgb2YgLmdlbiBoYXMgYSBnby5tb2QgZm9yIFwibW9kdWxlIGNkay50Zi9zdGFja1wiXG4gKlxuICogQHBhcmFtIGRpciB0aGUgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSAoc2VhcmNoZXMgdXB3YXJkcylcbiAqIEByZXR1cm5zIHRoZSBwYWNrYWdlIG5hbWUgZm9yIGBkaXJgXG4gKiBAdGhyb3dzIGFuIEVycm9yIGlmIG5vIGdvLm1vZCB3YXMgZm91bmRcbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVybWluZUdvTW9kdWxlTmFtZSA9IGFzeW5jIChkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGxldCBwcmV2aW91c0RpcjtcbiAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLnJlc29sdmUoZGlyKTtcblxuICBkbyB7XG4gICAgbGV0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoY3VycmVudERpcik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0IHlldCwgYnV0IHdlIHN0aWxsIHdhbGsgdXB3YXJkcyBmcm9tIHRoZXJlLCBzbyBpZ25vcmUgJ0VOT0VOVCdcbiAgICAgIGlmIChlLmNvZGUgIT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbGVzLmluY2x1ZGVzKFwiZ28ubW9kXCIpKSB7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5yZXNvbHZlKGN1cnJlbnREaXIsIFwiZ28ubW9kXCIpO1xuICAgICAgY29uc3QgZ29tb2QgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gL15tb2R1bGVcXHMqKFxcUyopXFxzKiQvbS5leGVjKGdvbW9kLnRvU3RyaW5nKCkpO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkZGlyID0gcGF0aC5yZWxhdGl2ZShjdXJyZW50RGlyLCBkaXIpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpOyAvLyByZXBsYWNlICdcXCcgd2l0aCAnLycgZm9yIHdpbmRvd3MgcGF0aHNcbiAgICAgICAgcmV0dXJuIGNoaWxkZGlyLmxlbmd0aCA+IDAgPyBgJHttYXRjaFsxXX0vJHtjaGlsZGRpcn1gIDogbWF0Y2hbMV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSByb290IEdvIG1vZHVsZSBuYW1lLiBGb3VuZCAke2ZpbGV9IGJ1dCBmYWlsZWQgdG8gcmVnZXggbWF0Y2ggdGhlIG1vZHVsZSBuYW1lIGRpcmVjdGl2ZWAsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBnbyB1cCBvbmUgZGlyZWN0b3J5LiBBcyBkaXJuYW1lKCcvJykgd2lsbCByZXR1cm4gJy8nIHdlIGNhbmNlbCB0aGUgbG9vcFxuICAgIC8vIGFzIHNvb24gYXMgdGhlIGRpciBkb2VzIG5vdCBjaGFuZ2UgYW55bW9yZS5cbiAgICBwcmV2aW91c0RpciA9IGN1cnJlbnREaXI7XG4gICAgY3VycmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgfSB3aGlsZSAoY3VycmVudERpciAhPT0gcHJldmlvdXNEaXIpO1xuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQ291bGQgbm90IGRldGVybWluZSB0aGUgcm9vdCBHbyBtb2R1bGUgbmFtZS4gTm8gZ28ubW9kIGZvdW5kIGluICR7ZGlyfSBhbmQgYW55IHBhcmVudCBkaXJlY3Rvcmllc2AsXG4gICk7XG59O1xuIl19
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { CodeMaker } from "codemaker";
|
|
2
|
-
import { ConstructsMakerModuleTarget } from "@cdktn/commons";
|
|
2
|
+
import { ConstructsMakerModuleTarget, TerraformTargetVersions } from "@cdktn/commons";
|
|
3
3
|
export declare class ModuleGenerator {
|
|
4
4
|
private readonly code;
|
|
5
5
|
private readonly targets;
|
|
6
|
-
|
|
6
|
+
private readonly targetVersions?;
|
|
7
|
+
constructor(code: CodeMaker, targets: ConstructsMakerModuleTarget[], targetVersions?: TerraformTargetVersions | undefined);
|
|
7
8
|
private emitSubmodule;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=module-generator.d.ts.map
|
|
@@ -6,16 +6,19 @@ exports.ModuleGenerator = void 0;
|
|
|
6
6
|
const codemaker_1 = require("codemaker");
|
|
7
7
|
const models_1 = require("./models");
|
|
8
8
|
const sanitized_comments_1 = require("./sanitized-comments");
|
|
9
|
+
const commons_1 = require("@cdktn/commons");
|
|
9
10
|
class ModuleGenerator {
|
|
10
|
-
constructor(code, targets) {
|
|
11
|
+
constructor(code, targets, targetVersions) {
|
|
11
12
|
this.code = code;
|
|
12
13
|
this.targets = targets;
|
|
14
|
+
this.targetVersions = targetVersions;
|
|
13
15
|
this.code.indentation = 2;
|
|
14
16
|
for (const target of this.targets) {
|
|
15
17
|
this.emitSubmodule(target);
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
emitSubmodule(target) {
|
|
21
|
+
var _a;
|
|
19
22
|
const spec = target.spec;
|
|
20
23
|
if (!spec) {
|
|
21
24
|
throw new Error(`missing spec for ${target.fqn}`);
|
|
@@ -55,26 +58,21 @@ class ModuleGenerator {
|
|
|
55
58
|
// ... and more
|
|
56
59
|
// ../module and ./module (local paths)
|
|
57
60
|
const isNonRegistryModule = target.source.includes(".");
|
|
58
|
-
|
|
59
|
-
//
|
|
60
|
-
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
// not submodule specified, just append the version
|
|
70
|
-
registryPath = `${target.source}/${target.version || "latest"}`;
|
|
71
|
-
}
|
|
61
|
+
// Keyed off the project's declared targets rather than a fixed registry, so
|
|
62
|
+
// the link matches the product the project builds for.
|
|
63
|
+
const registry = (0, commons_1.registryForTargetVersions)(this.targetVersions);
|
|
64
|
+
// Registries only have pages for a direct child of `modules/`, e.g.
|
|
65
|
+
// terraform-aws-modules/vpc/aws//modules/vpc-endpoints; any other `//` path
|
|
66
|
+
// links to the module itself.
|
|
67
|
+
const [moduleSource, subPath] = target.source.split("//", 2);
|
|
68
|
+
const submodule = (_a = subPath === null || subPath === void 0 ? void 0 : subPath.match(/^modules\/([^/]+)$/)) === null || _a === void 0 ? void 0 : _a[1];
|
|
69
|
+
const docsUrl = registry.moduleDocsUrl(moduleSource, target.version, submodule);
|
|
72
70
|
const comment = (0, sanitized_comments_1.sanitizedComment)(this.code);
|
|
73
71
|
comment.line(`Defines an ${baseName} based on a Terraform module`);
|
|
74
72
|
comment.line(``);
|
|
75
73
|
comment.line(isNonRegistryModule
|
|
76
74
|
? `Source at ${target.source}`
|
|
77
|
-
: `Docs at
|
|
75
|
+
: `Docs at ${registry.displayName}: {@link ${docsUrl} ${target.source}}`);
|
|
78
76
|
comment.end();
|
|
79
77
|
this.code.openBlock(`export class ${baseName} extends TerraformModule`);
|
|
80
78
|
this.code.line(`private readonly inputs: { [name: string]: any } = { };`);
|
|
@@ -181,4 +179,4 @@ function parseComplexType(type) {
|
|
|
181
179
|
}
|
|
182
180
|
throw new Error(`unexpected kind ${kind}`);
|
|
183
181
|
}
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZXQvZ2VuZXJhdG9yL21vZHVsZS1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBbUQ7QUFDbkQscUNBQTBDO0FBQzFDLDZEQUF3RDtBQUd4RCxNQUFhLGVBQWU7SUFDMUIsWUFDbUIsSUFBZSxFQUNmLE9BQXNDO1FBRHRDLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUV2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFMUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxNQUFtQztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRXpCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDBFQUEwRSxDQUMzRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENB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QUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtJQUNwQyxNQUFNLE9BQU8sR0FBRywyQ0FBMkMsQ0FBQztJQUM1RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBRWxDLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDdEMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNyQixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDbkIsT0FBTyxvQkFBb0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBDb2RlTWFrZXIsIHRvQ2FtZWxDYXNlIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHsgQXR0cmlidXRlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IHNhbml0aXplZENvbW1lbnQgfSBmcm9tIFwiLi9zYW5pdGl6ZWQtY29tbWVudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlR2VuZXJhdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RlOiBDb2RlTWFrZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRzOiBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXRbXSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRoaXMudGFyZ2V0cykge1xuICAgICAgdGhpcy5lbWl0U3VibW9kdWxlKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3VibW9kdWxlKHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KSB7XG4gICAgY29uc3Qgc3BlYyA9IHRhcmdldC5zcGVjO1xuXG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc3BlYyBmb3IgJHt0YXJnZXQuZnFufWApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZSh0YXJnZXQuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRgKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gJHt0YXJnZXQuc291cmNlfWApO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgaW1wb3J0IHsgVGVycmFmb3JtTW9kdWxlLCB0eXBlIFRlcnJhZm9ybU1vZHVsZVVzZXJDb25maWcgfSBmcm9tICdjZGt0bic7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKGBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztgKTtcblxuICAgIGNvbnN0IGJhc2VOYW1lID0gdGhpcy5jb2RlLnRvUGFzY2FsQ2FzZSh0YXJnZXQubmFtZS5yZXBsYWNlKC9bLS8uXS9nLCBcIl9cIikpO1xuICAgIGNvbnN0IGNvbmZpZ1R5cGUgPSBgJHtiYXNlTmFtZX1Db25maWdgO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgaW50ZXJmYWNlICR7Y29uZmlnVHlwZX0gZXh0ZW5kcyBUZXJyYWZvcm1Nb2R1bGVVc2VyQ29uZmlnYCxcbiAgICApO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2Ygc3BlYy5pbnB1dHMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbmFsID0gaW5wdXQucmVxdWlyZWQgJiYgaW5wdXQuZGVmYXVsdCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiP1wiO1xuXG4gICAgICBjb25zdCBjb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgICAgaWYgKGlucHV0LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbW1lbnQubGluZShpbnB1dC5kZXNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQuZGVmYXVsdCkge1xuICAgICAgICBjb21tZW50LmxpbmUoaW5wdXQuZGVmYXVsdCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQudHlwZS5pbmNsdWRlcyhcIm1hcChcIikpIHtcbiAgICAgICAgY29tbWVudC5saW5lKFxuICAgICAgICAgIGBUaGUgcHJvcGVydHkgdHlwZSBjb250YWlucyBhIG1hcCwgdGhleSBoYXZlIHNwZWNpYWwgaGFuZGxpbmcsIHBsZWFzZSBzZWUge0BsaW5rIGNkay50Zi9tb2R1bGUtbWFwLWlucHV0cyB0aGUgZG9jc31gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29tbWVudC5lbmQoKTtcblxuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGByZWFkb25seSAke0F0dHJpYnV0ZU1vZGVsLmVzY2FwZU5hbWUoXG4gICAgICAgICAgdG9DYW1lbENhc2UoaW5wdXQubmFtZSksXG4gICAgICAgICl9JHtvcHRpb25hbH06ICR7cGFyc2VUeXBlKGlucHV0LnR5cGUpfTtgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIC8vIEFkZCBhIGxpbmsgdG8gdGhlIFRlcnJhZm9ybSBSZWdpc3RyeSBpZiBpdCBpcyBzb3VyY2VkIGZyb20gdGhlcmVcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9tb2R1bGVzL3NvdXJjZXNcbiAgICAvLyBSZWdpc3RyeSBtb2R1bGVzIGFyZSByZWZlcnJlZCB0byBhcyA8TkFNRVNQQUNFPi88TkFNRT4vPFBST1ZJREVSPlxuICAgIC8vIE90aGVyIHNvdXJjZXMgY29udGFpbiBkb3RzLCBlLmcuXG4gICAgLy8gYXBwLnRlcnJhZm9ybS5pby9leGFtcGxlLWNvcnAvazhzLWNsdXN0ZXIvYXp1cmVybSAocHJpdmF0ZSByZWdpc3RyaWVzKVxuICAgIC8vIGdpdGh1Yi5jb20vaGFzaGljb3JwL2V4YW1wbGUgKEdpdGh1YilcbiAgICAvLyBnaXRAZ2l0aHViLmNvbTpoYXNoaWNvcnAvZXhhbXBsZS5naXRcbiAgICAvLyBiaXRidWNrZXQub3JnL2hhc2hpY29ycC90ZXJyYWZvcm0tY29uc3VsLWF3cyAoQml0YnVja2V0KVxuICAgIC8vIC4uLiBhbmQgbW9yZVxuICAgIC8vIC4uL21vZHVsZSBhbmQgLi9tb2R1bGUgKGxvY2FsIHBhdGhzKVxuICAgIGNvbnN0IGlzTm9uUmVnaXN0cnlNb2R1bGUgPSB0YXJnZXQuc291cmNlLmluY2x1ZGVzKFwiLlwiKTtcbiAgICBsZXQgcmVnaXN0cnlQYXRoO1xuICAgIC8vIFN1Ym1vZHVsZXMgYWxzbyBleGlzdCAoZS5nLiB0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvdnBjL2F3cy8vbW9kdWxlcy92cGMtZW5kcG9pbnRzKVxuICAgIC8vIEFuZCBsaW5raW5nIGRpcmVjdGx5IHRvIHRoZW0gaW4gdGhlIFJlZ2lzdHJ5IHJlcXVpcmVzIGluY2x1ZGluZyB0aGUgdmVyc2lvblxuICAgIC8vIGxpa2UgZS5nLiBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9tb2R1bGVzL3RlcnJhZm9ybS1hd3MtbW9kdWxlcy92cGMvYXdzL2xhdGVzdC9zdWJtb2R1bGVzL3ZwYy1lbmRwb2ludHNcbiAgICBpZiAodGFyZ2V0LnNvdXJjZS5pbmNsdWRlcyhcIi8vXCIpKSB7XG4gICAgICByZWdpc3RyeVBhdGggPSB0YXJnZXQuc291cmNlLnJlcGxhY2UoXG4gICAgICAgIFwiLy9tb2R1bGVzXCIsXG4gICAgICAgIGAvJHt0YXJnZXQudmVyc2lvbiB8fCBcImxhdGVzdFwifS9zdWJtb2R1bGVzYCxcbiAgICAgICk7XG4gICAgICAvLyB0ZXJyYWZvcm0tYXdzLW1vZHVsZXMvdnBjL2F3cy8vbW9kdWxlcy92cGMtZW5kcG9pbnRzXG4gICAgICAvLyAtPlxuICAgICAgLy8gdGVycmFmb3JtLWF3cy1tb2R1bGVzL3ZwYy9hd3MvbGF0ZXN0L3N1Ym1vZHVsZXMvdnBjLWVuZHBvaW50c1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3Qgc3VibW9kdWxlIHNwZWNpZmllZCwganVzdCBhcHBlbmQgdGhlIHZlcnNpb25cbiAgICAgIHJlZ2lzdHJ5UGF0aCA9IGAke3RhcmdldC5zb3VyY2V9LyR7dGFyZ2V0LnZlcnNpb24gfHwgXCJsYXRlc3RcIn1gO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnQgPSBzYW5pdGl6ZWRDb21tZW50KHRoaXMuY29kZSk7XG4gICAgY29tbWVudC5saW5lKGBEZWZpbmVzIGFuICR7YmFzZU5hbWV9IGJhc2VkIG9uIGEgVGVycmFmb3JtIG1vZHVsZWApO1xuICAgIGNvbW1lbnQubGluZShgYCk7XG4gICAgY29tbWVudC5saW5lKFxuICAgICAgaXNOb25SZWdpc3RyeU1vZHVsZVxuICAgICAgICA/IGBTb3VyY2UgYXQgJHt0YXJnZXQuc291cmNlfWBcbiAgICAgICAgOiBgRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9tb2R1bGVzLyR7cmVnaXN0cnlQYXRofSAke3RhcmdldC5zb3VyY2V9fWAsXG4gICAgKTtcbiAgICBjb21tZW50LmVuZCgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYGV4cG9ydCBjbGFzcyAke2Jhc2VOYW1lfSBleHRlbmRzIFRlcnJhZm9ybU1vZHVsZWApO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoYHByaXZhdGUgcmVhZG9ubHkgaW5wdXRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHsgfTtgKTtcblxuICAgIGNvbnN0IGFsbE9wdGlvbmFsID0gc3BlYy5pbnB1dHMuZmluZCgoeCkgPT4geC5yZXF1aXJlZCkgPyBcIlwiIDogXCIgPSB7fVwiO1xuXG4gICAgdGhpcy5jb2RlLm9wZW4oXG4gICAgICBgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogJHtjb25maWdUeXBlfSR7YWxsT3B0aW9uYWx9KSB7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5vcGVuKGBzdXBlcihzY29wZSwgaWQsIHtgKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi4uLmNvbmZpZyxcIik7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHNvdXJjZTogJyR7dGFyZ2V0LnNvdXJjZX0nLGApO1xuICAgIGlmICh0YXJnZXQudmVyc2lvbikge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHZlcnNpb246ICcke3RhcmdldC52ZXJzaW9ufScsYCk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5jbG9zZShgfSk7YCk7XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHNwZWMuaW5wdXRzKSB7XG4gICAgICBjb25zdCBpbnB1dE5hbWUgPSBBdHRyaWJ1dGVNb2RlbC5lc2NhcGVOYW1lKHRvQ2FtZWxDYXNlKGlucHV0Lm5hbWUpKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKGB0aGlzLiR7aW5wdXROYW1lfSA9IGNvbmZpZy4ke2lucHV0TmFtZX07YCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmNsb3NlKGB9YCk7IC8vIGN0b3JcblxuICAgIGZvciAoY29uc3QgaW5wdXQgb2Ygc3BlYy5pbnB1dHMpIHtcbiAgICAgIGNvbnN0IGlucHV0TmFtZSA9IEF0dHJpYnV0ZU1vZGVsLmVzY2FwZU5hbWUodG9DYW1lbENhc2UoaW5wdXQubmFtZSkpO1xuICAgICAgY29uc3QgaW5wdXRUeXBlID1cbiAgICAgICAgcGFyc2VUeXBlKGlucHV0LnR5cGUpICtcbiAgICAgICAgKGlucHV0LnJlcXVpcmVkICYmIGlucHV0LmRlZmF1bHQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIiB8IHVuZGVmaW5lZFwiKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBnZXQgJHtpbnB1dE5hbWV9KCk6ICR7aW5wdXRUeXBlfWApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLmlucHV0c1snJHtpbnB1dC5uYW1lfSddIGFzICR7aW5wdXRUeXBlfTtgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBzZXQgJHtpbnB1dE5hbWV9KHZhbHVlOiAke2lucHV0VHlwZX0pYCk7XG4gICAgICB0aGlzLmNvZGUubGluZShgdGhpcy5pbnB1dHNbJyR7aW5wdXQubmFtZX0nXSA9IHZhbHVlO2ApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBzcGVjLm91dHB1dHMpIHtcbiAgICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b0NhbWVsQ2FzZShvdXRwdXQubmFtZSk7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBwdWJsaWMgZ2V0ICR7b3V0cHV0TmFtZX1PdXRwdXQoKWApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLmdldFN0cmluZygnJHtvdXRwdXQubmFtZX0nKTtgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHJvdGVjdGVkIHN5bnRoZXNpemVBdHRyaWJ1dGVzKClgKTtcbiAgICB0aGlzLmNvZGUubGluZShgcmV0dXJuIHRoaXMuaW5wdXRzO2ApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYHByb3RlY3RlZCBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICBPYmplY3QuZW50cmllcyh0aGlzLmlucHV0cylgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgIC5maWx0ZXIoKFssIHZhbF0pID0+IHZhbCAhPT0gdW5kZWZpbmVkKWApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgLm1hcCgoW2tleSwgdmFsXSkgPT4ge2ApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICByZXR1cm4gW2ApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICAgIGtleSxgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgICB7YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAgICAgICB2YWx1ZTogdmFsLGApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICAgICAgdHlwZTogXCJhbnlcIixgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgICB9LGApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICBdO2ApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgfSlgKTtcbiAgICB0aGlzLmNvZGUubGluZShgKTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTsgLy8gY2xhc3NcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKHRhcmdldC5maWxlTmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlKHR5cGU6IHN0cmluZykge1xuICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG4gIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwiYm9vbFwiKSB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9XG4gIGlmICh0eXBlID09PSBcImxpc3RcIikge1xuICAgIHJldHVybiBcInN0cmluZ1tdXCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwibWFwXCIpIHtcbiAgICByZXR1cm4gXCJ7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwidHVwbGVcIikge1xuICAgIHJldHVybiBcInN0cmluZ1tdXCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwiYW55XCIpIHtcbiAgICByZXR1cm4gXCJhbnlcIjtcbiAgfVxuXG4gIGNvbnN0IGNvbXBsZXhUeXBlID0gcGFyc2VDb21wbGV4VHlwZSh0eXBlKTtcbiAgaWYgKGNvbXBsZXhUeXBlKSB7XG4gICAgcmV0dXJuIGNvbXBsZXhUeXBlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGUgJHt0eXBlfWApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbXBsZXhUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbXBsZXggPSAvXihvYmplY3R8bGlzdHxtYXB8c2V0fHR1cGxlKVxcKChbXFxzXFxTXSspXFwpLztcbiAgY29uc3QgbWF0Y2ggPSBjb21wbGV4LmV4ZWModHlwZSk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgWywga2luZCwgaW5uZXJUeXBlXSA9IG1hdGNoO1xuXG4gIGlmIChraW5kID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGBhbnlgO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwibGlzdFwiIHx8IGtpbmQgPT09IFwic2V0XCIpIHtcbiAgICByZXR1cm4gYCR7cGFyc2VUeXBlKGlubmVyVHlwZSl9W11gO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwidHVwbGVcIikge1xuICAgIHJldHVybiBgYW55W11gO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwibWFwXCIpIHtcbiAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHtwYXJzZVR5cGUoaW5uZXJUeXBlKX0gfWA7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQga2luZCAke2tpbmR9YCk7XG59XG4iXX0=
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZXQvZ2VuZXJhdG9yL21vZHVsZS1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyx5Q0FBbUQ7QUFDbkQscUNBQTBDO0FBQzFDLDZEQUF3RDtBQUN4RCw0Q0FJd0I7QUFFeEIsTUFBYSxlQUFlO0lBQzFCLFlBQ21CLElBQWUsRUFDZixPQUFzQyxFQUN0QyxjQUF3QztRQUZ4QyxTQUFJLEdBQUosSUFBSSxDQUFXO1FBQ2YsWUFBTyxHQUFQLE9BQU8sQ0FBK0I7UUFDdEMsbUJBQWMsR0FBZCxjQUFjLENBQTBCO1FBRXpELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUUxQixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQW1DOztRQUN2RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRXpCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNaLDBFQUEwRSxDQUMzRSxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUUxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLFVBQVUsR0FBRyxHQUFHLFFBQVEsUUFBUSxDQUFDO1FBRXZDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUNqQixvQkFBb0IsVUFBVSxvQ0FBb0MsQ0FDbkUsQ0FBQztRQUNGLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBRTFFLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWdCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysb0hBQW9ILENBQ3JILENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRWQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osWUFBWSx1QkFBYyxDQUFDLFVBQVUsQ0FDbkMsSUFBQSx1QkFBVyxFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FDeEIsR0FBRyxRQUFRLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUMxQyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdkIsbUVBQW1FO1FBQ25FLHFFQUFxRTtRQUNyRSxvRUFBb0U7UUFDcEUsbUNBQW1DO1FBQ25DLHlFQUF5RTtRQUN6RSx3Q0FBd0M7UUFDeEMsdUNBQXVDO1FBQ3ZDLDJEQUEyRDtRQUMzRCxlQUFlO1FBQ2YsdUNBQXVDO1FBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsNEVBQTRFO1FBQzVFLHVEQUF1RDtRQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFBLG1DQUF5QixFQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRSxvRUFBb0U7UUFDcEUsNEVBQTRFO1FBQzVFLDhCQUE4QjtRQUM5QixNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLFNBQVMsR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsMENBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDcEMsWUFBWSxFQUNaLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsU0FBUyxDQUNWLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBRyxJQUFBLHFDQUFnQixFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsUUFBUSw4QkFBOEIsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FDVixtQkFBbUI7WUFDakIsQ0FBQyxDQUFDLGFBQWEsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUM5QixDQUFDLENBQUMsV0FBVyxRQUFRLENBQUMsV0FBVyxZQUFZLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQzNFLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFFMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFFdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osNERBQTRELFVBQVUsR0FBRyxXQUFXLEtBQUssQ0FDMUYsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUM5QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2QixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFNBQVMsR0FBRyx1QkFBYyxDQUFDLFVBQVUsQ0FBQyxJQUFBLHVCQUFXLEVBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxTQUFTLGFBQWEsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBRTdCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sU0FBUyxHQUFHLHVCQUFjLENBQUMsVUFBVSxDQUFDLElBQUEsdUJBQVcsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyRSxNQUFNLFNBQVMsR0FDYixTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDckIsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsU0FBUyxPQUFPLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEtBQUssQ0FBQyxJQUFJLFNBQVMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsU0FBUyxXQUFXLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUEsdUJBQVcsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxVQUFVLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsOERBQThELENBQy9ELENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVE7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQXJLRCwwQ0FxS0M7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzdCLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDcEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNuQixPQUFPLDJCQUEyQixDQUFDO0lBQ3JDLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNyQixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDbkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNoQixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLDJDQUEyQyxDQUFDO0lBQzVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFFbEMsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNuQixPQUFPLG9CQUFvQixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztJQUN0RCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IENvZGVNYWtlciwgdG9DYW1lbENhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVNb2RlbCB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgc2FuaXRpemVkQ29tbWVudCB9IGZyb20gXCIuL3Nhbml0aXplZC1jb21tZW50c1wiO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0LFxuICBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyxcbiAgcmVnaXN0cnlGb3JUYXJnZXRWZXJzaW9ucyxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBNb2R1bGVHZW5lcmF0b3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldHM6IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldFtdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0VmVyc2lvbnM/OiBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyxcbiAgKSB7XG4gICAgdGhpcy5jb2RlLmluZGVudGF0aW9uID0gMjtcblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRoaXMudGFyZ2V0cykge1xuICAgICAgdGhpcy5lbWl0U3VibW9kdWxlKHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3VibW9kdWxlKHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KSB7XG4gICAgY29uc3Qgc3BlYyA9IHRhcmdldC5zcGVjO1xuXG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pc3Npbmcgc3BlYyBmb3IgJHt0YXJnZXQuZnFufWApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZS5vcGVuRmlsZSh0YXJnZXQuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoYC8vIGdlbmVyYXRlZCBieSBjZGt0biBnZXRgKTtcbiAgICB0aGlzLmNvZGUubGluZShgLy8gJHt0YXJnZXQuc291cmNlfWApO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICBgaW1wb3J0IHsgVGVycmFmb3JtTW9kdWxlLCB0eXBlIFRlcnJhZm9ybU1vZHVsZVVzZXJDb25maWcgfSBmcm9tICdjZGt0bic7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5saW5lKGBpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztgKTtcblxuICAgIGNvbnN0IGJhc2VOYW1lID0gdGhpcy5jb2RlLnRvUGFzY2FsQ2FzZSh0YXJnZXQubmFtZS5yZXBsYWNlKC9bLS8uXS9nLCBcIl9cIikpO1xuICAgIGNvbnN0IGNvbmZpZ1R5cGUgPSBgJHtiYXNlTmFtZX1Db25maWdgO1xuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhcbiAgICAgIGBleHBvcnQgaW50ZXJmYWNlICR7Y29uZmlnVHlwZX0gZXh0ZW5kcyBUZXJyYWZvcm1Nb2R1bGVVc2VyQ29uZmlnYCxcbiAgICApO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2Ygc3BlYy5pbnB1dHMpIHtcbiAgICAgIGNvbnN0IG9wdGlvbmFsID0gaW5wdXQucmVxdWlyZWQgJiYgaW5wdXQuZGVmYXVsdCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiP1wiO1xuXG4gICAgICBjb25zdCBjb21tZW50ID0gc2FuaXRpemVkQ29tbWVudCh0aGlzLmNvZGUpO1xuICAgICAgaWYgKGlucHV0LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvbW1lbnQubGluZShpbnB1dC5kZXNjcmlwdGlvbik7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQuZGVmYXVsdCkge1xuICAgICAgICBjb21tZW50LmxpbmUoaW5wdXQuZGVmYXVsdCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5wdXQudHlwZS5pbmNsdWRlcyhcIm1hcChcIikpIHtcbiAgICAgICAgY29tbWVudC5saW5lKFxuICAgICAgICAgIGBUaGUgcHJvcGVydHkgdHlwZSBjb250YWlucyBhIG1hcCwgdGhleSBoYXZlIHNwZWNpYWwgaGFuZGxpbmcsIHBsZWFzZSBzZWUge0BsaW5rIGNkay50Zi9tb2R1bGUtbWFwLWlucHV0cyB0aGUgZG9jc31gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29tbWVudC5lbmQoKTtcblxuICAgICAgdGhpcy5jb2RlLmxpbmUoXG4gICAgICAgIGByZWFkb25seSAke0F0dHJpYnV0ZU1vZGVsLmVzY2FwZU5hbWUoXG4gICAgICAgICAgdG9DYW1lbENhc2UoaW5wdXQubmFtZSksXG4gICAgICAgICl9JHtvcHRpb25hbH06ICR7cGFyc2VUeXBlKGlucHV0LnR5cGUpfTtgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcblxuICAgIC8vIEFkZCBhIGxpbmsgdG8gdGhlIFRlcnJhZm9ybSBSZWdpc3RyeSBpZiBpdCBpcyBzb3VyY2VkIGZyb20gdGhlcmVcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9tb2R1bGVzL3NvdXJjZXNcbiAgICAvLyBSZWdpc3RyeSBtb2R1bGVzIGFyZSByZWZlcnJlZCB0byBhcyA8TkFNRVNQQUNFPi88TkFNRT4vPFBST1ZJREVSPlxuICAgIC8vIE90aGVyIHNvdXJjZXMgY29udGFpbiBkb3RzLCBlLmcuXG4gICAgLy8gYXBwLnRlcnJhZm9ybS5pby9leGFtcGxlLWNvcnAvazhzLWNsdXN0ZXIvYXp1cmVybSAocHJpdmF0ZSByZWdpc3RyaWVzKVxuICAgIC8vIGdpdGh1Yi5jb20vaGFzaGljb3JwL2V4YW1wbGUgKEdpdGh1YilcbiAgICAvLyBnaXRAZ2l0aHViLmNvbTpoYXNoaWNvcnAvZXhhbXBsZS5naXRcbiAgICAvLyBiaXRidWNrZXQub3JnL2hhc2hpY29ycC90ZXJyYWZvcm0tY29uc3VsLWF3cyAoQml0YnVja2V0KVxuICAgIC8vIC4uLiBhbmQgbW9yZVxuICAgIC8vIC4uL21vZHVsZSBhbmQgLi9tb2R1bGUgKGxvY2FsIHBhdGhzKVxuICAgIGNvbnN0IGlzTm9uUmVnaXN0cnlNb2R1bGUgPSB0YXJnZXQuc291cmNlLmluY2x1ZGVzKFwiLlwiKTtcbiAgICAvLyBLZXllZCBvZmYgdGhlIHByb2plY3QncyBkZWNsYXJlZCB0YXJnZXRzIHJhdGhlciB0aGFuIGEgZml4ZWQgcmVnaXN0cnksIHNvXG4gICAgLy8gdGhlIGxpbmsgbWF0Y2hlcyB0aGUgcHJvZHVjdCB0aGUgcHJvamVjdCBidWlsZHMgZm9yLlxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gcmVnaXN0cnlGb3JUYXJnZXRWZXJzaW9ucyh0aGlzLnRhcmdldFZlcnNpb25zKTtcbiAgICAvLyBSZWdpc3RyaWVzIG9ubHkgaGF2ZSBwYWdlcyBmb3IgYSBkaXJlY3QgY2hpbGQgb2YgYG1vZHVsZXMvYCwgZS5nLlxuICAgIC8vIHRlcnJhZm9ybS1hd3MtbW9kdWxlcy92cGMvYXdzLy9tb2R1bGVzL3ZwYy1lbmRwb2ludHM7IGFueSBvdGhlciBgLy9gIHBhdGhcbiAgICAvLyBsaW5rcyB0byB0aGUgbW9kdWxlIGl0c2VsZi5cbiAgICBjb25zdCBbbW9kdWxlU291cmNlLCBzdWJQYXRoXSA9IHRhcmdldC5zb3VyY2Uuc3BsaXQoXCIvL1wiLCAyKTtcbiAgICBjb25zdCBzdWJtb2R1bGUgPSBzdWJQYXRoPy5tYXRjaCgvXm1vZHVsZXNcXC8oW14vXSspJC8pPy5bMV07XG4gICAgY29uc3QgZG9jc1VybCA9IHJlZ2lzdHJ5Lm1vZHVsZURvY3NVcmwoXG4gICAgICBtb2R1bGVTb3VyY2UsXG4gICAgICB0YXJnZXQudmVyc2lvbixcbiAgICAgIHN1Ym1vZHVsZSxcbiAgICApO1xuXG4gICAgY29uc3QgY29tbWVudCA9IHNhbml0aXplZENvbW1lbnQodGhpcy5jb2RlKTtcbiAgICBjb21tZW50LmxpbmUoYERlZmluZXMgYW4gJHtiYXNlTmFtZX0gYmFzZWQgb24gYSBUZXJyYWZvcm0gbW9kdWxlYCk7XG4gICAgY29tbWVudC5saW5lKGBgKTtcbiAgICBjb21tZW50LmxpbmUoXG4gICAgICBpc05vblJlZ2lzdHJ5TW9kdWxlXG4gICAgICAgID8gYFNvdXJjZSBhdCAke3RhcmdldC5zb3VyY2V9YFxuICAgICAgICA6IGBEb2NzIGF0ICR7cmVnaXN0cnkuZGlzcGxheU5hbWV9OiB7QGxpbmsgJHtkb2NzVXJsfSAke3RhcmdldC5zb3VyY2V9fWAsXG4gICAgKTtcbiAgICBjb21tZW50LmVuZCgpO1xuICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYGV4cG9ydCBjbGFzcyAke2Jhc2VOYW1lfSBleHRlbmRzIFRlcnJhZm9ybU1vZHVsZWApO1xuXG4gICAgdGhpcy5jb2RlLmxpbmUoYHByaXZhdGUgcmVhZG9ubHkgaW5wdXRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSA9IHsgfTtgKTtcblxuICAgIGNvbnN0IGFsbE9wdGlvbmFsID0gc3BlYy5pbnB1dHMuZmluZCgoeCkgPT4geC5yZXF1aXJlZCkgPyBcIlwiIDogXCIgPSB7fVwiO1xuXG4gICAgdGhpcy5jb2RlLm9wZW4oXG4gICAgICBgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogJHtjb25maWdUeXBlfSR7YWxsT3B0aW9uYWx9KSB7YCxcbiAgICApO1xuICAgIHRoaXMuY29kZS5vcGVuKGBzdXBlcihzY29wZSwgaWQsIHtgKTtcbiAgICB0aGlzLmNvZGUubGluZShcIi4uLmNvbmZpZyxcIik7XG4gICAgdGhpcy5jb2RlLmxpbmUoYHNvdXJjZTogJyR7dGFyZ2V0LnNvdXJjZX0nLGApO1xuICAgIGlmICh0YXJnZXQudmVyc2lvbikge1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHZlcnNpb246ICcke3RhcmdldC52ZXJzaW9ufScsYCk7XG4gICAgfVxuICAgIHRoaXMuY29kZS5jbG9zZShgfSk7YCk7XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHNwZWMuaW5wdXRzKSB7XG4gICAgICBjb25zdCBpbnB1dE5hbWUgPSBBdHRyaWJ1dGVNb2RlbC5lc2NhcGVOYW1lKHRvQ2FtZWxDYXNlKGlucHV0Lm5hbWUpKTtcbiAgICAgIHRoaXMuY29kZS5saW5lKGB0aGlzLiR7aW5wdXROYW1lfSA9IGNvbmZpZy4ke2lucHV0TmFtZX07YCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLmNsb3NlKGB9YCk7IC8vIGN0b3JcblxuICAgIGZvciAoY29uc3QgaW5wdXQgb2Ygc3BlYy5pbnB1dHMpIHtcbiAgICAgIGNvbnN0IGlucHV0TmFtZSA9IEF0dHJpYnV0ZU1vZGVsLmVzY2FwZU5hbWUodG9DYW1lbENhc2UoaW5wdXQubmFtZSkpO1xuICAgICAgY29uc3QgaW5wdXRUeXBlID1cbiAgICAgICAgcGFyc2VUeXBlKGlucHV0LnR5cGUpICtcbiAgICAgICAgKGlucHV0LnJlcXVpcmVkICYmIGlucHV0LmRlZmF1bHQgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIiB8IHVuZGVmaW5lZFwiKTtcbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBnZXQgJHtpbnB1dE5hbWV9KCk6ICR7aW5wdXRUeXBlfWApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLmlucHV0c1snJHtpbnB1dC5uYW1lfSddIGFzICR7aW5wdXRUeXBlfTtgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICAgIHRoaXMuY29kZS5vcGVuQmxvY2soYHB1YmxpYyBzZXQgJHtpbnB1dE5hbWV9KHZhbHVlOiAke2lucHV0VHlwZX0pYCk7XG4gICAgICB0aGlzLmNvZGUubGluZShgdGhpcy5pbnB1dHNbJyR7aW5wdXQubmFtZX0nXSA9IHZhbHVlO2ApO1xuICAgICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiBzcGVjLm91dHB1dHMpIHtcbiAgICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b0NhbWVsQ2FzZShvdXRwdXQubmFtZSk7XG4gICAgICB0aGlzLmNvZGUub3BlbkJsb2NrKGBwdWJsaWMgZ2V0ICR7b3V0cHV0TmFtZX1PdXRwdXQoKWApO1xuICAgICAgdGhpcy5jb2RlLmxpbmUoYHJldHVybiB0aGlzLmdldFN0cmluZygnJHtvdXRwdXQubmFtZX0nKTtgKTtcbiAgICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2RlLm9wZW5CbG9jayhgcHJvdGVjdGVkIHN5bnRoZXNpemVBdHRyaWJ1dGVzKClgKTtcbiAgICB0aGlzLmNvZGUubGluZShgcmV0dXJuIHRoaXMuaW5wdXRzO2ApO1xuICAgIHRoaXMuY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkJsb2NrKFxuICAgICAgYHByb3RlY3RlZCBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfWAsXG4gICAgKTtcbiAgICB0aGlzLmNvZGUubGluZShgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICBPYmplY3QuZW50cmllcyh0aGlzLmlucHV0cylgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgIC5maWx0ZXIoKFssIHZhbF0pID0+IHZhbCAhPT0gdW5kZWZpbmVkKWApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgLm1hcCgoW2tleSwgdmFsXSkgPT4ge2ApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICByZXR1cm4gW2ApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICAgIGtleSxgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgICB7YCk7XG4gICAgdGhpcy5jb2RlLmxpbmUoYCAgICAgICAgICB2YWx1ZTogdmFsLGApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICAgICAgdHlwZTogXCJhbnlcIixgKTtcbiAgICB0aGlzLmNvZGUubGluZShgICAgICAgICB9LGApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgICBdO2ApO1xuICAgIHRoaXMuY29kZS5saW5lKGAgICAgfSlgKTtcbiAgICB0aGlzLmNvZGUubGluZShgKTtgKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VCbG9jaygpO1xuXG4gICAgdGhpcy5jb2RlLmNsb3NlQmxvY2soKTsgLy8gY2xhc3NcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKHRhcmdldC5maWxlTmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlKHR5cGU6IHN0cmluZykge1xuICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG4gIGlmICh0eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwiYm9vbFwiKSB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9XG4gIGlmICh0eXBlID09PSBcImxpc3RcIikge1xuICAgIHJldHVybiBcInN0cmluZ1tdXCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwibWFwXCIpIHtcbiAgICByZXR1cm4gXCJ7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwidHVwbGVcIikge1xuICAgIHJldHVybiBcInN0cmluZ1tdXCI7XG4gIH1cbiAgaWYgKHR5cGUgPT09IFwiYW55XCIpIHtcbiAgICByZXR1cm4gXCJhbnlcIjtcbiAgfVxuXG4gIGNvbnN0IGNvbXBsZXhUeXBlID0gcGFyc2VDb21wbGV4VHlwZSh0eXBlKTtcbiAgaWYgKGNvbXBsZXhUeXBlKSB7XG4gICAgcmV0dXJuIGNvbXBsZXhUeXBlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGB1bmtub3duIHR5cGUgJHt0eXBlfWApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbXBsZXhUeXBlKHR5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbXBsZXggPSAvXihvYmplY3R8bGlzdHxtYXB8c2V0fHR1cGxlKVxcKChbXFxzXFxTXSspXFwpLztcbiAgY29uc3QgbWF0Y2ggPSBjb21wbGV4LmV4ZWModHlwZSk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgWywga2luZCwgaW5uZXJUeXBlXSA9IG1hdGNoO1xuXG4gIGlmIChraW5kID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGBhbnlgO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwibGlzdFwiIHx8IGtpbmQgPT09IFwic2V0XCIpIHtcbiAgICByZXR1cm4gYCR7cGFyc2VUeXBlKGlubmVyVHlwZSl9W11gO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwidHVwbGVcIikge1xuICAgIHJldHVybiBgYW55W11gO1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwibWFwXCIpIHtcbiAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHtwYXJzZVR5cGUoaW5uZXJUeXBlKX0gfWA7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQga2luZCAke2tpbmR9YCk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cdktn/provider-generator",
|
|
3
|
-
"version": "0.25.0-pre.
|
|
3
|
+
"version": "0.25.0-pre.64",
|
|
4
4
|
"description": "Exposes API to generate Terraform CDK provider bindings",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
"glob": "^13.0.6",
|
|
59
59
|
"jsii": "~6.0.0",
|
|
60
60
|
"jsii-pacmak": "1.140.0",
|
|
61
|
-
"@cdktn/
|
|
62
|
-
"cdktn": "0.25.0-pre.
|
|
63
|
-
"@cdktn/
|
|
61
|
+
"@cdktn/provider-schema": "0.25.0-pre.64",
|
|
62
|
+
"cdktn": "0.25.0-pre.64",
|
|
63
|
+
"@cdktn/commons": "0.25.0-pre.64"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@types/fs-extra": "11.0.4",
|