@cdklabs/cdk-appmod-catalog-blueprints 1.17.0 → 1.17.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.
Files changed (52) hide show
  1. package/.jsii +5 -5
  2. package/lib/document-processing/adapter/queued-s3-adapter.js +39 -5
  3. package/lib/document-processing/agentic-document-processing.js +6 -4
  4. package/lib/document-processing/base-document-processing.js +16 -4
  5. package/lib/document-processing/bedrock-document-processing.js +109 -66
  6. package/lib/document-processing/default-document-processing-config.js +3 -5
  7. package/lib/document-processing/localstack-agentic-document-processing.js +38 -5
  8. package/lib/document-processing/localstack-bedrock-document-processing.js +36 -5
  9. package/lib/document-processing/tests/base-document-processing-nag.test.js +3 -1
  10. package/lib/document-processing/tests/base-document-processing-schema.test.js +6 -1
  11. package/lib/document-processing/tests/base-document-processing.test.js +12 -1
  12. package/lib/document-processing/tests/localstack-agentic-document-processing.test.js +35 -2
  13. package/lib/document-processing/tests/localstack-document-processing.test.js +35 -2
  14. package/lib/document-processing/tests/queued-s3-adapter-nag.test.js +3 -1
  15. package/lib/document-processing/tests/queued-s3-adapter.test.js +3 -1
  16. package/lib/framework/agents/base-agent.js +31 -4
  17. package/lib/framework/agents/batch-agent.js +37 -5
  18. package/lib/framework/agents/default-agent-config.js +3 -5
  19. package/lib/framework/agents/interactive-agent.js +115 -23
  20. package/lib/framework/agents/knowledge-base/base-knowledge-base.js +30 -4
  21. package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +81 -5
  22. package/lib/framework/agents/localstack-batch-agent.js +36 -5
  23. package/lib/framework/agents/tests/agent-knowledge-base-nag.test.js +35 -2
  24. package/lib/framework/bedrock/bedrock.js +2 -4
  25. package/lib/framework/custom-resource/default-runtimes.js +20 -22
  26. package/lib/framework/foundation/access-log.js +50 -7
  27. package/lib/framework/foundation/eventbridge-broker.js +5 -4
  28. package/lib/framework/foundation/network.js +4 -4
  29. package/lib/framework/localstack/localstack-config.js +3 -5
  30. package/lib/framework/tests/base-agent-knowledge-base.test.js +35 -2
  31. package/lib/framework/tests/batch-agent.test.js +35 -2
  32. package/lib/framework/tests/framework-nag.test.js +35 -2
  33. package/lib/framework/tests/interactive-agent-nag.test.js +35 -2
  34. package/lib/framework/tests/interactive-agent.test.js +35 -2
  35. package/lib/framework/tests/localstack-batch-agent.test.js +35 -2
  36. package/lib/utilities/data-loader.js +50 -5
  37. package/lib/utilities/lambda-iam-utils.js +38 -7
  38. package/lib/utilities/lambda_layers/data-masking/layer-construct.js +40 -3
  39. package/lib/utilities/observability/bedrock-observability.js +38 -2
  40. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +3 -4
  41. package/lib/utilities/observability/cloudwatch-transaction-search.js +36 -5
  42. package/lib/utilities/observability/default-observability-config.js +6 -8
  43. package/lib/utilities/observability/lambda-observability-property-injector.js +4 -4
  44. package/lib/utilities/observability/log-group-data-protection-utils.js +2 -4
  45. package/lib/utilities/observability/observability.js +47 -6
  46. package/lib/utilities/observability/powertools-config.js +2 -4
  47. package/lib/utilities/observability/state-machine-observability-property-injector.js +4 -4
  48. package/lib/webapp/frontend-construct.js +46 -5
  49. package/lib/webapp/tests/frontend-construct-nag.test.js +36 -3
  50. package/lib/webapp/tests/frontend-construct.test.js +36 -3
  51. package/package.json +60 -61
  52. package/lib/tsconfig.tsbuildinfo +0 -1
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.DefaultDocumentProcessingConfig = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
5
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
6
  // SPDX-License-Identifier: Apache-2.0
8
7
  class DefaultDocumentProcessingConfig {
8
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultDocumentProcessingConfig", version: "1.17.2" };
9
+ static DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = 'document-processing';
9
10
  }
10
11
  exports.DefaultDocumentProcessingConfig = DefaultDocumentProcessingConfig;
11
- _a = JSII_RTTI_SYMBOL_1;
12
- DefaultDocumentProcessingConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultDocumentProcessingConfig", version: "1.17.0" };
13
- DefaultDocumentProcessingConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = 'document-processing';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kb2N1bWVudC1wcm9jZXNzaW5nLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3VzZS1jYXNlcy9kb2N1bWVudC1wcm9jZXNzaW5nL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLE1BQWEsK0JBQStCOztBQUE1QywwRUFFQzs7O0FBRHdCLHFFQUFxQyxHQUFHLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZyB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9PQlNFUlZBQklMSVRZX01FVFJJQ19TVkNfTkFNRSA9ICdkb2N1bWVudC1wcm9jZXNzaW5nJztcbn0iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kb2N1bWVudC1wcm9jZXNzaW5nLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3VzZS1jYXNlcy9kb2N1bWVudC1wcm9jZXNzaW5nL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7QUFFdEMsTUFBYSwrQkFBK0I7O0lBQ25DLE1BQU0sQ0FBVSxxQ0FBcUMsR0FBRyxxQkFBcUIsQ0FBQzs7QUFEdkYsMEVBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCBjbGFzcyBEZWZhdWx0RG9jdW1lbnRQcm9jZXNzaW5nQ29uZmlnIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX09CU0VSVkFCSUxJVFlfTUVUUklDX1NWQ19OQU1FID0gJ2RvY3VtZW50LXByb2Nlc3NpbmcnO1xufSJdfQ==
@@ -1,15 +1,50 @@
1
1
  "use strict";
2
- var _a;
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
3
35
  Object.defineProperty(exports, "__esModule", { value: true });
4
36
  exports.LocalStackAgenticDocumentProcessing = void 0;
5
37
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const path = require("path");
38
+ const path = __importStar(require("path"));
7
39
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
8
40
  const aws_stepfunctions_tasks_1 = require("aws-cdk-lib/aws-stepfunctions-tasks");
9
41
  const agentic_document_processing_1 = require("./agentic-document-processing");
10
42
  const localstack_batch_agent_1 = require("../framework/agents/localstack-batch-agent");
11
43
  const localstack_1 = require("../framework/localstack");
