@fjall/components-infrastructure 0.88.3 → 0.89.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/dist/lib/app.d.ts +33 -10
  3. package/dist/lib/app.js +79 -36
  4. package/dist/lib/aspects/index.d.ts +1 -0
  5. package/dist/lib/aspects/index.js +6 -0
  6. package/dist/lib/config/aws/accountAuditRole.d.ts +20 -0
  7. package/dist/lib/config/aws/accountAuditRole.js +38 -0
  8. package/dist/lib/config/aws/accountMonitoringRole.d.ts +22 -0
  9. package/dist/lib/config/aws/accountMonitoringRole.js +133 -0
  10. package/dist/lib/config/aws/cloudTrail.d.ts +0 -3
  11. package/dist/lib/config/aws/cloudTrail.js +2 -2
  12. package/dist/lib/config/aws/disasterRecovery.js +53 -20
  13. package/dist/lib/config/aws/ecrDefaultImage.js +4 -3
  14. package/dist/lib/config/aws/index.d.ts +4 -0
  15. package/dist/lib/config/aws/index.js +5 -1
  16. package/dist/lib/config/aws/oidcConnector.d.ts +8 -0
  17. package/dist/lib/config/aws/oidcConnector.js +46 -0
  18. package/dist/lib/config/aws/platform.d.ts +2 -0
  19. package/dist/lib/config/aws/platform.js +6 -0
  20. package/dist/lib/config/index.d.ts +2 -0
  21. package/dist/lib/config/index.js +21 -0
  22. package/dist/lib/patterns/aws/account.js +22 -10
  23. package/dist/lib/patterns/aws/cdn.d.ts +19 -40
  24. package/dist/lib/patterns/aws/cdn.js +21 -17
  25. package/dist/lib/patterns/aws/compute.d.ts +9 -720
  26. package/dist/lib/patterns/aws/compute.js +27 -432
  27. package/dist/lib/patterns/aws/computeEc2.d.ts +67 -0
  28. package/dist/lib/patterns/aws/computeEc2.js +46 -0
  29. package/dist/lib/patterns/aws/computeEcs.d.ts +446 -0
  30. package/dist/lib/patterns/aws/computeEcs.js +246 -0
  31. package/dist/lib/patterns/aws/computeLambda.d.ts +220 -0
  32. package/dist/lib/patterns/aws/computeLambda.js +147 -0
  33. package/dist/lib/patterns/aws/database.d.ts +7 -87
  34. package/dist/lib/patterns/aws/database.js +15 -38
  35. package/dist/lib/patterns/aws/domainDelegation.d.ts +8 -0
  36. package/dist/lib/patterns/aws/domainDelegation.js +54 -0
  37. package/dist/lib/patterns/aws/domainFactory.d.ts +8 -0
  38. package/dist/lib/patterns/aws/domainFactory.js +23 -0
  39. package/dist/lib/patterns/aws/index.d.ts +4 -1
  40. package/dist/lib/patterns/aws/index.js +6 -2
  41. package/dist/lib/patterns/aws/interfaces/cdn.d.ts +26 -0
  42. package/dist/lib/patterns/aws/interfaces/cdn.js +14 -0
  43. package/dist/lib/patterns/aws/interfaces/connector.d.ts +4 -181
  44. package/dist/lib/patterns/aws/interfaces/connector.js +16 -113
  45. package/dist/lib/patterns/aws/interfaces/domain.d.ts +2 -0
  46. package/dist/lib/patterns/aws/interfaces/domain.js +6 -0
  47. package/dist/lib/patterns/aws/interfaces/index.d.ts +2 -0
  48. package/dist/lib/patterns/aws/interfaces/index.js +5 -2
  49. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +9 -6
  50. package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
  51. package/dist/lib/patterns/aws/network.js +6 -9
  52. package/dist/lib/patterns/aws/organisation.d.ts +4 -2
  53. package/dist/lib/patterns/aws/organisation.js +21 -8
  54. package/dist/lib/patterns/aws/payload.js +21 -12
  55. package/dist/lib/patterns/aws/storage.d.ts +3 -2
  56. package/dist/lib/patterns/aws/storage.js +1 -1
  57. package/dist/lib/resources/aws/audit/auditRole.js +4 -4
  58. package/dist/lib/resources/aws/audit/index.d.ts +1 -0
  59. package/dist/lib/resources/aws/audit/index.js +6 -0
  60. package/dist/lib/resources/aws/backup/backupPlan.js +3 -2
  61. package/dist/lib/resources/aws/backup/backupVault.js +5 -3
  62. package/dist/lib/resources/aws/base/awsStack.d.ts +4 -2
  63. package/dist/lib/resources/aws/base/awsStack.js +8 -2
  64. package/dist/lib/resources/aws/cdn/cloudFront.d.ts +14 -0
  65. package/dist/lib/resources/aws/cdn/cloudFront.js +52 -18
  66. package/dist/lib/resources/aws/compute/ec2.js +18 -22
  67. package/dist/lib/resources/aws/compute/ecs.d.ts +23 -10
  68. package/dist/lib/resources/aws/compute/ecs.js +121 -64
  69. package/dist/lib/resources/aws/compute/index.d.ts +1 -0
  70. package/dist/lib/resources/aws/compute/index.js +2 -1
  71. package/dist/lib/resources/aws/compute/lambda.d.ts +0 -2
  72. package/dist/lib/resources/aws/compute/lambda.js +12 -27
  73. package/dist/lib/resources/aws/database/dynamodb.js +3 -13
  74. package/dist/lib/resources/aws/database/index.d.ts +8 -2
  75. package/dist/lib/resources/aws/database/index.js +19 -3
  76. package/dist/lib/resources/aws/database/rdsAurora.d.ts +2 -3
  77. package/dist/lib/resources/aws/database/rdsAurora.js +32 -68
  78. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +6 -6
  79. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +25 -29
  80. package/dist/lib/resources/aws/database/rdsDefaults.d.ts +11 -0
  81. package/dist/lib/resources/aws/database/rdsDefaults.js +15 -0
  82. package/dist/lib/resources/aws/database/rdsHelpers.d.ts +39 -0
  83. package/dist/lib/resources/aws/database/rdsHelpers.js +75 -0
  84. package/dist/lib/resources/aws/database/rdsInstance.d.ts +7 -8
  85. package/dist/lib/resources/aws/database/rdsInstance.js +40 -84
  86. package/dist/lib/resources/aws/database/rdsProxyOutput.d.ts +7 -0
  87. package/dist/lib/resources/aws/database/rdsProxyOutput.js +18 -0
  88. package/dist/lib/resources/aws/iam/index.d.ts +0 -1
  89. package/dist/lib/resources/aws/iam/index.js +1 -2
  90. package/dist/lib/resources/aws/index.d.ts +0 -1
  91. package/dist/lib/resources/aws/index.js +1 -2
  92. package/dist/lib/resources/aws/logging/cloudTrail.js +13 -3
  93. package/dist/lib/resources/aws/logging/index.d.ts +2 -0
  94. package/dist/lib/resources/aws/logging/index.js +19 -0
  95. package/dist/lib/resources/aws/messaging/index.d.ts +3 -2
  96. package/dist/lib/resources/aws/messaging/index.js +4 -3
  97. package/dist/lib/resources/aws/messaging/sqs.js +14 -11
  98. package/dist/lib/resources/aws/messaging/utils.d.ts +1 -2
  99. package/dist/lib/resources/aws/messaging/utils.js +3 -4
  100. package/dist/lib/resources/aws/monitoring/index.d.ts +0 -1
  101. package/dist/lib/resources/aws/monitoring/index.js +4 -17
  102. package/dist/lib/resources/aws/networking/domain.d.ts +13 -0
  103. package/dist/lib/resources/aws/networking/domain.js +102 -0
  104. package/dist/lib/resources/aws/networking/domainCertificate.d.ts +13 -0
  105. package/dist/lib/resources/aws/networking/domainCertificate.js +28 -0
  106. package/dist/lib/resources/aws/networking/hostedZone.d.ts +28 -0
  107. package/dist/lib/resources/aws/networking/hostedZone.js +150 -0
  108. package/dist/lib/resources/aws/networking/index.d.ts +4 -0
  109. package/dist/lib/resources/aws/networking/index.js +5 -1
  110. package/dist/lib/resources/aws/networking/ipamPool.js +57 -31
  111. package/dist/lib/resources/aws/networking/securityGroup.d.ts +5 -0
  112. package/dist/lib/resources/aws/networking/securityGroup.js +14 -0
  113. package/dist/lib/resources/aws/networking/vpc.js +9 -4
  114. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.d.ts +17 -0
  115. package/dist/lib/resources/aws/organisation/costAllocationTagActivator.js +66 -0
  116. package/dist/lib/resources/aws/organisation/index.d.ts +1 -0
  117. package/dist/lib/resources/aws/organisation/index.js +4 -2
  118. package/dist/lib/resources/aws/secrets/index.d.ts +0 -1
  119. package/dist/lib/resources/aws/secrets/index.js +1 -2
  120. package/dist/lib/resources/aws/storage/ecr.d.ts +0 -1
  121. package/dist/lib/resources/aws/storage/ecr.js +5 -5
  122. package/dist/lib/resources/aws/storage/s3.d.ts +3 -3
  123. package/dist/lib/resources/aws/storage/s3.js +1 -1
  124. package/dist/lib/resources/aws/utilities/index.d.ts +5 -0
  125. package/dist/lib/resources/aws/utilities/index.js +22 -0
  126. package/dist/lib/utils/backupTierMapping.d.ts +11 -0
  127. package/dist/lib/utils/backupTierMapping.js +17 -0
  128. package/dist/lib/utils/capitaliseString.d.ts +1 -12
  129. package/dist/lib/utils/capitaliseString.js +8 -28
  130. package/dist/lib/utils/connections.d.ts +46 -0
  131. package/dist/lib/utils/connections.js +159 -0
  132. package/dist/lib/utils/connector.d.ts +183 -0
  133. package/dist/lib/utils/connector.js +117 -0
  134. package/dist/lib/utils/databaseTypes.d.ts +85 -0
  135. package/dist/lib/utils/databaseTypes.js +34 -0
  136. package/dist/lib/utils/dnsRecords.d.ts +4 -0
  137. package/dist/lib/utils/dnsRecords.js +108 -0
  138. package/dist/lib/utils/domainTypes.d.ts +37 -0
  139. package/dist/lib/utils/domainTypes.js +10 -0
  140. package/dist/lib/utils/env.d.ts +42 -0
  141. package/dist/lib/utils/env.js +122 -0
  142. package/dist/lib/utils/getConfig.d.ts +0 -5
  143. package/dist/lib/utils/getConfig.js +42 -19
  144. package/dist/lib/utils/index.d.ts +7 -0
  145. package/dist/lib/utils/index.js +8 -1
  146. package/dist/lib/utils/removalPolicy.d.ts +2 -0
  147. package/dist/lib/utils/removalPolicy.js +16 -0
  148. package/dist/lib/utils/standardTagsAspect.d.ts +4 -0
  149. package/dist/lib/utils/standardTagsAspect.js +8 -8
  150. package/dist/lib/utils/vpcUtils.d.ts +14 -0
  151. package/dist/lib/utils/vpcUtils.js +28 -0
  152. package/package.json +7 -6
@@ -167,4 +167,4 @@ class StorageFactory {
167
167
  }
168
168
  }
