@cdklabs/cdk-appmod-catalog-blueprints 1.4.1 → 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 (93) hide show
  1. package/.jsii +2579 -194
  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.d.ts +4 -2
  66. package/lib/framework/foundation/network.js +52 -41
  67. package/lib/framework/tests/access-log.test.js +5 -2
  68. package/lib/framework/tests/batch-agent.test.js +5 -2
  69. package/lib/framework/tests/bedrock.test.js +5 -2
  70. package/lib/framework/tests/eventbridge-broker.test.js +5 -2
  71. package/lib/framework/tests/framework-nag.test.js +26 -7
  72. package/lib/framework/tests/network.test.js +30 -2
  73. package/lib/tsconfig.tsbuildinfo +1 -1
  74. package/lib/utilities/data-loader.js +1 -1
  75. package/lib/utilities/lambda-iam-utils.js +1 -1
  76. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
  77. package/lib/utilities/observability/default-observability-config.js +1 -1
  78. package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
  79. package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
  80. package/lib/utilities/observability/powertools-config.d.ts +10 -1
  81. package/lib/utilities/observability/powertools-config.js +19 -3
  82. package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
  83. package/lib/utilities/test-utils.d.ts +43 -0
  84. package/lib/utilities/test-utils.js +56 -0
  85. package/lib/utilities/tests/data-loader-nag.test.js +3 -2
  86. package/lib/utilities/tests/data-loader.test.js +3 -2
  87. package/lib/webapp/frontend-construct.js +1 -1
  88. package/lib/webapp/tests/frontend-construct-nag.test.js +3 -2
  89. package/lib/webapp/tests/frontend-construct.test.js +3 -2
  90. package/package.json +6 -5
  91. package/lib/document-processing/resources/default-error-handler/index.js +0 -46
  92. package/lib/document-processing/resources/default-pdf-processor/index.js +0 -46
  93. package/lib/document-processing/resources/default-pdf-validator/index.js +0 -36
@@ -8,6 +8,7 @@ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
8
8
  const aws_rds_1 = require("aws-cdk-lib/aws-rds");
9
9
  const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
10
10
  const data_loader_1 = require("../data-loader");
