oci-cdk-test 0.0.1 → 0.0.2

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.
@@ -162,6 +162,7 @@ CMD ["${handler.replace(/"/g, '\\"')}"]
162
162
  .idea
163
163
  .vscode
164
164
  *.log
165
+ oci_apigateway_deployment.json
165
166
  `;
166
167
  const dockerfileB64 = Buffer.from(dockerfileContent, 'utf8').toString('base64');
167
168
  const dockerignoreB64 = Buffer.from(dockerignoreContent, 'utf8').toString('base64');
@@ -266,20 +267,6 @@ CMD ["${handler.replace(/"/g, '\\"')}"]
266
267
  displayName: appName,
267
268
  description: `Log group for ${appName}`,
268
269
  });
269
- const executionLog = new logging_log_1.LoggingLog(this, 'ExecutionLog', {
270
- displayName: `${appName}-execution`,
271
- logGroupId: logGroup.id,
272
- logType: 'SERVICE',
273
- configuration: {
274
- compartmentId: config.compartmentId,
275
- source: {
276
- category: 'execution',
277
- resource: 'apigateway',
278
- service: 'apigateway',
279
- sourceType: 'OCISERVICE',
280
- },
281
- },
282
- });
283
270
  const functionApp = new functions_application_1.FunctionsApplication(this, 'FunctionApp', {
284
271
  compartmentId: config.compartmentId,
285
272
  displayName: appName,
@@ -340,19 +327,32 @@ CMD ["${handler.replace(/"/g, '\\"')}"]
340
327
  displayName: `${resourceName}-deployment`,
341
328
  specification: {
342
329
  routes,
343
- loggingPolicies: {
344
- executionLog: { isEnabled: true, logLevel: 'INFO' },
345
- },
346
330
  },
347
331
  });
348
332
  apiDeployment.node.addDependency(ociFunction);
349
- apiDeployment.node.addDependency(executionLog);
333
+ // Functions execution log: SERVICE log for the Functions application (category invoke)
334
+ const executionLog = new logging_log_1.LoggingLog(this, 'ExecutionLog', {
335
+ displayName: `${appName}-invoke`,
336
+ logGroupId: logGroup.id,
337
+ logType: 'SERVICE',
338
+ configuration: {
339
+ compartmentId: config.compartmentId,
340
+ source: {
341
+ category: 'invoke',
342
+ // Associate this service log with the Functions application
343
+ resource: functionApp.id,
344
+ service: 'functions',
345
+ sourceType: 'OCISERVICE',
346
+ },
347
+ },
348
+ });
349
+ executionLog.node.addDependency(functionApp);
350
350
  new cdktf_1.TerraformOutput(this, 'ocir_repository_name', { value: ocirRepository.displayName, description: 'OCIR repository name' });
351
351
  new cdktf_1.TerraformOutput(this, 'api_gateway_host', { value: apiGateway.hostname, description: 'API Gateway hostname' });
352
352
  new cdktf_1.TerraformOutput(this, 'function_invoke_url', { value: `https://${apiGateway.hostname}`, description: 'Base URL to invoke the function' });
353
353
  new cdktf_1.TerraformOutput(this, 'function_id', { value: ociFunction.id, description: 'OCI Function OCID' });
354
354
  new cdktf_1.TerraformOutput(this, 'log_group_id', { value: logGroup.id, description: 'OCI Log Group OCID for the application' });
355
- new cdktf_1.TerraformOutput(this, 'execution_log_id', { value: executionLog.id, description: 'OCI Execution Log OCID for API Gateway' });
355
+ new cdktf_1.TerraformOutput(this, 'execution_log_id', { value: executionLog.id, description: 'OCI Functions execution log OCID' });
356
356
  }
357
357
  // Force oracle/oci (Terraform Registry) so terraform init uses it on OL8 and elsewhere; must run after provider is added
358
358
  this.addOverride('terraform.required_providers.oci', {
@@ -362,4 +362,4 @@ CMD ["${handler.replace(/"/g, '\\"')}"]
362
362
  }
363
363
  }
364
364
  exports.OciStack = OciStack;
