terraconstructs 0.0.11 → 0.0.13

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 (411) hide show
  1. package/.jsii +105205 -35113
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.d.ts +1 -1
  4. package/lib/aws/aws-construct.js +28 -2
  5. package/lib/aws/aws-stack.d.ts +2 -4
  6. package/lib/aws/aws-stack.js +21 -8
  7. package/lib/aws/aws-tags.d.ts +58 -0
  8. package/lib/aws/aws-tags.js +77 -0
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  12. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  13. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  14. package/lib/aws/cloudwatch/alarm.js +1 -1
  15. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  16. package/lib/aws/cloudwatch/dashboard.js +1 -1
  17. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  18. package/lib/aws/cloudwatch/graph.js +8 -8
  19. package/lib/aws/cloudwatch/layout.js +3 -3
  20. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  21. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  22. package/lib/aws/cloudwatch/log-group.js +1 -1
  23. package/lib/aws/cloudwatch/log-query.js +1 -1
  24. package/lib/aws/cloudwatch/log-stream.js +1 -1
  25. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  26. package/lib/aws/cloudwatch/metric-filter.js +4 -4
  27. package/lib/aws/cloudwatch/metric.js +2 -2
  28. package/lib/aws/cloudwatch/pattern.js +3 -3
  29. package/lib/aws/cloudwatch/policy.js +1 -1
  30. package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
  31. package/lib/aws/cloudwatch/private/metric-util.js +4 -5
  32. package/lib/aws/cloudwatch/private/object.js +2 -3
  33. package/lib/aws/cloudwatch/private/rendering.js +3 -3
  34. package/lib/aws/cloudwatch/private/statistic.js +6 -7
  35. package/lib/aws/cloudwatch/query-definition.js +2 -2
  36. package/lib/aws/cloudwatch/stats.js +1 -1
  37. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/subscription-filter.js +4 -4
  39. package/lib/aws/cloudwatch/text.js +1 -1
  40. package/lib/aws/cloudwatch/variable.js +3 -3
  41. package/lib/aws/cloudwatch/widget.d.ts +1 -1
  42. package/lib/aws/cloudwatch/widget.js +4 -4
  43. package/lib/aws/compute/activity.js +3 -2
  44. package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
  45. package/lib/aws/compute/alb/application-listener-action.js +281 -0
  46. package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
  47. package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
  48. package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
  49. package/lib/aws/compute/alb/application-listener-rule.js +220 -0
  50. package/lib/aws/compute/alb/application-listener.d.ts +574 -0
  51. package/lib/aws/compute/alb/application-listener.js +538 -0
  52. package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
  53. package/lib/aws/compute/alb/application-load-balancer.js +780 -0
  54. package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
  55. package/lib/aws/compute/alb/application-target-group.js +427 -0
  56. package/lib/aws/compute/alb/conditions.d.ts +61 -0
  57. package/lib/aws/compute/alb/conditions.js +164 -0
  58. package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
  59. package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
  60. package/lib/aws/compute/alb/trust-store.d.ts +86 -0
  61. package/lib/aws/compute/alb/trust-store.js +79 -0
  62. package/lib/aws/compute/architecture.js +1 -1
  63. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
  64. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
  65. package/lib/aws/compute/bastion-host.d.ts +172 -0
  66. package/lib/aws/compute/bastion-host.js +114 -0
  67. package/lib/aws/compute/chain.js +1 -1
  68. package/lib/aws/compute/cidr-splits.d.ts +49 -0
  69. package/lib/aws/compute/cidr-splits.js +59 -0
  70. package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
  71. package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
  72. package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
  73. package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
  74. package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
  75. package/lib/aws/compute/client-vpn-endpoint.js +259 -0
  76. package/lib/aws/compute/client-vpn-route.d.ts +67 -0
  77. package/lib/aws/compute/client-vpn-route.js +57 -0
  78. package/lib/aws/compute/condition.js +1 -1
  79. package/lib/aws/compute/connections.d.ts +137 -0
  80. package/lib/aws/compute/connections.js +208 -0
  81. package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
  82. package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
  83. package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
  84. package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
  85. package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
  86. package/lib/aws/compute/ec2-util-v2.js +286 -0
  87. package/lib/aws/compute/ec2-util.d.ts +52 -0
  88. package/lib/aws/compute/ec2-util.js +138 -0
  89. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
  90. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
  91. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
  92. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
  93. package/lib/aws/compute/event-invoke-config.js +1 -1
  94. package/lib/aws/compute/event-source-filter.js +2 -2
  95. package/lib/aws/compute/event-source-mapping.js +1 -1
  96. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  97. package/lib/aws/compute/event-sources/s3.js +1 -1
  98. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs.js +1 -1
  100. package/lib/aws/compute/fields.js +4 -4
  101. package/lib/aws/compute/function-alias.js +1 -1
  102. package/lib/aws/compute/function-base.js +2 -2
  103. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  104. package/lib/aws/compute/function-destinations/function.js +1 -1
  105. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  106. package/lib/aws/compute/function-nodejs.js +1 -1
  107. package/lib/aws/compute/function-url.js +1 -1
  108. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  109. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  110. package/lib/aws/compute/function.d.ts +1 -1
  111. package/lib/aws/compute/function.js +5 -5
  112. package/lib/aws/compute/index-alpha.d.ts +5 -0
  113. package/lib/aws/compute/index-alpha.js +22 -0
  114. package/lib/aws/compute/index.d.ts +60 -0
  115. package/lib/aws/compute/index.js +70 -2
  116. package/lib/aws/compute/instance-types.d.ts +1354 -0
  117. package/lib/aws/compute/instance-types.js +1683 -0
  118. package/lib/aws/compute/instance.d.ts +436 -0
  119. package/lib/aws/compute/instance.js +262 -0
  120. package/lib/aws/compute/ip-addresses.d.ts +249 -0
  121. package/lib/aws/compute/ip-addresses.js +248 -0
  122. package/lib/aws/compute/ipam.d.ts +309 -0
  123. package/lib/aws/compute/ipam.js +306 -0
  124. package/lib/aws/compute/key-pair.d.ts +178 -0
  125. package/lib/aws/compute/key-pair.js +194 -0
  126. package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
  127. package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
  128. package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
  129. package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
  130. package/lib/aws/compute/launch-template.d.ts +540 -0
  131. package/lib/aws/compute/launch-template.js +468 -0
  132. package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
  133. package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
  134. package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
  135. package/lib/aws/compute/lb-shared/base-listener.js +181 -0
  136. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
  137. package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
  138. package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
  139. package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
  140. package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
  141. package/lib/aws/compute/lb-shared/enums.js +301 -0
  142. package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
  143. package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
  144. package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
  145. package/lib/aws/compute/lb-shared/imported.js +27 -0
  146. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
  147. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
  148. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
  149. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
  150. package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
  151. package/lib/aws/compute/lb-shared/listener-action.js +4 -0
  152. package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
  153. package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
  154. package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
  155. package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
  156. package/lib/aws/compute/lb-shared/util.d.ts +113 -0
  157. package/lib/aws/compute/lb-shared/util.js +264 -0
  158. package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
  159. package/lib/aws/compute/lb-targets/alb-target.js +100 -0
  160. package/lib/aws/compute/lb-targets/index.d.ts +4 -0
  161. package/lib/aws/compute/lb-targets/index.js +22 -0
  162. package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
  163. package/lib/aws/compute/lb-targets/instance-target.js +67 -0
  164. package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
  165. package/lib/aws/compute/lb-targets/ip-target.js +79 -0
  166. package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
  167. package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
  168. package/lib/aws/compute/load-balancer.d.ts +336 -0
  169. package/lib/aws/compute/load-balancer.js +287 -0
  170. package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
  171. package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
  172. package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
  173. package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
  174. package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
  175. package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
  176. package/lib/aws/compute/machine-image/common.d.ts +181 -0
  177. package/lib/aws/compute/machine-image/common.js +122 -0
  178. package/lib/aws/compute/machine-image/index.d.ts +5 -0
  179. package/lib/aws/compute/machine-image/index.js +22 -0
  180. package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
  181. package/lib/aws/compute/machine-image/machine-image.js +566 -0
  182. package/lib/aws/compute/machine-image/utils.d.ts +2 -0
  183. package/lib/aws/compute/machine-image/utils.js +17 -0
  184. package/lib/aws/compute/nat.d.ts +325 -0
  185. package/lib/aws/compute/nat.js +455 -0
  186. package/lib/aws/compute/network-acl-types.d.ts +152 -0
  187. package/lib/aws/compute/network-acl-types.js +156 -0
  188. package/lib/aws/compute/network-acl.d.ts +285 -0
  189. package/lib/aws/compute/network-acl.js +207 -0
  190. package/lib/aws/compute/network-util.d.ts +116 -0
  191. package/lib/aws/compute/network-util.js +241 -0
  192. package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
  193. package/lib/aws/compute/nlb/network-listener-action.js +146 -0
  194. package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
  195. package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
  196. package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
  197. package/lib/aws/compute/nlb/network-listener.js +217 -0
  198. package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
  199. package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
  200. package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
  201. package/lib/aws/compute/nlb/network-target-group.js +223 -0
  202. package/lib/aws/compute/peer.d.ts +64 -0
  203. package/lib/aws/compute/peer.js +235 -0
  204. package/lib/aws/compute/placement-group.d.ts +161 -0
  205. package/lib/aws/compute/placement-group.js +133 -0
  206. package/lib/aws/compute/port.d.ts +287 -0
  207. package/lib/aws/compute/port.js +390 -0
  208. package/lib/aws/compute/prefix-list.d.ts +131 -0
  209. package/lib/aws/compute/prefix-list.js +114 -0
  210. package/lib/aws/compute/private/context-stub.d.ts +7 -0
  211. package/lib/aws/compute/private/context-stub.js +43 -0
  212. package/lib/aws/compute/private/ebs-util.d.ts +14 -0
  213. package/lib/aws/compute/private/ebs-util.js +145 -0
  214. package/lib/aws/compute/private/intrinstics.js +2 -1
  215. package/lib/aws/compute/private/json-path.js +8 -8
  216. package/lib/aws/compute/private/util.js +2 -3
  217. package/lib/aws/compute/route.d.ts +547 -0
  218. package/lib/aws/compute/route.js +469 -0
  219. package/lib/aws/compute/security-group.d.ts +414 -0
  220. package/lib/aws/compute/security-group.js +538 -0
  221. package/lib/aws/compute/state-graph.js +1 -1
  222. package/lib/aws/compute/state-machine-fragment.js +1 -1
  223. package/lib/aws/compute/state-machine.d.ts +2 -2
  224. package/lib/aws/compute/state-machine.js +14 -12
  225. package/lib/aws/compute/states/choice.js +1 -1
  226. package/lib/aws/compute/states/custom-state.js +1 -1
  227. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  228. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  229. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  230. package/lib/aws/compute/states/distributed-map.js +1 -1
  231. package/lib/aws/compute/states/fail.js +1 -1
  232. package/lib/aws/compute/states/map-base.js +1 -1
  233. package/lib/aws/compute/states/map.js +1 -1
  234. package/lib/aws/compute/states/parallel.js +1 -1
  235. package/lib/aws/compute/states/pass.js +2 -2
  236. package/lib/aws/compute/states/state.js +5 -5
  237. package/lib/aws/compute/states/succeed.js +1 -1
  238. package/lib/aws/compute/states/task-base.js +2 -2
  239. package/lib/aws/compute/states/task.js +1 -1
  240. package/lib/aws/compute/states/wait.js +2 -2
  241. package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
  242. package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
  243. package/lib/aws/compute/subnet-v2.d.ts +213 -0
  244. package/lib/aws/compute/subnet-v2.js +405 -0
  245. package/lib/aws/compute/subnet.d.ts +37 -0
  246. package/lib/aws/compute/subnet.js +181 -0
  247. package/lib/aws/compute/task-credentials.js +1 -1
  248. package/lib/aws/compute/task-input.js +1 -1
  249. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  250. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  251. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  252. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  253. package/lib/aws/compute/tasks/private/task-utils.js +3 -4
  254. package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
  255. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  256. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  257. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  258. package/lib/aws/compute/types.js +2 -2
  259. package/lib/aws/compute/user-data.d.ts +270 -0
  260. package/lib/aws/compute/user-data.js +487 -0
  261. package/lib/aws/compute/util.d.ts +1 -1
  262. package/lib/aws/compute/util.js +4 -5
  263. package/lib/aws/compute/volume.d.ts +480 -0
  264. package/lib/aws/compute/volume.js +426 -0
  265. package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
  266. package/lib/aws/compute/vpc-endpoint-service.js +90 -0
  267. package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
  268. package/lib/aws/compute/vpc-endpoint.js +811 -0
  269. package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
  270. package/lib/aws/compute/vpc-flow-logs.js +693 -0
  271. package/lib/aws/compute/vpc-lookup.d.ts +73 -0
  272. package/lib/aws/compute/vpc-lookup.js +3 -0
  273. package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
  274. package/lib/aws/compute/vpc-v2-base.js +493 -0
  275. package/lib/aws/compute/vpc-v2.d.ts +385 -0
  276. package/lib/aws/compute/vpc-v2.js +408 -0
  277. package/lib/aws/compute/vpc.d.ts +1448 -0
  278. package/lib/aws/compute/vpc.js +1495 -0
  279. package/lib/aws/compute/vpn.d.ts +443 -0
  280. package/lib/aws/compute/vpn.js +397 -0
  281. package/lib/aws/compute/windows-versions.d.ts +418 -0
  282. package/lib/aws/compute/windows-versions.js +426 -0
  283. package/lib/aws/edge/certificate-base.d.ts +20 -0
  284. package/lib/aws/edge/certificate-base.js +28 -0
  285. package/lib/aws/edge/certificate.d.ts +23 -2
  286. package/lib/aws/edge/certificate.js +54 -4
  287. package/lib/aws/edge/distribution.js +3 -3
  288. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  289. package/lib/aws/edge/dns-record.js +16 -16
  290. package/lib/aws/edge/dns-zone.d.ts +20 -2
  291. package/lib/aws/edge/dns-zone.js +25 -10
  292. package/lib/aws/edge/function.js +2 -2
  293. package/lib/aws/edge/index.d.ts +1 -0
  294. package/lib/aws/edge/index.js +2 -1
  295. package/lib/aws/edge/key-value-store.js +4 -4
  296. package/lib/aws/edge/origin.js +7 -5
  297. package/lib/aws/edge/response-headers-policy.js +1 -1
  298. package/lib/aws/encryption/alias.js +1 -1
  299. package/lib/aws/encryption/key.js +1 -1
  300. package/lib/aws/encryption/via-service-principal.js +1 -1
  301. package/lib/aws/iam/grant.js +2 -2
  302. package/lib/aws/iam/index.d.ts +1 -0
  303. package/lib/aws/iam/index.js +2 -1
  304. package/lib/aws/iam/instance-profile.d.ts +155 -0
  305. package/lib/aws/iam/instance-profile.js +124 -0
  306. package/lib/aws/iam/managed-policy.js +1 -1
  307. package/lib/aws/iam/oidc-provider.js +1 -1
  308. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  309. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  310. package/lib/aws/iam/policy-document.js +1 -1
  311. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  312. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  313. package/lib/aws/iam/policy-statement.js +9 -9
  314. package/lib/aws/iam/policy.js +1 -1
  315. package/lib/aws/iam/principals.js +26 -26
  316. package/lib/aws/iam/private/assume-role-policy.js +2 -3
  317. package/lib/aws/iam/private/comparable-principal.js +2 -3
  318. package/lib/aws/iam/private/immutable-role.d.ts +2 -1
  319. package/lib/aws/iam/private/immutable-role.js +3 -3
  320. package/lib/aws/iam/private/imported-role.d.ts +1 -1
  321. package/lib/aws/iam/private/imported-role.js +3 -3
  322. package/lib/aws/iam/private/merge-statements.js +2 -3
  323. package/lib/aws/iam/private/util.js +4 -4
  324. package/lib/aws/iam/role.js +1 -1
  325. package/lib/aws/iam/saml-provider.d.ts +1 -1
  326. package/lib/aws/iam/saml-provider.js +6 -6
  327. package/lib/aws/iam/unknown-principal.js +1 -1
  328. package/lib/aws/iam/utils.js +2 -3
  329. package/lib/aws/index.d.ts +1 -0
  330. package/lib/aws/index.js +4 -1
  331. package/lib/aws/network/simple-ipv4-vpc.js +5 -5
  332. package/lib/aws/network/subnet-group.js +3 -3
  333. package/lib/aws/network/subnet.d.ts +1 -1
  334. package/lib/aws/network/subnet.js +7 -7
  335. package/lib/aws/notify/archive.js +3 -2
  336. package/lib/aws/notify/connection.js +5 -4
  337. package/lib/aws/notify/event-bus.js +5 -4
  338. package/lib/aws/notify/event-pattern.d.ts +26 -1
  339. package/lib/aws/notify/event-pattern.js +49 -5
  340. package/lib/aws/notify/index.js +3 -1
  341. package/lib/aws/notify/input.js +4 -3
  342. package/lib/aws/notify/kinesis-stream.js +3 -2
  343. package/lib/aws/notify/on-event-options.js +2 -1
  344. package/lib/aws/notify/queue-config.generated.d.ts +18 -11
  345. package/lib/aws/notify/queue-config.generated.js +1 -1
  346. package/lib/aws/notify/queue-policy.js +1 -1
  347. package/lib/aws/notify/queue.js +1 -1
  348. package/lib/aws/notify/resource-policy.js +1 -1
  349. package/lib/aws/notify/rule.js +3 -2
  350. package/lib/aws/notify/schedule.js +2 -2
  351. package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
  352. package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
  353. package/lib/aws/notify/target.js +2 -1
  354. package/lib/aws/notify/targets/event-bus.js +1 -1
  355. package/lib/aws/notify/targets/function.js +1 -1
  356. package/lib/aws/notify/targets/log-group.js +2 -2
  357. package/lib/aws/notify/targets/sqs.js +1 -1
  358. package/lib/aws/notify/targets/state-machine.js +1 -1
  359. package/lib/aws/notify/targets/util.d.ts +1 -1
  360. package/lib/aws/notify/targets/util.js +10 -11
  361. package/lib/aws/notify/util.js +4 -4
  362. package/lib/aws/provider-config.generated.d.ts +33 -33
  363. package/lib/aws/provider-config.generated.js +1 -1
  364. package/lib/aws/storage/bucket-notifications.js +1 -1
  365. package/lib/aws/storage/bucket-policy.js +1 -1
  366. package/lib/aws/storage/bucket-source.js +1 -1
  367. package/lib/aws/storage/bucket.d.ts +298 -65
  368. package/lib/aws/storage/bucket.js +548 -225
  369. package/lib/aws/storage/cors-config.generated.d.ts +3 -3
  370. package/lib/aws/storage/cors-config.generated.js +1 -1
  371. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  372. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  373. package/lib/aws/storage/index.d.ts +1 -0
  374. package/lib/aws/storage/index.js +2 -1
  375. package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
  376. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  377. package/lib/aws/storage/notification-targets/function.js +6 -6
  378. package/lib/aws/storage/notification-targets/queue.js +1 -1
  379. package/lib/aws/storage/origin-access-identity.d.ts +1 -1
  380. package/lib/aws/storage/origin-access-identity.js +5 -4
  381. package/lib/aws/storage/parameter-util.d.ts +12 -0
  382. package/lib/aws/storage/parameter-util.js +65 -0
  383. package/lib/aws/storage/parameter.d.ts +526 -0
  384. package/lib/aws/storage/parameter.js +606 -0
  385. package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
  386. package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
  387. package/lib/aws/storage/util.d.ts +25 -3
  388. package/lib/aws/storage/util.js +84 -17
  389. package/lib/aws/storage/website-config.generated.d.ts +5 -5
  390. package/lib/aws/storage/website-config.generated.js +1 -1
  391. package/lib/aws/util.js +2 -3
  392. package/lib/construct-base.d.ts +10 -1
  393. package/lib/construct-base.js +9 -6
  394. package/lib/duration.js +1 -1
  395. package/lib/expiration.d.ts +48 -0
  396. package/lib/expiration.js +68 -0
  397. package/lib/helpers-internal/index.d.ts +1 -0
  398. package/lib/helpers-internal/index.js +7 -0
  399. package/lib/index.d.ts +2 -0
  400. package/lib/index.js +3 -1
  401. package/lib/private/md5.d.ts +4 -0
  402. package/lib/private/md5.js +14 -0
  403. package/lib/private/unique-resource-name.js +3 -4
  404. package/lib/size.js +2 -2
  405. package/lib/stack-base.d.ts +4 -23
  406. package/lib/stack-base.js +9 -30
  407. package/lib/terra-func.d.ts +103 -0
  408. package/lib/terra-func.js +170 -0
  409. package/lib/token.js +5 -5
  410. package/package.json +15 -8
  411. package/bun.lockb +0 -0
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Ipam = exports.IpamScopeType = exports.AwsServiceName = exports.IpamPoolPublicIpSource = exports.AddressFamily = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/@aws-cdk/aws-ec2-alpha/lib/ipam.ts
7
+ const provider_aws_1 = require("@cdktf/provider-aws");
8
+ const cdktf_1 = require("cdktf");
9
+ const aws_construct_1 = require("../aws-construct");
10
+ // TODO: Use TagManager and tag-aspect instead
11
+ const aws_tags_1 = require("../aws-tags");
12
+ // import { Tags } from "../tag-aspect";
13
+ /**
14
+ * Represents the address family for IP addresses in an IPAM pool.
15
+ * IP_V4 - Represents the IPv4 address family.
16
+ * IP_V6 - Represents the IPv6 address family.
17
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-addressfamily
18
+ */
19
+ var AddressFamily;
20
+ (function (AddressFamily) {
21
+ /**
22
+ * Represents the IPv4 address family.
23
+ * Allowed under public and private pool.
24
+ */
25
+ AddressFamily["IP_V4"] = "ipv4";
26
+ /**
27
+ * Represents the IPv6 address family.
28
+ * Only allowed under public pool.
29
+ */
30
+ AddressFamily["IP_V6"] = "ipv6";
31
+ })(AddressFamily || (exports.AddressFamily = AddressFamily = {}));
32
+ /**
33
+ * The IP address source for pools in the public scope.
34
+ * Only used for provisioning IP address CIDRs to pools in the public scope.
35
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-publicipsource
36
+ */
37
+ var IpamPoolPublicIpSource;
38
+ (function (IpamPoolPublicIpSource) {
39
+ /**
40
+ * BYOIP Ipv6 to be registered under IPAM
41
+ */
42
+ IpamPoolPublicIpSource["BYOIP"] = "byoip";
43
+ /**
44
+ * Amazon Provided Ipv6 range
45
+ */
46
+ IpamPoolPublicIpSource["AMAZON"] = "amazon";
47
+ })(IpamPoolPublicIpSource || (exports.IpamPoolPublicIpSource = IpamPoolPublicIpSource = {}));
48
+ /**
49
+ * Limits which service in AWS that the pool can be used in
50
+ */
51
+ var AwsServiceName;
52
+ (function (AwsServiceName) {
53
+ /**
54
+ * Allows users to use space for Elastic IP addresses and VPCs
55
+ */
56
+ AwsServiceName["EC2"] = "ec2";
57
+ })(AwsServiceName || (exports.AwsServiceName = AwsServiceName = {}));
58
+ /**
59
+ * Refers to two possible scope types under IPAM
60
+ */
61
+ var IpamScopeType;
62
+ (function (IpamScopeType) {
63
+ /**
64
+ * Default scopes created by IPAM
65
+ */
66
+ IpamScopeType["DEFAULT"] = "default";
67
+ /**
68
+ * Custom scope created using method
69
+ */
70
+ IpamScopeType["CUSTOM"] = "custom";
71
+ })(IpamScopeType || (exports.IpamScopeType = IpamScopeType = {}));
72
+ const NAME_TAG = "Name";
73
+ /**
74
+ * Creates new IPAM Pool
75
+ * Pools enable you to organize your IP addresses according to your routing and security needs
76
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html
77
+ * @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/vpc_ipam_pool
78
+ * @resource aws_vpc_ipam_pool
79
+ * @internal
80
+ */
81
+ class IpamPool extends aws_construct_1.AwsConstructBase {
82
+ get ipamPoolOutputs() {
83
+ return {
84
+ ipamPoolId: this.ipamPoolId,
85
+ };
86
+ }
87
+ get outputs() {
88
+ return this.ipamPoolOutputs;
89
+ }
90
+ constructor(scope, id, props) {
91
+ super(scope, id, props);
92
+ /**
93
+ * Pool CIDR for IPv6 to be provisioned with Public IP source set to 'Amazon'
94
+ */
95
+ this.ipamCidrs = [];
96
+ /**
97
+ * Pool CIDR for IPv4 to be provisioned using IPAM
98
+ * Required to check for subnet IP range is within the VPC range
99
+ */
100
+ this.ipamIpv4Cidrs = [];
101
+ const ipamPoolName = props.ipamPoolName ??
102
+ cdktf_1.Lazy.stringValue({
103
+ produce: () => this.stack.uniqueResourceName(this, {
104
+ maxLength: 128,
105
+ allowedSpecialCharacters: "_",
106
+ }),
107
+ });
108
+ if (props.addressFamily === AddressFamily.IP_V6 && !props.awsService) {
109
+ throw new Error("awsService is required when addressFamily is set to ipv6");
110
+ }
111
+ //Add tags to the IPAM Pool if name is provided
112
+ if (ipamPoolName) {
113
+ aws_tags_1.Tags.of(this).add(NAME_TAG, ipamPoolName);
114
+ }
115
+ this._ipamPool = new provider_aws_1.vpcIpamPool.VpcIpamPool(this, "Resource", {
116
+ addressFamily: props.addressFamily,
117
+ locale: props.locale,
118
+ ipamScopeId: props.ipamScopeId,
119
+ publicIpSource: props.publicIpSource,
120
+ awsService: props.awsService,
121
+ allocationResourceTags: props.allocationResourceTags,
122
+ });
123
+ this.ipamPoolId = this._ipamPool.id;
124
+ // provisionedCidrs: props.ipv4ProvisionedCidrs?.map((cidr) => ({ cidr })),
125
+ // Populating to check for subnet range against all IPv4 ranges assigned to VPC including IPAM
126
+ props.ipv4ProvisionedCidrs?.forEach((cidr) => {
127
+ this.ipamIpv4Cidrs.push(cidr);
128
+ // Terraform VpcIpamPool does not support inline "ProvisionedCidrs" property
129
+ // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-provisionedcidrs
130
+ this.provisionCidr("ProvisionedCidr", { cidr });
131
+ });
132
+ }
133
+ /**
134
+ * A CIDR provisioned to an IPAM pool.
135
+ * @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/vpc_ipam_pool_cidr
136
+ * @param id Name of Resource
137
+ * @param options Either a CIDR or netmask length must be provided
138
+ * @returns aws_vpc_ipam_pool_cidr
139
+ */
140
+ provisionCidr(id, options) {
141
+ // TODO: Error if neither or both cidr and netmask length are provided
142
+ const cidr = new provider_aws_1.vpcIpamPoolCidr.VpcIpamPoolCidr(this, id, {
143
+ ...options,
144
+ ipamPoolId: this.ipamPoolId,
145
+ });
146
+ this.ipamCidrs.push(cidr);
147
+ return cidr;
148
+ }
149
+ }
150
+ /**
151
+ * Creates custom Ipam Scope, custom IPAM scopes can only be private
152
+ * (can be used for adding custom scopes to an existing IPAM)
153
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
154
+ * @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/vpc_ipam_scope
155
+ * @resource aws_vpc_ipam_scope
156
+ */
157
+ class IpamScope extends aws_construct_1.AwsConstructBase {
158
+ get ipamScopeOutputs() {
159
+ return {
160
+ ipamScopeId: this.scopeId,
161
+ };
162
+ }
163
+ get outputs() {
164
+ return this.ipamScopeOutputs;
165
+ }
166
+ constructor(scope, id, props) {
167
+ super(scope, id);
168
+ this._ipamScope = new provider_aws_1.vpcIpamScope.VpcIpamScope(scope, "Resource", {
169
+ ipamId: props.ipamId,
170
+ });
171
+ aws_tags_1.Tags.of(this._ipamScope).add(NAME_TAG, props.ipamScopeName ?? "CustomIpamScope");
172
+ this.scopeId = this._ipamScope.id;
173
+ this.scopeType = IpamScopeType.CUSTOM;
174
+ this.scope = scope;
175
+ this.props = props;
176
+ }
177
+ /**
178
+ * Adds a pool to the IPAM scope.
179
+ * @external
180
+ */
181
+ addPool(id, options) {
182
+ return createIpamPool(this.scope, id, this.props, options, this.scopeId);
183
+ }
184
+ }
185
+ /**
186
+ * Base class for IPAM default scopes.
187
+ */
188
+ class IpamScopeBase {
189
+ get ipamScopeOutputs() {
190
+ return {
191
+ ipamScopeId: this.scopeId,
192
+ };
193
+ }
194
+ get outputs() {
195
+ return this.ipamScopeOutputs;
196
+ }
197
+ constructor(scope, scopeId, props, scopeType) {
198
+ this.scope = scope;
199
+ this.scopeId = scopeId;
200
+ this.props = props;
201
+ this.scopeType = scopeType;
202
+ this.scopeType = IpamScopeType.DEFAULT;
203
+ if (!props.ipamScopeId) {
204
+ throw new Error("ipamScopeId is required");
205
+ }
206
+ else {
207
+ this.scopeId = props.ipamScopeId;
208
+ }
209
+ }
210
+ /**
211
+ * Adds a pool to the IPAM scope.
212
+ * @external
213
+ */
214
+ addPool(id, options) {
215
+ return createIpamPool(this.scope, id, this.props, options, this.scopeId);
216
+ }
217
+ }
218
+ /**
219
+ * Creates new IPAM with default public and private scope
220
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
221
+ * @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/vpc_ipam
222
+ * @resource aws_vpc_ipam
223
+ */
224
+ class Ipam extends aws_construct_1.AwsConstructBase {
225
+ get ipamOutputs() {
226
+ return {
227
+ ipamId: this.ipamId,
228
+ };
229
+ }
230
+ get outputs() {
231
+ return this.ipamOutputs;
232
+ }
233
+ constructor(scope, id, props) {
234
+ super(scope, id);
235
+ /**
236
+ * List of scopes created under this IPAM
237
+ */
238
+ this.scopes = [];
239
+ if (props?.ipamName) {
240
+ aws_tags_1.Tags.of(this).add(NAME_TAG, props.ipamName);
241
+ }
242
+ if (!props?.operatingRegion && !this.env.region) {
243
+ throw new Error("Please provide at least one operating region");
244
+ }
245
+ this.operatingRegions = props?.operatingRegion ?? [this.env.region];
246
+ this.ipamName = props?.ipamName;
247
+ this._ipam = new provider_aws_1.vpcIpam.VpcIpam(this, "Ipam", {
248
+ operatingRegions: this.operatingRegions
249
+ ? this.operatingRegions.map((region) => ({ regionName: region }))
250
+ : [],
251
+ });
252
+ this.node.defaultChild = this._ipam;
253
+ this.ipamId = this._ipam.id;
254
+ this.publicScope = new IpamScopeBase(this, "DefaultPublicScope", {
255
+ ipamOperatingRegions: this.operatingRegions,
256
+ ipamId: this._ipam.id,
257
+ ipamScopeId: this._ipam.publicDefaultScopeId,
258
+ });
259
+ this.privateScope = new IpamScopeBase(this, "DefaultPrivateScope", {
260
+ ipamOperatingRegions: this.operatingRegions,
261
+ ipamId: this._ipam.id,
262
+ ipamScopeId: this._ipam.privateDefaultScopeId,
263
+ });
264
+ this.scopes.push(this.publicScope, this.privateScope);
265
+ }
266
+ /**
267
+ * Function to add custom scope to an existing IPAM
268
+ * Custom scopes can only be private
269
+ */
270
+ addScope(scope, id, options) {
271
+ const ipamScope = new IpamScope(scope, id, {
272
+ ...options,
273
+ ipamId: this.ipamId,
274
+ ipamOperatingRegions: this.operatingRegions,
275
+ });
276
+ this.scopes.push(ipamScope);
277
+ return ipamScope;
278
+ }
279
+ }
280
+ exports.Ipam = Ipam;
281
+ _a = JSII_RTTI_SYMBOL_1;
282
+ Ipam[_a] = { fqn: "terraconstructs.aws.compute.alpha.Ipam", version: "0.0.13" };
283
+ /**
284
+ * Function to create IpamPool under scope
285
+ * @internal
286
+ */
287
+ function createIpamPool(scope, id, scopeOptions, poolOptions, scopeId) {
288
+ const isLocaleInOperatingRegions = scopeOptions.ipamOperatingRegions
289
+ ? scopeOptions.ipamOperatingRegions
290
+ .map((region) => ({ regionName: region }))
291
+ .some((region) => region.regionName === poolOptions.locale)
292
+ : false;
293
+ if (!isLocaleInOperatingRegions) {
294
+ throw new Error(`The provided locale '${poolOptions.locale}' is not in the operating regions.`);
295
+ }
296
+ return new IpamPool(scope, id, {
297
+ ipamPoolName: poolOptions.ipamPoolName,
298
+ addressFamily: poolOptions.addressFamily,
299
+ ipv4ProvisionedCidrs: poolOptions.ipv4ProvisionedCidrs,
300
+ ipamScopeId: scopeId,
301
+ locale: poolOptions.locale,
302
+ publicIpSource: poolOptions.publicIpSource,
303
+ awsService: poolOptions.awsService,
304
+ });
305
+ }
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9pcGFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkZBQTJGO0FBRTNGLHNEQUs2QjtBQUM3QixpQ0FBNkI7QUFFN0Isb0RBSTBCO0FBQzFCLDhDQUE4QztBQUM5QywwQ0FBbUM7QUFDbkMsd0NBQXdDO0FBRXhDOzs7OztHQUtHO0FBQ0gsSUFBWSxhQVlYO0FBWkQsV0FBWSxhQUFhO0lBQ3ZCOzs7T0FHRztJQUNILCtCQUFjLENBQUE7SUFFZDs7O09BR0c7SUFDSCwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFaVyxhQUFhLDZCQUFiLGFBQWEsUUFZeEI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxzQkFVWDtBQVZELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gseUNBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsMkNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBVWpDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCw2QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGNBQWMsOEJBQWQsY0FBYyxRQUt6QjtBQXdCRDs7R0FFRztBQUNILElBQVksYUFVWDtBQVZELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILG9DQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLGFBQWEsNkJBQWIsYUFBYSxRQVV4QjtBQTJERCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFtTWhDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFFBQVMsU0FBUSxnQ0FBZ0I7SUFDckMsSUFBVyxlQUFlO1FBQ3hCLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJ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SSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUM3QixZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVk7UUFDdEMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUFhO1FBQ3hDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxvQkFBb0I7UUFDdEQsV0FBVyxFQUFFLE9BQU87UUFDcEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1FBQzFCLGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYztRQUMxQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVU7S0FDbkMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL0Bhd3MtY2RrL2F3cy1lYzItYWxwaGEvbGliL2lwYW0udHNcblxuaW1wb3J0IHtcbiAgdnBjSXBhbSBhcyB0ZklwYW0sXG4gIHZwY0lwYW1Qb29sIGFzIHRmSXBhbVBvb2wsXG4gIHZwY0lwYW1Qb29sQ2lkciBhcyB0ZklwYW1Qb29sQ2lkcixcbiAgdnBjSXBhbVNjb3BlIGFzIHRmSXBhbVNjb3BlLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgTGF6eSB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuLy8gVE9ETzogVXNlIFRhZ01hbmFnZXIgYW5kIHRhZy1hc3BlY3QgaW5zdGVhZFxuaW1wb3J0IHsgVGFncyB9IGZyb20gXCIuLi9hd3MtdGFnc1wiO1xuLy8gaW1wb3J0IHsgVGFncyB9IGZyb20gXCIuLi90YWctYXNwZWN0XCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIElQIGFkZHJlc3NlcyBpbiBhbiBJUEFNIHBvb2wuXG4gKiBJUF9WNCAtIFJlcHJlc2VudHMgdGhlIElQdjQgYWRkcmVzcyBmYW1pbHkuXG4gKiBJUF9WNiAtIFJlcHJlc2VudHMgdGhlIElQdjYgYWRkcmVzcyBmYW1pbHkuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWFkZHJlc3NmYW1pbHlcbiAqL1xuZXhwb3J0IGVudW0gQWRkcmVzc0ZhbWlseSB7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBJUHY0IGFkZHJlc3MgZmFtaWx5LlxuICAgKiBBbGxvd2VkIHVuZGVyIHB1YmxpYyBhbmQgcHJpdmF0ZSBwb29sLlxuICAgKi9cbiAgSVBfVjQgPSBcImlwdjRcIixcblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgSVB2NiBhZGRyZXNzIGZhbWlseS5cbiAgICogT25seSBhbGxvd2VkIHVuZGVyIHB1YmxpYyBwb29sLlxuICAgKi9cbiAgSVBfVjYgPSBcImlwdjZcIixcbn1cblxuLyoqXG4gKiBUaGUgSVAgYWRkcmVzcyBzb3VyY2UgZm9yIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gKiBPbmx5IHVzZWQgZm9yIHByb3Zpc2lvbmluZyBJUCBhZGRyZXNzIENJRFJzIHRvIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLXB1YmxpY2lwc291cmNlXG4gKi9cbmV4cG9ydCBlbnVtIElwYW1Qb29sUHVibGljSXBTb3VyY2Uge1xuICAvKipcbiAgICogQllPSVAgSXB2NiB0byBiZSByZWdpc3RlcmVkIHVuZGVyIElQQU1cbiAgICovXG4gIEJZT0lQID0gXCJieW9pcFwiLFxuXG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NiByYW5nZVxuICAgKi9cbiAgQU1BWk9OID0gXCJhbWF6b25cIixcbn1cblxuLyoqXG4gKiBMaW1pdHMgd2hpY2ggc2VydmljZSBpbiBBV1MgdGhhdCB0aGUgcG9vbCBjYW4gYmUgdXNlZCBpblxuICovXG5leHBvcnQgZW51bSBBd3NTZXJ2aWNlTmFtZSB7XG4gIC8qKlxuICAgKiAgQWxsb3dzIHVzZXJzIHRvIHVzZSBzcGFjZSBmb3IgRWxhc3RpYyBJUCBhZGRyZXNzZXMgYW5kIFZQQ3NcbiAgICovXG4gIEVDMiA9IFwiZWMyXCIsXG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBjcmVhdGUgYSBuZXcgSXBhbSBpbiB0aGUgYWNjb3VudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIFJlZ2lvbnMgZm9yIGFuIElQQU0uXG4gICAqIE9wZXJhdGluZyBSZWdpb25zIGFyZSBBV1MgUmVnaW9ucyB3aGVyZSB0aGUgSVBBTSBpcyBhbGxvd2VkIHRvIG1hbmFnZSBJUCBhZGRyZXNzIENJRFJzXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG9wZXJhdGluZyBSZWdpb25zLCBzZWUgW0NyZWF0ZSBhbiBJUEFNXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL3ZwYy9sYXRlc3QvaXBhbS9jcmVhdGUtaXBhbS5odG1sKSBpbiB0aGUgKkFtYXpvbiBWUEMgSVBBTSBVc2VyIEd1aWRlKiAuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbCNjZm4tZWMyLWlwYW0tb3BlcmF0aW5ncmVnaW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFN0YWNrLnJlZ2lvbiBpZiBkZWZpbmVkIGluIHRoZSBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW5nUmVnaW9uPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgSVBBTSB0aGF0IGNhbiBiZSB1c2VkIGZvciB0YWdnaW5nIHJlc291cmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgbm8gbmFtZSBwcm92aWRlZCwgbm8gdGFncyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBJUEFNXG4gICAqL1xuICByZWFkb25seSBpcGFtTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWZlcnMgdG8gdHdvIHBvc3NpYmxlIHNjb3BlIHR5cGVzIHVuZGVyIElQQU1cbiAqL1xuZXhwb3J0IGVudW0gSXBhbVNjb3BlVHlwZSB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHNjb3BlcyBjcmVhdGVkIGJ5IElQQU1cbiAgICovXG4gIERFRkFVTFQgPSBcImRlZmF1bHRcIixcblxuICAvKipcbiAgICogQ3VzdG9tIHNjb3BlIGNyZWF0ZWQgdXNpbmcgbWV0aG9kXG4gICAqL1xuICBDVVNUT00gPSBcImN1c3RvbVwiLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIElQQU0gcG9vbC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvb2xPcHRpb25zIHtcbiAgLyoqXG4gICAqIGFkZHJlc3NGYW1pbHkgLSBUaGUgYWRkcmVzcyBmYW1pbHkgb2YgdGhlIHBvb2wgKGlwdjQgb3IgaXB2NikuXG4gICAqL1xuICByZWFkb25seSBhZGRyZXNzRmFtaWx5OiBBZGRyZXNzRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ0lEUnMgcHJvdmlzaW9uZWQgdG8gdGhlIHBvb2wuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQ0lEUnMgYXJlIHByb3Zpc2lvbmVkXG4gICAqL1xuICByZWFkb25seSBpcHY0UHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYWxlIChBV1MgUmVnaW9uKSBvZiB0aGUgcG9vbC4gU2hvdWxkIGJlIG9uZSBvZiB0aGUgSVBBTSBvcGVyYXRpbmcgcmVnaW9uLlxuICAgKiAgT25seSByZXNvdXJjZXMgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSBsb2NhbGUgb2YgdGhlIHBvb2wgY2FuIGdldCBJUCBhZGRyZXNzIGFsbG9jYXRpb25zIGZyb20gdGhlIHBvb2wuXG4gICAqIFlvdSBjYW4gb25seSBhbGxvY2F0ZSBhIENJRFIgZm9yIGEgVlBDLCBmb3IgZXhhbXBsZSwgZnJvbSBhbiBJUEFNIHBvb2wgdGhhdCBzaGFyZXMgYSBsb2NhbGUgd2l0aCB0aGUgVlBD4oCZcyBSZWdpb24uXG4gICAqIE5vdGUgdGhhdCBvbmNlIHlvdSBjaG9vc2UgYSBMb2NhbGUgZm9yIGEgcG9vbCwgeW91IGNhbm5vdCBtb2RpZnkgaXQuIElmIHlvdSBjaG9vc2UgYW4gQVdTIFJlZ2lvbiBmb3IgbG9jYWxlIHRoYXQgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgYXMgYW4gb3BlcmF0aW5nIFJlZ2lvbiBmb3IgdGhlIElQQU0sIHlvdSdsbCBnZXQgYW4gZXJyb3IuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWwjY2ZuLWVjMi1pcGFtcG9vbC1sb2NhbGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IG9wZXJhdGluZyByZWdpb24gb2YgSVBBTVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVAgYWRkcmVzcyBzb3VyY2UgZm9yIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gICAqIE9ubHkgdXNlZCBmb3IgSVB2NiBhZGRyZXNzXG4gICAqIE9ubHkgYWxsb3dlZCB2YWx1ZXMgdG8gdGhpcyBhcmUgJ2J5b2lwJyBvciAnYW1hem9uJ1xuICAgKlxuICAgKiBAZGVmYXVsdCBhbWF6b25cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0lwU291cmNlPzogSXBhbVBvb2xQdWJsaWNJcFNvdXJjZTtcblxuICAvKipcbiAgICogTGltaXRzIHdoaWNoIHNlcnZpY2UgaW4gQVdTIHRoYXQgdGhlIHBvb2wgY2FuIGJlIHVzZWQgaW4uXG4gICAqXG4gICAqIFwiZWMyXCIsIGZvciBleGFtcGxlLCBhbGxvd3MgdXNlcnMgdG8gdXNlIHNwYWNlIGZvciBFbGFzdGljIElQIGFkZHJlc3NlcyBhbmQgVlBDcy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWF3c3NlcnZpY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXF1aXJlZCBpbiBjYXNlIG9mIGFuIElQdjYsIHRocm93cyBhbiBlcnJvciBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhd3NTZXJ2aWNlPzogQXdzU2VydmljZU5hbWU7XG5cbiAgLyoqXG4gICAqIElQQU0gUG9vbCByZXNvdXJjZSBuYW1lIHRvIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvZ2VuZXJhdGVkIGJ5IENESyBpZiBub3QgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9IFwiTmFtZVwiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIElQQU0gcG9vbC5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtUG9vbFByb3BzIGV4dGVuZHMgUG9vbE9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFNjb3BlIGlkIHdoZXJlIHBvb2wgbmVlZHMgdG8gYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVNjb3BlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgcmVzb3VyY2VzIHRoYXQgdXNlIENJRFJzIGZyb20gdGhpcyBJUEFNIHBvb2wuIFJlc291cmNlcyB0aGF0IGRvIG5vdCBoYXZlXG4gICAqIHRoZXNlIHRhZ3Mgd2lsbCBub3QgYmUgYWxsb3dlZCB0byBhbGxvY2F0ZSBzcGFjZSBmcm9tIHRoZSBwb29sLiBJZiB0aGUgcmVzb3VyY2VzIGhhdmUgdGhlaXIgdGFnc1xuICAgKiBjaGFuZ2VkIGFmdGVyIHRoZXkgaGF2ZSBhbGxvY2F0ZWQgc3BhY2Ugb3IgaWYgdGhlIGFsbG9jYXRpb24gdGFnZ2luZyByZXF1aXJlbWVudHMgYXJlIGNoYW5nZWQgb25cbiAgICogdGhlIHBvb2wsIHRoZSByZXNvdXJjZSBtYXkgYmUgbWFya2VkIGFzIG5vbmNvbXBsaWFudC5cbiAgICovXG4gIHJlYWRvbmx5IGFsbG9jYXRpb25SZXNvdXJjZVRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBtb3JlIGFyZ3VtZW50c1xuICAvLyBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy92cGNfaXBhbV9wb29sI2FyZ3VtZW50LXJlZmVyZW5jZVxuICAvLyBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcHJvdmlzaW9uIENJRFJzIHRvIGFuIElQQU0gcG9vbC5cbiAqIFVzZWQgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sQ2lkclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sY2lkci5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcHY2IE5ldG1hc2sgbGVuZ3RoIGZvciB0aGUgQ0lEUlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBvb2wgcHJvdmlzaW9uZWQgd2l0aG91dCBuZXRtYXNrIGxlbmd0aCwgbmVlZCBjaWRyIHJhbmdlIGluIHRoaXMgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NiBDSURSIGJsb2NrIGZvciB0aGUgSVBBTSBwb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcG9vbCBwcm92aXNpb25lZCB3aXRob3V0IG5ldG1hc2sgbGVuZ3RoLCBuZWVkIG5ldG1hc2sgbGVuZ3RoIGluIHRoaXMgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2lkcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qb29sT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBQb29sIElEIHRvIGJlIHBhc3NlZCB0byB0aGUgVlBDIGNvbnN0cnVjdFxuICAgKiBAYXR0cmlidXRlIElwYW1Qb29sSWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIHVzZWQgdG8gYWRkIG9yIGNyZWF0ZSBhIG5ldyBJUEFNIHBvb2xcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSXBhbVBvb2wgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIHN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2xPdXRwdXRzOiBJcGFtUG9vbE91dHB1dHM7XG5cbiAgLyoqXG4gICAqIFBvb2wgSUQgdG8gYmUgcGFzc2VkIHRvIHRoZSBWUEMgY29uc3RydWN0XG4gICAqIEBhdHRyaWJ1dGUgSXBhbVBvb2xJZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjYgdG8gYmUgcHJvdmlzaW9uZWQgd2l0aCBQdWJsaWMgSVAgc291cmNlIHNldCB0byAnQW1hem9uJ1xuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUNpZHJzOiB0ZklwYW1Qb29sQ2lkci5WcGNJcGFtUG9vbENpZHJbXTtcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY0IHRvIGJlIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIHN1Ym5ldCBJUCByYW5nZSBpcyB3aXRoaW4gdGhlIFZQQyByYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlwdjRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBhc3NvY2lhdGUgYSBJUHY2IGFkZHJlc3Mgd2l0aCBJUEFNIHBvb2xcbiAgICovXG4gIHByb3Zpc2lvbkNpZHIoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJcGFtUG9vbENpZHJQcm92aXNpb25pbmdPcHRpb25zLFxuICApOiB0ZklwYW1Qb29sQ2lkci5WcGNJcGFtUG9vbENpZHI7XG59XG5cbi8qKlxuICogSVBBTSBzY29wZSBpcyB0aGUgaGlnaGVzdC1sZXZlbCBjb250YWluZXIgd2l0aGluIElQQU0uIEFuIElQQU0gY29udGFpbnMgdHdvIGRlZmF1bHQgc2NvcGVzLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtU2NvcGVQcm9wcyBleHRlbmRzIElwYW1TY29wZU9wdGlvbnMge1xuICAvKipcbiAgICogSVBBTSBpZCB0byB3aGljaCBzY29wZSBuZWVkcyB0byBiZSBhZGRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wZXJhdGluZyByZWdpb25zIGZvciB0aGUgSXBhbVxuICAgKiBSZXF1aXJlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgbG9jYWxlIGJlaW5nIHNldCBvbiBwb29sXG4gICAqL1xuICByZWFkb25seSBpcGFtT3BlcmF0aW5nUmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBpcGFtIHNjb3BlIGlkIHRvIGFkZCBhIHBvb2wgaW4gb3JkZXIgdG8gc3VwcG9ydCBkZWZhdWx0IHNjb3Blc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRocm93cyBhbiBlcnJvciBpZiBubyBzY29wZSBpZCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVNjb3BlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQmVpbmcgdXNlZCBpbiBJUEFNIGNsYXNzIHRvIGFkZCBwb29scyB0byBkZWZhdWx0IHNjb3BlIGNyZWF0ZWQgYnkgSVBBTS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtU2NvcGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIElQQU0gc2NvcGUgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRhZ3Mgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2NvcGVcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1TY29wZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gSVAgQWRkcmVzcyBNYW5hZ2VyIChJUEFNKS5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIENJRFIgTWFzayBmb3IgVnBjXG4gICAqIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5ldG1hc2sgbGVuZ3RoIGZvciBJUEFNIGF0dGFjaGVkIHRvIFZQQyBzZWNvbmRhcnkgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NCBvciBhbiBJcHY2IElQQU0gcG9vbFxuICAgKiBPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgQVdTIElwYW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwb29sIGF0dGFjaGVkIHRvIFZQQyBzZWNvbmRhcnkgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2w/OiBJSXBhbVBvb2w7XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2tOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtU2NvcGVPdXRwdXRzIHtcbiAgLyoqXG4gICAqIFNjb3BlIElEIHRvIGJlIHBhc3NlZCB0byB0aGUgVlBDIGNvbnN0cnVjdFxuICAgKiBAYXR0cmlidXRlIElwYW1TY29wZUlkXG4gICAqL1xuICByZWFkb25seSBpcGFtU2NvcGVJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgSXBhbVNjb3BlIENsYXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlwYW1TY29wZUJhc2Uge1xuICAvKiogc3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSBpcGFtU2NvcGVPdXRwdXRzOiBJcGFtU2NvcGVPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgc2NvcGUgb2Ygc3RhY2sgdG8gYmUgcGFzc2VkIGluIG9yZGVyIHRvIGNyZWF0ZVxuICAgKiBhIG5ldyBJUEFNIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgU2NvcGUgaWRzIGNyZWF0ZWQgYnkgdGhlIElQQU0gb3IgYSBuZXcgUmVzb3VyY2UgaWRcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBzY29wZSB0eXBlIGNhbiBiZSBlaXRoZXIgZGVmYXVsdCBvciBjdXN0b21cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlVHlwZT86IElwYW1TY29wZVR5cGU7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGFkZCBhIG5ldyBwb29sIHRvIGFuIElQQU0gc2NvcGVcbiAgICovXG4gIGFkZFBvb2woaWQ6IHN0cmluZywgb3B0aW9uczogUG9vbE9wdGlvbnMpOiBJSXBhbVBvb2w7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgSVBBTSBQb29sXG4gKiBQb29scyBlbmFibGUgeW91IHRvIG9yZ2FuaXplIHlvdXIgSVAgYWRkcmVzc2VzIGFjY29yZGluZyB0byB5b3VyIHJvdXRpbmcgYW5kIHNlY3VyaXR5IG5lZWRzXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxuICogQHNlZSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvdnBjX2lwYW1fcG9vbFxuICogQHJlc291cmNlIGF3c192cGNfaXBhbV9wb29sXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgSXBhbVBvb2wgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSUlwYW1Qb29sIHtcbiAgcHVibGljIGdldCBpcGFtUG9vbE91dHB1dHMoKTogSXBhbVBvb2xPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXBhbVBvb2xJZDogdGhpcy5pcGFtUG9vbElkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmlwYW1Qb29sT3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogUG9vbCBJRCB0byBiZSBwYXNzZWQgdG8gdGhlIFZQQyBjb25zdHJ1Y3RcbiAgICogQGF0dHJpYnV0ZSBJcGFtUG9vbElkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbVBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjYgdG8gYmUgcHJvdmlzaW9uZWQgd2l0aCBQdWJsaWMgSVAgc291cmNlIHNldCB0byAnQW1hem9uJ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1DaWRyczogdGZJcGFtUG9vbENpZHIuVnBjSXBhbVBvb2xDaWRyW10gPSBbXTtcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY0IHRvIGJlIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIHN1Ym5ldCBJUCByYW5nZSBpcyB3aXRoaW4gdGhlIFZQQyByYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1JcHY0Q2lkcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byBpcGFtUG9vbCByZXNvdXJjZSBjcmVhdGVkIGluIHRoaXMgY2xhc3NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lwYW1Qb29sOiB0ZklwYW1Qb29sLlZwY0lwYW1Qb29sO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtUG9vbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgY29uc3QgaXBhbVBvb2xOYW1lID1cbiAgICAgIHByb3BzLmlwYW1Qb29sTmFtZSA/P1xuICAgICAgTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6IFwiX1wiLFxuICAgICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICBpZiAocHJvcHMuYWRkcmVzc0ZhbWlseSA9PT0gQWRkcmVzc0ZhbWlseS5JUF9WNiAmJiAhcHJvcHMuYXdzU2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImF3c1NlcnZpY2UgaXMgcmVxdWlyZWQgd2hlbiBhZGRyZXNzRmFtaWx5IGlzIHNldCB0byBpcHY2XCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vQWRkIHRhZ3MgdG8gdGhlIElQQU0gUG9vbCBpZiBuYW1lIGlzIHByb3ZpZGVkXG4gICAgaWYgKGlwYW1Qb29sTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIGlwYW1Qb29sTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXBhbVBvb2wgPSBuZXcgdGZJcGFtUG9vbC5WcGNJcGFtUG9vbCh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGFkZHJlc3NGYW1pbHk6IHByb3BzLmFkZHJlc3NGYW1pbHksXG4gICAgICBsb2NhbGU6IHByb3BzLmxvY2FsZSxcbiAgICAgIGlwYW1TY29wZUlkOiBwcm9wcy5pcGFtU2NvcGVJZCxcbiAgICAgIHB1YmxpY0lwU291cmNlOiBwcm9wcy5wdWJsaWNJcFNvdXJjZSxcbiAgICAgIGF3c1NlcnZpY2U6IHByb3BzLmF3c1NlcnZpY2UsXG4gICAgICBhbGxvY2F0aW9uUmVzb3VyY2VUYWdzOiBwcm9wcy5hbGxvY2F0aW9uUmVzb3VyY2VUYWdzLFxuICAgIH0pO1xuICAgIHRoaXMuaXBhbVBvb2xJZCA9IHRoaXMuX2lwYW1Qb29sLmlkO1xuXG4gICAgLy8gcHJvdmlzaW9uZWRDaWRyczogcHJvcHMuaXB2NFByb3Zpc2lvbmVkQ2lkcnM/Lm1hcCgoY2lkcikgPT4gKHsgY2lkciB9KSksXG4gICAgLy8gUG9wdWxhdGluZyB0byBjaGVjayBmb3Igc3VibmV0IHJhbmdlIGFnYWluc3QgYWxsIElQdjQgcmFuZ2VzIGFzc2lnbmVkIHRvIFZQQyBpbmNsdWRpbmcgSVBBTVxuICAgIHByb3BzLmlwdjRQcm92aXNpb25lZENpZHJzPy5mb3JFYWNoKChjaWRyKSA9PiB7XG4gICAgICB0aGlzLmlwYW1JcHY0Q2lkcnMucHVzaChjaWRyKTtcbiAgICAgIC8vIFRlcnJhZm9ybSBWcGNJcGFtUG9vbCBkb2VzIG5vdCBzdXBwb3J0IGlubGluZSBcIlByb3Zpc2lvbmVkQ2lkcnNcIiBwcm9wZXJ0eVxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtcHJvdmlzaW9uZWRjaWRyc1xuICAgICAgdGhpcy5wcm92aXNpb25DaWRyKFwiUHJvdmlzaW9uZWRDaWRyXCIsIHsgY2lkciB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIENJRFIgcHJvdmlzaW9uZWQgdG8gYW4gSVBBTSBwb29sLlxuICAgKiBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy92cGNfaXBhbV9wb29sX2NpZHJcbiAgICogQHBhcmFtIGlkIE5hbWUgb2YgUmVzb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgRWl0aGVyIGEgQ0lEUiBvciBuZXRtYXNrIGxlbmd0aCBtdXN0IGJlIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIGF3c192cGNfaXBhbV9wb29sX2NpZHJcbiAgICovXG4gIHB1YmxpYyBwcm92aXNpb25DaWRyKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyxcbiAgKTogdGZJcGFtUG9vbENpZHIuVnBjSXBhbVBvb2xDaWRyIHtcbiAgICAvLyBUT0RPOiBFcnJvciBpZiBuZWl0aGVyIG9yIGJvdGggY2lkciBhbmQgbmV0bWFzayBsZW5ndGggYXJlIHByb3ZpZGVkXG4gICAgY29uc3QgY2lkciA9IG5ldyB0ZklwYW1Qb29sQ2lkci5WcGNJcGFtUG9vbENpZHIodGhpcywgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtUG9vbElkOiB0aGlzLmlwYW1Qb29sSWQsXG4gICAgfSk7XG4gICAgdGhpcy5pcGFtQ2lkcnMucHVzaChjaWRyKTtcbiAgICByZXR1cm4gY2lkcjtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgY3VzdG9tIElwYW0gU2NvcGUsIGN1c3RvbSBJUEFNIHNjb3BlcyBjYW4gb25seSBiZSBwcml2YXRlXG4gKiAoY2FuIGJlIHVzZWQgZm9yIGFkZGluZyBjdXN0b20gc2NvcGVzIHRvIGFuIGV4aXN0aW5nIElQQU0pXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqIEBzZWUgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42OC4wL2RvY3MvcmVzb3VyY2VzL3ZwY19pcGFtX3Njb3BlXG4gKiBAcmVzb3VyY2UgYXdzX3ZwY19pcGFtX3Njb3BlXG4gKi9cbmNsYXNzIElwYW1TY29wZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJSXBhbVNjb3BlQmFzZSB7XG4gIHB1YmxpYyBnZXQgaXBhbVNjb3BlT3V0cHV0cygpOiBJcGFtU2NvcGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXBhbVNjb3BlSWQ6IHRoaXMuc2NvcGVJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5pcGFtU2NvcGVPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIHJlZmVyZW5jZSB0byBuZXdseSBjcmVhdGVkIFJlc291cmNlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pcGFtU2NvcGU6IHRmSXBhbVNjb3BlLlZwY0lwYW1TY29wZTtcblxuICAvKipcbiAgICogSUQgZm9yIFJlc291cmNlIElwYW1TY29wZVxuICAgKiBAYXR0cmlidXRlIElwYW1TY29wZUlkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyZSBpcGFtIHNjb3BlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJcGFtU2NvcGVQcm9wcztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHN0YWNrIHNjb3BlIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGFkZFBvb2wgbWV0aG9kIGlub3JkZXIgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogRGVmaW5lcyBzY29wZSB0eXBlIGNhbiBiZSBlaXRoZXIgZGVmYXVsdCBvciBjdXN0b21cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY29wZVR5cGU6IElwYW1TY29wZVR5cGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1TY29wZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLl9pcGFtU2NvcGUgPSBuZXcgdGZJcGFtU2NvcGUuVnBjSXBhbVNjb3BlKHNjb3BlLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGlwYW1JZDogcHJvcHMuaXBhbUlkLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YodGhpcy5faXBhbVNjb3BlKS5hZGQoXG4gICAgICBOQU1FX1RBRyxcbiAgICAgIHByb3BzLmlwYW1TY29wZU5hbWUgPz8gXCJDdXN0b21JcGFtU2NvcGVcIixcbiAgICApO1xuICAgIHRoaXMuc2NvcGVJZCA9IHRoaXMuX2lwYW1TY29wZS5pZDtcbiAgICB0aGlzLnNjb3BlVHlwZSA9IElwYW1TY29wZVR5cGUuQ1VTVE9NO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHBvb2wgdG8gdGhlIElQQU0gc2NvcGUuXG4gICAqIEBleHRlcm5hbFxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbCB7XG4gICAgcmV0dXJuIGNyZWF0ZUlwYW1Qb29sKHRoaXMuc2NvcGUsIGlkLCB0aGlzLnByb3BzLCBvcHRpb25zLCB0aGlzLnNjb3BlSWQpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgSVBBTSBkZWZhdWx0IHNjb3Blcy5cbiAqL1xuY2xhc3MgSXBhbVNjb3BlQmFzZSBpbXBsZW1lbnRzIElJcGFtU2NvcGVCYXNlIHtcbiAgcHVibGljIGdldCBpcGFtU2NvcGVPdXRwdXRzKCk6IElwYW1TY29wZU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBpcGFtU2NvcGVJZDogdGhpcy5zY29wZUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmlwYW1TY29wZU91dHB1dHM7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICByZWFkb25seSBzY29wZUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbVNjb3BlUHJvcHMsXG4gICAgcmVhZG9ubHkgc2NvcGVUeXBlPzogSXBhbVNjb3BlVHlwZSxcbiAgKSB7XG4gICAgdGhpcy5zY29wZVR5cGUgPSBJcGFtU2NvcGVUeXBlLkRFRkFVTFQ7XG4gICAgaWYgKCFwcm9wcy5pcGFtU2NvcGVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaXBhbVNjb3BlSWQgaXMgcmVxdWlyZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NvcGVJZCA9IHByb3BzLmlwYW1TY29wZUlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcG9vbCB0byB0aGUgSVBBTSBzY29wZS5cbiAgICogQGV4dGVybmFsXG4gICAqL1xuICBhZGRQb29sKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBvb2xPcHRpb25zKTogSUlwYW1Qb29sIHtcbiAgICByZXR1cm4gY3JlYXRlSXBhbVBvb2wodGhpcy5zY29wZSwgaWQsIHRoaXMucHJvcHMsIG9wdGlvbnMsIHRoaXMuc2NvcGVJZCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJcGFtT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBJcGFtIElEIHRvIGJlIHBhc3NlZCB0byB0aGUgVlBDIGNvbnN0cnVjdFxuICAgKiBAYXR0cmlidXRlIElwYW1JZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgSVBBTSB3aXRoIGRlZmF1bHQgcHVibGljIGFuZCBwcml2YXRlIHNjb3BlXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqIEBzZWUgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42OC4wL2RvY3MvcmVzb3VyY2VzL3ZwY19pcGFtXG4gKiBAcmVzb3VyY2UgYXdzX3ZwY19pcGFtXG4gKi9cbmV4cG9ydCBjbGFzcyBJcGFtIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSB7XG4gIHB1YmxpYyBnZXQgaXBhbU91dHB1dHMoKTogSXBhbU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBpcGFtSWQ6IHRoaXMuaXBhbUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmlwYW1PdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gZGVmYXVsdCBwdWJsaWMgSVBBTSBzY29wZSB0aHJvdWdoIGFkZCBwb29sIG1ldGhvZC5cbiAgICogVXNhZ2U6IFRvIGFkZCBhbiBJcGFtIFBvb2wgdG8gYSBkZWZhdWx0IHB1YmxpYyBzY29wZVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTY29wZTogSUlwYW1TY29wZUJhc2U7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGFjY2VzcyB0byBkZWZhdWx0IHByaXZhdGUgSVBBTSBzY29wZSB0aHJvdWdoIGFkZCBwb29sIG1ldGhvZC5cbiAgICogVXNhZ2U6IFRvIGFkZCBhbiBJcGFtIFBvb2wgdG8gYSBkZWZhdWx0IHByaXZhdGUgc2NvcGVcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gICAqICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU2NvcGU6IElJcGFtU2NvcGVCYXNlO1xuXG4gIC8vIFJlc291cmNlIElQQU1cbiAgcHJpdmF0ZSByZWFkb25seSBfaXBhbTogdGZJcGFtLlZwY0lwYW07XG4gIC8qKlxuICAgKiBBY2Nlc3MgdG8gSXBhbSByZXNvdXJjZSBpZCB0aGF0IGNhbiBiZSB1c2VkIGxhdGVyIHRvIGFkZCBhIGN1c3RvbSBwcml2YXRlIHNjb3BlIHRvIHRoaXMgSVBBTVxuICAgKiBAYXR0cmlidXRlIElwYW1JZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG9wZXJhdGluZyByZWdpb25zIGZvciBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlcmF0aW5nUmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc2NvcGVzIGNyZWF0ZWQgdW5kZXIgdGhpcyBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVzOiBJSXBhbVNjb3BlQmFzZVtdID0gW107XG5cbiAgLyoqXG4gICAqIElQQU0gbmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nXG4gICAqIEBkZWZhdWx0IG5vIHRhZyBzcGVjaWZpZWRcbiAgICogQGF0dHJpYnV0ZSBJcGFtTmFtZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1OYW1lPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogSXBhbVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBpZiAocHJvcHM/LmlwYW1OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaXBhbU5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXByb3BzPy5vcGVyYXRpbmdSZWdpb24gJiYgIXRoaXMuZW52LnJlZ2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHByb3ZpZGUgYXQgbGVhc3Qgb25lIG9wZXJhdGluZyByZWdpb25cIik7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVyYXRpbmdSZWdpb25zID0gcHJvcHM/Lm9wZXJhdGluZ1JlZ2lvbiA/PyBbdGhpcy5lbnYucmVnaW9uXTtcbiAgICB0aGlzLmlwYW1OYW1lID0gcHJvcHM/LmlwYW1OYW1lO1xuXG4gICAgdGhpcy5faXBhbSA9IG5ldyB0ZklwYW0uVnBjSXBhbSh0aGlzLCBcIklwYW1cIiwge1xuICAgICAgb3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zXG4gICAgICAgID8gdGhpcy5vcGVyYXRpbmdSZWdpb25zLm1hcCgocmVnaW9uKSA9PiAoeyByZWdpb25OYW1lOiByZWdpb24gfSkpXG4gICAgICAgIDogW10sXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMuX2lwYW07XG5cbiAgICB0aGlzLmlwYW1JZCA9IHRoaXMuX2lwYW0uaWQ7XG4gICAgdGhpcy5wdWJsaWNTY29wZSA9IG5ldyBJcGFtU2NvcGVCYXNlKHRoaXMsIFwiRGVmYXVsdFB1YmxpY1Njb3BlXCIsIHtcbiAgICAgIGlwYW1PcGVyYXRpbmdSZWdpb25zOiB0aGlzLm9wZXJhdGluZ1JlZ2lvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuX2lwYW0uaWQsXG4gICAgICBpcGFtU2NvcGVJZDogdGhpcy5faXBhbS5wdWJsaWNEZWZhdWx0U2NvcGVJZCxcbiAgICB9KTtcbiAgICB0aGlzLnByaXZhdGVTY29wZSA9IG5ldyBJcGFtU2NvcGVCYXNlKHRoaXMsIFwiRGVmYXVsdFByaXZhdGVTY29wZVwiLCB7XG4gICAgICBpcGFtT3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zLFxuICAgICAgaXBhbUlkOiB0aGlzLl9pcGFtLmlkLFxuICAgICAgaXBhbVNjb3BlSWQ6IHRoaXMuX2lwYW0ucHJpdmF0ZURlZmF1bHRTY29wZUlkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY29wZXMucHVzaCh0aGlzLnB1YmxpY1Njb3BlLCB0aGlzLnByaXZhdGVTY29wZSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYWRkIGN1c3RvbSBzY29wZSB0byBhbiBleGlzdGluZyBJUEFNXG4gICAqIEN1c3RvbSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICAgKi9cbiAgcHVibGljIGFkZFNjb3BlKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJcGFtU2NvcGVPcHRpb25zLFxuICApOiBJSXBhbVNjb3BlQmFzZSB7XG4gICAgY29uc3QgaXBhbVNjb3BlID0gbmV3IElwYW1TY29wZShzY29wZSwgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuaXBhbUlkLFxuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLnNjb3Blcy5wdXNoKGlwYW1TY29wZSk7XG4gICAgcmV0dXJuIGlwYW1TY29wZTtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBJcGFtUG9vbCB1bmRlciBzY29wZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlwYW1Qb29sKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBzY29wZU9wdGlvbnM6IElwYW1TY29wZVByb3BzLFxuICBwb29sT3B0aW9uczogUG9vbE9wdGlvbnMsXG4gIHNjb3BlSWQ6IHN0cmluZyxcbik6IElwYW1Qb29sIHtcbiAgY29uc3QgaXNMb2NhbGVJbk9wZXJhdGluZ1JlZ2lvbnMgPSBzY29wZU9wdGlvbnMuaXBhbU9wZXJhdGluZ1JlZ2lvbnNcbiAgICA/IHNjb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9uc1xuICAgICAgICAubWFwKChyZWdpb24pID0+ICh7IHJlZ2lvbk5hbWU6IHJlZ2lvbiB9KSlcbiAgICAgICAgLnNvbWUoKHJlZ2lvbikgPT4gcmVnaW9uLnJlZ2lvbk5hbWUgPT09IHBvb2xPcHRpb25zLmxvY2FsZSlcbiAgICA6IGZhbHNlO1xuXG4gIGlmICghaXNMb2NhbGVJbk9wZXJhdGluZ1JlZ2lvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVGhlIHByb3ZpZGVkIGxvY2FsZSAnJHtwb29sT3B0aW9ucy5sb2NhbGV9JyBpcyBub3QgaW4gdGhlIG9wZXJhdGluZyByZWdpb25zLmAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgSXBhbVBvb2woc2NvcGUsIGlkLCB7XG4gICAgaXBhbVBvb2xOYW1lOiBwb29sT3B0aW9ucy5pcGFtUG9vbE5hbWUsXG4gICAgYWRkcmVzc0ZhbWlseTogcG9vbE9wdGlvbnMuYWRkcmVzc0ZhbWlseSxcbiAgICBpcHY0UHJvdmlzaW9uZWRDaWRyczogcG9vbE9wdGlvbnMuaXB2NFByb3Zpc2lvbmVkQ2lkcnMsXG4gICAgaXBhbVNjb3BlSWQ6IHNjb3BlSWQsXG4gICAgbG9jYWxlOiBwb29sT3B0aW9ucy5sb2NhbGUsXG4gICAgcHVibGljSXBTb3VyY2U6IHBvb2xPcHRpb25zLnB1YmxpY0lwU291cmNlLFxuICAgIGF3c1NlcnZpY2U6IHBvb2xPcHRpb25zLmF3c1NlcnZpY2UsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,178 @@
1
+ import { keyPair as tfKeyPair } from "@cdktf/provider-aws";
2
+ import { Construct } from "constructs";
3
+ import { OperatingSystemType } from "./machine-image";
4
+ import { AwsConstructBase, AwsConstructProps, IAwsConstruct } from "../aws-construct";
5
+ import { IStringParameter } from "../storage/parameter";
6
+ /**
7
+ * The type of the key pair.
8
+ */
9
+ export declare enum KeyPairType {
10
+ /**
11
+ * An RSA key.
12
+ */
13
+ RSA = "rsa",
14
+ /**
15
+ * An ED25519 key.
16
+ *
17
+ * Note that ED25519 keys are not supported for Windows instances.
18
+ */
19
+ ED25519 = "ed25519"
20
+ }
21
+ /**
22
+ * The properties of a Key Pair
23
+ */
24
+ export interface KeyPairProps extends AwsConstructProps {
25
+ /**
26
+ * A unique name for the key pair.
27
+ *
28
+ * @default A generated name
29
+ */
30
+ readonly keyPairName?: string;
31
+ /**
32
+ * Creates a unique name beginning with the specified prefix.
33
+ *
34
+ * Conflicts with `keyPairName`. If neither `keyPairName` nor `keyPairNamePrefix` is provided,
35
+ * TerraConstructs will create a unique key name using the `gridUUID` as prefix.
36
+ *
37
+ * @default A generated name
38
+ */
39
+ readonly keyPairNamePrefix?: string;
40
+ /**
41
+ * The type of key pair.
42
+ *
43
+ * @default RSA (ignored if keyMaterial is provided)
44
+ */
45
+ readonly type?: KeyPairType;
46
+ /**
47
+ * The public key material.
48
+ *
49
+ * If this is provided the key is considered "imported". For imported
50
+ * keys, it is assumed that you already have the private key material
51
+ * so the private key material will not be returned or stored in
52
+ * AWS Systems Manager Parameter Store.
53
+ *
54
+ * The private key generated by this resource will be stored unencrypted
55
+ * in your Terraform state file.
56
+ *
57
+ * Omitting the publicKeyMaterial for production deployments is not recommended.
58
+ * Instead, generate a private key file outside of Terraform and distribute it
59
+ * securely to the system where Terraform will be run.
60
+ *
61
+ * @default a public and private key will be generated
62
+ */
63
+ readonly publicKeyMaterial?: string;
64
+ }
65
+ /**
66
+ * Outputs which may be registered for output via the Grid.
67
+ */
68
+ export interface KeyPairOutputs {
69
+ /**
70
+ * The unique name of the key pair.
71
+ */
72
+ readonly keyPairName: string;
73
+ /**
74
+ * The type of the key pair.
75
+ *
76
+ * @default no type specified
77
+ */
78
+ readonly type?: KeyPairType;
79
+ }
80
+ /**
81
+ * Attributes of a Key Pair.
82
+ */
83
+ export interface KeyPairAttributes {
84
+ /**
85
+ * The unique name of the key pair.
86
+ */
87
+ readonly keyPairName: string;
88
+ /**
89
+ * The type of the key pair.
90
+ *
91
+ * @default no type specified
92
+ */
93
+ readonly type?: KeyPairType;
94
+ }
95
+ /**
96
+ * An EC2 Key Pair.
97
+ */
98
+ export interface IKeyPair extends IAwsConstruct {
99
+ /** Strongly typed outputs */
100
+ readonly keyPairOutputs: KeyPairOutputs;
101
+ /**
102
+ * The name of the key pair.
103
+ *
104
+ * @attribute
105
+ */
106
+ readonly keyPairName: string;
107
+ /**
108
+ * The type of the key pair.
109
+ */
110
+ readonly type?: KeyPairType;
111
+ /**
112
+ * Used internally to determine whether the key pair is compatible with an OS type.
113
+ *
114
+ * @internal
115
+ */
116
+ _isOsCompatible(osType: OperatingSystemType): boolean;
117
+ }
118
+ /**
119
+ * An EC2 Key Pair.
120
+ *
121
+ * @resource AWS::EC2::KeyPair
122
+ */
123
+ export declare class KeyPair extends AwsConstructBase implements IKeyPair {
124
+ /**
125
+ * Imports a key pair based on the name.
126
+ */
127
+ static fromKeyPairName(scope: Construct, id: string, keyPairName: string): IKeyPair;
128
+ /**
129
+ * Imports a key pair with a name and optional type.
130
+ */
131
+ static fromKeyPairAttributes(scope: Construct, id: string, attrs: KeyPairAttributes): IKeyPair;
132
+ get keyPairOutputs(): KeyPairOutputs;
133
+ get outputs(): Record<string, any>;
134
+ /**
135
+ * The unique name of the key pair.
136
+ *
137
+ * @attribute
138
+ */
139
+ readonly keyPairName: string;
140
+ /**
141
+ * The fingerprint of the key pair.
142
+ *
143
+ * @attribute
144
+ */
145
+ readonly keyPairFingerprint: string;
146
+ /**
147
+ * The unique ID of the key pair.
148
+ *
149
+ * @attribute
150
+ */
151
+ readonly keyPairId: string;
152
+ /**
153
+ * The type of the key pair.
154
+ */
155
+ readonly type?: KeyPairType;
156
+ private _privateKey?;
157
+ private _privateKeySsm?;
158
+ private readonly _isImport;
159
+ readonly resource: tfKeyPair.KeyPair;
160
+ constructor(scope: Construct, id: string, props?: KeyPairProps);
161
+ /**
162
+ * Whether the key material was imported.
163
+ *
164
+ * Keys with imported material do not have their private key material stored
165
+ * or returned automatically.
166
+ */
167
+ get hasImportedMaterial(): boolean;
168
+ /**
169
+ * The Systems Manager Parameter Store parameter with the pair's private key material.
170
+ */
171
+ get privateKey(): IStringParameter;
172
+ /**
173
+ * Used internally to determine whether the key pair is compatible with an OS type.
174
+ *
175
+ * @internal
176
+ */
177
+ _isOsCompatible(osType: OperatingSystemType): boolean;
178
+ }