@cdklabs/cdk-appmod-catalog-blueprints 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/.jsii +2537 -204
  2. package/lib/document-processing/adapter/adapter.d.ts +4 -2
  3. package/lib/document-processing/adapter/adapter.js +1 -1
  4. package/lib/document-processing/adapter/queued-s3-adapter.d.ts +9 -2
  5. package/lib/document-processing/adapter/queued-s3-adapter.js +29 -15
  6. package/lib/document-processing/agentic-document-processing.d.ts +4 -0
  7. package/lib/document-processing/agentic-document-processing.js +20 -10
  8. package/lib/document-processing/base-document-processing.d.ts +54 -2
  9. package/lib/document-processing/base-document-processing.js +136 -82
  10. package/lib/document-processing/bedrock-document-processing.d.ts +202 -2
  11. package/lib/document-processing/bedrock-document-processing.js +717 -77
  12. package/lib/document-processing/chunking-config.d.ts +614 -0
  13. package/lib/document-processing/chunking-config.js +5 -0
  14. package/lib/document-processing/default-document-processing-config.js +1 -1
  15. package/lib/document-processing/index.d.ts +1 -0
  16. package/lib/document-processing/index.js +2 -1
  17. package/lib/document-processing/resources/aggregation/handler.py +567 -0
  18. package/lib/document-processing/resources/aggregation/requirements.txt +7 -0
  19. package/lib/document-processing/resources/aggregation/test_handler.py +362 -0
  20. package/lib/document-processing/resources/cleanup/handler.py +276 -0
  21. package/lib/document-processing/resources/cleanup/requirements.txt +5 -0
  22. package/lib/document-processing/resources/cleanup/test_handler.py +436 -0
  23. package/lib/document-processing/resources/default-bedrock-invoke/index.py +85 -3
  24. package/lib/document-processing/resources/default-bedrock-invoke/test_index.py +622 -0
  25. package/lib/document-processing/resources/pdf-chunking/README.md +313 -0
  26. package/lib/document-processing/resources/pdf-chunking/chunking_strategies.py +460 -0
  27. package/lib/document-processing/resources/pdf-chunking/error_handling.py +491 -0
  28. package/lib/document-processing/resources/pdf-chunking/handler.py +958 -0
  29. package/lib/document-processing/resources/pdf-chunking/metrics.py +435 -0
  30. package/lib/document-processing/resources/pdf-chunking/requirements.txt +3 -0
  31. package/lib/document-processing/resources/pdf-chunking/strategy_selection.py +420 -0
  32. package/lib/document-processing/resources/pdf-chunking/structured_logging.py +457 -0
  33. package/lib/document-processing/resources/pdf-chunking/test_chunking_strategies.py +353 -0
  34. package/lib/document-processing/resources/pdf-chunking/test_error_handling.py +487 -0
  35. package/lib/document-processing/resources/pdf-chunking/test_handler.py +609 -0
  36. package/lib/document-processing/resources/pdf-chunking/test_integration.py +694 -0
  37. package/lib/document-processing/resources/pdf-chunking/test_metrics.py +532 -0
  38. package/lib/document-processing/resources/pdf-chunking/test_strategy_selection.py +471 -0
  39. package/lib/document-processing/resources/pdf-chunking/test_structured_logging.py +449 -0
  40. package/lib/document-processing/resources/pdf-chunking/test_token_estimation.py +374 -0
  41. package/lib/document-processing/resources/pdf-chunking/token_estimation.py +189 -0
  42. package/lib/document-processing/tests/agentic-document-processing-nag.test.js +4 -3
  43. package/lib/document-processing/tests/agentic-document-processing.test.js +488 -4
  44. package/lib/document-processing/tests/base-document-processing-nag.test.js +9 -2
  45. package/lib/document-processing/tests/base-document-processing-schema.test.d.ts +1 -0
  46. package/lib/document-processing/tests/base-document-processing-schema.test.js +337 -0
  47. package/lib/document-processing/tests/base-document-processing.test.js +114 -8
  48. package/lib/document-processing/tests/bedrock-document-processing-chunking-nag.test.d.ts +1 -0
  49. package/lib/document-processing/tests/bedrock-document-processing-chunking-nag.test.js +382 -0
  50. package/lib/document-processing/tests/bedrock-document-processing-nag.test.js +4 -3
  51. package/lib/document-processing/tests/bedrock-document-processing-security.test.d.ts +1 -0
  52. package/lib/document-processing/tests/bedrock-document-processing-security.test.js +389 -0
  53. package/lib/document-processing/tests/bedrock-document-processing.test.js +808 -8
  54. package/lib/document-processing/tests/chunking-config.test.d.ts +1 -0
  55. package/lib/document-processing/tests/chunking-config.test.js +238 -0
  56. package/lib/document-processing/tests/queued-s3-adapter-nag.test.js +9 -2
  57. package/lib/document-processing/tests/queued-s3-adapter.test.js +17 -6
  58. package/lib/framework/agents/base-agent.js +1 -1
  59. package/lib/framework/agents/batch-agent.js +1 -1
  60. package/lib/framework/agents/default-agent-config.js +1 -1
  61. package/lib/framework/bedrock/bedrock.js +1 -1
  62. package/lib/framework/custom-resource/default-runtimes.js +1 -1
  63. package/lib/framework/foundation/access-log.js +1 -1
  64. package/lib/framework/foundation/eventbridge-broker.js +1 -1
  65. package/lib/framework/foundation/network.js +1 -1
  66. package/lib/framework/tests/access-log.test.js +5 -2
  67. package/lib/framework/tests/batch-agent.test.js +5 -2
  68. package/lib/framework/tests/bedrock.test.js +5 -2
  69. package/lib/framework/tests/eventbridge-broker.test.js +5 -2
  70. package/lib/framework/tests/framework-nag.test.js +16 -8
  71. package/lib/framework/tests/network.test.js +9 -4
  72. package/lib/tsconfig.tsbuildinfo +1 -1
  73. package/lib/utilities/data-loader.js +1 -1
  74. package/lib/utilities/lambda-iam-utils.js +1 -1
  75. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
  76. package/lib/utilities/observability/default-observability-config.js +1 -1
  77. package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
  78. package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
  79. package/lib/utilities/observability/powertools-config.d.ts +10 -1
  80. package/lib/utilities/observability/powertools-config.js +19 -3
  81. package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
  82. package/lib/utilities/test-utils.d.ts +43 -0
  83. package/lib/utilities/test-utils.js +56 -0
  84. package/lib/utilities/tests/data-loader-nag.test.js +3 -2
  85. package/lib/utilities/tests/data-loader.test.js +3 -2
  86. package/lib/webapp/frontend-construct.js +1 -1
  87. package/lib/webapp/tests/frontend-construct-nag.test.js +3 -2
  88. package/lib/webapp/tests/frontend-construct.test.js +3 -2
  89. package/package.json +6 -5
  90. package/lib/document-processing/resources/default-error-handler/index.js +0 -46
  91. package/lib/document-processing/resources/default-pdf-processor/index.js +0 -46
  92. package/lib/document-processing/resources/default-pdf-validator/index.js +0 -36
