cdk-serverless 2.19.1 → 2.21.0

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.
Files changed (36) hide show
  1. package/docs/constructs/assets/hierarchy.js +1 -1
  2. package/docs/constructs/assets/navigation.js +1 -1
  3. package/docs/constructs/assets/search.js +1 -1
  4. package/docs/constructs/classes/SingleTableDatastore.html +5 -4
  5. package/docs/constructs/classes/Workflow.html +1 -1
  6. package/docs/constructs/hierarchy.html +1 -1
  7. package/docs/constructs/interfaces/BaseApiProps.html +2 -2
  8. package/docs/constructs/interfaces/GraphQlApiProps.html +2 -2
  9. package/docs/constructs/interfaces/ISingleTableDatastore.html +3 -0
  10. package/docs/constructs/interfaces/RestApiProps.html +2 -2
  11. package/docs/constructs/modules.html +1 -1
  12. package/docs/projen/classes/Datastore.html +1 -1
  13. package/docs/projen/classes/GraphQlApi.html +1 -1
  14. package/docs/projen/classes/RestApi.html +1 -1
  15. package/docs/projen/classes/ServerlessProject.html +7 -4
  16. package/docs/projen/classes/Workflow.html +1 -1
  17. package/docs/projen/interfaces/ServerlessProjectOptions.html +199 -150
  18. package/lib/constructs/authentication.js +8 -9
  19. package/lib/constructs/base-api.d.ts +2 -2
  20. package/lib/constructs/base-api.js +3 -4
  21. package/lib/constructs/func.js +10 -11
  22. package/lib/constructs/graphql.js +6 -10
  23. package/lib/constructs/rest-api.js +2 -3
  24. package/lib/constructs/table.d.ts +8 -1
  25. package/lib/constructs/table.js +12 -4
  26. package/lib/constructs/workflow.js +2 -3
  27. package/lib/lambda/auth.js +6 -8
  28. package/lib/lambda/handler.js +7 -10
  29. package/lib/projen/core.js +3 -4
  30. package/lib/projen/graphql.js +3 -2
  31. package/lib/projen/lazy-textfile.js +2 -3
  32. package/lib/projen/workflow.js +3 -4
  33. package/lib/tests/integ-test-util.js +12 -19
  34. package/lib/tests/lambda-test-utils.js +8 -10
  35. package/llm.md +392 -0
  36. package/package.json +7 -5