365
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vb2NpLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLGlDQUF3RDtBQUN4RCw2REFBNkQ7QUFDN0QseUdBQW9HO0FBQ3BHLDZEQUF5RDtBQUN6RCxtRUFBK0Q7QUFDL0QsaUZBQTRFO0FBQzVFLHFGQUFnRjtBQUNoRix5RkFBbUY7QUFDbkYsNkVBQXdFO0FBQ3hFLHVGQUFrRjtBQUNsRixpRkFBNkU7QUFDN0UsdUZBQW1GO0FBQ25GLHVGQUFtRjtBQUNuRixpRkFBNkU7QUFDN0UsK0VBQTBFO0FBQzFFLG1FQUErRDtBQUMvRCxxREFBcUY7QUFDckYsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQXdDN0IsTUFBYSxRQUFTLFNBQVEsc0JBQWM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxNQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDZDQUE2QztRQUM3QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDbEMscUJBQXFCO2dCQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO29CQUNwQyxHQUFHLEVBQUU7d0JBQ0gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTTt3QkFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO3dCQUMzQixHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLG9CQUFvQjt3QkFDcEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO3FCQUN0QjtpQkFDRixDQUFDLENBQUM7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dWN0cyc7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjaywgVGVycmFmb3JtT3V0cHV0IH0gZnJvbSAnY2RrdGYnO1xuaW1wb3J0IHsgT2NpUHJvdmlkZXIgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvcHJvdmlkZXInO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29udGFpbmVyUmVwb3NpdG9yeSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcnRpZmFjdHMtY29udGFpbmVyLXJlcG9zaXRvcnknO1xuaW1wb3J0IHsgQ29yZVZjbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXZjbic7XG5pbXBvcnQgeyBDb3JlU3VibmV0IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtc3VibmV0JztcbmltcG9ydCB7IENvcmVTZWN1cml0eUxpc3QgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1zZWN1cml0eS1saXN0JztcbmltcG9ydCB7IENvcmVTZXJ2aWNlR2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXNlcnZpY2UtZ2F0ZXdheSc7XG5pbXBvcnQgeyBEYXRhT2NpQ29yZVNlcnZpY2VzIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2RhdGEtb2NpLWNvcmUtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZVJvdXRlVGFibGUgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1yb3V0ZS10YWJsZSc7XG5pbXBvcnQgeyBDb3JlSW50ZXJuZXRHYXRld2F5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtaW50ZXJuZXQtZ2F0ZXdheSc7XG5pbXBvcnQgeyBBcGlnYXRld2F5R2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcGlnYXRld2F5LWdhdGV3YXknO1xuaW1wb3J0IHsgQXBpZ2F0ZXdheURlcGxveW1lbnQgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvYXBpZ2F0ZXdheS1kZXBsb3ltZW50JztcbmltcG9ydCB7IEZ1bmN0aW9uc0FwcGxpY2F0aW9uIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2Z1bmN0aW9ucy1hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBGdW5jdGlvbnNGdW5jdGlvbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9mdW5jdGlvbnMtZnVuY3Rpb24nO1xuaW1wb3J0IHsgTG9nZ2luZ0xvZ0dyb3VwIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2xvZ2dpbmctbG9nLWdyb3VwJztcbmltcG9ydCB7IExvZ2dpbmdMb2cgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvbG9nZ2luZy1sb2cnO1xuaW1wb3J0IHsgT2NpQmFja2VuZENvbmZpZywgb2Npckhvc3RLZXksIGdldE9jaUltYWdlVXJsIH0gZnJvbSAnLi4vY29uZmlnL29jaS1jb25maWcnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuZXhwb3J0IGludGVyZmFjZSBPY2lTdGFja0NvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKiBPQ0kgRnVuY3Rpb25zIGFwcGxpY2F0aW9uIG5hbWUgKGUuZy4gbXktYXBwKS4gU2V0IHZpYSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgb3IgcGFzcyBpbiBjb25maWcuICovXG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICAvKiogT0NJIEZ1bmN0aW9uIG5hbWUgKGUuZy4gbXktZnVuY3Rpb24pLiBTZXQgdmlhIE9DSV9GVU5DVElPTl9OQU1FIG9yIHBhc3MgaW4gY29uZmlnLiAqL1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHBhdGggdG8gSkFSIChvciBEb2NrZXJmaWxlIGNvbnRleHQpIHRvIGJ1aWxkIGFuZCBkZXBsb3kgYXMgdGhlIGZ1bmN0aW9uIGltYWdlLiBTZXQgdmlhIE9DSV9GVU5DVElPTl9KQVJfUEFUSC4gRW1wdHkgPSBubyBmdW5jdGlvbi9pbWFnZSBidWlsZC4gKi9cbiAgZnVuY3Rpb25KYXJQYXRoPzogc3RyaW5nO1xuICAvKiogRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGFyZ2V0LyAoRG9ja2VyZmlsZSBpcyBnZW5lcmF0ZWQgaW4gbG9jYWwtZXhlYykuIFdoZW4gc2V0IHdpdGggZnVuY3Rpb25OYW1lLCBjcmVhdGVzIFZDTiwgRnVuY3Rpb24sIEFQSSBHYXRld2F5LiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVIpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyB0aGluIERvY2tlcmZpbGUgKG5vIE1hdmVuIGluIGltYWdlKTsgZnVsbCBidWlsZCBvbmx5IGluIHJlZGVwbG95OmZ1bmN0aW9uLiAqL1xuICB1c2VUaGluRG9ja2VyZmlsZT86IGJvb2xlYW47XG4gIG9jaXJSZXBvc2l0b3J5TmFtZT86IHN0cmluZztcbiAgLyoqIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgcGF0aCBwcmVmaXguIERlZmF1bHQgJy8nLiAqL1xuICBhcGlHd1BhdGhQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBBUEkgR2F0ZXdheSByb3V0ZSBwYXRoLiBEZWZhdWx0ICcve3BhdGgqfScuICovXG4gIGFwaUd3Um91dGVQYXRoPzogc3RyaW5nO1xuICAvKiogQVBJIEdhdGV3YXkgcm91dGUgbWV0aG9kcy4gRGVmYXVsdCBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXS4gKi9cbiAgYXBpR3dNZXRob2RzPzogc3RyaW5nW107XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKGUuZy4gJzI1NicpLiBGcm9tIGZ1bmMueWFtbCBvciBPQ0lfRlVOQ1RJT05fTUVNT1JZX01CLiAqL1xuICBmdW5jdGlvbk1lbW9yeU1iPzogc3RyaW5nO1xuICAvKiogRnVuY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzLiBGcm9tIGZ1bmMueWFtbCBvciBPQ0lfRlVOQ1RJT05fVElNRU9VVF9TRUNPTkRTLiAqL1xuICBmdW5jdGlvblRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICAvKiogRnVuY3Rpb24gY29uZmlnL2VudiBrZXktdmFsdWUuIEZyb20gZnVuYy55YW1sIGNvbmZpZyBvciBPQ0lfRlVOQ1RJT05fQ09ORklHLiAqL1xuICBmdW5jdGlvbkNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBQYXRoIHRvIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgc3BlYyBKU09OIChyb3V0ZXMpLiBEZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE9jaVN0YWNrIGV4dGVuZHMgVGVycmFmb3JtU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IE9jaVN0YWNrQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIENvbmZpZ3VyZSBUZXJyYWZvcm0gYmFja2VuZCAoaWYgbm90IGxvY2FsKVxuICAgIGlmIChjb25maWcuYmFja2VuZCAmJiBjb25maWcuYmFja2VuZC50eXBlICE9PSAnbG9jYWwnKSB7XG4gICAgICBpZiAoY29uZmlnLmJhY2tlbmQudHlwZSA9PT0gJ29jaScpIHtcbiAgICAgICAgLy8gT0NJIG5hdGl2ZSBiYWNrZW5kXG4gICAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoJ3RlcnJhZm9ybS5iYWNrZW5kJywge1xuICAgICAgICAgIG9jaToge1xuICAgICAgICAgICAgYnVja2V0OiBjb25maWcuYmFja2VuZC5idWNrZXQsXG4gICAgICAgICAgICBuYW1lc3BhY2U6IGNvbmZpZy5uYW1lc3BhY2UsXG4gICAgICAgICAgICBrZXk6IGNvbmZpZy5iYWNrZW5kLmtleSB8fCBgJHtpZH0vdGVycmFmb3JtLnRmc3RhdGVgLFxuICAgICAgICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcuYmFja2VuZC50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgLy8gSFRUUCBiYWNrZW5kIChmb3IgT0NJIE9iamVjdCBTdG9yYWdlIHZpYSBSRVNUIEFQSSlcbiAgICAgICAgY29uc3QgaHR0cEJhY2tlbmQ6IGFueSA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBjb25maWcuYmFja2VuZC5hZGRyZXNzLFxuICAgICAgICAgIHVwZGF0ZV9tZXRob2Q6IGNvbmZpZy5iYWNrZW5kLnVwZGF0ZU1ldGhvZCB8fCAnUFVUJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbmZpZy5iYWNrZW5kLmxvY2tBZGRyZXNzKSB7XG4gICAgICAgICAgaHR0cEJhY2tlbmQubG9ja19hZGRyZXNzID0gY29uZmlnLmJhY2tlbmQubG9ja0FkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5iYWNrZW5kLnVubG9ja0FkZHJlc3MpIHtcbiAgICAgICAgICBodHRwQmFja2VuZC51bmxvY2tfYWRkcmVzcyA9IGNvbmZpZy5iYWNrZW5kLnVubG9ja0FkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLmJhY2tlbmQnLCB7XG4gICAgICAgICAgaHR0cDogaHR0cEJhY2tlbmQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9DSSBQcm92aWRlclxuICAgIG5ldyBPY2lQcm92aWRlcih0aGlzLCAnb2NpJywge1xuICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgdGVuYW5jeU9jaWQ6IGNvbmZpZy50ZW5hbmN5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBPQ0lSIENvbnRhaW5lciBSZXBvc2l0b3J5IChyb290IGNvbXBhcnRtZW50IGFsbG93ZWQgaWYgZXhwbGljaXRseSBzZXQpXG4gICAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBjb25maWcub2NpckNvbXBhcnRtZW50SWQgfHwgY29uZmlnLmNvbXBhcnRtZW50SWQ7XG4gICAgY29uc3Qgb2NpclJlcG9OYW1lID0gY29uZmlnLm9jaXJSZXBvc2l0b3J5TmFtZSB8fCBjb25maWcuZnVuY3Rpb25OYW1lIHx8ICdvY2ktZnVuY3Rpb24nO1xuXG4gICAgY29uc3Qgb2NpclJlcG9zaXRvcnkgPSBuZXcgQXJ0aWZhY3RzQ29udGFpbmVyUmVwb3NpdG9yeSh0aGlzLCAnT2NpclJlcG9zaXRvcnknLCB7XG4gICAgICBjb21wYXJ0bWVudElkOiBvY2lyQ29tcGFydG1lbnRJZCxcbiAgICAgIGRpc3BsYXlOYW1lOiBvY2lyUmVwb05hbWUsXG4gICAgICBpc1B1YmxpYzogZmFsc2UsIC8vIFByaXZhdGUgcmVwb3NpdG9yeSBieSBkZWZhdWx0XG4gICAgICBpc0ltbXV0YWJsZTogZmFsc2UsIC8vIEFsbG93IGltYWdlIHVwZGF0ZXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvY2tlckNvbnRleHRQYXRoID0gKGNvbmZpZy5kb2NrZXJDb250ZXh0UGF0aCB8fCBjb25maWcuZnVuY3Rpb25KYXJQYXRoKT8udHJpbSgpO1xuICAgIGNvbnN0IGNyZWF0ZUZ1bGxTdGFjayA9IGNvbmZpZy5mdW5jdGlvbk5hbWUgJiYgZG9ja2VyQ29udGV4dFBhdGg7XG5cbiAgICBpZiAoY3JlYXRlRnVsbFN0YWNrKSB7XG4gICAgICBpZiAob2NpckNvbXBhcnRtZW50SWQuaW5jbHVkZXMoJ3Jvb3QnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Z1bGwgc3RhY2sgKEZ1bmN0aW9uICsgQVBJIEdhdGV3YXkpIHJlcXVpcmVzIGEgbm9uLXJvb3QgY29tcGFydG1lbnQgZm9yIE9DSVIuIFNldCBPQ0lfT0NJUl9DT01QQVJUTUVOVF9JRCB0byB5b3VyIGhvbWUgY29tcGFydG1lbnQgT0NJRC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBmdW5jdGlvbkNvZGVQYXRoID0gcGF0aC5yZXNvbHZlKGRvY2tlckNvbnRleHRQYXRoISk7XG4gICAgICBjb25zdCBpbWFnZVRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgICAgIGNvbnN0IG9jaXJSZWdpc3RyeSA9IGAke29jaXJIb3N0S2V5KGNvbmZpZy5yZWdpb24pfS5vY2lyLmlvYDtcbiAgICAgIGNvbnN0IGltYWdlVXJsID0gZ2V0T2NpSW1hZ2VVcmwoY29uZmlnKTtcbiAgICAgIGNvbnN0IGFwcE5hbWUgPSBjb25maWcuZnVuY3Rpb25BcHBOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUhO1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXBwTmFtZTtcblxuICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycy5udWxsJywge1xuICAgICAgICBzb3VyY2U6ICdoYXNoaWNvcnAvbnVsbCcsXG4gICAgICAgIHZlcnNpb246ICd+PiAzLjAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBidWlsZEFuZFB1c2hJbWFnZUlkID0gJ0J1aWxkQW5kUHVzaEltYWdlJztcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS5kZXBlbmRzX29uYCwgW1xuICAgICAgICAnb2NpX2FydGlmYWN0c19jb250YWluZXJfcmVwb3NpdG9yeS5PY2lyUmVwb3NpdG9yeScsXG4gICAgICBdKTtcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS50cmlnZ2Vyc2AsIHtcbiAgICAgICAgcmVwb19uYW1lOiBvY2lyUmVwb05hbWUsXG4gICAgICAgIGltYWdlX3VybDogaW1hZ2VVcmwsXG4gICAgICAgIGltYWdlX3RhZzogaW1hZ2VUYWcsXG4gICAgICAgIGhhbmRsZXI6IGNvbmZpZy5oYW5kbGVyIHx8ICcnLFxuICAgICAgICB1c2VfdGhpbl9kb2NrZXJmaWxlOiBjb25maWcudXNlVGhpbkRvY2tlcmZpbGUgPT09IHRydWUgPyAnMScgOiAnMCcsXG4gICAgICAgIG5hbWVzcGFjZTogY29uZmlnLm5hbWVzcGFjZSxcbiAgICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWdpb25QID0gY29uZmlnLnJlZ2lvbjtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZVAgPSBjb25maWcubmFtZXNwYWNlO1xuICAgICAgY29uc3Qgb2NpclVzZXIgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9VU0VSTkFNRSB8fCAnQVVUT19ERVRFQ1QnO1xuICAgICAgY29uc3QgbG9naW5TY3JpcHQgPSBwcm9jZXNzLmVudi5PQ0lfQVVUSF9UT0tFTlxuICAgICAgICA/IGBleHBvcnQgT0NJUl9BVVRIX1RPS0VOPVwiJHtwcm9jZXNzLmVudi5PQ0lfQVVUSF9UT0tFTn1cIjsgT0NJUl9VU0VSPVwiJHtvY2lyVXNlcn1cIjsgWyBcIiRPQ0lSX1VTRVJcIiA9IFwiQVVUT19ERVRFQ1RcIiBdICYmIE9DSVJfVVNFUj1cIiR7bmFtZXNwYWNlUH0vdXNlclwiOyBlY2hvIFwiJE9DSVJfQVVUSF9UT0tFTlwiIHwgZG9ja2VyIGxvZ2luICR7b2NpclJlZ2lzdHJ5fSAtdSBcIiRPQ0lSX1VTRVJcIiAtLXBhc3N3b3JkLXN0ZGluIHx8IGV4aXQgMWBcbiAgICAgICAgOiBgb2NpIHJhdy1yZXF1ZXN0IC0tcmVnaW9uICR7cmVnaW9uUH0gLS1odHRwLW1ldGhvZCBHRVQgLS10YXJnZXQtdXJpIFwiaHR0cHM6Ly8ke29jaXJSZWdpc3RyeX0vMjAxODA0MTkvZG9ja2VyL3Rva2VuXCIgMj4vZGV2L251bGwgfCAoY29tbWFuZCAtdiBqcSA+L2Rldi9udWxsICYmIGpxIC1yIC5kYXRhLnRva2VuIHx8IGdyZXAgLW8gJ1widG9rZW5cIjpcIlteXCJdKlwiJyB8IGN1dCAtZCdcIicgLWY0KSB8IGRvY2tlciBsb2dpbiAtdSBCRUFSRVJfVE9LRU4gLS1wYXNzd29yZC1zdGRpbiAke29jaXJSZWdpc3RyeX0gfHwgKGVjaG8gXCJTZXQgT0NJX0FVVEhfVE9LRU4gb3IgY29uZmlndXJlIE9DSSBDTElcIiA+JjI7IGV4aXQgMSlgO1xuICAgICAgY29uc3QgaGFuZGxlciA9IGNvbmZpZy5oYW5kbGVyIHx8ICdjb20uZXhhbXBsZS5mbi5IZWxsb0Z1bmN0aW9uOjpoYW5kbGVSZXF1ZXN0JztcbiAgICAgIGNvbnN0IHVzZVRoaW4gPSBjb25maWcudXNlVGhpbkRvY2tlcmZpbGUgPT09IHRydWU7XG4gICAgICBjb25zdCBkb2NrZXJmaWxlQ29udGVudFRoaW4gPSBgRlJPTSBmbnByb2plY3QvZm4tamF2YS1mZGs6anJlMTctMS4xLjVcbldPUktESVIgL2Z1bmN0aW9uXG5DT1BZIHRhcmdldC8qLmphciAvZnVuY3Rpb24vYXBwL1xuQ01EIFtcIiR7aGFuZGxlci5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCJdXG5gO1xuICAgICAgY29uc3QgZG9ja2VyZmlsZUNvbnRlbnRGdWxsID0gYEZST00gZm5wcm9qZWN0L2ZuLWphdmEtZmRrLWJ1aWxkOmpkazE3LTEuMS41IGFzIGJ1aWxkLXN0YWdlXG5XT1JLRElSIC9mdW5jdGlvblxuRU5WIE1BVkVOX09QVFMgLURodHRwLnByb3h5SG9zdD0gLURodHRwLnByb3h5UG9ydD0gLURodHRwcy5wcm94eUhvc3Q9IC1EaHR0cHMucHJveHlQb3J0PSAtRGh0dHAubm9uUHJveHlIb3N0cz0gLURtYXZlbi5yZXBvLmxvY2FsPS91c3Ivc2hhcmUvbWF2ZW4vcmVmL3JlcG9zaXRvcnlcbkFERCBwb20ueG1sIC9mdW5jdGlvbi9wb20ueG1sXG5SVU4gW1wibXZuXCIsIFwicGFja2FnZVwiLCBcImRlcGVuZGVuY3k6Y29weS1kZXBlbmRlbmNpZXNcIiwgXCItRGluY2x1ZGVTY29wZT1ydW50aW1lXCIsIFwiLURza2lwVGVzdHM9dHJ1ZVwiLCBcIi1EbWRlcC5wcmVwZW5kR3JvdXBJZD10cnVlXCIsIFwiLURvdXRwdXREaXJlY3Rvcnk9dGFyZ2V0XCIsIFwiLS1mYWlsLW5ldmVyXCJdXG5BREQgc3JjIC9mdW5jdGlvbi9zcmNcblJVTiBbXCJtdm5cIiwgXCJwYWNrYWdlXCJdXG5GUk9NIGZucHJvamVjdC9mbi1qYXZhLWZkazpqcmUxNy0xLjEuNVxuV09SS0RJUiAvZnVuY3Rpb25cbkNPUFkgLS1mcm9tPWJ1aWxkLXN0YWdlIC9mdW5jdGlvbi90YXJnZXQvKi5qYXIgL2Z1bmN0aW9uL2FwcC9cbkNNRCBbXCIke2hhbmRsZXIucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpfVwiXVxuYDtcbiAgICAgIGNvbnN0IGRvY2tlcmZpbGVDb250ZW50ID0gdXNlVGhpbiA/IGRvY2tlcmZpbGVDb250ZW50VGhpbiA6IGRvY2tlcmZpbGVDb250ZW50RnVsbDtcbiAgICAgIGNvbnN0IGRvY2tlcmlnbm9yZUNvbnRlbnQgPSBgbm9kZV9tb2R1bGVzXG4uZ2l0XG4qLm1kXG4uZW52XG4uaWRlYVxuLnZzY29kZVxuKi5sb2dcbmA7XG4gICAgICBjb25zdCBkb2NrZXJmaWxlQjY0ID0gQnVmZmVyLmZyb20oZG9ja2VyZmlsZUNvbnRlbnQsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgY29uc3QgZG9ja2VyaWdub3JlQjY0ID0gQnVmZmVyLmZyb20oZG9ja2VyaWdub3JlQ29udGVudCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAvLyBHZW5lcmF0ZSBEb2NrZXJmaWxlIGFuZCAuZG9ja2VyaWdub3JlIGluIGxvY2FsLWV4ZWMgb25seSBpZiBtaXNzaW5nOyBpZiB0aGV5IGV4aXN0IHVzZSBhcy1pcy4gVGhlbiBsb2dpbiwgYnVpbGQsIHB1c2guXG4gICAgICB0aGlzLmFkZE92ZXJyaWRlKGByZXNvdXJjZS5udWxsX3Jlc291cmNlLiR7YnVpbGRBbmRQdXNoSW1hZ2VJZH0ucHJvdmlzaW9uZXJgLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAnbG9jYWwtZXhlYyc6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdjZCBcIiRGVU5DVElPTl9DT0RFX1BBVEhcIiAmJiAoWyAtZiBEb2NrZXJmaWxlIF0gfHwgKGVjaG8gXCIkRE9DS0VSRklMRV9CNjRcIiB8IGJhc2U2NCAtZCA+IERvY2tlcmZpbGUpKSAmJiAoWyAtZiAuZG9ja2VyaWdub3JlIF0gfHwgKGVjaG8gXCIkRE9DS0VSSUdOT1JFX0I2NFwiIHwgYmFzZTY0IC1kID4gLmRvY2tlcmlnbm9yZSkpJyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICAgIEZVTkNUSU9OX0NPREVfUEFUSDogZnVuY3Rpb25Db2RlUGF0aCxcbiAgICAgICAgICAgICAgRE9DS0VSRklMRV9CNjQ6IGRvY2tlcmZpbGVCNjQsXG4gICAgICAgICAgICAgIERPQ0tFUklHTk9SRV9CNjQ6IGRvY2tlcmlnbm9yZUI2NCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyAnbG9jYWwtZXhlYyc6IHsgY29tbWFuZDogbG9naW5TY3JpcHQsIG9uX2ZhaWx1cmU6ICdjb250aW51ZScgfSB9LFxuICAgICAgICB7ICdsb2NhbC1leGVjJzogeyBjb21tYW5kOiBgY2QgXCIke2Z1bmN0aW9uQ29kZVBhdGgucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpfVwiICYmIGRvY2tlciBidWlsZCAtLXBsYXRmb3JtIGxpbnV4L2FtZDY0IC10ICR7aW1hZ2VVcmx9IC5gIH0gfSxcbiAgICAgICAgeyAnbG9jYWwtZXhlYyc6IHsgY29tbWFuZDogYGRvY2tlciBwdXNoICR7aW1hZ2VVcmx9YCB9IH0sXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgdmNuID0gbmV3IENvcmVWY24odGhpcywgJ1ZjbicsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXZjbmAsXG4gICAgICAgIGNpZHJCbG9ja3M6IFsnMTAuMC4wLjAvMTYnXSxcbiAgICAgICAgZG5zTGFiZWw6ICdhcHBmbicsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHB1YmxpY1N1Ym5ldCA9IG5ldyBDb3JlU3VibmV0KHRoaXMsICdQdWJsaWNTdWJuZXQnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wdWJsaWNgLFxuICAgICAgICBjaWRyQmxvY2s6ICcxMC4wLjEuMC8yNCcsXG4gICAgICAgIGRuc0xhYmVsOiAncHVibGljJyxcbiAgICAgICAgcHJvaGliaXRQdWJsaWNJcE9uVm5pYzogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByaXZhdGVTdWJuZXQgPSBuZXcgQ29yZVN1Ym5ldCh0aGlzLCAnUHJpdmF0ZVN1Ym5ldCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXByaXZhdGVgLFxuICAgICAgICBjaWRyQmxvY2s6ICcxMC4wLjIuMC8yNCcsXG4gICAgICAgIGRuc0xhYmVsOiAncHJpdmF0ZScsXG4gICAgICAgIHByb2hpYml0UHVibGljSXBPblZuaWM6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcHVibGljU2wgPSBuZXcgQ29yZVNlY3VyaXR5TGlzdCh0aGlzLCAnUHVibGljU2VjdXJpdHlMaXN0Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHVibGljLXNsYCxcbiAgICAgICAgaW5ncmVzc1NlY3VyaXR5UnVsZXM6IFtcbiAgICAgICAgICB7IHByb3RvY29sOiAnNicsIHNvdXJjZTogJzAuMC4wLjAvMCcsIGRlc2NyaXB0aW9uOiAnSFRUUCcsIHRjcE9wdGlvbnM6IHsgbWluOiA4MCwgbWF4OiA4MCB9IH0sXG4gICAgICAgICAgeyBwcm90b2NvbDogJzYnLCBzb3VyY2U6ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0hUVFBTJywgdGNwT3B0aW9uczogeyBtaW46IDQ0MywgbWF4OiA0NDMgfSB9LFxuICAgICAgICBdLFxuICAgICAgICBlZ3Jlc3NTZWN1cml0eVJ1bGVzOiBbeyBwcm90b2NvbDogJ2FsbCcsIGRlc3RpbmF0aW9uOiAnMC4wLjAuMC8wJywgZGVzY3JpcHRpb246ICdBbGwnIH1dLFxuICAgICAgfSk7XG4gICAgICBwdWJsaWNTdWJuZXQuYWRkT3ZlcnJpZGUoJ3NlY3VyaXR5X2xpc3RfaWRzJywgW3B1YmxpY1NsLmlkXSk7XG4gICAgICBjb25zdCBwcml2YXRlU2wgPSBuZXcgQ29yZVNlY3VyaXR5TGlzdCh0aGlzLCAnUHJpdmF0ZVNlY3VyaXR5TGlzdCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXByaXZhdGUtc2xgLFxuICAgICAgICBpbmdyZXNzU2VjdXJpdHlSdWxlczogW1xuICAgICAgICAgIHsgcHJvdG9jb2w6ICc2Jywgc291cmNlOiAnMTAuMC4yLjAvMjQnLCBkZXNjcmlwdGlvbjogJ1BHJywgdGNwT3B0aW9uczogeyBtaW46IDU0MzIsIG1heDogNTQzMiB9IH0sXG4gICAgICAgIF0sXG4gICAgICAgIGVncmVzc1NlY3VyaXR5UnVsZXM6IFt7IHByb3RvY29sOiAnYWxsJywgZGVzdGluYXRpb246ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0FsbCcgfV0sXG4gICAgICB9KTtcbiAgICAgIHByaXZhdGVTdWJuZXQuYWRkT3ZlcnJpZGUoJ3NlY3VyaXR5X2xpc3RfaWRzJywgW3ByaXZhdGVTbC5pZF0pO1xuXG4gICAgICBjb25zdCBhbGxTZXJ2aWNlcyA9IG5ldyBEYXRhT2NpQ29yZVNlcnZpY2VzKHRoaXMsICdBbGxTZXJ2aWNlcycsIHt9KTtcbiAgICAgIGNvbnN0IHN2Y0d3ID0gbmV3IENvcmVTZXJ2aWNlR2F0ZXdheSh0aGlzLCAnU2VydmljZUdhdGV3YXknLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1zZ3dgLFxuICAgICAgICBzZXJ2aWNlczogW3sgc2VydmljZUlkOiBhbGxTZXJ2aWNlcy5zZXJ2aWNlcy5nZXQoMCkuaWQgfV0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByaXZSdCA9IG5ldyBDb3JlUm91dGVUYWJsZSh0aGlzLCAnUHJpdmF0ZVJvdXRlVGFibGUnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wcml2YXRlLXJ0YCxcbiAgICAgICAgcm91dGVSdWxlczogW1xuICAgICAgICAgIHsgbmV0d29ya0VudGl0eUlkOiBzdmNHdy5pZCwgZGVzdGluYXRpb246IGFsbFNlcnZpY2VzLnNlcnZpY2VzLmdldCgwKS5jaWRyQmxvY2ssIGRlc3RpbmF0aW9uVHlwZTogJ1NFUlZJQ0VfQ0lEUl9CTE9DSycsIGRlc2NyaXB0aW9uOiAnT0NJUicgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgcHJpdmF0ZVN1Ym5ldC5hZGRPdmVycmlkZSgncm91dGVfdGFibGVfaWQnLCBwcml2UnQuaWQpO1xuICAgICAgY29uc3QgaWd3ID0gbmV3IENvcmVJbnRlcm5ldEdhdGV3YXkodGhpcywgJ0ludGVybmV0R2F0ZXdheScsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LWlnd2AsXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHB1YlJ0ID0gbmV3IENvcmVSb3V0ZVRhYmxlKHRoaXMsICdQdWJsaWNSb3V0ZVRhYmxlJywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHVibGljLXJ0YCxcbiAgICAgICAgcm91dGVSdWxlczogW1xuICAgICAgICAgIHsgbmV0d29ya0VudGl0eUlkOiBpZ3cuaWQsIGRlc3RpbmF0aW9uOiAnMC4wLjAuMC8wJywgZGVzdGluYXRpb25UeXBlOiAnQ0lEUl9CTE9DSycsIGRlc2NyaXB0aW9uOiAnSW50ZXJuZXQnIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICAgIHB1YmxpY1N1Ym5ldC5hZGRPdmVycmlkZSgncm91dGVfdGFibGVfaWQnLCBwdWJSdC5pZCk7XG5cbiAgICAgIGNvbnN0IGFwaUdhdGV3YXkgPSBuZXcgQXBpZ2F0ZXdheUdhdGV3YXkodGhpcywgJ0FwaUdhdGV3YXknLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICBzdWJuZXRJZDogcHVibGljU3VibmV0LmlkLFxuICAgICAgICBlbmRwb2ludFR5cGU6ICdQVUJMSUMnLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1hcGktZ2F0ZXdheWAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvZ0dyb3VwID0gbmV3IExvZ2dpbmdMb2dHcm91cCh0aGlzLCAnTG9nR3JvdXAnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYXBwTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBMb2cgZ3JvdXAgZm9yICR7YXBwTmFtZX1gLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBleGVjdXRpb25Mb2cgPSBuZXcgTG9nZ2luZ0xvZyh0aGlzLCAnRXhlY3V0aW9uTG9nJywge1xuICAgICAgICBkaXNwbGF5TmFtZTogYCR7YXBwTmFtZX0tZXhlY3V0aW9uYCxcbiAgICAgICAgbG9nR3JvdXBJZDogbG9nR3JvdXAuaWQsXG4gICAgICAgIGxvZ1R5cGU6ICdTRVJWSUNFJyxcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgY2F0ZWdvcnk6ICdleGVjdXRpb24nLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdhcGlnYXRld2F5JyxcbiAgICAgICAgICAgIHNlcnZpY2U6ICdhcGlnYXRld2F5JyxcbiAgICAgICAgICAgIHNvdXJjZVR5cGU6ICdPQ0lTRVJWSUNFJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmdW5jdGlvbkFwcCA9IG5ldyBGdW5jdGlvbnNBcHBsaWNhdGlvbih0aGlzLCAnRnVuY3Rpb25BcHAnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYXBwTmFtZSxcbiAgICAgICAgc3VibmV0SWRzOiBbcHJpdmF0ZVN1Ym5ldC5pZF0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9jaUZ1bmN0aW9uID0gbmV3IEZ1bmN0aW9uc0Z1bmN0aW9uKHRoaXMsICdGdW5jdGlvbicsIHtcbiAgICAgICAgYXBwbGljYXRpb25JZDogZnVuY3Rpb25BcHAuaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBjb25maWcuZnVuY3Rpb25OYW1lISxcbiAgICAgICAgaW1hZ2U6IGltYWdlVXJsLFxuICAgICAgICBtZW1vcnlJbk1iczogY29uZmlnLmZ1bmN0aW9uTWVtb3J5TWIgPz8gJzI1NicsXG4gICAgICAgIHRpbWVvdXRJblNlY29uZHM6IGNvbmZpZy5mdW5jdGlvblRpbWVvdXRTZWNvbmRzID8/IDMwLFxuICAgICAgICAuLi4oY29uZmlnLmZ1bmN0aW9uQ29uZmlnICYmIE9iamVjdC5rZXlzKGNvbmZpZy5mdW5jdGlvbkNvbmZpZykubGVuZ3RoID4gMCA/IHsgY29uZmlnOiBjb25maWcuZnVuY3Rpb25Db25maWcgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgb2NpRnVuY3Rpb24uYWRkT3ZlcnJpZGUoJ2RlcGVuZHNfb24nLCBbYG51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfWBdKTtcbiAgICAgIGNvbnN0IHBhdGhQcmVmaXggPSBjb25maWcuYXBpR3dQYXRoUHJlZml4ID8/ICcvJztcbiAgICAgIGxldCByb3V0ZXM6IEFycmF5PHsgcGF0aDogc3RyaW5nOyBtZXRob2RzOiBzdHJpbmdbXTsgYmFja2VuZDogeyB0eXBlOiBzdHJpbmc7IGZ1bmN0aW9uSWQ6IHR5cGVvZiBvY2lGdW5jdGlvbi5pZDsgcmVhZFRpbWVvdXRJblNlY29uZHM/OiBudW1iZXIgfSB9PjtcbiAgICAgIGlmIChjb25maWcuYXBpR3dEZXBsb3ltZW50SnNvblBhdGggJiYgZnMuZXhpc3RzU3luYyhjb25maWcuYXBpR3dEZXBsb3ltZW50SnNvblBhdGgpKSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhjb25maWcuYXBpR3dEZXBsb3ltZW50SnNvblBhdGgsICd1dGY4Jyk7XG4gICAgICAgIGNvbnN0IHNwZWMgPSBKU09OLnBhcnNlKHJhdykgYXMgeyByb3V0ZXM/OiBBcnJheTx7IHBhdGg/OiBzdHJpbmc7IG1ldGhvZHM/OiBzdHJpbmdbXTsgYmFja2VuZD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+IH07XG4gICAgICAgIGNvbnN0IHJvdXRlTGlzdCA9IHNwZWM/LnJvdXRlcyA/PyBbXTtcbiAgICAgICAgcm91dGVzID0gcm91dGVMaXN0Lm1hcCgocikgPT4ge1xuICAgICAgICAgIGNvbnN0IGIgPSByLmJhY2tlbmQgPz8ge307XG4gICAgICAgICAgY29uc3QgZnVuY3Rpb25JZFJhdyA9IChiLmZ1bmN0aW9uSWQgPz8gYi5mdW5jdGlvbl9pZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSB0eXBlb2YgZnVuY3Rpb25JZFJhdyA9PT0gJ3N0cmluZycgJiYgZnVuY3Rpb25JZFJhdy5pbmNsdWRlcygnJHtmdW5jdGlvbl9pZH0nKVxuICAgICAgICAgICAgPyBvY2lGdW5jdGlvbi5pZFxuICAgICAgICAgICAgOiAoZnVuY3Rpb25JZFJhdyA/PyBvY2lGdW5jdGlvbi5pZCk7XG4gICAgICAgICAgY29uc3QgcmVhZFRpbWVvdXQgPSAoYi5yZWFkVGltZW91dEluU2Vjb25kcyA/PyBiLnJlYWRfdGltZW91dF9pbl9zZWNvbmRzKSBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IHIucGF0aCA/PyAnL3twYXRoKn0nLFxuICAgICAgICAgICAgbWV0aG9kczogQXJyYXkuaXNBcnJheShyLm1ldGhvZHMpID8gci5tZXRob2RzIDogWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJ10sXG4gICAgICAgICAgICBiYWNrZW5kOiB7XG4gICAgICAgICAgICAgIHR5cGU6IChiLnR5cGUgYXMgc3RyaW5nKSA/PyAnT1JBQ0xFX0ZVTkNUSU9OU19CQUNLRU5EJyxcbiAgICAgICAgICAgICAgZnVuY3Rpb25JZCxcbiAgICAgICAgICAgICAgLi4uKHJlYWRUaW1lb3V0ICE9IG51bGwgPyB7IHJlYWRUaW1lb3V0SW5TZWNvbmRzOiByZWFkVGltZW91dCB9IDoge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJvdXRlUGF0aCA9IGNvbmZpZy5hcGlHd1JvdXRlUGF0aCA/PyAnL3twYXRoKn0nO1xuICAgICAgICBjb25zdCBtZXRob2RzID0gY29uZmlnLmFwaUd3TWV0aG9kcz8ubGVuZ3RoID8gY29uZmlnLmFwaUd3TWV0aG9kcyA6IFsnR0VUJywgJ1BPU1QnLCAnT1BUSU9OUyddO1xuICAgICAgICByb3V0ZXMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcGF0aDogcm91dGVQYXRoLFxuICAgICAgICAgICAgbWV0aG9kcyxcbiAgICAgICAgICAgIGJhY2tlbmQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ09SQUNMRV9GVU5DVElPTlNfQkFDS0VORCcsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uSWQ6IG9jaUZ1bmN0aW9uLmlkLFxuICAgICAgICAgICAgICByZWFkVGltZW91dEluU2Vjb25kczogY29uZmlnLmZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gMzAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9XG4gICAgICBjb25zdCBhcGlEZXBsb3ltZW50ID0gbmV3IEFwaWdhdGV3YXlEZXBsb3ltZW50KHRoaXMsICdBcGlEZXBsb3ltZW50Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgZ2F0ZXdheUlkOiBhcGlHYXRld2F5LmlkLFxuICAgICAgICBwYXRoUHJlZml4LFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1kZXBsb3ltZW50YCxcbiAgICAgICAgc3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBsb2dnaW5nUG9saWNpZXM6IHtcbiAgICAgICAgICAgIGV4ZWN1dGlvbkxvZzogeyBpc0VuYWJsZWQ6IHRydWUsIGxvZ0xldmVsOiAnSU5GTycgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhcGlEZXBsb3ltZW50Lm5vZGUuYWRkRGVwZW5kZW5jeShvY2lGdW5jdGlvbik7XG4gICAgICBhcGlEZXBsb3ltZW50Lm5vZGUuYWRkRGVwZW5kZW5jeShleGVjdXRpb25Mb2cpO1xuXG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdvY2lyX3JlcG9zaXRvcnlfbmFtZScsIHsgdmFsdWU6IG9jaXJSZXBvc2l0b3J5LmRpc3BsYXlOYW1lLCBkZXNjcmlwdGlvbjogJ09DSVIgcmVwb3NpdG9yeSBuYW1lJyB9KTtcbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2FwaV9nYXRld2F5X2hvc3QnLCB7IHZhbHVlOiBhcGlHYXRld2F5Lmhvc3RuYW1lLCBkZXNjcmlwdGlvbjogJ0FQSSBHYXRld2F5IGhvc3RuYW1lJyB9KTtcbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2Z1bmN0aW9uX2ludm9rZV91cmwnLCB7IHZhbHVlOiBgaHR0cHM6Ly8ke2FwaUdhdGV3YXkuaG9zdG5hbWV9YCwgZGVzY3JpcHRpb246ICdCYXNlIFVSTCB0byBpbnZva2UgdGhlIGZ1bmN0aW9uJyB9KTtcbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2Z1bmN0aW9uX2lkJywgeyB2YWx1ZTogb2NpRnVuY3Rpb24uaWQsIGRlc2NyaXB0aW9uOiAnT0NJIEZ1bmN0aW9uIE9DSUQnIH0pO1xuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnbG9nX2dyb3VwX2lkJywgeyB2YWx1ZTogbG9nR3JvdXAuaWQsIGRlc2NyaXB0aW9uOiAnT0NJIExvZyBHcm91cCBPQ0lEIGZvciB0aGUgYXBwbGljYXRpb24nIH0pO1xuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnZXhlY3V0aW9uX2xvZ19pZCcsIHsgdmFsdWU6IGV4ZWN1dGlvbkxvZy5pZCwgZGVzY3JpcHRpb246ICdPQ0kgRXhlY3V0aW9uIExvZyBPQ0lEIGZvciBBUEkgR2F0ZXdheScgfSk7XG4gICAgfVxuXG4gICAgLy8gRm9yY2Ugb3JhY2xlL29jaSAoVGVycmFmb3JtIFJlZ2lzdHJ5KSBzbyB0ZXJyYWZvcm0gaW5pdCB1c2VzIGl0IG9uIE9MOCBhbmQgZWxzZXdoZXJlOyBtdXN0IHJ1biBhZnRlciBwcm92aWRlciBpcyBhZGRlZFxuICAgIHRoaXMuYWRkT3ZlcnJpZGUoJ3RlcnJhZm9ybS5yZXF1aXJlZF9wcm92aWRlcnMub2NpJywge1xuICAgICAgc291cmNlOiAnb3JhY2xlL29jaScsXG4gICAgICB2ZXJzaW9uOiAnPj0gNS4wLjAsIDwgNi4wLjAnLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vb2NpLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLGlDQUF3RDtBQUN4RCw2REFBNkQ7QUFDN0QseUdBQW9HO0FBQ3BHLDZEQUF5RDtBQUN6RCxtRUFBK0Q7QUFDL0QsaUZBQTRFO0FBQzVFLHFGQUFnRjtBQUNoRix5RkFBbUY7QUFDbkYsNkVBQXdFO0FBQ3hFLHVGQUFrRjtBQUNsRixpRkFBNkU7QUFDN0UsdUZBQW1GO0FBQ25GLHVGQUFtRjtBQUNuRixpRkFBNkU7QUFDN0UsK0VBQTBFO0FBQzFFLG1FQUErRDtBQUMvRCxxREFBcUY7QUFDckYsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQXdDN0IsTUFBYSxRQUFTLFNBQVEsc0JBQWM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxNQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDZDQUE2QztRQUM3QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDbEMscUJBQXFCO2dCQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO29CQUNwQyxHQUFHLEVBQUU7d0JBQ0gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTTt3QkFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO3dCQUMzQixHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLG9CQUFvQjt3QkFDcEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO3FCQUN0QjtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzFDLHFEQUFxRDtnQkFDckQsTUFBTSxXQUFXLEdBQVE7b0JBQ3ZCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU87b0JBQy9CLGFBQWEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxLQUFLO2lCQUNwRCxDQUFDO2dCQUNGLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDL0IsV0FBVyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDeEQsQ0FBQztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ2pDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQzVELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRTtvQkFDcEMsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsZUFBZTtRQUNmLElBQUksc0JBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQzNCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixXQUFXLEVBQUUsTUFBTSxDQUFDLFNBQVM7U0FDOUIsQ0FBQyxDQUFDO1FBRUgseUVBQXlFO1FBQ3pFLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDM0UsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksY0FBYyxDQUFDO1FBRXhGLE1BQU0sY0FBYyxHQUFHLElBQUksNkRBQTRCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzlFLGFBQWEsRUFBRSxpQkFBaUI7WUFDaEMsV0FBVyxFQUFFLFlBQVk7WUFDekIsUUFBUSxFQUFFLEtBQUssRUFBRSxnQ0FBZ0M7WUFDakQsV0FBVyxFQUFFLEtBQUssRUFBRSxzQkFBc0I7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdkYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxpQkFBaUIsQ0FBQztRQUVqRSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMElBQTBJLENBQzNJLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFrQixDQUFDLENBQUM7WUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUM7WUFDN0MsTUFBTSxZQUFZLEdBQUcsR0FBRyxJQUFBLHdCQUFXLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBQSwyQkFBYyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDLFlBQWEsQ0FBQztZQUMvRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUM7WUFFN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQ0FBbUMsRUFBRTtnQkFDcEQsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsT0FBTyxFQUFFLFFBQVE7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztZQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixtQkFBbUIsYUFBYSxFQUFFO2dCQUMzRSxtREFBbUQ7YUFDcEQsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsbUJBQW1CLFdBQVcsRUFBRTtnQkFDekUsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRTtnQkFDN0IsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO2dCQUNsRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzNCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTthQUN0QixDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzlCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxhQUFhLENBQUM7WUFDaEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjO2dCQUM1QyxDQUFDLENBQUMsMkJBQTJCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxpQkFBaUIsUUFBUSxxREFBcUQsVUFBVSxrREFBa0QsWUFBWSw2Q0FBNkM7Z0JBQzFQLENBQUMsQ0FBQyw0QkFBNEIsT0FBTyw0Q0FBNEMsWUFBWSxzTEFBc0wsWUFBWSxrRUFBa0UsQ0FBQztZQUNwVyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLDZDQUE2QyxDQUFDO1lBQ2hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUM7WUFDbEQsTUFBTSxxQkFBcUIsR0FBRzs7O1FBRzVCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztDQUNuQyxDQUFDO1lBQ0ksTUFBTSxxQkFBcUIsR0FBRzs7Ozs7Ozs7OztRQVU1QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Q0FDbkMsQ0FBQztZQUNJLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7WUFDbEYsTUFBTSxtQkFBbUIsR0FBRzs7Ozs7Ozs7Q0FRakMsQ0FBQztZQUNJLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BGLHlIQUF5SDtZQUN6SCxJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixtQkFBbUIsY0FBYyxFQUFFO2dCQUM1RTtvQkFDRSxZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFLDBMQUEwTDt3QkFDbk0sV0FBVyxFQUFFOzRCQUNYLGtCQUFrQixFQUFFLGdCQUFnQjs0QkFDcEMsY0FBYyxFQUFFLGFBQWE7NEJBQzdCLGdCQUFnQixFQUFFLGVBQWU7eUJBQ2xDO3FCQUNGO2lCQUNGO2dCQUNELEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUU7Z0JBQ2xFLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsK0NBQStDLFFBQVEsSUFBSSxFQUFFLEVBQUU7Z0JBQ3RJLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsUUFBUSxFQUFFLEVBQUUsRUFBRTthQUN6RCxDQUFDLENBQUM7WUFFSCxNQUFNLEdBQUcsR0FBRyxJQUFJLGtCQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDbkMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO2dCQUNuQyxXQUFXLEVBQUUsR0FBRyxZQUFZLE1BQU07Z0JBQ2xDLFVBQVUsRUFBRSxDQUFDLGFBQWEsQ0FBQztnQkFDM0IsUUFBUSxFQUFFLE9BQU87YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSx3QkFBVSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7Z0JBQ3hELGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtnQkFDbkMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLFdBQVcsRUFBRSxHQUFHLFlBQVksU0FBUztnQkFDckMsU0FBUyxFQUFFLGFBQWE7Z0JBQ3hCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixzQkFBc0IsRUFBRSxLQUFLO2FBQzlCLENBQUMsQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO2dCQUMxRCxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDYixXQUFXLEVBQUUsR0FBRyxZQUFZLFVBQVU7Z0JBQ3RDLFNBQVMsRUFBRSxhQUFhO2dCQUN4QixRQUFRLEVBQUUsU0FBUztnQkFDbkIsc0JBQXNCLEVBQUUsSUFBSTthQUM3QixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBRyxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFDaEUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO2dCQUNuQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsV0FBVyxFQUFFLEdBQUcsWUFBWSxZQUFZO2dCQUN4QyxvQkFBb0IsRUFBRTtvQkFDcEIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDN0YsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtpQkFDakc7Z0JBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDekYsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdELE1BQU0sU0FBUyxHQUFHLElBQUkscUNBQWdCLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO2dCQUNsRSxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDYixXQUFXLEVBQUUsR0FBRyxZQUFZLGFBQWE7Z0JBQ3pDLG9CQUFvQixFQUFFO29CQUNwQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO2lCQUNsRztnQkFDRCxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUN6RixDQUFDLENBQUM7WUFDSCxhQUFhLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSw0Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sS0FBSyxHQUFHLElBQUkseUNBQWtCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUMzRCxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDYixXQUFXLEVBQUUsR0FBRyxZQUFZLE1BQU07Z0JBQ2xDLFFBQVEsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzFELENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksaUNBQWMsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7Z0JBQzNELGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtnQkFDbkMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLFdBQVcsRUFBRSxHQUFHLFlBQVksYUFBYTtnQkFDekMsVUFBVSxFQUFFO29CQUNWLEVBQUUsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtpQkFDOUk7YUFDRixDQUFDLENBQUM7WUFDSCxhQUFhLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLDJDQUFtQixDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRTtnQkFDM0QsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO2dCQUNuQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsV0FBVyxFQUFFLEdBQUcsWUFBWSxNQUFNO2dCQUNsQyxPQUFPLEVBQUUsSUFBSTthQUNkLENBQUMsQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksaUNBQWMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQ3pELGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtnQkFDbkMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLFdBQVcsRUFBRSxHQUFHLFlBQVksWUFBWTtnQkFDeEMsVUFBVSxFQUFFO29CQUNWLEVBQUUsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUU7aUJBQzlHO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFckQsTUFBTSxVQUFVLEdBQUcsSUFBSSxzQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUMzRCxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLFFBQVEsRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDekIsWUFBWSxFQUFFLFFBQVE7Z0JBQ3RCLFdBQVcsRUFBRSxHQUFHLFlBQVksY0FBYzthQUMzQyxDQUFDLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLG1DQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDckQsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO2dCQUNuQyxXQUFXLEVBQUUsT0FBTztnQkFDcEIsV0FBVyxFQUFFLGlCQUFpQixPQUFPLEVBQUU7YUFDeEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsSUFBSSw0Q0FBb0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO2dCQUNoRSxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2FBQzlCLENBQUMsQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLElBQUksc0NBQWlCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDMUQsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFO2dCQUM3QixXQUFXLEVBQUUsTUFBTSxDQUFDLFlBQWE7Z0JBQ2pDLEtBQUssRUFBRSxRQUFRO2dCQUNmLFdBQVcsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLElBQUksS0FBSztnQkFDN0MsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLHNCQUFzQixJQUFJLEVBQUU7Z0JBQ3JELEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3JILENBQUMsQ0FBQztZQUNILFdBQVcsQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsaUJBQWlCLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxlQUFlLElBQUksR0FBRyxDQUFDO1lBQ2pELElBQUksTUFBK0ksQ0FBQztZQUNwSixJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BGLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLHVCQUF1QixFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBaUcsQ0FBQztnQkFDN0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO29CQUMxQixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBdUIsQ0FBQztvQkFDNUUsTUFBTSxVQUFVLEdBQUcsT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7d0JBQzlGLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRTt3QkFDaEIsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLElBQUksQ0FBQyxDQUFDLHVCQUF1QixDQUF1QixDQUFDO29CQUNoRyxPQUFPO3dCQUNMLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLFVBQVU7d0JBQzFCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQzt3QkFDMUUsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRyxDQUFDLENBQUMsSUFBZSxJQUFJLDBCQUEwQjs0QkFDdEQsVUFBVTs0QkFDVixHQUFHLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUN0RTtxQkFDRixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLElBQUksVUFBVSxDQUFDO2dCQUN0RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUMvRixNQUFNLEdBQUc7b0JBQ1A7d0JBQ0UsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsT0FBTzt3QkFDUCxPQUFPLEVBQUU7NEJBQ1AsSUFBSSxFQUFFLDBCQUEwQjs0QkFDaEMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFOzRCQUMxQixvQkFBb0IsRUFBRSxNQUFNLENBQUMsc0JBQXNCLElBQUksRUFBRTt5QkFDMUQ7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLDRDQUFvQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7Z0JBQ3BFLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtnQkFDbkMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUN4QixVQUFVO2dCQUNWLFdBQVcsRUFBRSxHQUFHLFlBQVksYUFBYTtnQkFDekMsYUFBYSxFQUFFO29CQUNiLE1BQU07aUJBQ1A7YUFDRixDQUFDLENBQUM7WUFDSCxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUU5Qyx1RkFBdUY7WUFDdkYsTUFBTSxZQUFZLEdBQUcsSUFBSSx3QkFBVSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7Z0JBQ3hELFdBQVcsRUFBRSxHQUFHLE9BQU8sU0FBUztnQkFDaEMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUN2QixPQUFPLEVBQUUsU0FBUztnQkFDbEIsYUFBYSxFQUFFO29CQUNiLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtvQkFDbkMsTUFBTSxFQUFFO3dCQUNOLFFBQVEsRUFBRSxRQUFRO3dCQUNsQiw0REFBNEQ7d0JBQzVELFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRTt3QkFDeEIsT0FBTyxFQUFFLFdBQVc7d0JBQ3BCLFVBQVUsRUFBRSxZQUFZO3FCQUN6QjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTdDLElBQUksdUJBQWUsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1lBQzlILElBQUksdUJBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1lBQ25ILElBQUksdUJBQWUsQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxVQUFVLENBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFFLENBQUMsQ0FBQztZQUM5SSxJQUFJLHVCQUFlLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUM7WUFDdEcsSUFBSSx1QkFBZSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pILElBQUksdUJBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQyxDQUFDO1FBQzdILENBQUM7UUFFRCx5SEFBeUg7UUFDekgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNuRCxNQUFNLEVBQUUsWUFBWTtZQUNwQixPQUFPLEVBQUUsbUJBQW1CO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpVRCw0QkFpVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFRlcnJhZm9ybVN0YWNrLCBUZXJyYWZvcm1PdXRwdXQgfSBmcm9tICdjZGt0Zic7XG5pbXBvcnQgeyBPY2lQcm92aWRlciB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9wcm92aWRlcic7XG5pbXBvcnQgeyBBcnRpZmFjdHNDb250YWluZXJSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2FydGlmYWN0cy1jb250YWluZXItcmVwb3NpdG9yeSc7XG5pbXBvcnQgeyBDb3JlVmNuIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtdmNuJztcbmltcG9ydCB7IENvcmVTdWJuZXQgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1zdWJuZXQnO1xuaW1wb3J0IHsgQ29yZVNlY3VyaXR5TGlzdCB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXNlY3VyaXR5LWxpc3QnO1xuaW1wb3J0IHsgQ29yZVNlcnZpY2VHYXRld2F5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtc2VydmljZS1nYXRld2F5JztcbmltcG9ydCB7IERhdGFPY2lDb3JlU2VydmljZXMgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvZGF0YS1vY2ktY29yZS1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb3JlUm91dGVUYWJsZSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXJvdXRlLXRhYmxlJztcbmltcG9ydCB7IENvcmVJbnRlcm5ldEdhdGV3YXkgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1pbnRlcm5ldC1nYXRld2F5JztcbmltcG9ydCB7IEFwaWdhdGV3YXlHYXRld2F5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2FwaWdhdGV3YXktZ2F0ZXdheSc7XG5pbXBvcnQgeyBBcGlnYXRld2F5RGVwbG95bWVudCB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcGlnYXRld2F5LWRlcGxveW1lbnQnO1xuaW1wb3J0IHsgRnVuY3Rpb25zQXBwbGljYXRpb24gfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvZnVuY3Rpb25zLWFwcGxpY2F0aW9uJztcbmltcG9ydCB7IEZ1bmN0aW9uc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2Z1bmN0aW9ucy1mdW5jdGlvbic7XG5pbXBvcnQgeyBMb2dnaW5nTG9nR3JvdXAgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvbG9nZ2luZy1sb2ctZ3JvdXAnO1xuaW1wb3J0IHsgTG9nZ2luZ0xvZyB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9sb2dnaW5nLWxvZyc7XG5pbXBvcnQgeyBPY2lCYWNrZW5kQ29uZmlnLCBvY2lySG9zdEtleSwgZ2V0T2NpSW1hZ2VVcmwgfSBmcm9tICcuLi9jb25maWcvb2NpLWNvbmZpZyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9jaVN0YWNrQ29uZmlnIHtcbiAgY29tcGFydG1lbnRJZDogc3RyaW5nO1xuICBvY2lyQ29tcGFydG1lbnRJZD86IHN0cmluZztcbiAgdGVuYW5jeUlkOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBuYW1lc3BhY2U6IHN0cmluZztcbiAgLyoqIE9DSSBGdW5jdGlvbnMgYXBwbGljYXRpb24gbmFtZSAoZS5nLiBteS1hcHApLiBTZXQgdmlhIE9DSV9GVU5DVElPTl9BUFBfTkFNRSBvciBwYXNzIGluIGNvbmZpZy4gKi9cbiAgZnVuY3Rpb25BcHBOYW1lOiBzdHJpbmc7XG4gIC8qKiBPQ0kgRnVuY3Rpb24gbmFtZSAoZS5nLiBteS1mdW5jdGlvbikuIFNldCB2aWEgT0NJX0ZVTkNUSU9OX05BTUUgb3IgcGFzcyBpbiBjb25maWcuICovXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgcGF0aCB0byBKQVIgKG9yIERvY2tlcmZpbGUgY29udGV4dCkgdG8gYnVpbGQgYW5kIGRlcGxveSBhcyB0aGUgZnVuY3Rpb24gaW1hZ2UuIFNldCB2aWEgT0NJX0ZVTkNUSU9OX0pBUl9QQVRILiBFbXB0eSA9IG5vIGZ1bmN0aW9uL2ltYWdlIGJ1aWxkLiAqL1xuICBmdW5jdGlvbkphclBhdGg/OiBzdHJpbmc7XG4gIC8qKiBEaXJlY3RvcnkgY29udGFpbmluZyB0YXJnZXQvIChEb2NrZXJmaWxlIGlzIGdlbmVyYXRlZCBpbiBsb2NhbC1leGVjKS4gV2hlbiBzZXQgd2l0aCBmdW5jdGlvbk5hbWUsIGNyZWF0ZXMgVkNOLCBGdW5jdGlvbiwgQVBJIEdhdGV3YXkuICovXG4gIGRvY2tlckNvbnRleHRQYXRoPzogc3RyaW5nO1xuICAvKiogSW1hZ2UgdGFnIGZvciBPQ0lSIChmcm9tIGZ1bmMueWFtbCB2ZXJzaW9uIG9yIE9DSV9JTUFHRV9UQUc7IGRlZmF1bHQgJ2xhdGVzdCcpLiAqL1xuICBpbWFnZVRhZz86IHN0cmluZztcbiAgLyoqIEphdmEgRkRLIENNRCBoYW5kbGVyIChmcm9tIGZ1bmMueWFtbCBvciBPQ0lfRlVOQ1RJT05fSEFORExFUikuICovXG4gIGhhbmRsZXI/OiBzdHJpbmc7XG4gIC8qKiBXaGVuIHRydWUsIGRlcGxveSB1c2VzIHRoaW4gRG9ja2VyZmlsZSAobm8gTWF2ZW4gaW4gaW1hZ2UpOyBmdWxsIGJ1aWxkIG9ubHkgaW4gcmVkZXBsb3k6ZnVuY3Rpb24uICovXG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgb2NpclJlcG9zaXRvcnlOYW1lPzogc3RyaW5nO1xuICAvKiogQVBJIEdhdGV3YXkgZGVwbG95bWVudCBwYXRoIHByZWZpeC4gRGVmYXVsdCAnLycuICovXG4gIGFwaUd3UGF0aFByZWZpeD86IHN0cmluZztcbiAgLyoqIEFQSSBHYXRld2F5IHJvdXRlIHBhdGguIERlZmF1bHQgJy97cGF0aCp9Jy4gKi9cbiAgYXBpR3dSb3V0ZVBhdGg/OiBzdHJpbmc7XG4gIC8qKiBBUEkgR2F0ZXdheSByb3V0ZSBtZXRob2RzLiBEZWZhdWx0IFsnR0VUJywgJ1BPU1QnLCAnT1BUSU9OUyddLiAqL1xuICBhcGlHd01ldGhvZHM/OiBzdHJpbmdbXTtcbiAgLyoqIEZ1bmN0aW9uIG1lbW9yeSBpbiBNQiAoZS5nLiAnMjU2JykuIEZyb20gZnVuYy55YW1sIG9yIE9DSV9GVU5DVElPTl9NRU1PUllfTUIuICovXG4gIGZ1bmN0aW9uTWVtb3J5TWI/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiB0aW1lb3V0IGluIHNlY29uZHMuIEZyb20gZnVuYy55YW1sIG9yIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMuICovXG4gIGZ1bmN0aW9uVGltZW91dFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKiBGdW5jdGlvbiBjb25maWcvZW52IGtleS12YWx1ZS4gRnJvbSBmdW5jLnlhbWwgY29uZmlnIG9yIE9DSV9GVU5DVElPTl9DT05GSUcuICovXG4gIGZ1bmN0aW9uQ29uZmlnPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT04gKHJvdXRlcykuIERlZmF1bHQgb2NpX2FwaWdhdGV3YXlfZGVwbG95bWVudC5qc29uIGluIHByb2plY3Qgcm9vdC4gKi9cbiAgYXBpR3dEZXBsb3ltZW50SnNvblBhdGg/OiBzdHJpbmc7XG4gIGJhY2tlbmQ/OiBPY2lCYWNrZW5kQ29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgT2NpU3RhY2sgZXh0ZW5kcyBUZXJyYWZvcm1TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbmZpZzogT2NpU3RhY2tDb25maWcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gQ29uZmlndXJlIFRlcnJhZm9ybSBiYWNrZW5kIChpZiBub3QgbG9jYWwpXG4gICAgaWYgKGNvbmZpZy5iYWNrZW5kICYmIGNvbmZpZy5iYWNrZW5kLnR5cGUgIT09ICdsb2NhbCcpIHtcbiAgICAgIGlmIChjb25maWcuYmFja2VuZC50eXBlID09PSAnb2NpJykge1xuICAgICAgICAvLyBPQ0kgbmF0aXZlIGJhY2tlbmRcbiAgICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLmJhY2tlbmQnLCB7XG4gICAgICAgICAgb2NpOiB7XG4gICAgICAgICAgICBidWNrZXQ6IGNvbmZpZy5iYWNrZW5kLmJ1Y2tldCxcbiAgICAgICAgICAgIG5hbWVzcGFjZTogY29uZmlnLm5hbWVzcGFjZSxcbiAgICAgICAgICAgIGtleTogY29uZmlnLmJhY2tlbmQua2V5IHx8IGAke2lkfS90ZXJyYWZvcm0udGZzdGF0ZWAsXG4gICAgICAgICAgICByZWdpb246IGNvbmZpZy5yZWdpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5iYWNrZW5kLnR5cGUgPT09ICdodHRwJykge1xuICAgICAgICAvLyBIVFRQIGJhY2tlbmQgKGZvciBPQ0kgT2JqZWN0IFN0b3JhZ2UgdmlhIFJFU1QgQVBJKVxuICAgICAgICBjb25zdCBodHRwQmFja2VuZDogYW55ID0ge1xuICAgICAgICAgIGFkZHJlc3M6IGNvbmZpZy5iYWNrZW5kLmFkZHJlc3MsXG4gICAgICAgICAgdXBkYXRlX21ldGhvZDogY29uZmlnLmJhY2tlbmQudXBkYXRlTWV0aG9kIHx8ICdQVVQnLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoY29uZmlnLmJhY2tlbmQubG9ja0FkZHJlc3MpIHtcbiAgICAgICAgICBodHRwQmFja2VuZC5sb2NrX2FkZHJlc3MgPSBjb25maWcuYmFja2VuZC5sb2NrQWRkcmVzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLmJhY2tlbmQudW5sb2NrQWRkcmVzcykge1xuICAgICAgICAgIGh0dHBCYWNrZW5kLnVubG9ja19hZGRyZXNzID0gY29uZmlnLmJhY2tlbmQudW5sb2NrQWRkcmVzcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZE92ZXJyaWRlKCd0ZXJyYWZvcm0uYmFja2VuZCcsIHtcbiAgICAgICAgICBodHRwOiBodHRwQmFja2VuZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT0NJIFByb3ZpZGVyXG4gICAgbmV3IE9jaVByb3ZpZGVyKHRoaXMsICdvY2knLCB7XG4gICAgICByZWdpb246IGNvbmZpZy5yZWdpb24sXG4gICAgICB0ZW5hbmN5T2NpZDogY29uZmlnLnRlbmFuY3lJZCxcbiAgICB9KTtcblxuICAgIC8vIE9DSVIgQ29udGFpbmVyIFJlcG9zaXRvcnkgKHJvb3QgY29tcGFydG1lbnQgYWxsb3dlZCBpZiBleHBsaWNpdGx5IHNldClcbiAgICBjb25zdCBvY2lyQ29tcGFydG1lbnRJZCA9IGNvbmZpZy5vY2lyQ29tcGFydG1lbnRJZCB8fCBjb25maWcuY29tcGFydG1lbnRJZDtcbiAgICBjb25zdCBvY2lyUmVwb05hbWUgPSBjb25maWcub2NpclJlcG9zaXRvcnlOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUgfHwgJ29jaS1mdW5jdGlvbic7XG5cbiAgICBjb25zdCBvY2lyUmVwb3NpdG9yeSA9IG5ldyBBcnRpZmFjdHNDb250YWluZXJSZXBvc2l0b3J5KHRoaXMsICdPY2lyUmVwb3NpdG9yeScsIHtcbiAgICAgIGNvbXBhcnRtZW50SWQ6IG9jaXJDb21wYXJ0bWVudElkLFxuICAgICAgZGlzcGxheU5hbWU6IG9jaXJSZXBvTmFtZSxcbiAgICAgIGlzUHVibGljOiBmYWxzZSwgLy8gUHJpdmF0ZSByZXBvc2l0b3J5IGJ5IGRlZmF1bHRcbiAgICAgIGlzSW1tdXRhYmxlOiBmYWxzZSwgLy8gQWxsb3cgaW1hZ2UgdXBkYXRlc1xuICAgIH0pO1xuXG4gICAgY29uc3QgZG9ja2VyQ29udGV4dFBhdGggPSAoY29uZmlnLmRvY2tlckNvbnRleHRQYXRoIHx8IGNvbmZpZy5mdW5jdGlvbkphclBhdGgpPy50cmltKCk7XG4gICAgY29uc3QgY3JlYXRlRnVsbFN0YWNrID0gY29uZmlnLmZ1bmN0aW9uTmFtZSAmJiBkb2NrZXJDb250ZXh0UGF0aDtcblxuICAgIGlmIChjcmVhdGVGdWxsU3RhY2spIHtcbiAgICAgIGlmIChvY2lyQ29tcGFydG1lbnRJZC5pbmNsdWRlcygncm9vdCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnRnVsbCBzdGFjayAoRnVuY3Rpb24gKyBBUEkgR2F0ZXdheSkgcmVxdWlyZXMgYSBub24tcm9vdCBjb21wYXJ0bWVudCBmb3IgT0NJUi4gU2V0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIHRvIHlvdXIgaG9tZSBjb21wYXJ0bWVudCBPQ0lELidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZ1bmN0aW9uQ29kZVBhdGggPSBwYXRoLnJlc29sdmUoZG9ja2VyQ29udGV4dFBhdGghKTtcbiAgICAgIGNvbnN0IGltYWdlVGFnID0gY29uZmlnLmltYWdlVGFnIHx8ICdsYXRlc3QnO1xuICAgICAgY29uc3Qgb2NpclJlZ2lzdHJ5ID0gYCR7b2Npckhvc3RLZXkoY29uZmlnLnJlZ2lvbil9Lm9jaXIuaW9gO1xuICAgICAgY29uc3QgaW1hZ2VVcmwgPSBnZXRPY2lJbWFnZVVybChjb25maWcpO1xuICAgICAgY29uc3QgYXBwTmFtZSA9IGNvbmZpZy5mdW5jdGlvbkFwcE5hbWUgfHwgY29uZmlnLmZ1bmN0aW9uTmFtZSE7XG4gICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSBhcHBOYW1lO1xuXG4gICAgICB0aGlzLmFkZE92ZXJyaWRlKCd0ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzLm51bGwnLCB7XG4gICAgICAgIHNvdXJjZTogJ2hhc2hpY29ycC9udWxsJyxcbiAgICAgICAgdmVyc2lvbjogJ34+IDMuMCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGJ1aWxkQW5kUHVzaEltYWdlSWQgPSAnQnVpbGRBbmRQdXNoSW1hZ2UnO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke2J1aWxkQW5kUHVzaEltYWdlSWR9LmRlcGVuZHNfb25gLCBbXG4gICAgICAgICdvY2lfYXJ0aWZhY3RzX2NvbnRhaW5lcl9yZXBvc2l0b3J5Lk9jaXJSZXBvc2l0b3J5JyxcbiAgICAgIF0pO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke2J1aWxkQW5kUHVzaEltYWdlSWR9LnRyaWdnZXJzYCwge1xuICAgICAgICByZXBvX25hbWU6IG9jaXJSZXBvTmFtZSxcbiAgICAgICAgaW1hZ2VfdXJsOiBpbWFnZVVybCxcbiAgICAgICAgaW1hZ2VfdGFnOiBpbWFnZVRhZyxcbiAgICAgICAgaGFuZGxlcjogY29uZmlnLmhhbmRsZXIgfHwgJycsXG4gICAgICAgIHVzZV90aGluX2RvY2tlcmZpbGU6IGNvbmZpZy51c2VUaGluRG9ja2VyZmlsZSA9PT0gdHJ1ZSA/ICcxJyA6ICcwJyxcbiAgICAgICAgbmFtZXNwYWNlOiBjb25maWcubmFtZXNwYWNlLFxuICAgICAgICByZWdpb246IGNvbmZpZy5yZWdpb24sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlZ2lvblAgPSBjb25maWcucmVnaW9uO1xuICAgICAgY29uc3QgbmFtZXNwYWNlUCA9IGNvbmZpZy5uYW1lc3BhY2U7XG4gICAgICBjb25zdCBvY2lyVXNlciA9IHByb2Nlc3MuZW52Lk9DSV9PQ0lSX1VTRVJOQU1FIHx8ICdBVVRPX0RFVEVDVCc7XG4gICAgICBjb25zdCBsb2dpblNjcmlwdCA9IHByb2Nlc3MuZW52Lk9DSV9BVVRIX1RPS0VOXG4gICAgICAgID8gYGV4cG9ydCBPQ0lSX0FVVEhfVE9LRU49XCIke3Byb2Nlc3MuZW52Lk9DSV9BVVRIX1RPS0VOfVwiOyBPQ0lSX1VTRVI9XCIke29jaXJVc2VyfVwiOyBbIFwiJE9DSVJfVVNFUlwiID0gXCJBVVRPX0RFVEVDVFwiIF0gJiYgT0NJUl9VU0VSPVwiJHtuYW1lc3BhY2VQfS91c2VyXCI7IGVjaG8gXCIkT0NJUl9BVVRIX1RPS0VOXCIgfCBkb2NrZXIgbG9naW4gJHtvY2lyUmVnaXN0cnl9IC11IFwiJE9DSVJfVVNFUlwiIC0tcGFzc3dvcmQtc3RkaW4gfHwgZXhpdCAxYFxuICAgICAgICA6IGBvY2kgcmF3LXJlcXVlc3QgLS1yZWdpb24gJHtyZWdpb25QfSAtLWh0dHAtbWV0aG9kIEdFVCAtLXRhcmdldC11cmkgXCJodHRwczovLyR7b2NpclJlZ2lzdHJ5fS8yMDE4MDQxOS9kb2NrZXIvdG9rZW5cIiAyPi9kZXYvbnVsbCB8IChjb21tYW5kIC12IGpxID4vZGV2L251bGwgJiYganEgLXIgLmRhdGEudG9rZW4gfHwgZ3JlcCAtbyAnXCJ0b2tlblwiOlwiW15cIl0qXCInIHwgY3V0IC1kJ1wiJyAtZjQpIHwgZG9ja2VyIGxvZ2luIC11IEJFQVJFUl9UT0tFTiAtLXBhc3N3b3JkLXN0ZGluICR7b2NpclJlZ2lzdHJ5fSB8fCAoZWNobyBcIlNldCBPQ0lfQVVUSF9UT0tFTiBvciBjb25maWd1cmUgT0NJIENMSVwiID4mMjsgZXhpdCAxKWA7XG4gICAgICBjb25zdCBoYW5kbGVyID0gY29uZmlnLmhhbmRsZXIgfHwgJ2NvbS5leGFtcGxlLmZuLkhlbGxvRnVuY3Rpb246OmhhbmRsZVJlcXVlc3QnO1xuICAgICAgY29uc3QgdXNlVGhpbiA9IGNvbmZpZy51c2VUaGluRG9ja2VyZmlsZSA9PT0gdHJ1ZTtcbiAgICAgIGNvbnN0IGRvY2tlcmZpbGVDb250ZW50VGhpbiA9IGBGUk9NIGZucHJvamVjdC9mbi1qYXZhLWZkazpqcmUxNy0xLjEuNVxuV09SS0RJUiAvZnVuY3Rpb25cbkNPUFkgdGFyZ2V0LyouamFyIC9mdW5jdGlvbi9hcHAvXG5DTUQgW1wiJHtoYW5kbGVyLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKX1cIl1cbmA7XG4gICAgICBjb25zdCBkb2NrZXJmaWxlQ29udGVudEZ1bGwgPSBgRlJPTSBmbnByb2plY3QvZm4tamF2YS1mZGstYnVpbGQ6amRrMTctMS4xLjUgYXMgYnVpbGQtc3RhZ2VcbldPUktESVIgL2Z1bmN0aW9uXG5FTlYgTUFWRU5fT1BUUyAtRGh0dHAucHJveHlIb3N0PSAtRGh0dHAucHJveHlQb3J0PSAtRGh0dHBzLnByb3h5SG9zdD0gLURodHRwcy5wcm94eVBvcnQ9IC1EaHR0cC5ub25Qcm94eUhvc3RzPSAtRG1hdmVuLnJlcG8ubG9jYWw9L3Vzci9zaGFyZS9tYXZlbi9yZWYvcmVwb3NpdG9yeVxuQUREIHBvbS54bWwgL2Z1bmN0aW9uL3BvbS54bWxcblJVTiBbXCJtdm5cIiwgXCJwYWNrYWdlXCIsIFwiZGVwZW5kZW5jeTpjb3B5LWRlcGVuZGVuY2llc1wiLCBcIi1EaW5jbHVkZVNjb3BlPXJ1bnRpbWVcIiwgXCItRHNraXBUZXN0cz10cnVlXCIsIFwiLURtZGVwLnByZXBlbmRHcm91cElkPXRydWVcIiwgXCItRG91dHB1dERpcmVjdG9yeT10YXJnZXRcIiwgXCItLWZhaWwtbmV2ZXJcIl1cbkFERCBzcmMgL2Z1bmN0aW9uL3NyY1xuUlVOIFtcIm12blwiLCBcInBhY2thZ2VcIl1cbkZST00gZm5wcm9qZWN0L2ZuLWphdmEtZmRrOmpyZTE3LTEuMS41XG5XT1JLRElSIC9mdW5jdGlvblxuQ09QWSAtLWZyb209YnVpbGQtc3RhZ2UgL2Z1bmN0aW9uL3RhcmdldC8qLmphciAvZnVuY3Rpb24vYXBwL1xuQ01EIFtcIiR7aGFuZGxlci5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCJdXG5gO1xuICAgICAgY29uc3QgZG9ja2VyZmlsZUNvbnRlbnQgPSB1c2VUaGluID8gZG9ja2VyZmlsZUNvbnRlbnRUaGluIDogZG9ja2VyZmlsZUNvbnRlbnRGdWxsO1xuICAgICAgY29uc3QgZG9ja2VyaWdub3JlQ29udGVudCA9IGBub2RlX21vZHVsZXNcbi5naXRcbioubWRcbi5lbnZcbi5pZGVhXG4udnNjb2RlXG4qLmxvZ1xub2NpX2FwaWdhdGV3YXlfZGVwbG95bWVudC5qc29uXG5gO1xuICAgICAgY29uc3QgZG9ja2VyZmlsZUI2NCA9IEJ1ZmZlci5mcm9tKGRvY2tlcmZpbGVDb250ZW50LCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIGNvbnN0IGRvY2tlcmlnbm9yZUI2NCA9IEJ1ZmZlci5mcm9tKGRvY2tlcmlnbm9yZUNvbnRlbnQsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgLy8gR2VuZXJhdGUgRG9ja2VyZmlsZSBhbmQgLmRvY2tlcmlnbm9yZSBpbiBsb2NhbC1leGVjIG9ubHkgaWYgbWlzc2luZzsgaWYgdGhleSBleGlzdCB1c2UgYXMtaXMuIFRoZW4gbG9naW4sIGJ1aWxkLCBwdXNoLlxuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke2J1aWxkQW5kUHVzaEltYWdlSWR9LnByb3Zpc2lvbmVyYCwgW1xuICAgICAgICB7XG4gICAgICAgICAgJ2xvY2FsLWV4ZWMnOiB7XG4gICAgICAgICAgICBjb21tYW5kOiAnY2QgXCIkRlVOQ1RJT05fQ09ERV9QQVRIXCIgJiYgKFsgLWYgRG9ja2VyZmlsZSBdIHx8IChlY2hvIFwiJERPQ0tFUkZJTEVfQjY0XCIgfCBiYXNlNjQgLWQgPiBEb2NrZXJmaWxlKSkgJiYgKFsgLWYgLmRvY2tlcmlnbm9yZSBdIHx8IChlY2hvIFwiJERPQ0tFUklHTk9SRV9CNjRcIiB8IGJhc2U2NCAtZCA+IC5kb2NrZXJpZ25vcmUpKScsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgICAgICBGVU5DVElPTl9DT0RFX1BBVEg6IGZ1bmN0aW9uQ29kZVBhdGgsXG4gICAgICAgICAgICAgIERPQ0tFUkZJTEVfQjY0OiBkb2NrZXJmaWxlQjY0LFxuICAgICAgICAgICAgICBET0NLRVJJR05PUkVfQjY0OiBkb2NrZXJpZ25vcmVCNjQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgJ2xvY2FsLWV4ZWMnOiB7IGNvbW1hbmQ6IGxvZ2luU2NyaXB0LCBvbl9mYWlsdXJlOiAnY29udGludWUnIH0gfSxcbiAgICAgICAgeyAnbG9jYWwtZXhlYyc6IHsgY29tbWFuZDogYGNkIFwiJHtmdW5jdGlvbkNvZGVQYXRoLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKX1cIiAmJiBkb2NrZXIgYnVpbGQgLS1wbGF0Zm9ybSBsaW51eC9hbWQ2NCAtdCAke2ltYWdlVXJsfSAuYCB9IH0sXG4gICAgICAgIHsgJ2xvY2FsLWV4ZWMnOiB7IGNvbW1hbmQ6IGBkb2NrZXIgcHVzaCAke2ltYWdlVXJsfWAgfSB9LFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IHZjbiA9IG5ldyBDb3JlVmNuKHRoaXMsICdWY24nLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS12Y25gLFxuICAgICAgICBjaWRyQmxvY2tzOiBbJzEwLjAuMC4wLzE2J10sXG4gICAgICAgIGRuc0xhYmVsOiAnYXBwZm4nLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwdWJsaWNTdWJuZXQgPSBuZXcgQ29yZVN1Ym5ldCh0aGlzLCAnUHVibGljU3VibmV0Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHVibGljYCxcbiAgICAgICAgY2lkckJsb2NrOiAnMTAuMC4xLjAvMjQnLFxuICAgICAgICBkbnNMYWJlbDogJ3B1YmxpYycsXG4gICAgICAgIHByb2hpYml0UHVibGljSXBPblZuaWM6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcml2YXRlU3VibmV0ID0gbmV3IENvcmVTdWJuZXQodGhpcywgJ1ByaXZhdGVTdWJuZXQnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wcml2YXRlYCxcbiAgICAgICAgY2lkckJsb2NrOiAnMTAuMC4yLjAvMjQnLFxuICAgICAgICBkbnNMYWJlbDogJ3ByaXZhdGUnLFxuICAgICAgICBwcm9oaWJpdFB1YmxpY0lwT25WbmljOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHB1YmxpY1NsID0gbmV3IENvcmVTZWN1cml0eUxpc3QodGhpcywgJ1B1YmxpY1NlY3VyaXR5TGlzdCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXB1YmxpYy1zbGAsXG4gICAgICAgIGluZ3Jlc3NTZWN1cml0eVJ1bGVzOiBbXG4gICAgICAgICAgeyBwcm90b2NvbDogJzYnLCBzb3VyY2U6ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0hUVFAnLCB0Y3BPcHRpb25zOiB7IG1pbjogODAsIG1heDogODAgfSB9LFxuICAgICAgICAgIHsgcHJvdG9jb2w6ICc2Jywgc291cmNlOiAnMC4wLjAuMC8wJywgZGVzY3JpcHRpb246ICdIVFRQUycsIHRjcE9wdGlvbnM6IHsgbWluOiA0NDMsIG1heDogNDQzIH0gfSxcbiAgICAgICAgXSxcbiAgICAgICAgZWdyZXNzU2VjdXJpdHlSdWxlczogW3sgcHJvdG9jb2w6ICdhbGwnLCBkZXN0aW5hdGlvbjogJzAuMC4wLjAvMCcsIGRlc2NyaXB0aW9uOiAnQWxsJyB9XSxcbiAgICAgIH0pO1xuICAgICAgcHVibGljU3VibmV0LmFkZE92ZXJyaWRlKCdzZWN1cml0eV9saXN0X2lkcycsIFtwdWJsaWNTbC5pZF0pO1xuICAgICAgY29uc3QgcHJpdmF0ZVNsID0gbmV3IENvcmVTZWN1cml0eUxpc3QodGhpcywgJ1ByaXZhdGVTZWN1cml0eUxpc3QnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wcml2YXRlLXNsYCxcbiAgICAgICAgaW5ncmVzc1NlY3VyaXR5UnVsZXM6IFtcbiAgICAgICAgICB7IHByb3RvY29sOiAnNicsIHNvdXJjZTogJzEwLjAuMi4wLzI0JywgZGVzY3JpcHRpb246ICdQRycsIHRjcE9wdGlvbnM6IHsgbWluOiA1NDMyLCBtYXg6IDU0MzIgfSB9LFxuICAgICAgICBdLFxuICAgICAgICBlZ3Jlc3NTZWN1cml0eVJ1bGVzOiBbeyBwcm90b2NvbDogJ2FsbCcsIGRlc3RpbmF0aW9uOiAnMC4wLjAuMC8wJywgZGVzY3JpcHRpb246ICdBbGwnIH1dLFxuICAgICAgfSk7XG4gICAgICBwcml2YXRlU3VibmV0LmFkZE92ZXJyaWRlKCdzZWN1cml0eV9saXN0X2lkcycsIFtwcml2YXRlU2wuaWRdKTtcblxuICAgICAgY29uc3QgYWxsU2VydmljZXMgPSBuZXcgRGF0YU9jaUNvcmVTZXJ2aWNlcyh0aGlzLCAnQWxsU2VydmljZXMnLCB7fSk7XG4gICAgICBjb25zdCBzdmNHdyA9IG5ldyBDb3JlU2VydmljZUdhdGV3YXkodGhpcywgJ1NlcnZpY2VHYXRld2F5Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tc2d3YCxcbiAgICAgICAgc2VydmljZXM6IFt7IHNlcnZpY2VJZDogYWxsU2VydmljZXMuc2VydmljZXMuZ2V0KDApLmlkIH1dLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcml2UnQgPSBuZXcgQ29yZVJvdXRlVGFibGUodGhpcywgJ1ByaXZhdGVSb3V0ZVRhYmxlJywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHJpdmF0ZS1ydGAsXG4gICAgICAgIHJvdXRlUnVsZXM6IFtcbiAgICAgICAgICB7IG5ldHdvcmtFbnRpdHlJZDogc3ZjR3cuaWQsIGRlc3RpbmF0aW9uOiBhbGxTZXJ2aWNlcy5zZXJ2aWNlcy5nZXQoMCkuY2lkckJsb2NrLCBkZXN0aW5hdGlvblR5cGU6ICdTRVJWSUNFX0NJRFJfQkxPQ0snLCBkZXNjcmlwdGlvbjogJ09DSVInIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICAgIHByaXZhdGVTdWJuZXQuYWRkT3ZlcnJpZGUoJ3JvdXRlX3RhYmxlX2lkJywgcHJpdlJ0LmlkKTtcbiAgICAgIGNvbnN0IGlndyA9IG5ldyBDb3JlSW50ZXJuZXRHYXRld2F5KHRoaXMsICdJbnRlcm5ldEdhdGV3YXknLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1pZ3dgLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwdWJSdCA9IG5ldyBDb3JlUm91dGVUYWJsZSh0aGlzLCAnUHVibGljUm91dGVUYWJsZScsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXB1YmxpYy1ydGAsXG4gICAgICAgIHJvdXRlUnVsZXM6IFtcbiAgICAgICAgICB7IG5ldHdvcmtFbnRpdHlJZDogaWd3LmlkLCBkZXN0aW5hdGlvbjogJzAuMC4wLjAvMCcsIGRlc3RpbmF0aW9uVHlwZTogJ0NJRFJfQkxPQ0snLCBkZXNjcmlwdGlvbjogJ0ludGVybmV0JyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBwdWJsaWNTdWJuZXQuYWRkT3ZlcnJpZGUoJ3JvdXRlX3RhYmxlX2lkJywgcHViUnQuaWQpO1xuXG4gICAgICBjb25zdCBhcGlHYXRld2F5ID0gbmV3IEFwaWdhdGV3YXlHYXRld2F5KHRoaXMsICdBcGlHYXRld2F5Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgc3VibmV0SWQ6IHB1YmxpY1N1Ym5ldC5pZCxcbiAgICAgICAgZW5kcG9pbnRUeXBlOiAnUFVCTElDJyxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tYXBpLWdhdGV3YXlgLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBsb2dHcm91cCA9IG5ldyBMb2dnaW5nTG9nR3JvdXAodGhpcywgJ0xvZ0dyb3VwJywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGFwcE5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTG9nIGdyb3VwIGZvciAke2FwcE5hbWV9YCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZnVuY3Rpb25BcHAgPSBuZXcgRnVuY3Rpb25zQXBwbGljYXRpb24odGhpcywgJ0Z1bmN0aW9uQXBwJywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGFwcE5hbWUsXG4gICAgICAgIHN1Ym5ldElkczogW3ByaXZhdGVTdWJuZXQuaWRdLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBvY2lGdW5jdGlvbiA9IG5ldyBGdW5jdGlvbnNGdW5jdGlvbih0aGlzLCAnRnVuY3Rpb24nLCB7XG4gICAgICAgIGFwcGxpY2F0aW9uSWQ6IGZ1bmN0aW9uQXBwLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogY29uZmlnLmZ1bmN0aW9uTmFtZSEsXG4gICAgICAgIGltYWdlOiBpbWFnZVVybCxcbiAgICAgICAgbWVtb3J5SW5NYnM6IGNvbmZpZy5mdW5jdGlvbk1lbW9yeU1iID8/ICcyNTYnLFxuICAgICAgICB0aW1lb3V0SW5TZWNvbmRzOiBjb25maWcuZnVuY3Rpb25UaW1lb3V0U2Vjb25kcyA/PyAzMCxcbiAgICAgICAgLi4uKGNvbmZpZy5mdW5jdGlvbkNvbmZpZyAmJiBPYmplY3Qua2V5cyhjb25maWcuZnVuY3Rpb25Db25maWcpLmxlbmd0aCA+IDAgPyB7IGNvbmZpZzogY29uZmlnLmZ1bmN0aW9uQ29uZmlnIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICAgIG9jaUZ1bmN0aW9uLmFkZE92ZXJyaWRlKCdkZXBlbmRzX29uJywgW2BudWxsX3Jlc291cmNlLiR7YnVpbGRBbmRQdXNoSW1hZ2VJZH1gXSk7XG4gICAgICBjb25zdCBwYXRoUHJlZml4ID0gY29uZmlnLmFwaUd3UGF0aFByZWZpeCA/PyAnLyc7XG4gICAgICBsZXQgcm91dGVzOiBBcnJheTx7IHBhdGg6IHN0cmluZzsgbWV0aG9kczogc3RyaW5nW107IGJhY2tlbmQ6IHsgdHlwZTogc3RyaW5nOyBmdW5jdGlvbklkOiB0eXBlb2Ygb2NpRnVuY3Rpb24uaWQ7IHJlYWRUaW1lb3V0SW5TZWNvbmRzPzogbnVtYmVyIH0gfT47XG4gICAgICBpZiAoY29uZmlnLmFwaUd3RGVwbG95bWVudEpzb25QYXRoICYmIGZzLmV4aXN0c1N5bmMoY29uZmlnLmFwaUd3RGVwbG95bWVudEpzb25QYXRoKSkge1xuICAgICAgICBjb25zdCByYXcgPSBmcy5yZWFkRmlsZVN5bmMoY29uZmlnLmFwaUd3RGVwbG95bWVudEpzb25QYXRoLCAndXRmOCcpO1xuICAgICAgICBjb25zdCBzcGVjID0gSlNPTi5wYXJzZShyYXcpIGFzIHsgcm91dGVzPzogQXJyYXk8eyBwYXRoPzogc3RyaW5nOyBtZXRob2RzPzogc3RyaW5nW107IGJhY2tlbmQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PiB9O1xuICAgICAgICBjb25zdCByb3V0ZUxpc3QgPSBzcGVjPy5yb3V0ZXMgPz8gW107XG4gICAgICAgIHJvdXRlcyA9IHJvdXRlTGlzdC5tYXAoKHIpID0+IHtcbiAgICAgICAgICBjb25zdCBiID0gci5iYWNrZW5kID8/IHt9O1xuICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uSWRSYXcgPSAoYi5mdW5jdGlvbklkID8/IGIuZnVuY3Rpb25faWQpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBmdW5jdGlvbklkID0gdHlwZW9mIGZ1bmN0aW9uSWRSYXcgPT09ICdzdHJpbmcnICYmIGZ1bmN0aW9uSWRSYXcuaW5jbHVkZXMoJyR7ZnVuY3Rpb25faWR9JylcbiAgICAgICAgICAgID8gb2NpRnVuY3Rpb24uaWRcbiAgICAgICAgICAgIDogKGZ1bmN0aW9uSWRSYXcgPz8gb2NpRnVuY3Rpb24uaWQpO1xuICAgICAgICAgIGNvbnN0IHJlYWRUaW1lb3V0ID0gKGIucmVhZFRpbWVvdXRJblNlY29uZHMgPz8gYi5yZWFkX3RpbWVvdXRfaW5fc2Vjb25kcykgYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXRoOiByLnBhdGggPz8gJy97cGF0aCp9JyxcbiAgICAgICAgICAgIG1ldGhvZHM6IEFycmF5LmlzQXJyYXkoci5tZXRob2RzKSA/IHIubWV0aG9kcyA6IFsnR0VUJywgJ1BPU1QnLCAnT1BUSU9OUyddLFxuICAgICAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgICAgICB0eXBlOiAoYi50eXBlIGFzIHN0cmluZykgPz8gJ09SQUNMRV9GVU5DVElPTlNfQkFDS0VORCcsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uSWQsXG4gICAgICAgICAgICAgIC4uLihyZWFkVGltZW91dCAhPSBudWxsID8geyByZWFkVGltZW91dEluU2Vjb25kczogcmVhZFRpbWVvdXQgfSA6IHt9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByb3V0ZVBhdGggPSBjb25maWcuYXBpR3dSb3V0ZVBhdGggPz8gJy97cGF0aCp9JztcbiAgICAgICAgY29uc3QgbWV0aG9kcyA9IGNvbmZpZy5hcGlHd01ldGhvZHM/Lmxlbmd0aCA/IGNvbmZpZy5hcGlHd01ldGhvZHMgOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXTtcbiAgICAgICAgcm91dGVzID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBhdGg6IHJvdXRlUGF0aCxcbiAgICAgICAgICAgIG1ldGhvZHMsXG4gICAgICAgICAgICBiYWNrZW5kOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgICAgICBmdW5jdGlvbklkOiBvY2lGdW5jdGlvbi5pZCxcbiAgICAgICAgICAgICAgcmVhZFRpbWVvdXRJblNlY29uZHM6IGNvbmZpZy5mdW5jdGlvblRpbWVvdXRTZWNvbmRzID8/IDMwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBpRGVwbG95bWVudCA9IG5ldyBBcGlnYXRld2F5RGVwbG95bWVudCh0aGlzLCAnQXBpRGVwbG95bWVudCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIGdhdGV3YXlJZDogYXBpR2F0ZXdheS5pZCxcbiAgICAgICAgcGF0aFByZWZpeCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tZGVwbG95bWVudGAsXG4gICAgICAgIHNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICByb3V0ZXMsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGFwaURlcGxveW1lbnQubm9kZS5hZGREZXBlbmRlbmN5KG9jaUZ1bmN0aW9uKTtcblxuICAgICAgLy8gRnVuY3Rpb25zIGV4ZWN1dGlvbiBsb2c6IFNFUlZJQ0UgbG9nIGZvciB0aGUgRnVuY3Rpb25zIGFwcGxpY2F0aW9uIChjYXRlZ29yeSBpbnZva2UpXG4gICAgICBjb25zdCBleGVjdXRpb25Mb2cgPSBuZXcgTG9nZ2luZ0xvZyh0aGlzLCAnRXhlY3V0aW9uTG9nJywge1xuICAgICAgICBkaXNwbGF5TmFtZTogYCR7YXBwTmFtZX0taW52b2tlYCxcbiAgICAgICAgbG9nR3JvdXBJZDogbG9nR3JvdXAuaWQsXG4gICAgICAgIGxvZ1R5cGU6ICdTRVJWSUNFJyxcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgY2F0ZWdvcnk6ICdpbnZva2UnLFxuICAgICAgICAgICAgLy8gQXNzb2NpYXRlIHRoaXMgc2VydmljZSBsb2cgd2l0aCB0aGUgRnVuY3Rpb25zIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICByZXNvdXJjZTogZnVuY3Rpb25BcHAuaWQsXG4gICAgICAgICAgICBzZXJ2aWNlOiAnZnVuY3Rpb25zJyxcbiAgICAgICAgICAgIHNvdXJjZVR5cGU6ICdPQ0lTRVJWSUNFJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBleGVjdXRpb25Mb2cubm9kZS5hZGREZXBlbmRlbmN5KGZ1bmN0aW9uQXBwKTtcblxuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnb2Npcl9yZXBvc2l0b3J5X25hbWUnLCB7IHZhbHVlOiBvY2lyUmVwb3NpdG9yeS5kaXNwbGF5TmFtZSwgZGVzY3JpcHRpb246ICdPQ0lSIHJlcG9zaXRvcnkgbmFtZScgfSk7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdhcGlfZ2F0ZXdheV9ob3N0JywgeyB2YWx1ZTogYXBpR2F0ZXdheS5ob3N0bmFtZSwgZGVzY3JpcHRpb246ICdBUEkgR2F0ZXdheSBob3N0bmFtZScgfSk7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdmdW5jdGlvbl9pbnZva2VfdXJsJywgeyB2YWx1ZTogYGh0dHBzOi8vJHthcGlHYXRld2F5Lmhvc3RuYW1lfWAsIGRlc2NyaXB0aW9uOiAnQmFzZSBVUkwgdG8gaW52b2tlIHRoZSBmdW5jdGlvbicgfSk7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdmdW5jdGlvbl9pZCcsIHsgdmFsdWU6IG9jaUZ1bmN0aW9uLmlkLCBkZXNjcmlwdGlvbjogJ09DSSBGdW5jdGlvbiBPQ0lEJyB9KTtcbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2xvZ19ncm91cF9pZCcsIHsgdmFsdWU6IGxvZ0dyb3VwLmlkLCBkZXNjcmlwdGlvbjogJ09DSSBMb2cgR3JvdXAgT0NJRCBmb3IgdGhlIGFwcGxpY2F0aW9uJyB9KTtcbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2V4ZWN1dGlvbl9sb2dfaWQnLCB7IHZhbHVlOiBleGVjdXRpb25Mb2cuaWQsIGRlc2NyaXB0aW9uOiAnT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9nIE9DSUQnIH0pO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIG9yYWNsZS9vY2kgKFRlcnJhZm9ybSBSZWdpc3RyeSkgc28gdGVycmFmb3JtIGluaXQgdXNlcyBpdCBvbiBPTDggYW5kIGVsc2V3aGVyZTsgbXVzdCBydW4gYWZ0ZXIgcHJvdmlkZXIgaXMgYWRkZWRcbiAgICB0aGlzLmFkZE92ZXJyaWRlKCd0ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzLm9jaScsIHtcbiAgICAgIHNvdXJjZTogJ29yYWNsZS9vY2knLFxuICAgICAgdmVyc2lvbjogJz49IDUuMC4wLCA8IDYuMC4wJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
package/lib/oci-stack.ts CHANGED
@@ -174,6 +174,7 @@ CMD ["${handler.replace(/"/g, '\\"')}"]
174
174
  .idea