@@ -3,11 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const aws_cdk_lib_1 = require("aws-cdk-lib");
4
4
  const assertions_1 = require("aws-cdk-lib/assertions");
5
5
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
6
+ const test_utils_1 = require("../../utilities/test-utils");
6
7
  const network_1 = require("../foundation/network");
7
8
  describe('Network', () => {
9
+ let app;
8
10
  let stack;
9
11
  beforeEach(() => {
10
- stack = new aws_cdk_lib_1.Stack();
12
+ app = (0, test_utils_1.createTestApp)();
13
+ stack = new aws_cdk_lib_1.Stack(app, 'TestStack');
11
14
  });
12
15
  test('creates VPC with default configuration', () => {
13
16
  new network_1.Network(stack, 'Network');
@@ -117,7 +120,8 @@ describe('Network', () => {
117
120
  expect(selection.subnetType).toBe(aws_ec2_1.SubnetType.PRIVATE_ISOLATED);
118
121
  });
119
122
  test('uses existing VPC from lookup', () => {
120
- const envStack = new aws_cdk_lib_1.Stack(undefined, 'TestStack', {
123
+ const envApp = (0, test_utils_1.createTestApp)();
124
+ const envStack = new aws_cdk_lib_1.Stack(envApp, 'TestStack', {
121
125
  env: { account: '123456789012', region: 'us-east-1' },
122
126
  });
123
127
  const network = network_1.Network.useExistingVPCFromLookup(envStack, 'Network', {
@@ -128,7 +132,8 @@ describe('Network', () => {
128
132
  template.resourceCountIs('AWS::EC2::VPC', 0);
129
133
  });
130
134
  test('existing VPC works with createServiceEndpoint', () => {
131
- const envStack = new aws_cdk_lib_1.Stack(undefined, 'TestStack', {
135
+ const envApp = (0, test_utils_1.createTestApp)();
136
+ const envStack = new aws_cdk_lib_1.Stack(envApp, 'TestStack', {
132
137
  env: { account: '123456789012', region: 'us-east-1' },
133
138
  });
134
139
  const network = network_1.Network.useExistingVPCFromLookup(envStack, 'Network', {
@@ -140,4 +145,4 @@ describe('Network', () => {
140
145
  template.resourceCountIs('AWS::EC2::SecurityGroup', 1);
141
146
  });
142
147
  });
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2ZyYW1ld29yay90ZXN0cy9uZXR3b3JrLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBb0M7QUFDcEMsdURBQXlEO0FBQ3pELGlEQUFvRztBQUNwRyxtREFBZ0Q7QUFFaEQsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDdkIsSUFBSSxLQUFZLENBQUM7SUFFakIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEtBQUssR0FBRyxJQUFJLG1CQUFLLEVBQUUsQ0FBQztJQUN0QixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7UUFDbEQsSUFBSSxpQkFBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU5QixNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxRQUFRLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QyxRQUFRLENBQUMscUJBQXFCLENBQUMsZUFBZSxFQUFFO1lBQzlDLFNBQVMsRUFBRSxhQUFhO1NBQ3pCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDBEQUEwRCxFQUFFLEdBQUcsRUFBRTtRQUNwRSxJQUFJLGlCQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTlCLE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FB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QUFNLE9BQU8sR0FBRyxpQkFBTyxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUU7WUFDcEUsS0FBSyxFQUFFLGNBQWM7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxRQUFRLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7UUFDekQsTUFBTSxRQUFRLEdBQUcsSUFBSSxtQkFBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUU7WUFDakQsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO1NBQ3RELENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLGlCQUFPLENBQUMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRTtZQUNwRSxLQUFLLEVBQUUsY0FBYztTQUN0QixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLHdDQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9FLE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLFFBQVEsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsUUFBUSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUZW1wbGF0ZSwgTWF0Y2ggfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSwgSXBBZGRyZXNzZXMsIFBlZXIsIFN1Ym5ldFR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9mb3VuZGF0aW9uL25ldHdvcmsnO1xuXG5kZXNjcmliZSgnTmV0d29yaycsICgpID0+IHtcbiAgbGV0IHN0YWNrOiBTdGFjaztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBzdGFjayA9IG5ldyBTdGFjaygpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIFZQQyB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICBuZXcgTmV0d29yayhzdGFjaywgJ05ldHdvcmsnKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpWUEMnLCAxKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUEMnLCB7XG4gICAgICBDaWRyQmxvY2s6ICcxMC4wLjAuMC8xNicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgcHVibGljLCBwcml2YXRlLCBhbmQgaXNvbGF0ZWQgc3VibmV0cyBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgIG5ldyBOZXR3b3JrKHN0YWNrLCAnTmV0d29yaycpO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIGNvbnN0IHN1Ym5ldHMgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKCdBV1M6OkVDMjo6U3VibmV0Jyk7XG4gICAgZXhwZWN0KE9iamVjdC5rZXlzKHN1Ym5ldHMpLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuXG4gICAgY29uc3Qgc3VibmV0VGFncyA9IE9iamVjdC52YWx1ZXMoc3VibmV0cykubWFwKChzOiBhbnkpID0+XG4gICAgICBzLlByb3BlcnRpZXMuVGFncz8uZmluZCgodDogYW55KSA9PiB0LktleSA9PT0gJ2F3cy1jZGs6c3VibmV0LW5hbWUnKT8uVmFsdWUsXG4gICAgKTtcblxuICAgIGV4cGVjdChzdWJuZXRUYWdzKS50b0NvbnRhaW4oJ1B1YmxpYycpO1xuICAgIGV4cGVjdChzdWJuZXRUYWdzKS50b0NvbnRhaW4oJ1ByaXZhdGUnKTtcbiAgICBleHBlY3Qoc3VibmV0VGFncykudG9Db250YWluKCdJc29sYXRlZCcpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIE5BVCBnYXRld2F5IGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJyk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6TmF0R2F0ZXdheScsIDEpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIHByaXZhdGUgVlBDIHdpdGhvdXQgTkFUIGdhdGV3YXknLCAoKSA9PiB7XG4gICAgbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJywgeyBwcml2YXRlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpFQzI6Ok5hdEdhdGV3YXknLCAwKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpJbnRlcm5ldEdhdGV3YXknLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlcyBvbmx5IGlzb2xhdGVkIHN1Ym5ldHMgZm9yIHByaXZhdGUgVlBDJywgKCkgPT4ge1xuICAgIG5ldyBOZXR3b3JrKHN0YWNrLCAnTmV0d29yaycsIHsgcHJpdmF0ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICBjb25zdCBzdWJuZXRzID0gdGVtcGxhdGUuZmluZFJlc291cmNlcygnQVdTOjpFQzI6OlN1Ym5ldCcpO1xuICAgIGNvbnN0IHN1Ym5ldFRhZ3MgPSBPYmplY3QudmFsdWVzKHN1Ym5ldHMpLm1hcCgoczogYW55KSA9PlxuICAgICAgcy5Qcm9wZXJ0aWVzLlRhZ3M/LmZpbmQoKHQ6IGFueSkgPT4gdC5LZXkgPT09ICdhd3MtY2RrOnN1Ym5ldC1uYW1lJyk/LlZhbHVlLFxuICAgICk7XG5cbiAgICBleHBlY3Qoc3VibmV0VGFncy5ldmVyeSgodGFnOiBzdHJpbmcpID0+IHRhZyA9PT0gJ0lzb2xhdGVkJykpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3VzZXMgY3VzdG9tIENJRFIgYmxvY2snLCAoKSA9PiB7XG4gICAgbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJywge1xuICAgICAgaXBBZGRyZXNzZXM6IElwQWRkcmVzc2VzLmNpZHIoJzE3Mi4xNi4wLjAvMTYnKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUEMnLCB7XG4gICAgICBDaWRyQmxvY2s6ICcxNzIuMTYuMC4wLzE2JyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnY29uZmlndXJlcyBjdXN0b20gTkFUIGdhdGV3YXlzIGNvdW50JywgKCkgPT4ge1xuICAgIG5ldyBOZXR3b3JrKHN0YWNrLCAnTmV0d29yaycsIHsgbmF0R2F0ZXdheXM6IDIgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6TmF0R2F0ZXdheScsIDIpO1xuICB9KTtcblxuICB0ZXN0KCdzZXRzIGN1c3RvbSBWUEMgbmFtZScsICgpID0+IHtcbiAgICBuZXcgTmV0d29yayhzdGFjaywgJ05ldHdvcmsnLCB7IHZwY05hbWU6ICdNeUN1c3RvbVZQQycgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVDMjo6VlBDJywge1xuICAgICAgVGFnczogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgeyBLZXk6ICdOYW1lJywgVmFsdWU6ICdNeUN1c3RvbVZQQycgfSxcbiAgICAgIF0pLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIGludGVyZmFjZSBlbmRwb2ludCB3aXRoIHNlY3VyaXR5IGdyb3VwJywgKCkgPT4ge1xuICAgIGNvbnN0IG5ldHdvcmsgPSBuZXcgTmV0d29yayhzdGFjaywgJ05ldHdvcmsnKTtcbiAgICBuZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgnTGFtYmRhJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkxBTUJEQSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6VlBDRW5kcG9pbnQnLCAxKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIHtcbiAgICAgIFZwY0VuZHBvaW50VHlwZTogJ0ludGVyZmFjZScsXG4gICAgfSk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6U2VjdXJpdHlHcm91cCcsIDEpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIFMzIGdhdGV3YXkgZW5kcG9pbnQgd2hlbiBTMyBzZXJ2aWNlIHJlcXVlc3RlZCcsICgpID0+IHtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJyk7XG4gICAgbmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ1MzJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlMzKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIHtcbiAgICAgIFNlcnZpY2VOYW1lOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgJ0ZuOjpKb2luJzogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICBNYXRjaC5hcnJheVdpdGgoW01hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ3MzJyldKSxcbiAgICAgICAgXSksXG4gICAgICB9KSxcbiAgICAgIFZwY0VuZHBvaW50VHlwZTogJ0dhdGV3YXknLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdzZWN1cml0eSBncm91cCBhbGxvd3MgSFRUUFMgZnJvbSBjdXN0b20gcGVlcicsICgpID0+IHtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJyk7XG4gICAgbmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ0xhbWJkYScsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5MQU1CREEsIFBlZXIuaXB2NCgnMTAuMC4wLjAvOCcpKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwJywge1xuICAgICAgU2VjdXJpdHlHcm91cEluZ3Jlc3M6IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgIE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgIElwUHJvdG9jb2w6ICd0Y3AnLFxuICAgICAgICAgIEZyb21Qb3J0OiA0NDMsXG4gICAgICAgICAgVG9Qb3J0OiA0NDMsXG4gICAgICAgICAgQ2lkcklwOiAnMTAuMC4wLjAvOCcsXG4gICAgICAgIH0pLFxuICAgICAgXSksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uIHJldHVybnMgY29ycmVjdCBzdWJuZXQgdHlwZSBmb3IgcHVibGljIFZQQycsICgpID0+IHtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJyk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV0d29yay5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpO1xuICAgIGV4cGVjdChzZWxlY3Rpb24uc3VibmV0VHlwZSkudG9CZShTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MpO1xuICB9KTtcblxuICB0ZXN0KCdhcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbiByZXR1cm5zIGNvcnJlY3Qgc3VibmV0IHR5cGUgZm9yIHByaXZhdGUgVlBDJywgKCkgPT4ge1xuICAgIGNvbnN0IG5ldHdvcmsgPSBuZXcgTmV0d29yayhzdGFjaywgJ05ldHdvcmsnLCB7IHByaXZhdGU6IHRydWUgfSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV0d29yay5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpO1xuICAgIGV4cGVjdChzZWxlY3Rpb24uc3VibmV0VHlwZSkudG9CZShTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQpO1xuICB9KTtcblxuICB0ZXN0KCd1c2VzIGV4aXN0aW5nIFZQQyBmcm9tIGxvb2t1cCcsICgpID0+IHtcbiAgICBjb25zdCBlbnZTdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICdUZXN0U3RhY2snLCB7XG4gICAgICBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ3VzLWVhc3QtMScgfSxcbiAgICB9KTtcbiAgICBjb25zdCBuZXR3b3JrID0gTmV0d29yay51c2VFeGlzdGluZ1ZQQ0Zyb21Mb29rdXAoZW52U3RhY2ssICdOZXR3b3JrJywge1xuICAgICAgdnBjSWQ6ICd2cGMtMTIzNDU2NzgnLFxuICAgIH0pO1xuXG4gICAgZXhwZWN0KG5ldHdvcmsudnBjKS50b0JlRGVmaW5lZCgpO1xuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKGVudlN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpWUEMnLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnZXhpc3RpbmcgVlBDIHdvcmtzIHdpdGggY3JlYXRlU2VydmljZUVuZHBvaW50JywgKCkgPT4ge1xuICAgIGNvbnN0IGVudlN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ1Rlc3RTdGFjaycsIHtcbiAgICAgIGVudjogeyBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAndXMtZWFzdC0xJyB9LFxuICAgIH0pO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBOZXR3b3JrLnVzZUV4aXN0aW5nVlBDRnJvbUxvb2t1cChlbnZTdGFjaywgJ05ldHdvcmsnLCB7XG4gICAgICB2cGNJZDogJ3ZwYy0xMjM0NTY3OCcsXG4gICAgfSk7XG4gICAgbmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ0xhbWJkYScsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5MQU1CREEpO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soZW52U3RhY2spO1xuICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpFQzI6OlZQQ0VuZHBvaW50JywgMSk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6U2VjdXJpdHlHcm91cCcsIDEpO1xuICB9KTtcbn0pO1xuIl19
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL2ZyYW1ld29yay90ZXN0cy9uZXR3b3JrLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBb0M7QUFDcEMsdURBQXlEO0FBQ3pELGlEQUFvRztBQUNwRywyREFBMkQ7QUFDM0QsbURBQWdEO0FBRWhELFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0lBQ3ZCLElBQUksR0FBcUMsQ0FBQztJQUMxQyxJQUFJLEtBQVksQ0FBQztJQUVqQixVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2QsR0FBRyxHQUFHLElBQUEsMEJBQWEsR0FBRSxDQUFDO1FBQ3RCLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxJQUFJLGlCQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTlCLE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEVBQUU7WUFDOUMsU0FBUyxFQUFFLGFBQWE7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsMERBQTBELEVBQUUsR0FBRyxFQUFFO1FBQ3BFLElBQUksaUJBQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUIsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxrQkFB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QUNyRCxRQUFRLENBQUMsZUFBZSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFRlbXBsYXRlLCBNYXRjaCB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHsgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLCBJcEFkZHJlc3NlcywgUGVlciwgU3VibmV0VHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgY3JlYXRlVGVzdEFwcCB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy90ZXN0LXV0aWxzJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9mb3VuZGF0aW9uL25ldHdvcmsnO1xuXG5kZXNjcmliZSgnTmV0d29yaycsICgpID0+IHtcbiAgbGV0IGFwcDogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlVGVzdEFwcD47XG4gIGxldCBzdGFjazogU3RhY2s7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgYXBwID0gY3JlYXRlVGVzdEFwcCgpO1xuICAgIHN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1Rlc3RTdGFjaycpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIFZQQyB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICBuZXcgTmV0d29yayhzdGFjaywgJ05ldHdvcmsnKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpWUEMnLCAxKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUEMnLCB7XG4gICAgICBDaWRyQmxvY2s6ICcxMC4wLjAuMC8xNicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2NyZWF0ZXMgcHVibGljLCBwcml2YXRlLCBhbmQgaXNvbGF0ZWQgc3VibmV0cyBieSBkZWZhdWx0JywgKCkgPT4ge1xuICAgIG5ldyBOZXR3b3JrKHN0YWNrLCAnTmV0d29yaycpO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIGNvbnN0IHN1Ym5ldHMgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKCdBV1M6OkVDMjo6U3VibmV0Jyk7XG4gICAgZXhwZWN0KE9iamVjdC5rZXlzKHN1Ym5ldHMpLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDApO1xuXG4gICAgY29uc3Qgc3VibmV0VGFncyA9IE9iamVjdC52YWx1ZXMoc3VibmV0cykubWFwKChzOiBhbnkpID0+XG4gICAgICBzLlByb3BlcnRpZXMuVGFncz8uZmluZCgodDogYW55KSA9PiB0LktleSA9PT0gJ2F3cy1jZGs6c3VibmV0LW5hbWUnKT8uVmFsdWUsXG4gICAgKTtcblxuICAgIGV4cGVjdChzdWJuZXRUYWdzKS50b0NvbnRhaW4oJ1B1YmxpYycpO1xuICAgIGV4cGVjdChzdWJuZXRUYWdzKS50b0NvbnRhaW4oJ1ByaXZhdGUnKTtcbiAgICBleHBlY3Qoc3VibmV0VGFncykudG9Db250YWluKCdJc29sYXRlZCcpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIE5BVCBnYXRld2F5IGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJyk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6TmF0R2F0ZXdheScsIDEpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIHByaXZhdGUgVlBDIHdpdGhvdXQgTkFUIGdhdGV3YXknLCAoKSA9PiB7XG4gICAgbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJywgeyBwcml2YXRlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpFQzI6Ok5hdEdhdGV3YXknLCAwKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpJbnRlcm5ldEdhdGV3YXknLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlcyBvbmx5IGlzb2xhdGVkIHN1Ym5ldHMgZm9yIHByaXZhdGUgVlBDJywgKCkgPT4ge1xuICAgIG5ldyBOZXR3b3JrKHN0YWNrLCAnTmV0d29yaycsIHsgcHJpdmF0ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICBjb25zdCBzdWJuZXRzID0gdGVtcGxhdGUuZmluZFJlc291cmNlcygnQVdTOjpFQzI6OlN1Ym5ldCcpO1xuICAgIGNvbnN0IHN1Ym5ldFRhZ3MgPSBPYmplY3QudmFsdWVzKHN1Ym5ldHMpLm1hcCgoczogYW55KSA9PlxuICAgICAgcy5Qcm9wZXJ0aWVzLlRhZ3M/LmZpbmQoKHQ6IGFueSkgPT4gdC5LZXkgPT09ICdhd3MtY2RrOnN1Ym5ldC1uYW1lJyk/LlZhbHVlLFxuICAgICk7XG5cbiAgICBleHBlY3Qoc3VibmV0VGFncy5ldmVyeSgodGFnOiBzdHJpbmcpID0+IHRhZyA9PT0gJ0lzb2xhdGVkJykpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3VzZXMgY3VzdG9tIENJRFIgYmxvY2snLCAoKSA9PiB7XG4gICAgbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJywge1xuICAgICAgaXBBZGRyZXNzZXM6IElwQWRkcmVzc2VzLmNpZHIoJzE3Mi4xNi4wLjAvMTYnKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUEMnLCB7XG4gICAgICBDaWRyQmxvY2s6ICcxNzIuMTYuMC4wLzE2JyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnY29uZmlndXJlcyBjdXN0b20gTkFUIGdhdGV3YXlzIGNvdW50JywgKCkgPT4ge1xuICAgIG5ldyBOZXR3b3JrKHN0YWNrLCAnTmV0d29yaycsIHsgbmF0R2F0ZXdheXM6IDIgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6TmF0R2F0ZXdheScsIDIpO1xuICB9KTtcblxuICB0ZXN0KCdzZXRzIGN1c3RvbSBWUEMgbmFtZScsICgpID0+IHtcbiAgICBuZXcgTmV0d29yayhzdGFjaywgJ05ldHdvcmsnLCB7IHZwY05hbWU6ICdNeUN1c3RvbVZQQycgfSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVDMjo6VlBDJywge1xuICAgICAgVGFnczogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgeyBLZXk6ICdOYW1lJywgVmFsdWU6ICdNeUN1c3RvbVZQQycgfSxcbiAgICAgIF0pLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIGludGVyZmFjZSBlbmRwb2ludCB3aXRoIHNlY3VyaXR5IGdyb3VwJywgKCkgPT4ge1xuICAgIGNvbnN0IG5ldHdvcmsgPSBuZXcgTmV0d29yayhzdGFjaywgJ05ldHdvcmsnKTtcbiAgICBuZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgnTGFtYmRhJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkxBTUJEQSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6VlBDRW5kcG9pbnQnLCAxKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIHtcbiAgICAgIFZwY0VuZHBvaW50VHlwZTogJ0ludGVyZmFjZScsXG4gICAgfSk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6U2VjdXJpdHlHcm91cCcsIDEpO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVzIFMzIGdhdGV3YXkgZW5kcG9pbnQgd2hlbiBTMyBzZXJ2aWNlIHJlcXVlc3RlZCcsICgpID0+IHtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJyk7XG4gICAgbmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ1MzJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlMzKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIHtcbiAgICAgIFNlcnZpY2VOYW1lOiBNYXRjaC5vYmplY3RMaWtlKHtcbiAgICAgICAgJ0ZuOjpKb2luJzogTWF0Y2guYXJyYXlXaXRoKFtcbiAgICAgICAgICBNYXRjaC5hcnJheVdpdGgoW01hdGNoLnN0cmluZ0xpa2VSZWdleHAoJ3MzJyldKSxcbiAgICAgICAgXSksXG4gICAgICB9KSxcbiAgICAgIFZwY0VuZHBvaW50VHlwZTogJ0dhdGV3YXknLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdzZWN1cml0eSBncm91cCBhbGxvd3MgSFRUUFMgZnJvbSBjdXN0b20gcGVlcicsICgpID0+IHtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJyk7XG4gICAgbmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ0xhbWJkYScsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5MQU1CREEsIFBlZXIuaXB2NCgnMTAuMC4wLjAvOCcpKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwJywge1xuICAgICAgU2VjdXJpdHlHcm91cEluZ3Jlc3M6IE1hdGNoLmFycmF5V2l0aChbXG4gICAgICAgIE1hdGNoLm9iamVjdExpa2Uoe1xuICAgICAgICAgIElwUHJvdG9jb2w6ICd0Y3AnLFxuICAgICAgICAgIEZyb21Qb3J0OiA0NDMsXG4gICAgICAgICAgVG9Qb3J0OiA0NDMsXG4gICAgICAgICAgQ2lkcklwOiAnMTAuMC4wLjAvOCcsXG4gICAgICAgIH0pLFxuICAgICAgXSksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uIHJldHVybnMgY29ycmVjdCBzdWJuZXQgdHlwZSBmb3IgcHVibGljIFZQQycsICgpID0+IHtcbiAgICBjb25zdCBuZXR3b3JrID0gbmV3IE5ldHdvcmsoc3RhY2ssICdOZXR3b3JrJyk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV0d29yay5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpO1xuICAgIGV4cGVjdChzZWxlY3Rpb24uc3VibmV0VHlwZSkudG9CZShTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MpO1xuICB9KTtcblxuICB0ZXN0KCdhcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbiByZXR1cm5zIGNvcnJlY3Qgc3VibmV0IHR5cGUgZm9yIHByaXZhdGUgVlBDJywgKCkgPT4ge1xuICAgIGNvbnN0IG5ldHdvcmsgPSBuZXcgTmV0d29yayhzdGFjaywgJ05ldHdvcmsnLCB7IHByaXZhdGU6IHRydWUgfSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV0d29yay5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpO1xuICAgIGV4cGVjdChzZWxlY3Rpb24uc3VibmV0VHlwZSkudG9CZShTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQpO1xuICB9KTtcblxuICB0ZXN0KCd1c2VzIGV4aXN0aW5nIFZQQyBmcm9tIGxvb2t1cCcsICgpID0+IHtcbiAgICBjb25zdCBlbnZBcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgY29uc3QgZW52U3RhY2sgPSBuZXcgU3RhY2soZW52QXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgY29uc3QgbmV0d29yayA9IE5ldHdvcmsudXNlRXhpc3RpbmdWUENGcm9tTG9va3VwKGVudlN0YWNrLCAnTmV0d29yaycsIHtcbiAgICAgIHZwY0lkOiAndnBjLTEyMzQ1Njc4JyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChuZXR3b3JrLnZwYykudG9CZURlZmluZWQoKTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhlbnZTdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6VlBDJywgMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2V4aXN0aW5nIFZQQyB3b3JrcyB3aXRoIGNyZWF0ZVNlcnZpY2VFbmRwb2ludCcsICgpID0+IHtcbiAgICBjb25zdCBlbnZBcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgY29uc3QgZW52U3RhY2sgPSBuZXcgU3RhY2soZW52QXBwLCAnVGVzdFN0YWNrJywge1xuICAgICAgZW52OiB7IGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICd1cy1lYXN0LTEnIH0sXG4gICAgfSk7XG4gICAgY29uc3QgbmV0d29yayA9IE5ldHdvcmsudXNlRXhpc3RpbmdWUENGcm9tTG9va3VwKGVudlN0YWNrLCAnTmV0d29yaycsIHtcbiAgICAgIHZwY0lkOiAndnBjLTEyMzQ1Njc4JyxcbiAgICB9KTtcbiAgICBuZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgnTGFtYmRhJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkxBTUJEQSk7XG5cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhlbnZTdGFjayk7XG4gICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6VlBDRW5kcG9pbnQnLCAxKTtcbiAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpTZWN1cml0eUdyb3VwJywgMSk7XG4gIH0pO1xufSk7XG4iXX0=