@@ -73,7 +73,6 @@ class GraphQlApi extends base_api_1.BaseApi {
73
73
  * @param props - The properties of the GraphQlApi construct.
74
74
  */
75
75
  constructor(scope, id, props) {
76
- var _a;
77
76
  super(scope, id, props);
78
77
  this.props = props;
79
78
  /**
@@ -180,7 +179,7 @@ class GraphQlApi extends base_api_1.BaseApi {
180
179
  if (props.singleTableDatastore) {
181
180
  this.tableDataSource = new aws_cdk_lib_1.aws_appsync.DynamoDbDataSource(this, 'SingleTableSource', {
182
181
  api: this.api,
183
- table: (_a = props.singleTableDatastore) === null || _a === void 0 ? void 0 : _a.table,
182
+ table: props.singleTableDatastore?.table,
184
183
  });
185
184
  }
186
185
  }
@@ -272,20 +271,18 @@ class GraphQlApi extends base_api_1.BaseApi {
272
271
  });
273
272
  }
274
273
  addDynamoDbJSResolver(typeName, fieldName, options) {
275
- var _a;
276
274
  if (!this.tableDataSource) {
277
275
  throw new Error('DynamoDB is not initialized');
278
276
  }
279
277
  this.addJSResolver(typeName, fieldName, this.tableDataSource, {
280
278
  ...options,
281
279
  stashValues: {
282
- ...(_a = options === null || options === void 0 ? void 0 : options.stashValues) !== null && _a !== void 0 ? _a : {},
280
+ ...options?.stashValues ?? {},
283
281
  table: this.props.singleTableDatastore.table.tableName,
284
282
  },
285
283
  });
286
284
  }
287
285
  addJSResolver(typeName, fieldName, dataSource, options) {
288
- var _a;
289
286
  const operationId = `${typeName}.${fieldName}`;
290
287
  const description = `Type ${typeName} Field ${fieldName} Resolver`;
291
288
  const resolverDir = './src/js-resolver/';
@@ -360,7 +357,7 @@ class GraphQlApi extends base_api_1.BaseApi {
360
357
  // The before step
361
358
  export function request(ctx) {
362
359
  console.log(ctx);
363
- ${Object.entries((_a = options === null || options === void 0 ? void 0 : options.stashValues) !== null && _a !== void 0 ? _a : []).map(val => ` ctx.stash.${val[0]} = '${val[1]}'`).join('\n')}
360
+ ${Object.entries(options?.stashValues ?? []).map(val => ` ctx.stash.${val[0]} = '${val[1]}'`).join('\n')}
364
361
  return {}
365
362
  }
366
363
 
@@ -448,17 +445,16 @@ function uppercaseFirst(value) {
448
445
  * as it is not exported by aws-cdk-lib
449
446
  */
450
447
  function exec(cmd, args, options) {
451
- var _a, _b;
452
448
  const proc = (0, child_process_1.spawnSync)(cmd, args, options);
453
449
  if (proc.error) {
454
450
  throw proc.error;
455
451
  }
456
452
  if (proc.status !== 0) {
457
453
  if (proc.stdout || proc.stderr) {
458
- throw new Error(`[Status ${proc.status}] stdout: ${(_a = proc.stdout) === null || _a === void 0 ? void 0 : _a.toString().trim()}\n\n\nstderr: ${(_b = proc.stderr) === null || _b === void 0 ? void 0 : _b.toString().trim()}`);
454
+ throw new Error(`[Status ${proc.status}] stdout: ${proc.stdout?.toString().trim()}\n\n\nstderr: ${proc.stderr?.toString().trim()}`);
459
455
  }
460
- throw new Error(`${cmd} ${args.join(' ')} ${(options === null || options === void 0 ? void 0 : options.cwd) ? `run in directory ${options.cwd}` : ''} exited with status ${proc.status}`);
456
+ throw new Error(`${cmd} ${args.join(' ')} ${options?.cwd ? `run in directory ${options.cwd}` : ''} exited with status ${proc.status}`);
461
457
  }
462
458
  return proc;
463
459
  }
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2dyYXBocWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGlEQUE0RDtBQUM1RCx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDZDQUFnTDtBQUdoTCx5Q0FBbUQ7QUFDbkQsaUNBQXdDO0FBQ3hDLCtDQUF5RTtBQTRDekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsVUFBc0IsU0FBUSxrQkFBTztJQXNCaEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVSxLQUFzQjs7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFEd0IsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFqQnhFOztXQUVHO1FBQ0ssZUFBVSxHQUE4QyxFQUFFLENBQUM7UUFpQmpFLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLGNBQXVDLENBQUM7UUFFakUsSUFBSSxnQkFBdUQsQ0FBQztRQUM1RCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixnQkFBZ0IsR0FBRztnQkFDakIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUN4QixXQUFXLEVBQUUsSUFBSSxvQ0FBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO29CQUM1RSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVc7b0JBQzVCLE1BQU0sRUFBRSxXQUFXO29CQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3hCLFVBQVUsRUFBRSxvQ0FBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDbEYsQ0FBQzthQUNILENBQUM7WUFDRixJQUFJ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LElBQUksQ0FBQyxNQUFNLGFBQWEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLGlCQUFpQixNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEksQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDLG9CQUFvQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pJLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgeyBTcGF3blN5bmNPcHRpb25zLCBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCB7IEFzc2V0SGFzaFR5cGUsIEJ1bmRsaW5nT3B0aW9ucywgQnVuZGxpbmdPdXRwdXQsIENmbk91dHB1dCwgRG9ja2VySW1hZ2UsIFRhZ3MsIGF3c19hcHBzeW5jLCBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLCBhd3NfaWFtLCBhd3NfbG9ncywgYXdzX3JvdXRlNTMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENvZ25pdG9BdXRoZW50aWNhdGlvbiB9IGZyb20gJy4vYXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHsgQmFzZUFwaSwgQmFzZUFwaVByb3BzIH0gZnJvbSAnLi9iYXNlLWFwaSc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJy4vZnVuYyc7XG5pbXBvcnQgeyBDRk5fT1VUUFVUX1NVRkZJWF9HUkFQSFFMX0RPTUFJTk5BTUUgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhRbEFwaVByb3BzIGV4dGVuZHMgQmFzZUFwaVByb3BzIHtcbiAgZGVmaW5pdGlvbkZpbGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnRsUmVzb2x2ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhc291cmNlIHRoZSBWVEwgcmVzb2x2ZXIgdGFyZ2V0c1xuICAgKi9cbiAgZGF0YVNvdXJjZTogYXdzX2FwcHN5bmMuQmFzZURhdGFTb3VyY2U7XG5cbiAgLyoqXG4gICAqIHN0cmluZyByZXBsYWNlbWVudHMgdG8gcHJvY2VzcyBvbiB0aGUgVlRMXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIHZhcmlhYmxlIGV4cGFuc2lvbnNcbiAgICovXG4gIHZhcmlhYmxlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzUmVzb2x2ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgcHV0IGludG8gdGhlIFwic3Rhc2hcIiBvZiB0aGUgcmVzb2x2ZXIgcGlwZWxpbmVcbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc3Rhc2hWYWx1ZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBuYW1lIG9mIHRoZSBwaXBlbGluZSBzdGVwcyB0byBjcmVhdGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBvbmx5IGEgZGVmYXVsdCBzdGVwIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVTdGVwTmFtZXM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEpzUmVzb2x2ZXJDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG4gIGluZGV4OiBudW1iZXI7XG4gIHN0ZXBDb3VudDogbnVtYmVyO1xuICBlbnRyeUZpbGU6IHN0cmluZztcbiAgZnVuY3Rpb25JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBHcmFwaFFsQXBpIGNvbnN0cnVjdCBzZXRzIHVwIGFuIEFXUyBBcHBTeW5jIEdyYXBoUUwgQVBJIGludGVncmF0ZWQgd2l0aCBDb2duaXRvIGZvciBhdXRoZW50aWNhdGlvbiBhbmQgRHluYW1vREIgZm9yIGRhdGEgc3RvcmFnZS5cbiAqIFRoaXMgY29uc3RydWN0IGZhY2lsaXRhdGVzIHRoZSBjcmVhdGlvbiBvZiBhIEdyYXBoUUwgQVBJIHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nIGN1c3RvbSBkb21haW4sIGxvZ2dpbmcsIHNjaGVtYSBkZWZpbml0aW9uLFxuICogYW5kIGF1dGhvcml6YXRpb24gdXNpbmcgQ29nbml0byBVc2VyIFBvb2wgYW5kIElkZW50aXR5IFBvb2wuIEl0IGFsc28gcHJvdmlkZXMgbWV0aG9kcyB0byBkeW5hbWljYWxseSBhZGQgcmVzb2x2ZXJzIGFuZCBncmFudCBhY2Nlc3MgdG8gc3BlY2lmaWMgZmllbGRzLlxuICpcbiAqIEB0ZW1wbGF0ZSBSRVNPTFZFUlMgLSBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgR3JhcGhRTCByZXNvbHZlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFwaSA9IG5ldyBHcmFwaFFsQXBpKHRoaXMsICdNeUdyYXBoUWxBcGknLCB7XG4gKiAgIGFwaU5hbWU6ICdNeUFQSScsXG4gKiAgIHN0YWdlTmFtZTogJ2RldicsXG4gKiAgIGRlZmluaXRpb25GaWxlTmFtZTogJ3NjaGVtYS5ncmFwaHFsJyxcbiAqICAgYXV0aGVudGljYXRpb246IG15Q29nbml0b0F1dGgsXG4gKiAgIHNpbmdsZVRhYmxlRGF0YXN0b3JlOiBteUR5bmFtb0RCVGFibGUsXG4gKiB9KTtcbiAqXG4gKiAvLyBBZGQgYSBMYW1iZGEgcmVzb2x2ZXJcbiAqIGFwaS5hZGRMYW1iZGFSZXNvbHZlcignUXVlcnknLCAnZ2V0SXRlbScpO1xuICpcbiAqIC8vIEdyYW50IGFjY2VzcyB0byB1bmF1dGhlbnRpY2F0ZWQgdXNlcnMgZm9yIGEgc3BlY2lmaWMgcXVlcnlcbiAqIGFwaS5ncmFudEFjY2Vzc1VuQXV0aCgnUXVlcnknLCAnZ2V0SXRlbScpO1xuICovXG5leHBvcnQgY2xhc3MgR3JhcGhRbEFwaTxSRVNPTFZFUlM+IGV4dGVuZHMgQmFzZUFwaSB7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQXBwU3luYyBHcmFwaFFMIEFQSSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IGF3c19hcHBzeW5jLkdyYXBocWxBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCBEeW5hbW9EQiBkYXRhIHNvdXJjZSBmb3IgdGhlIEdyYXBoUUwgQVBJLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlRGF0YVNvdXJjZT86IGF3c19hcHBzeW5jLkR5bmFtb0RiRGF0YVNvdXJjZTtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIExhbWJkYSBmdW5jdGlvbnMgdXNlZCBhcyByZXNvbHZlcnMgZm9yIHRoZSBHcmFwaFFMIEFQSS5cbiAgICovXG4gIHByaXZhdGUgX2Z1bmN0aW9uczogeyBbb3BlcmF0aW9uSWQ6IHN0cmluZ106IExhbWJkYUZ1bmN0aW9uIH0gPSB7fTtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgY29nbml0b0F1dGg6IENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBHcmFwaFFsQXBpLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBHcmFwaFFsQXBpIGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEdyYXBoUWxBcGlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5jb2duaXRvQXV0aCA9IHByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAgIGxldCBjdXN0b21Eb21haW5OYW1lOiBhd3NfYXBwc3luYy5Eb21haW5PcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmFwaUZRRE4pIHtcbiAgICAgIGN1c3RvbURvbWFpbk5hbWUgPSB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgY2VydGlmaWNhdGU6IG5ldyBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDZXJ0Jywge1xuICAgICAgICAgIGhvc3RlZFpvbmU6IHRoaXMuaG9zdGVkWm9uZSEsXG4gICAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgICAgdmFsaWRhdGlvbjogYXdzX2NlcnRpZmljYXRlbWFuYWdlci5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyh0aGlzLmhvc3RlZFpvbmUpLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdHcmFwaFFsQXBpRG9tYWluTmFtZScsIHtcbiAgICAgICAga2V5OiBgJHt0aGlzLnByb3BzLmFwaU5hbWV9JHtDRk5fT1VUUFVUX1NVRkZJWF9HUkFQSFFMX0RPTUFJTk5BTUV9YCxcbiAgICAgICAgdmFsdWU6IHRoaXMuYXBpRlFETixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYXBpID0gbmV3IGF3c19hcHBzeW5jLkdyYXBocWxBcGkodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogYCR7cHJvcHMuYXBpTmFtZX0gWyR7cHJvcHMuc3RhZ2VOYW1lfV1gLFxuICAgICAgbG9nQ29uZmlnOiB7XG4gICAgICAgIGZpZWxkTG9nTGV2ZWw6IGF3c19hcHBzeW5jLkZpZWxkTG9nTGV2ZWwuQUxMLFxuICAgICAgICByZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuVFdPX01PTlRIUyxcbiAgICAgIH0sXG4gICAgICBzY2hlbWE6IGF3c19hcHBzeW5jLlNjaGVtYUZpbGUuZnJvbUFzc2V0KHByb3BzLmRlZmluaXRpb25GaWxlTmFtZSksXG4gICAgICBkb21haW5OYW1lOiBjdXN0b21Eb21haW5OYW1lLFxuICAgICAgLi4udGhpcy5jb2duaXRvQXV0aCAmJiB7XG4gICAgICAgIGF1dGhvcml6YXRpb25Db25maWc6IHtcbiAgICAgICAgICBhZGRpdGlvbmFsQXV0aG9yaXphdGlvbk1vZGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBhd3NfYXBwc3luYy5BdXRob3JpemF0aW9uVHlwZS5VU0VSX1BPT0wsXG4gICAgICAgICAgICAgIHVzZXJQb29sQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgdXNlclBvb2w6IHRoaXMuY29nbml0b0F1dGgudXNlcnBvb2wsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbjogYXdzX2FwcHN5bmMuVXNlclBvb2xEZWZhdWx0QWN0aW9uLkRFTlksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wgPyBbeyBhdXRob3JpemF0aW9uVHlwZTogYXdzX2FwcHN5bmMuQXV0aG9yaXphdGlvblR5cGUuSUFNIH1dIDogW10sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKGN1c3RvbURvbWFpbk5hbWUgJiYgdGhpcy5hcGkuYXBwU3luY0RvbWFpbk5hbWUpIHtcbiAgICAgIG5ldyBhd3Nfcm91dGU1My5DbmFtZVJlY29yZCh0aGlzLCAnRG5zUmVjb3JkJywge1xuICAgICAgICB6b25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICByZWNvcmROYW1lOiBjdXN0b21Eb21haW5OYW1lLmRvbWFpbk5hbWUsXG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpLmFwcFN5bmNEb21haW5OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKChwcm9wcy5tb25pdG9yaW5nID8/IHRydWUpICYmIHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJzVYWEVycm9yJyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnNFhYRXJyb3InLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTAnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTUnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTknLFxuICAgIC8vICAgfSkpO1xuICAgIC8vIH1cblxuICAgIGlmIChwcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSkge1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgYXdzX2FwcHN5bmMuRHluYW1vRGJEYXRhU291cmNlKHRoaXMsICdTaW5nbGVUYWJsZVNvdXJjZScsIHtcbiAgICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgICAgdGFibGU6IHByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlPy50YWJsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KGdyYW50ZWU6IGF3c19pYW0uSUdyYW50YWJsZSwgdHlwZU5hbWU6IFRZUEUsIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW10pOiB2b2lkIHtcbiAgICB0aGlzLmFwaS5ncmFudChncmFudGVlLCBhd3NfYXBwc3luYy5JYW1SZXNvdXJjZS5vZlR5cGUodHlwZU5hbWUgYXMgc3RyaW5nLCAuLi5maWVsZE5hbWVzIGFzIHN0cmluZ1tdKSwgJ2FwcHN5bmM6R3JhcGhRTCcpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBY2Nlc3NVbkF1dGg8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBncmFudCB0byBDb2duaXRvIGlkZW50aXR5IHBvb2wgYXMgbm9uZSBpcyBwcm92aWRlZCcpO1xuICAgIH1cbiAgICB0aGlzLmdyYW50QWNjZXNzKHRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sLnVuYXV0aGVudGljYXRlZFJvbGUsIHR5cGVOYW1lLCAuLi5maWVsZE5hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzQXV0aDxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+Pih0eXBlTmFtZTogVFlQRSwgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdyYW50IHRvIENvZ25pdG8gaWRlbnRpdHkgcG9vbCBhcyBub25lIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuZ3JhbnRBY2Nlc3ModGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wuYXV0aGVudGljYXRlZFJvbGUsIHR5cGVOYW1lLCAuLi5maWVsZE5hbWVzKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIGdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb248VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNbYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YF07XG4gIH1cblxuICBwdWJsaWMgYWRkTGFtYmRhUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGBUeXBlICR7dHlwZU5hbWUgYXMgc3RyaW5nfSBGaWVsZCAke2ZpZWxkTmFtZSBhcyBTdHJpbmd9IFJlc29sdmVyYDtcblxuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGAuL3NyYy9sYW1iZGEvJHtvcGVyYXRpb25JZH0udHNgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhlbnRyeUZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL2xhbWJkYS8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuY3JlYXRlRW50cnlGaWxlKGVudHJ5RmlsZSwgdHlwZU5hbWUgYXMgc3RyaW5nLCBmaWVsZE5hbWUgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCBgRm4ke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB0aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dICR7ZGVzY3JpcHRpb259YCxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gJiYge1xuICAgICAgICB1c2VyUG9vbDogKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgQ29nbml0b0F1dGhlbnRpY2F0aW9uKS51c2VycG9vbCxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlICYmIHtcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUudGFibGUsXG4gICAgICAgIHRhYmxlV3JpdGVzOiB0eXBlTmFtZSA9PT0gJ011dGF0aW9uJyxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLmFzc2V0Q2RuICYmIHtcbiAgICAgICAgYXNzZXREb21haW5OYW1lOiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0RG9tYWluTmFtZSxcbiAgICAgICAgYXNzZXRCdWNrZXQ6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXRCdWNrZXQsXG4gICAgICB9LFxuICAgICAgbGFtYmRhT3B0aW9uczogdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZF0gPSBmbjtcbiAgICBUYWdzLm9mKGZuKS5hZGQoJ0dyYXBoUUwnLCBkZXNjcmlwdGlvbik7XG5cbiAgICAvLyBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBhd3NfYXBwc3luYy5MYW1iZGFEYXRhU291cmNlKHRoaXMsIGBMYW1iZGFEUyR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIG5hbWU6IGBMYW1iZGFfJHt0eXBlTmFtZSBhcyBzdHJpbmd9XyR7ZmllbGROYW1lIGFzIFN0cmluZ31gLFxuICAgICAgbGFtYmRhRnVuY3Rpb246IGZuLFxuICAgIH0pO1xuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlLFxuICAgIH0pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGREeW5hbW9EYlZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KHR5cGVOYW1lOiBUWVBFLCBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSwgb3B0aW9ucz86IE9taXQ8VnRsUmVzb2x2ZXJPcHRpb25zLCAnZGF0YVNvdXJjZSc+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEeW5hbW9EQiBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5hZGRWdGxSZXNvbHZlcih0eXBlTmFtZSwgZmllbGROYW1lLCB7XG4gICAgICBkYXRhU291cmNlOiB0aGlzLnRhYmxlRGF0YVNvdXJjZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRHluYW1vRGJKU1Jlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KHR5cGVOYW1lOiBUWVBFLCBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSwgb3B0aW9ucz86IEpzUmVzb2x2ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEeW5hbW9EQiBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5hZGRKU1Jlc29sdmVyKHR5cGVOYW1lLCBmaWVsZE5hbWUsIHRoaXMudGFibGVEYXRhU291cmNlLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc3Rhc2hWYWx1ZXM6IHtcbiAgICAgICAgLi4ub3B0aW9ucz8uc3Rhc2hWYWx1ZXMgPz8ge30sXG4gICAgICAgIHRhYmxlOiB0aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlIS50YWJsZS50YWJsZU5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZEpTUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4odHlwZU5hbWU6IFRZUEUsIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLCBkYXRhU291cmNlOiBhd3NfYXBwc3luYy5CYXNlRGF0YVNvdXJjZSwgb3B0aW9ucz86IEpzUmVzb2x2ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYFR5cGUgJHt0eXBlTmFtZSBhcyBzdHJpbmd9IEZpZWxkICR7ZmllbGROYW1lIGFzIFN0cmluZ30gUmVzb2x2ZXJgO1xuXG4gICAgY29uc3QgcmVzb2x2ZXJEaXIgPSAnLi9zcmMvanMtcmVzb2x2ZXIvJztcbiAgICBjb25zdCBmdW5jdGlvbnM6IEpzUmVzb2x2ZXJDb25maWdbXSA9IFtdO1xuXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBpcGVsaW5lU3RlcE5hbWVzIHx8IG9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubGVuZ3RoID09IDApIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2RlZmF1bHQnLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgc3RlcENvdW50OiAxLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS50c2AsXG4gICAgICAgIGZ1bmN0aW9uSWQ6IGBKU0Z1bmN0aW9uJHtvcGVyYXRpb25JZH1gLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKC4uLm9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHN0ZXBDb3VudDogb3B0aW9ucy5waXBlbGluZVN0ZXBOYW1lcyEubGVuZ3RoLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS4ke25hbWV9LnRzYCxcbiAgICAgICAgZnVuY3Rpb25JZDogYEpTRnVuY3Rpb24ke29wZXJhdGlvbklkfSR7bmFtZX1gLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaXBlbGluZUNvbmZpZyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmbi5lbnRyeUZpbGUpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhyZXNvbHZlckRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlSlNSZXNvbHZlckZpbGUoZm4sIHR5cGVOYW1lIGFzIHN0cmluZywgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzRnVuY3Rpb24gPSBuZXcgYXdzX2FwcHN5bmMuQXBwc3luY0Z1bmN0aW9uKHRoaXMsIGZuLmZ1bmN0aW9uSWQsIHtcbiAgICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgICAgbmFtZTogb3BlcmF0aW9uSWQucmVwbGFjZSgvXFwuL2csICcnKSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIGNvZGU6IGF3c19hcHBzeW5jLkNvZGUuZnJvbUFzc2V0KCcuJywge1xuICAgICAgICAgIGFzc2V0SGFzaFR5cGU6IEFzc2V0SGFzaFR5cGUuT1VUUFVULFxuICAgICAgICAgIGRlcGxveVRpbWU6IHRydWUsXG4gICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoJ2R1bW15JyksIC8vIFdpbGwgbmV2ZXIgYmUgdXNlZCBkdWUgdG8gbG9jYWwgYnVuZGxpbmdcbiAgICAgICAgICAgIG91dHB1dFR5cGU6IEJ1bmRsaW5nT3V0cHV0LlNJTkdMRV9GSUxFLFxuICAgICAgICAgICAgZnVuY3Rpb25JZDogZm4uZnVuY3Rpb25JZCxcbiAgICAgICAgICAgIGxvY2FsOiB7XG4gICAgICAgICAgICAgIHRyeUJ1bmRsZShvdXRwdXREaXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvc1BsYXRmb3JtID0gb3MucGxhdGZvcm0oKTtcbiAgICAgICAgICAgICAgICBleGVjKFxuICAgICAgICAgICAgICAgICAgb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdjbWQnIDogJ2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBvc1BsYXRmb3JtID09PSAnd2luMzInID8gJy9jJyA6ICctYycsXG4gICAgICAgICAgICAgICAgICAgIGBlc2J1aWxkIC0tYnVuZGxlIC0tc291cmNlbWFwPWlubGluZSAtLXNvdXJjZXMtY29udGVudD1mYWxzZSAtLXRhcmdldD1lc25leHQgLS1wbGF0Zm9ybT1ub2RlIC0tZm9ybWF0PWVzbSAtLWV4dGVybmFsOkBhd3MtYXBwc3luYy91dGlscyAtLW91dGRpcj0ke291dHB1dERpcn0gJHtmbi5lbnRyeUZpbGV9YCxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiB9LFxuICAgICAgICAgICAgICAgICAgICBzdGRpbzogWyAvLyBzaG93IG91dHB1dFxuICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUnLCAvLyBpZ25vcmUgc3RkaW9cbiAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZGVyciwgLy8gcmVkaXJlY3Qgc3Rkb3V0IHRvIHN0ZGVyclxuICAgICAgICAgICAgICAgICAgICAgICdpbmhlcml0JywgLy8gaW5oZXJpdCBzdGRlcnJcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBvc1BsYXRmb3JtID09PSAnd2luMzInLFxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBCdW5kbGluZ09wdGlvbnMsXG4gICAgICAgIH0pLFxuICAgICAgICBydW50aW1lOiBhd3NfYXBwc3luYy5GdW5jdGlvblJ1bnRpbWUuSlNfMV8wXzAsXG4gICAgICB9KTtcbiAgICAgIHBpcGVsaW5lQ29uZmlnLnB1c2goanNGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBydW50aW1lOiBhd3NfYXBwc3luYy5GdW5jdGlvblJ1bnRpbWUuSlNfMV8wXzAsXG4gICAgICBwaXBlbGluZUNvbmZpZyxcbiAgICAgIGNvZGU6IGF3c19hcHBzeW5jLkNvZGUuZnJvbUlubGluZShgXG4gICAgLy8gVGhlIGJlZm9yZSBzdGVwXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoY3R4KSB7XG4gICAgICBjb25zb2xlLmxvZyhjdHgpO1xuJHtPYmplY3QuZW50cmllcyhvcHRpb25zPy5zdGFzaFZhbHVlcyA/PyBbXSkubWFwKHZhbCA9PiBgICAgICAgY3R4LnN0YXNoLiR7dmFsWzBdfSA9ICcke3ZhbFsxXX0nYCkuam9pbignXFxuJyl9XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICAvLyBUaGUgYWZ0ZXIgc3RlcFxuICAgIGV4cG9ydCBmdW5jdGlvbiByZXNwb25zZShjdHgpIHtcbiAgICAgIHJldHVybiBjdHgucHJldi5yZXN1bHRcbiAgICB9XG4gIGApLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KHR5cGVOYW1lOiBUWVBFLCBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSwgb3B0aW9uczogVnRsUmVzb2x2ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuXG4gICAgY29uc3QgbWFwcGluZ1JlcUZpbGUgPSBgLi9zcmMvdnRsLyR7b3BlcmF0aW9uSWR9LnJlcS52dGxgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhtYXBwaW5nUmVxRmlsZSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYygnLi9zcmMvdnRsLycsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhtYXBwaW5nUmVxRmlsZSwgJyMjIFJlcXVlc3QgbWFwcGluZycsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmdSZXNGaWxlID0gYC4vc3JjL3Z0bC8ke29wZXJhdGlvbklkfS5yZXMudnRsYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobWFwcGluZ1Jlc0ZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL3Z0bC8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMobWFwcGluZ1Jlc0ZpbGUsICckdXRpbC50b0pzb24oJGN0eC5yZXN1bHQpJywgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICB9XG5cbiAgICBuZXcgYXdzX2FwcHN5bmMuUmVzb2x2ZXIodGhpcywgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lIGFzIHN0cmluZyxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgIGRhdGFTb3VyY2U6IG9wdGlvbnMuZGF0YVNvdXJjZSxcbiAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6IGF3c19hcHBzeW5jLk1hcHBpbmdUZW1wbGF0ZS5mcm9tU3RyaW5nKHRoaXMuc3Vic3RWYXJpYWJsZXMoZnMucmVhZEZpbGVTeW5jKG1hcHBpbmdSZXFGaWxlKS50b1N0cmluZygndXRmLTgnKSwgb3B0aW9ucy52YXJpYWJsZXMpKSxcbiAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiBhd3NfYXBwc3luYy5NYXBwaW5nVGVtcGxhdGUuZnJvbVN0cmluZyh0aGlzLnN1YnN0VmFyaWFibGVzKGZzLnJlYWRGaWxlU3luYyhtYXBwaW5nUmVzRmlsZSkudG9TdHJpbmcoJ3V0Zi04JyksIG9wdGlvbnMudmFyaWFibGVzKSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnN0VmFyaWFibGVzKGRhdGE6IHN0cmluZywgdmFyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcyA9IGRhdGE7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHZhcnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFycywgbmFtZSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YXJzW25hbWVdO1xuICAgICAgICByZXMgPSByZXMucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcJFxceyR7bmFtZX1cXH1gLCAnZycpLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVudHJ5RmlsZShlbnRyeUZpbGU6IHN0cmluZywgdHlwZU5hbWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcmdUeXBlID0gYCR7dHlwZU5hbWV9JHt1cHBlcmNhc2VGaXJzdChmaWVsZE5hbWUpfUFyZ3NgO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoZW50cnlGaWxlLCBgaW1wb3J0IHsgYXBpIH0gZnJvbSAnY2RrLXNlcnZlcmxlc3MvbGliL2xhbWJkYSc7XG5pbXBvcnQgeyAke3R5cGVOYW1lfSwgJHthcmdUeXBlfSB9IGZyb20gJy4uL2dlbmVyYXRlZC9ncmFwaHFsLiR7dGhpcy5wcm9wcy5hcGlOYW1lLnRvTG93ZXJDYXNlKCl9LW1vZGVsLmdlbmVyYXRlZCc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXBpLmNyZWF0ZUFwcFN5bmNIYW5kbGVyPCR7YXJnVHlwZX0sICR7dHlwZU5hbWV9Wycke2ZpZWxkTmFtZX0nXT4oYXN5bmMgKGN0eCkgPT4ge1xuICBjdHgubG9nZ2VyLmluZm8oSlNPTi5zdHJpbmdpZnkoY3R4LmV2ZW50KSk7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHlldCBpbXBsZW1lbnRlZCcpO1xufSk7YCwge1xuICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUpTUmVzb2x2ZXJGaWxlKGZuOiBKc1Jlc29sdmVyQ29uZmlnLCB0eXBlTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFyZ1R5cGUgPSBgJHt0eXBlTmFtZX0ke3VwcGVyY2FzZUZpcnN0KGZpZWxkTmFtZSl9QXJnc2A7XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IChmbi5pbmRleCA9PSAoZm4uc3RlcENvdW50IC0gMSkpID8gYCR7dHlwZU5hbWV9Wycke2ZpZWxkTmFtZX0nXWAgOiAnYW55JztcblxuICAgIGZzLndyaXRlRmlsZVN5bmMoZm4uZW50cnlGaWxlLCBgaW1wb3J0IHsgQ29udGV4dCwgdXRpbCB9IGZyb20gJ0Bhd3MtYXBwc3luYy91dGlscyc7XG5pbXBvcnQgeyAke3R5cGVOYW1lfSwgJHthcmdUeXBlfSB9IGZyb20gJy4uL2dlbmVyYXRlZC9ncmFwaHFsLiR7dGhpcy5wcm9wcy5hcGlOYW1lLnRvTG93ZXJDYXNlKCl9LW1vZGVsLmdlbmVyYXRlZCc7XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgJHt0eXBlTmFtZX0uJHtmaWVsZE5hbWV9IChTdGVwOiAke2ZuLm5hbWV9ICR7Zm4uaW5kZXggKyAxfS8ke2ZuLnN0ZXBDb3VudH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGN0eDogQ29udGV4dDwke2FyZ1R5cGV9Pik6IGFueSB7XG4gIGNvbnNvbGUubG9nKGN0eCk7XG4gIHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgJHt0eXBlTmFtZX0uJHtmaWVsZE5hbWV9IChTdGVwOiAke2ZuLm5hbWV9ICR7Zm4uaW5kZXggKyAxfS8ke2ZuLnN0ZXBDb3VudH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNwb25zZShjdHg6IENvbnRleHQ8JHthcmdUeXBlfT4pOiAke3JldHVyblR5cGV9IHtcbiAgY29uc29sZS5sb2coY3R4KTtcbiAgcmV0dXJuIGN0eC5yZXN1bHQuaXRlbXM7XG59YCwge1xuICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgfSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB1cHBlcmNhc2VGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyaW5nKDEpO1xufVxuXG4vKipcbiAqIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL21haW4vcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMvbGliL3V0aWwudHNcbiAqIGFzIGl0IGlzIG5vdCBleHBvcnRlZCBieSBhd3MtY2RrLWxpYlxuICovXG5mdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9ucz86IFNwYXduU3luY09wdGlvbnMpIHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjbWQsIGFyZ3MsIG9wdGlvbnMpO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7XG4gICAgdGhyb3cgcHJvYy5lcnJvcjtcbiAgfVxuXG4gIGlmIChwcm9jLnN0YXR1cyAhPT0gMCkge1xuICAgIGlmIChwcm9jLnN0ZG91dCB8fCBwcm9jLnN0ZGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbU3RhdHVzICR7cHJvYy5zdGF0dXN9XSBzdGRvdXQ6ICR7cHJvYy5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpfVxcblxcblxcbnN0ZGVycjogJHtwcm9jLnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCl9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9ICR7b3B0aW9ucz8uY3dkID8gYHJ1biBpbiBkaXJlY3RvcnkgJHtvcHRpb25zLmN3ZH1gIDogJyd9IGV4aXRlZCB3aXRoIHN0YXR1cyAke3Byb2Muc3RhdHVzfWApO1xuICB9XG5cbiAgcmV0dXJuIHByb2M7XG59XG5cbiJdfQ==
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2dyYXBocWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGlEQUE0RDtBQUM1RCx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDZDQUFnTDtBQUdoTCx5Q0FBbUQ7QUFDbkQsaUNBQXdDO0FBQ3hDLCtDQUF5RTtBQTRDekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsVUFBc0IsU0FBUSxrQkFBTztJQXNCaEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVSxLQUFzQjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQWpCeEU7O1dBRUc7UUFDSyxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQWlCakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsY0FBdUMsQ0FBQztRQUVqRSxJQUFJLGdCQUF1RCxDQUFDO1FBQzVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLGdCQUFnQixHQUFHO2dCQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLG9DQUFzQixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQzVFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVztvQkFDNUIsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDeEIsVUFBVSxFQUFFLG9DQUFzQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNsRixDQUFDO2FBQ0gsQ0FBQztZQUNGLElBQUks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SSxFQUFFLGlCQUFpQixJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0SSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pJLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgeyBTcGF3blN5bmNPcHRpb25zLCBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCB7IEFzc2V0SGFzaFR5cGUsIEJ1bmRsaW5nT3B0aW9ucywgQnVuZGxpbmdPdXRwdXQsIENmbk91dHB1dCwgRG9ja2VySW1hZ2UsIFRhZ3MsIGF3c19hcHBzeW5jLCBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLCBhd3NfaWFtLCBhd3NfbG9ncywgYXdzX3JvdXRlNTMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENvZ25pdG9BdXRoZW50aWNhdGlvbiB9IGZyb20gJy4vYXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHsgQmFzZUFwaSwgQmFzZUFwaVByb3BzIH0gZnJvbSAnLi9iYXNlLWFwaSc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJy4vZnVuYyc7XG5pbXBvcnQgeyBDRk5fT1VUUFVUX1NVRkZJWF9HUkFQSFFMX0RPTUFJTk5BTUUgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhRbEFwaVByb3BzIGV4dGVuZHMgQmFzZUFwaVByb3BzIHtcbiAgZGVmaW5pdGlvbkZpbGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnRsUmVzb2x2ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhc291cmNlIHRoZSBWVEwgcmVzb2x2ZXIgdGFyZ2V0c1xuICAgKi9cbiAgZGF0YVNvdXJjZTogYXdzX2FwcHN5bmMuQmFzZURhdGFTb3VyY2U7XG5cbiAgLyoqXG4gICAqIHN0cmluZyByZXBsYWNlbWVudHMgdG8gcHJvY2VzcyBvbiB0aGUgVlRMXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIHZhcmlhYmxlIGV4cGFuc2lvbnNcbiAgICovXG4gIHZhcmlhYmxlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzUmVzb2x2ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgcHV0IGludG8gdGhlIFwic3Rhc2hcIiBvZiB0aGUgcmVzb2x2ZXIgcGlwZWxpbmVcbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc3Rhc2hWYWx1ZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBuYW1lIG9mIHRoZSBwaXBlbGluZSBzdGVwcyB0byBjcmVhdGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBvbmx5IGEgZGVmYXVsdCBzdGVwIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVTdGVwTmFtZXM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEpzUmVzb2x2ZXJDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG4gIGluZGV4OiBudW1iZXI7XG4gIHN0ZXBDb3VudDogbnVtYmVyO1xuICBlbnRyeUZpbGU6IHN0cmluZztcbiAgZnVuY3Rpb25JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBHcmFwaFFsQXBpIGNvbnN0cnVjdCBzZXRzIHVwIGFuIEFXUyBBcHBTeW5jIEdyYXBoUUwgQVBJIGludGVncmF0ZWQgd2l0aCBDb2duaXRvIGZvciBhdXRoZW50aWNhdGlvbiBhbmQgRHluYW1vREIgZm9yIGRhdGEgc3RvcmFnZS5cbiAqIFRoaXMgY29uc3RydWN0IGZhY2lsaXRhdGVzIHRoZSBjcmVhdGlvbiBvZiBhIEdyYXBoUUwgQVBJIHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nIGN1c3RvbSBkb21haW4sIGxvZ2dpbmcsIHNjaGVtYSBkZWZpbml0aW9uLFxuICogYW5kIGF1dGhvcml6YXRpb24gdXNpbmcgQ29nbml0byBVc2VyIFBvb2wgYW5kIElkZW50aXR5IFBvb2wuIEl0IGFsc28gcHJvdmlkZXMgbWV0aG9kcyB0byBkeW5hbWljYWxseSBhZGQgcmVzb2x2ZXJzIGFuZCBncmFudCBhY2Nlc3MgdG8gc3BlY2lmaWMgZmllbGRzLlxuICpcbiAqIEB0ZW1wbGF0ZSBSRVNPTFZFUlMgLSBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgR3JhcGhRTCByZXNvbHZlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFwaSA9IG5ldyBHcmFwaFFsQXBpKHRoaXMsICdNeUdyYXBoUWxBcGknLCB7XG4gKiAgIGFwaU5hbWU6ICdNeUFQSScsXG4gKiAgIHN0YWdlTmFtZTogJ2RldicsXG4gKiAgIGRlZmluaXRpb25GaWxlTmFtZTogJ3NjaGVtYS5ncmFwaHFsJyxcbiAqICAgYXV0aGVudGljYXRpb246IG15Q29nbml0b0F1dGgsXG4gKiAgIHNpbmdsZVRhYmxlRGF0YXN0b3JlOiBteUR5bmFtb0RCVGFibGUsXG4gKiB9KTtcbiAqXG4gKiAvLyBBZGQgYSBMYW1iZGEgcmVzb2x2ZXJcbiAqIGFwaS5hZGRMYW1iZGFSZXNvbHZlcignUXVlcnknLCAnZ2V0SXRlbScpO1xuICpcbiAqIC8vIEdyYW50IGFjY2VzcyB0byB1bmF1dGhlbnRpY2F0ZWQgdXNlcnMgZm9yIGEgc3BlY2lmaWMgcXVlcnlcbiAqIGFwaS5ncmFudEFjY2Vzc1VuQXV0aCgnUXVlcnknLCAnZ2V0SXRlbScpO1xuICovXG5leHBvcnQgY2xhc3MgR3JhcGhRbEFwaTxSRVNPTFZFUlM+IGV4dGVuZHMgQmFzZUFwaSB7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQXBwU3luYyBHcmFwaFFMIEFQSSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IGF3c19hcHBzeW5jLkdyYXBocWxBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCBEeW5hbW9EQiBkYXRhIHNvdXJjZSBmb3IgdGhlIEdyYXBoUUwgQVBJLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlRGF0YVNvdXJjZT86IGF3c19hcHBzeW5jLkR5bmFtb0RiRGF0YVNvdXJjZTtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIExhbWJkYSBmdW5jdGlvbnMgdXNlZCBhcyByZXNvbHZlcnMgZm9yIHRoZSBHcmFwaFFMIEFQSS5cbiAgICovXG4gIHByaXZhdGUgX2Z1bmN0aW9uczogeyBbb3BlcmF0aW9uSWQ6IHN0cmluZ106IExhbWJkYUZ1bmN0aW9uIH0gPSB7fTtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgY29nbml0b0F1dGg6IENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBHcmFwaFFsQXBpLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBHcmFwaFFsQXBpIGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEdyYXBoUWxBcGlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5jb2duaXRvQXV0aCA9IHByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAgIGxldCBjdXN0b21Eb21haW5OYW1lOiBhd3NfYXBwc3luYy5Eb21haW5PcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmFwaUZRRE4pIHtcbiAgICAgIGN1c3RvbURvbWFpbk5hbWUgPSB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgY2VydGlmaWNhdGU6IG5ldyBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDZXJ0Jywge1xuICAgICAgICAgIGhvc3RlZFpvbmU6IHRoaXMuaG9zdGVkWm9uZSEsXG4gICAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgICAgdmFsaWRhdGlvbjogYXdzX2NlcnRpZmljYXRlbWFuYWdlci5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyh0aGlzLmhvc3RlZFpvbmUpLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdHcmFwaFFsQXBpRG9tYWluTmFtZScsIHtcbiAgICAgICAga2V5OiBgJHt0aGlzLnByb3BzLmFwaU5hbWV9JHtDRk5fT1VUUFVUX1NVRkZJWF9HUkFQSFFMX0RPTUFJTk5BTUV9YCxcbiAgICAgICAgdmFsdWU6IHRoaXMuYXBpRlFETixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYXBpID0gbmV3IGF3c19hcHBzeW5jLkdyYXBocWxBcGkodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogYCR7cHJvcHMuYXBpTmFtZX0gWyR7cHJvcHMuc3RhZ2VOYW1lfV1gLFxuICAgICAgbG9nQ29uZmlnOiB7XG4gICAgICAgIGZpZWxkTG9nTGV2ZWw6IGF3c19hcHBzeW5jLkZpZWxkTG9nTGV2ZWwuQUxMLFxuICAgICAgICByZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuVFdPX01PTlRIUyxcbiAgICAgIH0sXG4gICAgICBzY2hlbWE6IGF3c19hcHBzeW5jLlNjaGVtYUZpbGUuZnJvbUFzc2V0KHByb3BzLmRlZmluaXRpb25GaWxlTmFtZSksXG4gICAgICBkb21haW5OYW1lOiBjdXN0b21Eb21haW5OYW1lLFxuICAgICAgLi4udGhpcy5jb2duaXRvQXV0aCAmJiB7XG4gICAgICAgIGF1dGhvcml6YXRpb25Db25maWc6IHtcbiAgICAgICAgICBhZGRpdGlvbmFsQXV0aG9yaXphdGlvbk1vZGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBhd3NfYXBwc3luYy5BdXRob3JpemF0aW9uVHlwZS5VU0VSX1BPT0wsXG4gICAgICAgICAgICAgIHVzZXJQb29sQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgdXNlclBvb2w6IHRoaXMuY29nbml0b0F1dGgudXNlcnBvb2wsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbjogYXdzX2FwcHN5bmMuVXNlclBvb2xEZWZhdWx0QWN0aW9uLkRFTlksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wgPyBbeyBhdXRob3JpemF0aW9uVHlwZTogYXdzX2FwcHN5bmMuQXV0aG9yaXphdGlvblR5cGUuSUFNIH1dIDogW10sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKGN1c3RvbURvbWFpbk5hbWUgJiYgdGhpcy5hcGkuYXBwU3luY0RvbWFpbk5hbWUpIHtcbiAgICAgIG5ldyBhd3Nfcm91dGU1My5DbmFtZVJlY29yZCh0aGlzLCAnRG5zUmVjb3JkJywge1xuICAgICAgICB6b25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICByZWNvcmROYW1lOiBjdXN0b21Eb21haW5OYW1lLmRvbWFpbk5hbWUsXG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpLmFwcFN5bmNEb21haW5OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKChwcm9wcy5tb25pdG9yaW5nID8/IHRydWUpICYmIHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJzVYWEVycm9yJyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnNFhYRXJyb3InLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTAnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTUnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTknLFxuICAgIC8vICAgfSkpO1xuICAgIC8vIH1cblxuICAgIGlmIChwcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSkge1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgYXdzX2FwcHN5bmMuRHluYW1vRGJEYXRhU291cmNlKHRoaXMsICdTaW5nbGVUYWJsZVNvdXJjZScsIHtcbiAgICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgICAgdGFibGU6IHByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlPy50YWJsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIGdyYW50ZWU6IGF3c19pYW0uSUdyYW50YWJsZSxcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICAuLi5maWVsZE5hbWVzOiAoa2V5b2YgRklFTERUWVBFKVtdKTogdm9pZCB7XG4gICAgdGhpcy5hcGkuZ3JhbnQoZ3JhbnRlZSwgYXdzX2FwcHN5bmMuSWFtUmVzb3VyY2Uub2ZUeXBlKHR5cGVOYW1lIGFzIHN0cmluZywgLi4uZmllbGROYW1lcyBhcyBzdHJpbmdbXSksICdhcHBzeW5jOkdyYXBoUUwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzVW5BdXRoPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ3JhbnQgdG8gQ29nbml0byBpZGVudGl0eSBwb29sIGFzIG5vbmUgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgdGhpcy5ncmFudEFjY2Vzcyh0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbC51bmF1dGhlbnRpY2F0ZWRSb2xlLCB0eXBlTmFtZSwgLi4uZmllbGROYW1lcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBncmFudEFjY2Vzc0F1dGg8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBncmFudCB0byBDb2duaXRvIGlkZW50aXR5IHBvb2wgYXMgbm9uZSBpcyBwcm92aWRlZCcpO1xuICAgIH1cbiAgICB0aGlzLmdyYW50QWNjZXNzKHRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sLmF1dGhlbnRpY2F0ZWRSb2xlLCB0eXBlTmFtZSwgLi4uZmllbGROYW1lcyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBnZXRGdW5jdGlvbkZvck9wZXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICApOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uc1tgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gXTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRMYW1iZGFSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGBUeXBlICR7dHlwZU5hbWUgYXMgc3RyaW5nfSBGaWVsZCAke2ZpZWxkTmFtZSBhcyBTdHJpbmd9IFJlc29sdmVyYDtcblxuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGAuL3NyYy9sYW1iZGEvJHtvcGVyYXRpb25JZH0udHNgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhlbnRyeUZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL2xhbWJkYS8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuY3JlYXRlRW50cnlGaWxlKGVudHJ5RmlsZSwgdHlwZU5hbWUgYXMgc3RyaW5nLCBmaWVsZE5hbWUgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCBgRm4ke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB0aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dICR7ZGVzY3JpcHRpb259YCxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gJiYge1xuICAgICAgICB1c2VyUG9vbDogKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgQ29nbml0b0F1dGhlbnRpY2F0aW9uKS51c2VycG9vbCxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlICYmIHtcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUudGFibGUsXG4gICAgICAgIHRhYmxlV3JpdGVzOiB0eXBlTmFtZSA9PT0gJ011dGF0aW9uJyxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLmFzc2V0Q2RuICYmIHtcbiAgICAgICAgYXNzZXREb21haW5OYW1lOiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0RG9tYWluTmFtZSxcbiAgICAgICAgYXNzZXRCdWNrZXQ6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXRCdWNrZXQsXG4gICAgICB9LFxuICAgICAgbGFtYmRhT3B0aW9uczogdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZF0gPSBmbjtcbiAgICBUYWdzLm9mKGZuKS5hZGQoJ0dyYXBoUUwnLCBkZXNjcmlwdGlvbik7XG5cbiAgICAvLyBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBhd3NfYXBwc3luYy5MYW1iZGFEYXRhU291cmNlKHRoaXMsIGBMYW1iZGFEUyR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIG5hbWU6IGBMYW1iZGFfJHt0eXBlTmFtZSBhcyBzdHJpbmd9XyR7ZmllbGROYW1lIGFzIFN0cmluZ31gLFxuICAgICAgbGFtYmRhRnVuY3Rpb246IGZuLFxuICAgIH0pO1xuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlLFxuICAgIH0pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGREeW5hbW9EYlZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIG9wdGlvbnM/OiBPbWl0PFZ0bFJlc29sdmVyT3B0aW9ucywgJ2RhdGFTb3VyY2UnPik6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRHluYW1vREIgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWRkVnRsUmVzb2x2ZXIodHlwZU5hbWUsIGZpZWxkTmFtZSwge1xuICAgICAgZGF0YVNvdXJjZTogdGhpcy50YWJsZURhdGFTb3VyY2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtb0RiSlNSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgICBvcHRpb25zPzogSnNSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVEYXRhU291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtb0RCIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICB0aGlzLmFkZEpTUmVzb2x2ZXIodHlwZU5hbWUsIGZpZWxkTmFtZSwgdGhpcy50YWJsZURhdGFTb3VyY2UsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBzdGFzaFZhbHVlczoge1xuICAgICAgICAuLi5vcHRpb25zPy5zdGFzaFZhbHVlcyA/PyB7fSxcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUhLnRhYmxlLnRhYmxlTmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkSlNSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgICBkYXRhU291cmNlOiBhd3NfYXBwc3luYy5CYXNlRGF0YVNvdXJjZSwgb3B0aW9ucz86IEpzUmVzb2x2ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYFR5cGUgJHt0eXBlTmFtZSBhcyBzdHJpbmd9IEZpZWxkICR7ZmllbGROYW1lIGFzIFN0cmluZ30gUmVzb2x2ZXJgO1xuXG4gICAgY29uc3QgcmVzb2x2ZXJEaXIgPSAnLi9zcmMvanMtcmVzb2x2ZXIvJztcbiAgICBjb25zdCBmdW5jdGlvbnM6IEpzUmVzb2x2ZXJDb25maWdbXSA9IFtdO1xuXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBpcGVsaW5lU3RlcE5hbWVzIHx8IG9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubGVuZ3RoID09IDApIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2RlZmF1bHQnLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgc3RlcENvdW50OiAxLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS50c2AsXG4gICAgICAgIGZ1bmN0aW9uSWQ6IGBKU0Z1bmN0aW9uJHtvcGVyYXRpb25JZH1gLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKC4uLm9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHN0ZXBDb3VudDogb3B0aW9ucy5waXBlbGluZVN0ZXBOYW1lcyEubGVuZ3RoLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS4ke25hbWV9LnRzYCxcbiAgICAgICAgZnVuY3Rpb25JZDogYEpTRnVuY3Rpb24ke29wZXJhdGlvbklkfSR7bmFtZX1gLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaXBlbGluZUNvbmZpZyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmbi5lbnRyeUZpbGUpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhyZXNvbHZlckRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlSlNSZXNvbHZlckZpbGUoZm4sIHR5cGVOYW1lIGFzIHN0cmluZywgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzRnVuY3Rpb24gPSBuZXcgYXdzX2FwcHN5bmMuQXBwc3luY0Z1bmN0aW9uKHRoaXMsIGZuLmZ1bmN0aW9uSWQsIHtcbiAgICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgICAgbmFtZTogb3BlcmF0aW9uSWQucmVwbGFjZSgvXFwuL2csICcnKSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIGNvZGU6IGF3c19hcHBzeW5jLkNvZGUuZnJvbUFzc2V0KCcuJywge1xuICAgICAgICAgIGFzc2V0SGFzaFR5cGU6IEFzc2V0SGFzaFR5cGUuT1VUUFVULFxuICAgICAgICAgIGRlcGxveVRpbWU6IHRydWUsXG4gICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoJ2R1bW15JyksIC8vIFdpbGwgbmV2ZXIgYmUgdXNlZCBkdWUgdG8gbG9jYWwgYnVuZGxpbmdcbiAgICAgICAgICAgIG91dHB1dFR5cGU6IEJ1bmRsaW5nT3V0cHV0LlNJTkdMRV9GSUxFLFxuICAgICAgICAgICAgZnVuY3Rpb25JZDogZm4uZnVuY3Rpb25JZCxcbiAgICAgICAgICAgIGxvY2FsOiB7XG4gICAgICAgICAgICAgIHRyeUJ1bmRsZShvdXRwdXREaXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvc1BsYXRmb3JtID0gb3MucGxhdGZvcm0oKTtcbiAgICAgICAgICAgICAgICBleGVjKFxuICAgICAgICAgICAgICAgICAgb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdjbWQnIDogJ2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBvc1BsYXRmb3JtID09PSAnd2luMzInID8gJy9jJyA6ICctYycsXG4gICAgICAgICAgICAgICAgICAgIGBlc2J1aWxkIC0tYnVuZGxlIC0tc291cmNlbWFwPWlubGluZSAtLXNvdXJjZXMtY29udGVudD1mYWxzZSAtLXRhcmdldD1lc25leHQgLS1wbGF0Zm9ybT1ub2RlIC0tZm9ybWF0PWVzbSAtLWV4dGVybmFsOkBhd3MtYXBwc3luYy91dGlscyAtLW91dGRpcj0ke291dHB1dERpcn0gJHtmbi5lbnRyeUZpbGV9YCxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiB9LFxuICAgICAgICAgICAgICAgICAgICBzdGRpbzogWyAvLyBzaG93IG91dHB1dFxuICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUnLCAvLyBpZ25vcmUgc3RkaW9cbiAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZGVyciwgLy8gcmVkaXJlY3Qgc3Rkb3V0IHRvIHN0ZGVyclxuICAgICAgICAgICAgICAgICAgICAgICdpbmhlcml0JywgLy8gaW5oZXJpdCBzdGRlcnJcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBvc1BsYXRmb3JtID09PSAnd2luMzInLFxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBCdW5kbGluZ09wdGlvbnMsXG4gICAgICAgIH0pLFxuICAgICAgICBydW50aW1lOiBhd3NfYXBwc3luYy5GdW5jdGlvblJ1bnRpbWUuSlNfMV8wXzAsXG4gICAgICB9KTtcbiAgICAgIHBpcGVsaW5lQ29uZmlnLnB1c2goanNGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBydW50aW1lOiBhd3NfYXBwc3luYy5GdW5jdGlvblJ1bnRpbWUuSlNfMV8wXzAsXG4gICAgICBwaXBlbGluZUNvbmZpZyxcbiAgICAgIGNvZGU6IGF3c19hcHBzeW5jLkNvZGUuZnJvbUlubGluZShgXG4gICAgLy8gVGhlIGJlZm9yZSBzdGVwXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoY3R4KSB7XG4gICAgICBjb25zb2xlLmxvZyhjdHgpO1xuJHtPYmplY3QuZW50cmllcyhvcHRpb25zPy5zdGFzaFZhbHVlcyA/PyBbXSkubWFwKHZhbCA9PiBgICAgICAgY3R4LnN0YXNoLiR7dmFsWzBdfSA9ICcke3ZhbFsxXX0nYCkuam9pbignXFxuJyl9XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICAvLyBUaGUgYWZ0ZXIgc3RlcFxuICAgIGV4cG9ydCBmdW5jdGlvbiByZXNwb25zZShjdHgpIHtcbiAgICAgIHJldHVybiBjdHgucHJldi5yZXN1bHRcbiAgICB9XG4gIGApLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIG9wdGlvbnM6IFZ0bFJlc29sdmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YDtcblxuICAgIGNvbnN0IG1hcHBpbmdSZXFGaWxlID0gYC4vc3JjL3Z0bC8ke29wZXJhdGlvbklkfS5yZXEudnRsYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobWFwcGluZ1JlcUZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL3Z0bC8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMobWFwcGluZ1JlcUZpbGUsICcjIyBSZXF1ZXN0IG1hcHBpbmcnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nUmVzRmlsZSA9IGAuL3NyYy92dGwvJHtvcGVyYXRpb25JZH0ucmVzLnZ0bGA7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG1hcHBpbmdSZXNGaWxlKSkge1xuICAgICAgZnMubWtkaXJTeW5jKCcuL3NyYy92dGwvJywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlLCAnJHV0aWwudG9Kc29uKCRjdHgucmVzdWx0KScsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlOiBvcHRpb25zLmRhdGFTb3VyY2UsXG4gICAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiBhd3NfYXBwc3luYy5NYXBwaW5nVGVtcGxhdGUuZnJvbVN0cmluZyh0aGlzLnN1YnN0VmFyaWFibGVzKGZzLnJlYWRGaWxlU3luYyhtYXBwaW5nUmVxRmlsZSkudG9TdHJpbmcoJ3V0Zi04JyksIG9wdGlvbnMudmFyaWFibGVzKSksXG4gICAgICByZXNwb25zZU1hcHBpbmdUZW1wbGF0ZTogYXdzX2FwcHN5bmMuTWFwcGluZ1RlbXBsYXRlLmZyb21TdHJpbmcodGhpcy5zdWJzdFZhcmlhYmxlcyhmcy5yZWFkRmlsZVN5bmMobWFwcGluZ1Jlc0ZpbGUpLnRvU3RyaW5nKCd1dGYtOCcpLCBvcHRpb25zLnZhcmlhYmxlcykpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzdFZhcmlhYmxlcyhkYXRhOiBzdHJpbmcsIHZhcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge30pOiBzdHJpbmcge1xuICAgIGxldCByZXMgPSBkYXRhO1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiB2YXJzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhcnMsIG5hbWUpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFyc1tuYW1lXTtcbiAgICAgICAgcmVzID0gcmVzLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXCRcXHske25hbWV9XFx9YCwgJ2cnKSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbnRyeUZpbGUoZW50cnlGaWxlOiBzdHJpbmcsIHR5cGVOYW1lOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXJnVHlwZSA9IGAke3R5cGVOYW1lfSR7dXBwZXJjYXNlRmlyc3QoZmllbGROYW1lKX1BcmdzYDtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGltcG9ydCB7IGFwaSB9IGZyb20gJ2Nkay1zZXJ2ZXJsZXNzL2xpYi9sYW1iZGEnO1xuaW1wb3J0IHsgJHt0eXBlTmFtZX0sICR7YXJnVHlwZX0gfSBmcm9tICcuLi9nZW5lcmF0ZWQvZ3JhcGhxbC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS1tb2RlbC5nZW5lcmF0ZWQnO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFwaS5jcmVhdGVBcHBTeW5jSGFuZGxlcjwke2FyZ1R5cGV9LCAke3R5cGVOYW1lfVsnJHtmaWVsZE5hbWV9J10+KGFzeW5jIChjdHgpID0+IHtcbiAgY3R4LmxvZ2dlci5pbmZvKEpTT04uc3RyaW5naWZ5KGN0eC5ldmVudCkpO1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbn0pO2AsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKU1Jlc29sdmVyRmlsZShmbjogSnNSZXNvbHZlckNvbmZpZywgdHlwZU5hbWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcmdUeXBlID0gYCR7dHlwZU5hbWV9JHt1cHBlcmNhc2VGaXJzdChmaWVsZE5hbWUpfUFyZ3NgO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSAoZm4uaW5kZXggPT0gKGZuLnN0ZXBDb3VudCAtIDEpKSA/IGAke3R5cGVOYW1lfVsnJHtmaWVsZE5hbWV9J11gIDogJ2FueSc7XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKGZuLmVudHJ5RmlsZSwgYGltcG9ydCB7IENvbnRleHQsIHV0aWwgfSBmcm9tICdAYXdzLWFwcHN5bmMvdXRpbHMnO1xuaW1wb3J0IHsgJHt0eXBlTmFtZX0sICR7YXJnVHlwZX0gfSBmcm9tICcuLi9nZW5lcmF0ZWQvZ3JhcGhxbC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS1tb2RlbC5nZW5lcmF0ZWQnO1xuXG4vKipcbiAqIFJlcXVlc3QgZm9yICR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfSAoU3RlcDogJHtmbi5uYW1lfSAke2ZuLmluZGV4ICsgMX0vJHtmbi5zdGVwQ291bnR9KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChjdHg6IENvbnRleHQ8JHthcmdUeXBlfT4pOiBhbnkge1xuICBjb25zb2xlLmxvZyhjdHgpO1xuICByZXR1cm4ge307XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yICR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfSAoU3RlcDogJHtmbi5uYW1lfSAke2ZuLmluZGV4ICsgMX0vJHtmbi5zdGVwQ291bnR9KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzcG9uc2UoY3R4OiBDb250ZXh0PCR7YXJnVHlwZX0+KTogJHtyZXR1cm5UeXBlfSB7XG4gIGNvbnNvbGUubG9nKGN0eCk7XG4gIHJldHVybiBjdHgucmVzdWx0Lml0ZW1zO1xufWAsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgIH0pO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gdXBwZXJjYXNlRmlyc3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cmluZygxKTtcbn1cblxuLyoqXG4gKiBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9tYWluL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzL2xpYi91dGlsLnRzXG4gKiBhcyBpdCBpcyBub3QgZXhwb3J0ZWQgYnkgYXdzLWNkay1saWJcbiAqL1xuZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBTcGF3blN5bmNPcHRpb25zKSB7XG4gIGNvbnN0IHByb2MgPSBzcGF3blN5bmMoY21kLCBhcmdzLCBvcHRpb25zKTtcblxuICBpZiAocHJvYy5lcnJvcikge1xuICAgIHRocm93IHByb2MuZXJyb3I7XG4gIH1cblxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvYy5zdGRvdXQgfHwgcHJvYy5zdGRlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW1N0YXR1cyAke3Byb2Muc3RhdHVzfV0gc3Rkb3V0OiAke3Byb2Muc3Rkb3V0Py50b1N0cmluZygpLnRyaW0oKX1cXG5cXG5cXG5zdGRlcnI6ICR7cHJvYy5zdGRlcnI/LnRvU3RyaW5nKCkudHJpbSgpfWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y21kfSAke2FyZ3Muam9pbignICcpfSAke29wdGlvbnM/LmN3ZCA/IGBydW4gaW4gZGlyZWN0b3J5ICR7b3B0aW9ucy5jd2R9YCA6ICcnfSBleGl0ZWQgd2l0aCBzdGF0dXMgJHtwcm9jLnN0YXR1c31gKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jO1xufVxuXG4iXX0=
@@ -74,7 +74,6 @@ class RestApi extends base_api_1.BaseApi {
74
74
  * @param props - The properties of the RestApi construct.
75
75
  */
76
76
  constructor(scope, id, props) {
77
- var _a;
78
77
  super(scope, id, props);
79
78
  this.props = props;
80
79
  /**
@@ -121,7 +120,7 @@ class RestApi extends base_api_1.BaseApi {
121
120
  // statistic: 'p99',
122
121
  // }));
123
122
  // }
124
- if ((_a = props.autoGenerateRoutes) !== null && _a !== void 0 ? _a : true) {
123
+ if (props.autoGenerateRoutes ?? true) {
125
124
  for (const path in this.apiSpec.paths) {
126
125
  if (Object.prototype.hasOwnProperty.call(this.apiSpec.paths, path)) {
127
126
  const pathItem = this.apiSpec.paths[path];
@@ -378,4 +377,4 @@ class RestApi extends base_api_1.BaseApi {
378
377
  }
379
378
  }
380
379
  exports.RestApi = RestApi;
381
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9yZXN0LWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsNkNBTXFCO0FBQ3JCLGlEQUFtQztBQUVuQyw4Q0FBZ0M7QUFHaEMseUNBQW1EO0FBQ25ELGlDQUF1RDtBQUN2RCwrQ0FBd0c7QUE4QnhHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsT0FBb0IsU0FBUSxrQkFBTztJQWtCOUM7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVSxLQUF3Qjs7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFEd0IsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFiMUU7OztXQUdHO1FBQ0ssZUFBVSxHQUE4QyxFQUFFLENBQUM7UUFZakUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQWEsQ0FBQztRQUUzRixJQUFJLGdCQUE4RCxDQUFDO1FBQ25FLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLGdCQUFnQixHQUFHO2dCQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLG9DQUFzQixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO29CQUNoRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3hCLFVBQVUsRUFBRSxvQ0FBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDbEYsQ0FBQzthQUNILENBQUM7WUFDRixJQUFJ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QUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxNQUFNLENBQUM7WUFDWjtnQkFDRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ08sYUFBYSxDQUFDLElBQWM7UUFDcEMsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsS0FBSyxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDM0Isd0dBQXdHO29CQUN4RyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkMsU0FBUyxDQUFDLHFDQUFxQztvQkFDakQsQ0FBQztvQkFFRCxNQUFNLFVBQVUsR0FBSSxRQUEyQixDQUFDLEdBQTJCLENBQUUsQ0FBQztvQkFDOUUsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQ2hDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztDQUVGO0FBbldELDBCQW1XQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7XG4gIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIsXG4gIGF3c19pYW0sXG4gIGF3c19yb3V0ZTUzLFxuICBhd3Nfcm91dGU1M190YXJnZXRzLFxuICBhd3NfYXBpZ2F0ZXdheSxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7IE9wZW5BUEkzLCBPcGVyYXRpb25PYmplY3QsIFBhdGhJdGVtT2JqZWN0IH0gZnJvbSAnb3BlbmFwaS10eXBlc2NyaXB0JztcbmltcG9ydCB7IElDb2duaXRvQXV0aGVudGljYXRpb24sIElKd3RBdXRoZW50aWNhdGlvbiB9IGZyb20gJy4vYXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHsgQmFzZUFwaSwgQmFzZUFwaVByb3BzIH0gZnJvbSAnLi9iYXNlLWFwaSc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiwgTGFtYmRhT3B0aW9ucyB9IGZyb20gJy4vZnVuYyc7XG5pbXBvcnQgeyBDRk5fT1VUUFVUX1NVRkZJWF9SRVNUQVBJX0RPTUFJTk5BTUUsIENGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfVVJMIH0gZnJvbSAnLi4vc2hhcmVkL291dHB1dHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RBcGlQcm9wczxPUFM+IGV4dGVuZHMgQmFzZUFwaVByb3BzIHtcblxuICAvKipcbiAgICogR2VuZXJhdGUgcm91dGVzIGZvciBhbGwgZW5kcG9pbnRzIGNvbmZpZ3VyZWQgaW4gdGhlIG9wZW5hcGkueWFtbCBmaWxlXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGF1dG9HZW5lcmF0ZVJvdXRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGN1c3RvbSBvcHRpb25zIGZvciB0aGUgY3JlYXRlZCBIdHRwQXBpXG4gICAqXG4gICAqIEBkZWZhdWx0IC1cbiAgICovXG4gIHJlc3RBcGlQcm9wcz86IGF3c19hcGlnYXRld2F5LlJlc3RBcGlCYXNlUHJvcHM7XG5cbiAgLyoqXG4gICAqIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHVuZGVybHlpbmcgTGFtYmRhIGZ1bmN0aW9uIGNvbnN0cnVjdCBwZXIgb3BlcmF0aW9uSWRcbiAgICpcbiAgICogQGRlZmF1bHQgLVxuICAgKi9cbiAgbGFtYmRhT3B0aW9uc0J5T3BlcmF0aW9uPzogeyBbb3BlcmF0aW9uSWQgaW4ga2V5b2YgT1BTXT86IExhbWJkYU9wdGlvbnMgfTtcblxuICBkZWZpbml0aW9uRmlsZU5hbWU6IHN0cmluZztcblxuICBjb3JzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBSZXN0QXBpIGNvbnN0cnVjdCBzZXRzIHVwIGFuIEFXUyBBUEkgR2F0ZXdheSBSRVNUIEFQSSB1c2luZyBPcGVuQVBJIHNwZWNpZmljYXRpb24uXG4gKiBUaGlzIGNvbnN0cnVjdCBmYWNpbGl0YXRlcyB0aGUgY3JlYXRpb24gb2YgYSBSRVNUIEFQSSB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBjdXN0b20gZG9tYWluLCBDT1JTIHN1cHBvcnQsIGFuZCBpbnRlZ3JhdGlvbiB3aXRoIExhbWJkYSBmdW5jdGlvbnMuXG4gKiBJdCBhbGxvd3MgYXV0by1nZW5lcmF0aW5nIHJvdXRlcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgT3BlbkFQSSBkZWZpbml0aW9uIGFuZCBwcm92aWRlcyBtZXRob2RzIHRvIGR5bmFtaWNhbGx5IGFkZCBjdXN0b20gcm91dGVzIGFuZCBtYW5hZ2UgTGFtYmRhIGZ1bmN0aW9uIGludGVncmF0aW9ucy5cbiAqXG4gKiBAdGVtcGxhdGUgUEFUSFMgLSBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgQVBJIHBhdGhzLlxuICogQHRlbXBsYXRlIE9QUyAtIFRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBBUEkgb3BlcmF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYXBpID0gbmV3IFJlc3RBcGkodGhpcywgJ015UmVzdEFwaScsIHtcbiAqICAgYXBpTmFtZTogJ015QVBJJyxcbiAqICAgc3RhZ2VOYW1lOiAnZGV2JyxcbiAqICAgZGVmaW5pdGlvbkZpbGVOYW1lOiAnb3BlbmFwaS55YW1sJyxcbiAqICAgYXV0aGVudGljYXRpb246IG15Q29nbml0b0F1dGgsXG4gKiAgIHNpbmdsZVRhYmxlRGF0YXN0b3JlOiBteUR5bmFtb0RCVGFibGUsXG4gKiAgIGF1dG9HZW5lcmF0ZVJvdXRlczogdHJ1ZSxcbiAqIH0pO1xuICpcbiAqIC8vIEFkZCBhIGN1c3RvbSBSRVNUIHJlc291cmNlXG4gKiBhcGkuYWRkUmVzdFJlc291cmNlKCcvaXRlbXMnLCAnZ2V0Jyk7XG4gKlxuICogLy8gR2V0IHRoZSBMYW1iZGEgZnVuY3Rpb24gZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uXG4gKiBjb25zdCBsYW1iZGFGdW5jdGlvbiA9IGFwaS5nZXRGdW5jdGlvbkZvck9wZXJhdGlvbignZ2V0SXRlbXMnKTtcbiAqL1xuZXhwb3J0IGNsYXNzIFJlc3RBcGk8UEFUSFMsIE9QUz4gZXh0ZW5kcyBCYXNlQXBpIHtcblxuICAvKipcbiAgICogVGhlIEFXUyBBUEkgR2F0ZXdheSBSRVNUIEFQSSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IGF3c19hcGlnYXRld2F5LlNwZWNSZXN0QXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgT3BlbkFQSSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgUkVTVCBBUEkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpU3BlYzogT3BlbkFQSTM7XG5cbiAgLyoqXG4gICAqIEEgY29sbGVjdGlvbiBvZiBMYW1iZGEgZnVuY3Rpb25zIHVzZWQgYXMgaW50ZWdyYXRpb25zIGZvciB0aGUgQVBJIG9wZXJhdGlvbnMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9mdW5jdGlvbnM6IHsgW29wZXJhdGlvbklkOiBzdHJpbmddOiBMYW1iZGFGdW5jdGlvbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUmVzdEFwaS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRoaXMgY29uc3RydWN0IGlzIGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgUmVzdEFwaSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHByb3BzOiBSZXN0QXBpUHJvcHM8T1BTPikge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5hcGlTcGVjID0geWFtbC5sb2FkKGZzLnJlYWRGaWxlU3luYyhwcm9wcy5kZWZpbml0aW9uRmlsZU5hbWUpLnRvU3RyaW5nKCkpIGFzIE9wZW5BUEkzO1xuXG4gICAgbGV0IGN1c3RvbURvbWFpbk5hbWU6IGF3c19hcGlnYXRld2F5LkRvbWFpbk5hbWVPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmFwaUZRRE4pIHtcbiAgICAgIGN1c3RvbURvbWFpbk5hbWUgPSB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgY2VydGlmaWNhdGU6IG5ldyBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkNlcnRpZmljYXRlKHRoaXMsICdDZXJ0Jywge1xuICAgICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgICB2YWxpZGF0aW9uOiBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkNlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKHRoaXMuaG9zdGVkWm9uZSksXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdSZXN0QXBpRG9tYWluTmFtZScsIHtcbiAgICAgICAga2V5OiBgJHt0aGlzLnByb3BzLmFwaU5hbWV9JHtDRk5fT1VUUFVUX1NVRkZJWF9SRVNUQVBJX0RPTUFJTk5BTUV9YCxcbiAgICAgICAgdmFsdWU6IHRoaXMuYXBpRlFETixcbiAgICAgIH0pO1xuICAgICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ1Jlc3RBcGlVcmxPdXRwdXQnLCB7XG4gICAgICAgIGtleTogYCR7dGhpcy5wcm9wcy5hcGlOYW1lfSR7Q0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9VUkx9YCxcbiAgICAgICAgdmFsdWU6ICdodHRwczovLycgKyB0aGlzLmFwaUZRRE4sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBpZiAoKHByb3BzLm1vbml0b3JpbmcgPz8gdHJ1ZSkgJiYgdGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljU2VydmVyRXJyb3Ioe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0NsaWVudEVycm9yKHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcblxuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTAnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5NScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVRhaWxXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDk5JyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyB9XG5cbiAgICBpZiAocHJvcHMuYXV0b0dlbmVyYXRlUm91dGVzID8/IHRydWUpIHtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBpbiB0aGlzLmFwaVNwZWMucGF0aHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmFwaVNwZWMucGF0aHMsIHBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgcGF0aEl0ZW0gPSB0aGlzLmFwaVNwZWMucGF0aHNbcGF0aF07XG4gICAgICAgICAgZm9yIChjb25zdCBtZXRob2QgaW4gcGF0aEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGF0aEl0ZW0sIG1ldGhvZCkgJiZcbiAgICAgICAgICAgICAgWydnZXQnLCAncG9zdCcsICdwdXQnLCAnZGVsZXRlJywgJ3BhdGNoJywgJ29wdGlvbnMnLCAnaGVhZCddLmluZGV4T2YobWV0aG9kKSA+PSAwKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBhbGwgb3BlcmF0aW9uc1xuICAgICAgICAgICAgICB0aGlzLmFkZFJlc3RSZXNvdXJjZShwYXRoIGFzIGFueSwgbWV0aG9kIGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIF9zcGVjIEVuZHBvaW50XG4gICAgdGhpcy5hcGlTcGVjLnBhdGhzIVsnL29wZW5hcGkuanNvbiddID0ge1xuICAgICAgZ2V0OiB7XG4gICAgICAgICdzdW1tYXJ5JzogJ1JldHVybnMgdGhlIHJhdyBPcGVuQVBJIHNwZWMgb2YgdGhpcyBBUEknLFxuICAgICAgICAnZGVzY3JpcHRpb24nOiAnUmV0dXJucyB0aGUgcmF3IE9wZW5BUEkgc3BlYyBvZiB0aGlzIEFQSScsXG4gICAgICAgICdvcGVyYXRpb25JZCc6ICdfc3BlYycsXG4gICAgICAgICdyZXNwb25zZXMnOiB7XG4gICAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ09wZW5BUEkgc3BlYyBvZiB0aGlzIEFQSScsXG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vcGVuYXBpK2pzb24nOiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBDdXN0b20gcHJvcGVydHkgZm9yIEFXU1xuICAgICAgICAneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbic6IHtcbiAgICAgICAgICB0eXBlOiAnbW9jaycsXG4gICAgICAgICAgaHR0cE1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246ICcxLjAnLFxuICAgICAgICAgIHJlcXVlc3RUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogJ3tcXCdzdGF0dXNDb2RlXFwnOiAyMDB9JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDIwMCxcbiAgICAgICAgICAgICAgcmVzcG9uc2VUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vb3BlbmFwaStqc29uJzogSlNPTi5zdHJpbmdpZnkodGhpcy5jbGVhbnVwU3BlYyhKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KCh0aGlzLmFwaVNwZWMpKSkpKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmIChwcm9wcy5jb3JzKSB7XG4gICAgICB0aGlzLmFwaVNwZWMucGF0aHMhWycve3Byb3h5K30nXSA9IHtcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICdzdW1tYXJ5JzogJ0NPUlMgc3VwcG9ydCcsXG4gICAgICAgICAgJ2Rlc2NyaXB0aW9uJzogJ0VuYWJsZSBDT1JTIGJ5IHJldHVybmluZyBjb3JyZWN0IGhlYWRlcnMnLFxuICAgICAgICAgICd0YWdzJzogWydDT1JTJ10sXG4gICAgICAgICAgJ3Jlc3BvbnNlcyc6IHtcbiAgICAgICAgICAgIDIwMDoge1xuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0RlZmF1bHQgcmVzcG9uc2UgZm9yIENPUlMgbWV0aG9kJyxcbiAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiB7IHNjaGVtYTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiB7IHNjaGVtYTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogeyBzY2hlbWE6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJzogeyBzY2hlbWE6IHsgdHlwZTogJ3N0cmluZycgfSB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb250ZW50OiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbic6IHtcbiAgICAgICAgICAgIHR5cGU6ICdtb2NrJyxcbiAgICAgICAgICAgIHJlcXVlc3RUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAnI3NldCgkY29udGV4dC5yZXF1ZXN0T3ZlcnJpZGUuaGVhZGVyLm9yaWdpbiA9ICRtZXRob2QucmVxdWVzdC5oZWFkZXIub3JpZ2luKVxcbntcXG4gIFwic3RhdHVzQ29kZVwiIDogMjAwXFxufVxcbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAnMjAwJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiBcIidDb250ZW50LVR5cGUsWC1BbXotRGF0ZSxBdXRob3JpemF0aW9uLFgtQXBpLUtleSdcIixcbiAgICAgICAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJzogXCIndHJ1ZSdcIixcbiAgICAgICAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiBcIidQVVQsR0VULFBPU1QsREVMRVRFLFBBVENILEhFQUQsT1BUSU9OUydcIixcbiAgICAgICAgICAgICAgICAgICdtZXRob2QucmVzcG9uc2UuaGVhZGVyLkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICdjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5oZWFkZXIub3JpZ2luJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6ICd7fScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5wYXRjaFNlY3VyaXR5KHRoaXMuYXBpU3BlYyk7XG5cbiAgICAvLyBUT0RPIHBhdGNoIHNwZWMgZm9yIENvZ25pdG8gdXNlciBwb29sXG5cbiAgICB0aGlzLmFwaSA9IG5ldyBhd3NfYXBpZ2F0ZXdheS5TcGVjUmVzdEFwaSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICByZXN0QXBpTmFtZTogYCR7cHJvcHMuYXBpTmFtZX0gWyR7cHJvcHMuc3RhZ2VOYW1lfV1gLFxuICAgICAgZG9tYWluTmFtZTogY3VzdG9tRG9tYWluTmFtZSxcbiAgICAgIGFwaURlZmluaXRpb246IGF3c19hcGlnYXRld2F5LkFwaURlZmluaXRpb24uZnJvbUlubGluZSh0aGlzLmFwaVNwZWMpLFxuICAgICAgLi4ucHJvcHMucmVzdEFwaVByb3BzLFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIGludm9rZSBwZXJtaXNzaW9ucyB0byBMYW1iZGEgZnVuY3Rpb25zXG4gICAgZm9yIChjb25zdCBmbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuX2Z1bmN0aW9ucykpIHtcbiAgICAgIGZuLmFkZFBlcm1pc3Npb24oJ1Jlc3RBcGlJbnZva2UnLCB7XG4gICAgICAgIHByaW5jaXBhbDogbmV3IGF3c19pYW0uU2VydmljZVByaW5jaXBhbCgnYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIGFjdGlvbjogJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsXG4gICAgICAgIHNvdXJjZUFybjogdGhpcy5hcGkuYXJuRm9yRXhlY3V0ZUFwaSgpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGN1c3RvbURvbWFpbk5hbWUgJiYgdGhpcy5hcGkuZG9tYWluTmFtZSkge1xuICAgICAgbmV3IGF3c19yb3V0ZTUzLkFSZWNvcmQodGhpcywgJ0Ruc1JlY29yZCcsIHtcbiAgICAgICAgem9uZTogdGhpcy5ob3N0ZWRab25lISxcbiAgICAgICAgcmVjb3JkTmFtZTogY3VzdG9tRG9tYWluTmFtZS5kb21haW5OYW1lLFxuICAgICAgICB0YXJnZXQ6IGF3c19yb3V0ZTUzLlJlY29yZFRhcmdldC5mcm9tQWxpYXMoXG4gICAgICAgICAgbmV3IGF3c19yb3V0ZTUzX3RhcmdldHMuQXBpR2F0ZXdheURvbWFpbih0aGlzLmFwaS5kb21haW5OYW1lKSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFudXBTcGVjKHNwZWM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBPYmplY3QuZW50cmllcyhzcGVjKS5mb3JFYWNoKChbcHJvcCwgdmFsdWVdOiBbc3RyaW5nLCBhbnldKSA9PiB7XG4gICAgICBpZiAocHJvcC5zdGFydHNXaXRoKCd4LScpKSB7XG4gICAgICAgIGRlbGV0ZSBzcGVjW3Byb3BdO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRoaXMuY2xlYW51cFNwZWMoc3BlY1twcm9wXSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3BlYztcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIGdlbmVyYXRlZCBMYW1iZGEgZnVuY3Rpb24gZm9yIHRoZSBzcGVjaWZpZWQgQVBJIG9wZXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uKG9wZXJhdGlvbklkOiBrZXlvZiBPUFMpOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZCBhcyBzdHJpbmddO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiBhIGxpc3Qgb2YgYWxsIGdlbmVyYXRlZCBMYW1iZGEgZnVuY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25zKCk6IExhbWJkYUZ1bmN0aW9uW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2Z1bmN0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVmlzaXRvciBtZXRob2QgdG8gbW9kaWZ5IHRoZSBnaXZlbiBmdW5jdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbklkcyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gdmlzaXRcbiAgICogQHBhcmFtIG9wIHRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBldmVyeSBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIG1vZGlmeU9wZXJhdGlvbkZ1bmN0aW9ucyhvcGVyYXRpb25JZHM6IChrZXlvZiBPUFMpW10sIG9wOiAoZm46IExhbWJkYUZ1bmN0aW9uKSA9PiB2b2lkKSB7XG4gICAgZm9yIChjb25zdCBvcGVyYXRpb25JZCBvZiBvcGVyYXRpb25JZHMpIHtcbiAgICAgIG9wKHRoaXMuZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb24ob3BlcmF0aW9uSWQpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkUmVzdFJlc291cmNlPFAgZXh0ZW5kcyBrZXlvZiBQQVRIUz4ocGF0aDogUCwgbWV0aG9kOiBrZXlvZiBQQVRIU1tQXSkge1xuICAgIGNvbnN0IG9hUGF0aCA9IHRoaXMuYXBpU3BlYy5wYXRocyFbcGF0aCBhcyBzdHJpbmddIGFzIFBhdGhJdGVtT2JqZWN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IG9hUGF0aFttZXRob2QgYXMga2V5b2YgUGF0aEl0ZW1PYmplY3RdIGFzIE9wZXJhdGlvbk9iamVjdDtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IG9wZXJhdGlvbi5vcGVyYXRpb25JZCE7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBgJHttZXRob2QgYXMgc3RyaW5nfSAke3BhdGggYXMgc3RyaW5nfSAtICR7b3BlcmF0aW9uLnN1bW1hcnl9YDtcblxuICAgIGNvbnN0IGN1c3RvbUxhbWJkYU9wdGlvbnMgPSB0aGlzLnByb3BzLmxhbWJkYU9wdGlvbnNCeU9wZXJhdGlvbiA/IHRoaXMucHJvcHMubGFtYmRhT3B0aW9uc0J5T3BlcmF0aW9uW29wZXJhdGlvbklkIGFzIGtleW9mIE9QU10gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ3VzdG9tUmVzdFJlc291cmNlKG9wZXJhdGlvbiwgbWV0aG9kIGFzIHN0cmluZywgZGVzY3JpcHRpb24sIGN1c3RvbUxhbWJkYU9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFkZEN1c3RvbVJlc3RSZXNvdXJjZShvcGVyYXRpb246IE9wZXJhdGlvbk9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIGFkZGl0aW9uYWxMYW1iZGFPcHRpb25zOiBMYW1iZGFPcHRpb25zID0ge30pIHtcbiAgICBpZiAoJ3gtYW1hem9uLWFwaWdhdGV3YXktaW50ZWdyYXRpb24nIGluIG9wZXJhdGlvbikge1xuICAgICAgcmV0dXJuOyAvLyBTa2lwIGlmIG9wZXJhdGlvbiB3YXMgZGVjbGFyZWQgaW4gc3BlYyBmaWxlIGFscmVhZHkhXG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlGaWxlID0gYC4vc3JjL2xhbWJkYS9yZXN0LiR7dGhpcy5wcm9wcy5hcGlOYW1lLnRvTG93ZXJDYXNlKCl9LiR7b3BlcmF0aW9uLm9wZXJhdGlvbklkfS50c2A7XG5cbiAgICBjb25zdCBsYW1iZGFPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zICYmIHtcbiAgICAgICAgLi4udGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgfSxcbiAgICAgIC4uLmFkZGl0aW9uYWxMYW1iZGFPcHRpb25zLFxuICAgIH07XG5cbiAgICBjb25zdCBhdXRoZW50aWNhdGlvbiA9IHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gJiYgKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24uaGFzT3duUHJvcGVydHkoJ3VzZXJwb29sJylcbiAgICAgID8geyB1c2VyUG9vbDogKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgSUNvZ25pdG9BdXRoZW50aWNhdGlvbikudXNlcnBvb2wgfVxuICAgICAgOiB7IGp3dDogdGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBJSnd0QXV0aGVudGljYXRpb24gfSk7XG5cbiAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCBgRm4ke29wZXJhdGlvbi5vcGVyYXRpb25JZH1gLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMucHJvcHMuc3RhZ2VOYW1lLFxuICAgICAgYWRkaXRpb25hbEVudjoge1xuICAgICAgICAuLi50aGlzLnByb3BzLmRvbWFpbk5hbWUgJiYge1xuICAgICAgICAgIERPTUFJTl9OQU1FOiB0aGlzLnByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnRoaXMucHJvcHMuYWRkaXRpb25hbEVudixcbiAgICAgIH0sXG4gICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dICR7ZGVzY3JpcHRpb259YCxcbiAgICAgIC4uLmF1dGhlbnRpY2F0aW9uLFxuICAgICAgLi4udGhpcy5wcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSAmJiB7XG4gICAgICAgIHRhYmxlOiB0aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlLnRhYmxlLFxuICAgICAgICB0YWJsZVdyaXRlczogdGhpcy50YWJsZVdyaXRlQWNjZXNzRm9yTWV0aG9kKG1ldGhvZCksXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5wcm9wcy5hc3NldENkbiAmJiB7XG4gICAgICAgIGFzc2V0RG9tYWluTmFtZTogdGhpcy5wcm9wcy5hc3NldENkbi5hc3NldERvbWFpbk5hbWUsXG4gICAgICAgIGFzc2V0QnVja2V0OiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0QnVja2V0LFxuICAgICAgfSxcbiAgICAgIGxhbWJkYU9wdGlvbnMsXG4gICAgICBsYW1iZGFUcmFjaW5nOiB0aGlzLnByb3BzLmxhbWJkYVRyYWNpbmcsXG4gICAgfSk7XG4gICAgdGhpcy5fZnVuY3Rpb25zW29wZXJhdGlvbi5vcGVyYXRpb25JZCFdID0gZm47XG4gICAgY2RrLlRhZ3Mub2YoZm4pLmFkZCgnT3BlbkFQSScsIGRlc2NyaXB0aW9uLnJlcGxhY2UoL1teXFx3XFxzXFxkXy46Lz0rXFwtQF0vZywgJycpKTtcblxuICAgIC8vIGlmICh0aGlzLm1vbml0b3JpbmcpIHtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFEdXJhdGlvbnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNEdXJhdGlvbigpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFJbnZva2VzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljSW52b2NhdGlvbnMoKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRXJyb3JzKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY1Rocm90dGxlcygpKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBoYXNWZXJzaW9uQ29uZmlnID0gbGFtYmRhT3B0aW9ucy5jdXJyZW50VmVyc2lvbk9wdGlvbnMgIT0gdW5kZWZpbmVkO1xuXG4gICAgb3BlcmF0aW9uWyd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJ10gPSB7XG4gICAgICB0eXBlOiAnYXdzX3Byb3h5JyxcbiAgICAgIGh0dHBNZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVyaTogY2RrLlN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgIHJlc291cmNlOiAncGF0aCcsXG4gICAgICAgIHNlcnZpY2U6ICdhcGlnYXRld2F5JyxcbiAgICAgICAgYWNjb3VudDogJ2xhbWJkYScsXG4gICAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAyMDE1LTAzLTMxL2Z1bmN0aW9ucy8keyhoYXNWZXJzaW9uQ29uZmlnID8gZm4uY3VycmVudFZlcnNpb24gOiBmbikuZnVuY3Rpb25Bcm59L2ludm9jYXRpb25zYCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXl5eXl5eXl5eXiAtIFRISVMgTkVFRFMgVE8gQkUgVEhJUyBEQVRFLiBFWEFDVExZIVxuICAgICAgfSksXG4gICAgICBwYXNzdGhyb3VnaEJlaGF2aW9yOiAnd2hlbl9ub190ZW1wbGF0ZXMnLFxuICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246ICcxLjAnLFxuICAgIH07XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBwcml2YXRlIHRhYmxlV3JpdGVBY2Nlc3NGb3JNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKG1ldGhvZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgY2FzZSAncG9zdCc6XG4gICAgICBjYXNlICdwdXQnOlxuICAgICAgY2FzZSAncGF0Y2gnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ29wdGlvbnMnOlxuICAgICAgY2FzZSAnZ2V0JzpcbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBV1MgZG9lcyBub3QgcHJvcGVybHkgYXBwbHkgdGhlICdzZWN1cml0eScgb3B0aW9uIHRvIGV2ZXJ5IHNpbmdsZSBwYXRoLW1ldGhvZC5cbiAgICogQWNjb3JkaW5nIHRvIGRvY3VtZW50YXRpb24sIGdsb2JhbCBzZWN1cml0eSBnZXRzIGFwcGxpZWQsIGlmIHRoZXJlIGlzIG5vIHNlY3VyaXR5XG4gICAqIHNldCBmb3IgdGhlIHBhcnRpY3VsYXIgcGF0aC1tZXRob2QuIElmIHRoZXJlIGlzIGFueSwgZXZlbiBlbXB0eSwgaXQgd2lsbCBnZXQgcHJlY2VkZW5jZS5cbiAgICogVEhJUyBET0VTIE5PVCBIQVBQRU4gT04gQVdTLiBJVCBKVVNUIEFMV0FZUyBVU0VTIFRIRSBHTE9CQUwgU0VUVElORyFcbiAgICpcbiAgICogJ3NlY3VyaXR5IGFwcGxpZXMgWy4uLl0gc2NoZW1lcyBnbG9iYWxseSB0byBhbGwgQVBJIG9wZXJhdGlvbnMsIHVubGVzcyBvdmVycmlkZGVuIG9uIHRoZSBvcGVyYXRpb24gbGV2ZWwnXG4gICAqIEBzZWUgaHR0cHM6Ly9zd2FnZ2VyLmlvL2RvY3Mvc3BlY2lmaWNhdGlvbi9hdXRoZW50aWNhdGlvbi9cbiAgICovXG4gIHByb3RlY3RlZCBwYXRjaFNlY3VyaXR5KHNwZWM6IE9wZW5BUEkzKSB7XG4gICAgaWYgKCdzZWN1cml0eScgaW4gc3BlYykge1xuICAgICAgZm9yIChjb25zdCBzcGVjUGF0aCBvZiBPYmplY3QudmFsdWVzKHNwZWMucGF0aHMgfHwgW10pKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNwZWNQYXRoKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtPiBUaGVyZSBpcyBhIHdyb25nIGRlZmluaXRpb24gZm9yIG1ldGhvZCBpbmNsdWRlcyEgSXQgYWxsb3dzIGFueSB2YWx1ZSB0byBiZSBnaXZlbiFcbiAgICAgICAgICBpZiAoIXRoaXMuYXBpTWV0aG9kcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICBjb250aW51ZTsgLy8gU2tpcCBpZiBub3QgaHR0cCBtZXRob2QgZGVmaW5pdGlvblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHNwZWNNZXRob2QgPSAoc3BlY1BhdGggYXMgUGF0aEl0ZW1PYmplY3QpW2tleSBhcyBrZXlvZiBQYXRoSXRlbU9iamVjdF0hO1xuICAgICAgICAgIGlmICghKCdzZWN1cml0eScgaW4gc3BlY01ldGhvZCkpIHtcbiAgICAgICAgICAgIHNwZWNNZXRob2Quc2VjdXJpdHkgPSBzcGVjLnNlY3VyaXR5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVsZXRlIHNwZWMuc2VjdXJpdHk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy9yZXN0LWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsNkNBTXFCO0FBQ3JCLGlEQUFtQztBQUVuQyw4Q0FBZ0M7QUFHaEMseUNBQW1EO0FBQ25ELGlDQUF1RDtBQUN2RCwrQ0FBd0c7QUE4QnhHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsT0FBb0IsU0FBUSxrQkFBTztJQWtCOUM7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVSxLQUF3QjtRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQWIxRTs7O1dBR0c7UUFDSyxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQVlqRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBYSxDQUFDO1FBRTNGLElBQUksZ0JBQThELENBQUM7UUFDbkUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsZ0JBQWdCLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDeEIsV0FBVyxFQUFFLElBQUksb0NBQXNCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQ2hFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDeEIsVUFBVSxFQUFFLG9DQUFzQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNsRixDQUFDO2FBQ0gsQ0FBQztZQUNGLElBQUks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TztnQkFDVixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLE1BQU0sQ0FBQztZQUNaO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTyxhQUFhLENBQUMsSUFBYztRQUNwQyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUMzQix3R0FBd0c7b0JBQ3hHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNuQyxTQUFTLENBQUMscUNBQXFDO29CQUNqRCxDQUFDO29CQUVELE1BQU0sVUFBVSxHQUFJLFFBQTJCLENBQUMsR0FBMkIsQ0FBRSxDQUFDO29CQUM5RSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUN0QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0NBRUY7QUFuV0QsMEJBbVdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgYXdzX2NlcnRpZmljYXRlbWFuYWdlcixcbiAgYXdzX2lhbSxcbiAgYXdzX3JvdXRlNTMsXG4gIGF3c19yb3V0ZTUzX3RhcmdldHMsXG4gIGF3c19hcGlnYXRld2F5LFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHsgT3BlbkFQSTMsIE9wZXJhdGlvbk9iamVjdCwgUGF0aEl0ZW1PYmplY3QgfSBmcm9tICdvcGVuYXBpLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgSUNvZ25pdG9BdXRoZW50aWNhdGlvbiwgSUp3dEF1dGhlbnRpY2F0aW9uIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgeyBCYXNlQXBpLCBCYXNlQXBpUHJvcHMgfSBmcm9tICcuL2Jhc2UtYXBpJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uLCBMYW1iZGFPcHRpb25zIH0gZnJvbSAnLi9mdW5jJztcbmltcG9ydCB7IENGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfRE9NQUlOTkFNRSwgQ0ZOX09VVFBVVF9TVUZGSVhfUkVTVEFQSV9VUkwgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdEFwaVByb3BzPE9QUz4gZXh0ZW5kcyBCYXNlQXBpUHJvcHMge1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSByb3V0ZXMgZm9yIGFsbCBlbmRwb2ludHMgY29uZmlndXJlZCBpbiB0aGUgb3BlbmFwaS55YW1sIGZpbGVcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0dlbmVyYXRlUm91dGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogY3VzdG9tIG9wdGlvbnMgZm9yIHRoZSBjcmVhdGVkIEh0dHBBcGlcbiAgICpcbiAgICogQGRlZmF1bHQgLVxuICAgKi9cbiAgcmVzdEFwaVByb3BzPzogYXdzX2FwaWdhdGV3YXkuUmVzdEFwaUJhc2VQcm9wcztcblxuICAvKipcbiAgICogYWRkaXRpb25hbCBvcHRpb25zIGZvciB0aGUgdW5kZXJseWluZyBMYW1iZGEgZnVuY3Rpb24gY29uc3RydWN0IHBlciBvcGVyYXRpb25JZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICBsYW1iZGFPcHRpb25zQnlPcGVyYXRpb24/OiB7IFtvcGVyYXRpb25JZCBpbiBrZXlvZiBPUFNdPzogTGFtYmRhT3B0aW9ucyB9O1xuXG4gIGRlZmluaXRpb25GaWxlTmFtZTogc3RyaW5nO1xuXG4gIGNvcnM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIFJlc3RBcGkgY29uc3RydWN0IHNldHMgdXAgYW4gQVdTIEFQSSBHYXRld2F5IFJFU1QgQVBJIHVzaW5nIE9wZW5BUEkgc3BlY2lmaWNhdGlvbi5cbiAqIFRoaXMgY29uc3RydWN0IGZhY2lsaXRhdGVzIHRoZSBjcmVhdGlvbiBvZiBhIFJFU1QgQVBJIHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nIGN1c3RvbSBkb21haW4sIENPUlMgc3VwcG9ydCwgYW5kIGludGVncmF0aW9uIHdpdGggTGFtYmRhIGZ1bmN0aW9ucy5cbiAqIEl0IGFsbG93cyBhdXRvLWdlbmVyYXRpbmcgcm91dGVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBPcGVuQVBJIGRlZmluaXRpb24gYW5kIHByb3ZpZGVzIG1ldGhvZHMgdG8gZHluYW1pY2FsbHkgYWRkIGN1c3RvbSByb3V0ZXMgYW5kIG1hbmFnZSBMYW1iZGEgZnVuY3Rpb24gaW50ZWdyYXRpb25zLlxuICpcbiAqIEB0ZW1wbGF0ZSBQQVRIUyAtIFRoZSB0eXBlIGRlZmluaXRpb24gZm9yIHRoZSBBUEkgcGF0aHMuXG4gKiBAdGVtcGxhdGUgT1BTIC0gVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIEFQSSBvcGVyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhcGkgPSBuZXcgUmVzdEFwaSh0aGlzLCAnTXlSZXN0QXBpJywge1xuICogICBhcGlOYW1lOiAnTXlBUEknLFxuICogICBzdGFnZU5hbWU6ICdkZXYnLFxuICogICBkZWZpbml0aW9uRmlsZU5hbWU6ICdvcGVuYXBpLnlhbWwnLFxuICogICBhdXRoZW50aWNhdGlvbjogbXlDb2duaXRvQXV0aCxcbiAqICAgc2luZ2xlVGFibGVEYXRhc3RvcmU6IG15RHluYW1vREJUYWJsZSxcbiAqICAgYXV0b0dlbmVyYXRlUm91dGVzOiB0cnVlLFxuICogfSk7XG4gKlxuICogLy8gQWRkIGEgY3VzdG9tIFJFU1QgcmVzb3VyY2VcbiAqIGFwaS5hZGRSZXN0UmVzb3VyY2UoJy9pdGVtcycsICdnZXQnKTtcbiAqXG4gKiAvLyBHZXQgdGhlIExhbWJkYSBmdW5jdGlvbiBmb3IgYSBzcGVjaWZpYyBvcGVyYXRpb25cbiAqIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gYXBpLmdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uKCdnZXRJdGVtcycpO1xuICovXG5leHBvcnQgY2xhc3MgUmVzdEFwaTxQQVRIUywgT1BTPiBleHRlbmRzIEJhc2VBcGkge1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIEFQSSBHYXRld2F5IFJFU1QgQVBJIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaTogYXdzX2FwaWdhdGV3YXkuU3BlY1Jlc3RBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBPcGVuQVBJIHNwZWNpZmljYXRpb24gZm9yIHRoZSBSRVNUIEFQSS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlTcGVjOiBPcGVuQVBJMztcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIExhbWJkYSBmdW5jdGlvbnMgdXNlZCBhcyBpbnRlZ3JhdGlvbnMgZm9yIHRoZSBBUEkgb3BlcmF0aW9ucy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2Z1bmN0aW9uczogeyBbb3BlcmF0aW9uSWQ6IHN0cmluZ106IExhbWJkYUZ1bmN0aW9uIH0gPSB7fTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBSZXN0QXBpLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBSZXN0QXBpIGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IFJlc3RBcGlQcm9wczxPUFM+KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLmFwaVNwZWMgPSB5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKHByb3BzLmRlZmluaXRpb25GaWxlTmFtZSkudG9TdHJpbmcoKSkgYXMgT3BlbkFQSTM7XG5cbiAgICBsZXQgY3VzdG9tRG9tYWluTmFtZTogYXdzX2FwaWdhdGV3YXkuRG9tYWluTmFtZU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuYXBpRlFETikge1xuICAgICAgY3VzdG9tRG9tYWluTmFtZSA9IHtcbiAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGlGUUROLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogbmV3IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuQ2VydGlmaWNhdGUodGhpcywgJ0NlcnQnLCB7XG4gICAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGlGUUROLFxuICAgICAgICAgIHZhbGlkYXRpb246IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnModGhpcy5ob3N0ZWRab25lKSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ1Jlc3RBcGlEb21haW5OYW1lJywge1xuICAgICAgICBrZXk6IGAke3RoaXMucHJvcHMuYXBpTmFtZX0ke0NGTl9PVVRQVVRfU1VGRklYX1JFU1RBUElfRE9NQUlOTkFNRX1gLFxuICAgICAgICB2YWx1ZTogdGhpcy5hcGlGUUROLFxuICAgICAgfSk7XG4gICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnUmVzdEFwaVVybE91dHB1dCcsIHtcbiAgICAgICAga2V5OiBgJHt0aGlzLnByb3BzLmFwaU5hbWV9JHtDRk5fT1VUUFVUX1NVRkZJWF9SRVNUQVBJX1VSTH1gLFxuICAgICAgICB2YWx1ZTogJ2h0dHBzOi8vJyArIHRoaXMuYXBpRlFETixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmICgocHJvcHMubW9uaXRvcmluZyA/PyB0cnVlKSAmJiB0aGlzLm1vbml0b3JpbmcpIHtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNTZXJ2ZXJFcnJvcih7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljQ2xpZW50RXJyb3Ioe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgIC8vICAgfSkpO1xuXG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWModGhpcy5hcGkubWV0cmljTGF0ZW5jeSh7XG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3A5MCcsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVRhaWxXaWRnZXQuYWRkTGVmdE1ldHJpYyh0aGlzLmFwaS5tZXRyaWNMYXRlbmN5KHtcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDk1JyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKHRoaXMuYXBpLm1ldHJpY0xhdGVuY3koe1xuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTknLFxuICAgIC8vICAgfSkpO1xuICAgIC8vIH1cblxuICAgIGlmIChwcm9wcy5hdXRvR2VuZXJhdGVSb3V0ZXMgPz8gdHJ1ZSkge1xuICAgICAgZm9yIChjb25zdCBwYXRoIGluIHRoaXMuYXBpU3BlYy5wYXRocykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXBpU3BlYy5wYXRocywgcGF0aCkpIHtcbiAgICAgICAgICBjb25zdCBwYXRoSXRlbSA9IHRoaXMuYXBpU3BlYy5wYXRoc1twYXRoXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IG1ldGhvZCBpbiBwYXRoSXRlbSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXRoSXRlbSwgbWV0aG9kKSAmJlxuICAgICAgICAgICAgICBbJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUnLCAncGF0Y2gnLCAnb3B0aW9ucycsICdoZWFkJ10uaW5kZXhPZihtZXRob2QpID49IDApIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGFsbCBvcGVyYXRpb25zXG4gICAgICAgICAgICAgIHRoaXMuYWRkUmVzdFJlc291cmNlKHBhdGggYXMgYW55LCBtZXRob2QgYXMgYW55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgX3NwZWMgRW5kcG9pbnRcbiAgICB0aGlzLmFwaVNwZWMucGF0aHMhWycvb3BlbmFwaS5qc29uJ10gPSB7XG4gICAgICBnZXQ6IHtcbiAgICAgICAgJ3N1bW1hcnknOiAnUmV0dXJucyB0aGUgcmF3IE9wZW5BUEkgc3BlYyBvZiB0aGlzIEFQSScsXG4gICAgICAgICdkZXNjcmlwdGlvbic6ICdSZXR1cm5zIHRoZSByYXcgT3BlbkFQSSBzcGVjIG9mIHRoaXMgQVBJJyxcbiAgICAgICAgJ29wZXJhdGlvbklkJzogJ19zcGVjJyxcbiAgICAgICAgJ3Jlc3BvbnNlcyc6IHtcbiAgICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT3BlbkFQSSBzcGVjIG9mIHRoaXMgQVBJJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL29wZW5hcGkranNvbic6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBAdHMtaWdub3JlIEN1c3RvbSBwcm9wZXJ0eSBmb3IgQVdTXG4gICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJzoge1xuICAgICAgICAgIHR5cGU6ICdtb2NrJyxcbiAgICAgICAgICBodHRwTWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogJzEuMCcsXG4gICAgICAgICAgcmVxdWVzdFRlbXBsYXRlczoge1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAne1xcJ3N0YXR1c0NvZGVcXCc6IDIwMH0nLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgICAyMDA6IHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgICAgICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9vcGVuYXBpK2pzb24nOiBKU09OLnN0cmluZ2lmeSh0aGlzLmNsZWFudXBTcGVjKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoKHRoaXMuYXBpU3BlYykpKSkpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKHByb3BzLmNvcnMpIHtcbiAgICAgIHRoaXMuYXBpU3BlYy5wYXRocyFbJy97cHJveHkrfSddID0ge1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgJ3N1bW1hcnknOiAnQ09SUyBzdXBwb3J0JyxcbiAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnRW5hYmxlIENPUlMgYnkgcmV0dXJuaW5nIGNvcnJlY3QgaGVhZGVycycsXG4gICAgICAgICAgJ3RhZ3MnOiBbJ0NPUlMnXSxcbiAgICAgICAgICAncmVzcG9uc2VzJzoge1xuICAgICAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGVmYXVsdCByZXNwb25zZSBmb3IgQ09SUyBtZXRob2QnLFxuICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6IHsgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyc6IHsgc2NoZW1hOiB7IHR5cGU6ICdzdHJpbmcnIH0gfSxcbiAgICAgICAgICAgICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnOiB7IHNjaGVtYTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiB7IHNjaGVtYTogeyB0eXBlOiAnc3RyaW5nJyB9IH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgICd4LWFtYXpvbi1hcGlnYXRld2F5LWludGVncmF0aW9uJzoge1xuICAgICAgICAgICAgdHlwZTogJ21vY2snLFxuICAgICAgICAgICAgcmVxdWVzdFRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbic6ICcjc2V0KCRjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5oZWFkZXIub3JpZ2luID0gJG1ldGhvZC5yZXF1ZXN0LmhlYWRlci5vcmlnaW4pXFxue1xcbiAgXCJzdGF0dXNDb2RlXCIgOiAyMDBcXG59XFxuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHN0YXR1c0NvZGU6ICcyMDAnLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6IFwiJ0NvbnRlbnQtVHlwZSxYLUFtei1EYXRlLEF1dGhvcml6YXRpb24sWC1BcGktS2V5J1wiLFxuICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnOiBcIid0cnVlJ1wiLFxuICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyc6IFwiJ1BVVCxHRVQsUE9TVCxERUxFVEUsUEFUQ0gsSEVBRCxPUFRJT05TJ1wiLFxuICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJ2NvbnRleHQucmVxdWVzdE92ZXJyaWRlLmhlYWRlci5vcmlnaW4nLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogJ3t9JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnBhdGNoU2VjdXJpdHkodGhpcy5hcGlTcGVjKTtcblxuICAgIC8vIFRPRE8gcGF0Y2ggc3BlYyBmb3IgQ29nbml0byB1c2VyIHBvb2xcblxuICAgIHRoaXMuYXBpID0gbmV3IGF3c19hcGlnYXRld2F5LlNwZWNSZXN0QXBpKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIHJlc3RBcGlOYW1lOiBgJHtwcm9wcy5hcGlOYW1lfSBbJHtwcm9wcy5zdGFnZU5hbWV9XWAsXG4gICAgICBkb21haW5OYW1lOiBjdXN0b21Eb21haW5OYW1lLFxuICAgICAgYXBpRGVmaW5pdGlvbjogYXdzX2FwaWdhdGV3YXkuQXBpRGVmaW5pdGlvbi5mcm9tSW5saW5lKHRoaXMuYXBpU3BlYyksXG4gICAgICAuLi5wcm9wcy5yZXN0QXBpUHJvcHMsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgaW52b2tlIHBlcm1pc3Npb25zIHRvIExhbWJkYSBmdW5jdGlvbnNcbiAgICBmb3IgKGNvbnN0IGZuIG9mIE9iamVjdC52YWx1ZXModGhpcy5fZnVuY3Rpb25zKSkge1xuICAgICAgZm4uYWRkUGVybWlzc2lvbignUmVzdEFwaUludm9rZScsIHtcbiAgICAgICAgcHJpbmNpcGFsOiBuZXcgYXdzX2lhbS5TZXJ2aWNlUHJpbmNpcGFsKCdhcGlnYXRld2F5LmFtYXpvbmF3cy5jb20nKSxcbiAgICAgICAgYWN0aW9uOiAnbGFtYmRhOkludm9rZUZ1bmN0aW9uJyxcbiAgICAgICAgc291cmNlQXJuOiB0aGlzLmFwaS5hcm5Gb3JFeGVjdXRlQXBpKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tRG9tYWluTmFtZSAmJiB0aGlzLmFwaS5kb21haW5OYW1lKSB7XG4gICAgICBuZXcgYXdzX3JvdXRlNTMuQVJlY29yZCh0aGlzLCAnRG5zUmVjb3JkJywge1xuICAgICAgICB6b25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICByZWNvcmROYW1lOiBjdXN0b21Eb21haW5OYW1lLmRvbWFpbk5hbWUsXG4gICAgICAgIHRhcmdldDogYXdzX3JvdXRlNTMuUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgICBuZXcgYXdzX3JvdXRlNTNfdGFyZ2V0cy5BcGlHYXRld2F5RG9tYWluKHRoaXMuYXBpLmRvbWFpbk5hbWUpLFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW51cFNwZWMoc3BlYzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIE9iamVjdC5lbnRyaWVzKHNwZWMpLmZvckVhY2goKFtwcm9wLCB2YWx1ZV06IFtzdHJpbmcsIGFueV0pID0+IHtcbiAgICAgIGlmIChwcm9wLnN0YXJ0c1dpdGgoJ3gtJykpIHtcbiAgICAgICAgZGVsZXRlIHNwZWNbcHJvcF07XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwU3BlYyhzcGVjW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzcGVjO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybiB0aGUgZ2VuZXJhdGVkIExhbWJkYSBmdW5jdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBBUEkgb3BlcmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb24ob3BlcmF0aW9uSWQ6IGtleW9mIE9QUyk6IExhbWJkYUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fZnVuY3Rpb25zW29wZXJhdGlvbklkIGFzIHN0cmluZ107XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGEgbGlzdCBvZiBhbGwgZ2VuZXJhdGVkIExhbWJkYSBmdW5jdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvbnMoKTogTGFtYmRhRnVuY3Rpb25bXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fZnVuY3Rpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXNpdG9yIG1ldGhvZCB0byBtb2RpZnkgdGhlIGdpdmVuIGZ1bmN0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uSWRzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byB2aXNpdFxuICAgKiBAcGFyYW0gb3AgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGV2ZXJ5IGZ1bmN0aW9uXG4gICAqL1xuICBwdWJsaWMgbW9kaWZ5T3BlcmF0aW9uRnVuY3Rpb25zKG9wZXJhdGlvbklkczogKGtleW9mIE9QUylbXSwgb3A6IChmbjogTGFtYmRhRnVuY3Rpb24pID0+IHZvaWQpIHtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbklkIG9mIG9wZXJhdGlvbklkcykge1xuICAgICAgb3AodGhpcy5nZXRGdW5jdGlvbkZvck9wZXJhdGlvbihvcGVyYXRpb25JZCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRSZXN0UmVzb3VyY2U8UCBleHRlbmRzIGtleW9mIFBBVEhTPihwYXRoOiBQLCBtZXRob2Q6IGtleW9mIFBBVEhTW1BdKSB7XG4gICAgY29uc3Qgb2FQYXRoID0gdGhpcy5hcGlTcGVjLnBhdGhzIVtwYXRoIGFzIHN0cmluZ10gYXMgUGF0aEl0ZW1PYmplY3Q7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gb2FQYXRoW21ldGhvZCBhcyBrZXlvZiBQYXRoSXRlbU9iamVjdF0gYXMgT3BlcmF0aW9uT2JqZWN0O1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gb3BlcmF0aW9uLm9wZXJhdGlvbklkITtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGAke21ldGhvZCBhcyBzdHJpbmd9ICR7cGF0aCBhcyBzdHJpbmd9IC0gJHtvcGVyYXRpb24uc3VtbWFyeX1gO1xuXG4gICAgY29uc3QgY3VzdG9tTGFtYmRhT3B0aW9ucyA9IHRoaXMucHJvcHMubGFtYmRhT3B0aW9uc0J5T3BlcmF0aW9uID8gdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zQnlPcGVyYXRpb25bb3BlcmF0aW9uSWQgYXMga2V5b2YgT1BTXSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5hZGRDdXN0b21SZXN0UmVzb3VyY2Uob3BlcmF0aW9uLCBtZXRob2QgYXMgc3RyaW5nLCBkZXNjcmlwdGlvbiwgY3VzdG9tTGFtYmRhT3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYWRkQ3VzdG9tUmVzdFJlc291cmNlKG9wZXJhdGlvbjogT3BlcmF0aW9uT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgYWRkaXRpb25hbExhbWJkYU9wdGlvbnM6IExhbWJkYU9wdGlvbnMgPSB7fSkge1xuICAgIGlmICgneC1hbWF6b24tYXBpZ2F0ZXdheS1pbnRlZ3JhdGlvbicgaW4gb3BlcmF0aW9uKSB7XG4gICAgICByZXR1cm47IC8vIFNraXAgaWYgb3BlcmF0aW9uIHdhcyBkZWNsYXJlZCBpbiBzcGVjIGZpbGUgYWxyZWFkeSFcbiAgICB9XG5cbiAgICBjb25zdCBlbnRyeUZpbGUgPSBgLi9zcmMvbGFtYmRhL3Jlc3QuJHt0aGlzLnByb3BzLmFwaU5hbWUudG9Mb3dlckNhc2UoKX0uJHtvcGVyYXRpb24ub3BlcmF0aW9uSWR9LnRzYDtcblxuICAgIGNvbnN0IGxhbWJkYU9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMgJiYge1xuICAgICAgICAuLi50aGlzLnByb3BzLmxhbWJkYU9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgLi4uYWRkaXRpb25hbExhbWJkYU9wdGlvbnMsXG4gICAgfTtcblxuICAgIGNvbnN0IGF1dGhlbnRpY2F0aW9uID0gdGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiAmJiAodGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbi5oYXNPd25Qcm9wZXJ0eSgndXNlcnBvb2wnKVxuICAgICAgPyB7IHVzZXJQb29sOiAodGhpcy5wcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBJQ29nbml0b0F1dGhlbnRpY2F0aW9uKS51c2VycG9vbCB9XG4gICAgICA6IHsgand0OiB0aGlzLnByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIElKd3RBdXRoZW50aWNhdGlvbiB9KTtcblxuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHRoaXMsIGBGbiR7b3BlcmF0aW9uLm9wZXJhdGlvbklkfWAsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB7XG4gICAgICAgIC4uLnRoaXMucHJvcHMuZG9tYWluTmFtZSAmJiB7XG4gICAgICAgICAgRE9NQUlOX05BTUU6IHRoaXMucHJvcHMuZG9tYWluTmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4udGhpcy5wcm9wcy5hZGRpdGlvbmFsRW52LFxuICAgICAgfSxcbiAgICAgIGVudHJ5OiBlbnRyeUZpbGUsXG4gICAgICBkZXNjcmlwdGlvbjogYFske3RoaXMucHJvcHMuc3RhZ2VOYW1lfV0gJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgLi4uYXV0aGVudGljYXRpb24sXG4gICAgICAuLi50aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlICYmIHtcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUudGFibGUsXG4gICAgICAgIHRhYmxlV3JpdGVzOiB0aGlzLnRhYmxlV3JpdGVBY2Nlc3NGb3JNZXRob2QobWV0aG9kKSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLmFzc2V0Q2RuICYmIHtcbiAgICAgICAgYXNzZXREb21haW5OYW1lOiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0RG9tYWluTmFtZSxcbiAgICAgICAgYXNzZXRCdWNrZXQ6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXRCdWNrZXQsXG4gICAgICB9LFxuICAgICAgbGFtYmRhT3B0aW9ucyxcbiAgICAgIGxhbWJkYVRyYWNpbmc6IHRoaXMucHJvcHMubGFtYmRhVHJhY2luZyxcbiAgICB9KTtcbiAgICB0aGlzLl9mdW5jdGlvbnNbb3BlcmF0aW9uLm9wZXJhdGlvbklkIV0gPSBmbjtcbiAgICBjZGsuVGFncy5vZihmbikuYWRkKCdPcGVuQVBJJywgZGVzY3JpcHRpb24ucmVwbGFjZSgvW15cXHdcXHNcXGRfLjovPStcXC1AXS9nLCAnJykpO1xuXG4gICAgLy8gaWYgKHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUR1cmF0aW9uc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0R1cmF0aW9uKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUludm9rZXNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNJbnZvY2F0aW9ucygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNFcnJvcnMoKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljVGhyb3R0bGVzKCkpO1xuICAgIC8vIH1cblxuICAgIGNvbnN0IGhhc1ZlcnNpb25Db25maWcgPSBsYW1iZGFPcHRpb25zLmN1cnJlbnRWZXJzaW9uT3B0aW9ucyAhPSB1bmRlZmluZWQ7XG5cbiAgICBvcGVyYXRpb25bJ3gtYW1hem9uLWFwaWdhdGV3YXktaW50ZWdyYXRpb24nXSA9IHtcbiAgICAgIHR5cGU6ICdhd3NfcHJveHknLFxuICAgICAgaHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJpOiBjZGsuU3RhY2sub2YodGhpcykuZm9ybWF0QXJuKHtcbiAgICAgICAgcmVzb3VyY2U6ICdwYXRoJyxcbiAgICAgICAgc2VydmljZTogJ2FwaWdhdGV3YXknLFxuICAgICAgICBhY2NvdW50OiAnbGFtYmRhJyxcbiAgICAgICAgYXJuRm9ybWF0OiBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogYDIwMTUtMDMtMzEvZnVuY3Rpb25zLyR7KGhhc1ZlcnNpb25Db25maWcgPyBmbi5jdXJyZW50VmVyc2lvbiA6IGZuKS5mdW5jdGlvbkFybn0vaW52b2NhdGlvbnNgLFxuICAgICAgICAvLyAgICAgICAgICAgICBeXl5eXl5eXl5eIC0gVEhJUyBORUVEUyBUTyBCRSBUSElTIERBVEUuIEVYQUNUTFkhXG4gICAgICB9KSxcbiAgICAgIHBhc3N0aHJvdWdoQmVoYXZpb3I6ICd3aGVuX25vX3RlbXBsYXRlcycsXG4gICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogJzEuMCcsXG4gICAgfTtcblxuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHByaXZhdGUgdGFibGVXcml0ZUFjY2Vzc0Zvck1ldGhvZChtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAobWV0aG9kLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICBjYXNlICdwb3N0JzpcbiAgICAgIGNhc2UgJ3B1dCc6XG4gICAgICBjYXNlICdwYXRjaCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICBjYXNlICdnZXQnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFXUyBkb2VzIG5vdCBwcm9wZXJseSBhcHBseSB0aGUgJ3NlY3VyaXR5JyBvcHRpb24gdG8gZXZlcnkgc2luZ2xlIHBhdGgtbWV0aG9kLlxuICAgKiBBY2NvcmRpbmcgdG8gZG9jdW1lbnRhdGlvbiwgZ2xvYmFsIHNlY3VyaXR5IGdldHMgYXBwbGllZCwgaWYgdGhlcmUgaXMgbm8gc2VjdXJpdHlcbiAgICogc2V0IGZvciB0aGUgcGFydGljdWxhciBwYXRoLW1ldGhvZC4gSWYgdGhlcmUgaXMgYW55LCBldmVuIGVtcHR5LCBpdCB3aWxsIGdldCBwcmVjZWRlbmNlLlxuICAgKiBUSElTIERPRVMgTk9UIEhBUFBFTiBPTiBBV1MuIElUIEpVU1QgQUxXQVlTIFVTRVMgVEhFIEdMT0JBTCBTRVRUSU5HIVxuICAgKlxuICAgKiAnc2VjdXJpdHkgYXBwbGllcyBbLi4uXSBzY2hlbWVzIGdsb2JhbGx5IHRvIGFsbCBBUEkgb3BlcmF0aW9ucywgdW5sZXNzIG92ZXJyaWRkZW4gb24gdGhlIG9wZXJhdGlvbiBsZXZlbCdcbiAgICogQHNlZSBodHRwczovL3N3YWdnZXIuaW8vZG9jcy9zcGVjaWZpY2F0aW9uL2F1dGhlbnRpY2F0aW9uL1xuICAgKi9cbiAgcHJvdGVjdGVkIHBhdGNoU2VjdXJpdHkoc3BlYzogT3BlbkFQSTMpIHtcbiAgICBpZiAoJ3NlY3VyaXR5JyBpbiBzcGVjKSB7XG4gICAgICBmb3IgKGNvbnN0IHNwZWNQYXRoIG9mIE9iamVjdC52YWx1ZXMoc3BlYy5wYXRocyB8fCBbXSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3BlY1BhdGgpIHtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0+IFRoZXJlIGlzIGEgd3JvbmcgZGVmaW5pdGlvbiBmb3IgbWV0aG9kIGluY2x1ZGVzISBJdCBhbGxvd3MgYW55IHZhbHVlIHRvIGJlIGdpdmVuIVxuICAgICAgICAgIGlmICghdGhpcy5hcGlNZXRob2RzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIGlmIG5vdCBodHRwIG1ldGhvZCBkZWZpbml0aW9uXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3BlY01ldGhvZCA9IChzcGVjUGF0aCBhcyBQYXRoSXRlbU9iamVjdClba2V5IGFzIGtleW9mIFBhdGhJdGVtT2JqZWN0XSE7XG4gICAgICAgICAgaWYgKCEoJ3NlY3VyaXR5JyBpbiBzcGVjTWV0aG9kKSkge1xuICAgICAgICAgICAgc3BlY01ldGhvZC5zZWN1cml0eSA9IHNwZWMuc2VjdXJpdHk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWxldGUgc3BlYy5zZWN1cml0eTtcbiAgICB9XG4gIH1cblxufVxuIl19
@@ -1,6 +1,12 @@
1
1
  import { aws_dynamodb as dynamodb, aws_kms as kms } from 'aws-cdk-lib';
2
2
  import { GlobalSecondaryIndexProps, LocalSecondaryIndexProps } from 'aws-cdk-lib/aws-dynamodb';
3
3
  import { Construct } from 'constructs';
4
+ export interface ISingleTableDatastore {
5
+ /**
6
+ * The DynamoDB table instance behind the SingleTableDatastore.
7
+ */
8
+ readonly table: dynamodb.Table;
9
+ }
4
10
  export interface SingleTableDesign {
5
11
  /**
6
12
  * structure of the primary key
@@ -77,7 +83,8 @@ export interface SingleTableDatastoreProps {
77
83
  * encryption: dynamodb.TableEncryption.AWS_MANAGED,
78
84
  * });
79
85
  */
80
- export declare class SingleTableDatastore extends Construct {
86
+ export declare class SingleTableDatastore extends Construct implements ISingleTableDatastore {
87
+ static fromTable(scope: Construct, id: string, table: dynamodb.Table): ISingleTableDatastore;
81
88
  /**
82
89
  * The DynamoDB table instance.
83
90
  */
@@ -34,6 +34,15 @@ const constructs_1 = require("constructs");
34
34
  * });
35
35
  */
36
36
  class SingleTableDatastore extends constructs_1.Construct {
37
+ static fromTable(scope, id, table) {
38
+ class ExternalTableDatastore extends constructs_1.Construct {
39
+ constructor() {
40
+ super(scope, id);
41
+ this.table = table;
42
+ }
43
+ }
44
+ return new ExternalTableDatastore();
45
+ }
37
46
  /**
38
47
  * Creates an instance of SingleTableDatastore.
39
48
  *
@@ -42,7 +51,6 @@ class SingleTableDatastore extends constructs_1.Construct {
42
51
  * @param props - The properties of the SingleTableDatastore construct.
43
52
  */
44
53
  constructor(scope, id, props) {
45
- var _a, _b;
46
54
  super(scope, id);
47
55
  this.table = new aws_cdk_lib_1.aws_dynamodb.Table(this, 'Resource', {
48
56
  billingMode: aws_cdk_lib_1.aws_dynamodb.BillingMode.PAY_PER_REQUEST,
@@ -61,13 +69,13 @@ class SingleTableDatastore extends constructs_1.Construct {
61
69
  encryptionKey: props.encryptionKey,
62
70
  timeToLiveAttribute: props.design.timeToLiveAttribute,
63
71
  });
64
- for (const index of (_a = props.design.globalIndexes) !== null && _a !== void 0 ? _a : []) {
72
+ for (const index of props.design.globalIndexes ?? []) {
65
73
  this.table.addGlobalSecondaryIndex(index);
66
74
  }
67
- for (const index of (_b = props.design.localIndexes) !== null && _b !== void 0 ? _b : []) {
75
+ for (const index of props.design.localIndexes ?? []) {
68
76
  this.table.addLocalSecondaryIndex(index);
69
77
  }
70
78
  }
71
79
  }
72
80
  exports.SingleTableDatastore = SingleTableDatastore;
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUU7QUFFdkUsMkNBQXVDO0FBeUR2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFhLG9CQUFxQixTQUFRLHNCQUFTO0lBT2pEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7O1FBQ3hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLDBCQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDaEQsV0FBVyxFQUFFLDBCQUFRLENBQUMsV0FBVyxDQUFDLGVBQWU7WUFDakQsWUFBWSxFQUFFO2dCQUNaLElBQUksRUFBRSwwQkFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNO2dCQUNuQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWTthQUMzQztZQUNELEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJO2dCQUNwQyxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLDBCQUFRLENBQUMsYUFBYSxDQUFDLE1BQU07b0JBQ25DLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPO2lCQUN0QzthQUNGO1lBQ0QsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CO1NBQ3RELENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxLQUFLLElBQUksTUFBQSxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsbUNBQUksRUFBRSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFBLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxtQ0FBSSxFQUFFLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUExQ0Qsb0RBMENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzX2R5bmFtb2RiIGFzIGR5bmFtb2RiLCBhd3Nfa21zIGFzIGttcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEdsb2JhbFNlY29uZGFyeUluZGV4UHJvcHMsIExvY2FsU2Vjb25kYXJ5SW5kZXhQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVUYWJsZURlc2lnbiB7XG5cbiAgLyoqXG4gICAqIHN0cnVjdHVyZSBvZiB0aGUgcHJpbWFyeSBrZXlcbiAgICovXG4gIHByaW1hcnlLZXk6IHtcbiAgICBwYXJ0aXRpb25LZXk6IHN0cmluZztcbiAgICBzb3J0S2V5Pzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBUVEwgYXR0cmlidXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRUTCBpcyBkaXNhYmxlZFxuICAgKi9cbiAgdGltZVRvTGl2ZUF0dHJpYnV0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogZ2xvYmFsIHNlY29uZGFyeSBpbmRleGVzXG4gICAqL1xuICBnbG9iYWxJbmRleGVzPzogR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wc1tdO1xuXG4gIC8qKlxuICAgKiBsb2NhbCBzZWNvbmRhcnkgaW5kZXhlc1xuICAgKi9cbiAgbG9jYWxJbmRleGVzPzogTG9jYWxTZWNvbmRhcnlJbmRleFByb3BzW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xlVGFibGVEYXRhc3RvcmVQcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRhYmxlIGRlc2lnblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzaWduOiBTaW5nbGVUYWJsZURlc2lnbjtcblxuICAvKipcbiAgICogV2hldGhlciBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggYW4gQVdTIG1hbmFnZWQgY3VzdG9tZXIgbWFzdGVyIGtleSBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gaXMgZW5hYmxlZCB3aXRoIGFuIEFXUyBvd25lZCBjdXN0b21lciBtYXN0ZXIga2V5XG4gICAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogZHluYW1vZGIuVGFibGVFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBLTVMga2V5IHRvIHVzZSBmb3IgdGFibGUgZW5jcnlwdGlvbi5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzZXQgaWYgYGVuY3J5cHRpb25gIGlzIHNldCB0byBgVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRURgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIGBlbmNyeXB0aW9uYCBpcyBzZXQgdG8gYFRhYmxlRW5jcnlwdGlvbi5DVVNUT01FUl9NQU5BR0VEYCBhbmQgdGhpc1xuICAgKiBwcm9wZXJ0eSBpcyB1bmRlZmluZWQsIGEgbmV3IEtNUyBrZXkgd2lsbCBiZSBjcmVhdGVkIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0YWJsZS5cbiAgICogQHN0YWJpbGl0eSBzdGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcbn1cblxuLyoqXG4gKiBUaGUgU2luZ2xlVGFibGVEYXRhc3RvcmUgY29uc3RydWN0IHNldHMgdXAgYW4gQVdTIER5bmFtb0RCIHRhYmxlIHdpdGggYSBzaW5nbGUtdGFibGUgZGVzaWduLlxuICogVGhpcyBjb25zdHJ1Y3QgZmFjaWxpdGF0ZXMgdGhlIGNyZWF0aW9uIG9mIGEgRHluYW1vREIgdGFibGUgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLCBpbmNsdWRpbmcgcHJpbWFyeSBrZXksIHNvcnQga2V5LCBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4ZXMsIGxvY2FsIHNlY29uZGFyeSBpbmRleGVzLCBhbmQgZW5jcnlwdGlvbi5cbiAqIEl0IGFsc28gc3VwcG9ydHMgcG9pbnQtaW4tdGltZSByZWNvdmVyeSBhbmQgdGltZS10by1saXZlIGF0dHJpYnV0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGRhdGFzdG9yZSA9IG5ldyBTaW5nbGVUYWJsZURhdGFzdG9yZSh0aGlzLCAnTXlEYXRhc3RvcmUnLCB7XG4gKiAgIGRlc2lnbjoge1xuICogICAgIHByaW1hcnlLZXk6IHtcbiAqICAgICAgIHBhcnRpdGlvbktleTogJ1BLJyxcbiAqICAgICAgIHNvcnRLZXk6ICdTSycsXG4gKiAgICAgfSxcbiAqICAgICBnbG9iYWxJbmRleGVzOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGluZGV4TmFtZTogJ0dTSTEnLFxuICogICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogJ0dTSTFQSycsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gKiAgICAgICAgIHNvcnRLZXk6IHsgbmFtZTogJ0dTSTFTSycsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gKiAgICAgICB9LFxuICogICAgIF0sXG4gKiAgICAgbG9jYWxJbmRleGVzOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGluZGV4TmFtZTogJ0xTSTEnLFxuICogICAgICAgICBzb3J0S2V5OiB7IG5hbWU6ICdMU0kxU0snLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICogICAgICAgfSxcbiAqICAgICBdLFxuICogICAgIHRpbWVUb0xpdmVBdHRyaWJ1dGU6ICdUVEwnLFxuICogICB9LFxuICogICBlbmNyeXB0aW9uOiBkeW5hbW9kYi5UYWJsZUVuY3J5cHRpb24uQVdTX01BTkFHRUQsXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIFNpbmdsZVRhYmxlRGF0YXN0b3JlIGV4dGVuZHMgQ29uc3RydWN0IHtcblxuICAvKipcbiAgICogVGhlIER5bmFtb0RCIHRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlOiBkeW5hbW9kYi5UYWJsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBTaW5nbGVUYWJsZURhdGFzdG9yZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRoaXMgY29uc3RydWN0IGlzIGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgU2luZ2xlVGFibGVEYXRhc3RvcmUgY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNpbmdsZVRhYmxlRGF0YXN0b3JlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy50YWJsZSA9IG5ldyBkeW5hbW9kYi5UYWJsZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBiaWxsaW5nTW9kZTogZHluYW1vZGIuQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxuICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgICBuYW1lOiBwcm9wcy5kZXNpZ24ucHJpbWFyeUtleS5wYXJ0aXRpb25LZXksXG4gICAgICB9LFxuICAgICAgLi4ucHJvcHMuZGVzaWduLnByaW1hcnlLZXkuc29ydEtleSAmJiB7XG4gICAgICAgIHNvcnRLZXk6IHtcbiAgICAgICAgICB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyxcbiAgICAgICAgICBuYW1lOiBwcm9wcy5kZXNpZ24ucHJpbWFyeUtleS5zb3J0S2V5LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHBvaW50SW5UaW1lUmVjb3Zlcnk6IHRydWUsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgICAgZW5jcnlwdGlvbktleTogcHJvcHMuZW5jcnlwdGlvbktleSxcbiAgICAgIHRpbWVUb0xpdmVBdHRyaWJ1dGU6IHByb3BzLmRlc2lnbi50aW1lVG9MaXZlQXR0cmlidXRlLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBwcm9wcy5kZXNpZ24uZ2xvYmFsSW5kZXhlcyA/PyBbXSkge1xuICAgICAgdGhpcy50YWJsZS5hZGRHbG9iYWxTZWNvbmRhcnlJbmRleChpbmRleCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgcHJvcHMuZGVzaWduLmxvY2FsSW5kZXhlcyA/PyBbXSkge1xuICAgICAgdGhpcy50YWJsZS5hZGRMb2NhbFNlY29uZGFyeUluZGV4KGluZGV4KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBdUU7QUFFdkUsMkNBQXVDO0FBaUV2Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFhLG9CQUFxQixTQUFRLHNCQUFTO0lBRTFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDekUsTUFBTSxzQkFBdUIsU0FBUSxzQkFBUztZQUU1QztnQkFDRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUZILFVBQUssR0FBRyxLQUFLLENBQUM7WUFHOUIsQ0FBQztTQUNGO1FBQ0QsT0FBTyxJQUFJLHNCQUFzQixFQUFFLENBQUM7SUFDdEMsQ0FBQztJQU9EOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksMEJBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNoRCxXQUFXLEVBQUUsMEJBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZTtZQUNqRCxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLDBCQUFRLENBQUMsYUFBYSxDQUFDLE1BQU07Z0JBQ25DLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZO2FBQzNDO1lBQ0QsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUk7Z0JBQ3BDLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsMEJBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTTtvQkFDbkMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU87aUJBQ3RDO2FBQ0Y7WUFDRCxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUI7U0FDdEQsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXBERCxvREFvREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfZHluYW1vZGIgYXMgZHluYW1vZGIsIGF3c19rbXMgYXMga21zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcywgTG9jYWxTZWNvbmRhcnlJbmRleFByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaW5nbGVUYWJsZURhdGFzdG9yZSB7XG5cbiAgLyoqXG4gICAqIFRoZSBEeW5hbW9EQiB0YWJsZSBpbnN0YW5jZSBiZWhpbmQgdGhlIFNpbmdsZVRhYmxlRGF0YXN0b3JlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGU6IGR5bmFtb2RiLlRhYmxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZVRhYmxlRGVzaWduIHtcblxuICAvKipcbiAgICogc3RydWN0dXJlIG9mIHRoZSBwcmltYXJ5IGtleVxuICAgKi9cbiAgcHJpbWFyeUtleToge1xuICAgIHBhcnRpdGlvbktleTogc3RyaW5nO1xuICAgIHNvcnRLZXk/OiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIFRUTCBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVFRMIGlzIGRpc2FibGVkXG4gICAqL1xuICB0aW1lVG9MaXZlQXR0cmlidXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4ZXNcbiAgICovXG4gIGdsb2JhbEluZGV4ZXM/OiBHbG9iYWxTZWNvbmRhcnlJbmRleFByb3BzW107XG5cbiAgLyoqXG4gICAqIGxvY2FsIHNlY29uZGFyeSBpbmRleGVzXG4gICAqL1xuICBsb2NhbEluZGV4ZXM/OiBMb2NhbFNlY29uZGFyeUluZGV4UHJvcHNbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVUYWJsZURhdGFzdG9yZVByb3BzIHtcblxuICAvKipcbiAgICogVGFibGUgZGVzaWduXG4gICAqL1xuICByZWFkb25seSBkZXNpZ246IFNpbmdsZVRhYmxlRGVzaWduO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBhbiBBV1MgbWFuYWdlZCBjdXN0b21lciBtYXN0ZXIga2V5IGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBpcyBlbmFibGVkIHdpdGggYW4gQVdTIG93bmVkIGN1c3RvbWVyIG1hc3RlciBrZXlcbiAgICogQHN0YWJpbGl0eSBzdGFibGVcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBkeW5hbW9kYi5UYWJsZUVuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIEtNUyBrZXkgdG8gdXNlIGZvciB0YWJsZSBlbmNyeXB0aW9uLlxuICAgKlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBvbmx5IGJlIHNldCBpZiBgZW5jcnlwdGlvbmAgaXMgc2V0IHRvIGBUYWJsZUVuY3J5cHRpb24uQ1VTVE9NRVJfTUFOQUdFRGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgYGVuY3J5cHRpb25gIGlzIHNldCB0byBgVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRURgIGFuZCB0aGlzXG4gICAqIHByb3BlcnR5IGlzIHVuZGVmaW5lZCwgYSBuZXcgS01TIGtleSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhYmxlLlxuICAgKiBAc3RhYmlsaXR5IHN0YWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JS2V5O1xufVxuXG4vKipcbiAqIFRoZSBTaW5nbGVUYWJsZURhdGFzdG9yZSBjb25zdHJ1Y3Qgc2V0cyB1cCBhbiBBV1MgRHluYW1vREIgdGFibGUgd2l0aCBhIHNpbmdsZS10YWJsZSBkZXNpZ24uXG4gKiBUaGlzIGNvbnN0cnVjdCBmYWNpbGl0YXRlcyB0aGUgY3JlYXRpb24gb2YgYSBEeW5hbW9EQiB0YWJsZSB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBwcmltYXJ5IGtleSwgc29ydCBrZXksIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXhlcywgbG9jYWwgc2Vjb25kYXJ5IGluZGV4ZXMsIGFuZCBlbmNyeXB0aW9uLlxuICogSXQgYWxzbyBzdXBwb3J0cyBwb2ludC1pbi10aW1lIHJlY292ZXJ5IGFuZCB0aW1lLXRvLWxpdmUgYXR0cmlidXRlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgZGF0YXN0b3JlID0gbmV3IFNpbmdsZVRhYmxlRGF0YXN0b3JlKHRoaXMsICdNeURhdGFzdG9yZScsIHtcbiAqICAgZGVzaWduOiB7XG4gKiAgICAgcHJpbWFyeUtleToge1xuICogICAgICAgcGFydGl0aW9uS2V5OiAnUEsnLFxuICogICAgICAgc29ydEtleTogJ1NLJyxcbiAqICAgICB9LFxuICogICAgIGdsb2JhbEluZGV4ZXM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgaW5kZXhOYW1lOiAnR1NJMScsXG4gKiAgICAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiAnR1NJMVBLJywgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAqICAgICAgICAgc29ydEtleTogeyBuYW1lOiAnR1NJMVNLJywgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAqICAgICAgIH0sXG4gKiAgICAgXSxcbiAqICAgICBsb2NhbEluZGV4ZXM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgaW5kZXhOYW1lOiAnTFNJMScsXG4gKiAgICAgICAgIHNvcnRLZXk6IHsgbmFtZTogJ0xTSTFTSycsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gKiAgICAgICB9LFxuICogICAgIF0sXG4gKiAgICAgdGltZVRvTGl2ZUF0dHJpYnV0ZTogJ1RUTCcsXG4gKiAgIH0sXG4gKiAgIGVuY3J5cHRpb246IGR5bmFtb2RiLlRhYmxlRW5jcnlwdGlvbi5BV1NfTUFOQUdFRCxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgU2luZ2xlVGFibGVEYXRhc3RvcmUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJU2luZ2xlVGFibGVEYXRhc3RvcmUge1xuXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVRhYmxlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHRhYmxlOiBkeW5hbW9kYi5UYWJsZSk6IElTaW5nbGVUYWJsZURhdGFzdG9yZSB7XG4gICAgY2xhc3MgRXh0ZXJuYWxUYWJsZURhdGFzdG9yZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElTaW5nbGVUYWJsZURhdGFzdG9yZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGUgPSB0YWJsZTtcbiAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEV4dGVybmFsVGFibGVEYXRhc3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgRHluYW1vREIgdGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGU6IGR5bmFtb2RiLlRhYmxlO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFNpbmdsZVRhYmxlRGF0YXN0b3JlLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBTaW5nbGVUYWJsZURhdGFzdG9yZSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2luZ2xlVGFibGVEYXRhc3RvcmVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnRhYmxlID0gbmV3IGR5bmFtb2RiLlRhYmxlKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGJpbGxpbmdNb2RlOiBkeW5hbW9kYi5CaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QsXG4gICAgICBwYXJ0aXRpb25LZXk6IHtcbiAgICAgICAgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcsXG4gICAgICAgIG5hbWU6IHByb3BzLmRlc2lnbi5wcmltYXJ5S2V5LnBhcnRpdGlvbktleSxcbiAgICAgIH0sXG4gICAgICAuLi5wcm9wcy5kZXNpZ24ucHJpbWFyeUtleS5zb3J0S2V5ICYmIHtcbiAgICAgICAgc29ydEtleToge1xuICAgICAgICAgIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HLFxuICAgICAgICAgIG5hbWU6IHByb3BzLmRlc2lnbi5wcmltYXJ5S2V5LnNvcnRLZXksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeTogdHJ1ZSxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgICBlbmNyeXB0aW9uS2V5OiBwcm9wcy5lbmNyeXB0aW9uS2V5LFxuICAgICAgdGltZVRvTGl2ZUF0dHJpYnV0ZTogcHJvcHMuZGVzaWduLnRpbWVUb0xpdmVBdHRyaWJ1dGUsXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHByb3BzLmRlc2lnbi5nbG9iYWxJbmRleGVzID8/IFtdKSB7XG4gICAgICB0aGlzLnRhYmxlLmFkZEdsb2JhbFNlY29uZGFyeUluZGV4KGluZGV4KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBpbmRleCBvZiBwcm9wcy5kZXNpZ24ubG9jYWxJbmRleGVzID8/IFtdKSB7XG4gICAgICB0aGlzLnRhYmxlLmFkZExvY2FsU2Vjb25kYXJ5SW5kZXgoaW5kZXgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -77,7 +77,6 @@ class Workflow extends constructs.Construct {
77
77
  * @param props - The properties of the Workflow construct.
78
78
  */
79
79
  constructor(scope, id, props) {
80
- var _a;
81
80
  super(scope, id);
82
81
  this.role = new iam.Role(this, 'Role', {
83
82
  assumedBy: new iam.ServicePrincipal('states.amazonaws.com'),
@@ -87,7 +86,7 @@ class Workflow extends constructs.Construct {
87
86
  path: props.definitionFileName,
88
87
  });
89
88
  const resource = new sfn.CfnStateMachine(this, 'Resource', {
90
- stateMachineType: (_a = props.stateMachineType) !== null && _a !== void 0 ? _a : sfn.StateMachineType.STANDARD,
89
+ stateMachineType: props.stateMachineType ?? sfn.StateMachineType.STANDARD,
91
90
  roleArn: this.role.roleArn,
92
91
  definitionS3Location: {
93
92
  bucket: definitionAsset.s3BucketName,
@@ -102,4 +101,4 @@ class Workflow extends constructs.Construct {
102
101
  }
103
102
  }
104
103
  exports.Workflow = Workflow;
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy93b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkM7QUFDM0MsNkRBQWtEO0FBQ2xELG1FQUFxRDtBQUNyRCx1REFBeUM7QUFjekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFpQmhEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBb0I7O1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUNyQyxTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7U0FDNUQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBRWhDLE1BQU0sZUFBZSxHQUFHLElBQUkscUJBQUssQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDekQsSUFBSSxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7U0FDL0IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDekQsZ0JBQWdCLEVBQUUsTUFBQSxLQUFLLENBQUMsZ0JBQWdCLG1DQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRO1lBQ3pFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDMUIsb0JBQW9CLEVBQUU7Z0JBQ3BCLE1BQU0sRUFBRSxlQUFlLENBQUMsWUFBWTtnQkFDcEMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxXQUFXO2FBQ2pDO1lBQ0QsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLHVCQUF1QjtZQUN0RCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CO1lBQ2hELG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7U0FDakQsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0NBQ0Y7QUFsREQsNEJBa0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCAqIGFzIHNmbiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dQcm9wcyB7XG4gIHJlYWRvbmx5IHN0YXRlTWFjaGluZVR5cGU/OiBzZm4uU3RhdGVNYWNoaW5lVHlwZTtcbiAgcmVhZG9ubHkgbG9nZ2luZ0NvbmZpZ3VyYXRpb24/OiBzZm4uQ2ZuU3RhdGVNYWNoaW5lLkxvZ2dpbmdDb25maWd1cmF0aW9uUHJvcGVydHk7XG4gIHJlYWRvbmx5IHRyYWNpbmdDb25maWd1cmF0aW9uPzogc2ZuLkNmblN0YXRlTWFjaGluZS5UcmFjaW5nQ29uZmlndXJhdGlvblByb3BlcnR5O1xuXG4gIHJlYWRvbmx5IGRlZmluaXRpb25GaWxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBkZWZpbml0aW9uU3Vic3RpdHV0aW9ucz86IHtcbiAgICBba2V5OiBzdHJpbmddOiAoc3RyaW5nKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgV29ya2Zsb3cgY29uc3RydWN0IHNldHMgdXAgYW4gQVdTIFN0ZXAgRnVuY3Rpb25zIHN0YXRlIG1hY2hpbmUgd2l0aCBhIHNwZWNpZmllZCBkZWZpbml0aW9uIGZpbGUgYW5kIElBTSByb2xlLlxuICogVGhpcyBjb25zdHJ1Y3QgZmFjaWxpdGF0ZXMgdGhlIGNyZWF0aW9uIG9mIGEgU3RlcCBGdW5jdGlvbnMgd29ya2Zsb3csIGluY2x1ZGluZyB0aGUgZGVmaW5pdGlvbiBmcm9tIGFuIFMzIGxvY2F0aW9uIGFuZFxuICogdmFyaW91cyBjb25maWd1cmF0aW9ucyBmb3IgbG9nZ2luZyBhbmQgdHJhY2luZy4gSXQgaW1wbGVtZW50cyB0aGUgSUdyYW50YWJsZSBpbnRlcmZhY2UgZm9yIGdyYW50aW5nIHBlcm1pc3Npb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB3b3JrZmxvdyA9IG5ldyBXb3JrZmxvdyh0aGlzLCAnTXlXb3JrZmxvdycsIHtcbiAqICAgZGVmaW5pdGlvbkZpbGVOYW1lOiAncGF0aC90by9kZWZpbml0aW9uLmFzbC5qc29uJyxcbiAqICAgc3RhdGVNYWNoaW5lVHlwZTogc2ZuLlN0YXRlTWFjaGluZVR5cGUuU1RBTkRBUkQsXG4gKiAgIGxvZ2dpbmdDb25maWd1cmF0aW9uOiB7XG4gKiAgICAgbGV2ZWw6IHNmbi5Mb2dMZXZlbC5BTEwsXG4gKiAgICAgaW5jbHVkZUV4ZWN1dGlvbkRhdGE6IHRydWUsXG4gKiAgICAgZGVzdGluYXRpb25zOiBbbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ0xvZ0dyb3VwJyldLFxuICogICB9LFxuICogICB0cmFjaW5nQ29uZmlndXJhdGlvbjoge1xuICogICAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgIH0sXG4gKiAgIGRlZmluaXRpb25TdWJzdGl0dXRpb25zOiB7XG4gKiAgICAgJyR7TXlWYXJpYWJsZX0nOiAnTXlWYWx1ZScsXG4gKiAgIH0sXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ015RnVuY3Rpb24nLCB7XG4gKiAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICogICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gKiAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldCgnbGFtYmRhJyksXG4gKiB9KTtcbiAqXG4gKiB3b3JrZmxvdy5ncmFudFByaW5jaXBhbC5ncmFudEludm9rZShsYW1iZGFGdW5jdGlvbik7XG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZmxvdyBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IGltcGxlbWVudHMgaWFtLklHcmFudGFibGUge1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXNzdW1lZCBieSB0aGUgc3RhdGUgbWFjaGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNyZWF0ZWQgc3RhdGUgbWFjaGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvd0Fybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRvIHdoaWNoIHBlcm1pc3Npb25zIGNhbiBiZSBncmFudGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBXb3JrZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRoaXMgY29uc3RydWN0IGlzIGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgV29ya2Zsb3cgY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogV29ya2Zsb3dQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ1JvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnc3RhdGVzLmFtYXpvbmF3cy5jb20nKSxcbiAgICB9KTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5yb2xlO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbkFzc2V0ID0gbmV3IEFzc2V0KHRoaXMsICdEZWZpbml0aW9uQXNzZXQnLCB7XG4gICAgICBwYXRoOiBwcm9wcy5kZWZpbml0aW9uRmlsZU5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBzZm4uQ2ZuU3RhdGVNYWNoaW5lKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIHN0YXRlTWFjaGluZVR5cGU6IHByb3BzLnN0YXRlTWFjaGluZVR5cGUgPz8gc2ZuLlN0YXRlTWFjaGluZVR5cGUuU1RBTkRBUkQsXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIGRlZmluaXRpb25TM0xvY2F0aW9uOiB7XG4gICAgICAgIGJ1Y2tldDogZGVmaW5pdGlvbkFzc2V0LnMzQnVja2V0TmFtZSxcbiAgICAgICAga2V5OiBkZWZpbml0aW9uQXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9LFxuICAgICAgZGVmaW5pdGlvblN1YnN0aXR1dGlvbnM6IHByb3BzLmRlZmluaXRpb25TdWJzdGl0dXRpb25zLFxuICAgICAgbG9nZ2luZ0NvbmZpZ3VyYXRpb246IHByb3BzLmxvZ2dpbmdDb25maWd1cmF0aW9uLFxuICAgICAgdHJhY2luZ0NvbmZpZ3VyYXRpb246IHByb3BzLnRyYWNpbmdDb25maWd1cmF0aW9uLFxuICAgIH0pO1xuICAgIHJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnJvbGUpO1xuICAgIHRoaXMud29ya2Zsb3dBcm4gPSByZXNvdXJjZS5hdHRyQXJuO1xuICB9XG59XG4iXX0=
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3RydWN0cy93b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkM7QUFDM0MsNkRBQWtEO0FBQ2xELG1FQUFxRDtBQUNyRCx1REFBeUM7QUFjekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFpQmhEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDdkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3JDLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztTQUM1RCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFFaEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxxQkFBSyxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtZQUN6RCxJQUFJLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtTQUMvQixDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDekUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUMxQixvQkFBb0IsRUFBRTtnQkFDcEIsTUFBTSxFQUFFLGVBQWUsQ0FBQyxZQUFZO2dCQUNwQyxHQUFHLEVBQUUsZUFBZSxDQUFDLFdBQVc7YUFDakM7WUFDRCx1QkFBdUIsRUFBRSxLQUFLLENBQUMsdUJBQXVCO1lBQ3RELG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7WUFDaEQsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLG9CQUFvQjtTQUNqRCxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQWxERCw0QkFrREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1Byb3BzIHtcbiAgcmVhZG9ubHkgc3RhdGVNYWNoaW5lVHlwZT86IHNmbi5TdGF0ZU1hY2hpbmVUeXBlO1xuICByZWFkb25seSBsb2dnaW5nQ29uZmlndXJhdGlvbj86IHNmbi5DZm5TdGF0ZU1hY2hpbmUuTG9nZ2luZ0NvbmZpZ3VyYXRpb25Qcm9wZXJ0eTtcbiAgcmVhZG9ubHkgdHJhY2luZ0NvbmZpZ3VyYXRpb24/OiBzZm4uQ2ZuU3RhdGVNYWNoaW5lLlRyYWNpbmdDb25maWd1cmF0aW9uUHJvcGVydHk7XG5cbiAgcmVhZG9ubHkgZGVmaW5pdGlvbkZpbGVOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlZmluaXRpb25TdWJzdGl0dXRpb25zPzoge1xuICAgIFtrZXk6IHN0cmluZ106IChzdHJpbmcpO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBXb3JrZmxvdyBjb25zdHJ1Y3Qgc2V0cyB1cCBhbiBBV1MgU3RlcCBGdW5jdGlvbnMgc3RhdGUgbWFjaGluZSB3aXRoIGEgc3BlY2lmaWVkIGRlZmluaXRpb24gZmlsZSBhbmQgSUFNIHJvbGUuXG4gKiBUaGlzIGNvbnN0cnVjdCBmYWNpbGl0YXRlcyB0aGUgY3JlYXRpb24gb2YgYSBTdGVwIEZ1bmN0aW9ucyB3b3JrZmxvdywgaW5jbHVkaW5nIHRoZSBkZWZpbml0aW9uIGZyb20gYW4gUzMgbG9jYXRpb24gYW5kXG4gKiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIGZvciBsb2dnaW5nIGFuZCB0cmFjaW5nLiBJdCBpbXBsZW1lbnRzIHRoZSBJR3JhbnRhYmxlIGludGVyZmFjZSBmb3IgZ3JhbnRpbmcgcGVybWlzc2lvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHdvcmtmbG93ID0gbmV3IFdvcmtmbG93KHRoaXMsICdNeVdvcmtmbG93Jywge1xuICogICBkZWZpbml0aW9uRmlsZU5hbWU6ICdwYXRoL3RvL2RlZmluaXRpb24uYXNsLmpzb24nLFxuICogICBzdGF0ZU1hY2hpbmVUeXBlOiBzZm4uU3RhdGVNYWNoaW5lVHlwZS5TVEFOREFSRCxcbiAqICAgbG9nZ2luZ0NvbmZpZ3VyYXRpb246IHtcbiAqICAgICBsZXZlbDogc2ZuLkxvZ0xldmVsLkFMTCxcbiAqICAgICBpbmNsdWRlRXhlY3V0aW9uRGF0YTogdHJ1ZSxcbiAqICAgICBkZXN0aW5hdGlvbnM6IFtuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnTG9nR3JvdXAnKV0sXG4gKiAgIH0sXG4gKiAgIHRyYWNpbmdDb25maWd1cmF0aW9uOiB7XG4gKiAgICAgZW5hYmxlZDogdHJ1ZSxcbiAqICAgfSxcbiAqICAgZGVmaW5pdGlvblN1YnN0aXR1dGlvbnM6IHtcbiAqICAgICAnJHtNeVZhcmlhYmxlfSc6ICdNeVZhbHVlJyxcbiAqICAgfSxcbiAqIH0pO1xuICpcbiAqIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnTXlGdW5jdGlvbicsIHtcbiAqICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gKiAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAqICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KCdsYW1iZGEnKSxcbiAqIH0pO1xuICpcbiAqIHdvcmtmbG93LmdyYW50UHJpbmNpcGFsLmdyYW50SW52b2tlKGxhbWJkYUZ1bmN0aW9uKTtcbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtmbG93IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3QgaW1wbGVtZW50cyBpYW0uSUdyYW50YWJsZSB7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSBhc3N1bWVkIGJ5IHRoZSBzdGF0ZSBtYWNoaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY3JlYXRlZCBzdGF0ZSBtYWNoaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtmbG93QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gd2hpY2ggcGVybWlzc2lvbnMgY2FuIGJlIGdyYW50ZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFdvcmtmbG93LlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBXb3JrZmxvdyBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBXb3JrZmxvd1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdzdGF0ZXMuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG5cbiAgICBjb25zdCBkZWZpbml0aW9uQXNzZXQgPSBuZXcgQXNzZXQodGhpcywgJ0RlZmluaXRpb25Bc3NldCcsIHtcbiAgICAgIHBhdGg6IHByb3BzLmRlZmluaXRpb25GaWxlTmFtZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IHNmbi5DZm5TdGF0ZU1hY2hpbmUodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgc3RhdGVNYWNoaW5lVHlwZTogcHJvcHMuc3RhdGVNYWNoaW5lVHlwZSA/PyBzZm4uU3RhdGVNYWNoaW5lVHlwZS5TVEFOREFSRCxcbiAgICAgIHJvbGVBcm46IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgZGVmaW5pdGlvblMzTG9jYXRpb246IHtcbiAgICAgICAgYnVja2V0OiBkZWZpbml0aW9uQXNzZXQuczNCdWNrZXROYW1lLFxuICAgICAgICBrZXk6IGRlZmluaXRpb25Bc3NldC5zM09iamVjdEtleSxcbiAgICAgIH0sXG4gICAgICBkZWZpbml0aW9uU3Vic3RpdHV0aW9uczogcHJvcHMuZGVmaW5pdGlvblN1YnN0aXR1dGlvbnMsXG4gICAgICBsb2dnaW5nQ29uZmlndXJhdGlvbjogcHJvcHMubG9nZ2luZ0NvbmZpZ3VyYXRpb24sXG4gICAgICB0cmFjaW5nQ29uZmlndXJhdGlvbjogcHJvcHMudHJhY2luZ0NvbmZpZ3VyYXRpb24sXG4gICAgfSk7XG4gICAgcmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucm9sZSk7XG4gICAgdGhpcy53b3JrZmxvd0FybiA9IHJlc291cmNlLmF0dHJBcm47XG4gIH1cbn1cbiJdfQ==