12
44
  class LocalStackAgenticDocumentProcessing extends agentic_document_processing_1.AgenticDocumentProcessing {
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LocalStackAgenticDocumentProcessing", version: "1.17.2" };
46
+ _localStackBatchAgent;
47
+ _localStackProcessingStepCounter;
13
48
  constructor(scope, id, props) {
14
49
  super(scope, id, {
15
50
  ...props,
@@ -61,6 +96,4 @@ class LocalStackAgenticDocumentProcessing extends agentic_document_processing_1.
61
96
  }
62
97
  }
63
98
  exports.LocalStackAgenticDocumentProcessing = LocalStackAgenticDocumentProcessing;
64
- _a = JSII_RTTI_SYMBOL_1;
65
- LocalStackAgenticDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LocalStackAgenticDocumentProcessing", version: "1.17.0" };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdGFjay1hZ2VudGljLWRvY3VtZW50LXByb2Nlc3NpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi91c2UtY2FzZXMvZG9jdW1lbnQtcHJvY2Vzc2luZy9sb2NhbHN0YWNrLWFnZW50aWMtZG9jdW1lbnQtcHJvY2Vzc2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3Qix1REFBb0U7QUFDcEUsaUZBQW1FO0FBRW5FLCtFQUEwRztBQUUxRyx1RkFBa0Y7QUFDbEYsd0RBQWtHO0FBV2xHLE1BQWEsbUNBQW9DLFNBQVEsdURBQXlCO0lBSWhGLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBK0M7UUFDdkYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixHQUFHLEtBQUs7WUFDUix3QkFBd0IsRUFBRSxJQUFJO1NBQ0csQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFUyx5QkFBeUI7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFUyxjQUFjO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsOEJBQTBFLENBQUM7WUFDbkcsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMseUJBQXlCLENBQUM7WUFFbEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksNkNBQW9CLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFO2dCQUNyRixHQUFHLG9CQUFvQjtnQkFDdkIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO2FBQ2xDLENBQUMsQ0FBQztZQUVILE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2pGLEtBQUssTUFBTSxTQUFTLElBQUksdUJBQXVCLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RSxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLGtCQUFrQixJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUN6RSxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztRQUV4QyxPQUFPLElBQUksc0NBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3BDLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYztZQUN6RCxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLGNBQWMsRUFBRTtnQkFDZCxVQUFVLEVBQUUsa0JBQWtCO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFVBQXVDO1FBQ3hFLE1BQU0sYUFBYSxHQUFHLHVDQUEwQixDQUFDLG1CQUFtQixDQUFDO1lBQ25FLE9BQU8sRUFBRSxJQUFJO1lBQ2IsR0FBRyxVQUFVO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDeEMsSUFBSSxLQUFLLFlBQVkscUJBQWMsRUFBRSxDQUFDO2dCQUNwQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO29CQUN6RCxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs7QUE3REgsa0ZBOERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEZ1bmN0aW9uIGFzIExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBMYW1iZGFJbnZva2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEFnZW50aWNEb2N1bWVudFByb2Nlc3NpbmcsIEFnZW50aWNEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyB9IGZyb20gJy4vYWdlbnRpYy1kb2N1bWVudC1wcm9jZXNzaW5nJztcbmltcG9ydCB7IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIH0gZnJvbSAnLi9iYXNlLWRvY3VtZW50LXByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgTG9jYWxTdGFja0JhdGNoQWdlbnQgfSBmcm9tICcuLi9mcmFtZXdvcmsvYWdlbnRzL2xvY2Fsc3RhY2stYmF0Y2gtYWdlbnQnO1xuaW1wb3J0IHsgTG9jYWxTdGFja0VuZHBvaW50T3ZlcnJpZGVzLCBMb2NhbFN0YWNrSW50ZWdyYXRpb25VdGlscyB9IGZyb20gJy4uL2ZyYW1ld29yay9sb2NhbHN0YWNrJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFN0YWNrQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIGV4dGVuZHMgQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIHtcbiAgLyoqXG4gICAqIExvY2FsU3RhY2sgZW5kcG9pbnQgcm91dGluZyBjb25maWd1cmF0aW9uIGZvciBMYW1iZGEgcnVudGltZSBTREsgY2FsbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHsgZW5hYmxlZDogdHJ1ZSB9XG4gICAqL1xuICByZWFkb25seSBsb2NhbFN0YWNrPzogTG9jYWxTdGFja0VuZHBvaW50T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgY2xhc3MgTG9jYWxTdGFja0FnZW50aWNEb2N1bWVudFByb2Nlc3NpbmcgZXh0ZW5kcyBBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nIHtcbiAgcHJpdmF0ZSBfbG9jYWxTdGFja0JhdGNoQWdlbnQ/OiBMb2NhbFN0YWNrQmF0Y2hBZ2VudDtcbiAgcHJpdmF0ZSBfbG9jYWxTdGFja1Byb2Nlc3NpbmdTdGVwQ291bnRlcj86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTG9jYWxTdGFja0FnZW50aWNEb2N1bWVudFByb2Nlc3NpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBfc2tpcEJlZHJvY2tWcGNFbmRwb2ludHM6IHRydWUsXG4gICAgfSBhcyBBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMpO1xuICAgIHRoaXMuYXBwbHlMb2NhbFN0YWNrRW52aXJvbm1lbnQocHJvcHMubG9jYWxTdGFjayB8fCB7fSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZUJlZHJvY2tJbnZva2VFbnRyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2RlZmF1bHQtbG9jYWxzdGFjay1pbnZva2UnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB7XG4gICAgaWYgKCF0aGlzLl9sb2NhbFN0YWNrQmF0Y2hBZ2VudCkge1xuICAgICAgY29uc3QgYWdlbnRQcm9wcyA9IHRoaXMuYmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIGFzIExvY2FsU3RhY2tBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHM7XG4gICAgICBjb25zdCBwcm9jZXNzaW5nQWdlbnRQcm9wcyA9IGFnZW50UHJvcHMucHJvY2Vzc2luZ0FnZW50UGFyYW1ldGVycztcblxuICAgICAgdGhpcy5fbG9jYWxTdGFja0JhdGNoQWdlbnQgPSBuZXcgTG9jYWxTdGFja0JhdGNoQWdlbnQodGhpcywgJ0lEUExvY2FsU3RhY2tCYXRjaEFnZW50Jywge1xuICAgICAgICAuLi5wcm9jZXNzaW5nQWdlbnRQcm9wcyxcbiAgICAgICAgbG9jYWxTdGFjazogYWdlbnRQcm9wcy5sb2NhbFN0YWNrLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkYXB0ZXJQb2xpY3lTdGF0ZW1lbnRzID0gdGhpcy5pbmdyZXNzQWRhcHRlci5nZW5lcmF0ZUFkYXB0ZXJJQU1Qb2xpY2llcygpO1xuICAgICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWRhcHRlclBvbGljeVN0YXRlbWVudHMpIHtcbiAgICAgICAgdGhpcy5fbG9jYWxTdGFja0JhdGNoQWdlbnQuYWdlbnRSb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xvY2FsU3RhY2tQcm9jZXNzaW5nU3RlcENvdW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fbG9jYWxTdGFja1Byb2Nlc3NpbmdTdGVwQ291bnRlciA9IDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcElkID0gYFByb2Nlc3NpbmdTdGVwLSR7dGhpcy5fbG9jYWxTdGFja1Byb2Nlc3NpbmdTdGVwQ291bnRlcn1gO1xuICAgIHRoaXMuX2xvY2FsU3RhY2tQcm9jZXNzaW5nU3RlcENvdW50ZXIrKztcblxuICAgIHJldHVybiBuZXcgTGFtYmRhSW52b2tlKHRoaXMsIHN0ZXBJZCwge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuX2xvY2FsU3RhY2tCYXRjaEFnZW50LmFnZW50RnVuY3Rpb24hLFxuICAgICAgcmVzdWx0UGF0aDogJyQucHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICAncmVzdWx0LiQnOiAnJC5QYXlsb2FkLnJlc3VsdCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxvY2FsU3RhY2tFbnZpcm9ubWVudChsb2NhbFN0YWNrOiBMb2NhbFN0YWNrRW5kcG9pbnRPdmVycmlkZXMpOiB2b2lkIHtcbiAgICBjb25zdCBsb2NhbFN0YWNrRW52ID0gTG9jYWxTdGFja0ludGVncmF0aW9uVXRpbHMudG9MYW1iZGFFbnZpcm9ubWVudCh7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgLi4ubG9jYWxTdGFjayxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5ub2RlLmZpbmRBbGwoKSkge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgTGFtYmRhRnVuY3Rpb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobG9jYWxTdGFja0VudikpIHtcbiAgICAgICAgICBjaGlsZC5hZGRFbnZpcm9ubWVudChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdGFjay1hZ2VudGljLWRvY3VtZW50LXByb2Nlc3NpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi91c2UtY2FzZXMvZG9jdW1lbnQtcHJvY2Vzc2luZy9sb2NhbHN0YWNrLWFnZW50aWMtZG9jdW1lbnQtcHJvY2Vzc2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLHVEQUFvRTtBQUNwRSxpRkFBbUU7QUFFbkUsK0VBQTBHO0FBRTFHLHVGQUFrRjtBQUNsRix3REFBa0c7QUFXbEcsTUFBYSxtQ0FBb0MsU0FBUSx1REFBeUI7O0lBQ3hFLHFCQUFxQixDQUF3QjtJQUM3QyxnQ0FBZ0MsQ0FBVTtJQUVsRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStDO1FBQ3ZGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1Isd0JBQXdCLEVBQUUsSUFBSTtTQUNHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRVMseUJBQXlCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUscUNBQXFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRVMsY0FBYztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLDhCQUEwRSxDQUFDO1lBQ25HLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDLHlCQUF5QixDQUFDO1lBRWxFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLDZDQUFvQixDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtnQkFDckYsR0FBRyxvQkFBb0I7Z0JBQ3ZCLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTthQUNsQyxDQUFDLENBQUM7WUFFSCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNqRixLQUFLLE1BQU0sU0FBUyxJQUFJLHVCQUF1QixFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDekUsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFFeEMsT0FBTyxJQUFJLHNDQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUNwQyxjQUFjLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWM7WUFDekQsVUFBVSxFQUFFLG9CQUFvQjtZQUNoQyxjQUFjLEVBQUU7Z0JBQ2QsVUFBVSxFQUFFLGtCQUFrQjthQUMvQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxVQUF1QztRQUN4RSxNQUFNLGFBQWEsR0FBRyx1Q0FBMEIsQ0FBQyxtQkFBbUIsQ0FBQztZQUNuRSxPQUFPLEVBQUUsSUFBSTtZQUNiLEdBQUcsVUFBVTtTQUNkLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksS0FBSyxZQUFZLHFCQUFjLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDekQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBN0RILGtGQThEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTGFtYmRhSW52b2tlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nLCBBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgfSBmcm9tICcuL2FnZW50aWMtZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB9IGZyb20gJy4vYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nJztcbmltcG9ydCB7IExvY2FsU3RhY2tCYXRjaEFnZW50IH0gZnJvbSAnLi4vZnJhbWV3b3JrL2FnZW50cy9sb2NhbHN0YWNrLWJhdGNoLWFnZW50JztcbmltcG9ydCB7IExvY2FsU3RhY2tFbmRwb2ludE92ZXJyaWRlcywgTG9jYWxTdGFja0ludGVncmF0aW9uVXRpbHMgfSBmcm9tICcuLi9mcmFtZXdvcmsvbG9jYWxzdGFjayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxTdGFja0FnZW50aWNEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyBleHRlbmRzIEFnZW50aWNEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyB7XG4gIC8qKlxuICAgKiBMb2NhbFN0YWNrIGVuZHBvaW50IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgTGFtYmRhIHJ1bnRpbWUgU0RLIGNhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7IGVuYWJsZWQ6IHRydWUgfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWxTdGFjaz86IExvY2FsU3RhY2tFbmRwb2ludE92ZXJyaWRlcztcbn1cblxuZXhwb3J0IGNsYXNzIExvY2FsU3RhY2tBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nIGV4dGVuZHMgQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZyB7XG4gIHByaXZhdGUgX2xvY2FsU3RhY2tCYXRjaEFnZW50PzogTG9jYWxTdGFja0JhdGNoQWdlbnQ7XG4gIHByaXZhdGUgX2xvY2FsU3RhY2tQcm9jZXNzaW5nU3RlcENvdW50ZXI/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IExvY2FsU3RhY2tBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgX3NraXBCZWRyb2NrVnBjRW5kcG9pbnRzOiB0cnVlLFxuICAgIH0gYXMgQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzKTtcbiAgICB0aGlzLmFwcGx5TG9jYWxTdGFja0Vudmlyb25tZW50KHByb3BzLmxvY2FsU3RhY2sgfHwge30pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVCZWRyb2NrSW52b2tlRW50cnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJ3Jlc291cmNlcy9kZWZhdWx0LWxvY2Fsc3RhY2staW52b2tlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUge1xuICAgIGlmICghdGhpcy5fbG9jYWxTdGFja0JhdGNoQWdlbnQpIHtcbiAgICAgIGNvbnN0IGFnZW50UHJvcHMgPSB0aGlzLmJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyBhcyBMb2NhbFN0YWNrQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzO1xuICAgICAgY29uc3QgcHJvY2Vzc2luZ0FnZW50UHJvcHMgPSBhZ2VudFByb3BzLnByb2Nlc3NpbmdBZ2VudFBhcmFtZXRlcnM7XG5cbiAgICAgIHRoaXMuX2xvY2FsU3RhY2tCYXRjaEFnZW50ID0gbmV3IExvY2FsU3RhY2tCYXRjaEFnZW50KHRoaXMsICdJRFBMb2NhbFN0YWNrQmF0Y2hBZ2VudCcsIHtcbiAgICAgICAgLi4ucHJvY2Vzc2luZ0FnZW50UHJvcHMsXG4gICAgICAgIGxvY2FsU3RhY2s6IGFnZW50UHJvcHMubG9jYWxTdGFjayxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBhZGFwdGVyUG9saWN5U3RhdGVtZW50cyA9IHRoaXMuaW5ncmVzc0FkYXB0ZXIuZ2VuZXJhdGVBZGFwdGVySUFNUG9saWNpZXMoKTtcbiAgICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFkYXB0ZXJQb2xpY3lTdGF0ZW1lbnRzKSB7XG4gICAgICAgIHRoaXMuX2xvY2FsU3RhY2tCYXRjaEFnZW50LmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzdGF0ZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9sb2NhbFN0YWNrUHJvY2Vzc2luZ1N0ZXBDb3VudGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2xvY2FsU3RhY2tQcm9jZXNzaW5nU3RlcENvdW50ZXIgPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXBJZCA9IGBQcm9jZXNzaW5nU3RlcC0ke3RoaXMuX2xvY2FsU3RhY2tQcm9jZXNzaW5nU3RlcENvdW50ZXJ9YDtcbiAgICB0aGlzLl9sb2NhbFN0YWNrUHJvY2Vzc2luZ1N0ZXBDb3VudGVyKys7XG5cbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCBzdGVwSWQsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLl9sb2NhbFN0YWNrQmF0Y2hBZ2VudC5hZ2VudEZ1bmN0aW9uISxcbiAgICAgIHJlc3VsdFBhdGg6ICckLnByb2Nlc3NpbmdSZXN1bHQnLFxuICAgICAgcmVzdWx0U2VsZWN0b3I6IHtcbiAgICAgICAgJ3Jlc3VsdC4kJzogJyQuUGF5bG9hZC5yZXN1bHQnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMb2NhbFN0YWNrRW52aXJvbm1lbnQobG9jYWxTdGFjazogTG9jYWxTdGFja0VuZHBvaW50T3ZlcnJpZGVzKTogdm9pZCB7XG4gICAgY29uc3QgbG9jYWxTdGFja0VudiA9IExvY2FsU3RhY2tJbnRlZ3JhdGlvblV0aWxzLnRvTGFtYmRhRW52aXJvbm1lbnQoe1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIC4uLmxvY2FsU3RhY2ssXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMubm9kZS5maW5kQWxsKCkpIHtcbiAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIExhbWJkYUZ1bmN0aW9uKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGxvY2FsU3RhY2tFbnYpKSB7XG4gICAgICAgICAgY2hpbGQuYWRkRW52aXJvbm1lbnQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,13 +1,46 @@
1
1
  "use strict";
2
- var _a;
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
3
35
  Object.defineProperty(exports, "__esModule", { value: true });
4
36
  exports.LocalStackBedrockDocumentProcessing = void 0;
5
37
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const path = require("path");
38
+ const path = __importStar(require("path"));
7
39
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
8
40
  const bedrock_document_processing_1 = require("./bedrock-document-processing");
9
41
  const localstack_1 = require("../framework/localstack");
10
42
  class LocalStackBedrockDocumentProcessing extends bedrock_document_processing_1.BedrockDocumentProcessing {
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LocalStackBedrockDocumentProcessing", version: "1.17.2" };
11
44
  constructor(scope, id, props) {
12
45
  super(scope, id, {
13
46
  ...props,
@@ -33,6 +66,4 @@ class LocalStackBedrockDocumentProcessing extends bedrock_document_processing_1.
33
66
  }
34
67
  }
35
68
  exports.LocalStackBedrockDocumentProcessing = LocalStackBedrockDocumentProcessing;
36
- _a = JSII_RTTI_SYMBOL_1;
37
- LocalStackBedrockDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.LocalStackBedrockDocumentProcessing", version: "1.17.0" };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdGFjay1iZWRyb2NrLWRvY3VtZW50LXByb2Nlc3NpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi91c2UtY2FzZXMvZG9jdW1lbnQtcHJvY2Vzc2luZy9sb2NhbHN0YWNrLWJlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3Qix1REFBb0U7QUFFcEUsK0VBQTBHO0FBQzFHLHdEQUFrRztBQVdsRyxNQUFhLG1DQUFvQyxTQUFRLHVEQUF5QjtJQUNoRixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStDO1FBQ3ZGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1Isd0JBQXdCLEVBQUUsSUFBSTtTQUNHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFUyx5QkFBeUI7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxVQUF3QztRQUN6RSxNQUFNLGFBQWEsR0FBRyx1Q0FBMEIsQ0FBQyxtQkFBbUIsQ0FBQztZQUNuRSxPQUFPLEVBQUUsSUFBSTtZQUNiLEdBQUcsVUFBVTtTQUNkLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksS0FBSyxZQUFZLHFCQUFjLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDekQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBMUJILGtGQTJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nLCBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgfSBmcm9tICcuL2JlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBMb2NhbFN0YWNrRW5kcG9pbnRPdmVycmlkZXMsIExvY2FsU3RhY2tJbnRlZ3JhdGlvblV0aWxzIH0gZnJvbSAnLi4vZnJhbWV3b3JrL2xvY2Fsc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsU3RhY2tCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgZXh0ZW5kcyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMge1xuICAvKipcbiAgICogTG9jYWxTdGFjayBlbmRwb2ludCByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIExhbWJkYSBydW50aW1lIFNESyBjYWxscy5cbiAgICpcbiAgICogQGRlZmF1bHQgeyBlbmFibGVkOiB0cnVlIH1cbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsU3RhY2s/OiBMb2NhbFN0YWNrRW5kcG9pbnRPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2NhbFN0YWNrQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyBleHRlbmRzIEJlZHJvY2tEb2N1bWVudFByb2Nlc3Npbmcge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTG9jYWxTdGFja0JlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBfc2tpcEJlZHJvY2tWcGNFbmRwb2ludHM6IHRydWUsXG4gICAgfSBhcyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMpO1xuICAgIHRoaXMuYXBwbHlMb2NhbFN0YWNrRW52aXJvbm1lbnQocHJvcHMubG9jYWxTdGFjayk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZUJlZHJvY2tJbnZva2VFbnRyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2RlZmF1bHQtbG9jYWxzdGFjay1pbnZva2UnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMb2NhbFN0YWNrRW52aXJvbm1lbnQobG9jYWxTdGFjaz86IExvY2FsU3RhY2tFbmRwb2ludE92ZXJyaWRlcyk6IHZvaWQge1xuICAgIGNvbnN0IGxvY2FsU3RhY2tFbnYgPSBMb2NhbFN0YWNrSW50ZWdyYXRpb25VdGlscy50b0xhbWJkYUVudmlyb25tZW50KHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAuLi5sb2NhbFN0YWNrLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLm5vZGUuZmluZEFsbCgpKSB7XG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBMYW1iZGFGdW5jdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhsb2NhbFN0YWNrRW52KSkge1xuICAgICAgICAgIGNoaWxkLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxzdGFjay1iZWRyb2NrLWRvY3VtZW50LXByb2Nlc3NpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi91c2UtY2FzZXMvZG9jdW1lbnQtcHJvY2Vzc2luZy9sb2NhbHN0YWNrLWJlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLHVEQUFvRTtBQUVwRSwrRUFBMEc7QUFDMUcsd0RBQWtHO0FBV2xHLE1BQWEsbUNBQW9DLFNBQVEsdURBQXlCOztJQUNoRixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStDO1FBQ3ZGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsR0FBRyxLQUFLO1lBQ1Isd0JBQXdCLEVBQUUsSUFBSTtTQUNHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFUyx5QkFBeUI7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxVQUF3QztRQUN6RSxNQUFNLGFBQWEsR0FBRyx1Q0FBMEIsQ0FBQyxtQkFBbUIsQ0FBQztZQUNuRSxPQUFPLEVBQUUsSUFBSTtZQUNiLEdBQUcsVUFBVTtTQUNkLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksS0FBSyxZQUFZLHFCQUFjLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztvQkFDekQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBMUJILGtGQTJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBGdW5jdGlvbiBhcyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nLCBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgfSBmcm9tICcuL2JlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBMb2NhbFN0YWNrRW5kcG9pbnRPdmVycmlkZXMsIExvY2FsU3RhY2tJbnRlZ3JhdGlvblV0aWxzIH0gZnJvbSAnLi4vZnJhbWV3b3JrL2xvY2Fsc3RhY2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsU3RhY2tCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgZXh0ZW5kcyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMge1xuICAvKipcbiAgICogTG9jYWxTdGFjayBlbmRwb2ludCByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIExhbWJkYSBydW50aW1lIFNESyBjYWxscy5cbiAgICpcbiAgICogQGRlZmF1bHQgeyBlbmFibGVkOiB0cnVlIH1cbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsU3RhY2s/OiBMb2NhbFN0YWNrRW5kcG9pbnRPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2NhbFN0YWNrQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZyBleHRlbmRzIEJlZHJvY2tEb2N1bWVudFByb2Nlc3Npbmcge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTG9jYWxTdGFja0JlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBfc2tpcEJlZHJvY2tWcGNFbmRwb2ludHM6IHRydWUsXG4gICAgfSBhcyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMpO1xuICAgIHRoaXMuYXBwbHlMb2NhbFN0YWNrRW52aXJvbm1lbnQocHJvcHMubG9jYWxTdGFjayk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZUJlZHJvY2tJbnZva2VFbnRyeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2RlZmF1bHQtbG9jYWxzdGFjay1pbnZva2UnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMb2NhbFN0YWNrRW52aXJvbm1lbnQobG9jYWxTdGFjaz86IExvY2FsU3RhY2tFbmRwb2ludE92ZXJyaWRlcyk6IHZvaWQge1xuICAgIGNvbnN0IGxvY2FsU3RhY2tFbnYgPSBMb2NhbFN0YWNrSW50ZWdyYXRpb25VdGlscy50b0xhbWJkYUVudmlyb25tZW50KHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAuLi5sb2NhbFN0YWNrLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLm5vZGUuZmluZEFsbCgpKSB7XG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBMYW1iZGFGdW5jdGlvbikge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhsb2NhbFN0YWNrRW52KSkge1xuICAgICAgICAgIGNoaWxkLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -13,6 +13,8 @@ const adapter_1 = require("../adapter");
13
13
  const base_document_processing_1 = require("../base-document-processing");
14
14
  // Concrete test implementation of BaseDocumentProcessing for CDK Nag testing
15
15
  class TestDocumentProcessing extends base_document_processing_1.BaseDocumentProcessing {
16
+ classificationFn;
17
+ processingFn;
16
18
  constructor(scope, id, props) {
17
19
  super(scope, id, props);
18
20
  this.classificationFn = new aws_lambda_1.Function(this, 'ClassificationFn', {
@@ -165,4 +167,4 @@ test('No unsuppressed errors', () => {
165
167
  }
166
168
  expect(errors).toHaveLength(0);
167
169
  });
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLW5hZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvdGVzdHMvYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLW5hZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQTZDO0FBQzdDLHVEQUE0RDtBQUM1RCx1REFBaUU7QUFDakUsK0NBQTRDO0FBQzVDLGlGQUFtRTtBQUNuRSxxQ0FBOEQ7QUFDOUQsK0NBQTRDO0FBQzVDLHNGQUFrRjtBQUNsRiwyREFBMkQ7QUFDM0Qsd0NBQTZDO0FBQzdDLDBFQUFpRztBQUVqRyw2RUFBNkU7QUFDN0UsTUFBTSxzQkFBdUIsU0FBUSxpREFBc0I7SUFJekQsWUFBWSxLQUFVLEVBQUUsRUFBVSxFQUFFLEtBQVU7UUFDNUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDN0QsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsZUFBZTtZQUN4QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxVQUFVLENBQUMscUVBQXFFLENBQUM7U0FDN0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHFCQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNyRCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxpREFBaUQsQ0FBQztTQUN6RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsa0JBQWtCO1FBQzFCLE9BQU8sSUFBSSxzQ0FBWSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFB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QUMsR0FBRyxFQUFFLGtCQUFLLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQzFHLE1BQU0sTUFBTSxHQUFHLHdCQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsa0JBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFFdEcsaUNBQWlDO0FBQ2pDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDcEMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFFSCwrQkFBK0I7QUFDL0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrLCBBc3BlY3RzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIE1hdGNoIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBDb2RlLCBGdW5jdGlvbiwgUnVudGltZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IExhbWJkYUludm9rZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IEF3c1NvbHV0aW9uc0NoZWNrcywgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBBY2Nlc3NMb2cgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsnO1xuaW1wb3J0IHsgRXZlbnRicmlkZ2VCcm9rZXIgfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvZm91bmRhdGlvbi9ldmVudGJyaWRnZS1icm9rZXInO1xuaW1wb3J0IHsgY3JlYXRlVGVzdEFwcCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy90ZXN0LXV0aWxzJztcbmltcG9ydCB7IFF1ZXVlZFMzQWRhcHRlciB9IGZyb20gJy4uL2FkYXB0ZXInO1xuaW1wb3J0IHsgQmFzZURvY3VtZW50UHJvY2Vzc2luZywgRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfSBmcm9tICcuLi9iYXNlLWRvY3VtZW50LXByb2Nlc3NpbmcnO1xuXG4vLyBDb25jcmV0ZSB0ZXN0IGltcGxlbWVudGF0aW9uIG9mIEJhc2VEb2N1bWVudFByb2Nlc3NpbmcgZm9yIENESyBOYWcgdGVzdGluZ1xuY2xhc3MgVGVzdERvY3VtZW50UHJvY2Vzc2luZyBleHRlbmRzIEJhc2VEb2N1bWVudFByb2Nlc3Npbmcge1xuICBwcml2YXRlIGNsYXNzaWZpY2F0aW9uRm46IEZ1bmN0aW9uO1xuICBwcml2YXRlIHByb2Nlc3NpbmdGbjogRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGFueSwgaWQ6IHN0cmluZywgcHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5jbGFzc2lmaWNhdGlvbkZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdDbGFzc2lmaWNhdGlvbkZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgZG9jdW1lbnRDbGFzc2lmaWNhdGlvbjogXCJURVNUXCIgfSk7JyksXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Nlc3NpbmdGbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnUHJvY2Vzc2luZ0ZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgcmVzdWx0OiB7fSB9KTsnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGFzc2lmaWNhdGlvblN0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUge1xuICAgIHJldHVybiBuZXcgTGFtYmRhSW52b2tlKHRoaXMsICdNb2NrQ2xhc3NpZmljYXRpb24nLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5jbGFzc2lmaWNhdGlvbkZuLFxuICAgICAgcmVzdWx0UGF0aDogJyQuY2xhc3NpZmljYXRpb25SZXN1bHQnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCAnTW9ja1Byb2Nlc3NpbmcnLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5wcm9jZXNzaW5nRm4sXG4gICAgICByZXN1bHRQYXRoOiAnJC5wcm9jZXNzaW5nUmVzdWx0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbnJpY2htZW50U3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0UHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJlcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUHJvY2Vzc2luZ1dvcmtmbG93KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVN0YW5kYXJkUHJvY2Vzc2luZ1dvcmtmbG93KCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU3RhdGVNYWNoaW5lKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVN0YXRlTWFjaGluZUNyZWF0aW9uKCd0ZXN0LXN0YXRlLW1hY2hpbmUnKTtcbiAgfVxufVxuXG4vLyBDcmVhdGUgYXBwIGFuZCBzdGFja1xuY29uc3QgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJywge1xuICBlbnY6IHtcbiAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICB9LFxufSk7XG5cbi8vIENyZWF0ZSBhY2Nlc3MgbG9nIGJ1Y2tldFxuY29uc3QgYWNjZXNzTG9nID0gbmV3IEFjY2Vzc0xvZyhzdGFjaywgJ0FjY2Vzc0xvZycpO1xuXG4vLyBDcmVhdGUgUzMgYnVja2V0IHdpdGggcHJvcGVyIGNvbmZpZ3VyYXRpb25cbmNvbnN0IGJ1Y2tldCA9IG5ldyBCdWNrZXQoc3RhY2ssICdCYXNlRG9jdW1lbnRQcm9jZXNzaW5nQnVja2V0Jywge1xuICBzZXJ2ZXJBY2Nlc3NMb2dzQnVja2V0OiBhY2Nlc3NMb2cuYnVja2V0LFxuICBzZXJ2ZXJBY2Nlc3NMb2dzUHJlZml4OiBhY2Nlc3NMb2cuYnVja2V0UHJlZml4LFxuICBlbmZvcmNlU1NMOiB0cnVlLFxufSk7XG5cbi8vIENyZWF0ZSBFdmVudEJyaWRnZSBicm9rZXJcbmNvbnN0IGJyb2tlciA9IG5ldyBFdmVudGJyaWRnZUJyb2tlcihzdGFjaywgJ1Rlc3RCcm9rZXInLCB7XG4gIG5hbWU6ICd0ZXN0LWJyb2tlcicsXG4gIGV2ZW50U291cmNlOiAndGVzdC1zb3VyY2UnLFxufSk7XG5cbi8vIENyZWF0ZSBhZGFwdGVyIHdpdGggY3VzdG9tIGJ1Y2tldFxuY29uc3QgYWRhcHRlciA9IG5ldyBRdWV1ZWRTM0FkYXB0ZXIoe1xuICBidWNrZXQsXG59KTtcblxuLy8gQ3JlYXRlIHRoZSBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nIGNvbnN0cnVjdFxuY29uc3QgY29uc3RydWN0ID0gbmV3IFRlc3REb2N1bWVudFByb2Nlc3Npbmcoc3RhY2ssICdCYXNlRG9jdW1lbnRQcm9jZXNzaW5nJywge1xuICBpbmdyZXNzQWRhcHRlcjogYWRhcHRlcixcbiAgZXZlbnRicmlkZ2VCcm9rZXI6IGJyb2tlcixcbiAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogdHJ1ZSxcbn0pO1xuXG4vLyBDcmVhdGUgdGhlIHN0YXRlIG1hY2hpbmVcbmNvbnN0cnVjdC5jcmVhdGVTdGF0ZU1hY2hpbmUoKTtcblxuLy8gU3VwcHJlc3MgQ0RLLW1hbmFnZWQgQnVja2V0Tm90aWZpY2F0aW9uc0hhbmRsZXIgQVdTIG1hbmFnZWQgcG9saWN5XG5OYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnNCeVBhdGgoXG4gIHN0YWNrLFxuICAnL1Rlc3RTdGFjay9CdWNrZXROb3RpZmljYXRpb25zSGFuZGxlcjA1MGEwNTg3Yjc1NDQ1NDdiZjMyNWYwOTRhM2RiODM0L1JvbGUnLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICByZWFzb246ICdDREstbWFuYWdlZCBCdWNrZXROb3RpZmljYXRpb25zSGFuZGxlciByZXF1aXJlcyBBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUgZm9yIFMzIGV2ZW50IHByb2Nlc3NpbmcnLFxuICAgICAgYXBwbGllc1RvOiBbJ1BvbGljeTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnXSxcbiAgICB9LFxuICBdLFxuKTtcblxuLy8gU3VwcHJlc3MgUzMgYnVja2V0IHdpbGRjYXJkIHBlcm1pc3Npb25zIGZvciBMYW1iZGEgcm9sZXNcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgIHJlYXNvbjogJ0xhbWJkYSBmdW5jdGlvbnMgcmVxdWlyZSB3aWxkY2FyZCBhY2Nlc3MgdG8gUzMgYnVja2V0IG9iamVjdHMgZm9yIGRvY3VtZW50IHByb2Nlc3NpbmcnLFxuICAgICAgYXBwbGllc1RvOiBbJ1Jlc291cmNlOjo8QmFzZURvY3VtZW50UHJvY2Vzc2luZ0J1Y2tldEU4RTBGNkY1LkFybj4vKiddLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBTdXBwcmVzcyBTUVMgY29uc3VtZXIgTGFtYmRhIHdpbGRjYXJkIHBlcm1pc3Npb25zIGZvciBsb2cgc3RyZWFtc1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICBzdGFjayxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgcmVhc29uOiAnTGFtYmRhIGxvZyBzdHJlYW0gQVJOIGlzIG9ubHkga25vd24gYXQgcnVudGltZSwgd2lsZGNhcmQgcmVxdWlyZWQgZm9yIENsb3VkV2F0Y2ggTG9ncyBhY2Nlc3MnLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBTdXBwcmVzcyBTdGF0ZU1hY2hpbmVSb2xlIHdpbGRjYXJkIHBlcm1pc3Npb25zIGZvciBMYW1iZGEgaW52b2NhdGlvblxuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zQnlQYXRoKFxuICBzdGFjayxcbiAgJy9UZXN0U3RhY2svQmFzZURvY3VtZW50UHJvY2Vzc2luZy9TdGF0ZU1hY2hpbmVSb2xlL0RlZmF1bHRQb2xpY3knLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICByZWFzb246ICdTdGVwIEZ1bmN0aW9ucyByZXF1aXJlcyB3aWxkY2FyZCBwZXJtaXNzaW9ucyB0byBpbnZva2UgTGFtYmRhIGZ1bmN0aW9ucyB3aXRoIHZlcnNpb24tc3BlY2lmaWMgQVJOcycsXG4gICAgfSxcbiAgXSxcbik7XG5cbi8vIFN1cHByZXNzIExhbWJkYSBsb2cgZ3JvdXAgd2lsZGNhcmQgcGVybWlzc2lvbnNcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgIHJlYXNvbjogJ0xhbWJkYSBsb2cgc3RyZWFtIG5hbWVzIGFyZSBnZW5lcmF0ZWQgYXQgcnVudGltZSwgd2lsZGNhcmQgcmVxdWlyZWQgZm9yIENsb3VkV2F0Y2ggTG9ncyBhY2Nlc3MnLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBTdXBwcmVzcyBMYW1iZGEgYmFzaWMgZXhlY3V0aW9uIHJvbGVcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICAgIHJlYXNvbjogJ1Rlc3QgTGFtYmRhIGZ1bmN0aW9ucyB1c2UgQVdTIG1hbmFnZWQgcG9saWNpZXMgZm9yIGJhc2ljIGV4ZWN1dGlvbicsXG4gICAgICBhcHBsaWVzVG86IFsnUG9saWN5Ojphcm46PEFXUzo6UGFydGl0aW9uPjppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSddLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBTdXBwcmVzcyBMYW1iZGEgcnVudGltZSB2ZXJzaW9uIGZvciB0ZXN0IGZ1bmN0aW9uc1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICBzdGFjayxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUwxJyxcbiAgICAgIHJlYXNvbjogJ1Rlc3QgTGFtYmRhIGZ1bmN0aW9ucyB1c2UgTm9kZS5qcyAyMCB3aGljaCBpcyBhIHN1cHBvcnRlZCBydW50aW1lJyxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gU3VwcHJlc3MgS01TIGtleSByb3RhdGlvbiBmb3IgdGVzdCBlbmNyeXB0aW9uIGtleVxuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKFxuICBzdGFjayxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUtNUzUnLFxuICAgICAgcmVhc29uOiAnS01TIGtleSByb3RhdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gQmFzZURvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3QnLFxuICAgIH0sXG4gIF0sXG4gIHRydWUsXG4pO1xuXG4vLyBBcHBseSBDREsgTmFnIGNoZWNrc1xuQXNwZWN0cy5vZihhcHApLmFkZChuZXcgQXdzU29sdXRpb25zQ2hlY2tzKHsgdmVyYm9zZTogdHJ1ZSB9KSk7XG5cbi8vIFN5bnRoZXNpemUgdGhlIHN0YWNrIGFuZCBjaGVjayBmb3IgdW5zdXBwcmVzc2VkIHdhcm5pbmdzIGFuZCBlcnJvcnNcbmNvbnN0IHdhcm5pbmdzID0gQW5ub3RhdGlvbnMuZnJvbVN0YWNrKHN0YWNrKS5maW5kV2FybmluZygnKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcbmNvbnN0IGVycm9ycyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZEVycm9yKCcqJywgTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cCgnQXdzU29sdXRpb25zLS4qJykpO1xuXG4vLyBUZXN0OiBObyB1bnN1cHByZXNzZWQgd2FybmluZ3NcbnRlc3QoJ05vIHVuc3VwcHJlc3NlZCB3YXJuaW5ncycsICgpID0+IHtcbiAgaWYgKHdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZygnQ0RLIE5hZyBXYXJuaW5nczonLCBKU09OLnN0cmluZ2lmeSh3YXJuaW5ncywgbnVsbCwgMikpO1xuICB9XG4gIGV4cGVjdCh3YXJuaW5ncykudG9IYXZlTGVuZ3RoKDApO1xufSk7XG5cbi8vIFRlc3Q6IE5vIHVuc3VwcHJlc3NlZCBlcnJvcnNcbnRlc3QoJ05vIHVuc3VwcHJlc3NlZCBlcnJvcnMnLCAoKSA9PiB7XG4gIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKCdDREsgTmFnIEVycm9yczonLCBKU09OLnN0cmluZ2lmeShlcnJvcnMsIG51bGwsIDIpKTtcbiAgfVxuICBleHBlY3QoZXJyb3JzKS50b0hhdmVMZW5ndGgoMCk7XG59KTtcbiJdfQ==
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLW5hZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvdGVzdHMvYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLW5hZy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQTZDO0FBQzdDLHVEQUE0RDtBQUM1RCx1REFBaUU7QUFDakUsK0NBQTRDO0FBQzVDLGlGQUFtRTtBQUNuRSxxQ0FBOEQ7QUFDOUQsK0NBQTRDO0FBQzVDLHNGQUFrRjtBQUNsRiwyREFBMkQ7QUFDM0Qsd0NBQTZDO0FBQzdDLDBFQUFpRztBQUVqRyw2RUFBNkU7QUFDN0UsTUFBTSxzQkFBdUIsU0FBUSxpREFBc0I7SUFDakQsZ0JBQWdCLENBQVc7SUFDM0IsWUFBWSxDQUFXO0lBRS9CLFlBQVksS0FBVSxFQUFFLEVBQVUsRUFBRSxLQUFVO1FBQzVDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHFCQUFRLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQzdELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLHFFQUFxRSxDQUFDO1NBQzdGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxxQkFBUSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDckQsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsZUFBZTtZQUN4QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxVQUFVLENBQUMsaURBQWlELENBQUM7U0FDekUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGtCQUFrQjtRQUMxQixPQUFPLElB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QyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxrQkFBSyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUMxRyxNQUFNLE1BQU0sR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGtCQUFLLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBRXRHLGlDQUFpQztBQUNqQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDO0FBRUgsK0JBQStCO0FBQy9CLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgQXNwZWN0cyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEFubm90YXRpb25zLCBNYXRjaCB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHsgQ29kZSwgRnVuY3Rpb24sIFJ1bnRpbWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBMYW1iZGFJbnZva2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBBd3NTb2x1dGlvbnNDaGVja3MsIE5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ2Nkay1uYWcnO1xuaW1wb3J0IHsgQWNjZXNzTG9nIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrJztcbmltcG9ydCB7IEV2ZW50YnJpZGdlQnJva2VyIH0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL2ZvdW5kYXRpb24vZXZlbnRicmlkZ2UtYnJva2VyJztcbmltcG9ydCB7IGNyZWF0ZVRlc3RBcHAgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvdGVzdC11dGlscyc7XG5pbXBvcnQgeyBRdWV1ZWRTM0FkYXB0ZXIgfSBmcm9tICcuLi9hZGFwdGVyJztcbmltcG9ydCB7IEJhc2VEb2N1bWVudFByb2Nlc3NpbmcsIERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIH0gZnJvbSAnLi4vYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nJztcblxuLy8gQ29uY3JldGUgdGVzdCBpbXBsZW1lbnRhdGlvbiBvZiBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nIGZvciBDREsgTmFnIHRlc3RpbmdcbmNsYXNzIFRlc3REb2N1bWVudFByb2Nlc3NpbmcgZXh0ZW5kcyBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nIHtcbiAgcHJpdmF0ZSBjbGFzc2lmaWNhdGlvbkZuOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBwcm9jZXNzaW5nRm46IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBhbnksIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuY2xhc3NpZmljYXRpb25GbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnQ2xhc3NpZmljYXRpb25GbicsIHtcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoJ2V4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+ICh7IGRvY3VtZW50Q2xhc3NpZmljYXRpb246IFwiVEVTVFwiIH0pOycpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9jZXNzaW5nRm4gPSBuZXcgRnVuY3Rpb24odGhpcywgJ1Byb2Nlc3NpbmdGbicsIHtcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBDb2RlLmZyb21JbmxpbmUoJ2V4cG9ydHMuaGFuZGxlciA9IGFzeW5jICgpID0+ICh7IHJlc3VsdDoge30gfSk7JyksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xhc3NpZmljYXRpb25TdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCAnTW9ja0NsYXNzaWZpY2F0aW9uJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuY2xhc3NpZmljYXRpb25GbixcbiAgICAgIHJlc3VsdFBhdGg6ICckLmNsYXNzaWZpY2F0aW9uUmVzdWx0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGFJbnZva2UodGhpcywgJ01vY2tQcm9jZXNzaW5nJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMucHJvY2Vzc2luZ0ZuLFxuICAgICAgcmVzdWx0UGF0aDogJyQucHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW5yaWNobWVudFN0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcG9zdFByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByZXByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVByb2Nlc3NpbmdXb3JrZmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdygpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVN0YXRlTWFjaGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVTdGF0ZU1hY2hpbmVDcmVhdGlvbigndGVzdC1zdGF0ZS1tYWNoaW5lJyk7XG4gIH1cbn1cblxuLy8gQ3JlYXRlIGFwcCBhbmQgc3RhY2tcbmNvbnN0IGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbmNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycsIHtcbiAgZW52OiB7XG4gICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgfSxcbn0pO1xuXG4vLyBDcmVhdGUgYWNjZXNzIGxvZyBidWNrZXRcbmNvbnN0IGFjY2Vzc0xvZyA9IG5ldyBBY2Nlc3NMb2coc3RhY2ssICdBY2Nlc3NMb2cnKTtcblxuLy8gQ3JlYXRlIFMzIGJ1Y2tldCB3aXRoIHByb3BlciBjb25maWd1cmF0aW9uXG5jb25zdCBidWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnQmFzZURvY3VtZW50UHJvY2Vzc2luZ0J1Y2tldCcsIHtcbiAgc2VydmVyQWNjZXNzTG9nc0J1Y2tldDogYWNjZXNzTG9nLmJ1Y2tldCxcbiAgc2VydmVyQWNjZXNzTG9nc1ByZWZpeDogYWNjZXNzTG9nLmJ1Y2tldFByZWZpeCxcbiAgZW5mb3JjZVNTTDogdHJ1ZSxcbn0pO1xuXG4vLyBDcmVhdGUgRXZlbnRCcmlkZ2UgYnJva2VyXG5jb25zdCBicm9rZXIgPSBuZXcgRXZlbnRicmlkZ2VCcm9rZXIoc3RhY2ssICdUZXN0QnJva2VyJywge1xuICBuYW1lOiAndGVzdC1icm9rZXInLFxuICBldmVudFNvdXJjZTogJ3Rlc3Qtc291cmNlJyxcbn0pO1xuXG4vLyBDcmVhdGUgYWRhcHRlciB3aXRoIGN1c3RvbSBidWNrZXRcbmNvbnN0IGFkYXB0ZXIgPSBuZXcgUXVldWVkUzNBZGFwdGVyKHtcbiAgYnVja2V0LFxufSk7XG5cbi8vIENyZWF0ZSB0aGUgQmFzZURvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3RcbmNvbnN0IGNvbnN0cnVjdCA9IG5ldyBUZXN0RG9jdW1lbnRQcm9jZXNzaW5nKHN0YWNrLCAnQmFzZURvY3VtZW50UHJvY2Vzc2luZycsIHtcbiAgaW5ncmVzc0FkYXB0ZXI6IGFkYXB0ZXIsXG4gIGV2ZW50YnJpZGdlQnJva2VyOiBicm9rZXIsXG4gIGVuYWJsZU9ic2VydmFiaWxpdHk6IHRydWUsXG59KTtcblxuLy8gQ3JlYXRlIHRoZSBzdGF0ZSBtYWNoaW5lXG5jb25zdHJ1Y3QuY3JlYXRlU3RhdGVNYWNoaW5lKCk7XG5cbi8vIFN1cHByZXNzIENESy1tYW5hZ2VkIEJ1Y2tldE5vdGlmaWNhdGlvbnNIYW5kbGVyIEFXUyBtYW5hZ2VkIHBvbGljeVxuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zQnlQYXRoKFxuICBzdGFjayxcbiAgJy9UZXN0U3RhY2svQnVja2V0Tm90aWZpY2F0aW9uc0hhbmRsZXIwNTBhMDU4N2I3NTQ0NTQ3YmYzMjVmMDk0YTNkYjgzNC9Sb2xlJyxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTQnLFxuICAgICAgcmVhc29uOiAnQ0RLLW1hbmFnZWQgQnVja2V0Tm90aWZpY2F0aW9uc0hhbmRsZXIgcmVxdWlyZXMgQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlIGZvciBTMyBldmVudCBwcm9jZXNzaW5nJyxcbiAgICAgIGFwcGxpZXNUbzogWydQb2xpY3k6OmFybjo8QVdTOjpQYXJ0aXRpb24+OmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlJ10sXG4gICAgfSxcbiAgXSxcbik7XG5cbi8vIFN1cHByZXNzIFMzIGJ1Y2tldCB3aWxkY2FyZCBwZXJtaXNzaW9ucyBmb3IgTGFtYmRhIHJvbGVzXG5OYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gIHN0YWNrLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICByZWFzb246ICdMYW1iZGEgZnVuY3Rpb25zIHJlcXVpcmUgd2lsZGNhcmQgYWNjZXNzIHRvIFMzIGJ1Y2tldCBvYmplY3RzIGZvciBkb2N1bWVudCBwcm9jZXNzaW5nJyxcbiAgICAgIGFwcGxpZXNUbzogWydSZXNvdXJjZTo6PEJhc2VEb2N1bWVudFByb2Nlc3NpbmdCdWNrZXRFOEUwRjZGNS5Bcm4+LyonXSxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gU3VwcHJlc3MgU1FTIGNvbnN1bWVyIExhbWJkYSB3aWxkY2FyZCBwZXJtaXNzaW9ucyBmb3IgbG9nIHN0cmVhbXNcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JyxcbiAgICAgIHJlYXNvbjogJ0xhbWJkYSBsb2cgc3RyZWFtIEFSTiBpcyBvbmx5IGtub3duIGF0IHJ1bnRpbWUsIHdpbGRjYXJkIHJlcXVpcmVkIGZvciBDbG91ZFdhdGNoIExvZ3MgYWNjZXNzJyxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gU3VwcHJlc3MgU3RhdGVNYWNoaW5lUm9sZSB3aWxkY2FyZCBwZXJtaXNzaW9ucyBmb3IgTGFtYmRhIGludm9jYXRpb25cbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9uc0J5UGF0aChcbiAgc3RhY2ssXG4gICcvVGVzdFN0YWNrL0Jhc2VEb2N1bWVudFByb2Nlc3NpbmcvU3RhdGVNYWNoaW5lUm9sZS9EZWZhdWx0UG9saWN5JyxcbiAgW1xuICAgIHtcbiAgICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgICAgcmVhc29uOiAnU3RlcCBGdW5jdGlvbnMgcmVxdWlyZXMgd2lsZGNhcmQgcGVybWlzc2lvbnMgdG8gaW52b2tlIExhbWJkYSBmdW5jdGlvbnMgd2l0aCB2ZXJzaW9uLXNwZWNpZmljIEFSTnMnLFxuICAgIH0sXG4gIF0sXG4pO1xuXG4vLyBTdXBwcmVzcyBMYW1iZGEgbG9nIGdyb3VwIHdpbGRjYXJkIHBlcm1pc3Npb25zXG5OYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gIHN0YWNrLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsXG4gICAgICByZWFzb246ICdMYW1iZGEgbG9nIHN0cmVhbSBuYW1lcyBhcmUgZ2VuZXJhdGVkIGF0IHJ1bnRpbWUsIHdpbGRjYXJkIHJlcXVpcmVkIGZvciBDbG91ZFdhdGNoIExvZ3MgYWNjZXNzJyxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gU3VwcHJlc3MgTGFtYmRhIGJhc2ljIGV4ZWN1dGlvbiByb2xlXG5OYWdTdXBwcmVzc2lvbnMuYWRkUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gIHN0YWNrLFxuICBbXG4gICAge1xuICAgICAgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNCcsXG4gICAgICByZWFzb246ICdUZXN0IExhbWJkYSBmdW5jdGlvbnMgdXNlIEFXUyBtYW5hZ2VkIHBvbGljaWVzIGZvciBiYXNpYyBleGVjdXRpb24nLFxuICAgICAgYXBwbGllc1RvOiBbJ1BvbGljeTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnXSxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gU3VwcHJlc3MgTGFtYmRhIHJ1bnRpbWUgdmVyc2lvbiBmb3IgdGVzdCBmdW5jdGlvbnNcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgICByZWFzb246ICdUZXN0IExhbWJkYSBmdW5jdGlvbnMgdXNlIE5vZGUuanMgMjAgd2hpY2ggaXMgYSBzdXBwb3J0ZWQgcnVudGltZScsXG4gICAgfSxcbiAgXSxcbiAgdHJ1ZSxcbik7XG5cbi8vIFN1cHByZXNzIEtNUyBrZXkgcm90YXRpb24gZm9yIHRlc3QgZW5jcnlwdGlvbiBrZXlcbk5hZ1N1cHByZXNzaW9ucy5hZGRSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgc3RhY2ssXG4gIFtcbiAgICB7XG4gICAgICBpZDogJ0F3c1NvbHV0aW9ucy1LTVM1JyxcbiAgICAgIHJlYXNvbjogJ0tNUyBrZXkgcm90YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGluIEJhc2VEb2N1bWVudFByb2Nlc3NpbmcgY29uc3RydWN0JyxcbiAgICB9LFxuICBdLFxuICB0cnVlLFxuKTtcblxuLy8gQXBwbHkgQ0RLIE5hZyBjaGVja3NcbkFzcGVjdHMub2YoYXBwKS5hZGQobmV3IEF3c1NvbHV0aW9uc0NoZWNrcyh7IHZlcmJvc2U6IHRydWUgfSkpO1xuXG4vLyBTeW50aGVzaXplIHRoZSBzdGFjayBhbmQgY2hlY2sgZm9yIHVuc3VwcHJlc3NlZCB3YXJuaW5ncyBhbmQgZXJyb3JzXG5jb25zdCB3YXJuaW5ncyA9IEFubm90YXRpb25zLmZyb21TdGFjayhzdGFjaykuZmluZFdhcm5pbmcoJyonLCBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdBd3NTb2x1dGlvbnMtLionKSk7XG5jb25zdCBlcnJvcnMgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmZpbmRFcnJvcignKicsIE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ0F3c1NvbHV0aW9ucy0uKicpKTtcblxuLy8gVGVzdDogTm8gdW5zdXBwcmVzc2VkIHdhcm5pbmdzXG50ZXN0KCdObyB1bnN1cHByZXNzZWQgd2FybmluZ3MnLCAoKSA9PiB7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coJ0NESyBOYWcgV2FybmluZ3M6JywgSlNPTi5zdHJpbmdpZnkod2FybmluZ3MsIG51bGwsIDIpKTtcbiAgfVxuICBleHBlY3Qod2FybmluZ3MpLnRvSGF2ZUxlbmd0aCgwKTtcbn0pO1xuXG4vLyBUZXN0OiBObyB1bnN1cHByZXNzZWQgZXJyb3JzXG50ZXN0KCdObyB1bnN1cHByZXNzZWQgZXJyb3JzJywgKCkgPT4ge1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZygnQ0RLIE5hZyBFcnJvcnM6JywgSlNPTi5zdHJpbmdpZnkoZXJyb3JzLCBudWxsLCAyKSk7XG4gIH1cbiAgZXhwZWN0KGVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xufSk7XG4iXX0=
@@ -12,6 +12,8 @@ const base_document_processing_1 = require("../base-document-processing");
12
12
  * This simulates existing implementations that don't use any preprocessing
13
13
  */
14
14
  class TestDocumentProcessingWithoutPreprocessing extends base_document_processing_1.BaseDocumentProcessing {
15
+ classificationFn;
16
+ processingFn;
15
17
  constructor(scope, id, props) {
16
18
  super(scope, id, props);
17
19
  this.classificationFn = new aws_lambda_1.Function(this, 'ClassificationFn', {
@@ -61,6 +63,9 @@ class TestDocumentProcessingWithoutPreprocessing extends base_document_processin
61
63
  * (e.g., chunking metadata) without the base class knowing about them
62
64
  */
63
65
  class TestDocumentProcessingWithCustomMetadata extends base_document_processing_1.BaseDocumentProcessing {
66
+ preprocessingFn;
67
+ classificationFn;
68
+ processingFn;
64
69
  constructor(scope, id, props) {
65
70
  super(scope, id, props);
66
71
  this.preprocessingFn = new aws_lambda_1.Function(this, 'PreprocessingFn', {
@@ -334,4 +339,4 @@ describe('BaseDocumentProcessing - DynamoDB Schema Extension Mechanism', () => {
334
339
  });
335
340
  });
336
341
  });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLXNjaGVtYS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvdGVzdHMvYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLXNjaGVtYS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQXlDO0FBQ3pDLHVEQUFrRDtBQUNsRCx1REFBaUU7QUFDakUscUVBQXlEO0FBQ3pELGlGQUF5RjtBQUN6RiwyREFBMkQ7QUFDM0QsMEVBQWlHO0FBRWpHOzs7R0FHRztBQUNILE1BQU0sMENBQTJDLFNBQVEsaURBQXNCO0lBSTdFLFlBQVksS0FBVSxFQUFFLEVBQVUsRUFBRSxLQUFVO1FBQzVDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLHFCQUFRLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQzdELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLHFFQUFxRSxDQUFDO1NBQzdGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxxQkFBUSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDckQsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsZUFBZTtZQUN4QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxVQUFVLENBQUMsaURBQWlELENBQUM7U0FDekUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGlCQUFpQjtRQUN6Qix5Q0FBeUM7UUFDekMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELGdFQUFnRTtJQUV0RCxrQkFBa0I7UUFDMUIsT0FBTyxJQUFJLHNDQUFZLENB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LENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDdEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQzFELENBQUM7WUFFRixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV6QyxvREFBb0Q7WUFDcEQsTUFBTSxVQUFVLEdBQUksa0JBQTBCLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7WUFDbkYsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQ3BELElBQUksQ0FBQyxNQUFNLElBQUksQ0FDYixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxNQUFNLEtBQUsscUJBQXFCLENBQ3RDLENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IENvZGUsIEZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBKc29uUGF0aCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IER5bmFtb0F0dHJpYnV0ZVZhbHVlLCBMYW1iZGFJbnZva2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBjcmVhdGVUZXN0QXBwIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHsgQmFzZURvY3VtZW50UHJvY2Vzc2luZywgRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfSBmcm9tICcuLi9iYXNlLWRvY3VtZW50LXByb2Nlc3NpbmcnO1xuXG4vKipcbiAqIFRlc3QgaW1wbGVtZW50YXRpb24gV0lUSE9VVCBwcmVwcm9jZXNzaW5nIChiYWNrd2FyZCBjb21wYXRpYmxlKVxuICogVGhpcyBzaW11bGF0ZXMgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3QgdXNlIGFueSBwcmVwcm9jZXNzaW5nXG4gKi9cbmNsYXNzIFRlc3REb2N1bWVudFByb2Nlc3NpbmdXaXRob3V0UHJlcHJvY2Vzc2luZyBleHRlbmRzIEJhc2VEb2N1bWVudFByb2Nlc3Npbmcge1xuICBwcml2YXRlIGNsYXNzaWZpY2F0aW9uRm46IEZ1bmN0aW9uO1xuICBwcml2YXRlIHByb2Nlc3NpbmdGbjogRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGFueSwgaWQ6IHN0cmluZywgcHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5jbGFzc2lmaWNhdGlvbkZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdDbGFzc2lmaWNhdGlvbkZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgZG9jdW1lbnRDbGFzc2lmaWNhdGlvbjogXCJURVNUXCIgfSk7JyksXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Nlc3NpbmdGbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnUHJvY2Vzc2luZ0ZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgcmVzdWx0OiB7fSB9KTsnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVwcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gTm8gcHJlcHJvY2Vzc2luZyAtIGJhY2t3YXJkIGNvbXBhdGlibGVcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gTm8gb3ZlcnJpZGUgb2YgcHJlcHJvY2Vzc2luZ01ldGFkYXRhKCkgLSB1c2VzIGRlZmF1bHQgKGVtcHR5KVxuXG4gIHByb3RlY3RlZCBjbGFzc2lmaWNhdGlvblN0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUge1xuICAgIHJldHVybiBuZXcgTGFtYmRhSW52b2tlKHRoaXMsICdNb2NrQ2xhc3NpZmljYXRpb24nLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5jbGFzc2lmaWNhdGlvbkZuLFxuICAgICAgcmVzdWx0UGF0aDogJyQuY2xhc3NpZmljYXRpb25SZXN1bHQnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCAnTW9ja1Byb2Nlc3NpbmcnLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5wcm9jZXNzaW5nRm4sXG4gICAgICByZXN1bHRQYXRoOiAnJC5wcm9jZXNzaW5nUmVzdWx0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbnJpY2htZW50U3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0UHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUHJvY2Vzc2luZ1dvcmtmbG93KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVN0YW5kYXJkUHJvY2Vzc2luZ1dvcmtmbG93KCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU3RhdGVNYWNoaW5lKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVN0YXRlTWFjaGluZUNyZWF0aW9uKCd0ZXN0LXN0YXRlLW1hY2hpbmUtbm8tcHJlcHJvY2Vzc2luZycpO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCBpbXBsZW1lbnRhdGlvbiBXSVRIIHByZXByb2Nlc3NpbmcgYW5kIGN1c3RvbSBtZXRhZGF0YVxuICogVGhpcyBzaW11bGF0ZXMgaW1wbGVtZW50YXRpb25zIHRoYXQgYWRkIHRoZWlyIG93biBwcmVwcm9jZXNzaW5nLXNwZWNpZmljIGZpZWxkc1xuICogKGUuZy4sIGNodW5raW5nIG1ldGFkYXRhKSB3aXRob3V0IHRoZSBiYXNlIGNsYXNzIGtub3dpbmcgYWJvdXQgdGhlbVxuICovXG5jbGFzcyBUZXN0RG9jdW1lbnRQcm9jZXNzaW5nV2l0aEN1c3RvbU1ldGFkYXRhIGV4dGVuZHMgQmFzZURvY3VtZW50UHJvY2Vzc2luZyB7XG4gIHByaXZhdGUgcHJlcHJvY2Vzc2luZ0ZuOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBjbGFzc2lmaWNhdGlvbkZuOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBwcm9jZXNzaW5nRm46IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBhbnksIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJlcHJvY2Vzc2luZ0ZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdQcmVwcm9jZXNzaW5nRm4nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKGBcbiAgICAgICAgZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICBjdXN0b21GaWVsZDE6ICd2YWx1ZTEnLFxuICAgICAgICAgIGN1c3RvbUZpZWxkMjogeyBuZXN0ZWQ6ICdkYXRhJyB9LFxuICAgICAgICAgIGN1c3RvbUZpZWxkMzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIGApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jbGFzc2lmaWNhdGlvbkZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdDbGFzc2lmaWNhdGlvbkZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgZG9jdW1lbnRDbGFzc2lmaWNhdGlvbjogXCJURVNUXCIgfSk7JyksXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Nlc3NpbmdGbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnUHJvY2Vzc2luZ0ZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgcmVzdWx0OiB7fSB9KTsnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVwcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGFJbnZva2UodGhpcywgJ01vY2tQcmVwcm9jZXNzaW5nJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMucHJlcHJvY2Vzc2luZ0ZuLFxuICAgICAgcmVzdWx0UGF0aDogJyQucHJlcHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgfSk7XG4gIH1cblxuICAvLyBPdmVycmlkZSB0byBhZGQgY3VzdG9tIG1ldGFkYXRhIGZpZWxkc1xuICBwcm90ZWN0ZWQgcHJlcHJvY2Vzc2luZ01ldGFkYXRhKCk6IFJlY29yZDxzdHJpbmcsIER5bmFtb0F0dHJpYnV0ZVZhbHVlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEN1c3RvbUZpZWxkMTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwcm9jZXNzaW5nUmVzdWx0LmN1c3RvbUZpZWxkMScpKSxcbiAgICAgIEN1c3RvbUZpZWxkMjogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQucHJlcHJvY2Vzc2luZ1Jlc3VsdC5jdXN0b21GaWVsZDInKSkpLFxuICAgICAgQ3VzdG9tRmllbGQzOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5ib29sZWFuRnJvbUpzb25QYXRoKEpzb25QYXRoLnN0cmluZ0F0KCckLnByZXByb2Nlc3NpbmdSZXN1bHQuY3VzdG9tRmllbGQzJykpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xhc3NpZmljYXRpb25TdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCAnTW9ja0NsYXNzaWZpY2F0aW9uJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuY2xhc3NpZmljYXRpb25GbixcbiAgICAgIHJlc3VsdFBhdGg6ICckLmNsYXNzaWZpY2F0aW9uUmVzdWx0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGFJbnZva2UodGhpcywgJ01vY2tQcm9jZXNzaW5nJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMucHJvY2Vzc2luZ0ZuLFxuICAgICAgcmVzdWx0UGF0aDogJyQucHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW5yaWNobWVudFN0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcG9zdFByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVByb2Nlc3NpbmdXb3JrZmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdygpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVN0YXRlTWFjaGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVTdGF0ZU1hY2hpbmVDcmVhdGlvbigndGVzdC1zdGF0ZS1tYWNoaW5lLXdpdGgtY3VzdG9tLW1ldGFkYXRhJyk7XG4gIH1cbn1cblxuZGVzY3JpYmUoJ0Jhc2VEb2N1bWVudFByb2Nlc3NpbmcgLSBEeW5hbW9EQiBTY2hlbWEgRXh0ZW5zaW9uIE1lY2hhbmlzbScsICgpID0+IHtcbiAgbGV0IGFwcDogQXBwO1xuICBsZXQgc3RhY2tXaXRob3V0UHJlcHJvY2Vzc2luZzogU3RhY2s7XG4gIGxldCBzdGFja1dpdGhDdXN0b21NZXRhZGF0YTogU3RhY2s7XG4gIGxldCB0ZW1wbGF0ZVdpdGhvdXRQcmVwcm9jZXNzaW5nOiBUZW1wbGF0ZTtcbiAgbGV0IHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhOiBUZW1wbGF0ZTtcblxuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIC8vIFVzZSBjcmVhdGVUZXN0QXBwKCkgdG8gc2tpcCBidW5kbGluZyBhbmQgc3BlZWQgdXAgdGVzdHNcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG5cbiAgICAvLyBTdGFjayB3aXRob3V0IHByZXByb2Nlc3NpbmcgKGJhY2t3YXJkIGNvbXBhdGlibGUpXG4gICAgc3RhY2tXaXRob3V0UHJlcHJvY2Vzc2luZyA9IG5ldyBTdGFjayhhcHAsICdXaXRob3V0UHJlcHJvY2Vzc2luZ1N0YWNrJyk7XG4gICAgY29uc3QgY29uc3RydWN0V2l0aG91dFByZXByb2Nlc3NpbmcgPSBuZXcgVGVzdERvY3VtZW50UHJvY2Vzc2luZ1dpdGhvdXRQcmVwcm9jZXNzaW5nKFxuICAgICAgc3RhY2tXaXRob3V0UHJlcHJvY2Vzc2luZyxcbiAgICAgICdUZXN0V2l0aG91dFByZXByb2Nlc3NpbmcnLFxuICAgICAge30sXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RXaXRob3V0UHJlcHJvY2Vzc2luZy5jcmVhdGVTdGF0ZU1hY2hpbmUoKTtcblxuICAgIC8vIFN0YWNrIHdpdGggY3VzdG9tIG1ldGFkYXRhXG4gICAgc3RhY2tXaXRoQ3VzdG9tTWV0YWRhdGEgPSBuZXcgU3RhY2soYXBwLCAnV2l0aEN1c3RvbU1ldGFkYXRhU3RhY2snKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RXaXRoQ3VzdG9tTWV0YWRhdGEgPSBuZXcgVGVzdERvY3VtZW50UHJvY2Vzc2luZ1dpdGhDdXN0b21NZXRhZGF0YShcbiAgICAgIHN0YWNrV2l0aEN1c3RvbU1ldGFkYXRhLFxuICAgICAgJ1Rlc3RXaXRoQ3VzdG9tTWV0YWRhdGEnLFxuICAgICAge30sXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RXaXRoQ3VzdG9tTWV0YWRhdGEuY3JlYXRlU3RhdGVNYWNoaW5lKCk7XG5cbiAgICAvLyBHZW5lcmF0ZSB0ZW1wbGF0ZXNcbiAgICB0ZW1wbGF0ZVdpdGhvdXRQcmVwcm9jZXNzaW5nID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrV2l0aG91dFByZXByb2Nlc3NpbmcpO1xuICAgIHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrV2l0aEN1c3RvbU1ldGFkYXRhKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0JhY2t3YXJkIENvbXBhdGliaWxpdHkgLSBEb2N1bWVudHMgd2l0aG91dCBwcmVwcm9jZXNzaW5nJywgKCkgPT4ge1xuICAgIHRlc3QoJ0luaXRNZXRhZGF0YSBvbmx5IGluY2x1ZGVzIGJhc2UgZmllbGRzIHdoZW4gbm8gcHJlcHJvY2Vzc2luZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZXMgPSB0ZW1wbGF0ZVdpdGhvdXRQcmVwcm9jZXNzaW5nLmZpbmRSZXNvdXJjZXMoJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyk7XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVLZXkgPSBPYmplY3Qua2V5cyhzdGF0ZU1hY2hpbmVzKVswXTtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBzdGF0ZU1hY2hpbmVzW3N0YXRlTWFjaGluZUtleV0uUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nO1xuXG4gICAgICAvLyBQYXJzZSB0aGUgZGVmaW5pdGlvblxuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IEpTT04ucGFyc2UoZGVmaW5pdGlvblN0cmluZ1snRm46OkpvaW4nXVsxXS5qb2luKCcnKSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIEluaXRNZXRhZGF0YUVudHJ5IHN0YXRlIGJ5IG5hbWVcbiAgICAgIGNvbnN0IGluaXRNZXRhZGF0YVN0YXRlID0gZGVmaW5pdGlvbi5TdGF0ZXMuSW5pdE1ldGFkYXRhRW50cnk7XG5cbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5UeXBlKS50b0JlKCdUYXNrJyk7XG5cbiAgICAgIC8vIFZlcmlmeSBiYXNlIGZpZWxkcyBhcmUgcHJlc2VudFxuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5Eb2N1bWVudElkKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5Db250ZW50VHlwZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uQ29udGVudCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uV29ya2Zsb3dTdGF0dXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLlN0YXRlTWFjaGluZUV4ZWNJZCkudG9CZURlZmluZWQoKTtcblxuICAgICAgLy8gVmVyaWZ5IE5PIGN1c3RvbSBmaWVsZHMgYXJlIHByZXNlbnQgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLkN1c3RvbUZpZWxkMSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5DdXN0b21GaWVsZDIpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uQ3VzdG9tRmllbGQzKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3b3JrZmxvdyBzdGFydHMgd2l0aCBJbml0TWV0YWRhdGEgd2hlbiBubyBwcmVwcm9jZXNzaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lcyA9IHRlbXBsYXRlV2l0aG91dFByZXByb2Nlc3NpbmcuZmluZFJlc291cmNlcygnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnKTtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUtleSA9IE9iamVjdC5rZXlzKHN0YXRlTWFjaGluZXMpWzBdO1xuICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IHN0YXRlTWFjaGluZXNbc3RhdGVNYWNoaW5lS2V5XS5Qcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmc7XG5cbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBKU09OLnBhcnNlKGRlZmluaXRpb25TdHJpbmdbJ0ZuOjpKb2luJ11bMV0uam9pbignJykpO1xuXG4gICAgICAvLyBTaG91bGQgc3RhcnQgd2l0aCBJbml0TWV0YWRhdGEgd2hlbiBubyBwcmVwcm9jZXNzaW5nXG4gICAgICBleHBlY3QoZGVmaW5pdGlvbi5TdGFydEF0KS50b01hdGNoKC9Jbml0TWV0YWRhdGEvKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0R5bmFtb0RCIHRhYmxlIHNjaGVtYSByZW1haW5zIHVuY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIC8vIFZlcmlmeSB0YWJsZSBpcyBjcmVhdGVkIHdpdGggc2FtZSBzY2hlbWEgYXMgYmVmb3JlXG4gICAgICB0ZW1wbGF0ZVdpdGhvdXRQcmVwcm9jZXNzaW5nLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpEeW5hbW9EQjo6VGFibGUnLCB7XG4gICAgICAgIEtleVNjaGVtYTogW3tcbiAgICAgICAgICBBdHRyaWJ1dGVOYW1lOiAnRG9jdW1lbnRJZCcsXG4gICAgICAgICAgS2V5VHlwZTogJ0hBU0gnLFxuICAgICAgICB9XSxcbiAgICAgICAgQmlsbGluZ01vZGU6ICdQQVlfUEVSX1JFUVVFU1QnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTY2hlbWEgRXh0ZW5zaW9uIE1lY2hhbmlzbSAtIEdlbmVyaWMgcHJlcHJvY2Vzc2luZyBtZXRhZGF0YScsICgpID0+IHtcbiAgICB0ZXN0KCdwcmVwcm9jZXNzaW5nTWV0YWRhdGEoKSBob29rIGFsbG93cyBzdWJjbGFzc2VzIHRvIGV4dGVuZCBzY2hlbWEnLCAoKSA9PiB7XG4gICAgICAvLyBUaGUga2V5IGRlc2lnbiBwcmluY2lwbGU6IHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHByZXByb2Nlc3NpbmdNZXRhZGF0YSgpXG4gICAgICAvLyB0byBhZGQgdGhlaXIgb3duIGZpZWxkcyB0byBJbml0TWV0YWRhdGEgd2l0aG91dCBiYXNlIGNsYXNzIGtub3dpbmcgdGhlIGRldGFpbHNcblxuICAgICAgLy8gVmVyaWZ5IHRoZSBjb25zdHJ1Y3Qgd2l0aCBjdXN0b20gbWV0YWRhdGEgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICBleHBlY3Qoc3RhY2tXaXRoQ3VzdG9tTWV0YWRhdGEpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIC8vIFZlcmlmeSBpdCBoYXMgYSBzdGF0ZSBtYWNoaW5lXG4gICAgICB0ZW1wbGF0ZVdpdGhDdXN0b21NZXRhZGF0YS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJywgMSk7XG5cbiAgICAgIC8vIFZlcmlmeSBpdCBoYXMgdGhlIHNhbWUgRHluYW1vREIgdGFibGUgc3RydWN0dXJlIGFzIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uXG4gICAgICB0ZW1wbGF0ZVdpdGhDdXN0b21NZXRhZGF0YS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RHluYW1vREI6OlRhYmxlJywge1xuICAgICAgICBLZXlTY2hlbWE6IFt7XG4gICAgICAgICAgQXR0cmlidXRlTmFtZTogJ0RvY3VtZW50SWQnLFxuICAgICAgICAgIEtleVR5cGU6ICdIQVNIJyxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dvcmtmbG93IGluY2x1ZGVzIHByZXByb2Nlc3Npbmcgc3RlcCB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lcyA9IHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhLmZpbmRSZXNvdXJjZXMoJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyk7XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVLZXkgPSBPYmplY3Qua2V5cyhzdGF0ZU1hY2hpbmVzKVswXTtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBzdGF0ZU1hY2hpbmVzW3N0YXRlTWFjaGluZUtleV0uUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nO1xuXG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gSlNPTi5wYXJzZShkZWZpbml0aW9uU3RyaW5nWydGbjo6Sm9pbiddWzFdLmpvaW4oJycpKTtcblxuICAgICAgLy8gVmVyaWZ5IEluaXRNZXRhZGF0YSBzdGVwIGV4aXN0cyAoY29yZSBmdW5jdGlvbmFsaXR5KVxuICAgICAgZXhwZWN0KGRlZmluaXRpb24uU3RhdGVzLkluaXRNZXRhZGF0YUVudHJ5KS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBXaGVuIHByZXByb2Nlc3NpbmcgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBpbiB0aGUgd29ya2Zsb3dcbiAgICAgIC8vIFRoZSBleGFjdCBzdHJ1Y3R1cmUgZGVwZW5kcyBvbiB0aGUgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25cbiAgICAgIGV4cGVjdChkZWZpbml0aW9uLlN0YXRlcykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhkZWZpbml0aW9uLlN0YXRlcykubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdJbml0TWV0YWRhdGEgY2FuIGFjY2VwdCBhZGRpdGlvbmFsIGZpZWxkcyB2aWEgcHJlcHJvY2Vzc2luZ01ldGFkYXRhKCknLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVzID0gdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuZmluZFJlc291cmNlcygnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnKTtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUtleSA9IE9iamVjdC5rZXlzKHN0YXRlTWFjaGluZXMpWzBdO1xuICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IHN0YXRlTWFjaGluZXNbc3RhdGVNYWNoaW5lS2V5XS5Qcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmc7XG5cbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBKU09OLnBhcnNlKGRlZmluaXRpb25TdHJpbmdbJ0ZuOjpKb2luJ11bMV0uam9pbignJykpO1xuXG4gICAgICBjb25zdCBpbml0TWV0YWRhdGFTdGF0ZSA9IGRlZmluaXRpb24uU3RhdGVzLkluaXRNZXRhZGF0YUVudHJ5O1xuXG4gICAgICAvLyBWZXJpZnkgYmFzZSBmaWVsZHMgYXJlIGFsd2F5cyBwcmVzZW50XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLkRvY3VtZW50SWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLkNvbnRlbnRUeXBlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5Db250ZW50KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5Xb3JrZmxvd1N0YXR1cykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uU3RhdGVNYWNoaW5lRXhlY0lkKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBUaGUgbWVjaGFuaXNtIGFsbG93cyBhZGRpbmcgY3VzdG9tIGZpZWxkcyAoaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHN1YmNsYXNzKVxuICAgICAgLy8gRHluYW1vREIncyBzY2hlbWFsZXNzIG5hdHVyZSBtZWFucyBhbnkgZmllbGRzIGNhbiBiZSBhZGRlZCBhdCBydW50aW1lXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTY2hlbWEgQ29tcGF0aWJpbGl0eScsICgpID0+IHtcbiAgICB0ZXN0KCdib3RoIGltcGxlbWVudGF0aW9ucyB1c2UgdGhlIHNhbWUgRHluYW1vREIgdGFibGUgc3RydWN0dXJlJywgKCkgPT4ge1xuICAgICAgLy8gQm90aCBzaG91bGQgY3JlYXRlIHRhYmxlcyB3aXRoIHNhbWUgcGFydGl0aW9uIGtleVxuICAgICAgdGVtcGxhdGVXaXRob3V0UHJlcHJvY2Vzc2luZy5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RHluYW1vREI6OlRhYmxlJywge1xuICAgICAgICBLZXlTY2hlbWE6IFt7XG4gICAgICAgICAgQXR0cmlidXRlTmFtZTogJ0RvY3VtZW50SWQnLFxuICAgICAgICAgIEtleVR5cGU6ICdIQVNIJyxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgS2V5U2NoZW1hOiBbe1xuICAgICAgICAgIEF0dHJpYnV0ZU5hbWU6ICdEb2N1bWVudElkJyxcbiAgICAgICAgICBLZXlUeXBlOiAnSEFTSCcsXG4gICAgICAgIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdib3RoIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgZW5jcnlwdGVkIHRhYmxlcycsICgpID0+IHtcbiAgICAgIHRlbXBsYXRlV2l0aG91dFByZXByb2Nlc3NpbmcuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgU1NFU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIFNTRUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgU1NFVHlwZTogJ0tNUycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgU1NFU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIFNTRUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgU1NFVHlwZTogJ0tNUycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2JvdGggaW1wbGVtZW50YXRpb25zIHVzZSBQQVlfUEVSX1JFUVVFU1QgYmlsbGluZycsICgpID0+IHtcbiAgICAgIHRlbXBsYXRlV2l0aG91dFByZXByb2Nlc3NpbmcuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgQmlsbGluZ01vZGU6ICdQQVlfUEVSX1JFUVVFU1QnLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpEeW5hbW9EQjo6VGFibGUnLCB7XG4gICAgICAgIEJpbGxpbmdNb2RlOiAnUEFZX1BFUl9SRVFVRVNUJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVzaWduIFByaW5jaXBsZTogQmFzZSBjbGFzcyBoYXMgbm8ga25vd2xlZGdlIG9mIHByZXByb2Nlc3Npbmcgc3BlY2lmaWNzJywgKCkgPT4ge1xuICAgIHRlc3QoJ2Jhc2UgY2xhc3MgcHJvdmlkZXMgZ2VuZXJpYyBleHRlbnNpb24gbWVjaGFuaXNtIHZpYSBwcmVwcm9jZXNzaW5nTWV0YWRhdGEoKScsICgpID0+IHtcbiAgICAgIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgZGVzaWduIHByaW5jaXBsZTpcbiAgICAgIC8vIC0gQmFzZSBjbGFzcyBkb2Vzbid0IGtub3cgYWJvdXQgY2h1bmtpbmcsIHZhbGlkYXRpb24sIG9yIGFueSBzcGVjaWZpYyBwcmVwcm9jZXNzaW5nXG4gICAgICAvLyAtIEJhc2UgY2xhc3Mgb25seSBwcm92aWRlcyBhIGhvb2sgKHByZXByb2Nlc3NpbmdNZXRhZGF0YSkgZm9yIHN1YmNsYXNzZXMgdG8gZXh0ZW5kXG4gICAgICAvLyAtIFN1YmNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGVpciBvd24gbWV0YWRhdGEgZmllbGRzXG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHdpdGhvdXQgb3ZlcnJpZGluZyBwcmVwcm9jZXNzaW5nTWV0YWRhdGEoKSwgd29ya2Zsb3cgd29ya3MgY29ycmVjdGx5XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVzID0gdGVtcGxhdGVXaXRob3V0UHJlcHJvY2Vzc2luZy5maW5kUmVzb3VyY2VzKCdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScpO1xuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lS2V5ID0gT2JqZWN0LmtleXMoc3RhdGVNYWNoaW5lcylbMF07XG4gICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gc3RhdGVNYWNoaW5lc1tzdGF0ZU1hY2hpbmVLZXldLlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZztcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBKU09OLnBhcnNlKGRlZmluaXRpb25TdHJpbmdbJ0ZuOjpKb2luJ11bMV0uam9pbignJykpO1xuXG4gICAgICBjb25zdCBpbml0TWV0YWRhdGFTdGF0ZSA9IGRlZmluaXRpb24uU3RhdGVzLkluaXRNZXRhZGF0YUVudHJ5O1xuXG4gICAgICAvLyBCYXNlIGZpZWxkcyBhcmUgYWx3YXlzIHByZXNlbnRcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uRG9jdW1lbnRJZCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uQ29udGVudFR5cGUpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLkNvbnRlbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLldvcmtmbG93U3RhdHVzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5TdGF0ZU1hY2hpbmVFeGVjSWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdWJjbGFzc2VzIGNhbiBleHRlbmQgdmlhIHByZXByb2Nlc3NpbmdNZXRhZGF0YSgpIHdpdGhvdXQgYnJlYWtpbmcgYmFzZSBmdW5jdGlvbmFsaXR5JywgKCkgPT4ge1xuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbnN0cnVjdCB3aXRoIGN1c3RvbSBtZXRhZGF0YSBzdGlsbCBoYXMgYWxsIGJhc2UgZnVuY3Rpb25hbGl0eVxuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEucmVzb3VyY2VDb3VudElzKCdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsIDEpO1xuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEucmVzb3VyY2VDb3VudElzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIDEpO1xuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEucmVzb3VyY2VDb3VudElzKCdBV1M6OlMzOjpCdWNrZXQnLCAxKTtcblxuICAgICAgLy8gVmVyaWZ5IHN0YXRlIG1hY2hpbmUgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJlXG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVzID0gdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuZmluZFJlc291cmNlcygnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnKTtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUtleSA9IE9iamVjdC5rZXlzKHN0YXRlTWFjaGluZXMpWzBdO1xuICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IHN0YXRlTWFjaGluZXNbc3RhdGVNYWNoaW5lS2V5XS5Qcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmc7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gSlNPTi5wYXJzZShkZWZpbml0aW9uU3RyaW5nWydGbjo6Sm9pbiddWzFdLmpvaW4oJycpKTtcblxuICAgICAgLy8gQ29yZSBzdGF0ZXMgc2hvdWxkIGV4aXN0XG4gICAgICBleHBlY3QoZGVmaW5pdGlvbi5TdGF0ZXMuSW5pdE1ldGFkYXRhRW50cnkpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoZGVmaW5pdGlvbi5TdGF0ZXMuTW9ja0NsYXNzaWZpY2F0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGRlZmluaXRpb24uU3RhdGVzLk1vY2tQcm9jZXNzaW5nKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRHluYW1vREIgc2NoZW1hbGVzcyBuYXR1cmUgc3VwcG9ydHMgcnVudGltZSBmaWVsZCBhZGRpdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdEeW5hbW9EQiB0YWJsZSBzdXBwb3J0cyBhbnkgYWRkaXRpb25hbCBmaWVsZHMgYXQgcnVudGltZScsICgpID0+IHtcbiAgICAgIC8vIER5bmFtb0RCIGlzIHNjaGVtYWxlc3MsIHNvIGFueSBmaWVsZHMgY2FuIGJlIGFkZGVkIGF0IHJ1bnRpbWVcbiAgICAgIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgdGFibGUgaXMgY3JlYXRlZCBjb3JyZWN0bHkgYW5kIGNhbiBhY2NlcHQgYW55IGF0dHJpYnV0ZXNcblxuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgS2V5U2NoZW1hOiBbe1xuICAgICAgICAgIEF0dHJpYnV0ZU5hbWU6ICdEb2N1bWVudElkJyxcbiAgICAgICAgICBLZXlUeXBlOiAnSEFTSCcsXG4gICAgICAgIH1dLFxuICAgICAgICBCaWxsaW5nTW9kZTogJ1BBWV9QRVJfUkVRVUVTVCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gTm8gYXR0cmlidXRlIGRlZmluaXRpb25zIG5lZWRlZCBmb3Igbm9uLWtleSBhdHRyaWJ1dGVzIGluIER5bmFtb0RCXG4gICAgICAvLyBGaWVsZHMgbGlrZSBBZ2dyZWdhdGVkUmVzdWx0IGNhbiBiZSBhZGRlZCB2aWEgRHluYW1vVXBkYXRlSXRlbSBkdXJpbmcgcHJvY2Vzc2luZ1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc3RhdGUgbWFjaGluZSBoYXMgcGVybWlzc2lvbnMgdG8gdXBkYXRlIER5bmFtb0RCIGl0ZW1zJywgKCkgPT4ge1xuICAgICAgLy8gVmVyaWZ5IHRoZSBzdGF0ZSBtYWNoaW5lIHJvbGUgaGFzIFVwZGF0ZUl0ZW0gcGVybWlzc2lvbnNcbiAgICAgIC8vIFRoaXMgYWxsb3dzIGFkZGluZyBmaWVsZHMgbGlrZSBBZ2dyZWdhdGVkUmVzdWx0IGR1cmluZyBwcm9jZXNzaW5nXG4gICAgICBjb25zdCBwb2xpY2llcyA9IHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhLmZpbmRSZXNvdXJjZXMoJ0FXUzo6SUFNOjpQb2xpY3knKTtcblxuICAgICAgLy8gRmluZCB0aGUgc3RhdGUgbWFjaGluZSByb2xlIHBvbGljeVxuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lUG9saWN5ID0gT2JqZWN0LnZhbHVlcyhwb2xpY2llcykuZmluZCgocG9saWN5OiBhbnkpID0+XG4gICAgICAgIHBvbGljeS5Qcm9wZXJ0aWVzLlBvbGljeU5hbWUuaW5jbHVkZXMoJ1N0YXRlTWFjaGluZVJvbGUnKSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZU1hY2hpbmVQb2xpY3kpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgaXQgaGFzIER5bmFtb0RCIFVwZGF0ZUl0ZW0gcGVybWlzc2lvbnNcbiAgICAgIGNvbnN0IHN0YXRlbWVudHMgPSAoc3RhdGVNYWNoaW5lUG9saWN5IGFzIGFueSkuUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQ7XG4gICAgICBjb25zdCBkeW5hbW9TdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0bXQ6IGFueSkgPT5cbiAgICAgICAgc3RtdC5BY3Rpb24gJiYgKFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KHN0bXQuQWN0aW9uKSAmJiBzdG10LkFjdGlvbi5pbmNsdWRlcygnZHluYW1vZGI6VXBkYXRlSXRlbScpKSB8fFxuICAgICAgICAgIHN0bXQuQWN0aW9uID09PSAnZHluYW1vZGI6VXBkYXRlSXRlbSdcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChkeW5hbW9TdGF0ZW1lbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoZHluYW1vU3RhdGVtZW50LkVmZmVjdCkudG9CZSgnQWxsb3cnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLXNjaGVtYS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvdGVzdHMvYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLXNjaGVtYS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQXlDO0FBQ3pDLHVEQUFrRDtBQUNsRCx1REFBaUU7QUFDakUscUVBQXlEO0FBQ3pELGlGQUF5RjtBQUN6RiwyREFBMkQ7QUFDM0QsMEVBQWlHO0FBRWpHOzs7R0FHRztBQUNILE1BQU0sMENBQTJDLFNBQVEsaURBQXNCO0lBQ3JFLGdCQUFnQixDQUFXO0lBQzNCLFlBQVksQ0FBVztJQUUvQixZQUFZLEtBQVUsRUFBRSxFQUFVLEVBQUUsS0FBVTtRQUM1QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxxQkFBUSxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUM3RCxPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLElBQUksRUFBRSxpQkFBSSxDQUFDLFVBQVUsQ0FBQyxxRUFBcUUsQ0FBQztTQUM3RixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3JELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLGVBQWU7WUFDeEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsVUFBVSxDQUFDLGlEQUFpRCxDQUFDO1NBQ3pFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxpQkFBaUI7UUFDekIseUNBQXlDO1FBQ3pDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxnRUFBZ0U7SUFF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QUFDO1lBRTlFLHFDQUFxQztZQUNyQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FDdEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQzFELENBQUM7WUFFRixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUV6QyxvREFBb0Q7WUFDcEQsTUFBTSxVQUFVLEdBQUksa0JBQTBCLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7WUFDbkYsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQ3BELElBQUksQ0FBQyxNQUFNLElBQUksQ0FDYixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzNFLElBQUksQ0FBQyxNQUFNLEtBQUsscUJBQXFCLENBQ3RDLENBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IENvZGUsIEZ1bmN0aW9uLCBSdW50aW1lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBKc29uUGF0aCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IER5bmFtb0F0dHJpYnV0ZVZhbHVlLCBMYW1iZGFJbnZva2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrcyc7XG5pbXBvcnQgeyBjcmVhdGVUZXN0QXBwIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHsgQmFzZURvY3VtZW50UHJvY2Vzc2luZywgRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfSBmcm9tICcuLi9iYXNlLWRvY3VtZW50LXByb2Nlc3NpbmcnO1xuXG4vKipcbiAqIFRlc3QgaW1wbGVtZW50YXRpb24gV0lUSE9VVCBwcmVwcm9jZXNzaW5nIChiYWNrd2FyZCBjb21wYXRpYmxlKVxuICogVGhpcyBzaW11bGF0ZXMgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3QgdXNlIGFueSBwcmVwcm9jZXNzaW5nXG4gKi9cbmNsYXNzIFRlc3REb2N1bWVudFByb2Nlc3NpbmdXaXRob3V0UHJlcHJvY2Vzc2luZyBleHRlbmRzIEJhc2VEb2N1bWVudFByb2Nlc3Npbmcge1xuICBwcml2YXRlIGNsYXNzaWZpY2F0aW9uRm46IEZ1bmN0aW9uO1xuICBwcml2YXRlIHByb2Nlc3NpbmdGbjogRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGFueSwgaWQ6IHN0cmluZywgcHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5jbGFzc2lmaWNhdGlvbkZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdDbGFzc2lmaWNhdGlvbkZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgZG9jdW1lbnRDbGFzc2lmaWNhdGlvbjogXCJURVNUXCIgfSk7JyksXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Nlc3NpbmdGbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnUHJvY2Vzc2luZ0ZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgcmVzdWx0OiB7fSB9KTsnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVwcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gTm8gcHJlcHJvY2Vzc2luZyAtIGJhY2t3YXJkIGNvbXBhdGlibGVcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gTm8gb3ZlcnJpZGUgb2YgcHJlcHJvY2Vzc2luZ01ldGFkYXRhKCkgLSB1c2VzIGRlZmF1bHQgKGVtcHR5KVxuXG4gIHByb3RlY3RlZCBjbGFzc2lmaWNhdGlvblN0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUge1xuICAgIHJldHVybiBuZXcgTGFtYmRhSW52b2tlKHRoaXMsICdNb2NrQ2xhc3NpZmljYXRpb24nLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5jbGFzc2lmaWNhdGlvbkZuLFxuICAgICAgcmVzdWx0UGF0aDogJyQuY2xhc3NpZmljYXRpb25SZXN1bHQnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCAnTW9ja1Byb2Nlc3NpbmcnLCB7XG4gICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5wcm9jZXNzaW5nRm4sXG4gICAgICByZXN1bHRQYXRoOiAnJC5wcm9jZXNzaW5nUmVzdWx0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbnJpY2htZW50U3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwb3N0UHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUHJvY2Vzc2luZ1dvcmtmbG93KCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVN0YW5kYXJkUHJvY2Vzc2luZ1dvcmtmbG93KCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU3RhdGVNYWNoaW5lKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVN0YXRlTWFjaGluZUNyZWF0aW9uKCd0ZXN0LXN0YXRlLW1hY2hpbmUtbm8tcHJlcHJvY2Vzc2luZycpO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCBpbXBsZW1lbnRhdGlvbiBXSVRIIHByZXByb2Nlc3NpbmcgYW5kIGN1c3RvbSBtZXRhZGF0YVxuICogVGhpcyBzaW11bGF0ZXMgaW1wbGVtZW50YXRpb25zIHRoYXQgYWRkIHRoZWlyIG93biBwcmVwcm9jZXNzaW5nLXNwZWNpZmljIGZpZWxkc1xuICogKGUuZy4sIGNodW5raW5nIG1ldGFkYXRhKSB3aXRob3V0IHRoZSBiYXNlIGNsYXNzIGtub3dpbmcgYWJvdXQgdGhlbVxuICovXG5jbGFzcyBUZXN0RG9jdW1lbnRQcm9jZXNzaW5nV2l0aEN1c3RvbU1ldGFkYXRhIGV4dGVuZHMgQmFzZURvY3VtZW50UHJvY2Vzc2luZyB7XG4gIHByaXZhdGUgcHJlcHJvY2Vzc2luZ0ZuOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBjbGFzc2lmaWNhdGlvbkZuOiBGdW5jdGlvbjtcbiAgcHJpdmF0ZSBwcm9jZXNzaW5nRm46IEZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBhbnksIGlkOiBzdHJpbmcsIHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJlcHJvY2Vzc2luZ0ZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdQcmVwcm9jZXNzaW5nRm4nLCB7XG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgY29kZTogQ29kZS5mcm9tSW5saW5lKGBcbiAgICAgICAgZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHtcbiAgICAgICAgICBjdXN0b21GaWVsZDE6ICd2YWx1ZTEnLFxuICAgICAgICAgIGN1c3RvbUZpZWxkMjogeyBuZXN0ZWQ6ICdkYXRhJyB9LFxuICAgICAgICAgIGN1c3RvbUZpZWxkMzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIGApLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jbGFzc2lmaWNhdGlvbkZuID0gbmV3IEZ1bmN0aW9uKHRoaXMsICdDbGFzc2lmaWNhdGlvbkZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgZG9jdW1lbnRDbGFzc2lmaWNhdGlvbjogXCJURVNUXCIgfSk7JyksXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Nlc3NpbmdGbiA9IG5ldyBGdW5jdGlvbih0aGlzLCAnUHJvY2Vzc2luZ0ZuJywge1xuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IENvZGUuZnJvbUlubGluZSgnZXhwb3J0cy5oYW5kbGVyID0gYXN5bmMgKCkgPT4gKHsgcmVzdWx0OiB7fSB9KTsnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVwcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGFJbnZva2UodGhpcywgJ01vY2tQcmVwcm9jZXNzaW5nJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMucHJlcHJvY2Vzc2luZ0ZuLFxuICAgICAgcmVzdWx0UGF0aDogJyQucHJlcHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgfSk7XG4gIH1cblxuICAvLyBPdmVycmlkZSB0byBhZGQgY3VzdG9tIG1ldGFkYXRhIGZpZWxkc1xuICBwcm90ZWN0ZWQgcHJlcHJvY2Vzc2luZ01ldGFkYXRhKCk6IFJlY29yZDxzdHJpbmcsIER5bmFtb0F0dHJpYnV0ZVZhbHVlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIEN1c3RvbUZpZWxkMTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5wcmVwcm9jZXNzaW5nUmVzdWx0LmN1c3RvbUZpZWxkMScpKSxcbiAgICAgIEN1c3RvbUZpZWxkMjogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQucHJlcHJvY2Vzc2luZ1Jlc3VsdC5jdXN0b21GaWVsZDInKSkpLFxuICAgICAgQ3VzdG9tRmllbGQzOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5ib29sZWFuRnJvbUpzb25QYXRoKEpzb25QYXRoLnN0cmluZ0F0KCckLnByZXByb2Nlc3NpbmdSZXN1bHQuY3VzdG9tRmllbGQzJykpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xhc3NpZmljYXRpb25TdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHtcbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCAnTW9ja0NsYXNzaWZpY2F0aW9uJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMuY2xhc3NpZmljYXRpb25GbixcbiAgICAgIHJlc3VsdFBhdGg6ICckLmNsYXNzaWZpY2F0aW9uUmVzdWx0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzaW5nU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGFJbnZva2UodGhpcywgJ01vY2tQcm9jZXNzaW5nJywge1xuICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMucHJvY2Vzc2luZ0ZuLFxuICAgICAgcmVzdWx0UGF0aDogJyQucHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW5yaWNobWVudFN0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcG9zdFByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVByb2Nlc3NpbmdXb3JrZmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdygpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVN0YXRlTWFjaGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVTdGF0ZU1hY2hpbmVDcmVhdGlvbigndGVzdC1zdGF0ZS1tYWNoaW5lLXdpdGgtY3VzdG9tLW1ldGFkYXRhJyk7XG4gIH1cbn1cblxuZGVzY3JpYmUoJ0Jhc2VEb2N1bWVudFByb2Nlc3NpbmcgLSBEeW5hbW9EQiBTY2hlbWEgRXh0ZW5zaW9uIE1lY2hhbmlzbScsICgpID0+IHtcbiAgbGV0IGFwcDogQXBwO1xuICBsZXQgc3RhY2tXaXRob3V0UHJlcHJvY2Vzc2luZzogU3RhY2s7XG4gIGxldCBzdGFja1dpdGhDdXN0b21NZXRhZGF0YTogU3RhY2s7XG4gIGxldCB0ZW1wbGF0ZVdpdGhvdXRQcmVwcm9jZXNzaW5nOiBUZW1wbGF0ZTtcbiAgbGV0IHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhOiBUZW1wbGF0ZTtcblxuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIC8vIFVzZSBjcmVhdGVUZXN0QXBwKCkgdG8gc2tpcCBidW5kbGluZyBhbmQgc3BlZWQgdXAgdGVzdHNcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG5cbiAgICAvLyBTdGFjayB3aXRob3V0IHByZXByb2Nlc3NpbmcgKGJhY2t3YXJkIGNvbXBhdGlibGUpXG4gICAgc3RhY2tXaXRob3V0UHJlcHJvY2Vzc2luZyA9IG5ldyBTdGFjayhhcHAsICdXaXRob3V0UHJlcHJvY2Vzc2luZ1N0YWNrJyk7XG4gICAgY29uc3QgY29uc3RydWN0V2l0aG91dFByZXByb2Nlc3NpbmcgPSBuZXcgVGVzdERvY3VtZW50UHJvY2Vzc2luZ1dpdGhvdXRQcmVwcm9jZXNzaW5nKFxuICAgICAgc3RhY2tXaXRob3V0UHJlcHJvY2Vzc2luZyxcbiAgICAgICdUZXN0V2l0aG91dFByZXByb2Nlc3NpbmcnLFxuICAgICAge30sXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RXaXRob3V0UHJlcHJvY2Vzc2luZy5jcmVhdGVTdGF0ZU1hY2hpbmUoKTtcblxuICAgIC8vIFN0YWNrIHdpdGggY3VzdG9tIG1ldGFkYXRhXG4gICAgc3RhY2tXaXRoQ3VzdG9tTWV0YWRhdGEgPSBuZXcgU3RhY2soYXBwLCAnV2l0aEN1c3RvbU1ldGFkYXRhU3RhY2snKTtcbiAgICBjb25zdCBjb25zdHJ1Y3RXaXRoQ3VzdG9tTWV0YWRhdGEgPSBuZXcgVGVzdERvY3VtZW50UHJvY2Vzc2luZ1dpdGhDdXN0b21NZXRhZGF0YShcbiAgICAgIHN0YWNrV2l0aEN1c3RvbU1ldGFkYXRhLFxuICAgICAgJ1Rlc3RXaXRoQ3VzdG9tTWV0YWRhdGEnLFxuICAgICAge30sXG4gICAgKTtcbiAgICBjb25zdHJ1Y3RXaXRoQ3VzdG9tTWV0YWRhdGEuY3JlYXRlU3RhdGVNYWNoaW5lKCk7XG5cbiAgICAvLyBHZW5lcmF0ZSB0ZW1wbGF0ZXNcbiAgICB0ZW1wbGF0ZVdpdGhvdXRQcmVwcm9jZXNzaW5nID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrV2l0aG91dFByZXByb2Nlc3NpbmcpO1xuICAgIHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrV2l0aEN1c3RvbU1ldGFkYXRhKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0JhY2t3YXJkIENvbXBhdGliaWxpdHkgLSBEb2N1bWVudHMgd2l0aG91dCBwcmVwcm9jZXNzaW5nJywgKCkgPT4ge1xuICAgIHRlc3QoJ0luaXRNZXRhZGF0YSBvbmx5IGluY2x1ZGVzIGJhc2UgZmllbGRzIHdoZW4gbm8gcHJlcHJvY2Vzc2luZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZXMgPSB0ZW1wbGF0ZVdpdGhvdXRQcmVwcm9jZXNzaW5nLmZpbmRSZXNvdXJjZXMoJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyk7XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVLZXkgPSBPYmplY3Qua2V5cyhzdGF0ZU1hY2hpbmVzKVswXTtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBzdGF0ZU1hY2hpbmVzW3N0YXRlTWFjaGluZUtleV0uUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nO1xuXG4gICAgICAvLyBQYXJzZSB0aGUgZGVmaW5pdGlvblxuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IEpTT04ucGFyc2UoZGVmaW5pdGlvblN0cmluZ1snRm46OkpvaW4nXVsxXS5qb2luKCcnKSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIEluaXRNZXRhZGF0YUVudHJ5IHN0YXRlIGJ5IG5hbWVcbiAgICAgIGNvbnN0IGluaXRNZXRhZGF0YVN0YXRlID0gZGVmaW5pdGlvbi5TdGF0ZXMuSW5pdE1ldGFkYXRhRW50cnk7XG5cbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5UeXBlKS50b0JlKCdUYXNrJyk7XG5cbiAgICAgIC8vIFZlcmlmeSBiYXNlIGZpZWxkcyBhcmUgcHJlc2VudFxuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5Eb2N1bWVudElkKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5Db250ZW50VHlwZSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uQ29udGVudCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uV29ya2Zsb3dTdGF0dXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLlN0YXRlTWFjaGluZUV4ZWNJZCkudG9CZURlZmluZWQoKTtcblxuICAgICAgLy8gVmVyaWZ5IE5PIGN1c3RvbSBmaWVsZHMgYXJlIHByZXNlbnQgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLkN1c3RvbUZpZWxkMSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5DdXN0b21GaWVsZDIpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uQ3VzdG9tRmllbGQzKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3b3JrZmxvdyBzdGFydHMgd2l0aCBJbml0TWV0YWRhdGEgd2hlbiBubyBwcmVwcm9jZXNzaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lcyA9IHRlbXBsYXRlV2l0aG91dFByZXByb2Nlc3NpbmcuZmluZFJlc291cmNlcygnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnKTtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUtleSA9IE9iamVjdC5rZXlzKHN0YXRlTWFjaGluZXMpWzBdO1xuICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IHN0YXRlTWFjaGluZXNbc3RhdGVNYWNoaW5lS2V5XS5Qcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmc7XG5cbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBKU09OLnBhcnNlKGRlZmluaXRpb25TdHJpbmdbJ0ZuOjpKb2luJ11bMV0uam9pbignJykpO1xuXG4gICAgICAvLyBTaG91bGQgc3RhcnQgd2l0aCBJbml0TWV0YWRhdGEgd2hlbiBubyBwcmVwcm9jZXNzaW5nXG4gICAgICBleHBlY3QoZGVmaW5pdGlvbi5TdGFydEF0KS50b01hdGNoKC9Jbml0TWV0YWRhdGEvKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0R5bmFtb0RCIHRhYmxlIHNjaGVtYSByZW1haW5zIHVuY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIC8vIFZlcmlmeSB0YWJsZSBpcyBjcmVhdGVkIHdpdGggc2FtZSBzY2hlbWEgYXMgYmVmb3JlXG4gICAgICB0ZW1wbGF0ZVdpdGhvdXRQcmVwcm9jZXNzaW5nLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpEeW5hbW9EQjo6VGFibGUnLCB7XG4gICAgICAgIEtleVNjaGVtYTogW3tcbiAgICAgICAgICBBdHRyaWJ1dGVOYW1lOiAnRG9jdW1lbnRJZCcsXG4gICAgICAgICAgS2V5VHlwZTogJ0hBU0gnLFxuICAgICAgICB9XSxcbiAgICAgICAgQmlsbGluZ01vZGU6ICdQQVlfUEVSX1JFUVVFU1QnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTY2hlbWEgRXh0ZW5zaW9uIE1lY2hhbmlzbSAtIEdlbmVyaWMgcHJlcHJvY2Vzc2luZyBtZXRhZGF0YScsICgpID0+IHtcbiAgICB0ZXN0KCdwcmVwcm9jZXNzaW5nTWV0YWRhdGEoKSBob29rIGFsbG93cyBzdWJjbGFzc2VzIHRvIGV4dGVuZCBzY2hlbWEnLCAoKSA9PiB7XG4gICAgICAvLyBUaGUga2V5IGRlc2lnbiBwcmluY2lwbGU6IHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHByZXByb2Nlc3NpbmdNZXRhZGF0YSgpXG4gICAgICAvLyB0byBhZGQgdGhlaXIgb3duIGZpZWxkcyB0byBJbml0TWV0YWRhdGEgd2l0aG91dCBiYXNlIGNsYXNzIGtub3dpbmcgdGhlIGRldGFpbHNcblxuICAgICAgLy8gVmVyaWZ5IHRoZSBjb25zdHJ1Y3Qgd2l0aCBjdXN0b20gbWV0YWRhdGEgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICBleHBlY3Qoc3RhY2tXaXRoQ3VzdG9tTWV0YWRhdGEpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIC8vIFZlcmlmeSBpdCBoYXMgYSBzdGF0ZSBtYWNoaW5lXG4gICAgICB0ZW1wbGF0ZVdpdGhDdXN0b21NZXRhZGF0YS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJywgMSk7XG5cbiAgICAgIC8vIFZlcmlmeSBpdCBoYXMgdGhlIHNhbWUgRHluYW1vREIgdGFibGUgc3RydWN0dXJlIGFzIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uXG4gICAgICB0ZW1wbGF0ZVdpdGhDdXN0b21NZXRhZGF0YS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RHluYW1vREI6OlRhYmxlJywge1xuICAgICAgICBLZXlTY2hlbWE6IFt7XG4gICAgICAgICAgQXR0cmlidXRlTmFtZTogJ0RvY3VtZW50SWQnLFxuICAgICAgICAgIEtleVR5cGU6ICdIQVNIJyxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dvcmtmbG93IGluY2x1ZGVzIHByZXByb2Nlc3Npbmcgc3RlcCB3aGVuIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lcyA9IHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhLmZpbmRSZXNvdXJjZXMoJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyk7XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVLZXkgPSBPYmplY3Qua2V5cyhzdGF0ZU1hY2hpbmVzKVswXTtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25TdHJpbmcgPSBzdGF0ZU1hY2hpbmVzW3N0YXRlTWFjaGluZUtleV0uUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nO1xuXG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gSlNPTi5wYXJzZShkZWZpbml0aW9uU3RyaW5nWydGbjo6Sm9pbiddWzFdLmpvaW4oJycpKTtcblxuICAgICAgLy8gVmVyaWZ5IEluaXRNZXRhZGF0YSBzdGVwIGV4aXN0cyAoY29yZSBmdW5jdGlvbmFsaXR5KVxuICAgICAgZXhwZWN0KGRlZmluaXRpb24uU3RhdGVzLkluaXRNZXRhZGF0YUVudHJ5KS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBXaGVuIHByZXByb2Nlc3NpbmcgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBpbiB0aGUgd29ya2Zsb3dcbiAgICAgIC8vIFRoZSBleGFjdCBzdHJ1Y3R1cmUgZGVwZW5kcyBvbiB0aGUgc3ViY2xhc3MgaW1wbGVtZW50YXRpb25cbiAgICAgIGV4cGVjdChkZWZpbml0aW9uLlN0YXRlcykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhkZWZpbml0aW9uLlN0YXRlcykubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdJbml0TWV0YWRhdGEgY2FuIGFjY2VwdCBhZGRpdGlvbmFsIGZpZWxkcyB2aWEgcHJlcHJvY2Vzc2luZ01ldGFkYXRhKCknLCAoKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVzID0gdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuZmluZFJlc291cmNlcygnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnKTtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUtleSA9IE9iamVjdC5rZXlzKHN0YXRlTWFjaGluZXMpWzBdO1xuICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IHN0YXRlTWFjaGluZXNbc3RhdGVNYWNoaW5lS2V5XS5Qcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmc7XG5cbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBKU09OLnBhcnNlKGRlZmluaXRpb25TdHJpbmdbJ0ZuOjpKb2luJ11bMV0uam9pbignJykpO1xuXG4gICAgICBjb25zdCBpbml0TWV0YWRhdGFTdGF0ZSA9IGRlZmluaXRpb24uU3RhdGVzLkluaXRNZXRhZGF0YUVudHJ5O1xuXG4gICAgICAvLyBWZXJpZnkgYmFzZSBmaWVsZHMgYXJlIGFsd2F5cyBwcmVzZW50XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLkRvY3VtZW50SWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLkNvbnRlbnRUeXBlKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5Db250ZW50KS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5Xb3JrZmxvd1N0YXR1cykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uU3RhdGVNYWNoaW5lRXhlY0lkKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBUaGUgbWVjaGFuaXNtIGFsbG93cyBhZGRpbmcgY3VzdG9tIGZpZWxkcyAoaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHN1YmNsYXNzKVxuICAgICAgLy8gRHluYW1vREIncyBzY2hlbWFsZXNzIG5hdHVyZSBtZWFucyBhbnkgZmllbGRzIGNhbiBiZSBhZGRlZCBhdCBydW50aW1lXG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTY2hlbWEgQ29tcGF0aWJpbGl0eScsICgpID0+IHtcbiAgICB0ZXN0KCdib3RoIGltcGxlbWVudGF0aW9ucyB1c2UgdGhlIHNhbWUgRHluYW1vREIgdGFibGUgc3RydWN0dXJlJywgKCkgPT4ge1xuICAgICAgLy8gQm90aCBzaG91bGQgY3JlYXRlIHRhYmxlcyB3aXRoIHNhbWUgcGFydGl0aW9uIGtleVxuICAgICAgdGVtcGxhdGVXaXRob3V0UHJlcHJvY2Vzc2luZy5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RHluYW1vREI6OlRhYmxlJywge1xuICAgICAgICBLZXlTY2hlbWE6IFt7XG4gICAgICAgICAgQXR0cmlidXRlTmFtZTogJ0RvY3VtZW50SWQnLFxuICAgICAgICAgIEtleVR5cGU6ICdIQVNIJyxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgS2V5U2NoZW1hOiBbe1xuICAgICAgICAgIEF0dHJpYnV0ZU5hbWU6ICdEb2N1bWVudElkJyxcbiAgICAgICAgICBLZXlUeXBlOiAnSEFTSCcsXG4gICAgICAgIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdib3RoIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgZW5jcnlwdGVkIHRhYmxlcycsICgpID0+IHtcbiAgICAgIHRlbXBsYXRlV2l0aG91dFByZXByb2Nlc3NpbmcuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgU1NFU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIFNTRUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgU1NFVHlwZTogJ0tNUycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgU1NFU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIFNTRUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgU1NFVHlwZTogJ0tNUycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2JvdGggaW1wbGVtZW50YXRpb25zIHVzZSBQQVlfUEVSX1JFUVVFU1QgYmlsbGluZycsICgpID0+IHtcbiAgICAgIHRlbXBsYXRlV2l0aG91dFByZXByb2Nlc3NpbmcuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgQmlsbGluZ01vZGU6ICdQQVlfUEVSX1JFUVVFU1QnLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpEeW5hbW9EQjo6VGFibGUnLCB7XG4gICAgICAgIEJpbGxpbmdNb2RlOiAnUEFZX1BFUl9SRVFVRVNUJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRGVzaWduIFByaW5jaXBsZTogQmFzZSBjbGFzcyBoYXMgbm8ga25vd2xlZGdlIG9mIHByZXByb2Nlc3Npbmcgc3BlY2lmaWNzJywgKCkgPT4ge1xuICAgIHRlc3QoJ2Jhc2UgY2xhc3MgcHJvdmlkZXMgZ2VuZXJpYyBleHRlbnNpb24gbWVjaGFuaXNtIHZpYSBwcmVwcm9jZXNzaW5nTWV0YWRhdGEoKScsICgpID0+IHtcbiAgICAgIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgZGVzaWduIHByaW5jaXBsZTpcbiAgICAgIC8vIC0gQmFzZSBjbGFzcyBkb2Vzbid0IGtub3cgYWJvdXQgY2h1bmtpbmcsIHZhbGlkYXRpb24sIG9yIGFueSBzcGVjaWZpYyBwcmVwcm9jZXNzaW5nXG4gICAgICAvLyAtIEJhc2UgY2xhc3Mgb25seSBwcm92aWRlcyBhIGhvb2sgKHByZXByb2Nlc3NpbmdNZXRhZGF0YSkgZm9yIHN1YmNsYXNzZXMgdG8gZXh0ZW5kXG4gICAgICAvLyAtIFN1YmNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGVpciBvd24gbWV0YWRhdGEgZmllbGRzXG5cbiAgICAgIC8vIFZlcmlmeSB0aGF0IHdpdGhvdXQgb3ZlcnJpZGluZyBwcmVwcm9jZXNzaW5nTWV0YWRhdGEoKSwgd29ya2Zsb3cgd29ya3MgY29ycmVjdGx5XG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVzID0gdGVtcGxhdGVXaXRob3V0UHJlcHJvY2Vzc2luZy5maW5kUmVzb3VyY2VzKCdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScpO1xuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lS2V5ID0gT2JqZWN0LmtleXMoc3RhdGVNYWNoaW5lcylbMF07XG4gICAgICBjb25zdCBkZWZpbml0aW9uU3RyaW5nID0gc3RhdGVNYWNoaW5lc1tzdGF0ZU1hY2hpbmVLZXldLlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZztcbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBKU09OLnBhcnNlKGRlZmluaXRpb25TdHJpbmdbJ0ZuOjpKb2luJ11bMV0uam9pbignJykpO1xuXG4gICAgICBjb25zdCBpbml0TWV0YWRhdGFTdGF0ZSA9IGRlZmluaXRpb24uU3RhdGVzLkluaXRNZXRhZGF0YUVudHJ5O1xuXG4gICAgICAvLyBCYXNlIGZpZWxkcyBhcmUgYWx3YXlzIHByZXNlbnRcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uRG9jdW1lbnRJZCkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbml0TWV0YWRhdGFTdGF0ZS5QYXJhbWV0ZXJzLkl0ZW0uQ29udGVudFR5cGUpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLkNvbnRlbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoaW5pdE1ldGFkYXRhU3RhdGUuUGFyYW1ldGVycy5JdGVtLldvcmtmbG93U3RhdHVzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGluaXRNZXRhZGF0YVN0YXRlLlBhcmFtZXRlcnMuSXRlbS5TdGF0ZU1hY2hpbmVFeGVjSWQpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdWJjbGFzc2VzIGNhbiBleHRlbmQgdmlhIHByZXByb2Nlc3NpbmdNZXRhZGF0YSgpIHdpdGhvdXQgYnJlYWtpbmcgYmFzZSBmdW5jdGlvbmFsaXR5JywgKCkgPT4ge1xuICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbnN0cnVjdCB3aXRoIGN1c3RvbSBtZXRhZGF0YSBzdGlsbCBoYXMgYWxsIGJhc2UgZnVuY3Rpb25hbGl0eVxuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEucmVzb3VyY2VDb3VudElzKCdBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZScsIDEpO1xuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEucmVzb3VyY2VDb3VudElzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIDEpO1xuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEucmVzb3VyY2VDb3VudElzKCdBV1M6OlMzOjpCdWNrZXQnLCAxKTtcblxuICAgICAgLy8gVmVyaWZ5IHN0YXRlIG1hY2hpbmUgaGFzIHRoZSBzYW1lIGJhc2Ugc3RydWN0dXJlXG4gICAgICBjb25zdCBzdGF0ZU1hY2hpbmVzID0gdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuZmluZFJlc291cmNlcygnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnKTtcbiAgICAgIGNvbnN0IHN0YXRlTWFjaGluZUtleSA9IE9iamVjdC5rZXlzKHN0YXRlTWFjaGluZXMpWzBdO1xuICAgICAgY29uc3QgZGVmaW5pdGlvblN0cmluZyA9IHN0YXRlTWFjaGluZXNbc3RhdGVNYWNoaW5lS2V5XS5Qcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmc7XG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gSlNPTi5wYXJzZShkZWZpbml0aW9uU3RyaW5nWydGbjo6Sm9pbiddWzFdLmpvaW4oJycpKTtcblxuICAgICAgLy8gQ29yZSBzdGF0ZXMgc2hvdWxkIGV4aXN0XG4gICAgICBleHBlY3QoZGVmaW5pdGlvbi5TdGF0ZXMuSW5pdE1ldGFkYXRhRW50cnkpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoZGVmaW5pdGlvbi5TdGF0ZXMuTW9ja0NsYXNzaWZpY2F0aW9uKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGRlZmluaXRpb24uU3RhdGVzLk1vY2tQcm9jZXNzaW5nKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRHluYW1vREIgc2NoZW1hbGVzcyBuYXR1cmUgc3VwcG9ydHMgcnVudGltZSBmaWVsZCBhZGRpdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdEeW5hbW9EQiB0YWJsZSBzdXBwb3J0cyBhbnkgYWRkaXRpb25hbCBmaWVsZHMgYXQgcnVudGltZScsICgpID0+IHtcbiAgICAgIC8vIER5bmFtb0RCIGlzIHNjaGVtYWxlc3MsIHNvIGFueSBmaWVsZHMgY2FuIGJlIGFkZGVkIGF0IHJ1bnRpbWVcbiAgICAgIC8vIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgdGFibGUgaXMgY3JlYXRlZCBjb3JyZWN0bHkgYW5kIGNhbiBhY2NlcHQgYW55IGF0dHJpYnV0ZXNcblxuICAgICAgdGVtcGxhdGVXaXRoQ3VzdG9tTWV0YWRhdGEuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkR5bmFtb0RCOjpUYWJsZScsIHtcbiAgICAgICAgS2V5U2NoZW1hOiBbe1xuICAgICAgICAgIEF0dHJpYnV0ZU5hbWU6ICdEb2N1bWVudElkJyxcbiAgICAgICAgICBLZXlUeXBlOiAnSEFTSCcsXG4gICAgICAgIH1dLFxuICAgICAgICBCaWxsaW5nTW9kZTogJ1BBWV9QRVJfUkVRVUVTVCcsXG4gICAgICB9KTtcblxuICAgICAgLy8gTm8gYXR0cmlidXRlIGRlZmluaXRpb25zIG5lZWRlZCBmb3Igbm9uLWtleSBhdHRyaWJ1dGVzIGluIER5bmFtb0RCXG4gICAgICAvLyBGaWVsZHMgbGlrZSBBZ2dyZWdhdGVkUmVzdWx0IGNhbiBiZSBhZGRlZCB2aWEgRHluYW1vVXBkYXRlSXRlbSBkdXJpbmcgcHJvY2Vzc2luZ1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc3RhdGUgbWFjaGluZSBoYXMgcGVybWlzc2lvbnMgdG8gdXBkYXRlIER5bmFtb0RCIGl0ZW1zJywgKCkgPT4ge1xuICAgICAgLy8gVmVyaWZ5IHRoZSBzdGF0ZSBtYWNoaW5lIHJvbGUgaGFzIFVwZGF0ZUl0ZW0gcGVybWlzc2lvbnNcbiAgICAgIC8vIFRoaXMgYWxsb3dzIGFkZGluZyBmaWVsZHMgbGlrZSBBZ2dyZWdhdGVkUmVzdWx0IGR1cmluZyBwcm9jZXNzaW5nXG4gICAgICBjb25zdCBwb2xpY2llcyA9IHRlbXBsYXRlV2l0aEN1c3RvbU1ldGFkYXRhLmZpbmRSZXNvdXJjZXMoJ0FXUzo6SUFNOjpQb2xpY3knKTtcblxuICAgICAgLy8gRmluZCB0aGUgc3RhdGUgbWFjaGluZSByb2xlIHBvbGljeVxuICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lUG9saWN5ID0gT2JqZWN0LnZhbHVlcyhwb2xpY2llcykuZmluZCgocG9saWN5OiBhbnkpID0+XG4gICAgICAgIHBvbGljeS5Qcm9wZXJ0aWVzLlBvbGljeU5hbWUuaW5jbHVkZXMoJ1N0YXRlTWFjaGluZVJvbGUnKSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzdGF0ZU1hY2hpbmVQb2xpY3kpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgaXQgaGFzIER5bmFtb0RCIFVwZGF0ZUl0ZW0gcGVybWlzc2lvbnNcbiAgICAgIGNvbnN0IHN0YXRlbWVudHMgPSAoc3RhdGVNYWNoaW5lUG9saWN5IGFzIGFueSkuUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQ7XG4gICAgICBjb25zdCBkeW5hbW9TdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzLmZpbmQoKHN0bXQ6IGFueSkgPT5cbiAgICAgICAgc3RtdC5BY3Rpb24gJiYgKFxuICAgICAgICAgIChBcnJheS5pc0FycmF5KHN0bXQuQWN0aW9uKSAmJiBzdG10LkFjdGlvbi5pbmNsdWRlcygnZHluYW1vZGI6VXBkYXRlSXRlbScpKSB8fFxuICAgICAgICAgIHN0bXQuQWN0aW9uID09PSAnZHluYW1vZGI6VXBkYXRlSXRlbSdcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChkeW5hbW9TdGF0ZW1lbnQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QoZHluYW1vU3RhdGVtZW50LkVmZmVjdCkudG9CZSgnQWxsb3cnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==