175
175
  .vscode
176
176
  *.log
177
+ oci_apigateway_deployment.json
177
178
  `;
178
179
  const dockerfileB64 = Buffer.from(dockerfileContent, 'utf8').toString('base64');
179
180
  const dockerignoreB64 = Buffer.from(dockerignoreContent, 'utf8').toString('base64');
@@ -282,20 +283,6 @@ CMD ["${handler.replace(/"/g, '\\"')}"]
282
283
  displayName: appName,
283
284
  description: `Log group for ${appName}`,
284
285
  });
285
- const executionLog = new LoggingLog(this, 'ExecutionLog', {
286
- displayName: `${appName}-execution`,
287
- logGroupId: logGroup.id,
288
- logType: 'SERVICE',
289
- configuration: {
290
- compartmentId: config.compartmentId,
291
- source: {
292
- category: 'execution',
293
- resource: 'apigateway',
294
- service: 'apigateway',
295
- sourceType: 'OCISERVICE',
296
- },
297
- },
298
- });
299
286
  const functionApp = new FunctionsApplication(this, 'FunctionApp', {
300
287
  compartmentId: config.compartmentId,
301
288
  displayName: appName,
@@ -355,20 +342,34 @@ CMD ["${handler.replace(/"/g, '\\"')}"]
355
342
  displayName: `${resourceName}-deployment`,
356
343
  specification: {
357
344
  routes,
358
- loggingPolicies: {
359
- executionLog: { isEnabled: true, logLevel: 'INFO' },
360
- },
361
345
  },
362
346
  });
363
347
  apiDeployment.node.addDependency(ociFunction);
364
- apiDeployment.node.addDependency(executionLog);
348
+
349
+ // Functions execution log: SERVICE log for the Functions application (category invoke)
350
+ const executionLog = new LoggingLog(this, 'ExecutionLog', {
351
+ displayName: `${appName}-invoke`,
352
+ logGroupId: logGroup.id,
353
+ logType: 'SERVICE',
354
+ configuration: {
355
+ compartmentId: config.compartmentId,
356
+ source: {
357
+ category: 'invoke',
358
+ // Associate this service log with the Functions application
359
+ resource: functionApp.id,
360
+ service: 'functions',
361
+ sourceType: 'OCISERVICE',
362
+ },
363
+ },
364
+ });
365
+ executionLog.node.addDependency(functionApp);
365
366
 
366
367
  new TerraformOutput(this, 'ocir_repository_name', { value: ocirRepository.displayName, description: 'OCIR repository name' });
367
368
  new TerraformOutput(this, 'api_gateway_host', { value: apiGateway.hostname, description: 'API Gateway hostname' });
368
369
  new TerraformOutput(this, 'function_invoke_url', { value: `https://${apiGateway.hostname}`, description: 'Base URL to invoke the function' });
369
370
  new TerraformOutput(this, 'function_id', { value: ociFunction.id, description: 'OCI Function OCID' });
370
371
  new TerraformOutput(this, 'log_group_id', { value: logGroup.id, description: 'OCI Log Group OCID for the application' });
371
- new TerraformOutput(this, 'execution_log_id', { value: executionLog.id, description: 'OCI Execution Log OCID for API Gateway' });
372
+ new TerraformOutput(this, 'execution_log_id', { value: executionLog.id, description: 'OCI Functions execution log OCID' });
372
373
  }
373
374
 
374
375
  // Force oracle/oci (Terraform Registry) so terraform init uses it on OL8 and elsewhere; must run after provider is added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oci-cdk-test",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "OCI CDK stack for OCI Functions, API Gateway, and related infrastructure",
5
5
  "main": "lib/index.js",
6
6
  "bin": {