169
169
  exports.StorageFactory = StorageFactory;
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5R0Esb0RBY0M7QUF2SEQsMkNBQXVDO0FBQ3ZDLCtDQVE0QjtBQUM1QixxRUFJdUM7QUFFdkMsaURBQTBDO0FBQzFDLDZDQUF5RDtBQUd6RCx5REFJcUM7QUFDckMseUVBQThEO0FBSTlELHNEQUFtRTtBQUEzQyx1R0FBQSxTQUFTLE9BQUE7QUE2Q2pDLFNBQVMsa0JBQWtCLENBQ3pCLFVBQTZCO0lBRTdCLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbEMsT0FBTyxVQUFVLEtBQUssUUFBUTtRQUM1QixDQUFDLENBQUMseUJBQWdCLENBQUMsVUFBVTtRQUM3QixDQUFDLENBQUMseUJBQWdCLENBQUMsR0FBRyxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxNQUFjO0lBQ2xDLE1BQU0sU0FBUyxHQUFnQztRQUM3QyxHQUFHLEVBQUUsb0JBQVcsQ0FBQyxHQUFHO1FBQ3BCLEdBQUcsRUFBRSxvQkFBVyxDQUFDLEdBQUc7UUFDcEIsSUFBSSxFQUFFLG9CQUFXLENBQUMsSUFBSTtRQUN0QixNQUFNLEVBQUUsb0JBQVcsQ0FBQyxNQUFNO1FBQzFCLElBQUksRUFBRSxvQkFBVyxDQUFDLElBQUk7S0FDdkIsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLG9CQUFXLENBQUMsR0FBRyxDQUFDO0FBQzlDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFpQjtJQUNwQyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7UUFDbkMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUNyRCxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkUsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25FLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDMUQsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsS0FBYztJQUNqRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25ELGlDQUFXLENBQUMsSUFBSSxDQUNkLGdFQUFnRTtZQUM5RCxrREFBa0QsQ0FDckQsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNsRCxpQ0FBVyxDQUFDLElBQUksQ0FDZCxnRUFBZ0U7WUFDOUQsb0VBQW9FLENBQ3ZFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQWEsT0FBUSxTQUFRLHNCQUFTO0lBS3BDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBYztRQUN0RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTEgsa0JBQWEsR0FBRyxTQUFrQixDQUFDO1FBT2pELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxTQUFTO1lBQ25DLENBQUMsQ0FBQyxhQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDdEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxrQkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO1lBQzlDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsVUFBVSxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDaEQsYUFBYTtZQUNiLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtZQUN0QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNwQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDckQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFTyxnQkFBZ0IsQ0FDdEIsRUFBVSxFQUNWLE1BQTBCO1FBRTFCLE1BQU0sbUJBQW1CLEdBQW1CLEVBQUUsQ0FBQztRQUUvQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlDLG1CQUFtQixDQUFDLElBQUksQ0FDdEIsZ0NBQVksQ0FBQyxNQUFNLENBQUMsc0JBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNsRSxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsZ0NBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxPQUFPLElBQUksb0NBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUU7WUFDbkQsT0FBTyxFQUFFLENBQUMsMEJBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxNQUFNO1lBQzlCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUk7WUFDM0IsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUk7Z0JBQ3BDLFlBQVksRUFBRSxtQkFBbUI7YUFDbEMsQ0FBQztTQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsRUFBVTtRQUMzQixNQUFNLFNBQVMsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFM0MsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFO1lBQ3BDLEdBQUcsRUFBRSxHQUFHLFNBQVMsR0FBRyxFQUFFLFdBQVc7WUFDakMsVUFBVSxFQUFFLEdBQUcsU0FBUyxHQUFHLEVBQUUsV0FBVztZQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQzVCLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxFQUFFO1NBQ3ZDLENBQUMsQ0FBQztRQUVILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRTtZQUNyQyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsRUFBRSxZQUFZO1lBQ2xDLFVBQVUsRUFBRSxHQUFHLFNBQVMsR0FBRyxFQUFFLFlBQVk7WUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUM3QixXQUFXLEVBQUUsc0JBQXNCLEVBQUUsRUFBRTtTQUN4QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RDLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDO0lBQzlDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFtQjtRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBbUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQW1CO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFtQjtRQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBbUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBRyxTQUFtQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLEtBQWdCLEVBQ2hCLElBQW9DLEVBQ3BDLEdBQUcsT0FBZ0M7UUFFbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELDRCQUE0QixDQUMxQixJQUFvQyxFQUNwQyxHQUFHLE9BQWdDO1FBRW5DLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELDRCQUE0QixDQUMxQixJQUFvQyxFQUNwQyxHQUFHLE9BQWdDO1FBRW5DLElBQUksQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztDQUNGO0FBbEpELDBCQWtKQztBQUVELE1BQWEsY0FBYztJQUN6QixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxRQUEyQixFQUFFO1FBQ3BELE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDN0MsTUFBTSxFQUFFLEdBQXFCLENBQUMsSUFBUyxFQUFFLEtBQWdCLEVBQUUsRUFBRTtZQUMzRCxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixFQUFFLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0Y7QUFaRCx3Q0FZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICB0eXBlIElCdWNrZXQsXG4gIHR5cGUgRXZlbnRUeXBlLFxuICB0eXBlIElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgdHlwZSBOb3RpZmljYXRpb25LZXlGaWx0ZXIsXG4gIEJ1Y2tldEVuY3J5cHRpb24sXG4gIEh0dHBNZXRob2RzLFxuICB0eXBlIENvcnNSdWxlIGFzIENka0NvcnNSdWxlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldERlcGxveW1lbnQsXG4gIFNvdXJjZSxcbiAgQ2FjaGVDb250cm9sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IEtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHtcbiAgUzNCdWNrZXQsXG4gIHR5cGUgQmFja3VwVmF1bHRUaWVyLFxuICB0eXBlIFdlYnNpdGVIb3N0aW5nQ29uZmlnXG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IEZqYWxsTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7IHR5cGUgSVN0b3JhZ2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3N0b3JhZ2UuanNcIjtcbmltcG9ydCB7IHR5cGUgSVN0b3JhZ2VDb25uZWN0b3IgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Nvbm5lY3Rvci5qc1wiO1xuXG5leHBvcnQgeyB0eXBlIElTdG9yYWdlLCBpc1N0b3JhZ2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3N0b3JhZ2UuanNcIjtcbmV4cG9ydCB7IHR5cGUgV2Vic2l0ZUhvc3RpbmdDb25maWcgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29yc1J1bGUge1xuICByZWFkb25seSBhbGxvd2VkT3JpZ2luczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGFsbG93ZWRNZXRob2RzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgYWxsb3dlZEhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgZXhwb3NlZEhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgbWF4QWdlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFMzRGVwbG95bWVudENvbmZpZyB7XG4gIC8qKiBQYXRoIHRvIHRoZSBhc3NldCBkaXJlY3RvcnkgKHJlbGF0aXZlIHRvIENESyBhcHAgcm9vdCkgKi9cbiAgc291cmNlOiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRvIHJlbW92ZSBmaWxlcyBmcm9tIGJ1Y2tldCB0aGF0IGFyZSBub3QgaW4gdGhlIHNvdXJjZS4gRGVmYXVsdDogdHJ1ZSAqL1xuICBwcnVuZT86IGJvb2xlYW47XG4gIC8qKiBDYWNoZSBjb250cm9sIHNldHRpbmdzIGZvciB1cGxvYWRlZCBmaWxlcyAqL1xuICBjYWNoZUNvbnRyb2w/OiB7XG4gICAgLyoqIE1heCBhZ2UgaW4gc2Vjb25kcyAoZS5nLiwgMzE1MzYwMDAgZm9yIDEgeWVhcikgKi9cbiAgICBtYXhBZ2U/OiBudW1iZXI7XG4gICAgLyoqIE1hcmsgYXMgaW1tdXRhYmxlIChicm93c2VyIHdpbGwgbm90IHJldmFsaWRhdGUpICovXG4gICAgaW1tdXRhYmxlPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTM1Byb3BzIHtcbiAgcmVhZG9ubHkgYnVja2V0TmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcHVibGljUmVhZEFjY2Vzcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHdlYnNpdGVIb3N0aW5nPzogV2Vic2l0ZUhvc3RpbmdDb25maWc7XG4gIHJlYWRvbmx5IHZlcnNpb25lZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBcIkFFUzI1NlwiIHwgXCJLTVNcIjtcbiAgcmVhZG9ubHkga21zS2V5QXJuPzogc3RyaW5nO1xuICByZWFkb25seSBiYWNrdXBWYXVsdFRpZXI/OiBCYWNrdXBWYXVsdFRpZXI7XG4gIHJlYWRvbmx5IGNvcnM/OiBDb3JzUnVsZVtdO1xuICByZWFkb25seSBkZXBsb3ltZW50PzogUzNEZXBsb3ltZW50Q29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VCdWlsZFByb3BzIGV4dGVuZHMgUzNQcm9wcyB7XG4gIHJlYWRvbmx5IHN0YWNrUGxhY2VtZW50PzogXCJzdG9yYWdlXCIgfCBcImNkblwiIHwgXCJjb21wdXRlXCI7XG59XG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VGYWN0b3J5Rm4gPSAoKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBTdG9yYWdlKSAmIHtcbiAgc3RhY2tQbGFjZW1lbnQ/OiBcInN0b3JhZ2VcIiB8IFwiY2RuXCIgfCBcImNvbXB1dGVcIjtcbn07XG5cbmZ1bmN0aW9uIHRvQnVja2V0RW5jcnlwdGlvbihcbiAgZW5jcnlwdGlvbj86IFwiQUVTMjU2XCIgfCBcIktNU1wiXG4pOiBCdWNrZXRFbmNyeXB0aW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFlbmNyeXB0aW9uKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gZW5jcnlwdGlvbiA9PT0gXCJBRVMyNTZcIlxuICAgID8gQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VEXG4gICAgOiBCdWNrZXRFbmNyeXB0aW9uLktNUztcbn1cblxuZnVuY3Rpb24gdG9IdHRwTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogSHR0cE1ldGhvZHMge1xuICBjb25zdCBtZXRob2RNYXA6IFJlY29yZDxzdHJpbmcsIEh0dHBNZXRob2RzPiA9IHtcbiAgICBHRVQ6IEh0dHBNZXRob2RzLkdFVCxcbiAgICBQVVQ6IEh0dHBNZXRob2RzLlBVVCxcbiAgICBQT1NUOiBIdHRwTWV0aG9kcy5QT1NULFxuICAgIERFTEVURTogSHR0cE1ldGhvZHMuREVMRVRFLFxuICAgIEhFQUQ6IEh0dHBNZXRob2RzLkhFQURcbiAgfTtcbiAgcmV0dXJuIG1ldGhvZE1hcFttZXRob2RdID8/IEh0dHBNZXRob2RzLkdFVDtcbn1cblxuZnVuY3Rpb24gdG9Db3JzUnVsZXMoY29ycz86IENvcnNSdWxlW10pOiBDZGtDb3JzUnVsZVtdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb3JzKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gY29ycy5tYXAoKHJ1bGUpID0+ICh7XG4gICAgYWxsb3dlZE9yaWdpbnM6IHJ1bGUuYWxsb3dlZE9yaWdpbnMsXG4gICAgYWxsb3dlZE1ldGhvZHM6IHJ1bGUuYWxsb3dlZE1ldGhvZHMubWFwKHRvSHR0cE1ldGhvZCksXG4gICAgLi4uKHJ1bGUuYWxsb3dlZEhlYWRlcnMgJiYgeyBhbGxvd2VkSGVhZGVyczogcnVsZS5hbGxvd2VkSGVhZGVycyB9KSxcbiAgICAuLi4ocnVsZS5leHBvc2VkSGVhZGVycyAmJiB7IGV4cG9zZWRIZWFkZXJzOiBydWxlLmV4cG9zZWRIZWFkZXJzIH0pLFxuICAgIC4uLihydWxlLm1heEFnZSAhPT0gdW5kZWZpbmVkICYmIHsgbWF4QWdlOiBydWxlLm1heEFnZSB9KVxuICB9KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVN0b3JhZ2VQcm9wcyhwcm9wczogUzNQcm9wcyk6IHZvaWQge1xuICBpZiAocHJvcHMuZW5jcnlwdGlvbiA9PT0gXCJLTVNcIiAmJiAhcHJvcHMua21zS2V5QXJuKSB7XG4gICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgIFwiJ2VuY3J5cHRpb24nIGlzIHNldCB0byAnS01TJyBidXQgJ2ttc0tleUFybicgaXMgbm90IHByb3ZpZGVkLiBcIiArXG4gICAgICAgIFwiVGhlIGJ1Y2tldCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBBV1MgbWFuYWdlZCBrZXkuXCJcbiAgICApO1xuICB9XG5cbiAgaWYgKHByb3BzLmttc0tleUFybiAmJiBwcm9wcy5lbmNyeXB0aW9uICE9PSBcIktNU1wiKSB7XG4gICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgIFwiJ2ttc0tleUFybicgaXMgcHJvdmlkZWQgYnV0ICdlbmNyeXB0aW9uJyBpcyBub3Qgc2V0IHRvICdLTVMnLiBcIiArXG4gICAgICAgIFwiVGhlIEtNUyBrZXkgd2lsbCBiZSBpZ25vcmVkLiBTZXQgZW5jcnlwdGlvbjogJ0tNUycgdG8gdXNlIHRoZSBrZXkuXCJcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVN0b3JhZ2UsIElTdG9yYWdlQ29ubmVjdG9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3RvclR5cGUgPSBcInN0b3JhZ2VcIiBhcyBjb25zdDtcbiAgcHJpdmF0ZSByZWFkb25seSBidWNrZXQ6IFMzQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldERlcGxveW1lbnQ/OiBCdWNrZXREZXBsb3ltZW50O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTM1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBwcm9wcy5rbXNLZXlBcm5cbiAgICAgID8gS2V5LmZyb21LZXlBcm4odGhpcywgYCR7aWR9S21zS2V5YCwgcHJvcHMua21zS2V5QXJuKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBgJHtpZH1CdWNrZXRgLCB7XG4gICAgICBidWNrZXROYW1lOiBwcm9wcy5idWNrZXROYW1lLFxuICAgICAgdmVyc2lvbmVkOiBwcm9wcy52ZXJzaW9uZWQsXG4gICAgICBlbmNyeXB0aW9uOiB0b0J1Y2tldEVuY3J5cHRpb24ocHJvcHMuZW5jcnlwdGlvbiksXG4gICAgICBlbmNyeXB0aW9uS2V5LFxuICAgICAgYmFja3VwVmF1bHRUaWVyOiBwcm9wcy5iYWNrdXBWYXVsdFRpZXIsXG4gICAgICBwdWJsaWNSZWFkQWNjZXNzOiBwcm9wcy5wdWJsaWNSZWFkQWNjZXNzLFxuICAgICAgd2Vic2l0ZUhvc3Rpbmc6IHByb3BzLndlYnNpdGVIb3N0aW5nLFxuICAgICAgLi4uKHByb3BzLmNvcnMgJiYgeyBjb3JzOiB0b0NvcnNSdWxlcyhwcm9wcy5jb3JzKSB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLmRlcGxveW1lbnQpIHtcbiAgICAgIHRoaXMuYnVja2V0RGVwbG95bWVudCA9IHRoaXMuY3JlYXRlRGVwbG95bWVudChpZCwgcHJvcHMuZGVwbG95bWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRPdXRwdXRzKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVwbG95bWVudChcbiAgICBpZDogc3RyaW5nLFxuICAgIGNvbmZpZzogUzNEZXBsb3ltZW50Q29uZmlnXG4gICk6IEJ1Y2tldERlcGxveW1lbnQge1xuICAgIGNvbnN0IGNhY2hlQ29udHJvbEhlYWRlcnM6IENhY2hlQ29udHJvbFtdID0gW107XG5cbiAgICBpZiAoY29uZmlnLmNhY2hlQ29udHJvbD8ubWF4QWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNhY2hlQ29udHJvbEhlYWRlcnMucHVzaChcbiAgICAgICAgQ2FjaGVDb250cm9sLm1heEFnZShEdXJhdGlvbi5zZWNvbmRzKGNvbmZpZy5jYWNoZUNvbnRyb2wubWF4QWdlKSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb25maWcuY2FjaGVDb250cm9sPy5pbW11dGFibGUpIHtcbiAgICAgIGNhY2hlQ29udHJvbEhlYWRlcnMucHVzaChDYWNoZUNvbnRyb2wuaW1tdXRhYmxlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBgJHtpZH1EZXBsb3ltZW50YCwge1xuICAgICAgc291cmNlczogW1NvdXJjZS5hc3NldChjb25maWcuc291cmNlKV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogdGhpcy5idWNrZXQsXG4gICAgICBwcnVuZTogY29uZmlnLnBydW5lID8/IHRydWUsXG4gICAgICAuLi4oY2FjaGVDb250cm9sSGVhZGVycy5sZW5ndGggPiAwICYmIHtcbiAgICAgICAgY2FjaGVDb250cm9sOiBjYWNoZUNvbnRyb2xIZWFkZXJzXG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRPdXRwdXRzKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBTdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfUJ1Y2tldEFybmAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7aWR9QnVja2V0QXJuYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke2lkfUJ1Y2tldEFybmAsXG4gICAgICB2YWx1ZTogdGhpcy5idWNrZXQuYnVja2V0QXJuLFxuICAgICAgZGVzY3JpcHRpb246IGBTMyBCdWNrZXQgQVJOIGZvciAke2lkfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9QnVja2V0TmFtZWAsIHtcbiAgICAgIGtleTogYCR7c3RhY2tOYW1lfSR7aWR9QnVja2V0TmFtZWAsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9JHtpZH1CdWNrZXROYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBTMyBCdWNrZXQgTmFtZSBmb3IgJHtpZH1gXG4gICAgfSk7XG4gIH1cblxuICBnZXRCdWNrZXQoKTogSUJ1Y2tldCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0O1xuICB9XG5cbiAgZ2V0QnVja2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lO1xuICB9XG5cbiAgZ2V0QnVja2V0QXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldEFybjtcbiAgfVxuXG4gIGdldEJ1Y2tldERvbWFpbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuYnVja2V0RG9tYWluTmFtZTtcbiAgfVxuXG4gIGdldEJ1Y2tldFJlZ2lvbmFsRG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXRSZWdpb25hbERvbWFpbk5hbWU7XG4gIH1cblxuICBnZXRXZWJzaXRlVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldFdlYnNpdGVVcmw7XG4gIH1cblxuICBnZXREZXBsb3ltZW50KCk6IEJ1Y2tldERlcGxveW1lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldERlcGxveW1lbnQ7XG4gIH1cblxuICBncmFudFJlYWQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRXcml0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFdyaXRlKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkV3JpdGUoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudERlbGV0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudERlbGV0ZShncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50UHV0KGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50UHV0KGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRQdWJsaWNBY2Nlc3MoLi4ua2V5UHJlZml4OiBzdHJpbmdbXSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRQdWJsaWNBY2Nlc3MoLi4ua2V5UHJlZml4KTtcbiAgfVxuXG4gIGFkZEV2ZW50Tm90aWZpY2F0aW9uKFxuICAgIGV2ZW50OiBFdmVudFR5cGUsXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYnVja2V0LmFkZEV2ZW50Tm90aWZpY2F0aW9uKGV2ZW50LCBkZXN0LCAuLi5maWx0ZXJzKTtcbiAgfVxuXG4gIGFkZE9iamVjdENyZWF0ZWROb3RpZmljYXRpb24oXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYnVja2V0LmFkZE9iamVjdENyZWF0ZWROb3RpZmljYXRpb24oZGVzdCwgLi4uZmlsdGVycyk7XG4gIH1cblxuICBhZGRPYmplY3RSZW1vdmVkTm90aWZpY2F0aW9uKFxuICAgIGRlc3Q6IElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgICAuLi5maWx0ZXJzOiBOb3RpZmljYXRpb25LZXlGaWx0ZXJbXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLmJ1Y2tldC5hZGRPYmplY3RSZW1vdmVkTm90aWZpY2F0aW9uKGRlc3QsIC4uLmZpbHRlcnMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdG9yYWdlRmFjdG9yeSB7XG4gIHN0YXRpYyBidWlsZChpZDogc3RyaW5nLCBwcm9wczogU3RvcmFnZUJ1aWxkUHJvcHMgPSB7fSk6IFN0b3JhZ2VGYWN0b3J5Rm4ge1xuICAgIGNvbnN0IHsgc3RhY2tQbGFjZW1lbnQsIC4uLnMzUHJvcHMgfSA9IHByb3BzO1xuICAgIGNvbnN0IGZuOiBTdG9yYWdlRmFjdG9yeUZuID0gKF9hcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgdmFsaWRhdGVTdG9yYWdlUHJvcHMoczNQcm9wcyk7XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2Uoc2NvcGUsIGlkLCBzM1Byb3BzKTtcbiAgICB9O1xuICAgIGlmIChzdGFja1BsYWNlbWVudCkge1xuICAgICAgZm4uc3RhY2tQbGFjZW1lbnQgPSBzdGFja1BsYWNlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZuO1xuICB9XG59XG4iXX0=
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3Mvc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5R0Esb0RBY0M7QUF2SEQsMkNBQXVDO0FBQ3ZDLCtDQVE0QjtBQUM1QixxRUFJdUM7QUFFdkMsaURBQTBDO0FBQzFDLDZDQUF5RDtBQUd6RCx5REFHcUM7QUFFckMseUVBQThEO0FBSTlELHNEQUFtRTtBQUEzQyx1R0FBQSxTQUFTLE9BQUE7QUE2Q2pDLFNBQVMsa0JBQWtCLENBQ3pCLFVBQTZCO0lBRTdCLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbEMsT0FBTyxVQUFVLEtBQUssUUFBUTtRQUM1QixDQUFDLENBQUMseUJBQWdCLENBQUMsVUFBVTtRQUM3QixDQUFDLENBQUMseUJBQWdCLENBQUMsR0FBRyxDQUFDO0FBQzNCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxNQUFjO0lBQ2xDLE1BQU0sU0FBUyxHQUFnQztRQUM3QyxHQUFHLEVBQUUsb0JBQVcsQ0FBQyxHQUFHO1FBQ3BCLEdBQUcsRUFBRSxvQkFBVyxDQUFDLEdBQUc7UUFDcEIsSUFBSSxFQUFFLG9CQUFXLENBQUMsSUFBSTtRQUN0QixNQUFNLEVBQUUsb0JBQVcsQ0FBQyxNQUFNO1FBQzFCLElBQUksRUFBRSxvQkFBVyxDQUFDLElBQUk7S0FDdkIsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLG9CQUFXLENBQUMsR0FBRyxDQUFDO0FBQzlDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFpQjtJQUNwQyxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7UUFDbkMsY0FB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IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICB0eXBlIElCdWNrZXQsXG4gIHR5cGUgRXZlbnRUeXBlLFxuICB0eXBlIElCdWNrZXROb3RpZmljYXRpb25EZXN0aW5hdGlvbixcbiAgdHlwZSBOb3RpZmljYXRpb25LZXlGaWx0ZXIsXG4gIEJ1Y2tldEVuY3J5cHRpb24sXG4gIEh0dHBNZXRob2RzLFxuICB0eXBlIENvcnNSdWxlIGFzIENka0NvcnNSdWxlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7XG4gIEJ1Y2tldERlcGxveW1lbnQsXG4gIFNvdXJjZSxcbiAgQ2FjaGVDb250cm9sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgdHlwZSBJR3JhbnRhYmxlLCB0eXBlIEdyYW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IEtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbXBvcnQgdHlwZSBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuaW1wb3J0IHtcbiAgUzNCdWNrZXQsXG4gIHR5cGUgV2Vic2l0ZUhvc3RpbmdDb25maWdcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuaW1wb3J0IHsgdHlwZSBCYWNrdXBUaWVyIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2JhY2t1cFRpZXJNYXBwaW5nXCI7XG5pbXBvcnQgeyBGamFsbExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyB0eXBlIElTdG9yYWdlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9zdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyB0eXBlIElTdG9yYWdlQ29ubmVjdG9yIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jb25uZWN0b3IuanNcIjtcblxuZXhwb3J0IHsgdHlwZSBJU3RvcmFnZSwgaXNTdG9yYWdlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9zdG9yYWdlLmpzXCI7XG5leHBvcnQgeyB0eXBlIFdlYnNpdGVIb3N0aW5nQ29uZmlnIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc3RvcmFnZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvcnNSdWxlIHtcbiAgcmVhZG9ubHkgYWxsb3dlZE9yaWdpbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kczogc3RyaW5nW107XG4gIHJlYWRvbmx5IGFsbG93ZWRIZWFkZXJzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGV4cG9zZWRIZWFkZXJzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IG1heEFnZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTM0RlcGxveW1lbnRDb25maWcge1xuICAvKiogUGF0aCB0byB0aGUgYXNzZXQgZGlyZWN0b3J5IChyZWxhdGl2ZSB0byBDREsgYXBwIHJvb3QpICovXG4gIHNvdXJjZTogc3RyaW5nO1xuICAvKiogV2hldGhlciB0byByZW1vdmUgZmlsZXMgZnJvbSBidWNrZXQgdGhhdCBhcmUgbm90IGluIHRoZSBzb3VyY2UuIERlZmF1bHQ6IHRydWUgKi9cbiAgcHJ1bmU/OiBib29sZWFuO1xuICAvKiogQ2FjaGUgY29udHJvbCBzZXR0aW5ncyBmb3IgdXBsb2FkZWQgZmlsZXMgKi9cbiAgY2FjaGVDb250cm9sPzoge1xuICAgIC8qKiBNYXggYWdlIGluIHNlY29uZHMgKGUuZy4sIDMxNTM2MDAwIGZvciAxIHllYXIpICovXG4gICAgbWF4QWdlPzogbnVtYmVyO1xuICAgIC8qKiBNYXJrIGFzIGltbXV0YWJsZSAoYnJvd3NlciB3aWxsIG5vdCByZXZhbGlkYXRlKSAqL1xuICAgIGltbXV0YWJsZT86IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUzNQcm9wcyB7XG4gIHJlYWRvbmx5IGJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHB1YmxpY1JlYWRBY2Nlc3M/OiBib29sZWFuO1xuICByZWFkb25seSB3ZWJzaXRlSG9zdGluZz86IFdlYnNpdGVIb3N0aW5nQ29uZmlnO1xuICByZWFkb25seSB2ZXJzaW9uZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogXCJBRVMyNTZcIiB8IFwiS01TXCI7XG4gIHJlYWRvbmx5IGttc0tleUFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgYmFja3VwVmF1bHRUaWVyPzogQmFja3VwVGllcjtcbiAgcmVhZG9ubHkgY29ycz86IENvcnNSdWxlW107XG4gIHJlYWRvbmx5IGRlcGxveW1lbnQ/OiBTM0RlcGxveW1lbnRDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUJ1aWxkUHJvcHMgZXh0ZW5kcyBTM1Byb3BzIHtcbiAgcmVhZG9ubHkgc3RhY2tQbGFjZW1lbnQ/OiBcInN0b3JhZ2VcIiB8IFwiY2RuXCIgfCBcImNvbXB1dGVcIjtcbn1cblxuZXhwb3J0IHR5cGUgU3RvcmFnZUZhY3RvcnlGbiA9ICgoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFN0b3JhZ2UpICYge1xuICBzdGFja1BsYWNlbWVudD86IFwic3RvcmFnZVwiIHwgXCJjZG5cIiB8IFwiY29tcHV0ZVwiO1xufTtcblxuZnVuY3Rpb24gdG9CdWNrZXRFbmNyeXB0aW9uKFxuICBlbmNyeXB0aW9uPzogXCJBRVMyNTZcIiB8IFwiS01TXCJcbik6IEJ1Y2tldEVuY3J5cHRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoIWVuY3J5cHRpb24pIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBlbmNyeXB0aW9uID09PSBcIkFFUzI1NlwiXG4gICAgPyBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRURcbiAgICA6IEJ1Y2tldEVuY3J5cHRpb24uS01TO1xufVxuXG5mdW5jdGlvbiB0b0h0dHBNZXRob2QobWV0aG9kOiBzdHJpbmcpOiBIdHRwTWV0aG9kcyB7XG4gIGNvbnN0IG1ldGhvZE1hcDogUmVjb3JkPHN0cmluZywgSHR0cE1ldGhvZHM+ID0ge1xuICAgIEdFVDogSHR0cE1ldGhvZHMuR0VULFxuICAgIFBVVDogSHR0cE1ldGhvZHMuUFVULFxuICAgIFBPU1Q6IEh0dHBNZXRob2RzLlBPU1QsXG4gICAgREVMRVRFOiBIdHRwTWV0aG9kcy5ERUxFVEUsXG4gICAgSEVBRDogSHR0cE1ldGhvZHMuSEVBRFxuICB9O1xuICByZXR1cm4gbWV0aG9kTWFwW21ldGhvZF0gPz8gSHR0cE1ldGhvZHMuR0VUO1xufVxuXG5mdW5jdGlvbiB0b0NvcnNSdWxlcyhjb3JzPzogQ29yc1J1bGVbXSk6IENka0NvcnNSdWxlW10gfCB1bmRlZmluZWQge1xuICBpZiAoIWNvcnMpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBjb3JzLm1hcCgocnVsZSkgPT4gKHtcbiAgICBhbGxvd2VkT3JpZ2luczogcnVsZS5hbGxvd2VkT3JpZ2lucyxcbiAgICBhbGxvd2VkTWV0aG9kczogcnVsZS5hbGxvd2VkTWV0aG9kcy5tYXAodG9IdHRwTWV0aG9kKSxcbiAgICAuLi4ocnVsZS5hbGxvd2VkSGVhZGVycyAmJiB7IGFsbG93ZWRIZWFkZXJzOiBydWxlLmFsbG93ZWRIZWFkZXJzIH0pLFxuICAgIC4uLihydWxlLmV4cG9zZWRIZWFkZXJzICYmIHsgZXhwb3NlZEhlYWRlcnM6IHJ1bGUuZXhwb3NlZEhlYWRlcnMgfSksXG4gICAgLi4uKHJ1bGUubWF4QWdlICE9PSB1bmRlZmluZWQgJiYgeyBtYXhBZ2U6IHJ1bGUubWF4QWdlIH0pXG4gIH0pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU3RvcmFnZVByb3BzKHByb3BzOiBTM1Byb3BzKTogdm9pZCB7XG4gIGlmIChwcm9wcy5lbmNyeXB0aW9uID09PSBcIktNU1wiICYmICFwcm9wcy5rbXNLZXlBcm4pIHtcbiAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgXCInZW5jcnlwdGlvbicgaXMgc2V0IHRvICdLTVMnIGJ1dCAna21zS2V5QXJuJyBpcyBub3QgcHJvdmlkZWQuIFwiICtcbiAgICAgICAgXCJUaGUgYnVja2V0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IEFXUyBtYW5hZ2VkIGtleS5cIlxuICAgICk7XG4gIH1cblxuICBpZiAocHJvcHMua21zS2V5QXJuICYmIHByb3BzLmVuY3J5cHRpb24gIT09IFwiS01TXCIpIHtcbiAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgXCIna21zS2V5QXJuJyBpcyBwcm92aWRlZCBidXQgJ2VuY3J5cHRpb24nIGlzIG5vdCBzZXQgdG8gJ0tNUycuIFwiICtcbiAgICAgICAgXCJUaGUgS01TIGtleSB3aWxsIGJlIGlnbm9yZWQuIFNldCBlbmNyeXB0aW9uOiAnS01TJyB0byB1c2UgdGhlIGtleS5cIlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2UgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJU3RvcmFnZSwgSVN0b3JhZ2VDb25uZWN0b3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdG9yVHlwZSA9IFwic3RvcmFnZVwiIGFzIGNvbnN0O1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldDogUzNCdWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVja2V0RGVwbG95bWVudD86IEJ1Y2tldERlcGxveW1lbnQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFMzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IHByb3BzLmttc0tleUFyblxuICAgICAgPyBLZXkuZnJvbUtleUFybih0aGlzLCBgJHtpZH1LbXNLZXlgLCBwcm9wcy5rbXNLZXlBcm4pXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMuYnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIGAke2lkfUJ1Y2tldGAsIHtcbiAgICAgIGJ1Y2tldE5hbWU6IHByb3BzLmJ1Y2tldE5hbWUsXG4gICAgICB2ZXJzaW9uZWQ6IHByb3BzLnZlcnNpb25lZCxcbiAgICAgIGVuY3J5cHRpb246IHRvQnVja2V0RW5jcnlwdGlvbihwcm9wcy5lbmNyeXB0aW9uKSxcbiAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICBiYWNrdXBWYXVsdFRpZXI6IHByb3BzLmJhY2t1cFZhdWx0VGllcixcbiAgICAgIHB1YmxpY1JlYWRBY2Nlc3M6IHByb3BzLnB1YmxpY1JlYWRBY2Nlc3MsXG4gICAgICB3ZWJzaXRlSG9zdGluZzogcHJvcHMud2Vic2l0ZUhvc3RpbmcsXG4gICAgICAuLi4ocHJvcHMuY29ycyAmJiB7IGNvcnM6IHRvQ29yc1J1bGVzKHByb3BzLmNvcnMpIH0pXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuZGVwbG95bWVudCkge1xuICAgICAgdGhpcy5idWNrZXREZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVEZXBsb3ltZW50KGlkLCBwcm9wcy5kZXBsb3ltZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZE91dHB1dHMoaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZXBsb3ltZW50KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiBTM0RlcGxveW1lbnRDb25maWdcbiAgKTogQnVja2V0RGVwbG95bWVudCB7XG4gICAgY29uc3QgY2FjaGVDb250cm9sSGVhZGVyczogQ2FjaGVDb250cm9sW10gPSBbXTtcblxuICAgIGlmIChjb25maWcuY2FjaGVDb250cm9sPy5tYXhBZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FjaGVDb250cm9sSGVhZGVycy5wdXNoKFxuICAgICAgICBDYWNoZUNvbnRyb2wubWF4QWdlKER1cmF0aW9uLnNlY29uZHMoY29uZmlnLmNhY2hlQ29udHJvbC5tYXhBZ2UpKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jYWNoZUNvbnRyb2w/LmltbXV0YWJsZSkge1xuICAgICAgY2FjaGVDb250cm9sSGVhZGVycy5wdXNoKENhY2hlQ29udHJvbC5pbW11dGFibGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMsIGAke2lkfURlcGxveW1lbnRgLCB7XG4gICAgICBzb3VyY2VzOiBbU291cmNlLmFzc2V0KGNvbmZpZy5zb3VyY2UpXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgIHBydW5lOiBjb25maWcucHJ1bmUgPz8gdHJ1ZSxcbiAgICAgIC4uLihjYWNoZUNvbnRyb2xIZWFkZXJzLmxlbmd0aCA+IDAgJiYge1xuICAgICAgICBjYWNoZUNvbnRyb2w6IGNhY2hlQ29udHJvbEhlYWRlcnNcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZE91dHB1dHMoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9QnVja2V0QXJuYCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtpZH1CdWNrZXRBcm5gLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfSR7aWR9QnVja2V0QXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLmJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogYFMzIEJ1Y2tldCBBUk4gZm9yICR7aWR9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1CdWNrZXROYW1lYCwge1xuICAgICAga2V5OiBgJHtzdGFja05hbWV9JHtpZH1CdWNrZXROYW1lYCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0ke2lkfUJ1Y2tldE5hbWVgLFxuICAgICAgdmFsdWU6IHRoaXMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFMzIEJ1Y2tldCBOYW1lIGZvciAke2lkfWBcbiAgICB9KTtcbiAgfVxuXG4gIGdldEJ1Y2tldCgpOiBJQnVja2V0IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQ7XG4gIH1cblxuICBnZXRCdWNrZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldE5hbWU7XG4gIH1cblxuICBnZXRCdWNrZXRBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuYnVja2V0QXJuO1xuICB9XG5cbiAgZ2V0QnVja2V0RG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5idWNrZXREb21haW5OYW1lO1xuICB9XG5cbiAgZ2V0QnVja2V0UmVnaW9uYWxEb21haW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmJ1Y2tldFJlZ2lvbmFsRG9tYWluTmFtZTtcbiAgfVxuXG4gIGdldFdlYnNpdGVVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuYnVja2V0V2Vic2l0ZVVybDtcbiAgfVxuXG4gIGdldERlcGxveW1lbnQoKTogQnVja2V0RGVwbG95bWVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0RGVwbG95bWVudDtcbiAgfVxuXG4gIGdyYW50UmVhZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFJlYWQoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFdyaXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50V3JpdGUoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFJlYWRXcml0ZShncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShncmFudGVlKTtcbiAgfVxuXG4gIGdyYW50RGVsZXRlKGdyYW50ZWU6IElHcmFudGFibGUpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50RGVsZXRlKGdyYW50ZWUpO1xuICB9XG5cbiAgZ3JhbnRQdXQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRQdXQoZ3JhbnRlZSk7XG4gIH1cblxuICBncmFudFB1YmxpY0FjY2VzcyguLi5rZXlQcmVmaXg6IHN0cmluZ1tdKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFB1YmxpY0FjY2VzcyguLi5rZXlQcmVmaXgpO1xuICB9XG5cbiAgYWRkRXZlbnROb3RpZmljYXRpb24oXG4gICAgZXZlbnQ6IEV2ZW50VHlwZSxcbiAgICBkZXN0OiBJQnVja2V0Tm90aWZpY2F0aW9uRGVzdGluYXRpb24sXG4gICAgLi4uZmlsdGVyczogTm90aWZpY2F0aW9uS2V5RmlsdGVyW11cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5idWNrZXQuYWRkRXZlbnROb3RpZmljYXRpb24oZXZlbnQsIGRlc3QsIC4uLmZpbHRlcnMpO1xuICB9XG5cbiAgYWRkT2JqZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbihcbiAgICBkZXN0OiBJQnVja2V0Tm90aWZpY2F0aW9uRGVzdGluYXRpb24sXG4gICAgLi4uZmlsdGVyczogTm90aWZpY2F0aW9uS2V5RmlsdGVyW11cbiAgKTogdm9pZCB7XG4gICAgdGhpcy5idWNrZXQuYWRkT2JqZWN0Q3JlYXRlZE5vdGlmaWNhdGlvbihkZXN0LCAuLi5maWx0ZXJzKTtcbiAgfVxuXG4gIGFkZE9iamVjdFJlbW92ZWROb3RpZmljYXRpb24oXG4gICAgZGVzdDogSUJ1Y2tldE5vdGlmaWNhdGlvbkRlc3RpbmF0aW9uLFxuICAgIC4uLmZpbHRlcnM6IE5vdGlmaWNhdGlvbktleUZpbHRlcltdXG4gICk6IHZvaWQge1xuICAgIHRoaXMuYnVja2V0LmFkZE9iamVjdFJlbW92ZWROb3RpZmljYXRpb24oZGVzdCwgLi4uZmlsdGVycyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VGYWN0b3J5IHtcbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBTdG9yYWdlQnVpbGRQcm9wcyA9IHt9KTogU3RvcmFnZUZhY3RvcnlGbiB7XG4gICAgY29uc3QgeyBzdGFja1BsYWNlbWVudCwgLi4uczNQcm9wcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgZm46IFN0b3JhZ2VGYWN0b3J5Rm4gPSAoX2FwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICB2YWxpZGF0ZVN0b3JhZ2VQcm9wcyhzM1Byb3BzKTtcbiAgICAgIHJldHVybiBuZXcgU3RvcmFnZShzY29wZSwgaWQsIHMzUHJvcHMpO1xuICAgIH07XG4gICAgaWYgKHN0YWNrUGxhY2VtZW50KSB7XG4gICAgICBmbi5zdGFja1BsYWNlbWVudCA9IHN0YWNrUGxhY2VtZW50O1xuICAgIH1cbiAgICByZXR1cm4gZm47XG4gIH1cbn1cbiJdfQ==
@@ -11,7 +11,7 @@ class AuditRoleFactory {
11
11
  static build(id, config) {
12
12
  return (_app, scope) => {
13
13
  const role = new aws_iam_1.Role(scope, id, {
14
- roleName: `${config.roleNamePrefix || "FjallAudit"}-${config.appName}`,
14
+ roleName: `${config.roleNamePrefix || "FjallAudit"}${config.appName}`,
15
15
  path: config.rolePath || "/",
16
16
  assumedBy: new aws_iam_1.AccountPrincipal(config.webappAccountId),
17
17
  description: `Cross-account audit role for CloudQuery access to application: ${config.appName}`,
@@ -23,14 +23,14 @@ class AuditRoleFactory {
23
23
  aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName("SecurityAudit")
24
24
  ]
25
25
  });
26
- // Export the role ARN so it can be retrieved after deployment
27
26
  new aws_cdk_lib_1.CfnOutput(scope, `${id}Arn`, {
27
+ key: `${id}Arn`,
28
28
  value: role.roleArn,
29
29
  description: `ARN of the audit role for ${config.appName}`,
30
30
  exportName: `${config.appName}-AuditRoleArn`
31
31
  });
32
- // Export the external ID so it can be retrieved after deployment
33
32
  new aws_cdk_lib_1.CfnOutput(scope, `${id}ExternalId`, {
33
+ key: `${id}ExternalId`,
34
34
  value: config.externalId,
35
35
  description: `External ID for the audit role for ${config.appName}`,
36
36
  exportName: `${config.appName}-AuditRoleExternalId`
@@ -41,4 +41,4 @@ class AuditRoleFactory {
41
41
  }
42
42
  exports.AuditRoleFactory = AuditRoleFactory;
43
43
  exports.default = AuditRoleFactory;
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXRSb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvYXVkaXQvYXVkaXRSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF3QztBQUN4QyxpREFBNEU7QUE4QjVFOzs7R0FHRztBQUNILE1BQWEsZ0JBQWdCO0lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEVBQVUsRUFDVixNQUF1QjtRQUV2QixPQUFPLENBQUMsSUFBZSxFQUFFLEtBQWdCLEVBQUUsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLGNBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUMvQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLFlBQVksSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUN0RSxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxHQUFHO2dCQUM1QixTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxXQUFXLEVBQUUsa0VBQWtFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQy9GLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLGVBQWUsRUFBRTtvQkFDZix3REFBd0Q7b0JBQ3hELHVCQUFhLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3hELDJDQUEyQztvQkFDM0MsdUJBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUM7aUJBQ3hEO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsOERBQThEO1lBQzlELElBQUksdUJBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtnQkFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNuQixXQUFXLEVBQUUsNkJBQTZCLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzFELFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLGVBQWU7YUFDN0MsQ0FBQyxDQUFDO1lBRUgsaUVBQWlFO1lBQ2pFLElBQUksdUJBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVO2dCQUN4QixXQUFXLEVBQUUsc0NBQXNDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ25FLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLHNCQUFzQjthQUNwRCxDQUFDLENBQUM7WUFFSCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXJDRCw0Q0FxQ0M7QUFFRCxrQkFBZSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUm9sZSwgQWNjb3VudFByaW5jaXBhbCwgTWFuYWdlZFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRSb2xlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCBvZiB0aGUgRmphbGwgd2ViYXBwIHRoYXQgd2lsbCBhc3N1bWUgdGhpcyByb2xlXG4gICAqL1xuICB3ZWJhcHBBY2NvdW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG5hbWUgdG8gc2NvcGUgdGhlIHJvbGUncyBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgYXBwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBJRCBmb3IgYWRkaXRpb25hbCBzZWN1cml0eSB3aGVuIGFzc3VtaW5nIHRoZSByb2xlXG4gICAqL1xuICBleHRlcm5hbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHJvbGUgbmFtZSBwcmVmaXguIERlZmF1bHRzIHRvIFwiRmphbGxBdWRpdFwiXG4gICAqL1xuICByb2xlTmFtZVByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHBhdGggZm9yIHRoZSByb2xlLiBEZWZhdWx0cyB0byBcIi9cIlxuICAgKi9cbiAgcm9sZVBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmFjdG9yeSB0byBidWlsZCBhIGNyb3NzLWFjY291bnQgYXVkaXQgSUFNIHJvbGUgdGhhdCBhbGxvd3MgdGhlIEZqYWxsIHdlYmFwcFxuICogdG8gdXNlIENsb3VkUXVlcnkgZm9yIGNvbXByZWhlbnNpdmUgcmVhZC1vbmx5IGF1ZGl0aW5nIG9mIEFXUyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdWRpdFJvbGVGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIGNvbmZpZzogQXVkaXRSb2xlQ29uZmlnXG4gICk6IChhcHA6IENvbnN0cnVjdCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gUm9sZSB7XG4gICAgcmV0dXJuIChfYXBwOiBDb25zdHJ1Y3QsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIGNvbnN0IHJvbGUgPSBuZXcgUm9sZShzY29wZSwgaWQsIHtcbiAgICAgICAgcm9sZU5hbWU6IGAke2NvbmZpZy5yb2xlTmFtZVByZWZpeCB8fCBcIkZqYWxsQXVkaXRcIn0tJHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBwYXRoOiBjb25maWcucm9sZVBhdGggfHwgXCIvXCIsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IEFjY291bnRQcmluY2lwYWwoY29uZmlnLndlYmFwcEFjY291bnRJZCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQ3Jvc3MtYWNjb3VudCBhdWRpdCByb2xlIGZvciBDbG91ZFF1ZXJ5IGFjY2VzcyB0byBhcHBsaWNhdGlvbjogJHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBleHRlcm5hbElkczogW2NvbmZpZy5leHRlcm5hbElkXSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgLy8gQVdTIG1hbmFnZWQgcG9saWN5IGZvciBjb21wcmVoZW5zaXZlIHJlYWQtb25seSBhY2Nlc3NcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIlJlYWRPbmx5QWNjZXNzXCIpLFxuICAgICAgICAgIC8vIEFXUyBtYW5hZ2VkIHBvbGljeSBmb3Igc2VjdXJpdHkgYXVkaXRpbmdcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIlNlY3VyaXR5QXVkaXRcIilcbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEV4cG9ydCB0aGUgcm9sZSBBUk4gc28gaXQgY2FuIGJlIHJldHJpZXZlZCBhZnRlciBkZXBsb3ltZW50XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCBgJHtpZH1Bcm5gLCB7XG4gICAgICAgIHZhbHVlOiByb2xlLnJvbGVBcm4sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQVJOIG9mIHRoZSBhdWRpdCByb2xlIGZvciAke2NvbmZpZy5hcHBOYW1lfWAsXG4gICAgICAgIGV4cG9ydE5hbWU6IGAke2NvbmZpZy5hcHBOYW1lfS1BdWRpdFJvbGVBcm5gXG4gICAgICB9KTtcblxuICAgICAgLy8gRXhwb3J0IHRoZSBleHRlcm5hbCBJRCBzbyBpdCBjYW4gYmUgcmV0cmlldmVkIGFmdGVyIGRlcGxveW1lbnRcbiAgICAgIG5ldyBDZm5PdXRwdXQoc2NvcGUsIGAke2lkfUV4dGVybmFsSWRgLCB7XG4gICAgICAgIHZhbHVlOiBjb25maWcuZXh0ZXJuYWxJZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBFeHRlcm5hbCBJRCBmb3IgdGhlIGF1ZGl0IHJvbGUgZm9yICR7Y29uZmlnLmFwcE5hbWV9YCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7Y29uZmlnLmFwcE5hbWV9LUF1ZGl0Um9sZUV4dGVybmFsSWRgXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJvbGU7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdWRpdFJvbGVGYWN0b3J5O1xuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXRSb2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3Jlc291cmNlcy9hd3MvYXVkaXQvYXVkaXRSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF3QztBQUN4QyxpREFBNEU7QUE4QjVFOzs7R0FHRztBQUNILE1BQWEsZ0JBQWdCO0lBQ3BCLE1BQU0sQ0FBQyxLQUFLLENBQ2pCLEVBQVUsRUFDVixNQUF1QjtRQUV2QixPQUFPLENBQUMsSUFBZSxFQUFFLEtBQWdCLEVBQUUsRUFBRTtZQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLGNBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUMvQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNyRSxJQUFJLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxHQUFHO2dCQUM1QixTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO2dCQUN2RCxXQUFXLEVBQUUsa0VBQWtFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQy9GLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLGVBQWUsRUFBRTtvQkFDZix3REFBd0Q7b0JBQ3hELHVCQUFhLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3hELDJDQUEyQztvQkFDM0MsdUJBQWEsQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUM7aUJBQ3hEO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsSUFBSSx1QkFBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO2dCQUMvQixHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNuQixXQUFXLEVBQUUsNkJBQTZCLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzFELFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLGVBQWU7YUFDN0MsQ0FBQyxDQUFDO1lBRUgsSUFBSSx1QkFBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFO2dCQUN0QyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVk7Z0JBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDeEIsV0FBVyxFQUFFLHNDQUFzQyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNuRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxzQkFBc0I7YUFDcEQsQ0FBQyxDQUFDO1lBRUgsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFyQ0QsNENBcUNDO0FBRUQsa0JBQWUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IFJvbGUsIEFjY291bnRQcmluY2lwYWwsIE1hbmFnZWRQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Um9sZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSUQgb2YgdGhlIEZqYWxsIHdlYmFwcCB0aGF0IHdpbGwgYXNzdW1lIHRoaXMgcm9sZVxuICAgKi9cbiAgd2ViYXBwQWNjb3VudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhcHBsaWNhdGlvbiBuYW1lIHRvIHNjb3BlIHRoZSByb2xlJ3MgcGVybWlzc2lvbnMgdG9cbiAgICovXG4gIGFwcE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZXJuYWwgSUQgZm9yIGFkZGl0aW9uYWwgc2VjdXJpdHkgd2hlbiBhc3N1bWluZyB0aGUgcm9sZVxuICAgKi9cbiAgZXh0ZXJuYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCByb2xlIG5hbWUgcHJlZml4LiBEZWZhdWx0cyB0byBcIkZqYWxsQXVkaXRcIlxuICAgKi9cbiAgcm9sZU5hbWVQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIElBTSBwYXRoIGZvciB0aGUgcm9sZS4gRGVmYXVsdHMgdG8gXCIvXCJcbiAgICovXG4gIHJvbGVQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gYnVpbGQgYSBjcm9zcy1hY2NvdW50IGF1ZGl0IElBTSByb2xlIHRoYXQgYWxsb3dzIHRoZSBGamFsbCB3ZWJhcHBcbiAqIHRvIHVzZSBDbG91ZFF1ZXJ5IGZvciBjb21wcmVoZW5zaXZlIHJlYWQtb25seSBhdWRpdGluZyBvZiBBV1MgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgY2xhc3MgQXVkaXRSb2xlRmFjdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBjb25maWc6IEF1ZGl0Um9sZUNvbmZpZ1xuICApOiAoYXBwOiBDb25zdHJ1Y3QsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJvbGUge1xuICAgIHJldHVybiAoX2FwcDogQ29uc3RydWN0LCBzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICBjb25zdCByb2xlID0gbmV3IFJvbGUoc2NvcGUsIGlkLCB7XG4gICAgICAgIHJvbGVOYW1lOiBgJHtjb25maWcucm9sZU5hbWVQcmVmaXggfHwgXCJGamFsbEF1ZGl0XCJ9JHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBwYXRoOiBjb25maWcucm9sZVBhdGggfHwgXCIvXCIsXG4gICAgICAgIGFzc3VtZWRCeTogbmV3IEFjY291bnRQcmluY2lwYWwoY29uZmlnLndlYmFwcEFjY291bnRJZCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQ3Jvc3MtYWNjb3VudCBhdWRpdCByb2xlIGZvciBDbG91ZFF1ZXJ5IGFjY2VzcyB0byBhcHBsaWNhdGlvbjogJHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBleHRlcm5hbElkczogW2NvbmZpZy5leHRlcm5hbElkXSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgICAgLy8gQVdTIG1hbmFnZWQgcG9saWN5IGZvciBjb21wcmVoZW5zaXZlIHJlYWQtb25seSBhY2Nlc3NcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIlJlYWRPbmx5QWNjZXNzXCIpLFxuICAgICAgICAgIC8vIEFXUyBtYW5hZ2VkIHBvbGljeSBmb3Igc2VjdXJpdHkgYXVkaXRpbmdcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIlNlY3VyaXR5QXVkaXRcIilcbiAgICAgICAgXVxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQoc2NvcGUsIGAke2lkfUFybmAsIHtcbiAgICAgICAga2V5OiBgJHtpZH1Bcm5gLFxuICAgICAgICB2YWx1ZTogcm9sZS5yb2xlQXJuLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFSTiBvZiB0aGUgYXVkaXQgcm9sZSBmb3IgJHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBleHBvcnROYW1lOiBgJHtjb25maWcuYXBwTmFtZX0tQXVkaXRSb2xlQXJuYFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQoc2NvcGUsIGAke2lkfUV4dGVybmFsSWRgLCB7XG4gICAgICAgIGtleTogYCR7aWR9RXh0ZXJuYWxJZGAsXG4gICAgICAgIHZhbHVlOiBjb25maWcuZXh0ZXJuYWxJZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBFeHRlcm5hbCBJRCBmb3IgdGhlIGF1ZGl0IHJvbGUgZm9yICR7Y29uZmlnLmFwcE5hbWV9YCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7Y29uZmlnLmFwcE5hbWV9LUF1ZGl0Um9sZUV4dGVybmFsSWRgXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJvbGU7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdWRpdFJvbGVGYWN0b3J5O1xuIl19
@@ -0,0 +1 @@
1
+ export { AuditRoleFactory, type AuditRoleConfig } from "./auditRole";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuditRoleFactory = void 0;
4
+ var auditRole_1 = require("./auditRole");
5
+ Object.defineProperty(exports, "AuditRoleFactory", { enumerable: true, get: function () { return auditRole_1.AuditRoleFactory; } });
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9hdWRpdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBcUU7QUFBNUQsNkdBQUEsZ0JBQWdCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBBdWRpdFJvbGVGYWN0b3J5LCB0eXBlIEF1ZGl0Um9sZUNvbmZpZyB9IGZyb20gXCIuL2F1ZGl0Um9sZVwiO1xuIl19
@@ -5,10 +5,11 @@ const constructs_1 = require("constructs");
5
5
  const aws_cdk_lib_1 = require("aws-cdk-lib");
6
6
  const aws_backup_1 = require("aws-cdk-lib/aws-backup");
7
7
  const iam = require("aws-cdk-lib/aws-iam");
8
+ const backupTierMapping_1 = require("../../../utils/backupTierMapping");
8
9
  class BackupPlan extends constructs_1.Construct {
9
10
  constructor(scope, id, props) {
10
11
  super(scope, id);
11
- const tagKey = props.tagKey || "fjall:disasterRecovery:tier";
12
+ const tagKey = props.tagKey || backupTierMapping_1.BACKUP_TIER_TAG_KEY;
12
13
  this.plan = new aws_backup_1.BackupPlan(this, `${props.planName}Plan`, {
13
14
  backupPlanName: props.planName,
14
15
  backupVault: props.backupVault.vault,
@@ -57,4 +58,4 @@ class BackupPlan extends constructs_1.Construct {
57
58
  }
58
59
  }
59
60
  exports.BackupPlan = BackupPlan;
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwUGxhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2JhY2t1cC9iYWNrdXBQbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyw2Q0FBd0M7QUFDeEMsdURBS2dDO0FBQ2hDLDJDQUEyQztBQVczQyxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQUt2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSw2QkFBNkIsQ0FBQztRQUU3RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksdUJBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxNQUFNLEVBQUU7WUFDbEQsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQzlCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFDcEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQzdCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSw0QkFBZSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLFdBQVcsRUFBRTtZQUN2RSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDckIsU0FBUyxFQUFFLENBQUMsMkJBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztTQUNuQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxTQUFTLEVBQUU7WUFDN0QsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsU0FBUztZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQzlCLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLGVBQWU7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQXNCO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxZQUFZLEVBQUU7WUFDN0QsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDO1lBQzNELFdBQVcsRUFBRSxtQkFBbUIsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNoRCxlQUFlLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDeEMsa0RBQWtELENBQ25EO2dCQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLG9EQUFvRCxDQUNyRDtnQkFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUN4Qyx1Q0FBdUMsQ0FDeEM7Z0JBQ0QsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDeEMsd0NBQXdDLENBQ3pDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUNkLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ3hCLE9BQU8sRUFBRTtnQkFDUCxzQkFBc0I7Z0JBQ3RCLHdDQUF3QztnQkFDeEMsb0NBQW9DO2dCQUNwQyx5QkFBeUI7Z0JBQ3pCLHdCQUF3QjtnQkFDeEIsbUNBQW1DO2FBQ3BDO1lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFVLEVBQUUsS0FBc0I7UUFDN0MsT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBRTtZQUMxQixPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdkVELGdDQXVFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIEJhY2t1cFBsYW4gYXMgUGxhbixcbiAgQmFja3VwU2VsZWN0aW9uLFxuICBCYWNrdXBSZXNvdXJjZSxcbiAgdHlwZSBCYWNrdXBQbGFuUnVsZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWJhY2t1cFwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIEJhY2t1cFZhdWx0IH0gZnJvbSBcIi4vYmFja3VwVmF1bHRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCYWNrdXBQbGFuUHJvcHMge1xuICBwbGFuTmFtZTogc3RyaW5nO1xuICBydWxlczogQmFja3VwUGxhblJ1bGVbXTtcbiAgYmFja3VwVmF1bHQ6IEJhY2t1cFZhdWx0O1xuICB0YWdWYWx1ZTogc3RyaW5nO1xuICB0YWdLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBCYWNrdXBQbGFuIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHBsYW46IFBsYW47XG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb246IEJhY2t1cFNlbGVjdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IHBsYW5Bcm46IENmbk91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFja3VwUGxhblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHRhZ0tleSA9IHByb3BzLnRhZ0tleSB8fCBcImZqYWxsOmRpc2FzdGVyUmVjb3Zlcnk6dGllclwiO1xuXG4gICAgdGhpcy5wbGFuID0gbmV3IFBsYW4odGhpcywgYCR7cHJvcHMucGxhbk5hbWV9UGxhbmAsIHtcbiAgICAgIGJhY2t1cFBsYW5OYW1lOiBwcm9wcy5wbGFuTmFtZSxcbiAgICAgIGJhY2t1cFZhdWx0OiBwcm9wcy5iYWNrdXBWYXVsdC52YXVsdCxcbiAgICAgIGJhY2t1cFBsYW5SdWxlczogcHJvcHMucnVsZXNcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IEJhY2t1cFNlbGVjdGlvbih0aGlzLCBgJHtwcm9wcy5wbGFuTmFtZX1TZWxlY3Rpb25gLCB7XG4gICAgICBiYWNrdXBQbGFuOiB0aGlzLnBsYW4sXG4gICAgICByZXNvdXJjZXM6IFtCYWNrdXBSZXNvdXJjZS5mcm9tVGFnKHRhZ0tleSwgcHJvcHMudGFnVmFsdWUpXSxcbiAgICAgIHJvbGU6IHRoaXMuY3JlYXRlQmFja3VwUm9sZShwcm9wcylcbiAgICB9KTtcblxuICAgIHRoaXMucGxhbkFybiA9IG5ldyBDZm5PdXRwdXQodGhpcywgYCR7cHJvcHMucGxhbk5hbWV9UGxhbkFybmAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMucGxhbk5hbWV9UGxhbkFybmAsXG4gICAgICB2YWx1ZTogdGhpcy5wbGFuLmJhY2t1cFBsYW5Bcm4sXG4gICAgICBleHBvcnROYW1lOiBgJHtwcm9wcy5wbGFuTmFtZX1CYWNrdXBQbGFuQXJuYFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCYWNrdXBSb2xlKHByb3BzOiBCYWNrdXBQbGFuUHJvcHMpOiBpYW0uUm9sZSB7XG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBgJHtwcm9wcy5wbGFuTmFtZX1CYWNrdXBSb2xlYCwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJiYWNrdXAuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgQmFja3VwIHJvbGUgZm9yICR7cHJvcHMucGxhbk5hbWV9YCxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JCYWNrdXBcIlxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JSZXN0b3Jlc1wiXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcIkFXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUzNCYWNrdXBcIlxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzUmVzdG9yZVwiXG4gICAgICAgIClcbiAgICAgIF1cbiAgICB9KTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwicmRzOk1vZGlmeURCSW5zdGFuY2VcIixcbiAgICAgICAgICBcInJkczpEZXNjcmliZURCSW5zdGFuY2VBdXRvbWF0ZWRCYWNrdXBzXCIsXG4gICAgICAgICAgXCJyZHM6UmVzdG9yZURCSW5zdGFuY2VUb1BvaW50SW5UaW1lXCIsXG4gICAgICAgICAgXCJyZHM6RGVzY3JpYmVEQkluc3RhbmNlc1wiLFxuICAgICAgICAgIFwicmRzOkRlc2NyaWJlREJDbHVzdGVyc1wiLFxuICAgICAgICAgIFwicmRzOlJlc3RvcmVEQkNsdXN0ZXJUb1BvaW50SW5UaW1lXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM6IEJhY2t1cFBsYW5Qcm9wcykge1xuICAgIHJldHVybiAoc2NvcGU6IENvbnN0cnVjdCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBCYWNrdXBQbGFuKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwUGxhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2JhY2t1cC9iYWNrdXBQbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyw2Q0FBd0M7QUFDeEMsdURBS2dDO0FBQ2hDLDJDQUEyQztBQUUzQyx3RUFBdUU7QUFVdkUsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFLdkMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksdUNBQW1CLENBQUM7UUFFbkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHVCQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsTUFBTSxFQUFFO1lBQ2xELGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUM5QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLO1lBQ3BDLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSztTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksNEJBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxXQUFXLEVBQUU7WUFDdkUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ3JCLFNBQVMsRUFBRSxDQUFDLDJCQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0QsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7U0FDbkMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsU0FBUyxFQUFFO1lBQzdELEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLFNBQVM7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUM5QixVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxlQUFlO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFzQjtRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsWUFBWSxFQUFFO1lBQzdELFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztZQUMzRCxXQUFXLEVBQUUsbUJBQW1CLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDaEQsZUFBZSxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLGtEQUFrRCxDQUNuRDtnQkFDRCxHQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUN4QyxvREFBb0QsQ0FDckQ7Z0JBQ0QsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDeEMsdUNBQXVDLENBQ3hDO2dCQUNELEdBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLHdDQUF3QyxDQUN6QzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FDZCxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUU7Z0JBQ1Asc0JBQXNCO2dCQUN0Qix3Q0FBd0M7Z0JBQ3hDLG9DQUFvQztnQkFDcEMseUJBQXlCO2dCQUN6Qix3QkFBd0I7Z0JBQ3hCLG1DQUFtQzthQUNwQztZQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBVSxFQUFFLEtBQXNCO1FBQzdDLE9BQU8sQ0FBQyxLQUFnQixFQUFFLEVBQUU7WUFDMUIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXZFRCxnQ0F1RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBCYWNrdXBQbGFuIGFzIFBsYW4sXG4gIEJhY2t1cFNlbGVjdGlvbixcbiAgQmFja3VwUmVzb3VyY2UsXG4gIHR5cGUgQmFja3VwUGxhblJ1bGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1iYWNrdXBcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgdHlwZSBCYWNrdXBWYXVsdCB9IGZyb20gXCIuL2JhY2t1cFZhdWx0XCI7XG5pbXBvcnQgeyBCQUNLVVBfVElFUl9UQUdfS0VZIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2JhY2t1cFRpZXJNYXBwaW5nXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja3VwUGxhblByb3BzIHtcbiAgcGxhbk5hbWU6IHN0cmluZztcbiAgcnVsZXM6IEJhY2t1cFBsYW5SdWxlW107XG4gIGJhY2t1cFZhdWx0OiBCYWNrdXBWYXVsdDtcbiAgdGFnVmFsdWU6IHN0cmluZztcbiAgdGFnS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQmFja3VwUGxhbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBwbGFuOiBQbGFuO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0aW9uOiBCYWNrdXBTZWxlY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBwbGFuQXJuOiBDZm5PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhY2t1cFBsYW5Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB0YWdLZXkgPSBwcm9wcy50YWdLZXkgfHwgQkFDS1VQX1RJRVJfVEFHX0tFWTtcblxuICAgIHRoaXMucGxhbiA9IG5ldyBQbGFuKHRoaXMsIGAke3Byb3BzLnBsYW5OYW1lfVBsYW5gLCB7XG4gICAgICBiYWNrdXBQbGFuTmFtZTogcHJvcHMucGxhbk5hbWUsXG4gICAgICBiYWNrdXBWYXVsdDogcHJvcHMuYmFja3VwVmF1bHQudmF1bHQsXG4gICAgICBiYWNrdXBQbGFuUnVsZXM6IHByb3BzLnJ1bGVzXG4gICAgfSk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBCYWNrdXBTZWxlY3Rpb24odGhpcywgYCR7cHJvcHMucGxhbk5hbWV9U2VsZWN0aW9uYCwge1xuICAgICAgYmFja3VwUGxhbjogdGhpcy5wbGFuLFxuICAgICAgcmVzb3VyY2VzOiBbQmFja3VwUmVzb3VyY2UuZnJvbVRhZyh0YWdLZXksIHByb3BzLnRhZ1ZhbHVlKV0sXG4gICAgICByb2xlOiB0aGlzLmNyZWF0ZUJhY2t1cFJvbGUocHJvcHMpXG4gICAgfSk7XG5cbiAgICB0aGlzLnBsYW5Bcm4gPSBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLnBsYW5OYW1lfVBsYW5Bcm5gLCB7XG4gICAgICBrZXk6IGAke3Byb3BzLnBsYW5OYW1lfVBsYW5Bcm5gLFxuICAgICAgdmFsdWU6IHRoaXMucGxhbi5iYWNrdXBQbGFuQXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMucGxhbk5hbWV9QmFja3VwUGxhbkFybmBcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQmFja3VwUm9sZShwcm9wczogQmFja3VwUGxhblByb3BzKTogaWFtLlJvbGUge1xuICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgYCR7cHJvcHMucGxhbk5hbWV9QmFja3VwUm9sZWAsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiYmFja3VwLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBkZXNjcmlwdGlvbjogYEJhY2t1cCByb2xlIGZvciAke3Byb3BzLnBsYW5OYW1lfWAsXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yQmFja3VwXCJcbiAgICAgICAgKSxcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0JhY2t1cFNlcnZpY2VSb2xlUG9saWN5Rm9yUmVzdG9yZXNcIlxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJBV1NCYWNrdXBTZXJ2aWNlUm9sZVBvbGljeUZvclMzQmFja3VwXCJcbiAgICAgICAgKSxcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwiQVdTQmFja3VwU2VydmljZVJvbGVQb2xpY3lGb3JTM1Jlc3RvcmVcIlxuICAgICAgICApXG4gICAgICBdXG4gICAgfSk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcInJkczpNb2RpZnlEQkluc3RhbmNlXCIsXG4gICAgICAgICAgXCJyZHM6RGVzY3JpYmVEQkluc3RhbmNlQXV0b21hdGVkQmFja3Vwc1wiLFxuICAgICAgICAgIFwicmRzOlJlc3RvcmVEQkluc3RhbmNlVG9Qb2ludEluVGltZVwiLFxuICAgICAgICAgIFwicmRzOkRlc2NyaWJlREJJbnN0YW5jZXNcIixcbiAgICAgICAgICBcInJkczpEZXNjcmliZURCQ2x1c3RlcnNcIixcbiAgICAgICAgICBcInJkczpSZXN0b3JlREJDbHVzdGVyVG9Qb2ludEluVGltZVwiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBCYWNrdXBQbGFuUHJvcHMpIHtcbiAgICByZXR1cm4gKHNjb3BlOiBDb25zdHJ1Y3QpID0+IHtcbiAgICAgIHJldHVybiBuZXcgQmFja3VwUGxhbihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -11,14 +11,16 @@ class BackupVault extends constructs_1.Construct {
11
11
  const encryptionKey = props.encryptionKey ||
12
12
  new kms_1.CustomerManagedKey(this, `${props.vaultName}Key`, {
13
13
  description: `Encryption key for backup vault ${props.vaultName}`,
14
- aliasName: `cmk/backupVault/${props.vaultName}`
14
+ aliasName: `cmk/backupVault/${props.vaultName}`,
15
+ removalPolicy: props.removalPolicy
15
16
  });
16
17
  this.vault = new aws_backup_1.BackupVault(this, `${props.vaultName}Vault`, {
17
18
  backupVaultName: props.vaultName,
18
19
  encryptionKey: encryptionKey.key,
19
20
  accessPolicy: props.accessPolicy,
20
21
  lockConfiguration: props.lockConfiguration,
21
- removalPolicy: props.removalPolicy || aws_cdk_lib_1.RemovalPolicy.RETAIN
22
+ // TODO: Revert to RemovalPolicy.RETAIN for production
23
+ removalPolicy: props.removalPolicy || aws_cdk_lib_1.RemovalPolicy.DESTROY
22
24
  });
23
25
  this.vaultArn = new aws_cdk_lib_1.CfnOutput(this, `${props.vaultName}VaultArn`, {
24
26
  key: `${props.vaultName}VaultArn`,
@@ -38,4 +40,4 @@ class BackupVault extends constructs_1.Construct {
38
40
  }
39
41
  }
40
42
  exports.BackupVault = BackupVault;
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwVmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9iYWNrdXAvYmFja3VwVmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUF1RDtBQUN2RCx1REFHZ0M7QUFFaEMsd0NBQW9EO0FBVXBELE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBS3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLGFBQWEsR0FDakIsS0FBSyxDQUFDLGFBQWE7WUFDbkIsSUFBSSx3QkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxLQUFLLEVBQUU7Z0JBQ3BELFdBQVcsRUFBRSxtQ0FBbUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDakUsU0FBUyxFQUFFLG1CQUFtQixLQUFLLENBQUMsU0FBUyxFQUFFO2FBQ2hELENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSx3QkFBSyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLE9BQU8sRUFBRTtZQUN0RCxlQUFlLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDaEMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxHQUFHO1lBQ2hDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQzFDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLDJCQUFhLENBQUMsTUFBTTtTQUMzRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxVQUFVLEVBQUU7WUFDaEUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsVUFBVTtZQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjO1lBQ2hDLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLEtBQUs7U0FDcEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsV0FBVyxFQUFFO1lBQ2xFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLFdBQVc7WUFDbEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUNqQyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxNQUFNO1NBQ3JDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxLQUF1QjtRQUM5QyxPQUFPLENBQUMsS0FBZ0IsRUFBRSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF6Q0Qsa0NBeUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQmFja3VwVmF1bHQgYXMgVmF1bHQsXG4gIHR5cGUgTG9ja0NvbmZpZ3VyYXRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1iYWNrdXBcIjtcbmltcG9ydCB7IHR5cGUgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ3VzdG9tZXJNYW5hZ2VkS2V5IH0gZnJvbSBcIi4uL3NlY3JldHMva21zXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja3VwVmF1bHRQcm9wcyB7XG4gIHZhdWx0TmFtZTogc3RyaW5nO1xuICBlbmNyeXB0aW9uS2V5PzogQ3VzdG9tZXJNYW5hZ2VkS2V5O1xuICBhY2Nlc3NQb2xpY3k/OiBQb2xpY3lEb2N1bWVudDtcbiAgbG9ja0NvbmZpZ3VyYXRpb24/OiBMb2NrQ29uZmlndXJhdGlvbjtcbiAgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbmV4cG9ydCBjbGFzcyBCYWNrdXBWYXVsdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB2YXVsdDogVmF1bHQ7XG4gIHB1YmxpYyByZWFkb25seSB2YXVsdEFybjogQ2ZuT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgdmF1bHROYW1lOiBDZm5PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhY2t1cFZhdWx0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9XG4gICAgICBwcm9wcy5lbmNyeXB0aW9uS2V5IHx8XG4gICAgICBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1LZXlgLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRW5jcnlwdGlvbiBrZXkgZm9yIGJhY2t1cCB2YXVsdCAke3Byb3BzLnZhdWx0TmFtZX1gLFxuICAgICAgICBhbGlhc05hbWU6IGBjbWsvYmFja3VwVmF1bHQvJHtwcm9wcy52YXVsdE5hbWV9YFxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZhdWx0ID0gbmV3IFZhdWx0KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1WYXVsdGAsIHtcbiAgICAgIGJhY2t1cFZhdWx0TmFtZTogcHJvcHMudmF1bHROYW1lLFxuICAgICAgZW5jcnlwdGlvbktleTogZW5jcnlwdGlvbktleS5rZXksXG4gICAgICBhY2Nlc3NQb2xpY3k6IHByb3BzLmFjY2Vzc1BvbGljeSxcbiAgICAgIGxvY2tDb25maWd1cmF0aW9uOiBwcm9wcy5sb2NrQ29uZmlndXJhdGlvbixcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5SRVRBSU5cbiAgICB9KTtcblxuICAgIHRoaXMudmF1bHRBcm4gPSBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1WYXVsdEFybmAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMudmF1bHROYW1lfVZhdWx0QXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhdWx0LmJhY2t1cFZhdWx0QXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMudmF1bHROYW1lfUFybmBcbiAgICB9KTtcblxuICAgIHRoaXMudmF1bHROYW1lID0gbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy52YXVsdE5hbWV9VmF1bHROYW1lYCwge1xuICAgICAga2V5OiBgJHtwcm9wcy52YXVsdE5hbWV9VmF1bHROYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhdWx0LmJhY2t1cFZhdWx0TmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLnZhdWx0TmFtZX1OYW1lYFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBCYWNrdXBWYXVsdFByb3BzKSB7XG4gICAgcmV0dXJuIChzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEJhY2t1cFZhdWx0KHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwVmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9iYWNrdXAvYmFja3VwVmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLDZDQUF1RDtBQUN2RCx1REFHZ0M7QUFFaEMsd0NBQW9EO0FBVXBELE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBS3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUI7UUFDL0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLGFBQWEsR0FDakIsS0FBSyxDQUFDLGFBQWE7WUFDbkIsSUFBSSx3QkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxLQUFLLEVBQUU7Z0JBQ3BELFdBQVcsRUFBRSxtQ0FBbUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtnQkFDakUsU0FBUyxFQUFFLG1CQUFtQixLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUMvQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7YUFDbkMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHdCQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsT0FBTyxFQUFFO1lBQ3RELGVBQWUsRUFBRSxLQUFLLENBQUMsU0FBUztZQUNoQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEdBQUc7WUFDaEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsc0RBQXNEO1lBQ3RELGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLDJCQUFhLENBQUMsT0FBTztTQUM1RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxVQUFVLEVBQUU7WUFDaEUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsVUFBVTtZQUNqQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjO1lBQ2hDLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLEtBQUs7U0FDcEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsV0FBVyxFQUFFO1lBQ2xFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLFdBQVc7WUFDbEMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZTtZQUNqQyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxNQUFNO1NBQ3JDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQVUsRUFBRSxLQUF1QjtRQUM5QyxPQUFPLENBQUMsS0FBZ0IsRUFBRSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEzQ0Qsa0NBMkNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQmFja3VwVmF1bHQgYXMgVmF1bHQsXG4gIHR5cGUgTG9ja0NvbmZpZ3VyYXRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1iYWNrdXBcIjtcbmltcG9ydCB7IHR5cGUgUG9saWN5RG9jdW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ3VzdG9tZXJNYW5hZ2VkS2V5IH0gZnJvbSBcIi4uL3NlY3JldHMva21zXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFja3VwVmF1bHRQcm9wcyB7XG4gIHZhdWx0TmFtZTogc3RyaW5nO1xuICBlbmNyeXB0aW9uS2V5PzogQ3VzdG9tZXJNYW5hZ2VkS2V5O1xuICBhY2Nlc3NQb2xpY3k/OiBQb2xpY3lEb2N1bWVudDtcbiAgbG9ja0NvbmZpZ3VyYXRpb24/OiBMb2NrQ29uZmlndXJhdGlvbjtcbiAgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbmV4cG9ydCBjbGFzcyBCYWNrdXBWYXVsdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSB2YXVsdDogVmF1bHQ7XG4gIHB1YmxpYyByZWFkb25seSB2YXVsdEFybjogQ2ZuT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgdmF1bHROYW1lOiBDZm5PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhY2t1cFZhdWx0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9XG4gICAgICBwcm9wcy5lbmNyeXB0aW9uS2V5IHx8XG4gICAgICBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1LZXlgLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRW5jcnlwdGlvbiBrZXkgZm9yIGJhY2t1cCB2YXVsdCAke3Byb3BzLnZhdWx0TmFtZX1gLFxuICAgICAgICBhbGlhc05hbWU6IGBjbWsvYmFja3VwVmF1bHQvJHtwcm9wcy52YXVsdE5hbWV9YCxcbiAgICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZhdWx0ID0gbmV3IFZhdWx0KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1WYXVsdGAsIHtcbiAgICAgIGJhY2t1cFZhdWx0TmFtZTogcHJvcHMudmF1bHROYW1lLFxuICAgICAgZW5jcnlwdGlvbktleTogZW5jcnlwdGlvbktleS5rZXksXG4gICAgICBhY2Nlc3NQb2xpY3k6IHByb3BzLmFjY2Vzc1BvbGljeSxcbiAgICAgIGxvY2tDb25maWd1cmF0aW9uOiBwcm9wcy5sb2NrQ29uZmlndXJhdGlvbixcbiAgICAgIC8vIFRPRE86IFJldmVydCB0byBSZW1vdmFsUG9saWN5LlJFVEFJTiBmb3IgcHJvZHVjdGlvblxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICB9KTtcblxuICAgIHRoaXMudmF1bHRBcm4gPSBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLnZhdWx0TmFtZX1WYXVsdEFybmAsIHtcbiAgICAgIGtleTogYCR7cHJvcHMudmF1bHROYW1lfVZhdWx0QXJuYCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhdWx0LmJhY2t1cFZhdWx0QXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7cHJvcHMudmF1bHROYW1lfUFybmBcbiAgICB9KTtcblxuICAgIHRoaXMudmF1bHROYW1lID0gbmV3IENmbk91dHB1dCh0aGlzLCBgJHtwcm9wcy52YXVsdE5hbWV9VmF1bHROYW1lYCwge1xuICAgICAga2V5OiBgJHtwcm9wcy52YXVsdE5hbWV9VmF1bHROYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhdWx0LmJhY2t1cFZhdWx0TmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3Byb3BzLnZhdWx0TmFtZX1OYW1lYFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBCYWNrdXBWYXVsdFByb3BzKSB7XG4gICAgcmV0dXJuIChzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEJhY2t1cFZhdWx0KHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import { Stack } from "aws-cdk-lib";
2
+ import { type IVpc } from "aws-cdk-lib/aws-ec2";
2
3
  import { Construct } from "constructs";
3
4
  import { Repository } from "aws-cdk-lib/aws-ecr";
4
5
  export interface StackBuilder {
@@ -7,7 +8,7 @@ export interface StackBuilder {
7
8
  addNetwork(fn: (stackBuilder: StackBuilder) => Construct): StackBuilder;
8
9
  addNetwork(resource: Construct | string): StackBuilder;
9
10
  getStack(): Stack;
10
- getNetwork(): Construct;
11
+ getNetwork(): IVpc;
11
12
  }
12
13
  export interface AwsStackProps {
13
14
  readonly accountId?: string;
@@ -26,6 +27,7 @@ export declare class AwsStack implements StackBuilder {
26
27
  private getCdkStack;
27
28
  private getStackProps;
28
29
  private isConnectable;
30
+ private isVpc;
29
31
  addConstruct(construct: Construct): AwsStack;
30
32
  addNetwork(resource: Construct): AwsStack;
31
33
  addNetwork(resource: (stackBuilder: StackBuilder) => Construct): AwsStack;
@@ -33,7 +35,7 @@ export declare class AwsStack implements StackBuilder {
33
35
  addContainerRegistry(resource: (stackBuilder: StackBuilder) => Repository): AwsStack;
34
36
  getStack(): Stack;
35
37
  getStackName(): string;
36
- getNetwork(): Construct;
38
+ getNetwork(): IVpc;
37
39
  getContainerRegistry(): Repository;
38
40
  getResource(identifier: string): Construct;
39
41
  connect(from: Construct | string, to: Construct | string, port?: number): this;
@@ -50,7 +50,10 @@ class AwsStack {
50
50
  return stackProps;
51
51
  }
52
52
  isConnectable(arg) {
53
- return arg.connections;
53
+ return typeof arg === "object" && arg !== null && "connections" in arg;
54
+ }
55
+ isVpc(resource) {
56
+ return "vpcId" in resource;
54
57
  }
55
58
  addConstruct(construct) {
56
59
  this.resources[construct.node.id] = construct;
@@ -59,6 +62,9 @@ class AwsStack {
59
62
  addNetwork(resource) {
60
63
  const resourceActual = resource instanceof constructs_1.Construct ? resource : resource(this);
61
64
  this.resources[resourceActual.node.id] = resourceActual;
65
+ if (!this.isVpc(resourceActual)) {
66
+ throw new Error("addNetwork expects a VPC construct implementing IVpc");
67
+ }
62
68
  this.network = resourceActual;
63
69
  return this;
64
70
  }
@@ -99,4 +105,4 @@ class AwsStack {
99
105
  }
100
106
  exports.AwsStack = AwsStack;
101
107
  exports.default = AwsStack;
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzU3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9iYXNlL2F3c1N0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFxRDtBQUNyRCxpREFBOEQ7QUFDOUQsMkNBQXVDO0FBRXZDLHNDQUErQjtBQUMvQixpREFBaUQ7QUFtQmpELE1BQWEsUUFBUTtJQVNuQixZQUNFLEVBQVUsRUFDVixZQUFvQyxFQUNwQyxLQUFxQjtRQVhQLGNBQVMsR0FFckIsRUFBRSxDQUFDO1FBV0wseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFekMsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxZQUFvQztRQUMxRCxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsRUFBVSxFQUFFLEtBQXFCO1FBQ25ELE9BQU8sSUFBSSxtQkFBSyxDQUFDLGFBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JF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QVksc0JBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUN0RSxPQUFPLElBQUksQ0FBQztRQUVkLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pELFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV6RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQWhKRCw0QkFnSkM7QUFDRCxrQkFBZSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgdHlwZSBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0eXBlIElDb25uZWN0YWJsZSwgUG9ydCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi8uLi9hcHBcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQnVpbGRlciB7XG4gIGFkZENvbnN0cnVjdChyZXNvdXJjZTogQ29uc3RydWN0KTogU3RhY2tCdWlsZGVyO1xuXG4gIGFkZE5ldHdvcmsocmVzb3VyY2U6IENvbnN0cnVjdCk6IFN0YWNrQnVpbGRlcjtcbiAgYWRkTmV0d29yayhmbjogKHN0YWNrQnVpbGRlcjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3QpOiBTdGFja0J1aWxkZXI7XG4gIGFkZE5ldHdvcmsocmVzb3VyY2U6IENvbnN0cnVjdCB8IHN0cmluZyk6IFN0YWNrQnVpbGRlcjtcblxuICBnZXRTdGFjaygpOiBTdGFjaztcbiAgZ2V0TmV0d29yaygpOiBDb25zdHJ1Y3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IGFjY291bnRJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICBhY2NvdW50TmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEF3c1N0YWNrIGltcGxlbWVudHMgU3RhY2tCdWlsZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlczoge1xuICAgIFtrZXk6IHN0cmluZ106IENvbnN0cnVjdDtcbiAgfSA9IHt9O1xuXG4gIHByaXZhdGUgc3RhY2s6IFN0YWNrO1xuICBwcml2YXRlIG5ldHdvcmshOiBDb25zdHJ1Y3Q7XG4gIHByaXZhdGUgY29udGFpbmVyUmVnaXN0cnkhOiBSZXBvc2l0b3J5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGVwZW5kZW5jaWVzPzogQXdzU3RhY2sgfCBBd3NTdGFja1tdLFxuICAgIHByb3BzPzogQXdzU3RhY2tQcm9wc1xuICApIHtcbiAgICAvLyBDcmVhdGUgaW5uZXIgQ0RLIFN0YWNrXG4gICAgdGhpcy5zdGFjayA9IHRoaXMuZ2V0Q2RrU3RhY2soaWQsIHByb3BzKTtcblxuICAgIC8vIFJlZ2lzdGVyIGFsbCBzdGFjayBkZXBlbmRlbmNpZXNcbiAgICB0aGlzLmFkZERlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzPzogQXdzU3RhY2sgfCBBd3NTdGFja1tdKSB7XG4gICAgaWYgKCFkZXBlbmRlbmNpZXMpIHJldHVybjtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGRlcGVuZGVuY2llcykpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgdGhpcy5zdGFjay5hZGREZXBlbmRlbmN5KGRlcGVuZGVuY3kuZ2V0U3RhY2soKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhY2suYWRkRGVwZW5kZW5jeShkZXBlbmRlbmNpZXMuZ2V0U3RhY2soKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDZGtTdGFjayhpZDogc3RyaW5nLCBwcm9wcz86IEF3c1N0YWNrUHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IFN0YWNrKEFwcC5nZXRJbnN0YW5jZSgpLCBpZCwgdGhpcy5nZXRTdGFja1Byb3BzKHByb3BzKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0YWNrUHJvcHMoXG4gICAgcHJvcHM6IEF3c1N0YWNrUHJvcHMgfCB1bmRlZmluZWRcbiAgKTogU3RhY2tQcm9wcyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gSWYgbm8gZXhwbGljaXQgcHJvcHMgYXJlIHByb3ZpZGVkLCBmYWxsIGJhY2sgdG8gdGhlIGFjY291bnQvcmVnaW9uIHRoYXRcbiAgICAvLyBDREsgcmVzb2x2ZWQgZm9yIHRoaXMgcnVuLiBUaGlzIGFsbG93cyBjb250ZXh0IGxvb2stdXBzIChlLmcuXG4gICAgLy8gVnBjLmZyb21Mb29rdXApIHRvIHdvcmsgd2l0aG91dCBldmVyeSBzdGFjayBoYXZpbmcgdG8gYmUgY3JlYXRlZCB3aXRoXG4gICAgLy8gZXhwbGljaXQgZW52IHNldHRpbmdzLlxuXG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgY29uc3QgYWNjb3VudCA9IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQ7XG4gICAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9SRUdJT047XG5cbiAgICAgIGlmIChhY2NvdW50ICYmIHJlZ2lvbikge1xuICAgICAgICByZXR1cm4geyBlbnY6IHsgYWNjb3VudCwgcmVnaW9uIH0gfSBhcyBTdGFja1Byb3BzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2tQcm9wczogU3RhY2tQcm9wcyA9IHtcbiAgICAgIGVudjpcbiAgICAgICAgcHJvcHMuYWNjb3VudElkICYmIHByb3BzLnJlZ2lvblxuICAgICAgICAgID8geyBhY2NvdW50OiBwcm9wcy5hY2NvdW50SWQsIHJlZ2lvbjogcHJvcHMucmVnaW9uIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgIH07XG5cbiAgICByZXR1cm4gc3RhY2tQcm9wcztcbiAgfVxuXG4gIHByaXZhdGUgaXNDb25uZWN0YWJsZShhcmc6IGFueSk6IGFyZyBpcyBJQ29ubmVjdGFibGUge1xuICAgIHJldHVybiBhcmcuY29ubmVjdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgYWRkQ29uc3RydWN0KGNvbnN0cnVjdDogQ29uc3RydWN0KTogQXdzU3RhY2sge1xuICAgIHRoaXMucmVzb3VyY2VzW2NvbnN0cnVjdC5ub2RlLmlkXSA9IGNvbnN0cnVjdDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhZGROZXR3b3JrKHJlc291cmNlOiBDb25zdHJ1Y3QpOiBBd3NTdGFjaztcbiAgcHVibGljIGFkZE5ldHdvcmsoXG4gICAgcmVzb3VyY2U6IChzdGFja0J1aWxkZXI6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0XG4gICk6IEF3c1N0YWNrO1xuICBwdWJsaWMgYWRkTmV0d29yayhcbiAgICByZXNvdXJjZTogQ29uc3RydWN0IHwgKChzdGFja0J1aWxkZXI6IFN0YWNrQnVpbGRlcikgPT4gQ29uc3RydWN0KVxuICApOiBBd3NTdGFjayB7XG4gICAgY29uc3QgcmVzb3VyY2VBY3R1YWwgPVxuICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3QgPyByZXNvdXJjZSA6IHJlc291cmNlKHRoaXMpO1xuICAgIHRoaXMucmVzb3VyY2VzW3Jlc291cmNlQWN0dWFsLm5vZGUuaWRdID0gcmVzb3VyY2VBY3R1YWw7XG4gICAgdGhpcy5uZXR3b3JrID0gcmVzb3VyY2VBY3R1YWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYWRkQ29udGFpbmVyUmVnaXN0cnkocmVzb3VyY2U6IFJlcG9zaXRvcnkpOiBBd3NTdGFjaztcbiAgcHVibGljIGFkZENvbnRhaW5lclJlZ2lzdHJ5KFxuICAgIHJlc291cmNlOiAoc3RhY2tCdWlsZGVyOiBTdGFja0J1aWxkZXIpID0+IFJlcG9zaXRvcnlcbiAgKTogQXdzU3RhY2s7XG4gIHB1YmxpYyBhZGRDb250YWluZXJSZWdpc3RyeShcbiAgICByZXNvdXJjZTogUmVwb3NpdG9yeSB8ICgoc3RhY2tCdWlsZGVyOiBTdGFja0J1aWxkZXIpID0+IFJlcG9zaXRvcnkpXG4gICk6IEF3c1N0YWNrIHtcbiAgICBjb25zdCByZXNvdXJjZUFjdHVhbCA9XG4gICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIFJlcG9zaXRvcnkgPyByZXNvdXJjZSA6IHJlc291cmNlKHRoaXMpO1xuICAgIHRoaXMucmVzb3VyY2VzW3Jlc291cmNlQWN0dWFsLm5vZGUuaWRdID0gcmVzb3VyY2VBY3R1YWw7XG4gICAgdGhpcy5jb250YWluZXJSZWdpc3RyeSA9IHJlc291cmNlQWN0dWFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldFN0YWNrKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrO1xuICB9XG5cbiAgcHVibGljIGdldFN0YWNrTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFjay5zdGFja05hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmV0d29yaygpIHtcbiAgICByZXR1cm4gdGhpcy5uZXR3b3JrO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRhaW5lclJlZ2lzdHJ5KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclJlZ2lzdHJ5O1xuICB9XG5cbiAgcHVibGljIGdldFJlc291cmNlKGlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlc1tpZGVudGlmaWVyXTtcbiAgfVxuXG4gIHB1YmxpYyBjb25uZWN0KFxuICAgIGZyb206IENvbnN0cnVjdCB8IHN0cmluZyxcbiAgICB0bzogQ29uc3RydWN0IHwgc3RyaW5nLFxuICAgIHBvcnQ/OiBudW1iZXJcbiAgKSB7XG4gICAgaWYgKCFmcm9tIHx8ICF0bykgcmV0dXJuIHRoaXM7XG5cbiAgICBjb25zdCBmcm9tUmVzb3VyY2UgPVxuICAgICAgZnJvbSBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IGZyb20gOiB0aGlzLmdldFJlc291cmNlKGZyb20pO1xuICAgIGNvbnN0IHRvUmVzb3VyY2UgPSB0byBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IHRvIDogdGhpcy5nZXRSZXNvdXJjZSh0byk7XG5cbiAgICBpZiAoIWZyb21SZXNvdXJjZSB8fCAhdG9SZXNvdXJjZSkgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0YWJsZShmcm9tUmVzb3VyY2UpIHx8ICF0aGlzLmlzQ29ubmVjdGFibGUodG9SZXNvdXJjZSkpXG4gICAgICByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IHBvcnRBY3R1YWwgPSBwb3J0ID8gUG9ydC50Y3AocG9ydCkgOiBQb3J0LmFsbFRjcCgpO1xuICAgIGZyb21SZXNvdXJjZS5jb25uZWN0aW9ucy5hbGxvd1RvKHRvUmVzb3VyY2UsIHBvcnRBY3R1YWwpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEF3c1N0YWNrO1xuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzU3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9iYXNlL2F3c1N0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFxRDtBQUNyRCxpREFBeUU7QUFDekUsMkNBQXVDO0FBRXZDLHNDQUErQjtBQUMvQixpREFBaUQ7QUFtQmpELE1BQWEsUUFBUTtJQVNuQixZQUNFLEVBQVUsRUFDVixZQUFvQyxFQUNwQyxLQUFxQjtRQVhQLGNBQVMsR0FFckIsRUFBRSxDQUFDO1FBV0wseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFekMsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxZQUFvQztRQUMxRCxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDaEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsRUFBVSxFQUFFLEtBQXFCO1FBQ25ELE9BQU8sSUFBSSxtQkFBSyxDQUFDLGFBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JF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d0IsRUFDeEIsRUFBc0IsRUFDdEIsSUFBYTtRQUViLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFOUIsTUFBTSxZQUFZLEdBQ2hCLElBQUksWUFBWSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsTUFBTSxVQUFVLEdBQUcsRUFBRSxZQUFZLHNCQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTlDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7WUFDdEUsT0FBTyxJQUFJLENBQUM7UUFFZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6RCxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUF2SkQsNEJBdUpDO0FBQ0Qsa0JBQWUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIHR5cGUgU3RhY2tQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgdHlwZSBJQ29ubmVjdGFibGUsIHR5cGUgSVZwYywgUG9ydCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi8uLi9hcHBcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNrQnVpbGRlciB7XG4gIGFkZENvbnN0cnVjdChyZXNvdXJjZTogQ29uc3RydWN0KTogU3RhY2tCdWlsZGVyO1xuXG4gIGFkZE5ldHdvcmsocmVzb3VyY2U6IENvbnN0cnVjdCk6IFN0YWNrQnVpbGRlcjtcbiAgYWRkTmV0d29yayhmbjogKHN0YWNrQnVpbGRlcjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3QpOiBTdGFja0J1aWxkZXI7XG4gIGFkZE5ldHdvcmsocmVzb3VyY2U6IENvbnN0cnVjdCB8IHN0cmluZyk6IFN0YWNrQnVpbGRlcjtcblxuICBnZXRTdGFjaygpOiBTdGFjaztcbiAgZ2V0TmV0d29yaygpOiBJVnBjO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF3c1N0YWNrUHJvcHMge1xuICByZWFkb25seSBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgYWNjb3VudE5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NTdGFjayBpbXBsZW1lbnRzIFN0YWNrQnVpbGRlciB7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBDb25zdHJ1Y3Q7XG4gIH0gPSB7fTtcblxuICBwcml2YXRlIHN0YWNrOiBTdGFjaztcbiAgcHJpdmF0ZSBuZXR3b3JrITogSVZwYztcbiAgcHJpdmF0ZSBjb250YWluZXJSZWdpc3RyeSE6IFJlcG9zaXRvcnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkZXBlbmRlbmNpZXM/OiBBd3NTdGFjayB8IEF3c1N0YWNrW10sXG4gICAgcHJvcHM/OiBBd3NTdGFja1Byb3BzXG4gICkge1xuICAgIC8vIENyZWF0ZSBpbm5lciBDREsgU3RhY2tcbiAgICB0aGlzLnN0YWNrID0gdGhpcy5nZXRDZGtTdGFjayhpZCwgcHJvcHMpO1xuXG4gICAgLy8gUmVnaXN0ZXIgYWxsIHN0YWNrIGRlcGVuZGVuY2llc1xuICAgIHRoaXMuYWRkRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZERlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXM/OiBBd3NTdGFjayB8IEF3c1N0YWNrW10pIHtcbiAgICBpZiAoIWRlcGVuZGVuY2llcykgcmV0dXJuO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jaWVzKSkge1xuICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIGRlcGVuZGVuY2llcykge1xuICAgICAgICB0aGlzLnN0YWNrLmFkZERlcGVuZGVuY3koZGVwZW5kZW5jeS5nZXRTdGFjaygpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFjay5hZGREZXBlbmRlbmN5KGRlcGVuZGVuY2llcy5nZXRTdGFjaygpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENka1N0YWNrKGlkOiBzdHJpbmcsIHByb3BzPzogQXdzU3RhY2tQcm9wcykge1xuICAgIHJldHVybiBuZXcgU3RhY2soQXBwLmdldEluc3RhbmNlKCksIGlkLCB0aGlzLmdldFN0YWNrUHJvcHMocHJvcHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhY2tQcm9wcyhcbiAgICBwcm9wczogQXdzU3RhY2tQcm9wcyB8IHVuZGVmaW5lZFxuICApOiBTdGFja1Byb3BzIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBJZiBubyBleHBsaWNpdCBwcm9wcyBhcmUgcHJvdmlkZWQsIGZhbGwgYmFjayB0byB0aGUgYWNjb3VudC9yZWdpb24gdGhhdFxuICAgIC8vIENESyByZXNvbHZlZCBmb3IgdGhpcyBydW4uIFRoaXMgYWxsb3dzIGNvbnRleHQgbG9vay11cHMgKGUuZy5cbiAgICAvLyBWcGMuZnJvbUxvb2t1cCkgdG8gd29yayB3aXRob3V0IGV2ZXJ5IHN0YWNrIGhhdmluZyB0byBiZSBjcmVhdGVkIHdpdGhcbiAgICAvLyBleHBsaWNpdCBlbnYgc2V0dGluZ3MuXG5cbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICBjb25zdCBhY2NvdW50ID0gcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVDtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTjtcblxuICAgICAgaWYgKGFjY291bnQgJiYgcmVnaW9uKSB7XG4gICAgICAgIHJldHVybiB7IGVudjogeyBhY2NvdW50LCByZWdpb24gfSB9IGFzIFN0YWNrUHJvcHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFja1Byb3BzOiBTdGFja1Byb3BzID0ge1xuICAgICAgZW52OlxuICAgICAgICBwcm9wcy5hY2NvdW50SWQgJiYgcHJvcHMucmVnaW9uXG4gICAgICAgICAgPyB7IGFjY291bnQ6IHByb3BzLmFjY291bnRJZCwgcmVnaW9uOiBwcm9wcy5yZWdpb24gfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIHJldHVybiBzdGFja1Byb3BzO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Nvbm5lY3RhYmxlKGFyZzogdW5rbm93bik6IGFyZyBpcyBJQ29ubmVjdGFibGUge1xuICAgIHJldHVybiB0eXBlb2YgYXJnID09PSBcIm9iamVjdFwiICYmIGFyZyAhPT0gbnVsbCAmJiBcImNvbm5lY3Rpb25zXCIgaW4gYXJnO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZwYyhyZXNvdXJjZTogQ29uc3RydWN0KTogcmVzb3VyY2UgaXMgQ29uc3RydWN0ICYgSVZwYyB7XG4gICAgcmV0dXJuIFwidnBjSWRcIiBpbiByZXNvdXJjZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDb25zdHJ1Y3QoY29uc3RydWN0OiBDb25zdHJ1Y3QpOiBBd3NTdGFjayB7XG4gICAgdGhpcy5yZXNvdXJjZXNbY29uc3RydWN0Lm5vZGUuaWRdID0gY29uc3RydWN0O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGFkZE5ldHdvcmsocmVzb3VyY2U6IENvbnN0cnVjdCk6IEF3c1N0YWNrO1xuICBwdWJsaWMgYWRkTmV0d29yayhcbiAgICByZXNvdXJjZTogKHN0YWNrQnVpbGRlcjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3RcbiAgKTogQXdzU3RhY2s7XG4gIHB1YmxpYyBhZGROZXR3b3JrKFxuICAgIHJlc291cmNlOiBDb25zdHJ1Y3QgfCAoKHN0YWNrQnVpbGRlcjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3QpXG4gICk6IEF3c1N0YWNrIHtcbiAgICBjb25zdCByZXNvdXJjZUFjdHVhbCA9XG4gICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IHJlc291cmNlIDogcmVzb3VyY2UodGhpcyk7XG4gICAgdGhpcy5yZXNvdXJjZXNbcmVzb3VyY2VBY3R1YWwubm9kZS5pZF0gPSByZXNvdXJjZUFjdHVhbDtcbiAgICBpZiAoIXRoaXMuaXNWcGMocmVzb3VyY2VBY3R1YWwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhZGROZXR3b3JrIGV4cGVjdHMgYSBWUEMgY29uc3RydWN0IGltcGxlbWVudGluZyBJVnBjXCIpO1xuICAgIH1cbiAgICB0aGlzLm5ldHdvcmsgPSByZXNvdXJjZUFjdHVhbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhZGRDb250YWluZXJSZWdpc3RyeShyZXNvdXJjZTogUmVwb3NpdG9yeSk6IEF3c1N0YWNrO1xuICBwdWJsaWMgYWRkQ29udGFpbmVyUmVnaXN0cnkoXG4gICAgcmVzb3VyY2U6IChzdGFja0J1aWxkZXI6IFN0YWNrQnVpbGRlcikgPT4gUmVwb3NpdG9yeVxuICApOiBBd3NTdGFjaztcbiAgcHVibGljIGFkZENvbnRhaW5lclJlZ2lzdHJ5KFxuICAgIHJlc291cmNlOiBSZXBvc2l0b3J5IHwgKChzdGFja0J1aWxkZXI6IFN0YWNrQnVpbGRlcikgPT4gUmVwb3NpdG9yeSlcbiAgKTogQXdzU3RhY2sge1xuICAgIGNvbnN0IHJlc291cmNlQWN0dWFsID1cbiAgICAgIHJlc291cmNlIGluc3RhbmNlb2YgUmVwb3NpdG9yeSA/IHJlc291cmNlIDogcmVzb3VyY2UodGhpcyk7XG4gICAgdGhpcy5yZXNvdXJjZXNbcmVzb3VyY2VBY3R1YWwubm9kZS5pZF0gPSByZXNvdXJjZUFjdHVhbDtcbiAgICB0aGlzLmNvbnRhaW5lclJlZ2lzdHJ5ID0gcmVzb3VyY2VBY3R1YWw7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhY2soKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2s7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhY2tOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnN0YWNrLnN0YWNrTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXROZXR3b3JrKCkge1xuICAgIHJldHVybiB0aGlzLm5ldHdvcms7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udGFpbmVyUmVnaXN0cnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyUmVnaXN0cnk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzb3VyY2UoaWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzW2lkZW50aWZpZXJdO1xuICB9XG5cbiAgcHVibGljIGNvbm5lY3QoXG4gICAgZnJvbTogQ29uc3RydWN0IHwgc3RyaW5nLFxuICAgIHRvOiBDb25zdHJ1Y3QgfCBzdHJpbmcsXG4gICAgcG9ydD86IG51bWJlclxuICApIHtcbiAgICBpZiAoIWZyb20gfHwgIXRvKSByZXR1cm4gdGhpcztcblxuICAgIGNvbnN0IGZyb21SZXNvdXJjZSA9XG4gICAgICBmcm9tIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gZnJvbSA6IHRoaXMuZ2V0UmVzb3VyY2UoZnJvbSk7XG4gICAgY29uc3QgdG9SZXNvdXJjZSA9IHRvIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gdG8gOiB0aGlzLmdldFJlc291cmNlKHRvKTtcblxuICAgIGlmICghZnJvbVJlc291cmNlIHx8ICF0b1Jlc291cmNlKSByZXR1cm4gdGhpcztcblxuICAgIGlmICghdGhpcy5pc0Nvbm5lY3RhYmxlKGZyb21SZXNvdXJjZSkgfHwgIXRoaXMuaXNDb25uZWN0YWJsZSh0b1Jlc291cmNlKSlcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgY29uc3QgcG9ydEFjdHVhbCA9IHBvcnQgPyBQb3J0LnRjcChwb3J0KSA6IFBvcnQuYWxsVGNwKCk7XG4gICAgZnJvbVJlc291cmNlLmNvbm5lY3Rpb25zLmFsbG93VG8odG9SZXNvdXJjZSwgcG9ydEFjdHVhbCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgQXdzU3RhY2s7XG4iXX0=
@@ -31,6 +31,11 @@ export interface CdnBehaviour {
31
31
  cachePolicy?: CachePolicyPreset | ICachePolicy;
32
32
  allowedMethods?: "GET_HEAD" | "GET_HEAD_OPTIONS" | "ALL";
33
33
  }
34
+ export interface AccessGateConfig {
35
+ type: "basic-auth";
36
+ username: string;
37
+ password: string;
38
+ }
34
39
  export interface CloudFrontDistributionProps {
35
40
  defaultOrigin: CdnOriginConfig;
36
41
  defaultCachePolicy?: CachePolicyPreset | ICachePolicy;
@@ -46,11 +51,20 @@ export interface CloudFrontDistributionProps {
46
51
  * Required when the origin is a Lambda Function URL or ALB behind CloudFront,
47
52
  * because AllViewerExceptHostHeader replaces Host with the origin domain. */
48
53
  forwardHostHeader?: boolean;
54
+ /** Adds access gating to the distribution via a CloudFront Function.
55
+ * Set to false to explicitly disable (or omit). */
56
+ accessGate?: false | AccessGateConfig;
49
57
  }
50
58
  export declare class CloudFrontDistribution extends Construct {
51
59
  readonly id: string;
52
60
  private distribution;
53
61
  constructor(scope: Construct, id: string, props: CloudFrontDistributionProps);
62
+ /**
63
+ * Build a composable CloudFront Function for VIEWER_REQUEST.
64
+ * Merges accessGate and forwardHostHeader into a single function
65
+ * (CloudFront allows only one function per event type).
66
+ */
67
+ private buildViewerRequestFunction;
54
68
  private createOrigin;
55
69
  private resolveCachePolicy;
56
70
  private resolveAllowedMethods;
@@ -3,29 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CloudFrontDistribution = void 0;
4
4
  const constructs_1 = require("constructs");
5
5
  const aws_cdk_lib_1 = require("aws-cdk-lib");
6
+ const capitaliseString_1 = require("../../../utils/capitaliseString");
6
7
  const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
7
8
  const aws_cloudfront_origins_1 = require("aws-cdk-lib/aws-cloudfront-origins");
8
9
  class CloudFrontDistribution extends constructs_1.Construct {
9
10
  constructor(scope, id, props) {
10
11
  super(scope, id);
11
12
  this.id = id;
13
+ // Sanitise id for CloudFormation output keys (must be alphanumeric)
14
+ const outputName = (0, capitaliseString_1.toPascalCase)(id);
12
15
  const defaultOrigin = this.createOrigin(props.defaultOrigin);
13
16
  const defaultCachePolicy = this.resolveCachePolicy(props.defaultCachePolicy);
14
- // Create CloudFront Function to preserve viewer Host as X-Forwarded-Host
15
- const hostHeaderFunction = props.forwardHostHeader
16
- ? new aws_cloudfront_1.Function(this, `${id}ForwardHost`, {
17
- code: aws_cloudfront_1.FunctionCode.fromInline("function handler(event) {" +
18
- " var request = event.request;" +
19
- " request.headers['x-forwarded-host'] = { value: request.headers.host.value };" +
20
- " return request;" +
21
- " }"),
22
- runtime: aws_cloudfront_1.FunctionRuntime.JS_2_0
23
- })
24
- : undefined;
25
- const functionAssociations = hostHeaderFunction
17
+ // Build composable viewer request function (accessGate + forwardHostHeader)
18
+ const viewerRequestFunction = this.buildViewerRequestFunction(id, props.forwardHostHeader, props.accessGate);
19
+ const functionAssociations = viewerRequestFunction
26
20
  ? [
27
21
  {
28
- function: hostHeaderFunction,
22
+ function: viewerRequestFunction,
29
23
  eventType: aws_cloudfront_1.FunctionEventType.VIEWER_REQUEST
30
24
  }
31
25
  ]
@@ -65,16 +59,56 @@ class CloudFrontDistribution extends constructs_1.Construct {
65
59
  logBucket: props.logBucket,
66
60
  priceClass: this.resolvePriceClass(props.priceClass)
67
61
  });
68
- new aws_cdk_lib_1.CfnOutput(this, `${id}DistributionDomainName`, {
69
- key: `${id}DistributionDomainName`,
62
+ new aws_cdk_lib_1.CfnOutput(this, `${outputName}DistributionDomainName`, {
63
+ key: `${outputName}DistributionDomainName`,
70
64
  value: this.distribution.distributionDomainName,
71
65
  description: `CloudFront distribution domain name for ${id}`
72
66
  });
73
- new aws_cdk_lib_1.CfnOutput(this, `${id}DistributionId`, {
74
- key: `${id}DistributionId`,
67
+ new aws_cdk_lib_1.CfnOutput(this, `${outputName}DistributionId`, {
68
+ key: `${outputName}DistributionId`,
75
69
  value: this.distribution.distributionId,
76
70
  description: `CloudFront distribution ID for ${id}`
77
71
  });
72
+ // Output credentials hint when access gate is enabled
73
+ if (props.accessGate) {
74
+ new aws_cdk_lib_1.CfnOutput(this, `${outputName}AccessGateUsername`, {
75
+ key: `${outputName}AccessGateUsername`,
76
+ value: props.accessGate.username,
77
+ description: `Access gate username for ${id}`
78
+ });
79
+ }
80
+ }
81
+ /**
82
+ * Build a composable CloudFront Function for VIEWER_REQUEST.
83
+ * Merges accessGate and forwardHostHeader into a single function
84
+ * (CloudFront allows only one function per event type).
85
+ */
86
+ buildViewerRequestFunction(id, forwardHostHeader, accessGate) {
87
+ if (!accessGate && !forwardHostHeader) {
88
+ return undefined;
89
+ }
90
+ let functionBody = "function handler(event) { var request = event.request;";
91
+ if (accessGate) {
92
+ const credentials = Buffer.from(`${accessGate.username}:${accessGate.password}`).toString("base64");
93
+ functionBody +=
94
+ ` var authHeader = request.headers.authorization;` +
95
+ ` if (!authHeader || authHeader.value !== "Basic ${credentials}") {` +
96
+ ` return {` +
97
+ ` statusCode: 401,` +
98
+ ` statusDescription: "Unauthorized",` +
99
+ ` headers: { "www-authenticate": { value: 'Basic realm="Restricted"' } },` +
100
+ ` body: { encoding: "text", data: "Unauthorized" }` +
101
+ ` }; }`;
102
+ }
103
+ if (forwardHostHeader) {
104
+ functionBody +=
105
+ " request.headers['x-forwarded-host'] = { value: request.headers.host.value };";
106
+ }
107
+ functionBody += " return request; }";
108
+ return new aws_cloudfront_1.Function(this, `${id}ViewerRequestFn`, {
109
+ code: aws_cloudfront_1.FunctionCode.fromInline(functionBody),
110
+ runtime: aws_cloudfront_1.FunctionRuntime.JS_2_0
111
+ });
78
112
  }
79
113
  createOrigin(config) {
80
114
  switch (config.type) {
@@ -173,4 +207,4 @@ class CloudFrontDistribution extends constructs_1.Construct {
173
207
  }
174
208
  }
175
209
  exports.CloudFrontDistribution = CloudFrontDistribution;
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRGcm9udC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2Nkbi9jbG91ZEZyb250LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyw2Q0FBd0M7QUFDeEMsK0RBZW9DO0FBQ3BDLCtFQUk0QztBQThENUMsTUFBYSxzQkFBdUIsU0FBUSxzQkFBUztJQUluRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFrQztRQUVsQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBRWIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ2hELEtBQUssQ0FBQyxrQkFBa0IsQ0FDekIsQ0FBQztRQUVGLHlFQUF5RTtRQUN6RSxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxpQkFBaUI7WUFDaEQsQ0FBQyxDQUFDLElBQUkseUJBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUU7Z0JBQy9DLElBQUksRUFBRSw2QkFBWSxDQUFDLFVBQVUsQ0FDM0IsMkJBQTJCO29CQUN6QiwrQkFBK0I7b0JBQy9CLCtFQUErRTtvQkFDL0Usa0JBQWtCO29CQUNsQixJQUFJLENBQ1A7Z0JBQ0QsT0FBTyxFQUFFLGdDQUFlLENBQUMsTUFBTTthQUNoQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLE1BQU0sb0JBQW9CLEdBQUcsa0JBQWtCO1lBQzdDLENBQUMsQ0FBQztnQkFDRTtvQkFDRSxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixTQUFTLEVBQUUsa0NBQWlCLENBQUMsY0FBYztpQkFDNUM7YUFDRjtZQUNILENBQUMsQ0FB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QUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFsTkQsd0RBa05DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENmbk91dHB1dCB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgRGlzdHJpYnV0aW9uLFxuICBQcmljZUNsYXNzLFxuICB0eXBlIElPcmlnaW4sXG4gIFZpZXdlclByb3RvY29sUG9saWN5LFxuICBDYWNoZVBvbGljeSxcbiAgdHlwZSBJQ2FjaGVQb2xpY3ksXG4gIE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gIEFsbG93ZWRNZXRob2RzLFxuICBPcmlnaW5Qcm90b2NvbFBvbGljeSxcbiAgdHlwZSBCZWhhdmlvck9wdGlvbnMsXG4gIEZ1bmN0aW9uIGFzIENsb3VkRnJvbnRGdW5jdGlvbixcbiAgRnVuY3Rpb25Db2RlLFxuICBGdW5jdGlvblJ1bnRpbWUsXG4gIEZ1bmN0aW9uRXZlbnRUeXBlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHtcbiAgUzNCdWNrZXRPcmlnaW4sXG4gIExvYWRCYWxhbmNlclYyT3JpZ2luLFxuICBIdHRwT3JpZ2luXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zXCI7XG5pbXBvcnQgeyB0eXBlIElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyB0eXBlIElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgdHlwZSBJQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuXG5leHBvcnQgdHlwZSBDYWNoZVBvbGljeVByZXNldCA9XG4gIHwgXCJDQUNISU5HX09QVElNSVpFRFwiXG4gIHwgXCJDQUNISU5HX0RJU0FCTEVEXCJcbiAgfCBcIkNBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUU1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFMzT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJzM1wiO1xuICBidWNrZXQ6IElCdWNrZXQ7XG4gIG9yaWdpblBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxiT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJhbGJcIjtcbiAgbG9hZEJhbGFuY2VyOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXI7XG4gIHByb3RvY29sUG9saWN5PzogXCJIVFRQX09OTFlcIiB8IFwiSFRUUFNfT05MWVwiIHwgXCJNQVRDSF9WSUVXRVJcIjtcbiAgaHR0cFBvcnQ/OiBudW1iZXI7XG4gIGh0dHBzUG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJodHRwXCI7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbiAgb3JpZ2luUGF0aD86IHN0cmluZztcbiAgcHJvdG9jb2xQb2xpY3k/OiBcIkhUVFBfT05MWVwiIHwgXCJIVFRQU19PTkxZXCIgfCBcIk1BVENIX1ZJRVdFUlwiO1xuICBodHRwUG9ydD86IG51bWJlcjtcbiAgaHR0cHNQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBDZG5PcmlnaW5Db25maWcgPVxuICB8IFMzT3JpZ2luQ29uZmlnXG4gIHwgQWxiT3JpZ2luQ29uZmlnXG4gIHwgSHR0cE9yaWdpbkNvbmZpZztcblxuZXhwb3J0IGludGVyZmFjZSBDZG5CZWhhdmlvdXIge1xuICBwYXRoUGF0dGVybjogc3RyaW5nO1xuICBvcmlnaW46IENkbk9yaWdpbkNvbmZpZztcbiAgY2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgYWxsb3dlZE1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGcm9udERpc3RyaWJ1dGlvblByb3BzIHtcbiAgZGVmYXVsdE9yaWdpbjogQ2RuT3JpZ2luQ29uZmlnO1xuICBkZWZhdWx0Q2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgZGVmYXVsdEFsbG93ZWRNZXRob2RzPzogXCJHRVRfSEVBRFwiIHwgXCJHRVRfSEVBRF9PUFRJT05TXCIgfCBcIkFMTFwiO1xuICBiZWhhdmlvdXJzPzogQ2RuQmVoYXZpb3VyW107XG4gIGRvbWFpbk5hbWVzPzogc3RyaW5nW107XG4gIGNlcnRpZmljYXRlPzogSUNlcnRpZmljYXRlO1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBlbmFibGVMb2dnaW5nPzogYm9vbGVhbjtcbiAgbG9nQnVja2V0PzogSUJ1Y2tldDtcbiAgcHJpY2VDbGFzcz86IFwiUHJpY2VDbGFzc18xMDBcIiB8IFwiUHJpY2VDbGFzc18yMDBcIiB8IFwiUHJpY2VDbGFzc19BbGxcIjtcbiAgLyoqIEFkZHMgYSBDbG91ZEZyb250IEZ1bmN0aW9uIHRvIGNvcHkgdGhlIHZpZXdlciBIb3N0IGhlYWRlciBpbnRvIFgtRm9yd2FyZGVkLUhvc3QuXG4gICAqIFJlcXVpcmVkIHdoZW4gdGhlIG9yaWdpbiBpcyBhIExhbWJkYSBGdW5jdGlvbiBVUkwgb3IgQUxCIGJlaGluZCBDbG91ZEZyb250LFxuICAgKiBiZWNhdXNlIEFsbFZpZXdlckV4Y2VwdEhvc3RIZWFkZXIgcmVwbGFjZXMgSG9zdCB3aXRoIHRoZSBvcmlnaW4gZG9tYWluLiAqL1xuICBmb3J3YXJkSG9zdEhlYWRlcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBDbG91ZEZyb250RGlzdHJpYnV0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgZGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDbG91ZEZyb250RGlzdHJpYnV0aW9uUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICBjb25zdCBkZWZhdWx0T3JpZ2luID0gdGhpcy5jcmVhdGVPcmlnaW4ocHJvcHMuZGVmYXVsdE9yaWdpbik7XG4gICAgY29uc3QgZGVmYXVsdENhY2hlUG9saWN5ID0gdGhpcy5yZXNvbHZlQ2FjaGVQb2xpY3koXG4gICAgICBwcm9wcy5kZWZhdWx0Q2FjaGVQb2xpY3lcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIENsb3VkRnJvbnQgRnVuY3Rpb24gdG8gcHJlc2VydmUgdmlld2VyIEhvc3QgYXMgWC1Gb3J3YXJkZWQtSG9zdFxuICAgIGNvbnN0IGhvc3RIZWFkZXJGdW5jdGlvbiA9IHByb3BzLmZvcndhcmRIb3N0SGVhZGVyXG4gICAgICA/IG5ldyBDbG91ZEZyb250RnVuY3Rpb24odGhpcywgYCR7aWR9Rm9yd2FyZEhvc3RgLCB7XG4gICAgICAgICAgY29kZTogRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoXG4gICAgICAgICAgICBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcIiArXG4gICAgICAgICAgICAgIFwiIHZhciByZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDtcIiArXG4gICAgICAgICAgICAgIFwiIHJlcXVlc3QuaGVhZGVyc1sneC1mb3J3YXJkZWQtaG9zdCddID0geyB2YWx1ZTogcmVxdWVzdC5oZWFkZXJzLmhvc3QudmFsdWUgfTtcIiArXG4gICAgICAgICAgICAgIFwiIHJldHVybiByZXF1ZXN0O1wiICtcbiAgICAgICAgICAgICAgXCIgfVwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICBydW50aW1lOiBGdW5jdGlvblJ1bnRpbWUuSlNfMl8wXG4gICAgICAgIH0pXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGZ1bmN0aW9uQXNzb2NpYXRpb25zID0gaG9zdEhlYWRlckZ1bmN0aW9uXG4gICAgICA/IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmdW5jdGlvbjogaG9zdEhlYWRlckZ1bmN0aW9uLFxuICAgICAgICAgICAgZXZlbnRUeXBlOiBGdW5jdGlvbkV2ZW50VHlwZS5WSUVXRVJfUkVRVUVTVFxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBhZGRpdGlvbmFsQmVoYXZpb3JzOiBSZWNvcmQ8c3RyaW5nLCBCZWhhdmlvck9wdGlvbnM+ID0ge307XG4gICAgaWYgKHByb3BzLmJlaGF2aW91cnMpIHtcbiAgICAgIGZvciAoY29uc3QgYmVoYXZpb3VyIG9mIHByb3BzLmJlaGF2aW91cnMpIHtcbiAgICAgICAgYWRkaXRpb25hbEJlaGF2aW9yc1tiZWhhdmlvdXIucGF0aFBhdHRlcm5dID0ge1xuICAgICAgICAgIG9yaWdpbjogdGhpcy5jcmVhdGVPcmlnaW4oYmVoYXZpb3VyLm9yaWdpbiksXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IHRoaXMucmVzb2x2ZUNhY2hlUG9saWN5KGJlaGF2aW91ci5jYWNoZVBvbGljeSksXG4gICAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiB0aGlzLnJlc29sdmVBbGxvd2VkTWV0aG9kcyhiZWhhdmlvdXIuYWxsb3dlZE1ldGhvZHMpLFxuICAgICAgICAgIC8vIEZvcndhcmQgdmlld2VyIGhlYWRlcnMgKGNvb2tpZXMsIGF1dGgpIHRvIG5vbi1TMyBvcmlnaW5zXG4gICAgICAgICAgLi4uKGJlaGF2aW91ci5vcmlnaW4udHlwZSAhPT0gXCJzM1wiICYmIHtcbiAgICAgICAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3k6XG4gICAgICAgICAgICAgIE9yaWdpblJlcXVlc3RQb2xpY3kuQUxMX1ZJRVdFUl9FWENFUFRfSE9TVF9IRUFERVJcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4oZnVuY3Rpb25Bc3NvY2lhdGlvbnMgIT09IHVuZGVmaW5lZCAmJiB7IGZ1bmN0aW9uQXNzb2NpYXRpb25zIH0pXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kaXN0cmlidXRpb24gPSBuZXcgRGlzdHJpYnV0aW9uKHRoaXMsIGAke2lkfURpc3RyaWJ1dGlvbmAsIHtcbiAgICAgIGRlZmF1bHRCZWhhdmlvcjoge1xuICAgICAgICBvcmlnaW46IGRlZmF1bHRPcmlnaW4sXG4gICAgICAgIGNhY2hlUG9saWN5OiBkZWZhdWx0Q2FjaGVQb2xpY3ksXG4gICAgICAgIHZpZXdlclByb3RvY29sUG9saWN5OiBWaWV3ZXJQcm90b2NvbFBvbGljeS5SRURJUkVDVF9UT19IVFRQUyxcbiAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTogT3JpZ2luUmVxdWVzdFBvbGljeS5BTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUixcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IHRoaXMucmVzb2x2ZUFsbG93ZWRNZXRob2RzKHByb3BzLmRlZmF1bHRBbGxvd2VkTWV0aG9kcyksXG4gICAgICAgIC4uLihmdW5jdGlvbkFzc29jaWF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHsgZnVuY3Rpb25Bc3NvY2lhdGlvbnMgfSlcbiAgICAgIH0sXG4gICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzOlxuICAgICAgICBPYmplY3Qua2V5cyhhZGRpdGlvbmFsQmVoYXZpb3JzKS5sZW5ndGggPiAwXG4gICAgICAgICAgPyBhZGRpdGlvbmFsQmVoYXZpb3JzXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBkb21haW5OYW1lczogcHJvcHMuZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuY2VydGlmaWNhdGUsXG4gICAgICBjb21tZW50OiBwcm9wcy5jb21tZW50LFxuICAgICAgZW5hYmxlTG9nZ2luZzogcHJvcHMuZW5hYmxlTG9nZ2luZyxcbiAgICAgIGxvZ0J1Y2tldDogcHJvcHMubG9nQnVja2V0LFxuICAgICAgcHJpY2VDbGFzczogdGhpcy5yZXNvbHZlUHJpY2VDbGFzcyhwcm9wcy5wcmljZUNsYXNzKVxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtpZH1EaXN0cmlidXRpb25Eb21haW5OYW1lYCwge1xuICAgICAga2V5OiBgJHtpZH1EaXN0cmlidXRpb25Eb21haW5OYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBkb21haW4gbmFtZSBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfURpc3RyaWJ1dGlvbklkYCwge1xuICAgICAga2V5OiBgJHtpZH1EaXN0cmlidXRpb25JZGAsXG4gICAgICB2YWx1ZTogdGhpcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQsXG4gICAgICBkZXNjcmlwdGlvbjogYENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIElEIGZvciAke2lkfWBcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JpZ2luKGNvbmZpZzogQ2RuT3JpZ2luQ29uZmlnKTogSU9yaWdpbiB7XG4gICAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgICAgY2FzZSBcInMzXCI6XG4gICAgICAgIC8vIFVzaW5nIE9BSSBpbnN0ZWFkIG9mIE9BQyB0byBhdm9pZCBjcm9zcy1zdGFjayBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzMxNDYyXG4gICAgICAgIC8vIE9BQyBjcmVhdGVzIGJ1Y2tldCDihpIgQ0ROIGRlcGVuZGVuY3kgKGJ1Y2tldCBwb2xpY3kgcmVmZXJlbmNlcyBkaXN0cmlidXRpb24pXG4gICAgICAgIC8vIE9BSSB3b3JrcyBhY3Jvc3Mgc3RhY2tzIHdpdGhvdXQgdHJpZ2dlcmluZyBjeWNsaWMgZGVwZW5kZW5jeSBlcnJvcnNcbiAgICAgICAgcmV0dXJuIFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NJZGVudGl0eShjb25maWcuYnVja2V0LCB7XG4gICAgICAgICAgb3JpZ2luUGF0aDogY29uZmlnLm9yaWdpblBhdGhcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgXCJhbGJcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBMb2FkQmFsYW5jZXJWMk9yaWdpbihjb25maWcubG9hZEJhbGFuY2VyLCB7XG4gICAgICAgICAgaHR0cFBvcnQ6IGNvbmZpZy5odHRwUG9ydCxcbiAgICAgICAgICBodHRwc1BvcnQ6IGNvbmZpZy5odHRwc1BvcnQsXG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IHRoaXMucmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sUG9saWN5XG4gICAgICAgICAgKVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSBcImh0dHBcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwT3JpZ2luKGNvbmZpZy5kb21haW5OYW1lLCB7XG4gICAgICAgICAgb3JpZ2luUGF0aDogY29uZmlnLm9yaWdpblBhdGgsXG4gICAgICAgICAgaHR0cFBvcnQ6IGNvbmZpZy5odHRwUG9ydCxcbiAgICAgICAgICBodHRwc1BvcnQ6IGNvbmZpZy5odHRwc1BvcnQsXG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IHRoaXMucmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sUG9saWN5XG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDYWNoZVBvbGljeShcbiAgICBwb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeVxuICApOiBJQ2FjaGVQb2xpY3kge1xuICAgIGlmICghcG9saWN5KSB7XG4gICAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19PUFRJTUlaRUQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwb2xpY3kgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHN3aXRjaCAocG9saWN5KSB7XG4gICAgICAgIGNhc2UgXCJDQUNISU5HX09QVElNSVpFRFwiOlxuICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRDtcbiAgICAgICAgY2FzZSBcIkNBQ0hJTkdfRElTQUJMRURcIjpcbiAgICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRDtcbiAgICAgICAgY2FzZSBcIkNBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUU1wiOlxuICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRF9GT1JfVU5DT01QUkVTU0VEX09CSkVDVFM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvbGljeTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFsbG93ZWRNZXRob2RzKFxuICAgIG1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCJcbiAgKTogQWxsb3dlZE1ldGhvZHMge1xuICAgIHN3aXRjaCAobWV0aG9kcykge1xuICAgICAgY2FzZSBcIkdFVF9IRUFEXCI6XG4gICAgICAgIHJldHVybiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRDtcbiAgICAgIGNhc2UgXCJHRVRfSEVBRF9PUFRJT05TXCI6XG4gICAgICAgIHJldHVybiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TO1xuICAgICAgY2FzZSBcIkFMTFwiOlxuICAgICAgICByZXR1cm4gQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgIHBvbGljeT86IFwiSFRUUF9PTkxZXCIgfCBcIkhUVFBTX09OTFlcIiB8IFwiTUFUQ0hfVklFV0VSXCJcbiAgKSB7XG4gICAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICAgIGNhc2UgXCJIVFRQX09OTFlcIjpcbiAgICAgICAgcmV0dXJuIE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBfT05MWTtcbiAgICAgIGNhc2UgXCJIVFRQU19PTkxZXCI6XG4gICAgICAgIHJldHVybiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZO1xuICAgICAgY2FzZSBcIk1BVENIX1ZJRVdFUlwiOlxuICAgICAgICByZXR1cm4gT3JpZ2luUHJvdG9jb2xQb2xpY3kuTUFUQ0hfVklFV0VSO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlUHJpY2VDbGFzcyhcbiAgICBwcmljZUNsYXNzPzogXCJQcmljZUNsYXNzXzEwMFwiIHwgXCJQcmljZUNsYXNzXzIwMFwiIHwgXCJQcmljZUNsYXNzX0FsbFwiXG4gICk6IFByaWNlQ2xhc3MgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAocHJpY2VDbGFzcykge1xuICAgICAgY2FzZSBcIlByaWNlQ2xhc3NfMTAwXCI6XG4gICAgICAgIHJldHVybiBQcmljZUNsYXNzLlBSSUNFX0NMQVNTXzEwMDtcbiAgICAgIGNhc2UgXCJQcmljZUNsYXNzXzIwMFwiOlxuICAgICAgICByZXR1cm4gUHJpY2VDbGFzcy5QUklDRV9DTEFTU18yMDA7XG4gICAgICBjYXNlIFwiUHJpY2VDbGFzc19BbGxcIjpcbiAgICAgICAgcmV0dXJuIFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfQUxMO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBkb21haW4gbmFtZS5cbiAgICovXG4gIHB1YmxpYyBnZXREaXN0cmlidXRpb25Eb21haW5OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbkRvbWFpbk5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBJRC5cbiAgICovXG4gIHB1YmxpYyBnZXREaXN0cmlidXRpb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgQ0RLIERpc3RyaWJ1dGlvbiBjb25zdHJ1Y3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdHJpYnV0aW9uKCk6IERpc3RyaWJ1dGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdHJpYnV0aW9uO1xuICB9XG59XG4iXX0=
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWRGcm9udC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2Nkbi9jbG91ZEZyb250LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2Qyw2Q0FBd0M7QUFDeEMsc0VBQStEO0FBQy9ELCtEQWVvQztBQUNwQywrRUFJNEM7QUF1RTVDLE1BQWEsc0JBQXVCLFNBQVEsc0JBQVM7SUFJbkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBa0M7UUFFbEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUViLG9FQUFvRTtRQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFBLCtCQUFZLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ2hELEtBQUssQ0FBQyxrQkFBa0IsQ0FDekIsQ0FBQztRQUVGLDRFQUE0RTtRQUM1RSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDM0QsRUFBRSxFQUNGLEtBQUssQ0FBQyxpQkFBaUIsRUFDdkIsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCO1lBQ2hELENBQUMsQ0FBQztnQkFDRTtvQkFDRSxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixTQUFTLEVBQUUsa0NBQWlCLENBQUMsY0FBYztpQkFDNUM7YUFDRjtZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLG1CQUFtQixHQUFvQyxFQUFFLENBQUM7UUFDaEUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsS0FBSyxN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SUFFRDs7T0FFRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQXBRRCx3REFvUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZ1wiO1xuaW1wb3J0IHtcbiAgRGlzdHJpYnV0aW9uLFxuICBQcmljZUNsYXNzLFxuICB0eXBlIElPcmlnaW4sXG4gIFZpZXdlclByb3RvY29sUG9saWN5LFxuICBDYWNoZVBvbGljeSxcbiAgdHlwZSBJQ2FjaGVQb2xpY3ksXG4gIE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gIEFsbG93ZWRNZXRob2RzLFxuICBPcmlnaW5Qcm90b2NvbFBvbGljeSxcbiAgdHlwZSBCZWhhdmlvck9wdGlvbnMsXG4gIEZ1bmN0aW9uIGFzIENsb3VkRnJvbnRGdW5jdGlvbixcbiAgRnVuY3Rpb25Db2RlLFxuICBGdW5jdGlvblJ1bnRpbWUsXG4gIEZ1bmN0aW9uRXZlbnRUeXBlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHtcbiAgUzNCdWNrZXRPcmlnaW4sXG4gIExvYWRCYWxhbmNlclYyT3JpZ2luLFxuICBIdHRwT3JpZ2luXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zXCI7XG5pbXBvcnQgeyB0eXBlIElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyB0eXBlIElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgdHlwZSBJQ2VydGlmaWNhdGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuXG5leHBvcnQgdHlwZSBDYWNoZVBvbGljeVByZXNldCA9XG4gIHwgXCJDQUNISU5HX09QVElNSVpFRFwiXG4gIHwgXCJDQUNISU5HX0RJU0FCTEVEXCJcbiAgfCBcIkNBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUU1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFMzT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJzM1wiO1xuICBidWNrZXQ6IElCdWNrZXQ7XG4gIG9yaWdpblBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxiT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJhbGJcIjtcbiAgbG9hZEJhbGFuY2VyOiBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXI7XG4gIHByb3RvY29sUG9saWN5PzogXCJIVFRQX09OTFlcIiB8IFwiSFRUUFNfT05MWVwiIHwgXCJNQVRDSF9WSUVXRVJcIjtcbiAgaHR0cFBvcnQ/OiBudW1iZXI7XG4gIGh0dHBzUG9ydD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdHRwT3JpZ2luQ29uZmlnIHtcbiAgdHlwZTogXCJodHRwXCI7XG4gIGRvbWFpbk5hbWU6IHN0cmluZztcbiAgb3JpZ2luUGF0aD86IHN0cmluZztcbiAgcHJvdG9jb2xQb2xpY3k/OiBcIkhUVFBfT05MWVwiIHwgXCJIVFRQU19PTkxZXCIgfCBcIk1BVENIX1ZJRVdFUlwiO1xuICBodHRwUG9ydD86IG51bWJlcjtcbiAgaHR0cHNQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBDZG5PcmlnaW5Db25maWcgPVxuICB8IFMzT3JpZ2luQ29uZmlnXG4gIHwgQWxiT3JpZ2luQ29uZmlnXG4gIHwgSHR0cE9yaWdpbkNvbmZpZztcblxuZXhwb3J0IGludGVyZmFjZSBDZG5CZWhhdmlvdXIge1xuICBwYXRoUGF0dGVybjogc3RyaW5nO1xuICBvcmlnaW46IENkbk9yaWdpbkNvbmZpZztcbiAgY2FjaGVQb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeTtcbiAgYWxsb3dlZE1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZXNzR2F0ZUNvbmZpZyB7XG4gIHR5cGU6IFwiYmFzaWMtYXV0aFwiO1xuICB1c2VybmFtZTogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnREaXN0cmlidXRpb25Qcm9wcyB7XG4gIGRlZmF1bHRPcmlnaW46IENkbk9yaWdpbkNvbmZpZztcbiAgZGVmYXVsdENhY2hlUG9saWN5PzogQ2FjaGVQb2xpY3lQcmVzZXQgfCBJQ2FjaGVQb2xpY3k7XG4gIGRlZmF1bHRBbGxvd2VkTWV0aG9kcz86IFwiR0VUX0hFQURcIiB8IFwiR0VUX0hFQURfT1BUSU9OU1wiIHwgXCJBTExcIjtcbiAgYmVoYXZpb3Vycz86IENkbkJlaGF2aW91cltdO1xuICBkb21haW5OYW1lcz86IHN0cmluZ1tdO1xuICBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZTtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW47XG4gIGxvZ0J1Y2tldD86IElCdWNrZXQ7XG4gIHByaWNlQ2xhc3M/OiBcIlByaWNlQ2xhc3NfMTAwXCIgfCBcIlByaWNlQ2xhc3NfMjAwXCIgfCBcIlByaWNlQ2xhc3NfQWxsXCI7XG4gIC8qKiBBZGRzIGEgQ2xvdWRGcm9udCBGdW5jdGlvbiB0byBjb3B5IHRoZSB2aWV3ZXIgSG9zdCBoZWFkZXIgaW50byBYLUZvcndhcmRlZC1Ib3N0LlxuICAgKiBSZXF1aXJlZCB3aGVuIHRoZSBvcmlnaW4gaXMgYSBMYW1iZGEgRnVuY3Rpb24gVVJMIG9yIEFMQiBiZWhpbmQgQ2xvdWRGcm9udCxcbiAgICogYmVjYXVzZSBBbGxWaWV3ZXJFeGNlcHRIb3N0SGVhZGVyIHJlcGxhY2VzIEhvc3Qgd2l0aCB0aGUgb3JpZ2luIGRvbWFpbi4gKi9cbiAgZm9yd2FyZEhvc3RIZWFkZXI/OiBib29sZWFuO1xuICAvKiogQWRkcyBhY2Nlc3MgZ2F0aW5nIHRvIHRoZSBkaXN0cmlidXRpb24gdmlhIGEgQ2xvdWRGcm9udCBGdW5jdGlvbi5cbiAgICogU2V0IHRvIGZhbHNlIHRvIGV4cGxpY2l0bHkgZGlzYWJsZSAob3Igb21pdCkuICovXG4gIGFjY2Vzc0dhdGU/OiBmYWxzZSB8IEFjY2Vzc0dhdGVDb25maWc7XG59XG5cbmV4cG9ydCBjbGFzcyBDbG91ZEZyb250RGlzdHJpYnV0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgZGlzdHJpYnV0aW9uOiBEaXN0cmlidXRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDbG91ZEZyb250RGlzdHJpYnV0aW9uUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmlkID0gaWQ7XG5cbiAgICAvLyBTYW5pdGlzZSBpZCBmb3IgQ2xvdWRGb3JtYXRpb24gb3V0cHV0IGtleXMgKG11c3QgYmUgYWxwaGFudW1lcmljKVxuICAgIGNvbnN0IG91dHB1dE5hbWUgPSB0b1Bhc2NhbENhc2UoaWQpO1xuXG4gICAgY29uc3QgZGVmYXVsdE9yaWdpbiA9IHRoaXMuY3JlYXRlT3JpZ2luKHByb3BzLmRlZmF1bHRPcmlnaW4pO1xuICAgIGNvbnN0IGRlZmF1bHRDYWNoZVBvbGljeSA9IHRoaXMucmVzb2x2ZUNhY2hlUG9saWN5KFxuICAgICAgcHJvcHMuZGVmYXVsdENhY2hlUG9saWN5XG4gICAgKTtcblxuICAgIC8vIEJ1aWxkIGNvbXBvc2FibGUgdmlld2VyIHJlcXVlc3QgZnVuY3Rpb24gKGFjY2Vzc0dhdGUgKyBmb3J3YXJkSG9zdEhlYWRlcilcbiAgICBjb25zdCB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb24gPSB0aGlzLmJ1aWxkVmlld2VyUmVxdWVzdEZ1bmN0aW9uKFxuICAgICAgaWQsXG4gICAgICBwcm9wcy5mb3J3YXJkSG9zdEhlYWRlcixcbiAgICAgIHByb3BzLmFjY2Vzc0dhdGVcbiAgICApO1xuXG4gICAgY29uc3QgZnVuY3Rpb25Bc3NvY2lhdGlvbnMgPSB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb25cbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uOiB2aWV3ZXJSZXF1ZXN0RnVuY3Rpb24sXG4gICAgICAgICAgICBldmVudFR5cGU6IEZ1bmN0aW9uRXZlbnRUeXBlLlZJRVdFUl9SRVFVRVNUXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGFkZGl0aW9uYWxCZWhhdmlvcnM6IFJlY29yZDxzdHJpbmcsIEJlaGF2aW9yT3B0aW9ucz4gPSB7fTtcbiAgICBpZiAocHJvcHMuYmVoYXZpb3Vycykge1xuICAgICAgZm9yIChjb25zdCBiZWhhdmlvdXIgb2YgcHJvcHMuYmVoYXZpb3Vycykge1xuICAgICAgICBhZGRpdGlvbmFsQmVoYXZpb3JzW2JlaGF2aW91ci5wYXRoUGF0dGVybl0gPSB7XG4gICAgICAgICAgb3JpZ2luOiB0aGlzLmNyZWF0ZU9yaWdpbihiZWhhdmlvdXIub3JpZ2luKSxcbiAgICAgICAgICBjYWNoZVBvbGljeTogdGhpcy5yZXNvbHZlQ2FjaGVQb2xpY3koYmVoYXZpb3VyLmNhY2hlUG9saWN5KSxcbiAgICAgICAgICB2aWV3ZXJQcm90b2NvbFBvbGljeTogVmlld2VyUHJvdG9jb2xQb2xpY3kuUkVESVJFQ1RfVE9fSFRUUFMsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IHRoaXMucmVzb2x2ZUFsbG93ZWRNZXRob2RzKGJlaGF2aW91ci5hbGxvd2VkTWV0aG9kcyksXG4gICAgICAgICAgLy8gRm9yd2FyZCB2aWV3ZXIgaGVhZGVycyAoY29va2llcywgYXV0aCkgdG8gbm9uLVMzIG9yaWdpbnNcbiAgICAgICAgICAuLi4oYmVoYXZpb3VyLm9yaWdpbi50eXBlICE9PSBcInMzXCIgJiYge1xuICAgICAgICAgICAgb3JpZ2luUmVxdWVzdFBvbGljeTpcbiAgICAgICAgICAgICAgT3JpZ2luUmVxdWVzdFBvbGljeS5BTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUlxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihmdW5jdGlvbkFzc29jaWF0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHsgZnVuY3Rpb25Bc3NvY2lhdGlvbnMgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRpc3RyaWJ1dGlvbiA9IG5ldyBEaXN0cmlidXRpb24odGhpcywgYCR7aWR9RGlzdHJpYnV0aW9uYCwge1xuICAgICAgZGVmYXVsdEJlaGF2aW9yOiB7XG4gICAgICAgIG9yaWdpbjogZGVmYXVsdE9yaWdpbixcbiAgICAgICAgY2FjaGVQb2xpY3k6IGRlZmF1bHRDYWNoZVBvbGljeSxcbiAgICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6IFZpZXdlclByb3RvY29sUG9saWN5LlJFRElSRUNUX1RPX0hUVFBTLFxuICAgICAgICBvcmlnaW5SZXF1ZXN0UG9saWN5OiBPcmlnaW5SZXF1ZXN0UG9saWN5LkFMTF9WSUVXRVJfRVhDRVBUX0hPU1RfSEVBREVSLFxuICAgICAgICBhbGxvd2VkTWV0aG9kczogdGhpcy5yZXNvbHZlQWxsb3dlZE1ldGhvZHMocHJvcHMuZGVmYXVsdEFsbG93ZWRNZXRob2RzKSxcbiAgICAgICAgLi4uKGZ1bmN0aW9uQXNzb2NpYXRpb25zICE9PSB1bmRlZmluZWQgJiYgeyBmdW5jdGlvbkFzc29jaWF0aW9ucyB9KVxuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxCZWhhdmlvcnM6XG4gICAgICAgIE9iamVjdC5rZXlzKGFkZGl0aW9uYWxCZWhhdmlvcnMpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGFkZGl0aW9uYWxCZWhhdmlvcnNcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRvbWFpbk5hbWVzOiBwcm9wcy5kb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5jZXJ0aWZpY2F0ZSxcbiAgICAgIGNvbW1lbnQ6IHByb3BzLmNvbW1lbnQsXG4gICAgICBlbmFibGVMb2dnaW5nOiBwcm9wcy5lbmFibGVMb2dnaW5nLFxuICAgICAgbG9nQnVja2V0OiBwcm9wcy5sb2dCdWNrZXQsXG4gICAgICBwcmljZUNsYXNzOiB0aGlzLnJlc29sdmVQcmljZUNsYXNzKHByb3BzLnByaWNlQ2xhc3MpXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uRG9tYWluTmFtZWAsIHtcbiAgICAgIGtleTogYCR7b3V0cHV0TmFtZX1EaXN0cmlidXRpb25Eb21haW5OYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBkb21haW4gbmFtZSBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uSWRgLCB7XG4gICAgICBrZXk6IGAke291dHB1dE5hbWV9RGlzdHJpYnV0aW9uSWRgLFxuICAgICAgdmFsdWU6IHRoaXMuZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgICAgZGVzY3JpcHRpb246IGBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBJRCBmb3IgJHtpZH1gXG4gICAgfSk7XG5cbiAgICAvLyBPdXRwdXQgY3JlZGVudGlhbHMgaGludCB3aGVuIGFjY2VzcyBnYXRlIGlzIGVuYWJsZWRcbiAgICBpZiAocHJvcHMuYWNjZXNzR2F0ZSkge1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfUFjY2Vzc0dhdGVVc2VybmFtZWAsIHtcbiAgICAgICAga2V5OiBgJHtvdXRwdXROYW1lfUFjY2Vzc0dhdGVVc2VybmFtZWAsXG4gICAgICAgIHZhbHVlOiBwcm9wcy5hY2Nlc3NHYXRlLnVzZXJuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFjY2VzcyBnYXRlIHVzZXJuYW1lIGZvciAke2lkfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbXBvc2FibGUgQ2xvdWRGcm9udCBGdW5jdGlvbiBmb3IgVklFV0VSX1JFUVVFU1QuXG4gICAqIE1lcmdlcyBhY2Nlc3NHYXRlIGFuZCBmb3J3YXJkSG9zdEhlYWRlciBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uXG4gICAqIChDbG91ZEZyb250IGFsbG93cyBvbmx5IG9uZSBmdW5jdGlvbiBwZXIgZXZlbnQgdHlwZSkuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVmlld2VyUmVxdWVzdEZ1bmN0aW9uKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZm9yd2FyZEhvc3RIZWFkZXI/OiBib29sZWFuLFxuICAgIGFjY2Vzc0dhdGU/OiBmYWxzZSB8IEFjY2Vzc0dhdGVDb25maWdcbiAgKTogQ2xvdWRGcm9udEZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWFjY2Vzc0dhdGUgJiYgIWZvcndhcmRIb3N0SGVhZGVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCBmdW5jdGlvbkJvZHkgPSBcImZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsgdmFyIHJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1wiO1xuXG4gICAgaWYgKGFjY2Vzc0dhdGUpIHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oXG4gICAgICAgIGAke2FjY2Vzc0dhdGUudXNlcm5hbWV9OiR7YWNjZXNzR2F0ZS5wYXNzd29yZH1gXG4gICAgICApLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuXG4gICAgICBmdW5jdGlvbkJvZHkgKz1cbiAgICAgICAgYCB2YXIgYXV0aEhlYWRlciA9IHJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uO2AgK1xuICAgICAgICBgIGlmICghYXV0aEhlYWRlciB8fCBhdXRoSGVhZGVyLnZhbHVlICE9PSBcIkJhc2ljICR7Y3JlZGVudGlhbHN9XCIpIHtgICtcbiAgICAgICAgYCByZXR1cm4ge2AgK1xuICAgICAgICBgIHN0YXR1c0NvZGU6IDQwMSxgICtcbiAgICAgICAgYCBzdGF0dXNEZXNjcmlwdGlvbjogXCJVbmF1dGhvcml6ZWRcIixgICtcbiAgICAgICAgYCBoZWFkZXJzOiB7IFwid3d3LWF1dGhlbnRpY2F0ZVwiOiB7IHZhbHVlOiAnQmFzaWMgcmVhbG09XCJSZXN0cmljdGVkXCInIH0gfSxgICtcbiAgICAgICAgYCBib2R5OiB7IGVuY29kaW5nOiBcInRleHRcIiwgZGF0YTogXCJVbmF1dGhvcml6ZWRcIiB9YCArXG4gICAgICAgIGAgfTsgfWA7XG4gICAgfVxuXG4gICAgaWYgKGZvcndhcmRIb3N0SGVhZGVyKSB7XG4gICAgICBmdW5jdGlvbkJvZHkgKz1cbiAgICAgICAgXCIgcmVxdWVzdC5oZWFkZXJzWyd4LWZvcndhcmRlZC1ob3N0J10gPSB7IHZhbHVlOiByZXF1ZXN0LmhlYWRlcnMuaG9zdC52YWx1ZSB9O1wiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uQm9keSArPSBcIiByZXR1cm4gcmVxdWVzdDsgfVwiO1xuXG4gICAgcmV0dXJuIG5ldyBDbG91ZEZyb250RnVuY3Rpb24odGhpcywgYCR7aWR9Vmlld2VyUmVxdWVzdEZuYCwge1xuICAgICAgY29kZTogRnVuY3Rpb25Db2RlLmZyb21JbmxpbmUoZnVuY3Rpb25Cb2R5KSxcbiAgICAgIHJ1bnRpbWU6IEZ1bmN0aW9uUnVudGltZS5KU18yXzBcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3JpZ2luKGNvbmZpZzogQ2RuT3JpZ2luQ29uZmlnKTogSU9yaWdpbiB7XG4gICAgc3dpdGNoIChjb25maWcudHlwZSkge1xuICAgICAgY2FzZSBcInMzXCI6XG4gICAgICAgIC8vIFVzaW5nIE9BSSBpbnN0ZWFkIG9mIE9BQyB0byBhdm9pZCBjcm9zcy1zdGFjayBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzMxNDYyXG4gICAgICAgIC8vIE9BQyBjcmVhdGVzIGJ1Y2tldCDihpIgQ0ROIGRlcGVuZGVuY3kgKGJ1Y2tldCBwb2xpY3kgcmVmZXJlbmNlcyBkaXN0cmlidXRpb24pXG4gICAgICAgIC8vIE9BSSB3b3JrcyBhY3Jvc3Mgc3RhY2tzIHdpdGhvdXQgdHJpZ2dlcmluZyBjeWNsaWMgZGVwZW5kZW5jeSBlcnJvcnNcbiAgICAgICAgcmV0dXJuIFMzQnVja2V0T3JpZ2luLndpdGhPcmlnaW5BY2Nlc3NJZGVudGl0eShjb25maWcuYnVja2V0LCB7XG4gICAgICAgICAgb3JpZ2luUGF0aDogY29uZmlnLm9yaWdpblBhdGhcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgXCJhbGJcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBMb2FkQmFsYW5jZXJWMk9yaWdpbihjb25maWcubG9hZEJhbGFuY2VyLCB7XG4gICAgICAgICAgaHR0cFBvcnQ6IGNvbmZpZy5odHRwUG9ydCxcbiAgICAgICAgICBodHRwc1BvcnQ6IGNvbmZpZy5odHRwc1BvcnQsXG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IHRoaXMucmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sUG9saWN5XG4gICAgICAgICAgKVxuICAgICAgICB9KTtcblxuICAgICAgY2FzZSBcImh0dHBcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBIdHRwT3JpZ2luKGNvbmZpZy5kb21haW5OYW1lLCB7XG4gICAgICAgICAgb3JpZ2luUGF0aDogY29uZmlnLm9yaWdpblBhdGgsXG4gICAgICAgICAgaHR0cFBvcnQ6IGNvbmZpZy5odHRwUG9ydCxcbiAgICAgICAgICBodHRwc1BvcnQ6IGNvbmZpZy5odHRwc1BvcnQsXG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IHRoaXMucmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgICAgICAgICAgY29uZmlnLnByb3RvY29sUG9saWN5XG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDYWNoZVBvbGljeShcbiAgICBwb2xpY3k/OiBDYWNoZVBvbGljeVByZXNldCB8IElDYWNoZVBvbGljeVxuICApOiBJQ2FjaGVQb2xpY3kge1xuICAgIGlmICghcG9saWN5KSB7XG4gICAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19PUFRJTUlaRUQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwb2xpY3kgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHN3aXRjaCAocG9saWN5KSB7XG4gICAgICAgIGNhc2UgXCJDQUNISU5HX09QVElNSVpFRFwiOlxuICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRDtcbiAgICAgICAgY2FzZSBcIkNBQ0hJTkdfRElTQUJMRURcIjpcbiAgICAgICAgICByZXR1cm4gQ2FjaGVQb2xpY3kuQ0FDSElOR19ESVNBQkxFRDtcbiAgICAgICAgY2FzZSBcIkNBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUU1wiOlxuICAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRF9GT1JfVU5DT01QUkVTU0VEX09CSkVDVFM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvbGljeTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFsbG93ZWRNZXRob2RzKFxuICAgIG1ldGhvZHM/OiBcIkdFVF9IRUFEXCIgfCBcIkdFVF9IRUFEX09QVElPTlNcIiB8IFwiQUxMXCJcbiAgKTogQWxsb3dlZE1ldGhvZHMge1xuICAgIHN3aXRjaCAobWV0aG9kcykge1xuICAgICAgY2FzZSBcIkdFVF9IRUFEXCI6XG4gICAgICAgIHJldHVybiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRDtcbiAgICAgIGNhc2UgXCJHRVRfSEVBRF9PUFRJT05TXCI6XG4gICAgICAgIHJldHVybiBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRF9PUFRJT05TO1xuICAgICAgY2FzZSBcIkFMTFwiOlxuICAgICAgICByZXR1cm4gQWxsb3dlZE1ldGhvZHMuQUxMT1dfQUxMO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZU9yaWdpblByb3RvY29sUG9saWN5KFxuICAgIHBvbGljeT86IFwiSFRUUF9PTkxZXCIgfCBcIkhUVFBTX09OTFlcIiB8IFwiTUFUQ0hfVklFV0VSXCJcbiAgKTogT3JpZ2luUHJvdG9jb2xQb2xpY3kge1xuICAgIHN3aXRjaCAocG9saWN5KSB7XG4gICAgICBjYXNlIFwiSFRUUF9PTkxZXCI6XG4gICAgICAgIHJldHVybiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQX09OTFk7XG4gICAgICBjYXNlIFwiSFRUUFNfT05MWVwiOlxuICAgICAgICByZXR1cm4gT3JpZ2luUHJvdG9jb2xQb2xpY3kuSFRUUFNfT05MWTtcbiAgICAgIGNhc2UgXCJNQVRDSF9WSUVXRVJcIjpcbiAgICAgICAgcmV0dXJuIE9yaWdpblByb3RvY29sUG9saWN5Lk1BVENIX1ZJRVdFUjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBPcmlnaW5Qcm90b2NvbFBvbGljeS5IVFRQU19PTkxZO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVByaWNlQ2xhc3MoXG4gICAgcHJpY2VDbGFzcz86IFwiUHJpY2VDbGFzc18xMDBcIiB8IFwiUHJpY2VDbGFzc18yMDBcIiB8IFwiUHJpY2VDbGFzc19BbGxcIlxuICApOiBQcmljZUNsYXNzIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHByaWNlQ2xhc3MpIHtcbiAgICAgIGNhc2UgXCJQcmljZUNsYXNzXzEwMFwiOlxuICAgICAgICByZXR1cm4gUHJpY2VDbGFzcy5QUklDRV9DTEFTU18xMDA7XG4gICAgICBjYXNlIFwiUHJpY2VDbGFzc18yMDBcIjpcbiAgICAgICAgcmV0dXJuIFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfMjAwO1xuICAgICAgY2FzZSBcIlByaWNlQ2xhc3NfQWxsXCI6XG4gICAgICAgIHJldHVybiBQcmljZUNsYXNzLlBSSUNFX0NMQVNTX0FMTDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gZG9tYWluIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdHJpYnV0aW9uRG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25Eb21haW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gSUQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGlzdHJpYnV0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIENESyBEaXN0cmlidXRpb24gY29uc3RydWN0LlxuICAgKi9cbiAgcHVibGljIGdldERpc3RyaWJ1dGlvbigpOiBEaXN0cmlidXRpb24ge1xuICAgIHJldHVybiB0aGlzLmRpc3RyaWJ1dGlvbjtcbiAgfVxufVxuIl19