11
+ const test_utils_1 = require("../test-utils");
11
12
  describe('DataLoader', () => {
12
13
  let app;
13
14
  let stack;
@@ -18,7 +19,7 @@ describe('DataLoader', () => {
18
19
  let template;
19
20
  // Use beforeAll instead of beforeEach to avoid recreating infrastructure
20
21
  beforeAll(() => {
21
- app = new aws_cdk_lib_1.App();
22
+ app = (0, test_utils_1.createTestApp)();
22
23
  stack = new aws_cdk_lib_1.Stack(app, 'TestStack');
23
24
  // Create VPC
24
25
  vpc = new aws_ec2_1.Vpc(stack, 'TestVpc');
@@ -281,4 +282,4 @@ describe('DataLoader', () => {
281
282
  });
282
283
  });
283
284
  });
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sb2FkZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy91dGlsaXRpZXMvdGVzdHMvZGF0YS1sb2FkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQzs7QUFFdEMsNkNBQXdEO0FBQ3hELHVEQUFrRDtBQUNsRCxpREFBb0c7QUFDcEcsaURBQTJIO0FBQzNILHVFQUF3RDtBQUN4RCxnREFBc0U7QUFFdEUsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLEdBQVEsQ0FBQztJQUNiLElBQUksT0FBd0IsQ0FBQztJQUM3QixJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLGFBQTRCLENBQUM7SUFDakMsSUFBSSxRQUFrQixDQUFDO0lBRXZCLHlFQUF5RTtJQUN6RSxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsR0FBRyxHQUFHLElBQUksaUJBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXBDLGFBQWE7UUFDYixHQUFHLEdBQUcsSUFBSSxhQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWhDLDRDQUE0QztRQUM1QyxhQUFhLEdBQUcsSUFBSSx1QkFBYSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsRUFBRTtZQUNoRSxHQUFHLEVBQUUsR0FBRztZQUNSLFdBQVcsRUFBRSxvQ0FBb0M7U0FDbEQsQ0FBQyxDQUFDO1FBRUgseUJBQXlCO1FBQ3pCLE1BQU0sR0FBRyxJQUFJLDJCQUFNLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFO1lBQzNDLG9CQUFvQixFQUFFO2dCQUNwQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUM5RCxpQkFBaUIsRUFBRSxVQUFVO2dCQUM3QixpQkFBaUIsRUFBRSxPQUFPO2FBQzNCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsd0JBQXdCO1FBQ3hCLE9BQU8sR0FBRyxJQUFJLHlCQUFlLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUNsRCxNQUFNLEVBQUUsK0JBQXFCLENBQUMsY0FBYyxDQUFDO2dCQUMzQyxPQUFPLEVBQUUscUNBQTJCLENBQUMsUUFBUTthQUM5QyxDQUFDO1lBQ0YsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixRQUFRLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQzthQUNqRDtZQUNELEdBQUc7WUFDSCxNQUFNLEVBQUUseUJBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUM1QyxZQUFZLEVBQUUsc0JBQVksQ0FBQyxFQUFFLENBQUMsdUJBQWEsQ0FBQyxFQUFFLEVBQUUsc0JBQVksQ0FBQyxNQUFNLENBQUM7YUFDckUsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILHdDQUF3QztRQUN4QyxJQUFJLHdCQUFVLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFO1lBQ3ZDLGNBQWMsRUFBRTtnQkFDZCxNQUFNLEVBQUUsNEJBQWMsQ0FBQyxVQUFVO2dCQUNqQyxPQUFPLEVBQUUsT0FBTztnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUFFLFFBQVE7Z0JBQ3RCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLGFBQWEsRUFBRSxhQUFhO2FBQzdCO1lBQ0QsVUFBVSxFQUFFO2dCQUNWO29CQUNFLFFBQVEsRUFBRSxnQ0FBZ0M7b0JBQzFDLFFBQVEsRUFBRSxzQkFBUSxDQUFDLEdBQUc7aUJBQ3ZCO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLHdCQUFVLENBQUMsS0FBSyxFQUFFLHFCQUFxQixFQUFFO1lBQzNDLGNBQWMsRUFBRTtnQkFDZCxNQUFNLEVBQUUsNEJBQWMsQ0FBQyxLQUFLO2dCQUM1QixPQUFPLEVBQUUsT0FBTztnQkFDaEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsWUFBWSxFQUFFLFFBQVE7Z0JBQ3RCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLGFBQWEsRUFBRSxhQUFhO2FBQzdCO1lBQ0QsVUFBVSxFQUFFO2dCQUNWO29CQUNFLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLFFBQVEsRUFBRSxzQkFBUSxDQUFDLEdBQUc7b0JBQ3RCLGNBQWMsRUFBRSxDQUFDO2lCQUNsQjtnQkFDRDtvQkFDRSxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxRQUFRLEVBQUUsc0JBQVEsQ0FBQyxTQUFTO29CQUM1QixjQUFjLEVBQUUsQ0FBQztpQkFDbEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksd0JBQVUsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUU7WUFDeEMsY0FBYyxFQUFFO2dCQUNkLE1BQU0sRUFBRSw0QkFBYyxDQUFDLFVBQVU7Z0JBQ2pDLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsUUFBUTtnQkFDdEIsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsYUFBYSxFQUFFLGFBQWE7YUFDN0I7WUFDRCxVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsUUFBUSxFQUFFLHNCQUFRLENBQUMsR0FBRztpQkFDdkI7YUFDRjtZQUNELGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07WUFDbkMsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBRUgsMERBQTBEO1FBQzFELFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7UUFFbkMsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtZQUNuRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtZQUMxQyxRQUFRLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2hELGdCQUFnQixFQUFFO29CQUNoQixpQ0FBaUMsRUFBRTt3QkFDakM7NEJBQ0UsNkJBQTZCLEVBQUU7Z0NBQzdCLFlBQVksRUFBRSxRQUFROzZCQUN2Qjt5QkFDRjtxQkFDRjtpQkFDRjthQUNGLENBQUMsQ0FBQztZQUVILFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RSxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELE9BQU8sRUFBRSxZQUFZO2dCQUNyQixPQUFPLEVBQUUsZUFBZTthQUN6QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7WUFDOUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDakQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvRCxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUMxQixJQUFJLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSx3QkFBVSxDQUFDLEtBQUssRUFBRSx5QkFBeUIsRUFBRTtvQkFDL0MsY0FBYyxFQUFFLFNBQWdCO29CQUNoQyxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsUUFBUSxFQUFFLGdDQUFnQzs0QkFDMUMsUUFBUSxFQUFFLHNCQUFRLENBQUMsR0FBRzt5QkFDdkI7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSx3QkFBVSxDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRTtvQkFDM0MsY0FBYyxFQUFFO3dCQUNkLE1BQU0sRUFBRSw0QkFBYyxDQUFDLFVBQVU7d0JBQ2pDLE1BQU0sRUFBRSxNQUFNO3dCQUNkLFlBQVksRUFBRSxRQUFRO3dCQUN0QixHQUFHLEVBQUUsR0FBRzt3QkFDUixhQUFhLEVBQUUsYUFBYTtxQkFDN0I7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLFFBQVEsRUFBRSxnQ0FBZ0M7NEJBQzFDLFFBQVEsRUFBRSxzQkFBUSxDQUFDLEdBQUc7eUJBQ3ZCO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUNqRCxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksd0JBQVUsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7b0JBQzdDLGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsNEJBQWMsQ0FBQyxVQUFVO3dCQUNqQyxPQUFPLEVBQUUsT0FBTzt3QkFDaEIsTUFBTSxFQUFFLE1BQU07d0JBQ2QsWUFBWSxFQUFFLFFBQVE7d0JBQ3RCLEdBQUcsRUFBRSxHQUFHO3dCQUNSLGFBQWEsRUFBRSxhQUFhO3FCQUM3QjtvQkFDRCxVQUFVLEVBQUUsRUFBRTtpQkFDZixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw2REFBNkQsRUFBRSxHQUFHLEVBQUU7WUFDdkUsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDVixJQUFJLHdCQUFVLENBQUMsS0FBSyxFQUFFLHVCQUF1QixFQUFFO29CQUM3QyxjQUFjLEVBQUU7d0JBQ2QsTUFBTSxFQUFFLDRCQUFjLENBQUMsS0FBSzt3QkFDNUIsT0FBTyxFQUFFLE9BQU87d0JBQ2hCLE1BQU0sRUFBRSxNQUFNO3dCQUNkLFlBQVksRUFBRSxRQUFRO3dCQUN0QixHQUFHLEVBQUUsR0FBRzt3QkFDUixhQUFhLEVBQUUsYUFBYTtxQkFDN0I7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLFFBQVEsRUFBRSxnQ0FBZ0M7NEJBQzFDLFFBQVEsRUFBRSxzQkFBUSxDQUFDLE1BQU07eUJBQzFCO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUN2RSxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLElBQUksd0JBQVUsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLEVBQUU7b0JBQ3JELGNBQWMsRUFBRTt3QkFDZCxNQUFNLEVBQUUsNEJBQWMsQ0FBQyxVQUFVO3dCQUNqQyxPQUFPLEVBQUUsT0FBTzt3QkFDaEIsTUFBTSxFQUFFLE1BQU07d0JBQ2QsWUFBWSxFQUFFLFFBQVE7d0JBQ3RCLEdBQUcsRUFBRSxHQUFHO3dCQUNSLGFBQWEsRUFBRSxhQUFhO3FCQUM3QjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsUUFBUSxFQUFFLGdDQUFnQzs0QkFDMUMsUUFBUSxFQUFFLHNCQUFRLENBQUMsU0FBUzt5QkFDN0I7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRS9ELFFBQVEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3RDLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixtQkFBbUIsRUFBRSxRQUFRO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtZQUNsRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRTlELFFBQVEsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3RDLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixtQkFBbUIsRUFBRSxRQUFRO2FBQzlCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtRQUN4QixJQUFJLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQ2pFLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDaEQsOEJBQThCLEVBQUU7b0JBQzlCLGVBQWUsRUFBRSxJQUFJO29CQUNyQixpQkFBaUIsRUFBRSxJQUFJO29CQUN2QixnQkFBZ0IsRUFBRSxJQUFJO29CQUN0QixxQkFBcUIsRUFBRSxJQUFJO2lCQUM1QjthQUNGLENBQUMsQ0FBQztZQUVILFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRTtnQkFDdEQsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE9BQU8sRUFBRSxZQUFZO2FBQ3RCLENBQUMsQ0FBQztZQUVILE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN4RSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQ25FLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FDcEMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO1lBQzlDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDL0Msd0JBQXdCLEVBQUU7b0JBQ3hCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxNQUFNLEVBQUUsZ0JBQWdCOzRCQUN4QixNQUFNLEVBQUUsT0FBTzs0QkFDZixTQUFTLEVBQUU7Z0NBQ1QsT0FBTyxFQUFFLHNCQUFzQjs2QkFDaEM7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEFwcCwgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHsgSW5zdGFuY2VDbGFzcywgSW5zdGFuY2VTaXplLCBJbnN0YW5jZVR5cGUsIFZwYywgU2VjdXJpdHlHcm91cCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgRGF0YWJhc2VDbHVzdGVyLCBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUsIEF1cm9yYVBvc3RncmVzRW5naW5lVmVyc2lvbiwgQ2x1c3Rlckluc3RhbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXJkcyc7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgRGF0YUxvYWRlciwgRGF0YWJhc2VFbmdpbmUsIEZpbGVUeXBlIH0gZnJvbSAnLi4vZGF0YS1sb2FkZXInO1xuXG5kZXNjcmliZSgnRGF0YUxvYWRlcicsICgpID0+IHtcbiAgbGV0IGFwcDogQXBwO1xuICBsZXQgc3RhY2s6IFN0YWNrO1xuICBsZXQgdnBjOiBWcGM7XG4gIGxldCBjbHVzdGVyOiBEYXRhYmFzZUNsdXN0ZXI7XG4gIGxldCBzZWNyZXQ6IFNlY3JldDtcbiAgbGV0IHNlY3VyaXR5R3JvdXA6IFNlY3VyaXR5R3JvdXA7XG4gIGxldCB0ZW1wbGF0ZTogVGVtcGxhdGU7XG5cbiAgLy8gVXNlIGJlZm9yZUFsbCBpbnN0ZWFkIG9mIGJlZm9yZUVhY2ggdG8gYXZvaWQgcmVjcmVhdGluZyBpbmZyYXN0cnVjdHVyZVxuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGFwcCA9IG5ldyBBcHAoKTtcbiAgICBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snKTtcblxuICAgIC8vIENyZWF0ZSBWUENcbiAgICB2cGMgPSBuZXcgVnBjKHN0YWNrLCAnVGVzdFZwYycpO1xuXG4gICAgLy8gQ3JlYXRlIHNlY3VyaXR5IGdyb3VwIGZvciBkYXRhYmFzZSBhY2Nlc3NcbiAgICBzZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAoc3RhY2ssICdEYXRhYmFzZVNlY3VyaXR5R3JvdXAnLCB7XG4gICAgICB2cGM6IHZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnU2VjdXJpdHkgZ3JvdXAgZm9yIGRhdGFiYXNlIGFjY2VzcycsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgZGF0YWJhc2Ugc2VjcmV0XG4gICAgc2VjcmV0ID0gbmV3IFNlY3JldChzdGFjaywgJ0RhdGFiYXNlU2VjcmV0Jywge1xuICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHtcbiAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHsgdXNlcm5hbWU6ICd0ZXN0dXNlcicgfSksXG4gICAgICAgIGdlbmVyYXRlU3RyaW5nS2V5OiAncGFzc3dvcmQnLFxuICAgICAgICBleGNsdWRlQ2hhcmFjdGVyczogJ1wiQC9cXFxcJyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgQXVyb3JhIGNsdXN0ZXJcbiAgICBjbHVzdGVyID0gbmV3IERhdGFiYXNlQ2x1c3RlcihzdGFjaywgJ1Rlc3RDbHVzdGVyJywge1xuICAgICAgZW5naW5lOiBEYXRhYmFzZUNsdXN0ZXJFbmdpbmUuYXVyb3JhUG9zdGdyZXMoe1xuICAgICAgICB2ZXJzaW9uOiBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24uVkVSXzEzXzcsXG4gICAgICB9KSxcbiAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgIHVzZXJuYW1lOiAndGVzdHVzZXInLFxuICAgICAgICBwYXNzd29yZDogc2VjcmV0LnNlY3JldFZhbHVlRnJvbUpzb24oJ3Bhc3N3b3JkJyksXG4gICAgICB9LFxuICAgICAgdnBjLFxuICAgICAgd3JpdGVyOiBDbHVzdGVySW5zdGFuY2UucHJvdmlzaW9uZWQoJ3dyaXRlcicsIHtcbiAgICAgICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1FRElVTSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhbGwgRGF0YUxvYWRlciBpbnN0YW5jZXMgZmlyc3RcbiAgICBuZXcgRGF0YUxvYWRlcihzdGFjaywgJ0Jhc2ljRGF0YUxvYWRlcicsIHtcbiAgICAgIGRhdGFiYXNlQ29uZmlnOiB7XG4gICAgICAgIGVuZ2luZTogRGF0YWJhc2VFbmdpbmUuUE9TVEdSRVNRTCxcbiAgICAgICAgY2x1c3RlcjogY2x1c3RlcixcbiAgICAgICAgc2VjcmV0OiBzZWNyZXQsXG4gICAgICAgIGRhdGFiYXNlTmFtZTogJ3Rlc3RkYicsXG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICBzZWN1cml0eUdyb3VwOiBzZWN1cml0eUdyb3VwLFxuICAgICAgfSxcbiAgICAgIGZpbGVJbnB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVQYXRoOiAnczM6Ly90ZXN0LWJ1Y2tldC90ZXN0LWRhdGEuc3FsJyxcbiAgICAgICAgICBmaWxlVHlwZTogRmlsZVR5cGUuU1FMLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIG5ldyBEYXRhTG9hZGVyKHN0YWNrLCAnTXVsdGlGaWxlRGF0YUxvYWRlcicsIHtcbiAgICAgIGRhdGFiYXNlQ29uZmlnOiB7XG4gICAgICAgIGVuZ2luZTogRGF0YWJhc2VFbmdpbmUuTVlTUUwsXG4gICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXIsXG4gICAgICAgIHNlY3JldDogc2VjcmV0LFxuICAgICAgICBkYXRhYmFzZU5hbWU6ICd0ZXN0ZGInLFxuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cCxcbiAgICAgIH0sXG4gICAgICBmaWxlSW5wdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlUGF0aDogJ3MzOi8vdGVzdC1idWNrZXQvc2NoZW1hLnNxbCcsXG4gICAgICAgICAgZmlsZVR5cGU6IEZpbGVUeXBlLlNRTCxcbiAgICAgICAgICBleGVjdXRpb25PcmRlcjogMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVQYXRoOiAnczM6Ly90ZXN0LWJ1Y2tldC9kYXRhLnNxbCcsXG4gICAgICAgICAgZmlsZVR5cGU6IEZpbGVUeXBlLk1ZU1FMRFVNUCxcbiAgICAgICAgICBleGVjdXRpb25PcmRlcjogMixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YUxvYWRlcihzdGFjaywgJ0N1c3RvbURhdGFMb2FkZXInLCB7XG4gICAgICBkYXRhYmFzZUNvbmZpZzoge1xuICAgICAgICBlbmdpbmU6IERhdGFiYXNlRW5naW5lLlBPU1RHUkVTUUwsXG4gICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXIsXG4gICAgICAgIHNlY3JldDogc2VjcmV0LFxuICAgICAgICBkYXRhYmFzZU5hbWU6ICd0ZXN0ZGInLFxuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cCxcbiAgICAgIH0sXG4gICAgICBmaWxlSW5wdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlUGF0aDogJ3MzOi8vdGVzdC1idWNrZXQvdGVzdC1kYXRhLnNxbCcsXG4gICAgICAgICAgZmlsZVR5cGU6IEZpbGVUeXBlLlNRTCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgfSk7XG5cbiAgICAvLyBHZW5lcmF0ZSB0ZW1wbGF0ZSBvbmNlIGFmdGVyIGFsbCBjb25zdHJ1Y3RzIGFyZSBjcmVhdGVkXG4gICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB9KTtcblxuICBkZXNjcmliZSgnQmFzaWMgZnVuY3Rpb25hbGl0eScsICgpID0+IHtcblxuICAgIHRlc3QoJ2NyZWF0ZXMgRGF0YUxvYWRlciBjb25zdHJ1Y3Qgd2l0aCBtaW5pbWFsIGNvbmZpZ3VyYXRpb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc3RhY2subm9kZS5maW5kQ2hpbGQoJ0Jhc2ljRGF0YUxvYWRlcicpKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY3JlYXRlcyBleHBlY3RlZCBBV1MgcmVzb3VyY2VzJywgKCkgPT4ge1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIEJ1Y2tldEVuY3J5cHRpb246IHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBTU0VBbGdvcml0aG06ICdBRVMyNTYnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmUnLCB7fSk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgUnVudGltZTogJ3B5dGhvbjMuMTEnLFxuICAgICAgICBIYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3N1cHBvcnRzIG11bHRpcGxlIGZpbGUgaW5wdXRzIHdpdGggZXhlY3V0aW9uIG9yZGVyJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHN0YWNrLm5vZGUuZmluZENoaWxkKCdNdWx0aUZpbGVEYXRhTG9hZGVyJykpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdXBwb3J0cyBjdXN0b20gY29uZmlndXJhdGlvbiBvcHRpb25zJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHN0YWNrLm5vZGUuZmluZENoaWxkKCdDdXN0b21EYXRhTG9hZGVyJykpLnRvQmVEZWZpbmVkKCk7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsIHtcbiAgICAgICAgTWVtb3J5U2l6ZTogMjA0OCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3Igd2hlbiBkYXRhYmFzZUNvbmZpZyBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IERhdGFMb2FkZXIoc3RhY2ssICdJbnZhbGlkQ29uZmlnRGF0YUxvYWRlcicsIHtcbiAgICAgICAgICBkYXRhYmFzZUNvbmZpZzogdW5kZWZpbmVkIGFzIGFueSxcbiAgICAgICAgICBmaWxlSW5wdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpbGVQYXRoOiAnczM6Ly90ZXN0LWJ1Y2tldC90ZXN0LWRhdGEuc3FsJyxcbiAgICAgICAgICAgICAgZmlsZVR5cGU6IEZpbGVUeXBlLlNRTCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdkYXRhYmFzZUNvbmZpZyBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGVycm9yIHdoZW4gYm90aCBjbHVzdGVyIGFuZCBpbnN0YW5jZSBhcmUgbWlzc2luZycsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBEYXRhTG9hZGVyKHN0YWNrLCAnTm9DbHVzdGVyRGF0YUxvYWRlcicsIHtcbiAgICAgICAgICBkYXRhYmFzZUNvbmZpZzoge1xuICAgICAgICAgICAgZW5naW5lOiBEYXRhYmFzZUVuZ2luZS5QT1NUR1JFU1FMLFxuICAgICAgICAgICAgc2VjcmV0OiBzZWNyZXQsXG4gICAgICAgICAgICBkYXRhYmFzZU5hbWU6ICd0ZXN0ZGInLFxuICAgICAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwOiBzZWN1cml0eUdyb3VwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsZUlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWxlUGF0aDogJ3MzOi8vdGVzdC1idWNrZXQvdGVzdC1kYXRhLnNxbCcsXG4gICAgICAgICAgICAgIGZpbGVUeXBlOiBGaWxlVHlwZS5TUUwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnRWl0aGVyIGNsdXN0ZXIgb3IgaW5zdGFuY2UgbXVzdCBiZSBwcm92aWRlZCBpbiBkYXRhYmFzZUNvbmZpZycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGVycm9yIHdoZW4gZmlsZUlucHV0cyBpcyBlbXB0eScsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBEYXRhTG9hZGVyKHN0YWNrLCAnRW1wdHlJbnB1dHNEYXRhTG9hZGVyJywge1xuICAgICAgICAgIGRhdGFiYXNlQ29uZmlnOiB7XG4gICAgICAgICAgICBlbmdpbmU6IERhdGFiYXNlRW5naW5lLlBPU1RHUkVTUUwsXG4gICAgICAgICAgICBjbHVzdGVyOiBjbHVzdGVyLFxuICAgICAgICAgICAgc2VjcmV0OiBzZWNyZXQsXG4gICAgICAgICAgICBkYXRhYmFzZU5hbWU6ICd0ZXN0ZGInLFxuICAgICAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwOiBzZWN1cml0eUdyb3VwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsZUlucHV0czogW10sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnQXQgbGVhc3Qgb25lIGZpbGUgaW5wdXQgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBlcnJvciB3aGVuIE15U1FMIGVuZ2luZSBpcyB1c2VkIHdpdGggUG9zdGdyZVNRTCBkdW1wJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IERhdGFMb2FkZXIoc3RhY2ssICdNeVNRTFBnRHVtcERhdGFMb2FkZXInLCB7XG4gICAgICAgICAgZGF0YWJhc2VDb25maWc6IHtcbiAgICAgICAgICAgIGVuZ2luZTogRGF0YWJhc2VFbmdpbmUuTVlTUUwsXG4gICAgICAgICAgICBjbHVzdGVyOiBjbHVzdGVyLFxuICAgICAgICAgICAgc2VjcmV0OiBzZWNyZXQsXG4gICAgICAgICAgICBkYXRhYmFzZU5hbWU6ICd0ZXN0ZGInLFxuICAgICAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwOiBzZWN1cml0eUdyb3VwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsZUlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWxlUGF0aDogJ3MzOi8vdGVzdC1idWNrZXQvdGVzdC1kYXRhLnNxbCcsXG4gICAgICAgICAgICAgIGZpbGVUeXBlOiBGaWxlVHlwZS5QR0RVTVAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnUG9zdGdyZVNRTCBkdW1wIGZpbGVzIGNhbm5vdCBiZSB1c2VkIHdpdGggTXlTUUwgZGF0YWJhc2VzJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3Igd2hlbiBQb3N0Z3JlU1FMIGVuZ2luZSBpcyB1c2VkIHdpdGggTXlTUUwgZHVtcCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBEYXRhTG9hZGVyKHN0YWNrLCAnUG9zdGdyZVNRTE15U1FMRHVtcERhdGFMb2FkZXInLCB7XG4gICAgICAgICAgZGF0YWJhc2VDb25maWc6IHtcbiAgICAgICAgICAgIGVuZ2luZTogRGF0YWJhc2VFbmdpbmUuUE9TVEdSRVNRTCxcbiAgICAgICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXIsXG4gICAgICAgICAgICBzZWNyZXQ6IHNlY3JldCxcbiAgICAgICAgICAgIGRhdGFiYXNlTmFtZTogJ3Rlc3RkYicsXG4gICAgICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgICAgIHNlY3VyaXR5R3JvdXA6IHNlY3VyaXR5R3JvdXAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWxlSW5wdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpbGVQYXRoOiAnczM6Ly90ZXN0LWJ1Y2tldC90ZXN0LWRhdGEuc3FsJyxcbiAgICAgICAgICAgICAgZmlsZVR5cGU6IEZpbGVUeXBlLk1ZU1FMRFVNUCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdNeVNRTCBkdW1wIGZpbGVzIGNhbm5vdCBiZSB1c2VkIHdpdGggUG9zdGdyZVNRTCBkYXRhYmFzZXMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1JlbW92YWwgUG9saWN5JywgKCkgPT4ge1xuICAgIHRlc3QoJ2FwcGxpZXMgY3VzdG9tIHJlbW92YWwgcG9saWN5IHRvIHJlc291cmNlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChzdGFjay5ub2RlLmZpbmRDaGlsZCgnQ3VzdG9tRGF0YUxvYWRlcicpKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZSgnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgICAgICBEZWxldGlvblBvbGljeTogJ1JldGFpbicsXG4gICAgICAgIFVwZGF0ZVJlcGxhY2VQb2xpY3k6ICdSZXRhaW4nLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd1c2VzIGRlZmF1bHQgREVTVFJPWSByZW1vdmFsIHBvbGljeSB3aGVuIG5vdCBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc3RhY2subm9kZS5maW5kQ2hpbGQoJ0Jhc2ljRGF0YUxvYWRlcicpKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZSgnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgICAgICBEZWxldGlvblBvbGljeTogJ0RlbGV0ZScsXG4gICAgICAgIFVwZGF0ZVJlcGxhY2VQb2xpY3k6ICdEZWxldGUnLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTZWN1cml0eScsICgpID0+IHtcbiAgICB0ZXN0KCdjcmVhdGVzIHJlc291cmNlcyB3aXRoIHByb3BlciBzZWN1cml0eSBjb25maWd1cmF0aW9ucycsICgpID0+IHtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgICAgICBQdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBCbG9ja1B1YmxpY0FjbHM6IHRydWUsXG4gICAgICAgICAgQmxvY2tQdWJsaWNQb2xpY3k6IHRydWUsXG4gICAgICAgICAgSWdub3JlUHVibGljQWNsczogdHJ1ZSxcbiAgICAgICAgICBSZXN0cmljdFB1YmxpY0J1Y2tldHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIEhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgUnVudGltZTogJ3B5dGhvbjMuMTEnLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGxhbWJkYUZ1bmN0aW9ucyA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicpO1xuICAgICAgY29uc3QgaGFzVnBjQ29uZmlnID0gT2JqZWN0LnZhbHVlcyhsYW1iZGFGdW5jdGlvbnMpLnNvbWUoKGZuOiBhbnkpID0+XG4gICAgICAgIGZuLlByb3BlcnRpZXM/LlZwY0NvbmZpZz8uU3VibmV0SWRzLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChoYXNWcGNDb25maWcpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdncmFudHMgYXBwcm9wcmlhdGUgSUFNIHBlcm1pc3Npb25zJywgKCkgPT4ge1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OklBTTo6Um9sZScsIHtcbiAgICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OiB7XG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEFjdGlvbjogJ3N0czpBc3N1bWVSb2xlJyxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgICAgICBTZXJ2aWNlOiAnbGFtYmRhLmFtYXpvbmF3cy5jb20nLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1sb2FkZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy91dGlsaXRpZXMvdGVzdHMvZGF0YS1sb2FkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQzs7QUFFdEMsNkNBQXdEO0FBQ3hELHVEQUFrRDtBQUNsRCxpREFBb0c7QUFDcEcsaURBQTJIO0FBQzNILHVFQUF3RDtBQUN4RCxnREFBc0U7QUFDdEUsOENBQThDO0FBRTlDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxLQUFZLENBQUM7SUFDakIsSUFBSSxHQUFRLENBQUM7SUFDYixJQUFJLE9BQXdCLENBQUM7SUFDN0IsSUFBSSxNQUFjLENBQUM7SUFDbkIsSUFBSSxhQUE0QixDQUFDO0lBQ2pDLElBQUksUUFBa0IsQ0FBQztJQUV2Qix5RUFBeUU7SUFDekUsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLEdBQUcsR0FBRyxJQUFBLDBCQUFhLEdBQUUsQ0FBQztRQUN0QixLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVwQyxhQUFhO1FBQ2IsR0FBRyxHQUFHLElBQUksYUFBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVoQyw0Q0FBNEM7UUFDNUMsYUFBYSxHQUFHLElBQUksdUJBQWEsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7WUFDaEUsR0FBRyxFQUFFLEdBQUc7WUFDUixXQUFXLEVBQUUsb0NBQW9DO1NBQ2xELENBQUMsQ0FBQztRQUVILHlCQUF5QjtRQUN6QixNQUFNLEdBQUcsSUFBSSwyQkFBTSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtZQUMzQyxvQkFBb0IsRUFBRTtnQkFDcEIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxF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Z0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIscUJBQXFCLEVBQUUsSUFBSTtpQkFDNUI7YUFDRixDQUFDLENBQUM7WUFFSCxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RELE9BQU8sRUFBRSxlQUFlO2dCQUN4QixPQUFPLEVBQUUsWUFBWTthQUN0QixDQUFDLENBQUM7WUFFSCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDeEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNuRSxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQ3BDLENBQUM7WUFDRixNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxRQUFRLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQy9DLHdCQUF3QixFQUFFO29CQUN4QixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsTUFBTSxFQUFFLGdCQUFnQjs0QkFDeEIsTUFBTSxFQUFFLE9BQU87NEJBQ2YsU0FBUyxFQUFFO2dDQUNULE9BQU8sRUFBRSxzQkFBc0I7NkJBQ2hDO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBBcHAsIFJlbW92YWxQb2xpY3ksIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEluc3RhbmNlQ2xhc3MsIEluc3RhbmNlU2l6ZSwgSW5zdGFuY2VUeXBlLCBWcGMsIFNlY3VyaXR5R3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IERhdGFiYXNlQ2x1c3RlciwgRGF0YWJhc2VDbHVzdGVyRW5naW5lLCBBdXJvcmFQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sIENsdXN0ZXJJbnN0YW5jZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yZHMnO1xuaW1wb3J0IHsgU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IERhdGFMb2FkZXIsIERhdGFiYXNlRW5naW5lLCBGaWxlVHlwZSB9IGZyb20gJy4uL2RhdGEtbG9hZGVyJztcbmltcG9ydCB7IGNyZWF0ZVRlc3RBcHAgfSBmcm9tICcuLi90ZXN0LXV0aWxzJztcblxuZGVzY3JpYmUoJ0RhdGFMb2FkZXInLCAoKSA9PiB7XG4gIGxldCBhcHA6IEFwcDtcbiAgbGV0IHN0YWNrOiBTdGFjaztcbiAgbGV0IHZwYzogVnBjO1xuICBsZXQgY2x1c3RlcjogRGF0YWJhc2VDbHVzdGVyO1xuICBsZXQgc2VjcmV0OiBTZWNyZXQ7XG4gIGxldCBzZWN1cml0eUdyb3VwOiBTZWN1cml0eUdyb3VwO1xuICBsZXQgdGVtcGxhdGU6IFRlbXBsYXRlO1xuXG4gIC8vIFVzZSBiZWZvcmVBbGwgaW5zdGVhZCBvZiBiZWZvcmVFYWNoIHRvIGF2b2lkIHJlY3JlYXRpbmcgaW5mcmFzdHJ1Y3R1cmVcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG5cbiAgICAvLyBDcmVhdGUgVlBDXG4gICAgdnBjID0gbmV3IFZwYyhzdGFjaywgJ1Rlc3RWcGMnKTtcblxuICAgIC8vIENyZWF0ZSBzZWN1cml0eSBncm91cCBmb3IgZGF0YWJhc2UgYWNjZXNzXG4gICAgc2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKHN0YWNrLCAnRGF0YWJhc2VTZWN1cml0eUdyb3VwJywge1xuICAgICAgdnBjOiB2cGMsXG4gICAgICBkZXNjcmlwdGlvbjogJ1NlY3VyaXR5IGdyb3VwIGZvciBkYXRhYmFzZSBhY2Nlc3MnLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGRhdGFiYXNlIHNlY3JldFxuICAgIHNlY3JldCA9IG5ldyBTZWNyZXQoc3RhY2ssICdEYXRhYmFzZVNlY3JldCcsIHtcbiAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7IHVzZXJuYW1lOiAndGVzdHVzZXInIH0pLFxuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgZXhjbHVkZUNoYXJhY3RlcnM6ICdcIkAvXFxcXCcsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIEF1cm9yYSBjbHVzdGVyXG4gICAgY2x1c3RlciA9IG5ldyBEYXRhYmFzZUNsdXN0ZXIoc3RhY2ssICdUZXN0Q2x1c3RlcicsIHtcbiAgICAgIGVuZ2luZTogRGF0YWJhc2VDbHVzdGVyRW5naW5lLmF1cm9yYVBvc3RncmVzKHtcbiAgICAgICAgdmVyc2lvbjogQXVyb3JhUG9zdGdyZXNFbmdpbmVWZXJzaW9uLlZFUl8xM183LFxuICAgICAgfSksXG4gICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICB1c2VybmFtZTogJ3Rlc3R1c2VyJyxcbiAgICAgICAgcGFzc3dvcmQ6IHNlY3JldC5zZWNyZXRWYWx1ZUZyb21Kc29uKCdwYXNzd29yZCcpLFxuICAgICAgfSxcbiAgICAgIHZwYyxcbiAgICAgIHdyaXRlcjogQ2x1c3Rlckluc3RhbmNlLnByb3Zpc2lvbmVkKCd3cml0ZXInLCB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5NRURJVU0pLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYWxsIERhdGFMb2FkZXIgaW5zdGFuY2VzIGZpcnN0XG4gICAgbmV3IERhdGFMb2FkZXIoc3RhY2ssICdCYXNpY0RhdGFMb2FkZXInLCB7XG4gICAgICBkYXRhYmFzZUNvbmZpZzoge1xuICAgICAgICBlbmdpbmU6IERhdGFiYXNlRW5naW5lLlBPU1RHUkVTUUwsXG4gICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXIsXG4gICAgICAgIHNlY3JldDogc2VjcmV0LFxuICAgICAgICBkYXRhYmFzZU5hbWU6ICd0ZXN0ZGInLFxuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cCxcbiAgICAgIH0sXG4gICAgICBmaWxlSW5wdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlUGF0aDogJ3MzOi8vdGVzdC1idWNrZXQvdGVzdC1kYXRhLnNxbCcsXG4gICAgICAgICAgZmlsZVR5cGU6IEZpbGVUeXBlLlNRTCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YUxvYWRlcihzdGFjaywgJ011bHRpRmlsZURhdGFMb2FkZXInLCB7XG4gICAgICBkYXRhYmFzZUNvbmZpZzoge1xuICAgICAgICBlbmdpbmU6IERhdGFiYXNlRW5naW5lLk1ZU1FMLFxuICAgICAgICBjbHVzdGVyOiBjbHVzdGVyLFxuICAgICAgICBzZWNyZXQ6IHNlY3JldCxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiAndGVzdGRiJyxcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXA6IHNlY3VyaXR5R3JvdXAsXG4gICAgICB9LFxuICAgICAgZmlsZUlucHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZVBhdGg6ICdzMzovL3Rlc3QtYnVja2V0L3NjaGVtYS5zcWwnLFxuICAgICAgICAgIGZpbGVUeXBlOiBGaWxlVHlwZS5TUUwsXG4gICAgICAgICAgZXhlY3V0aW9uT3JkZXI6IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmaWxlUGF0aDogJ3MzOi8vdGVzdC1idWNrZXQvZGF0YS5zcWwnLFxuICAgICAgICAgIGZpbGVUeXBlOiBGaWxlVHlwZS5NWVNRTERVTVAsXG4gICAgICAgICAgZXhlY3V0aW9uT3JkZXI6IDIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgbmV3IERhdGFMb2FkZXIoc3RhY2ssICdDdXN0b21EYXRhTG9hZGVyJywge1xuICAgICAgZGF0YWJhc2VDb25maWc6IHtcbiAgICAgICAgZW5naW5lOiBEYXRhYmFzZUVuZ2luZS5QT1NUR1JFU1FMLFxuICAgICAgICBjbHVzdGVyOiBjbHVzdGVyLFxuICAgICAgICBzZWNyZXQ6IHNlY3JldCxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiAndGVzdGRiJyxcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXA6IHNlY3VyaXR5R3JvdXAsXG4gICAgICB9LFxuICAgICAgZmlsZUlucHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZVBhdGg6ICdzMzovL3Rlc3QtYnVja2V0L3Rlc3QtZGF0YS5zcWwnLFxuICAgICAgICAgIGZpbGVUeXBlOiBGaWxlVHlwZS5TUUwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICBtZW1vcnlTaXplOiAyMDQ4LFxuICAgIH0pO1xuXG4gICAgLy8gR2VuZXJhdGUgdGVtcGxhdGUgb25jZSBhZnRlciBhbGwgY29uc3RydWN0cyBhcmUgY3JlYXRlZFxuICAgIHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Jhc2ljIGZ1bmN0aW9uYWxpdHknLCAoKSA9PiB7XG5cbiAgICB0ZXN0KCdjcmVhdGVzIERhdGFMb2FkZXIgY29uc3RydWN0IHdpdGggbWluaW1hbCBjb25maWd1cmF0aW9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHN0YWNrLm5vZGUuZmluZENoaWxkKCdCYXNpY0RhdGFMb2FkZXInKSkudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NyZWF0ZXMgZXhwZWN0ZWQgQVdTIHJlc291cmNlcycsICgpID0+IHtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgICAgICBCdWNrZXRFbmNyeXB0aW9uOiB7XG4gICAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgU1NFQWxnb3JpdGhtOiAnQUVTMjU2JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJywge30pO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIFJ1bnRpbWU6ICdweXRob24zLjExJyxcbiAgICAgICAgSGFuZGxlcjogJ2luZGV4LmhhbmRsZXInLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdXBwb3J0cyBtdWx0aXBsZSBmaWxlIGlucHV0cyB3aXRoIGV4ZWN1dGlvbiBvcmRlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChzdGFjay5ub2RlLmZpbmRDaGlsZCgnTXVsdGlGaWxlRGF0YUxvYWRlcicpKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc3VwcG9ydHMgY3VzdG9tIGNvbmZpZ3VyYXRpb24gb3B0aW9ucycsICgpID0+IHtcbiAgICAgIGV4cGVjdChzdGFjay5ub2RlLmZpbmRDaGlsZCgnQ3VzdG9tRGF0YUxvYWRlcicpKS50b0JlRGVmaW5lZCgpO1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLCB7XG4gICAgICAgIE1lbW9yeVNpemU6IDIwNDgsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1ZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgdGVzdCgndGhyb3dzIGVycm9yIHdoZW4gZGF0YWJhc2VDb25maWcgaXMgbWlzc2luZycsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBEYXRhTG9hZGVyKHN0YWNrLCAnSW52YWxpZENvbmZpZ0RhdGFMb2FkZXInLCB7XG4gICAgICAgICAgZGF0YWJhc2VDb25maWc6IHVuZGVmaW5lZCBhcyBhbnksXG4gICAgICAgICAgZmlsZUlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWxlUGF0aDogJ3MzOi8vdGVzdC1idWNrZXQvdGVzdC1kYXRhLnNxbCcsXG4gICAgICAgICAgICAgIGZpbGVUeXBlOiBGaWxlVHlwZS5TUUwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnZGF0YWJhc2VDb25maWcgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBlcnJvciB3aGVuIGJvdGggY2x1c3RlciBhbmQgaW5zdGFuY2UgYXJlIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgRGF0YUxvYWRlcihzdGFjaywgJ05vQ2x1c3RlckRhdGFMb2FkZXInLCB7XG4gICAgICAgICAgZGF0YWJhc2VDb25maWc6IHtcbiAgICAgICAgICAgIGVuZ2luZTogRGF0YWJhc2VFbmdpbmUuUE9TVEdSRVNRTCxcbiAgICAgICAgICAgIHNlY3JldDogc2VjcmV0LFxuICAgICAgICAgICAgZGF0YWJhc2VOYW1lOiAndGVzdGRiJyxcbiAgICAgICAgICAgIHZwYzogdnBjLFxuICAgICAgICAgICAgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbGVJbnB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmlsZVBhdGg6ICdzMzovL3Rlc3QtYnVja2V0L3Rlc3QtZGF0YS5zcWwnLFxuICAgICAgICAgICAgICBmaWxlVHlwZTogRmlsZVR5cGUuU1FMLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ0VpdGhlciBjbHVzdGVyIG9yIGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQgaW4gZGF0YWJhc2VDb25maWcnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBlcnJvciB3aGVuIGZpbGVJbnB1dHMgaXMgZW1wdHknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgRGF0YUxvYWRlcihzdGFjaywgJ0VtcHR5SW5wdXRzRGF0YUxvYWRlcicsIHtcbiAgICAgICAgICBkYXRhYmFzZUNvbmZpZzoge1xuICAgICAgICAgICAgZW5naW5lOiBEYXRhYmFzZUVuZ2luZS5QT1NUR1JFU1FMLFxuICAgICAgICAgICAgY2x1c3RlcjogY2x1c3RlcixcbiAgICAgICAgICAgIHNlY3JldDogc2VjcmV0LFxuICAgICAgICAgICAgZGF0YWJhc2VOYW1lOiAndGVzdGRiJyxcbiAgICAgICAgICAgIHZwYzogdnBjLFxuICAgICAgICAgICAgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbGVJbnB1dHM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ0F0IGxlYXN0IG9uZSBmaWxlIGlucHV0IGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgZXJyb3Igd2hlbiBNeVNRTCBlbmdpbmUgaXMgdXNlZCB3aXRoIFBvc3RncmVTUUwgZHVtcCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgIG5ldyBEYXRhTG9hZGVyKHN0YWNrLCAnTXlTUUxQZ0R1bXBEYXRhTG9hZGVyJywge1xuICAgICAgICAgIGRhdGFiYXNlQ29uZmlnOiB7XG4gICAgICAgICAgICBlbmdpbmU6IERhdGFiYXNlRW5naW5lLk1ZU1FMLFxuICAgICAgICAgICAgY2x1c3RlcjogY2x1c3RlcixcbiAgICAgICAgICAgIHNlY3JldDogc2VjcmV0LFxuICAgICAgICAgICAgZGF0YWJhc2VOYW1lOiAndGVzdGRiJyxcbiAgICAgICAgICAgIHZwYzogdnBjLFxuICAgICAgICAgICAgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbGVJbnB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmlsZVBhdGg6ICdzMzovL3Rlc3QtYnVja2V0L3Rlc3QtZGF0YS5zcWwnLFxuICAgICAgICAgICAgICBmaWxlVHlwZTogRmlsZVR5cGUuUEdEVU1QLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ1Bvc3RncmVTUUwgZHVtcCBmaWxlcyBjYW5ub3QgYmUgdXNlZCB3aXRoIE15U1FMIGRhdGFiYXNlcycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndGhyb3dzIGVycm9yIHdoZW4gUG9zdGdyZVNRTCBlbmdpbmUgaXMgdXNlZCB3aXRoIE15U1FMIGR1bXAnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgRGF0YUxvYWRlcihzdGFjaywgJ1Bvc3RncmVTUUxNeVNRTER1bXBEYXRhTG9hZGVyJywge1xuICAgICAgICAgIGRhdGFiYXNlQ29uZmlnOiB7XG4gICAgICAgICAgICBlbmdpbmU6IERhdGFiYXNlRW5naW5lLlBPU1RHUkVTUUwsXG4gICAgICAgICAgICBjbHVzdGVyOiBjbHVzdGVyLFxuICAgICAgICAgICAgc2VjcmV0OiBzZWNyZXQsXG4gICAgICAgICAgICBkYXRhYmFzZU5hbWU6ICd0ZXN0ZGInLFxuICAgICAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwOiBzZWN1cml0eUdyb3VwLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsZUlucHV0czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmaWxlUGF0aDogJ3MzOi8vdGVzdC1idWNrZXQvdGVzdC1kYXRhLnNxbCcsXG4gICAgICAgICAgICAgIGZpbGVUeXBlOiBGaWxlVHlwZS5NWVNRTERVTVAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnTXlTUUwgZHVtcCBmaWxlcyBjYW5ub3QgYmUgdXNlZCB3aXRoIFBvc3RncmVTUUwgZGF0YWJhc2VzJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdSZW1vdmFsIFBvbGljeScsICgpID0+IHtcbiAgICB0ZXN0KCdhcHBsaWVzIGN1c3RvbSByZW1vdmFsIHBvbGljeSB0byByZXNvdXJjZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc3RhY2subm9kZS5maW5kQ2hpbGQoJ0N1c3RvbURhdGFMb2FkZXInKSkudG9CZURlZmluZWQoKTtcblxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2UoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgRGVsZXRpb25Qb2xpY3k6ICdSZXRhaW4nLFxuICAgICAgICBVcGRhdGVSZXBsYWNlUG9saWN5OiAnUmV0YWluJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlcyBkZWZhdWx0IERFU1RST1kgcmVtb3ZhbCBwb2xpY3kgd2hlbiBub3Qgc3BlY2lmaWVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHN0YWNrLm5vZGUuZmluZENoaWxkKCdCYXNpY0RhdGFMb2FkZXInKSkudG9CZURlZmluZWQoKTtcblxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2UoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgRGVsZXRpb25Qb2xpY3k6ICdEZWxldGUnLFxuICAgICAgICBVcGRhdGVSZXBsYWNlUG9saWN5OiAnRGVsZXRlJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2VjdXJpdHknLCAoKSA9PiB7XG4gICAgdGVzdCgnY3JlYXRlcyByZXNvdXJjZXMgd2l0aCBwcm9wZXIgc2VjdXJpdHkgY29uZmlndXJhdGlvbnMnLCAoKSA9PiB7XG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgUHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgQmxvY2tQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgICAgIEJsb2NrUHVibGljUG9saWN5OiB0cnVlLFxuICAgICAgICAgIElnbm9yZVB1YmxpY0FjbHM6IHRydWUsXG4gICAgICAgICAgUmVzdHJpY3RQdWJsaWNCdWNrZXRzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJywge1xuICAgICAgICBIYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICAgIFJ1bnRpbWU6ICdweXRob24zLjExJyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsYW1iZGFGdW5jdGlvbnMgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKCdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKTtcbiAgICAgIGNvbnN0IGhhc1ZwY0NvbmZpZyA9IE9iamVjdC52YWx1ZXMobGFtYmRhRnVuY3Rpb25zKS5zb21lKChmbjogYW55KSA9PlxuICAgICAgICBmbi5Qcm9wZXJ0aWVzPy5WcGNDb25maWc/LlN1Ym5ldElkcyxcbiAgICAgICk7XG4gICAgICBleHBlY3QoaGFzVnBjQ29uZmlnKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZ3JhbnRzIGFwcHJvcHJpYXRlIElBTSBwZXJtaXNzaW9ucycsICgpID0+IHtcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpJQU06OlJvbGUnLCB7XG4gICAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDoge1xuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246ICdzdHM6QXNzdW1lUm9sZScsXG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgUHJpbmNpcGFsOiB7XG4gICAgICAgICAgICAgICAgU2VydmljZTogJ2xhbWJkYS5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -249,5 +249,5 @@ class Frontend extends constructs_1.Construct {
249
249
  }
250
250
  exports.Frontend = Frontend;
251
251
  _a = JSII_RTTI_SYMBOL_1;
252
- Frontend[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.Frontend", version: "1.4.1" };
252
+ Frontend[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.Frontend", version: "1.6.0" };
253
253
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL3dlYmFwcC9mcm9udGVuZC1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLDZCQUE2QjtBQUM3Qiw2Q0FBNEU7QUFFNUUsK0RBU29DO0FBQ3BDLCtFQUFvRTtBQUNwRSxpREFBOEQ7QUFDOUQseURBQTZFO0FBQzdFLHlFQUFtRTtBQUNuRSwrQ0FBaUY7QUFDakYsNkRBQWtEO0FBQ2xELHFFQUF5RTtBQUN6RSwyQ0FBdUM7QUFDdkMsNENBQW1GO0FBRW5GOztHQUVHO0FBQ1UsUUFBQSwyQkFBMkIsR0FBb0I7SUFDMUQ7UUFDRSxVQUFVLEVBQUUsR0FBRztRQUNmLGtCQUFrQixFQUFFLEdBQUc7UUFDdkIsZ0JBQWdCLEVBQUUsYUFBYTtLQUNoQztJQUNEO1FBQ0UsVUFBVSxFQUFFLEdBQUc7UUFDZixrQkFBa0IsRUFBRSxHQUFHO1FBQ3ZCLGdCQUFnQixFQUFFLGFBQWE7S0FDaEM7Q0FDRixDQUFDO0FBdURGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFZckM7Ozs7O09BS0c7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM5QiwrQkFBaUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUM1QixJQUFJLCtEQUFtRCxFQUFFLENBQzFELENBQUM7UUFDSixDQUFDO1FBRUQsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0Isa0NBQWtDO1FBQ2xDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElB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cUJBQU8sQ0FBQyxJQUFJLEVBQUUscUJBQXFCLEVBQUU7Z0JBQzNELElBQUksRUFBRSxZQUFZLENBQUMsVUFBVTtnQkFDN0IsVUFBVSxFQUFFLFlBQVksQ0FBQyxVQUFVO2dCQUNuQyxNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxzQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEUsQ0FBQyxDQUFDO1lBRUgseUNBQXlDO1lBQ3pDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEdBQUc7UUFDUixPQUFPLElBQUksQ0FBQyxVQUFVO1lBQ3BCLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDOUIsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSSxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixDQUFDO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztJQUNoQyxDQUFDOztBQWxQSCw0QkFtUEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEb2NrZXJJbWFnZSwgUHJvcGVydHlJbmplY3RvcnMsIFJlbW92YWxQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJQ2VydGlmaWNhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB7XG4gIERpc3RyaWJ1dGlvbixcbiAgRGlzdHJpYnV0aW9uUHJvcHMsXG4gIEVycm9yUmVzcG9uc2UsXG4gIEZ1bmN0aW9uIGFzIENsb3VkRnJvbnRGdW5jdGlvbixcbiAgRnVuY3Rpb25Db2RlLFxuICBGdW5jdGlvbkV2ZW50VHlwZSxcbiAgUHJpY2VDbGFzcyxcbiAgVmlld2VyUHJvdG9jb2xQb2xpY3ksXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCB7IFMzQnVja2V0T3JpZ2luIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQtb3JpZ2lucyc7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQVJlY29yZCwgSUhvc3RlZFpvbmUsIFJlY29yZFRhcmdldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJztcbmltcG9ydCB7IENsb3VkRnJvbnRUYXJnZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1My10YXJnZXRzJztcbmltcG9ydCB7IEJsb2NrUHVibGljQWNjZXNzLCBCdWNrZXQsIEJ1Y2tldEVuY3J5cHRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQXNzZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50JztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2xvdWRmcm9udERpc3RyaWJ1dGlvbk9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yIH0gZnJvbSAnLi4vdXRpbGl0aWVzJztcblxuLyoqXG4gKiBEZWZhdWx0IENsb3VkRnJvbnQgZXJyb3IgcmVzcG9uc2VzIGZvciBTaW5nbGUgUGFnZSBBcHBsaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1BBX0VSUk9SX1JFU1BPTlNFUzogRXJyb3JSZXNwb25zZVtdID0gW1xuICB7XG4gICAgaHR0cFN0YXR1czogNDAzLFxuICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgIHJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gIH0sXG4gIHtcbiAgICBodHRwU3RhdHVzOiA0MDQsXG4gICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgcmVzcG9uc2VQYWdlUGF0aDogJy9pbmRleC5odG1sJyxcbiAgfSxcbl07XG5cbi8qKlxuICogQ3VzdG9tIGRvbWFpbiBjb25maWd1cmF0aW9uIGZvciB0aGUgZnJvbnRlbmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Eb21haW5Db25maWcge1xuICAvKiogRG9tYWluIG5hbWUgZm9yIHRoZSBmcm9udGVuZCAoZS5nLiwgJ2FwcC5leGFtcGxlLmNvbScpICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcbiAgLyoqIFNTTCBjZXJ0aWZpY2F0ZSBmb3IgdGhlIGRvbWFpbiAocmVxdWlyZWQgd2hlbiBkb21haW5OYW1lIGlzIHByb3ZpZGVkKSAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlO1xuICAvKiogT3B0aW9uYWwgaG9zdGVkIHpvbmUgZm9yIGF1dG9tYXRpYyBETlMgcmVjb3JkIGNyZWF0aW9uICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU/OiBJSG9zdGVkWm9uZTtcbn1cblxuLyoqXG4gKiBBZGRpdGlvbmFsIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsRGlzdHJpYnV0aW9uUHJvcHMge1xuICAvKiogT3B0aW9uYWwgY29tbWVudCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiAqL1xuICByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgZW5hYmxlZCBmbGFnIGZvciB0aGUgZGlzdHJpYnV0aW9uICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICAvKiogT3B0aW9uYWwgcHJpY2UgY2xhc3MgZm9yIHRoZSBkaXN0cmlidXRpb24gKi9cbiAgcmVhZG9ubHkgcHJpY2VDbGFzcz86IFByaWNlQ2xhc3M7XG4gIC8qKiBPcHRpb25hbCB3ZWIgQUNMIElEIGZvciB0aGUgZGlzdHJpYnV0aW9uICovXG4gIHJlYWRvbmx5IHdlYkFjbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBGcm9udGVuZCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGcm9udGVuZFByb3BzIHtcbiAgLyoqIEJhc2UgZGlyZWN0b3J5IG9mIHRoZSBmcm9udGVuZCBzb3VyY2UgY29kZSAqL1xuICByZWFkb25seSBzb3VyY2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqIERpcmVjdG9yeSB3aGVyZSBidWlsZCBhcnRpZmFjdHMgYXJlIGxvY2F0ZWQgYWZ0ZXIgYnVpbGQgY29tbWFuZCBjb21wbGV0ZXMgKGRlZmF1bHRzIHRvICd7c291cmNlRGlyZWN0b3J5fS9idWlsZCcpICovXG4gIHJlYWRvbmx5IGJ1aWxkT3V0cHV0RGlyZWN0b3J5Pzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgYnVpbGQgY29tbWFuZCAoZGVmYXVsdHMgdG8gJ25wbSBydW4gYnVpbGQnKSAqL1xuICByZWFkb25seSBidWlsZENvbW1hbmQ/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBjdXN0b20gZG9tYWluIGNvbmZpZ3VyYXRpb24gKi9cbiAgcmVhZG9ubHkgY3VzdG9tRG9tYWluPzogQ3VzdG9tRG9tYWluQ29uZmlnO1xuICAvKiogT3B0aW9uYWwgQ2xvdWRGcm9udCBlcnJvciByZXNwb25zZXMgKGRlZmF1bHRzIHRvIFNQQS1mcmllbmRseSByZXNwb25zZXMpICovXG4gIHJlYWRvbmx5IGVycm9yUmVzcG9uc2VzPzogRXJyb3JSZXNwb25zZVtdO1xuICAvKiogT3B0aW9uYWwgYWRkaXRpb25hbCBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBwcm9wZXJ0aWVzICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvblByb3BzPzogQWRkaXRpb25hbERpc3RyaWJ1dGlvblByb3BzO1xuICAvKiogT3B0aW9uYWwgZmxhZyB0byBza2lwIHRoZSBidWlsZCBwcm9jZXNzICh1c2VmdWwgZm9yIHByZS1idWlsdCBhcnRpZmFjdHMpICovXG4gIHJlYWRvbmx5IHNraXBCdWlsZD86IGJvb2xlYW47XG4gIC8qKiBPcHRpb25hbCByZW1vdmFsIHBvbGljeSBmb3IgYWxsIHJlc291cmNlcyAoZGVmYXVsdHMgdG8gREVTVFJPWSkgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG4gIC8qKlxuICAgKiBFbmFibGUgbG9nZ2luZyBhbmQgdHJhY2luZyBmb3IgYWxsIHN1cHBvcnRpbmcgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZyb250ZW5kIGNvbnN0cnVjdCB0aGF0IGRlcGxveXMgYSBmcm9udGVuZCBhcHBsaWNhdGlvbiB0byBTMyBhbmQgQ2xvdWRGcm9udFxuICpcbiAqIFRoaXMgY29uc3RydWN0IHByb3ZpZGVzIGEgY29tcGxldGUgc29sdXRpb24gZm9yIGhvc3Rpbmcgc3RhdGljIGZyb250ZW5kIGFwcGxpY2F0aW9uc1xuICogd2l0aCB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOlxuICogLSBTMyBidWNrZXQgZm9yIGhvc3Rpbmcgc3RhdGljIGFzc2V0cyB3aXRoIHNlY3VyaXR5IGJlc3QgcHJhY3RpY2VzXG4gKiAtIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGZvciBnbG9iYWwgY29udGVudCBkZWxpdmVyeVxuICogLSBPcHRpb25hbCBjdXN0b20gZG9tYWluIHdpdGggU1NMIGNlcnRpZmljYXRlXG4gKiAtIEF1dG9tYXRpYyBidWlsZCBwcm9jZXNzIGV4ZWN1dGlvblxuICogLSBTUEEtZnJpZW5kbHkgZXJyb3IgaGFuZGxpbmcgYnkgZGVmYXVsdFxuICogLSBTZWN1cml0eSBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgRnJvbnRlbmQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKiogVGhlIFMzIGJ1Y2tldCBob3N0aW5nIHRoZSBmcm9udGVuZCBhc3NldHMgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1Y2tldDogQnVja2V0O1xuICAvKiogVGhlIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uICovXG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb246IERpc3RyaWJ1dGlvbjtcbiAgLyoqIFRoZSBidWNrZXQgZGVwbG95bWVudCB0aGF0IHVwbG9hZHMgdGhlIGZyb250ZW5kIGFzc2V0cyAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0RGVwbG95bWVudDogQnVja2V0RGVwbG95bWVudDtcbiAgLyoqIFRoZSBjdXN0b20gZG9tYWluIG5hbWUgKGlmIGNvbmZpZ3VyZWQpICovXG4gIHB1YmxpYyByZWFkb25seSBkb21haW5OYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIEFzc2V0IGNvbnRhaW5pbmcgdGhlIGZyb250ZW5kIHNvdXJjZSBjb2RlICovXG4gIHB1YmxpYyByZWFkb25seSBhc3NldD86IEFzc2V0O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEZyb250ZW5kXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0IElEXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgZnJvbnRlbmQgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEZyb250ZW5kUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgIFByb3BlcnR5SW5qZWN0b3JzLm9mKHRoaXMpLmFkZChcbiAgICAgICAgbmV3IENsb3VkZnJvbnREaXN0cmlidXRpb25PYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3RvcigpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBwYXJhbWV0ZXJzXG4gICAgdGhpcy5fdmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICAvLyBHZXQgcmVtb3ZhbCBwb2xpY3kgd2l0aCBkZWZhdWx0XG4gICAgY29uc3QgcmVtb3ZhbFBvbGljeSA9IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuXG4gICAgLy8gQ3JlYXRlIGFzc2V0IGZvciBzb3VyY2UgY29kZSB3aXRoIG9wdGlvbmFsIGJ1bmRsaW5nXG4gICAgaWYgKCFwcm9wcy5za2lwQnVpbGQpIHtcbiAgICAgIHRoaXMuYXNzZXQgPSB0aGlzLl9jcmVhdGVBc3NldChwcm9wcyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIFMzIGJ1Y2tldCBmb3IgaG9zdGluZ1xuICAgIHRoaXMuYnVja2V0ID0gbmV3IEJ1Y2tldCh0aGlzLCAnRnJvbnRlbmRCdWNrZXQnLCB7XG4gICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcmVtb3ZhbFBvbGljeSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiByZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IHRoaXMuX2NyZWF0ZURpc3RyaWJ1dGlvbihwcm9wcywgcmVtb3ZhbFBvbGljeSk7XG5cbiAgICAvLyBEZXBsb3kgZnJvbnRlbmQgYXNzZXRzIHRvIFMzXG4gICAgY29uc3QgYnVpbGRPdXRwdXREaXJlY3RvcnkgPSBwcm9wcy5idWlsZE91dHB1dERpcmVjdG9yeSB8fCBwYXRoLmpvaW4ocHJvcHMuc291cmNlRGlyZWN0b3J5LCAnYnVpbGQnKTtcbiAgICB0aGlzLmJ1Y2tldERlcGxveW1lbnQgPSBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCAnRnJvbnRlbmREZXBsb3ltZW50Jywge1xuICAgICAgc291cmNlczogdGhpcy5hc3NldFxuICAgICAgICA/IFtTb3VyY2UuYnVja2V0KHRoaXMuYXNzZXQuYnVja2V0LCB0aGlzLmFzc2V0LnMzT2JqZWN0S2V5KV1cbiAgICAgICAgOiBbU291cmNlLmFzc2V0KGJ1aWxkT3V0cHV0RGlyZWN0b3J5KV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogdGhpcy5idWNrZXQsXG4gICAgICBkaXN0cmlidXRpb246IHRoaXMuZGlzdHJpYnV0aW9uLFxuICAgICAgZGlzdHJpYnV0aW9uUGF0aHM6IFsnLyonXSxcbiAgICB9KTtcblxuICAgIHRoaXMuYnVja2V0RGVwbG95bWVudC5oYW5kbGVyUm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICAnY2xvdWRmcm9udDpHZXRJbnZhbGlkYXRpb24nLFxuICAgICAgICAnY2xvdWRmcm9udDpDcmVhdGVJbnZhbGlkYXRpb24nLFxuICAgICAgXSxcbiAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgfSkpO1xuXG4gICAgLy8gTm90ZTogQnVja2V0RGVwbG95bWVudCBkb2Vzbid0IHN1cHBvcnQgYXBwbHlSZW1vdmFsUG9saWN5IGRpcmVjdGx5XG4gICAgLy8gSXQgd2lsbCBiZSBjbGVhbmVkIHVwIHdoZW4gdGhlIGJ1Y2tldCBpcyBkZWxldGVkIGR1ZSB0byBhdXRvRGVsZXRlT2JqZWN0c1xuXG4gICAgLy8gU2V0dXAgY3VzdG9tIGRvbWFpbiBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5jdXN0b21Eb21haW4pIHtcbiAgICAgIHRoaXMuZG9tYWluTmFtZSA9IHByb3BzLmN1c3RvbURvbWFpbi5kb21haW5OYW1lO1xuICAgICAgdGhpcy5fc2V0dXBDdXN0b21Eb21haW4ocHJvcHMuY3VzdG9tRG9tYWluLCByZW1vdmFsUG9saWN5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjb25zdHJ1Y3QgcHJvcGVydGllc1xuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGZyb250ZW5kIHByb3BlcnRpZXNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlUHJvcHMocHJvcHM6IEZyb250ZW5kUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAoIXByb3BzLnNvdXJjZURpcmVjdG9yeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzb3VyY2VEaXJlY3RvcnkgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuY3VzdG9tRG9tYWluPy5kb21haW5OYW1lICYmICFwcm9wcy5jdXN0b21Eb21haW4uY2VydGlmaWNhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2VydGlmaWNhdGUgaXMgcmVxdWlyZWQgd2hlbiBkb21haW5OYW1lIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQXNzZXQgZm9yIHRoZSBmcm9udGVuZCBzb3VyY2UgY29kZSB3aXRoIGJ1bmRsaW5nXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgZnJvbnRlbmQgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBUaGUgQXNzZXQgY29udGFpbmluZyB0aGUgYnVpbHQgZnJvbnRlbmRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZUFzc2V0KHByb3BzOiBGcm9udGVuZFByb3BzKTogQXNzZXQge1xuICAgIGNvbnN0IGJ1aWxkQ29tbWFuZCA9IHByb3BzLmJ1aWxkQ29tbWFuZCB8fCAnbnBtIHJ1biBidWlsZCc7XG4gICAgY29uc3QgYnVpbGRPdXRwdXREaXJlY3RvcnkgPSBwcm9wcy5idWlsZE91dHB1dERpcmVjdG9yeSB8fCBwYXRoLmpvaW4ocHJvcHMuc291cmNlRGlyZWN0b3J5LCAnYnVpbGQnKTtcblxuICAgIC8vIEV4dHJhY3QgdGhlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGZyb20gdGhlIGZ1bGwgcGF0aFxuICAgIGNvbnN0IGJ1aWxkRGlyTmFtZSA9IHBhdGguYmFzZW5hbWUoYnVpbGRPdXRwdXREaXJlY3RvcnkpO1xuXG4gICAgY29uc3QgYXNzZXQgPSBuZXcgQXNzZXQodGhpcywgJ0Zyb250ZW5kQXNzZXQnLCB7XG4gICAgICBwYXRoOiBwcm9wcy5zb3VyY2VEaXJlY3RvcnksXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBpbWFnZTogRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdwdWJsaWMuZWNyLmF3cy9kb2NrZXIvbGlicmFyeS9ub2RlOmx0cy1hbHBpbmUnKSxcbiAgICAgICAgY29tbWFuZDogW1xuICAgICAgICAgICdzaCcsICctYycsIFtcbiAgICAgICAgICAgICdjZCAvYXNzZXQtaW5wdXQnLFxuICAgICAgICAgICAgJ25wbSBjaSAtLW9ubHk9cHJvZHVjdGlvbicsXG4gICAgICAgICAgICBidWlsZENvbW1hbmQsXG4gICAgICAgICAgICBgY3AgLXIgLi8ke2J1aWxkRGlyTmFtZX0vKiAvYXNzZXQtb3V0cHV0L2AsXG4gICAgICAgICAgXS5qb2luKCcgJiYgJyksXG4gICAgICAgIF0sXG4gICAgICAgIHVzZXI6ICdyb290JyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBOb3RlOiBBc3NldCBkb2Vzbid0IHN1cHBvcnQgYXBwbHlSZW1vdmFsUG9saWN5IGRpcmVjdGx5XG4gICAgLy8gVGhlIHVuZGVybHlpbmcgUzMgb2JqZWN0cyB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIGFzc2V0IGJ1Y2tldCdzIHJlbW92YWwgcG9saWN5XG5cbiAgICByZXR1cm4gYXNzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAgICogQHBhcmFtIHByb3BzIFRoZSBmcm9udGVuZCBwcm9wZXJ0aWVzXG4gICAqIEBwYXJhbSByZW1vdmFsUG9saWN5IFRoZSByZW1vdmFsIHBvbGljeSB0byBhcHBseVxuICAgKiBAcmV0dXJucyBUaGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZURpc3RyaWJ1dGlvbihwcm9wczogRnJvbnRlbmRQcm9wcywgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeSk6IERpc3RyaWJ1dGlvbiB7XG4gICAgY29uc3QgZXJyb3JSZXNwb25zZXMgPSBwcm9wcy5lcnJvclJlc3BvbnNlcyB8fCBERUZBVUxUX1NQQV9FUlJPUl9SRVNQT05TRVM7XG5cbiAgICAvLyBDcmVhdGUgYSBDbG91ZEZyb250IGZ1bmN0aW9uIGZvciBzZWN1cml0eSBoZWFkZXJzXG4gICAgY29uc3Qgc2VjdXJpdHlIZWFkZXJzRnVuY3Rpb24gPSBuZXcgQ2xvdWRGcm9udEZ1bmN0aW9uKHRoaXMsICdTZWN1cml0eUhlYWRlcnNGdW5jdGlvbicsIHtcbiAgICAgIGNvZGU6IEZ1bmN0aW9uQ29kZS5mcm9tSW5saW5lKGBcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgICAgICAgIHZhciByZXNwb25zZSA9IGV2ZW50LnJlc3BvbnNlO1xuICAgICAgICAgIHZhciBoZWFkZXJzID0gcmVzcG9uc2UuaGVhZGVycztcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBBZGQgc2VjdXJpdHkgaGVhZGVyc1xuICAgICAgICAgIGhlYWRlcnNbJ3N0cmljdC10cmFuc3BvcnQtc2VjdXJpdHknXSA9IHsgdmFsdWU6ICdtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViZG9tYWluczsgcHJlbG9hZCcgfTtcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUtb3B0aW9ucyddID0geyB2YWx1ZTogJ25vc25pZmYnIH07XG4gICAgICAgICAgaGVhZGVyc1sneC1mcmFtZS1vcHRpb25zJ10gPSB7IHZhbHVlOiAnREVOWScgfTtcbiAgICAgICAgICBoZWFkZXJzWyd4LWNvbnRlbnQtdHlwZS1vcHRpb25zJ10gPSB7IHZhbHVlOiAnbm9zbmlmZicgfTtcbiAgICAgICAgICBoZWFkZXJzWydyZWZlcnJlci1wb2xpY3knXSA9IHsgdmFsdWU6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyB9O1xuICAgICAgICAgIGhlYWRlcnNbJ3Blcm1pc3Npb25zLXBvbGljeSddID0geyB2YWx1ZTogJ2NhbWVyYT0oKSwgbWljcm9waG9uZT0oKSwgZ2VvbG9jYXRpb249KCknIH07XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICBgKSxcbiAgICB9KTtcblxuICAgIC8vIEFwcGx5IHJlbW92YWwgcG9saWN5IHRvIENsb3VkRnJvbnQgZnVuY3Rpb25cbiAgICBzZWN1cml0eUhlYWRlcnNGdW5jdGlvbi5hcHBseVJlbW92YWxQb2xpY3kocmVtb3ZhbFBvbGljeSk7XG5cbiAgICBjb25zdCBkaXN0cmlidXRpb25Db25maWc6IERpc3RyaWJ1dGlvblByb3BzID0ge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogUzNCdWNrZXRPcmlnaW4ud2l0aE9yaWdpbkFjY2Vzc0NvbnRyb2wodGhpcy5idWNrZXQpLFxuICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgIGZ1bmN0aW9uQXNzb2NpYXRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb246IHNlY3VyaXR5SGVhZGVyc0Z1bmN0aW9uLFxuICAgICAgICAgICAgZXZlbnRUeXBlOiBGdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVTUE9OU0UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0Um9vdE9iamVjdDogJ2luZGV4Lmh0bWwnLFxuICAgICAgZXJyb3JSZXNwb25zZXMsXG4gICAgICBjb21tZW50OiBwcm9wcy5kaXN0cmlidXRpb25Qcm9wcz8uY29tbWVudCxcbiAgICAgIGVuYWJsZWQ6IHByb3BzLmRpc3RyaWJ1dGlvblByb3BzPy5lbmFibGVkLFxuICAgICAgcHJpY2VDbGFzczogcHJvcHMuZGlzdHJpYnV0aW9uUHJvcHM/LnByaWNlQ2xhc3MsXG4gICAgICB3ZWJBY2xJZDogcHJvcHMuZGlzdHJpYnV0aW9uUHJvcHM/LndlYkFjbElkLFxuICAgIH07XG5cbiAgICAvLyBBZGQgY3VzdG9tIGRvbWFpbiBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkXG4gICAgbGV0IGRpc3RyaWJ1dGlvbjogRGlzdHJpYnV0aW9uO1xuICAgIGlmIChwcm9wcy5jdXN0b21Eb21haW4pIHtcbiAgICAgIGRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgJ0Zyb250ZW5kRGlzdHJpYnV0aW9uJywge1xuICAgICAgICAuLi5kaXN0cmlidXRpb25Db25maWcsXG4gICAgICAgIGRvbWFpbk5hbWVzOiBbcHJvcHMuY3VzdG9tRG9tYWluLmRvbWFpbk5hbWVdLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY3VzdG9tRG9tYWluLmNlcnRpZmljYXRlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgJ0Zyb250ZW5kRGlzdHJpYnV0aW9uJywgZGlzdHJpYnV0aW9uQ29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSByZW1vdmFsIHBvbGljeSB0byBkaXN0cmlidXRpb25cbiAgICBkaXN0cmlidXRpb24uYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuXG4gICAgcmV0dXJuIGRpc3RyaWJ1dGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGN1c3RvbSBkb21haW4gd2l0aCBSb3V0ZTUzIHJlY29yZFxuICAgKiBAcGFyYW0gY3VzdG9tRG9tYWluIFRoZSBjdXN0b20gZG9tYWluIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIHJlbW92YWxQb2xpY3kgVGhlIHJlbW92YWwgcG9saWN5IHRvIGFwcGx5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cEN1c3RvbURvbWFpbihjdXN0b21Eb21haW46IEN1c3RvbURvbWFpbkNvbmZpZywgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeSk6IHZvaWQge1xuICAgIGlmIChjdXN0b21Eb21haW4uaG9zdGVkWm9uZSkge1xuICAgICAgY29uc3QgYWxpYXNSZWNvcmQgPSBuZXcgQVJlY29yZCh0aGlzLCAnRnJvbnRlbmRBbGlhc1JlY29yZCcsIHtcbiAgICAgICAgem9uZTogY3VzdG9tRG9tYWluLmhvc3RlZFpvbmUsXG4gICAgICAgIHJlY29yZE5hbWU6IGN1c3RvbURvbWFpbi5kb21haW5OYW1lLFxuICAgICAgICB0YXJnZXQ6IFJlY29yZFRhcmdldC5mcm9tQWxpYXMobmV3IENsb3VkRnJvbnRUYXJnZXQodGhpcy5kaXN0cmlidXRpb24pKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBcHBseSByZW1vdmFsIHBvbGljeSB0byBSb3V0ZTUzIHJlY29yZFxuICAgICAgYWxpYXNSZWNvcmQuYXBwbHlSZW1vdmFsUG9saWN5KHJlbW92YWxQb2xpY3kpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBVUkwgb2YgdGhlIGZyb250ZW5kIGFwcGxpY2F0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBmcm9udGVuZCBVUkxcbiAgICovXG4gIHB1YmxpYyB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kb21haW5OYW1lXG4gICAgICA/IGBodHRwczovLyR7dGhpcy5kb21haW5OYW1lfWBcbiAgICAgIDogYGh0dHBzOi8vJHt0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gZG9tYWluIG5hbWVcbiAgICogQHJldHVybnMgVGhlIENsb3VkRnJvbnQgZG9tYWluIG5hbWVcbiAgICovXG4gIHB1YmxpYyBkaXN0cmlidXRpb25Eb21haW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgUzMgYnVja2V0IG5hbWVcbiAgICogQHJldHVybnMgVGhlIFMzIGJ1Y2tldCBuYW1lXG4gICAqL1xuICBwdWJsaWMgYnVja2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lO1xuICB9XG59XG4iXX0=
@@ -9,6 +9,7 @@ const assertions_1 = require("aws-cdk-lib/assertions");
9
9
  const aws_certificatemanager_1 = require("aws-cdk-lib/aws-certificatemanager");
10
10
  const aws_route53_1 = require("aws-cdk-lib/aws-route53");
11
11
  const cdk_nag_1 = require("cdk-nag");
12
+ const test_utils_1 = require("../../utilities/test-utils");
12
13
  const frontend_construct_1 = require("../frontend-construct");
13
14
  // Create temporary build directory for tests
14
15
  const testBuildDir = '/tmp/test-frontend-build-nag';
@@ -17,7 +18,7 @@ if (!fs.existsSync(testBuildDir)) {
17
18
  }
18
19
  fs.writeFileSync(path.join(testBuildDir, 'index.html'), '<!DOCTYPE html><html><head><title>Test</title></head><body><h1>Test App</h1></body></html>');
19
20
  // Create app and stack
20
- const app = new aws_cdk_lib_1.App();
21
+ const app = (0, test_utils_1.createTestApp)();
21
22
  const stack = new aws_cdk_lib_1.Stack(app, 'TestStack', {
22
23
  env: {
23
24
  account: '123456789012',
@@ -263,4 +264,4 @@ test('No unsuppressed errors', () => {
263
264
  }
264
265
  expect(errors).toHaveLength(0);
265
266
  });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtY29uc3RydWN0LW5hZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL3dlYmFwcC90ZXN0cy9mcm9udGVuZC1jb25zdHJ1Y3QtbmFnLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7O0FBRXRDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsNkNBQWtEO0FBQ2xELHVEQUFzRTtBQUN0RSwrRUFBaUU7QUFDakUseURBQXFEO0FBQ3JELHFDQUE4RDtBQUM5RCw4REFBaUQ7QUFFakQsNkNBQTZDO0FBQzdDLE1BQU0sWUFBWSxHQUFHLDhCQUE4QixDQUFDO0FBQ3BELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDakMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBQ0QsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsRUFBRSw0RkFBNEYsQ0FBQyxDQUFDO0FBRXRKLHVCQUF1QjtBQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRTtJQUN4QyxHQUFHLEVBQUU7UUFDSCxPQUFPLEVBQUUsY0FBYztRQUN2QixNQUFNLEVBQUUsV0FBVztLQUNwQjtDQUNGLENBQUMsQ0FBQztBQUVILG1EQUFtRDtBQUNuRCxNQUFNLFdBQVcsR0FBRyxvQ0FBVyxDQUFDLGtCQUFrQixDQUNoRCxLQUFLLEVBQ0wsYUFBYSxFQUNiLHFGQUFxRixDQUN0RixDQUFDO0FBRUYscUNBQXFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFHLHdCQUFVLENBQUMs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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBBc3BlY3RzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVGVtcGxhdGUsIEFubm90YXRpb25zLCBNYXRjaCB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHsgQ2VydGlmaWNhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB7IEhvc3RlZFpvbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgeyBBd3NTb2x1dGlvbnNDaGVja3MsIE5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ2Nkay1uYWcnO1xuaW1wb3J0IHsgRnJvbnRlbmQgfSBmcm9tICcuLi9mcm9udGVuZC1jb25zdHJ1Y3QnO1xuXG4vLyBDcmVhdGUgdGVtcG9yYXJ5IGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGVzdHNcbmNvbnN0IHRlc3RCdWlsZERpciA9ICcvdG1wL3Rlc3QtZnJvbnRlbmQtYnVpbGQtbmFnJztcbmlmICghZnMuZXhpc3RzU3luYyh0ZXN0QnVpbGREaXIpKSB7XG4gIGZzLm1rZGlyU3luYyh0ZXN0QnVpbGREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odGVzdEJ1aWxkRGlyLCAnaW5kZXguaHRtbCcpLCAnPCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+VGVzdCBBcHA8L2gxPjwvYm9keT48L2h0bWw+Jyk7XG5cbi8vIENyZWF0ZSBhcHAgYW5kIHN0YWNrXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gIGVudjoge1xuICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gIH0sXG59KTtcblxuLy8gQ3JlYXRlIFNTTCBjZXJ0aWZpY2F0ZSBmb3IgY3VzdG9tIGRvbWFpbiB0ZXN0aW5nXG5jb25zdCBjZXJ0aWZpY2F0ZSA9IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgc3RhY2ssXG4gICdDZXJ0aWZpY2F0ZScsXG4gICdhcm46YXdzOmFjbTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmNlcnRpZmljYXRlLzEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OTAxMicsXG4pO1xuXG4vLyBDcmVhdGUgaG9zdGVkIHpvbmUgZm9yIEROUyB0ZXN0aW5nXG5jb25zdCBob3N0ZWRab25lID0gSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoc3RhY2ssICdIb3N0ZWRab25lJywge1xuICBob3N0ZWRab25lSWQ6ICdaMTIzNDU2Nzg5JyxcbiAgem9uZU5hbWU6ICdleGFtcGxlLmNvbScsXG59KTtcblxuLy8gQ3JlYXRlIHRoZSBtYWluIEZyb250ZW5kIGNvbnN0cnVjdFxuY29uc3QgZnJvbnRlbmQgPSBuZXcgRnJvbnRlbmQoc3RhY2ssICdUZXN0RnJvbnRlbmQnLCB7XG4gIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICBjdXN0b21Eb21haW46IHtcbiAgICBkb21haW5OYW1lOiAnYXBwLmV4YW1wbGUuY29tJyxcbiAgICBjZXJ0aWZpY2F0ZSxcbiAgICBob3N0ZWRab25lLFxuICB9LFxuICBza2lwQnVpbGQ6IHRydWUsIC8vIFNraXAgYnVpbGQgZm9yIHRlc3Rpbmdcbn0pO1xuXG4vLyBBZGQgQ0RLIE5hZyBzdXBwcmVzc2lvbnMgZm9yIGtub3duIGFjY2VwdGFibGUgdmlvbGF0aW9uc1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKHN0YWNrLCBbXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlIxJyxcbiAgICByZWFzb246ICdDbG91ZEZyb250IGdlbyByZXN0cmljdGlvbnMgYXJlIGNvbmZpZ3VyZWQgYmFzZWQgb24gYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzJyxcbiAgfSxcbiAge1xuICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjInLFxuICAgIHJlYXNvbjogJ0Nsb3VkRnJvbnQgV0FGIGludGVncmF0aW9uIGlzIGNvbmZpZ3VyZWQgYmFzZWQgb24gc2VjdXJpdHkgcmVxdWlyZW1lbnRzJyxcbiAgfSxcbiAge1xuICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjMnLFxuICAgIHJlYXNvbjogJ0Nsb3VkRnJvbnQgYWNjZXNzIGxvZ2dpbmcgaXMgY29uZmlndXJlZCBiYXNlZCBvbiBjb21wbGlhbmNlIHJlcXVpcmVtZW50cycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlI0JyxcbiAgICByZWFzb246ICdDbG91ZEZyb250IHZpZXdlciBwcm90b2NvbCBwb2xpY3kgaXMgc2V0IHRvIHJlZGlyZWN0LXRvLWh0dHBzIGZvciBzZWN1cml0eScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1TMScsXG4gICAgcmVhc29uOiAnUzMgYnVja2V0IGFjY2VzcyBsb2dnaW5nIGlzIGNvbmZpZ3VyZWQgYmFzZWQgb24gY29tcGxpYW5jZSByZXF1aXJlbWVudHMnLFxuICB9LFxuICB7XG4gICAgaWQ6ICdBd3NTb2x1dGlvbnMtUzInLFxuICAgIHJlYXNvbjogJ1MzIGJ1Y2tldCBwdWJsaWMgYWNjZXNzIGlzIGJsb2NrZWQgYW5kIGFjY2VzcyBpcyBjb250cm9sbGVkIHZpYSBDbG91ZEZyb250IE9BQycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1TMycsXG4gICAgcmVhc29uOiAnUzMgYnVja2V0IFNTTCByZXF1ZXN0cyBvbmx5IHBvbGljeSBpcyBlbmZvcmNlZCB2aWEgQ2xvdWRGcm9udCBIVFRQUyByZWRpcmVjdCcsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1TMTAnLFxuICAgIHJlYXNvbjogJ1MzIGJ1Y2tldCBNRkEgZGVsZXRlIGlzIG1hbmFnZWQgdGhyb3VnaCBvcmdhbml6YXRpb25hbCBzZWN1cml0eSBwb2xpY2llcycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICByZWFzb246ICdBV1MgbWFuYWdlZCBwb2xpY2llcyBhcmUgYWNjZXB0YWJsZSBmb3Igc3RhbmRhcmQgTGFtYmRhIGV4ZWN1dGlvbiByb2xlcycsXG4gICAgYXBwbGllc1RvOiBbJ1BvbGljeTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnXSxcbiAgfSxcbiAge1xuICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgIHJlYXNvbjogJ0J1Y2tldERlcGxveW1lbnQgcmVxdWlyZXMgYnJvYWQgUzMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIGRlcGxveW1lbnQgYXNzZXRzJyxcbiAgICBhcHBsaWVzVG86IFtcbiAgICAgICdBY3Rpb246OnMzOkdldE9iamVjdConLFxuICAgICAgJ0FjdGlvbjo6czM6R2V0QnVja2V0KicsXG4gICAgICAnQWN0aW9uOjpzMzpMaXN0KicsXG4gICAgICAnQWN0aW9uOjpzMzpEZWxldGVPYmplY3QqJyxcbiAgICAgICdBY3Rpb246OnMzOkFib3J0KicsXG4gICAgICAnUmVzb3VyY2U6OmFybjo8QVdTOjpQYXJ0aXRpb24+OnMzOjo6Y2RrLWhuYjY1OWZkcy1hc3NldHMtPEFXUzo6QWNjb3VudElkPi08QVdTOjpSZWdpb24+LyonLFxuICAgICAgJ1Jlc291cmNlOjphcm46PEFXUzo6UGFydGl0aW9uPjpzMzo6OmNkay1obmI2NTlmZHMtYXNzZXRzLTEyMzQ1Njc4OTAxMi11cy1lYXN0LTEvKicsXG4gICAgICAnUmVzb3VyY2U6OjxUZXN0RnJvbnRlbmRGcm9udGVuZEJ1Y2tldEQzN0QyMkRFLkFybj4vKicsXG4gICAgICAnUmVzb3VyY2U6OionLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgcmVhc29uOiAnTGFtYmRhIHJ1bnRpbWUgdmVyc2lvbnMgYXJlIG1hbmFnZWQgYXQgdGhlIGFwcGxpY2F0aW9uIGRlcGxveW1lbnQgbGV2ZWwnLFxuICB9LFxuXSwgdHJ1ZSk7XG5cbi8vIEFwcGx5IENESyBOYWcgY2hlY2tzXG5Bc3BlY3RzLm9mKGFwcCkuYWRkKG5ldyBBd3NTb2x1dGlvbnNDaGVja3MoeyB2ZXJib3NlOiB0cnVlIH0pKTtcblxuLy8gU3ludGhlc2l6ZSB0aGUgc3RhY2tcblRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbi8vIENoZWNrIGZvciB1bnN1cHByZXNzZWQgd2FybmluZ3MgYW5kIGVycm9yc1xuY29uc3Qgd2FybmluZ3MgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmZpbmRXYXJuaW5nKCcqJywgTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cCgnQXdzU29sdXRpb25zLS4qJykpO1xuY29uc3QgZXJyb3JzID0gQW5ub3RhdGlvbnMuZnJvbVN0YWNrKHN0YWNrKS5maW5kRXJyb3IoJyonLCBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdBd3NTb2x1dGlvbnMtLionKSk7XG5cbi8vIFRlc3Q6IEZyb250ZW5kIGNvbnN0cnVjdCBpcyBwcm9wZXJseSBjcmVhdGVkIGFuZCBhY2Nlc3NpYmxlXG50ZXN0KCdGcm9udGVuZCBjb25zdHJ1Y3QgaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHknLCAoKSA9PiB7XG4gIGV4cGVjdChmcm9udGVuZCkudG9CZURlZmluZWQoKTtcbiAgZXhwZWN0KGZyb250ZW5kLm5vZGUuaWQpLnRvQmUoJ1Rlc3RGcm9udGVuZCcpO1xuICBleHBlY3QoZnJvbnRlbmQuYnVja2V0KS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoZnJvbnRlbmQuZGlzdHJpYnV0aW9uKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoZnJvbnRlbmQuYnVja2V0RGVwbG95bWVudCkudG9CZURlZmluZWQoKTtcbn0pO1xuXG4vLyBUZXN0OiBGcm9udGVuZCBjb25zdHJ1Y3QgaGFzIGV4cGVjdGVkIHByb3BlcnRpZXNcbnRlc3QoJ0Zyb250ZW5kIGNvbnN0cnVjdCBoYXMgZXhwZWN0ZWQgcHJvcGVydGllcycsICgpID0+IHtcbiAgZXhwZWN0KGZyb250ZW5kLmJ1Y2tldC5idWNrZXROYW1lKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoZnJvbnRlbmQuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoZnJvbnRlbmQuZG9tYWluTmFtZSkudG9CZSgnYXBwLmV4YW1wbGUuY29tJyk7XG4gIGV4cGVjdChmcm9udGVuZC51cmwoKSkudG9CZSgnaHR0cHM6Ly9hcHAuZXhhbXBsZS5jb20nKTtcbiAgZXhwZWN0KHR5cGVvZiBmcm9udGVuZC5idWNrZXROYW1lKCkpLnRvQmUoJ3N0cmluZycpO1xuICBleHBlY3QodHlwZW9mIGZyb250ZW5kLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWUoKSkudG9CZSgnc3RyaW5nJyk7XG59KTtcblxuLy8gVGVzdDogVGVtcGxhdGUgY29udGFpbnMgZXhwZWN0ZWQgZnJvbnRlbmQgcmVzb3VyY2VzXG50ZXN0KCdUZW1wbGF0ZSBjb250YWlucyBleHBlY3RlZCBmcm9udGVuZCByZXNvdXJjZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAvLyBWZXJpZnkgUzMgYnVja2V0IGV4aXN0cyB3aXRoIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgQnVja2V0RW5jcnlwdGlvbjoge1xuICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdDoge1xuICAgICAgICAgICAgU1NFQWxnb3JpdGhtOiAnQUVTMjU2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIFB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjoge1xuICAgICAgQmxvY2tQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgQmxvY2tQdWJsaWNQb2xpY3k6IHRydWUsXG4gICAgICBJZ25vcmVQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgUmVzdHJpY3RQdWJsaWNCdWNrZXRzOiB0cnVlLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBleGlzdHMgd2l0aCBzZWN1cml0eSBjb25maWd1cmF0aW9uXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb24nLCB7XG4gICAgRGlzdHJpYnV0aW9uQ29uZmlnOiB7XG4gICAgICBBbGlhc2VzOiBbJ2FwcC5leGFtcGxlLmNvbSddLFxuICAgICAgRGVmYXVsdFJvb3RPYmplY3Q6ICdpbmRleC5odG1sJyxcbiAgICAgIERlZmF1bHRDYWNoZUJlaGF2aW9yOiB7XG4gICAgICAgIFZpZXdlclByb3RvY29sUG9saWN5OiAncmVkaXJlY3QtdG8taHR0cHMnLFxuICAgICAgfSxcbiAgICAgIEN1c3RvbUVycm9yUmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBFcnJvckNvZGU6IDQwMyxcbiAgICAgICAgICBSZXNwb25zZUNvZGU6IDIwMCxcbiAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgRXJyb3JDb2RlOiA0MDQsXG4gICAgICAgICAgUmVzcG9uc2VDb2RlOiAyMDAsXG4gICAgICAgICAgUmVzcG9uc2VQYWdlUGF0aDogJy9pbmRleC5odG1sJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBWaWV3ZXJDZXJ0aWZpY2F0ZToge1xuICAgICAgICBBY21DZXJ0aWZpY2F0ZUFybjogJ2Fybjphd3M6YWNtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Y2VydGlmaWNhdGUvMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgU3NsU3VwcG9ydE1ldGhvZDogJ3NuaS1vbmx5JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVmVyaWZ5IENsb3VkRnJvbnQgc2VjdXJpdHkgaGVhZGVycyBmdW5jdGlvbiBleGlzdHNcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkZ1bmN0aW9uJywge1xuICAgIEZ1bmN0aW9uQ29uZmlnOiB7XG4gICAgICBSdW50aW1lOiAnY2xvdWRmcm9udC1qcy0xLjAnLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSBSb3V0ZTUzIEEgcmVjb3JkIGV4aXN0cyBmb3IgY3VzdG9tIGRvbWFpblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Um91dGU1Mzo6UmVjb3JkU2V0Jywge1xuICAgIFR5cGU6ICdBJyxcbiAgICBOYW1lOiAnYXBwLmV4YW1wbGUuY29tLicsXG4gICAgSG9zdGVkWm9uZUlkOiAnWjEyMzQ1Njc4OScsXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSBidWNrZXQgZGVwbG95bWVudCBleGlzdHNcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2UoJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCcsIHt9KTtcblxuICAvLyBWZXJpZnkgYXV0byBkZWxldGUgb2JqZWN0cyBjdXN0b20gcmVzb3VyY2UgZXhpc3RzXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlKCdDdXN0b206OlMzQXV0b0RlbGV0ZU9iamVjdHMnLCB7fSk7XG59KTtcblxuLy8gVGVzdDogRnJvbnRlbmQgY29uc3RydWN0IGVuZm9yY2VzIHNlY3VyaXR5IGJlc3QgcHJhY3RpY2VzXG50ZXN0KCdGcm9udGVuZCBjb25zdHJ1Y3QgZW5mb3JjZXMgc2VjdXJpdHkgYmVzdCBwcmFjdGljZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAvLyBWZXJpZnkgSFRUUFMgcmVkaXJlY3QgaXMgZW5mb3JjZWRcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvbicsIHtcbiAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgIERlZmF1bHRDYWNoZUJlaGF2aW9yOiB7XG4gICAgICAgIFZpZXdlclByb3RvY29sUG9saWN5OiAncmVkaXJlY3QtdG8taHR0cHMnLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBWZXJpZnkgUzMgYnVja2V0IGJsb2NrcyBwdWJsaWMgYWNjZXNzXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgIFB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjoge1xuICAgICAgQmxvY2tQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgQmxvY2tQdWJsaWNQb2xpY3k6IHRydWUsXG4gICAgICBJZ25vcmVQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgUmVzdHJpY3RQdWJsaWNCdWNrZXRzOiB0cnVlLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSBTMyBidWNrZXQgaGFzIGVuY3J5cHRpb25cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgQnVja2V0RW5jcnlwdGlvbjoge1xuICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdDoge1xuICAgICAgICAgICAgU1NFQWxnb3JpdGhtOiAnQUVTMjU2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG4vLyBUZXN0OiBGcm9udGVuZCBjb25zdHJ1Y3Qgc3VwcG9ydHMgU1BBIGFwcGxpY2F0aW9uc1xudGVzdCgnRnJvbnRlbmQgY29uc3RydWN0IHN1cHBvcnRzIFNQQSBhcHBsaWNhdGlvbnMnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAvLyBWZXJpZnkgU1BBLWZyaWVuZGx5IGVycm9yIHJlc3BvbnNlc1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uJywge1xuICAgIERpc3RyaWJ1dGlvbkNvbmZpZzoge1xuICAgICAgQ3VzdG9tRXJyb3JSZXNwb25zZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIEVycm9yQ29kZTogNDAzLFxuICAgICAgICAgIFJlc3BvbnNlQ29kZTogMjAwLFxuICAgICAgICAgIFJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBFcnJvckNvZGU6IDQwNCxcbiAgICAgICAgICBSZXNwb25zZUNvZGU6IDIwMCxcbiAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBWZXJpZnkgZGVmYXVsdCByb290IG9iamVjdCBpcyBzZXRcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvbicsIHtcbiAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgIERlZmF1bHRSb290T2JqZWN0OiAnaW5kZXguaHRtbCcsXG4gICAgfSxcbiAgfSk7XG59KTtcblxuLy8gVGVzdDogTm8gdW5zdXBwcmVzc2VkIHdhcm5pbmdzXG50ZXN0KCdObyB1bnN1cHByZXNzZWQgd2FybmluZ3MnLCAoKSA9PiB7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coJ0NESyBOYWcgV2FybmluZ3M6JywgSlNPTi5zdHJpbmdpZnkod2FybmluZ3MsIG51bGwsIDIpKTtcbiAgfVxuICBleHBlY3Qod2FybmluZ3MpLnRvSGF2ZUxlbmd0aCgwKTtcbn0pO1xuXG4vLyBUZXN0OiBObyB1bnN1cHByZXNzZWQgZXJyb3JzXG50ZXN0KCdObyB1bnN1cHByZXNzZWQgZXJyb3JzJywgKCkgPT4ge1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZygnQ0RLIE5hZyBFcnJvcnM6JywgSlNPTi5zdHJpbmdpZnkoZXJyb3JzLCBudWxsLCAyKSk7XG4gIH1cbiAgZXhwZWN0KGVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xufSk7XG4iXX0=
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtY29uc3RydWN0LW5hZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdXNlLWNhc2VzL3dlYmFwcC90ZXN0cy9mcm9udGVuZC1jb25zdHJ1Y3QtbmFnLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7O0FBRXRDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsNkNBQTZDO0FBQzdDLHVEQUFzRTtBQUN0RSwrRUFBaUU7QUFDakUseURBQXFEO0FBQ3JELHFDQUE4RDtBQUM5RCwyREFBMkQ7QUFDM0QsOERBQWlEO0FBRWpELDZDQUE2QztBQUM3QyxNQUFNLFlBQVksR0FBRyw4QkFBOEIsQ0FBQztBQUNwRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ2pDLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUNELEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQUUsNEZBQTRGLENBQUMsQ0FBQztBQUV0Six1QkFBdUI7QUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBQSwwQkFBYSxHQUFFLENBQUM7QUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUU7SUFDeEMsR0FBRyxFQUFFO1FBQ0gsT0FBTyxFQUFFLGNBQWM7UUFDdkIsTUFBTSxFQUFFLFdBQVc7S0FDcEI7Q0FDRixDQUFDLENBQUM7QUFFSCxtREFBbUQ7QUFDbkQsTUFBTSxXQUFXLEdBQUcsb0NBQVcsQ0FBQyxrQkFBa0IsQ0FDaEQsS0FBSyxFQUNMLGFBQWEsRUFDYixxRkFBcUYsQ0FDdEYsQ0FBQztBQUVGLHFDQUFxQztBQUNyQyxNQUFNLFVBQVUsR0FB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O0FBQ2pDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU3RhY2ssIEFzcGVjdHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUZW1wbGF0ZSwgQW5ub3RhdGlvbnMsIE1hdGNoIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBDZXJ0aWZpY2F0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0IHsgSG9zdGVkWm9uZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJztcbmltcG9ydCB7IEF3c1NvbHV0aW9uc0NoZWNrcywgTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnY2RrLW5hZyc7XG5pbXBvcnQgeyBjcmVhdGVUZXN0QXBwIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHsgRnJvbnRlbmQgfSBmcm9tICcuLi9mcm9udGVuZC1jb25zdHJ1Y3QnO1xuXG4vLyBDcmVhdGUgdGVtcG9yYXJ5IGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGVzdHNcbmNvbnN0IHRlc3RCdWlsZERpciA9ICcvdG1wL3Rlc3QtZnJvbnRlbmQtYnVpbGQtbmFnJztcbmlmICghZnMuZXhpc3RzU3luYyh0ZXN0QnVpbGREaXIpKSB7XG4gIGZzLm1rZGlyU3luYyh0ZXN0QnVpbGREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odGVzdEJ1aWxkRGlyLCAnaW5kZXguaHRtbCcpLCAnPCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPlRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48aDE+VGVzdCBBcHA8L2gxPjwvYm9keT48L2h0bWw+Jyk7XG5cbi8vIENyZWF0ZSBhcHAgYW5kIHN0YWNrXG5jb25zdCBhcHAgPSBjcmVhdGVUZXN0QXBwKCk7XG5jb25zdCBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snLCB7XG4gIGVudjoge1xuICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gIH0sXG59KTtcblxuLy8gQ3JlYXRlIFNTTCBjZXJ0aWZpY2F0ZSBmb3IgY3VzdG9tIGRvbWFpbiB0ZXN0aW5nXG5jb25zdCBjZXJ0aWZpY2F0ZSA9IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgc3RhY2ssXG4gICdDZXJ0aWZpY2F0ZScsXG4gICdhcm46YXdzOmFjbTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmNlcnRpZmljYXRlLzEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OTAxMicsXG4pO1xuXG4vLyBDcmVhdGUgaG9zdGVkIHpvbmUgZm9yIEROUyB0ZXN0aW5nXG5jb25zdCBob3N0ZWRab25lID0gSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoc3RhY2ssICdIb3N0ZWRab25lJywge1xuICBob3N0ZWRab25lSWQ6ICdaMTIzNDU2Nzg5JyxcbiAgem9uZU5hbWU6ICdleGFtcGxlLmNvbScsXG59KTtcblxuLy8gQ3JlYXRlIHRoZSBtYWluIEZyb250ZW5kIGNvbnN0cnVjdFxuY29uc3QgZnJvbnRlbmQgPSBuZXcgRnJvbnRlbmQoc3RhY2ssICdUZXN0RnJvbnRlbmQnLCB7XG4gIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICBjdXN0b21Eb21haW46IHtcbiAgICBkb21haW5OYW1lOiAnYXBwLmV4YW1wbGUuY29tJyxcbiAgICBjZXJ0aWZpY2F0ZSxcbiAgICBob3N0ZWRab25lLFxuICB9LFxuICBza2lwQnVpbGQ6IHRydWUsIC8vIFNraXAgYnVpbGQgZm9yIHRlc3Rpbmdcbn0pO1xuXG4vLyBBZGQgQ0RLIE5hZyBzdXBwcmVzc2lvbnMgZm9yIGtub3duIGFjY2VwdGFibGUgdmlvbGF0aW9uc1xuTmFnU3VwcHJlc3Npb25zLmFkZFJlc291cmNlU3VwcHJlc3Npb25zKHN0YWNrLCBbXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlIxJyxcbiAgICByZWFzb246ICdDbG91ZEZyb250IGdlbyByZXN0cmljdGlvbnMgYXJlIGNvbmZpZ3VyZWQgYmFzZWQgb24gYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzJyxcbiAgfSxcbiAge1xuICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjInLFxuICAgIHJlYXNvbjogJ0Nsb3VkRnJvbnQgV0FGIGludGVncmF0aW9uIGlzIGNvbmZpZ3VyZWQgYmFzZWQgb24gc2VjdXJpdHkgcmVxdWlyZW1lbnRzJyxcbiAgfSxcbiAge1xuICAgIGlkOiAnQXdzU29sdXRpb25zLUNGUjMnLFxuICAgIHJlYXNvbjogJ0Nsb3VkRnJvbnQgYWNjZXNzIGxvZ2dpbmcgaXMgY29uZmlndXJlZCBiYXNlZCBvbiBjb21wbGlhbmNlIHJlcXVpcmVtZW50cycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1DRlI0JyxcbiAgICByZWFzb246ICdDbG91ZEZyb250IHZpZXdlciBwcm90b2NvbCBwb2xpY3kgaXMgc2V0IHRvIHJlZGlyZWN0LXRvLWh0dHBzIGZvciBzZWN1cml0eScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1TMScsXG4gICAgcmVhc29uOiAnUzMgYnVja2V0IGFjY2VzcyBsb2dnaW5nIGlzIGNvbmZpZ3VyZWQgYmFzZWQgb24gY29tcGxpYW5jZSByZXF1aXJlbWVudHMnLFxuICB9LFxuICB7XG4gICAgaWQ6ICdBd3NTb2x1dGlvbnMtUzInLFxuICAgIHJlYXNvbjogJ1MzIGJ1Y2tldCBwdWJsaWMgYWNjZXNzIGlzIGJsb2NrZWQgYW5kIGFjY2VzcyBpcyBjb250cm9sbGVkIHZpYSBDbG91ZEZyb250IE9BQycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1TMycsXG4gICAgcmVhc29uOiAnUzMgYnVja2V0IFNTTCByZXF1ZXN0cyBvbmx5IHBvbGljeSBpcyBlbmZvcmNlZCB2aWEgQ2xvdWRGcm9udCBIVFRQUyByZWRpcmVjdCcsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1TMTAnLFxuICAgIHJlYXNvbjogJ1MzIGJ1Y2tldCBNRkEgZGVsZXRlIGlzIG1hbmFnZWQgdGhyb3VnaCBvcmdhbml6YXRpb25hbCBzZWN1cml0eSBwb2xpY2llcycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1JQU00JyxcbiAgICByZWFzb246ICdBV1MgbWFuYWdlZCBwb2xpY2llcyBhcmUgYWNjZXB0YWJsZSBmb3Igc3RhbmRhcmQgTGFtYmRhIGV4ZWN1dGlvbiByb2xlcycsXG4gICAgYXBwbGllc1RvOiBbJ1BvbGljeTo6YXJuOjxBV1M6OlBhcnRpdGlvbj46aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGUnXSxcbiAgfSxcbiAge1xuICAgIGlkOiAnQXdzU29sdXRpb25zLUlBTTUnLFxuICAgIHJlYXNvbjogJ0J1Y2tldERlcGxveW1lbnQgcmVxdWlyZXMgYnJvYWQgUzMgcGVybWlzc2lvbnMgdG8gbWFuYWdlIGRlcGxveW1lbnQgYXNzZXRzJyxcbiAgICBhcHBsaWVzVG86IFtcbiAgICAgICdBY3Rpb246OnMzOkdldE9iamVjdConLFxuICAgICAgJ0FjdGlvbjo6czM6R2V0QnVja2V0KicsXG4gICAgICAnQWN0aW9uOjpzMzpMaXN0KicsXG4gICAgICAnQWN0aW9uOjpzMzpEZWxldGVPYmplY3QqJyxcbiAgICAgICdBY3Rpb246OnMzOkFib3J0KicsXG4gICAgICAnUmVzb3VyY2U6OmFybjo8QVdTOjpQYXJ0aXRpb24+OnMzOjo6Y2RrLWhuYjY1OWZkcy1hc3NldHMtPEFXUzo6QWNjb3VudElkPi08QVdTOjpSZWdpb24+LyonLFxuICAgICAgJ1Jlc291cmNlOjphcm46PEFXUzo6UGFydGl0aW9uPjpzMzo6OmNkay1obmI2NTlmZHMtYXNzZXRzLTEyMzQ1Njc4OTAxMi11cy1lYXN0LTEvKicsXG4gICAgICAnUmVzb3VyY2U6OjxUZXN0RnJvbnRlbmRGcm9udGVuZEJ1Y2tldEQzN0QyMkRFLkFybj4vKicsXG4gICAgICAnUmVzb3VyY2U6OionLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ0F3c1NvbHV0aW9ucy1MMScsXG4gICAgcmVhc29uOiAnTGFtYmRhIHJ1bnRpbWUgdmVyc2lvbnMgYXJlIG1hbmFnZWQgYXQgdGhlIGFwcGxpY2F0aW9uIGRlcGxveW1lbnQgbGV2ZWwnLFxuICB9LFxuXSwgdHJ1ZSk7XG5cbi8vIEFwcGx5IENESyBOYWcgY2hlY2tzXG5Bc3BlY3RzLm9mKGFwcCkuYWRkKG5ldyBBd3NTb2x1dGlvbnNDaGVja3MoeyB2ZXJib3NlOiB0cnVlIH0pKTtcblxuLy8gU3ludGhlc2l6ZSB0aGUgc3RhY2tcblRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbi8vIENoZWNrIGZvciB1bnN1cHByZXNzZWQgd2FybmluZ3MgYW5kIGVycm9yc1xuY29uc3Qgd2FybmluZ3MgPSBBbm5vdGF0aW9ucy5mcm9tU3RhY2soc3RhY2spLmZpbmRXYXJuaW5nKCcqJywgTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cCgnQXdzU29sdXRpb25zLS4qJykpO1xuY29uc3QgZXJyb3JzID0gQW5ub3RhdGlvbnMuZnJvbVN0YWNrKHN0YWNrKS5maW5kRXJyb3IoJyonLCBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKCdBd3NTb2x1dGlvbnMtLionKSk7XG5cbi8vIFRlc3Q6IEZyb250ZW5kIGNvbnN0cnVjdCBpcyBwcm9wZXJseSBjcmVhdGVkIGFuZCBhY2Nlc3NpYmxlXG50ZXN0KCdGcm9udGVuZCBjb25zdHJ1Y3QgaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHknLCAoKSA9PiB7XG4gIGV4cGVjdChmcm9udGVuZCkudG9CZURlZmluZWQoKTtcbiAgZXhwZWN0KGZyb250ZW5kLm5vZGUuaWQpLnRvQmUoJ1Rlc3RGcm9udGVuZCcpO1xuICBleHBlY3QoZnJvbnRlbmQuYnVja2V0KS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoZnJvbnRlbmQuZGlzdHJpYnV0aW9uKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoZnJvbnRlbmQuYnVja2V0RGVwbG95bWVudCkudG9CZURlZmluZWQoKTtcbn0pO1xuXG4vLyBUZXN0OiBGcm9udGVuZCBjb25zdHJ1Y3QgaGFzIGV4cGVjdGVkIHByb3BlcnRpZXNcbnRlc3QoJ0Zyb250ZW5kIGNvbnN0cnVjdCBoYXMgZXhwZWN0ZWQgcHJvcGVydGllcycsICgpID0+IHtcbiAgZXhwZWN0KGZyb250ZW5kLmJ1Y2tldC5idWNrZXROYW1lKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoZnJvbnRlbmQuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoZnJvbnRlbmQuZG9tYWluTmFtZSkudG9CZSgnYXBwLmV4YW1wbGUuY29tJyk7XG4gIGV4cGVjdChmcm9udGVuZC51cmwoKSkudG9CZSgnaHR0cHM6Ly9hcHAuZXhhbXBsZS5jb20nKTtcbiAgZXhwZWN0KHR5cGVvZiBmcm9udGVuZC5idWNrZXROYW1lKCkpLnRvQmUoJ3N0cmluZycpO1xuICBleHBlY3QodHlwZW9mIGZyb250ZW5kLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWUoKSkudG9CZSgnc3RyaW5nJyk7XG59KTtcblxuLy8gVGVzdDogVGVtcGxhdGUgY29udGFpbnMgZXhwZWN0ZWQgZnJvbnRlbmQgcmVzb3VyY2VzXG50ZXN0KCdUZW1wbGF0ZSBjb250YWlucyBleHBlY3RlZCBmcm9udGVuZCByZXNvdXJjZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAvLyBWZXJpZnkgUzMgYnVja2V0IGV4aXN0cyB3aXRoIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb25cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgQnVja2V0RW5jcnlwdGlvbjoge1xuICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdDoge1xuICAgICAgICAgICAgU1NFQWxnb3JpdGhtOiAnQUVTMjU2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIFB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjoge1xuICAgICAgQmxvY2tQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgQmxvY2tQdWJsaWNQb2xpY3k6IHRydWUsXG4gICAgICBJZ25vcmVQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgUmVzdHJpY3RQdWJsaWNCdWNrZXRzOiB0cnVlLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBleGlzdHMgd2l0aCBzZWN1cml0eSBjb25maWd1cmF0aW9uXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb24nLCB7XG4gICAgRGlzdHJpYnV0aW9uQ29uZmlnOiB7XG4gICAgICBBbGlhc2VzOiBbJ2FwcC5leGFtcGxlLmNvbSddLFxuICAgICAgRGVmYXVsdFJvb3RPYmplY3Q6ICdpbmRleC5odG1sJyxcbiAgICAgIERlZmF1bHRDYWNoZUJlaGF2aW9yOiB7XG4gICAgICAgIFZpZXdlclByb3RvY29sUG9saWN5OiAncmVkaXJlY3QtdG8taHR0cHMnLFxuICAgICAgfSxcbiAgICAgIEN1c3RvbUVycm9yUmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBFcnJvckNvZGU6IDQwMyxcbiAgICAgICAgICBSZXNwb25zZUNvZGU6IDIwMCxcbiAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgRXJyb3JDb2RlOiA0MDQsXG4gICAgICAgICAgUmVzcG9uc2VDb2RlOiAyMDAsXG4gICAgICAgICAgUmVzcG9uc2VQYWdlUGF0aDogJy9pbmRleC5odG1sJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBWaWV3ZXJDZXJ0aWZpY2F0ZToge1xuICAgICAgICBBY21DZXJ0aWZpY2F0ZUFybjogJ2Fybjphd3M6YWNtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Y2VydGlmaWNhdGUvMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgU3NsU3VwcG9ydE1ldGhvZDogJ3NuaS1vbmx5JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gVmVyaWZ5IENsb3VkRnJvbnQgc2VjdXJpdHkgaGVhZGVycyBmdW5jdGlvbiBleGlzdHNcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkZ1bmN0aW9uJywge1xuICAgIEZ1bmN0aW9uQ29uZmlnOiB7XG4gICAgICBSdW50aW1lOiAnY2xvdWRmcm9udC1qcy0xLjAnLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSBSb3V0ZTUzIEEgcmVjb3JkIGV4aXN0cyBmb3IgY3VzdG9tIGRvbWFpblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Um91dGU1Mzo6UmVjb3JkU2V0Jywge1xuICAgIFR5cGU6ICdBJyxcbiAgICBOYW1lOiAnYXBwLmV4YW1wbGUuY29tLicsXG4gICAgSG9zdGVkWm9uZUlkOiAnWjEyMzQ1Njc4OScsXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSBidWNrZXQgZGVwbG95bWVudCBleGlzdHNcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2UoJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCcsIHt9KTtcblxuICAvLyBWZXJpZnkgYXV0byBkZWxldGUgb2JqZWN0cyBjdXN0b20gcmVzb3VyY2UgZXhpc3RzXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlKCdDdXN0b206OlMzQXV0b0RlbGV0ZU9iamVjdHMnLCB7fSk7XG59KTtcblxuLy8gVGVzdDogRnJvbnRlbmQgY29uc3RydWN0IGVuZm9yY2VzIHNlY3VyaXR5IGJlc3QgcHJhY3RpY2VzXG50ZXN0KCdGcm9udGVuZCBjb25zdHJ1Y3QgZW5mb3JjZXMgc2VjdXJpdHkgYmVzdCBwcmFjdGljZXMnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAvLyBWZXJpZnkgSFRUUFMgcmVkaXJlY3QgaXMgZW5mb3JjZWRcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvbicsIHtcbiAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgIERlZmF1bHRDYWNoZUJlaGF2aW9yOiB7XG4gICAgICAgIFZpZXdlclByb3RvY29sUG9saWN5OiAncmVkaXJlY3QtdG8taHR0cHMnLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBWZXJpZnkgUzMgYnVja2V0IGJsb2NrcyBwdWJsaWMgYWNjZXNzXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgIFB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjoge1xuICAgICAgQmxvY2tQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgQmxvY2tQdWJsaWNQb2xpY3k6IHRydWUsXG4gICAgICBJZ25vcmVQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgUmVzdHJpY3RQdWJsaWNCdWNrZXRzOiB0cnVlLFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFZlcmlmeSBTMyBidWNrZXQgaGFzIGVuY3J5cHRpb25cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgQnVja2V0RW5jcnlwdGlvbjoge1xuICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdDoge1xuICAgICAgICAgICAgU1NFQWxnb3JpdGhtOiAnQUVTMjU2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG4vLyBUZXN0OiBGcm9udGVuZCBjb25zdHJ1Y3Qgc3VwcG9ydHMgU1BBIGFwcGxpY2F0aW9uc1xudGVzdCgnRnJvbnRlbmQgY29uc3RydWN0IHN1cHBvcnRzIFNQQSBhcHBsaWNhdGlvbnMnLCAoKSA9PiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAvLyBWZXJpZnkgU1BBLWZyaWVuZGx5IGVycm9yIHJlc3BvbnNlc1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uJywge1xuICAgIERpc3RyaWJ1dGlvbkNvbmZpZzoge1xuICAgICAgQ3VzdG9tRXJyb3JSZXNwb25zZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIEVycm9yQ29kZTogNDAzLFxuICAgICAgICAgIFJlc3BvbnNlQ29kZTogMjAwLFxuICAgICAgICAgIFJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBFcnJvckNvZGU6IDQwNCxcbiAgICAgICAgICBSZXNwb25zZUNvZGU6IDIwMCxcbiAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBWZXJpZnkgZGVmYXVsdCByb290IG9iamVjdCBpcyBzZXRcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvbicsIHtcbiAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgIERlZmF1bHRSb290T2JqZWN0OiAnaW5kZXguaHRtbCcsXG4gICAgfSxcbiAgfSk7XG59KTtcblxuLy8gVGVzdDogTm8gdW5zdXBwcmVzc2VkIHdhcm5pbmdzXG50ZXN0KCdObyB1bnN1cHByZXNzZWQgd2FybmluZ3MnLCAoKSA9PiB7XG4gIGlmICh3YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coJ0NESyBOYWcgV2FybmluZ3M6JywgSlNPTi5zdHJpbmdpZnkod2FybmluZ3MsIG51bGwsIDIpKTtcbiAgfVxuICBleHBlY3Qod2FybmluZ3MpLnRvSGF2ZUxlbmd0aCgwKTtcbn0pO1xuXG4vLyBUZXN0OiBObyB1bnN1cHByZXNzZWQgZXJyb3JzXG50ZXN0KCdObyB1bnN1cHByZXNzZWQgZXJyb3JzJywgKCkgPT4ge1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZygnQ0RLIE5hZyBFcnJvcnM6JywgSlNPTi5zdHJpbmdpZnkoZXJyb3JzLCBudWxsLCAyKSk7XG4gIH1cbiAgZXhwZWN0KGVycm9ycykudG9IYXZlTGVuZ3RoKDApO1xufSk7XG4iXX0=
@@ -11,6 +11,7 @@ const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
11
11
  const aws_route53_1 = require("aws-cdk-lib/aws-route53");
12
12
  const aws_s3_1 = require("aws-cdk-lib/aws-s3");
13
13
  const aws_s3_deployment_1 = require("aws-cdk-lib/aws-s3-deployment");
14
+ const test_utils_1 = require("../../utilities/test-utils");
14
15
  const frontend_construct_1 = require("../frontend-construct");
15
16
  // Mock execSync to avoid actual build execution during tests
16
17
  jest.mock('child_process', () => ({
@@ -42,7 +43,7 @@ describe('@webapp Frontend', () => {
42
43
  fs.writeFileSync(path.join(defaultBuildDir, 'index.html'), '<!DOCTYPE html><html><head><title>Default Test</title></head><body><h1>Default Test App</h1></body></html>');
43
44
  });
44
45
  beforeEach(() => {
45
- app = new aws_cdk_lib_1.App();
46
+ app = (0, test_utils_1.createTestApp)();
46
47
  stack = new aws_cdk_lib_1.Stack(app, 'TestStack');
47
48
  });
48
49
  describe('@webapp Basic functionality', () => {
@@ -382,4 +383,4 @@ describe('@webapp Frontend', () => {
382
383
  });
383
384
  });
384
385
  });
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtY29uc3RydWN0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvd2ViYXBwL3Rlc3RzL2Zyb250ZW5kLWNvbnN0cnVjdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDOztBQUV0Qyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZDQUF3RDtBQUN4RCx1REFBa0Q7QUFDbEQsK0VBQWlFO0FBQ2pFLCtEQUEwRDtBQUMxRCx5REFBcUQ7QUFDckQsK0NBQTRDO0FBQzVDLHFFQUFpRTtBQUNqRSw4REFBOEU7QUFFOUUsNkRBQTZEO0FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDLENBQUM7QUFFSixRQUFRLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxFQUFFO0lBQ2hDLElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxLQUFZLENBQUM7SUFDakIsSUFBSSxRQUFrQixDQUFDO0lBQ3ZCLElBQUksWUFBb0IsQ0FBQztJQUN6QixJQUFJLFVBQWtCLENBQUM7SUFFdkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLCtDQUErQztRQUMvQyxZQUFZLEdBQUcsMEJBQTBCLENBQUM7UUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxFQUFFLDRGQUE0RixDQUFDLENBQUM7UUFFdEosZ0RBQWdEO1FBQ2hELFVB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Q0FBQywrQkFBK0IsRUFBRTtnQkFDOUQsa0JBQWtCLEVBQUU7b0JBQ2xCLE9BQU8sRUFBRSw4QkFBOEI7b0JBQ3ZDLE9BQU8sRUFBRSxJQUFJO2lCQUNkO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQXBwLCBSZW1vdmFsUG9saWN5LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBDZXJ0aWZpY2F0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0IHsgRGlzdHJpYnV0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQnO1xuaW1wb3J0IHsgSG9zdGVkWm9uZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBCdWNrZXREZXBsb3ltZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnQnO1xuaW1wb3J0IHsgRnJvbnRlbmQsIERFRkFVTFRfU1BBX0VSUk9SX1JFU1BPTlNFUyB9IGZyb20gJy4uL2Zyb250ZW5kLWNvbnN0cnVjdCc7XG5cbi8vIE1vY2sgZXhlY1N5bmMgdG8gYXZvaWQgYWN0dWFsIGJ1aWxkIGV4ZWN1dGlvbiBkdXJpbmcgdGVzdHNcbmplc3QubW9jaygnY2hpbGRfcHJvY2VzcycsICgpID0+ICh7XG4gIGV4ZWNTeW5jOiBqZXN0LmZuKCksXG59KSk7XG5cbmRlc2NyaWJlKCdAd2ViYXBwIEZyb250ZW5kJywgKCkgPT4ge1xuICBsZXQgYXBwOiBBcHA7XG4gIGxldCBzdGFjazogU3RhY2s7XG4gIGxldCB0ZW1wbGF0ZTogVGVtcGxhdGU7XG4gIGxldCB0ZXN0QnVpbGREaXI6IHN0cmluZztcbiAgbGV0IHRlc3RTcmNEaXI6IHN0cmluZztcblxuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBidWlsZCBkaXJlY3RvcnkgZm9yIHRlc3RzXG4gICAgdGVzdEJ1aWxkRGlyID0gJy90bXAvdGVzdC1mcm9udGVuZC1idWlsZCc7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRlc3RCdWlsZERpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyh0ZXN0QnVpbGREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbih0ZXN0QnVpbGREaXIsICdpbmRleC5odG1sJyksICc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+VGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMT5UZXN0IEFwcDwvaDE+PC9ib2R5PjwvaHRtbD4nKTtcblxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBzb3VyY2UgZGlyZWN0b3J5IGZvciB0ZXN0c1xuICAgIHRlc3RTcmNEaXIgPSAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYyc7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRlc3RTcmNEaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmModGVzdFNyY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGRlZmF1bHQgYnVpbGQgZGlyZWN0b3J5IGluc2lkZSBzb3VyY2UgZGlyZWN0b3J5XG4gICAgY29uc3QgZGVmYXVsdEJ1aWxkRGlyID0gcGF0aC5qb2luKHRlc3RTcmNEaXIsICdidWlsZCcpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhkZWZhdWx0QnVpbGREaXIpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoZGVmYXVsdEJ1aWxkRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oZGVmYXVsdEJ1aWxkRGlyLCAnaW5kZXguaHRtbCcpLCAnPCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PHRpdGxlPkRlZmF1bHQgVGVzdDwvdGl0bGU+PC9oZWFkPjxib2R5PjxoMT5EZWZhdWx0IFRlc3QgQXBwPC9oMT48L2JvZHk+PC9odG1sPicpO1xuICB9KTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBhcHAgPSBuZXcgQXBwKCk7XG4gICAgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnVGVzdFN0YWNrJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdAd2ViYXBwIEJhc2ljIGZ1bmN0aW9uYWxpdHknLCAoKSA9PiB7XG4gICAgdGVzdCgnQHdlYmFwcCBjcmVhdGVzIGZyb250ZW5kIGNvbnN0cnVjdCB3aXRoIG1pbmltYWwgY29uZmlndXJhdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGZyb250ZW5kID0gbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsIC8vIFNraXAgYnVpbGQgZm9yIHRlc3RpbmdcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgICAgIC8vIFZlcmlmeSBTMyBidWNrZXQgaXMgY3JlYXRlZFxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIEJ1Y2tldEVuY3J5cHRpb246IHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBTU0VBbGdvcml0aG06ICdBRVMyNTYnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBQdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBCbG9ja1B1YmxpY0FjbHM6IHRydWUsXG4gICAgICAgICAgQmxvY2tQdWJsaWNQb2xpY3k6IHRydWUsXG4gICAgICAgICAgSWdub3JlUHVibGljQWNsczogdHJ1ZSxcbiAgICAgICAgICBSZXN0cmljdFB1YmxpY0J1Y2tldHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVmVyaWZ5IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGlzIGNyZWF0ZWRcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb24nLCB7XG4gICAgICAgIERpc3RyaWJ1dGlvbkNvbmZpZzoge1xuICAgICAgICAgIERlZmF1bHRSb290T2JqZWN0OiAnaW5kZXguaHRtbCcsXG4gICAgICAgICAgQ3VzdG9tRXJyb3JSZXNwb25zZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRXJyb3JDb2RlOiA0MDMsXG4gICAgICAgICAgICAgIFJlc3BvbnNlQ29kZTogMjAwLFxuICAgICAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRXJyb3JDb2RlOiA0MDQsXG4gICAgICAgICAgICAgIFJlc3BvbnNlQ29kZTogMjAwLFxuICAgICAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZlcmlmeSBzZWN1cml0eSBoZWFkZXJzIGZ1bmN0aW9uIGlzIGNyZWF0ZWRcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpDbG91ZEZyb250OjpGdW5jdGlvbicsIHtcbiAgICAgICAgRnVuY3Rpb25Db25maWc6IHtcbiAgICAgICAgICBSdW50aW1lOiAnY2xvdWRmcm9udC1qcy0xLjAnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZlcmlmeSBidWNrZXQgZGVwbG95bWVudCBpcyBjcmVhdGVkXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZSgnQ3VzdG9tOjpDREtCdWNrZXREZXBsb3ltZW50Jywge30pO1xuXG4gICAgICAvLyBUZXN0IHB1YmxpYyBtZXRob2RzXG4gICAgICBleHBlY3QoZnJvbnRlbmQuYnVja2V0KS50b0JlSW5zdGFuY2VPZihCdWNrZXQpO1xuICAgICAgZXhwZWN0KGZyb250ZW5kLmRpc3RyaWJ1dGlvbikudG9CZUluc3RhbmNlT2YoRGlzdHJpYnV0aW9uKTtcbiAgICAgIGV4cGVjdChmcm9udGVuZC5idWNrZXREZXBsb3ltZW50KS50b0JlSW5zdGFuY2VPZihCdWNrZXREZXBsb3ltZW50KTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgZnJvbnRlbmQuZGlzdHJpYnV0aW9uRG9tYWluTmFtZSgpKS50b0JlKCdzdHJpbmcnKTtcbiAgICAgIGV4cGVjdCh0eXBlb2YgZnJvbnRlbmQuYnVja2V0TmFtZSgpKS50b0JlKCdzdHJpbmcnKTtcbiAgICAgIGV4cGVjdChmcm9udGVuZC51cmwoKSkudG9Db250YWluKCdodHRwczovLycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnQHdlYmFwcCBjcmVhdGVzIGZyb250ZW5kIGNvbnN0cnVjdCB3aXRoIGN1c3RvbSBidWlsZCBjb21tYW5kJywgKCkgPT4ge1xuICAgICAgbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBidWlsZENvbW1hbmQ6ICd5YXJuIGJ1aWxkJyxcbiAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAgICAgLy8gU2hvdWxkIHN0aWxsIGNyZWF0ZSB0aGUgc2FtZSByZXNvdXJjZXNcbiAgICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpTMzo6QnVja2V0JywgMSk7XG4gICAgICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uJywgMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdAd2ViYXBwIGNyZWF0ZXMgZnJvbnRlbmQgY29uc3RydWN0IHdpdGggY3VzdG9tIGVycm9yIHJlc3BvbnNlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUVycm9yUmVzcG9uc2VzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgaHR0cFN0YXR1czogNTAwLFxuICAgICAgICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIGVycm9yUmVzcG9uc2VzOiBjdXN0b21FcnJvclJlc3BvbnNlcyxcbiAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvbicsIHtcbiAgICAgICAgRGlzdHJpYnV0aW9uQ29uZmlnOiB7XG4gICAgICAgICAgQ3VzdG9tRXJyb3JSZXNwb25zZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRXJyb3JDb2RlOiA1MDAsXG4gICAgICAgICAgICAgIFJlc3BvbnNlQ29kZTogMjAwLFxuICAgICAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2Vycm9yLmh0bWwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdAd2ViYXBwIEN1c3RvbSBkb21haW4gZnVuY3Rpb25hbGl0eScsICgpID0+IHtcbiAgICB0ZXN0KCdAd2ViYXBwIGNyZWF0ZXMgZnJvbnRlbmQgY29uc3RydWN0IHdpdGggY3VzdG9tIGRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGNlcnRpZmljYXRlID0gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgJ0NlcnRpZmljYXRlJyxcbiAgICAgICAgJ2Fybjphd3M6YWNtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Y2VydGlmaWNhdGUvMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyJyxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGZyb250ZW5kID0gbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBjdXN0b21Eb21haW46IHtcbiAgICAgICAgICBkb21haW5OYW1lOiAnYXBwLmV4YW1wbGUuY29tJyxcbiAgICAgICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAgICAgLy8gVmVyaWZ5IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGhhcyBjdXN0b20gZG9tYWluXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uJywge1xuICAgICAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgICAgICBBbGlhc2VzOiBbJ2FwcC5leGFtcGxlLmNvbSddLFxuICAgICAgICAgIFZpZXdlckNlcnRpZmljYXRlOiB7XG4gICAgICAgICAgICBBY21DZXJ0aWZpY2F0ZUFybjogJ2Fybjphd3M6YWNtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Y2VydGlmaWNhdGUvMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgICAgIFNzbFN1cHBvcnRNZXRob2Q6ICdzbmktb25seScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoZnJvbnRlbmQuZG9tYWluTmFtZSkudG9CZSgnYXBwLmV4YW1wbGUuY29tJyk7XG4gICAgICBleHBlY3QoZnJvbnRlbmQudXJsKCkpLnRvQmUoJ2h0dHBzOi8vYXBwLmV4YW1wbGUuY29tJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdAd2ViYXBwIGNyZWF0ZXMgZnJvbnRlbmQgY29uc3RydWN0IHdpdGggY3VzdG9tIGRvbWFpbiBhbmQgaG9zdGVkIHpvbmUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgICAgICAgc3RhY2ssXG4gICAgICAgICdDZXJ0aWZpY2F0ZScsXG4gICAgICAgICdhcm46YXdzOmFjbTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmNlcnRpZmljYXRlLzEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OTAxMicsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBob3N0ZWRab25lID0gSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXMoc3RhY2ssICdIb3N0ZWRab25lJywge1xuICAgICAgICBob3N0ZWRab25lSWQ6ICdaMTIzNDU2Nzg5JyxcbiAgICAgICAgem9uZU5hbWU6ICdleGFtcGxlLmNvbScsXG4gICAgICB9KTtcblxuICAgICAgbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBjdXN0b21Eb21haW46IHtcbiAgICAgICAgICBkb21haW5OYW1lOiAnYXBwLmV4YW1wbGUuY29tJyxcbiAgICAgICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgICAgICBob3N0ZWRab25lLFxuICAgICAgICB9LFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICAvLyBWZXJpZnkgUm91dGU1MyBBIHJlY29yZCBpcyBjcmVhdGVkXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Um91dGU1Mzo6UmVjb3JkU2V0Jywge1xuICAgICAgICBUeXBlOiAnQScsXG4gICAgICAgIE5hbWU6ICdhcHAuZXhhbXBsZS5jb20uJyxcbiAgICAgICAgSG9zdGVkWm9uZUlkOiAnWjEyMzQ1Njc4OScsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0B3ZWJhcHAgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICB0ZXN0KCdAd2ViYXBwIHRocm93cyBlcnJvciB3aGVuIHNvdXJjZURpcmVjdG9yeSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnJyxcbiAgICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KS50b1Rocm93KCdzb3VyY2VEaXJlY3RvcnkgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0B3ZWJhcHAgdXNlcyBkZWZhdWx0IGJ1aWxkT3V0cHV0RGlyZWN0b3J5IHdoZW4gbm90IHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgLy8gVXNlIHRoZSBleGlzdGluZyB0ZXN0IGJ1aWxkIGRpcmVjdG9yeVxuICAgICAgY29uc3QgZnJvbnRlbmQgPSBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiB0ZXN0U3JjRGlyLFxuICAgICAgICAvLyBidWlsZE91dHB1dERpcmVjdG9yeSBub3QgcHJvdmlkZWQgLSBzaG91bGQgdXNlIGRlZmF1bHQgJy4vYnVpbGQvJ1xuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGZyb250ZW5kKS50b0JlRGVmaW5lZCgpO1xuICAgICAgLy8gVGhlIGNvbnN0cnVjdCBzaG91bGQgYmUgY3JlYXRlZCBzdWNjZXNzZnVsbHkgd2l0aCBkZWZhdWx0IGJ1aWxkT3V0cHV0RGlyZWN0b3J5XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdAd2ViYXBwIGFwcGxpZXMgY3VzdG9tIHJlbW92YWwgcG9saWN5IHRvIHJlc291cmNlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJldGFpblN0YWNrID0gbmV3IFN0YWNrKGFwcCwgJ1JldGFpblRlc3RTdGFjaycpO1xuICAgICAgY29uc3QgZnJvbnRlbmQgPSBuZXcgRnJvbnRlbmQocmV0YWluU3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiB0ZXN0U3JjRGlyLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChmcm9udGVuZCkudG9CZURlZmluZWQoKTtcblxuICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgYnVja2V0IGhhcyB0aGUgY29ycmVjdCByZW1vdmFsIHBvbGljeVxuICAgICAgY29uc3QgcmV0YWluVGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2socmV0YWluU3RhY2spO1xuICAgICAgcmV0YWluVGVtcGxhdGUuaGFzUmVzb3VyY2UoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgRGVsZXRpb25Qb2xpY3k6ICdSZXRhaW4nLFxuICAgICAgICBVcGRhdGVSZXBsYWNlUG9saWN5OiAnUmV0YWluJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnQHdlYmFwcCB1c2VzIGRlZmF1bHQgREVTVFJPWSByZW1vdmFsIHBvbGljeSB3aGVuIG5vdCBzcGVjaWZpZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZXN0cm95U3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnRGVzdHJveVRlc3RTdGFjaycpO1xuICAgICAgY29uc3QgZnJvbnRlbmQgPSBuZXcgRnJvbnRlbmQoZGVzdHJveVN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogdGVzdFNyY0RpcixcbiAgICAgICAgYnVpbGRPdXRwdXREaXJlY3Rvcnk6IHRlc3RCdWlsZERpcixcbiAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgICAvLyByZW1vdmFsUG9saWN5IG5vdCBzcGVjaWZpZWQgLSBzaG91bGQgZGVmYXVsdCB0byBERVNUUk9ZXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGZyb250ZW5kKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBDaGVjayB0aGF0IHRoZSBidWNrZXQgaGFzIHRoZSBkZWZhdWx0IERFU1RST1kgcmVtb3ZhbCBwb2xpY3lcbiAgICAgIGNvbnN0IGRlc3Ryb3lUZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhkZXN0cm95U3RhY2spO1xuICAgICAgZGVzdHJveVRlbXBsYXRlLmhhc1Jlc291cmNlKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIERlbGV0aW9uUG9saWN5OiAnRGVsZXRlJyxcbiAgICAgICAgVXBkYXRlUmVwbGFjZVBvbGljeTogJ0RlbGV0ZScsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0B3ZWJhcHAgdGhyb3dzIGVycm9yIHdoZW4gZG9tYWluTmFtZSBpcyBwcm92aWRlZCB3aXRob3V0IGNlcnRpZmljYXRlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgICAgYnVpbGRPdXRwdXREaXJlY3Rvcnk6IHRlc3RCdWlsZERpcixcbiAgICAgICAgICBjdXN0b21Eb21haW46IHtcbiAgICAgICAgICAgIGRvbWFpbk5hbWU6ICdhcHAuZXhhbXBsZS5jb20nLFxuICAgICAgICAgIH0gYXMgYW55LCAvLyBUeXBlIGFzc2VydGlvbiB0byBieXBhc3MgVHlwZVNjcmlwdCB2YWxpZGF0aW9uIGZvciB0ZXN0aW5nXG4gICAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ2NlcnRpZmljYXRlIGlzIHJlcXVpcmVkIHdoZW4gZG9tYWluTmFtZSBpcyBwcm92aWRlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQHdlYmFwcCBTZWN1cml0eSBmZWF0dXJlcycsICgpID0+IHtcbiAgICB0ZXN0KCdAd2ViYXBwIGNyZWF0ZXMgUzMgYnVja2V0IHdpdGggc2VjdXJpdHkgYmVzdCBwcmFjdGljZXMnLCAoKSA9PiB7XG4gICAgICBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgICAgIC8vIFZlcmlmeSBTMyBidWNrZXQgc2VjdXJpdHkgc2V0dGluZ3NcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgICAgICBCdWNrZXRFbmNyeXB0aW9uOiB7XG4gICAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQnlEZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgU1NFQWxnb3JpdGhtOiAnQUVTMjU2JyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgUHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgQmxvY2tQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgICAgIEJsb2NrUHVibGljUG9saWN5OiB0cnVlLFxuICAgICAgICAgIElnbm9yZVB1YmxpY0FjbHM6IHRydWUsXG4gICAgICAgICAgUmVzdHJpY3RQdWJsaWNCdWNrZXRzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdAd2ViYXBwIGNyZWF0ZXMgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gd2l0aCBzZWN1cml0eSBoZWFkZXJzJywgKCkgPT4ge1xuICAgICAgbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICAvLyBWZXJpZnkgc2VjdXJpdHkgaGVhZGVycyBmdW5jdGlvbiBleGlzdHNcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpDbG91ZEZyb250OjpGdW5jdGlvbicsIHtcbiAgICAgICAgRnVuY3Rpb25Db25maWc6IHtcbiAgICAgICAgICBSdW50aW1lOiAnY2xvdWRmcm9udC1qcy0xLjAnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFZlcmlmeSBIVFRQUyByZWRpcmVjdCBpcyBlbmFibGVkXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uJywge1xuICAgICAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgICAgICBEZWZhdWx0Q2FjaGVCZWhhdmlvcjoge1xuICAgICAgICAgICAgVmlld2VyUHJvdG9jb2xQb2xpY3k6ICdyZWRpcmVjdC10by1odHRwcycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnQHdlYmFwcCBlbmFibGVzIGF1dG8gZGVsZXRlIG9iamVjdHMgb24gUzMgYnVja2V0JywgKCkgPT4ge1xuICAgICAgbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICAvLyBWZXJpZnkgYXV0byBkZWxldGUgb2JqZWN0cyBjdXN0b20gcmVzb3VyY2UgaXMgY3JlYXRlZFxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2UoJ0N1c3RvbTo6UzNBdXRvRGVsZXRlT2JqZWN0cycsIHt9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0B3ZWJhcHAgRGVmYXVsdCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgdGVzdCgnQHdlYmFwcCB1c2VzIGRlZmF1bHQgU1BBIGVycm9yIHJlc3BvbnNlcycsICgpID0+IHtcbiAgICAgIG5ldyBGcm9udGVuZChzdGFjaywgJ0Zyb250ZW5kJywge1xuICAgICAgICBzb3VyY2VEaXJlY3Rvcnk6ICcvdG1wL3Rlc3QtZnJvbnRlbmQtc3JjJyxcbiAgICAgICAgYnVpbGRPdXRwdXREaXJlY3Rvcnk6IHRlc3RCdWlsZERpcixcbiAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvbicsIHtcbiAgICAgICAgRGlzdHJpYnV0aW9uQ29uZmlnOiB7XG4gICAgICAgICAgQ3VzdG9tRXJyb3JSZXNwb25zZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRXJyb3JDb2RlOiA0MDMsXG4gICAgICAgICAgICAgIFJlc3BvbnNlQ29kZTogMjAwLFxuICAgICAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRXJyb3JDb2RlOiA0MDQsXG4gICAgICAgICAgICAgIFJlc3BvbnNlQ29kZTogMjAwLFxuICAgICAgICAgICAgICBSZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdAd2ViYXBwIGV4cG9ydHMgZGVmYXVsdCBTUEEgZXJyb3IgcmVzcG9uc2VzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KERFRkFVTFRfU1BBX0VSUk9SX1JFU1BPTlNFUykudG9FcXVhbChbXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA0MDMsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogJy9pbmRleC5odG1sJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDQwNCxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdAd2ViYXBwIEFkZGl0aW9uYWwgZGlzdHJpYnV0aW9uIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgdGVzdCgnQHdlYmFwcCBhY2NlcHRzIGFkZGl0aW9uYWwgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gcHJvcGVydGllcycsICgpID0+IHtcbiAgICAgIG5ldyBGcm9udGVuZChzdGFjaywgJ0Zyb250ZW5kJywge1xuICAgICAgICBzb3VyY2VEaXJlY3Rvcnk6ICcvdG1wL3Rlc3QtZnJvbnRlbmQtc3JjJyxcbiAgICAgICAgYnVpbGRPdXRwdXREaXJlY3Rvcnk6IHRlc3RCdWlsZERpcixcbiAgICAgICAgZGlzdHJpYnV0aW9uUHJvcHM6IHtcbiAgICAgICAgICBjb21tZW50OiAnQ3VzdG9tIGZyb250ZW5kIGRpc3RyaWJ1dGlvbicsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvbicsIHtcbiAgICAgICAgRGlzdHJpYnV0aW9uQ29uZmlnOiB7XG4gICAgICAgICAgQ29tbWVudDogJ0N1c3RvbSBmcm9udGVuZCBkaXN0cmlidXRpb24nLFxuICAgICAgICAgIEVuYWJsZWQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmQtY29uc3RydWN0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvd2ViYXBwL3Rlc3RzL2Zyb250ZW5kLWNvbnN0cnVjdC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDOztBQUV0Qyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZDQUF3RDtBQUN4RCx1REFBa0Q7QUFDbEQsK0VBQWlFO0FBQ2pFLCtEQUEwRDtBQUMxRCx5REFBcUQ7QUFDckQsK0NBQTRDO0FBQzVDLHFFQUFpRTtBQUNqRSwyREFBMkQ7QUFDM0QsOERBQThFO0FBRTlFLDZEQUE2RDtBQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBRUosUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtJQUNoQyxJQUFJLEdBQVEsQ0FBQztJQUNiLElBQUksS0FBWSxDQUFDO0lBQ2pCLElBQUksUUFBa0IsQ0FBQztJQUN2QixJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxVQUFrQixDQUFDO0lBRXZCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYiwrQ0FBK0M7UUFDL0MsWUFBWSxHQUFHLDBCQUEwQixDQUFDO1FBQzFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDakMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsRUFBRSw0RkFBNEYsQ0FBQyxDQUFDO1FBRXRKLGdE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LENBQUMscUJBQXFCLENBQUMsK0JBQStCLEVBQUU7Z0JBQzlELGtCQUFrQixFQUFFO29CQUNsQixPQUFPLEVBQUUsOEJBQThCO29CQUN2QyxPQUFPLEVBQUUsSUFBSTtpQkFDZDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFwcCwgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0IHsgQ2VydGlmaWNhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB7IERpc3RyaWJ1dGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250JztcbmltcG9ydCB7IEhvc3RlZFpvbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50JztcbmltcG9ydCB7IGNyZWF0ZVRlc3RBcHAgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvdGVzdC11dGlscyc7XG5pbXBvcnQgeyBGcm9udGVuZCwgREVGQVVMVF9TUEFfRVJST1JfUkVTUE9OU0VTIH0gZnJvbSAnLi4vZnJvbnRlbmQtY29uc3RydWN0JztcblxuLy8gTW9jayBleGVjU3luYyB0byBhdm9pZCBhY3R1YWwgYnVpbGQgZXhlY3V0aW9uIGR1cmluZyB0ZXN0c1xuamVzdC5tb2NrKCdjaGlsZF9wcm9jZXNzJywgKCkgPT4gKHtcbiAgZXhlY1N5bmM6IGplc3QuZm4oKSxcbn0pKTtcblxuZGVzY3JpYmUoJ0B3ZWJhcHAgRnJvbnRlbmQnLCAoKSA9PiB7XG4gIGxldCBhcHA6IEFwcDtcbiAgbGV0IHN0YWNrOiBTdGFjaztcbiAgbGV0IHRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgbGV0IHRlc3RCdWlsZERpcjogc3RyaW5nO1xuICBsZXQgdGVzdFNyY0Rpcjogc3RyaW5nO1xuXG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGVzdHNcbiAgICB0ZXN0QnVpbGREaXIgPSAnL3RtcC90ZXN0LWZyb250ZW5kLWJ1aWxkJztcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGVzdEJ1aWxkRGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKHRlc3RCdWlsZERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfVxuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHRlc3RCdWlsZERpciwgJ2luZGV4Lmh0bWwnKSwgJzwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPjx0aXRsZT5UZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+PGgxPlRlc3QgQXBwPC9oMT48L2JvZHk+PC9odG1sPicpO1xuXG4gICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IHNvdXJjZSBkaXJlY3RvcnkgZm9yIHRlc3RzXG4gICAgdGVzdFNyY0RpciA9ICcvdG1wL3Rlc3QtZnJvbnRlbmQtc3JjJztcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGVzdFNyY0RpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyh0ZXN0U3JjRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgZGVmYXVsdCBidWlsZCBkaXJlY3RvcnkgaW5zaWRlIHNvdXJjZSBkaXJlY3RvcnlcbiAgICBjb25zdCBkZWZhdWx0QnVpbGREaXIgPSBwYXRoLmpvaW4odGVzdFNyY0RpciwgJ2J1aWxkJyk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGRlZmF1bHRCdWlsZERpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhkZWZhdWx0QnVpbGREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihkZWZhdWx0QnVpbGREaXIsICdpbmRleC5odG1sJyksICc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48dGl0bGU+RGVmYXVsdCBUZXN0PC90aXRsZT48L2hlYWQ+PGJvZHk+PGgxPkRlZmF1bHQgVGVzdCBBcHA8L2gxPjwvYm9keT48L2h0bWw+Jyk7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGFwcCA9IGNyZWF0ZVRlc3RBcHAoKTtcbiAgICBzdGFjayA9IG5ldyBTdGFjayhhcHAsICdUZXN0U3RhY2snKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0B3ZWJhcHAgQmFzaWMgZnVuY3Rpb25hbGl0eScsICgpID0+IHtcbiAgICB0ZXN0KCdAd2ViYXBwIGNyZWF0ZXMgZnJvbnRlbmQgY29uc3RydWN0IHdpdGggbWluaW1hbCBjb25maWd1cmF0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgZnJvbnRlbmQgPSBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIHNraXBCdWlsZDogdHJ1ZSwgLy8gU2tpcCBidWlsZCBmb3IgdGVzdGluZ1xuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAgICAgLy8gVmVyaWZ5IFMzIGJ1Y2tldCBpcyBjcmVhdGVkXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgQnVja2V0RW5jcnlwdGlvbjoge1xuICAgICAgICAgIFNlcnZlclNpZGVFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkJ5RGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIFNTRUFsZ29yaXRobTogJ0FFUzI1NicsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIFB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIEJsb2NrUHVibGljQWNsczogdHJ1ZSxcbiAgICAgICAgICBCbG9ja1B1YmxpY1BvbGljeTogdHJ1ZSxcbiAgICAgICAgICBJZ25vcmVQdWJsaWNBY2xzOiB0cnVlLFxuICAgICAgICAgIFJlc3RyaWN0UHVibGljQnVja2V0czogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBWZXJpZnkgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gaXMgY3JlYXRlZFxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvbicsIHtcbiAgICAgICAgRGlzdHJpYnV0aW9uQ29uZmlnOiB7XG4gICAgICAgICAgRGVmYXVsdFJvb3RPYmplY3Q6ICdpbmRleC5odG1sJyxcbiAgICAgICAgICBDdXN0b21FcnJvclJlc3BvbnNlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFcnJvckNvZGU6IDQwMyxcbiAgICAgICAgICAgICAgUmVzcG9uc2VDb2RlOiAyMDAsXG4gICAgICAgICAgICAgIFJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFcnJvckNvZGU6IDQwNCxcbiAgICAgICAgICAgICAgUmVzcG9uc2VDb2RlOiAyMDAsXG4gICAgICAgICAgICAgIFJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVmVyaWZ5IHNlY3VyaXR5IGhlYWRlcnMgZnVuY3Rpb24gaXMgY3JlYXRlZFxuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkZ1bmN0aW9uJywge1xuICAgICAgICBGdW5jdGlvbkNvbmZpZzoge1xuICAgICAgICAgIFJ1bnRpbWU6ICdjbG91ZGZyb250LWpzLTEuMCcsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVmVyaWZ5IGJ1Y2tldCBkZXBsb3ltZW50IGlzIGNyZWF0ZWRcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlKCdDdXN0b206OkNES0J1Y2tldERlcGxveW1lbnQnLCB7fSk7XG5cbiAgICAgIC8vIFRlc3QgcHVibGljIG1ldGhvZHNcbiAgICAgIGV4cGVjdChmcm9udGVuZC5idWNrZXQpLnRvQmVJbnN0YW5jZU9mKEJ1Y2tldCk7XG4gICAgICBleHBlY3QoZnJvbnRlbmQuZGlzdHJpYnV0aW9uKS50b0JlSW5zdGFuY2VPZihEaXN0cmlidXRpb24pO1xuICAgICAgZXhwZWN0KGZyb250ZW5kLmJ1Y2tldERlcGxveW1lbnQpLnRvQmVJbnN0YW5jZU9mKEJ1Y2tldERlcGxveW1lbnQpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBmcm9udGVuZC5kaXN0cmlidXRpb25Eb21haW5OYW1lKCkpLnRvQmUoJ3N0cmluZycpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBmcm9udGVuZC5idWNrZXROYW1lKCkpLnRvQmUoJ3N0cmluZycpO1xuICAgICAgZXhwZWN0KGZyb250ZW5kLnVybCgpKS50b0NvbnRhaW4oJ2h0dHBzOi8vJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdAd2ViYXBwIGNyZWF0ZXMgZnJvbnRlbmQgY29uc3RydWN0IHdpdGggY3VzdG9tIGJ1aWxkIGNvbW1hbmQnLCAoKSA9PiB7XG4gICAgICBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIGJ1aWxkQ29tbWFuZDogJ3lhcm4gYnVpbGQnLFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICAvLyBTaG91bGQgc3RpbGwgY3JlYXRlIHRoZSBzYW1lIHJlc291cmNlc1xuICAgICAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OlMzOjpCdWNrZXQnLCAxKTtcbiAgICAgIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb24nLCAxKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0B3ZWJhcHAgY3JlYXRlcyBmcm9udGVuZCBjb25zdHJ1Y3Qgd2l0aCBjdXN0b20gZXJyb3IgcmVzcG9uc2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXJyb3JSZXNwb25zZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBodHRwU3RhdHVzOiA1MDAsXG4gICAgICAgICAgcmVzcG9uc2VIdHRwU3RhdHVzOiAyMDAsXG4gICAgICAgICAgcmVzcG9uc2VQYWdlUGF0aDogJy9lcnJvci5odG1sJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIG5ldyBGcm9udGVuZChzdGFjaywgJ0Zyb250ZW5kJywge1xuICAgICAgICBzb3VyY2VEaXJlY3Rvcnk6ICcvdG1wL3Rlc3QtZnJvbnRlbmQtc3JjJyxcbiAgICAgICAgYnVpbGRPdXRwdXREaXJlY3Rvcnk6IHRlc3RCdWlsZERpcixcbiAgICAgICAgZXJyb3JSZXNwb25zZXM6IGN1c3RvbUVycm9yUmVzcG9uc2VzLFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uJywge1xuICAgICAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgICAgICBDdXN0b21FcnJvclJlc3BvbnNlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFcnJvckNvZGU6IDUwMCxcbiAgICAgICAgICAgICAgUmVzcG9uc2VDb2RlOiAyMDAsXG4gICAgICAgICAgICAgIFJlc3BvbnNlUGFnZVBhdGg6ICcvZXJyb3IuaHRtbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0B3ZWJhcHAgQ3VzdG9tIGRvbWFpbiBmdW5jdGlvbmFsaXR5JywgKCkgPT4ge1xuICAgIHRlc3QoJ0B3ZWJhcHAgY3JlYXRlcyBmcm9udGVuZCBjb25zdHJ1Y3Qgd2l0aCBjdXN0b20gZG9tYWluJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2VydGlmaWNhdGUgPSBDZXJ0aWZpY2F0ZS5mcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgICAgIHN0YWNrLFxuICAgICAgICAnQ2VydGlmaWNhdGUnLFxuICAgICAgICAnYXJuOmF3czphY206dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpjZXJ0aWZpY2F0ZS8xMjM0NTY3OC0xMjM0LTEyMzQtMTIzNC0xMjM0NTY3ODkwMTInLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZnJvbnRlbmQgPSBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIGN1c3RvbURvbWFpbjoge1xuICAgICAgICAgIGRvbWFpbk5hbWU6ICdhcHAuZXhhbXBsZS5jb20nLFxuICAgICAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgICB9LFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICAvLyBWZXJpZnkgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gaGFzIGN1c3RvbSBkb21haW5cbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb24nLCB7XG4gICAgICAgIERpc3RyaWJ1dGlvbkNvbmZpZzoge1xuICAgICAgICAgIEFsaWFzZXM6IFsnYXBwLmV4YW1wbGUuY29tJ10sXG4gICAgICAgICAgVmlld2VyQ2VydGlmaWNhdGU6IHtcbiAgICAgICAgICAgIEFjbUNlcnRpZmljYXRlQXJuOiAnYXJuOmF3czphY206dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpjZXJ0aWZpY2F0ZS8xMjM0NTY3OC0xMjM0LTEyMzQtMTIzNC0xMjM0NTY3ODkwMTInLFxuICAgICAgICAgICAgU3NsU3VwcG9ydE1ldGhvZDogJ3NuaS1vbmx5JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChmcm9udGVuZC5kb21haW5OYW1lKS50b0JlKCdhcHAuZXhhbXBsZS5jb20nKTtcbiAgICAgIGV4cGVjdChmcm9udGVuZC51cmwoKSkudG9CZSgnaHR0cHM6Ly9hcHAuZXhhbXBsZS5jb20nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0B3ZWJhcHAgY3JlYXRlcyBmcm9udGVuZCBjb25zdHJ1Y3Qgd2l0aCBjdXN0b20gZG9tYWluIGFuZCBob3N0ZWQgem9uZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGNlcnRpZmljYXRlID0gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICBzdGFjayxcbiAgICAgICAgJ0NlcnRpZmljYXRlJyxcbiAgICAgICAgJ2Fybjphd3M6YWNtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Y2VydGlmaWNhdGUvMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyJyxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGhvc3RlZFpvbmUgPSBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyhzdGFjaywgJ0hvc3RlZFpvbmUnLCB7XG4gICAgICAgIGhvc3RlZFpvbmVJZDogJ1oxMjM0NTY3ODknLFxuICAgICAgICB6b25lTmFtZTogJ2V4YW1wbGUuY29tJyxcbiAgICAgIH0pO1xuXG4gICAgICBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIGN1c3RvbURvbWFpbjoge1xuICAgICAgICAgIGRvbWFpbk5hbWU6ICdhcHAuZXhhbXBsZS5jb20nLFxuICAgICAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgICAgIGhvc3RlZFpvbmUsXG4gICAgICAgIH0sXG4gICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgICAgIC8vIFZlcmlmeSBSb3V0ZTUzIEEgcmVjb3JkIGlzIGNyZWF0ZWRcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXQnLCB7XG4gICAgICAgIFR5cGU6ICdBJyxcbiAgICAgICAgTmFtZTogJ2FwcC5leGFtcGxlLmNvbS4nLFxuICAgICAgICBIb3N0ZWRab25lSWQ6ICdaMTIzNDU2Nzg5JyxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQHdlYmFwcCBWYWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIHRlc3QoJ0B3ZWJhcHAgdGhyb3dzIGVycm9yIHdoZW4gc291cmNlRGlyZWN0b3J5IGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgICBzb3VyY2VEaXJlY3Rvcnk6ICcnLFxuICAgICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH0pLnRvVGhyb3coJ3NvdXJjZURpcmVjdG9yeSBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnQHdlYmFwcCB1c2VzIGRlZmF1bHQgYnVpbGRPdXRwdXREaXJlY3Rvcnkgd2hlbiBub3QgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICAvLyBVc2UgdGhlIGV4aXN0aW5nIHRlc3QgYnVpbGQgZGlyZWN0b3J5XG4gICAgICBjb25zdCBmcm9udGVuZCA9IG5ldyBGcm9udGVuZChzdGFjaywgJ0Zyb250ZW5kJywge1xuICAgICAgICBzb3VyY2VEaXJlY3Rvcnk6IHRlc3RTcmNEaXIsXG4gICAgICAgIC8vIGJ1aWxkT3V0cHV0RGlyZWN0b3J5IG5vdCBwcm92aWRlZCAtIHNob3VsZCB1c2UgZGVmYXVsdCAnLi9idWlsZC8nXG4gICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoZnJvbnRlbmQpLnRvQmVEZWZpbmVkKCk7XG4gICAgICAvLyBUaGUgY29uc3RydWN0IHNob3VsZCBiZSBjcmVhdGVkIHN1Y2Nlc3NmdWxseSB3aXRoIGRlZmF1bHQgYnVpbGRPdXRwdXREaXJlY3RvcnlcbiAgICB9KTtcblxuICAgIHRlc3QoJ0B3ZWJhcHAgYXBwbGllcyBjdXN0b20gcmVtb3ZhbCBwb2xpY3kgdG8gcmVzb3VyY2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmV0YWluU3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnUmV0YWluVGVzdFN0YWNrJyk7XG4gICAgICBjb25zdCBmcm9udGVuZCA9IG5ldyBGcm9udGVuZChyZXRhaW5TdGFjaywgJ0Zyb250ZW5kJywge1xuICAgICAgICBzb3VyY2VEaXJlY3Rvcnk6IHRlc3RTcmNEaXIsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGZyb250ZW5kKS50b0JlRGVmaW5lZCgpO1xuXG4gICAgICAvLyBDaGVjayB0aGF0IHRoZSBidWNrZXQgaGFzIHRoZSBjb3JyZWN0IHJlbW92YWwgcG9saWN5XG4gICAgICBjb25zdCByZXRhaW5UZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhyZXRhaW5TdGFjayk7XG4gICAgICByZXRhaW5UZW1wbGF0ZS5oYXNSZXNvdXJjZSgnQVdTOjpTMzo6QnVja2V0Jywge1xuICAgICAgICBEZWxldGlvblBvbGljeTogJ1JldGFpbicsXG4gICAgICAgIFVwZGF0ZVJlcGxhY2VQb2xpY3k6ICdSZXRhaW4nLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdAd2ViYXBwIHVzZXMgZGVmYXVsdCBERVNUUk9ZIHJlbW92YWwgcG9saWN5IHdoZW4gbm90IHNwZWNpZmllZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRlc3Ryb3lTdGFjayA9IG5ldyBTdGFjayhhcHAsICdEZXN0cm95VGVzdFN0YWNrJyk7XG4gICAgICBjb25zdCBmcm9udGVuZCA9IG5ldyBGcm9udGVuZChkZXN0cm95U3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiB0ZXN0U3JjRGlyLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICAgIC8vIHJlbW92YWxQb2xpY3kgbm90IHNwZWNpZmllZCAtIHNob3VsZCBkZWZhdWx0IHRvIERFU1RST1lcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoZnJvbnRlbmQpLnRvQmVEZWZpbmVkKCk7XG5cbiAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGJ1Y2tldCBoYXMgdGhlIGRlZmF1bHQgREVTVFJPWSByZW1vdmFsIHBvbGljeVxuICAgICAgY29uc3QgZGVzdHJveVRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKGRlc3Ryb3lTdGFjayk7XG4gICAgICBkZXN0cm95VGVtcGxhdGUuaGFzUmVzb3VyY2UoJ0FXUzo6UzM6OkJ1Y2tldCcsIHtcbiAgICAgICAgRGVsZXRpb25Qb2xpY3k6ICdEZWxldGUnLFxuICAgICAgICBVcGRhdGVSZXBsYWNlUG9saWN5OiAnRGVsZXRlJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnQHdlYmFwcCB0aHJvd3MgZXJyb3Igd2hlbiBkb21haW5OYW1lIGlzIHByb3ZpZGVkIHdpdGhvdXQgY2VydGlmaWNhdGUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgICBzb3VyY2VEaXJlY3Rvcnk6ICcvdG1wL3Rlc3QtZnJvbnRlbmQtc3JjJyxcbiAgICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICAgIGN1c3RvbURvbWFpbjoge1xuICAgICAgICAgICAgZG9tYWluTmFtZTogJ2FwcC5leGFtcGxlLmNvbScsXG4gICAgICAgICAgfSBhcyBhbnksIC8vIFR5cGUgYXNzZXJ0aW9uIHRvIGJ5cGFzcyBUeXBlU2NyaXB0IHZhbGlkYXRpb24gZm9yIHRlc3RpbmdcbiAgICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSkudG9UaHJvdygnY2VydGlmaWNhdGUgaXMgcmVxdWlyZWQgd2hlbiBkb21haW5OYW1lIGlzIHByb3ZpZGVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdAd2ViYXBwIFNlY3VyaXR5IGZlYXR1cmVzJywgKCkgPT4ge1xuICAgIHRlc3QoJ0B3ZWJhcHAgY3JlYXRlcyBTMyBidWNrZXQgd2l0aCBzZWN1cml0eSBiZXN0IHByYWN0aWNlcycsICgpID0+IHtcbiAgICAgIG5ldyBGcm9udGVuZChzdGFjaywgJ0Zyb250ZW5kJywge1xuICAgICAgICBzb3VyY2VEaXJlY3Rvcnk6ICcvdG1wL3Rlc3QtZnJvbnRlbmQtc3JjJyxcbiAgICAgICAgYnVpbGRPdXRwdXREaXJlY3Rvcnk6IHRlc3RCdWlsZERpcixcbiAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICAgICAgLy8gVmVyaWZ5IFMzIGJ1Y2tldCBzZWN1cml0eSBzZXR0aW5nc1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OlMzOjpCdWNrZXQnLCB7XG4gICAgICAgIEJ1Y2tldEVuY3J5cHRpb246IHtcbiAgICAgICAgICBTZXJ2ZXJTaWRlRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2VydmVyU2lkZUVuY3J5cHRpb25CeURlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBTU0VBbGdvcml0aG06ICdBRVMyNTYnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBQdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBCbG9ja1B1YmxpY0FjbHM6IHRydWUsXG4gICAgICAgICAgQmxvY2tQdWJsaWNQb2xpY3k6IHRydWUsXG4gICAgICAgICAgSWdub3JlUHVibGljQWNsczogdHJ1ZSxcbiAgICAgICAgICBSZXN0cmljdFB1YmxpY0J1Y2tldHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0B3ZWJhcHAgY3JlYXRlcyBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiB3aXRoIHNlY3VyaXR5IGhlYWRlcnMnLCAoKSA9PiB7XG4gICAgICBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgICAgIC8vIFZlcmlmeSBzZWN1cml0eSBoZWFkZXJzIGZ1bmN0aW9uIGV4aXN0c1xuICAgICAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkNsb3VkRnJvbnQ6OkZ1bmN0aW9uJywge1xuICAgICAgICBGdW5jdGlvbkNvbmZpZzoge1xuICAgICAgICAgIFJ1bnRpbWU6ICdjbG91ZGZyb250LWpzLTEuMCcsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVmVyaWZ5IEhUVFBTIHJlZGlyZWN0IGlzIGVuYWJsZWRcbiAgICAgIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb24nLCB7XG4gICAgICAgIERpc3RyaWJ1dGlvbkNvbmZpZzoge1xuICAgICAgICAgIERlZmF1bHRDYWNoZUJlaGF2aW9yOiB7XG4gICAgICAgICAgICBWaWV3ZXJQcm90b2NvbFBvbGljeTogJ3JlZGlyZWN0LXRvLWh0dHBzJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdAd2ViYXBwIGVuYWJsZXMgYXV0byBkZWxldGUgb2JqZWN0cyBvbiBTMyBidWNrZXQnLCAoKSA9PiB7XG4gICAgICBuZXcgRnJvbnRlbmQoc3RhY2ssICdGcm9udGVuZCcsIHtcbiAgICAgICAgc291cmNlRGlyZWN0b3J5OiAnL3RtcC90ZXN0LWZyb250ZW5kLXNyYycsXG4gICAgICAgIGJ1aWxkT3V0cHV0RGlyZWN0b3J5OiB0ZXN0QnVpbGREaXIsXG4gICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgICAgIC8vIFZlcmlmeSBhdXRvIGRlbGV0ZSBvYmplY3RzIGN1c3RvbSByZXNvdXJjZSBpcyBjcmVhdGVkXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZSgnQ3VzdG9tOjpTM0F1dG9EZWxldGVPYmplY3RzJywge30pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQHdlYmFwcCBEZWZhdWx0IHZhbHVlcycsICgpID0+IHtcbiAgICB0ZXN0KCdAd2ViYXBwIHVzZXMgZGVmYXVsdCBTUEEgZXJyb3IgcmVzcG9uc2VzJywgKCkgPT4ge1xuICAgICAgbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uJywge1xuICAgICAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgICAgICBDdXN0b21FcnJvclJlc3BvbnNlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFcnJvckNvZGU6IDQwMyxcbiAgICAgICAgICAgICAgUmVzcG9uc2VDb2RlOiAyMDAsXG4gICAgICAgICAgICAgIFJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFcnJvckNvZGU6IDQwNCxcbiAgICAgICAgICAgICAgUmVzcG9uc2VDb2RlOiAyMDAsXG4gICAgICAgICAgICAgIFJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ0B3ZWJhcHAgZXhwb3J0cyBkZWZhdWx0IFNQQSBlcnJvciByZXNwb25zZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoREVGQVVMVF9TUEFfRVJST1JfUkVTUE9OU0VTKS50b0VxdWFsKFtcbiAgICAgICAge1xuICAgICAgICAgIGh0dHBTdGF0dXM6IDQwMyxcbiAgICAgICAgICByZXNwb25zZUh0dHBTdGF0dXM6IDIwMCxcbiAgICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiAnL2luZGV4Lmh0bWwnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaHR0cFN0YXR1czogNDA0LFxuICAgICAgICAgIHJlc3BvbnNlSHR0cFN0YXR1czogMjAwLFxuICAgICAgICAgIHJlc3BvbnNlUGFnZVBhdGg6ICcvaW5kZXguaHRtbCcsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0B3ZWJhcHAgQWRkaXRpb25hbCBkaXN0cmlidXRpb24gcHJvcGVydGllcycsICgpID0+IHtcbiAgICB0ZXN0KCdAd2ViYXBwIGFjY2VwdHMgYWRkaXRpb25hbCBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgbmV3IEZyb250ZW5kKHN0YWNrLCAnRnJvbnRlbmQnLCB7XG4gICAgICAgIHNvdXJjZURpcmVjdG9yeTogJy90bXAvdGVzdC1mcm9udGVuZC1zcmMnLFxuICAgICAgICBidWlsZE91dHB1dERpcmVjdG9yeTogdGVzdEJ1aWxkRGlyLFxuICAgICAgICBkaXN0cmlidXRpb25Qcm9wczoge1xuICAgICAgICAgIGNvbW1lbnQ6ICdDdXN0b20gZnJvbnRlbmQgZGlzdHJpYnV0aW9uJyxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBza2lwQnVpbGQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gICAgICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uJywge1xuICAgICAgICBEaXN0cmlidXRpb25Db25maWc6IHtcbiAgICAgICAgICBDb21tZW50OiAnQ3VzdG9tIGZyb250ZW5kIGRpc3RyaWJ1dGlvbicsXG4gICAgICAgICAgRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
package/package.json CHANGED
@@ -8,6 +8,7 @@
8
8
  "scripts": {
9
9
  "build": "npx projen build",
10
10
  "build:fast": "npx projen build:fast",
11
+ "build:no-test": "npx projen build:no-test",
11
12
  "bump": "npx projen bump",
12
13
  "clobber": "npx projen clobber",
13
14
  "compat": "npx projen compat",
@@ -74,12 +75,12 @@
74
75
  "jest": "^29.7.0",
75
76
  "jest-junit": "^16",
76
77
  "jsii": "~5.9.5",
77
- "jsii-diff": "^1.119.0",
78
+ "jsii-diff": "^1.125.0",
78
79
  "jsii-docgen": "^10.5.0",
79
- "jsii-pacmak": "^1.119.0",
80
- "jsii-rosetta": "~5.9.15",
80
+ "jsii-pacmak": "^1.125.0",
81
+ "jsii-rosetta": "~5.9.26",
81
82
  "projen": "^0.98.4",
82
- "ts-jest": "^29.4.5",
83
+ "ts-jest": "^29.4.6",
83
84
  "ts-node": "^10.9.2",
84
85
  "typescript": "^5.9.3"
85
86
  },
@@ -99,7 +100,7 @@
99
100
  "publishConfig": {
100
101
  "access": "public"
101
102
  },
102
- "version": "1.4.1",
103
+ "version": "1.6.0",
103
104
  "jest": {
104
105
  "coverageProvider": "v8",
105
106
  "testMatch": [
@@ -1,46 +0,0 @@
1
- exports.handler = async (event) => {
2
- console.log('Received error event:', JSON.stringify(event, null, 2));
3
-
4
- try {
5
- // Extract error info from event
6
- const { documentId, bucket, key, error, status } = event;
7
-
8
- // Log the error details
9
- console.error('Document processing failed:', {
10
- documentId,
11
- bucket,
12
- key,
13
- error,
14
- status
15
- });
16
-
17
- // In a real implementation, this would:
18
- // 1. Move the failed document to error prefix in S3
19
- // 2. Update metadata in DynamoDB
20
- // 3. Trigger notifications if configured
21
- // 4. Handle cleanup if needed
22
-
23
- return {
24
- statusCode: 200,
25
- documentId,
26
- bucket,
27
- key,
28
- status: 'ERROR_HANDLED',
29
- error: {
30
- message: error,
31
- handledAt: new Date().toISOString()
32
- },
33
- errorLocation: `failed/${documentId}`,
34
- timestamp: new Date().toISOString()
35
- };
36
- } catch (error) {
37
- console.error('Error handler failed:', error);
38
- return {
39
- statusCode: 500,
40
- documentId: event.documentId,
41
- error: error.message,
42
- status: 'ERROR_HANDLER_FAILED',
43
- timestamp: new Date().toISOString()
44
- };
45
- }
46
- };
@@ -1,46 +0,0 @@
1
- exports.handler = async (event) => {
2
- console.log('Received event:', JSON.stringify(event, null, 2));
3
-
4
- try {
5
- // Extract document info from event
6
- const { documentId, bucket, key, status } = event;
7
-
8
- // Check if document was valid
9
- if (status !== 'VALID') {
10
- throw new Error('Cannot process invalid document');
11
- }
12
-
13
- // Simulate processing
14
- console.log(`Processing document ${documentId} from ${bucket}/${key}`);
15
-
16
- // In a real implementation, this would:
17
- // 1. Download the PDF from S3
18
- // 2. Process it (OCR, text extraction, etc)
19
- // 3. Apply data masking
20
- // 4. Upload processed result back to S3
21
-
22
- return {
23
- statusCode: 200,
24
- documentId,
25
- bucket,
26
- key,
27
- status: 'PROCESSED',
28
- outputKey: `processed/${documentId}.pdf`,
29
- metadata: {
30
- pageCount: 5, // Example metadata
31
- processedAt: new Date().toISOString(),
32
- contentType: 'application/pdf'
33
- },
34
- timestamp: new Date().toISOString()
35
- };
36
- } catch (error) {
37
- console.error('Processing error:', error);
38
- return {
39
- statusCode: 500,
40
- documentId: event.documentId,
41
- error: error.message,
42
- status: 'PROCESSING_FAILED',
43
- timestamp: new Date().toISOString()
44
- };
45
- }
46
- };