terraconstructs 0.0.24 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. package/.jsii +83665 -54911
  2. package/.mise.toml +1 -1
  3. package/.nvmrc +1 -1
  4. package/LICENSE +202 -674
  5. package/go.mod +9 -7
  6. package/go.sum +18 -14
  7. package/lib/asset-manager.d.ts +23 -0
  8. package/lib/asset-manager.js +3 -0
  9. package/lib/asset-staging.d.ts +178 -0
  10. package/lib/asset-staging.js +589 -0
  11. package/lib/assets.d.ts +359 -0
  12. package/lib/assets.js +55 -0
  13. package/lib/aws/arn.js +16 -15
  14. package/lib/aws/aws-asset-manager.d.ts +91 -0
  15. package/lib/aws/aws-asset-manager.js +244 -0
  16. package/lib/aws/aws-construct.js +1 -1
  17. package/lib/aws/aws-stack.d.ts +37 -0
  18. package/lib/aws/aws-stack.js +30 -9
  19. package/lib/aws/aws-tags.js +2 -2
  20. package/lib/aws/cloudwatch/actions/appscaling.d.ts +15 -0
  21. package/lib/aws/cloudwatch/actions/appscaling.js +24 -0
  22. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  23. package/lib/aws/cloudwatch/actions/index.d.ts +3 -0
  24. package/lib/aws/cloudwatch/actions/index.js +4 -4
  25. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  26. package/lib/aws/cloudwatch/actions/sns.d.ts +14 -0
  27. package/lib/aws/cloudwatch/actions/sns.js +23 -0
  28. package/lib/aws/cloudwatch/actions/ssm.d.ts +72 -0
  29. package/lib/aws/cloudwatch/actions/ssm.js +104 -0
  30. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  31. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  32. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  33. package/lib/aws/cloudwatch/alarm.js +1 -1
  34. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  35. package/lib/aws/cloudwatch/dashboard.js +1 -1
  36. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  37. package/lib/aws/cloudwatch/graph.js +8 -8
  38. package/lib/aws/cloudwatch/layout.js +3 -3
  39. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  40. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  41. package/lib/aws/cloudwatch/log-group.js +1 -1
  42. package/lib/aws/cloudwatch/log-query.js +1 -1
  43. package/lib/aws/cloudwatch/log-stream.js +1 -1
  44. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  45. package/lib/aws/cloudwatch/metric.js +2 -2
  46. package/lib/aws/cloudwatch/pattern.js +3 -3
  47. package/lib/aws/cloudwatch/policy.js +1 -1
  48. package/lib/aws/cloudwatch/query-definition.js +2 -2
  49. package/lib/aws/cloudwatch/stats.js +1 -1
  50. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  51. package/lib/aws/cloudwatch/text.js +1 -1
  52. package/lib/aws/cloudwatch/variable.js +3 -3
  53. package/lib/aws/cloudwatch/widget.js +1 -1
  54. package/lib/aws/compute/access-log.d.ts +478 -0
  55. package/lib/aws/compute/access-log.js +649 -0
  56. package/lib/aws/compute/activity.js +1 -1
  57. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  58. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  59. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  60. package/lib/aws/compute/alb/application-listener.js +1 -1
  61. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  62. package/lib/aws/compute/alb/application-target-group.js +1 -1
  63. package/lib/aws/compute/alb/conditions.js +1 -1
  64. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  65. package/lib/aws/compute/alb/trust-store.js +1 -1
  66. package/lib/aws/compute/api-definition.d.ts +106 -0
  67. package/lib/aws/compute/api-definition.js +200 -0
  68. package/lib/aws/compute/api-key.d.ts +184 -0
  69. package/lib/aws/compute/api-key.js +197 -0
  70. package/lib/aws/compute/apigateway-canned-metrics.generated.d.ts +169 -0
  71. package/lib/aws/compute/apigateway-canned-metrics.generated.js +63 -0
  72. package/lib/aws/compute/apigateway-util.d.ts +31 -0
  73. package/lib/aws/compute/apigateway-util.js +152 -0
  74. package/lib/aws/compute/architecture.js +1 -1
  75. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  76. package/lib/aws/compute/authorizer.d.ts +35 -0
  77. package/lib/aws/compute/authorizer.js +28 -0
  78. package/lib/aws/compute/authorizers/identity-source.d.ts +37 -0
  79. package/lib/aws/compute/authorizers/identity-source.js +61 -0
  80. package/lib/aws/compute/authorizers/index.d.ts +2 -0
  81. package/lib/aws/compute/authorizers/index.js +20 -0
  82. package/lib/aws/compute/authorizers/lambda.d.ts +140 -0
  83. package/lib/aws/compute/authorizers/lambda.js +208 -0
  84. package/lib/aws/compute/base-path-mapping.d.ts +49 -0
  85. package/lib/aws/compute/base-path-mapping.js +52 -0
  86. package/lib/aws/compute/base-scalable-attribute.js +3 -3
  87. package/lib/aws/compute/bastion-host.js +1 -1
  88. package/lib/aws/compute/chain.js +1 -1
  89. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  90. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  91. package/lib/aws/compute/client-vpn-route.js +2 -2
  92. package/lib/aws/compute/code.d.ts +415 -0
  93. package/lib/aws/compute/code.js +424 -0
  94. package/lib/aws/compute/condition.js +1 -1
  95. package/lib/aws/compute/connections.js +1 -1
  96. package/lib/aws/compute/cors.d.ts +102 -0
  97. package/lib/aws/compute/cors.js +33 -0
  98. package/lib/aws/compute/deployment.d.ts +83 -0
  99. package/lib/aws/compute/deployment.js +158 -0
  100. package/lib/aws/compute/domain-name.d.ts +153 -0
  101. package/lib/aws/compute/domain-name.js +158 -0
  102. package/lib/aws/compute/event-invoke-config.d.ts +2 -2
  103. package/lib/aws/compute/event-invoke-config.js +4 -4
  104. package/lib/aws/compute/event-source-filter.js +2 -2
  105. package/lib/aws/compute/event-source-mapping.d.ts +2 -2
  106. package/lib/aws/compute/event-source-mapping.js +9 -7
  107. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  108. package/lib/aws/compute/event-sources/s3.js +1 -1
  109. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  110. package/lib/aws/compute/event-sources/sqs.js +3 -2
  111. package/lib/aws/compute/fields.js +4 -4
  112. package/lib/aws/compute/function-alias.d.ts +1 -0
  113. package/lib/aws/compute/function-alias.js +8 -2
  114. package/lib/aws/compute/function-base.d.ts +15 -0
  115. package/lib/aws/compute/function-base.js +4 -4
  116. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  117. package/lib/aws/compute/function-destinations/function.js +1 -1
  118. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  119. package/lib/aws/compute/function-nodejs/bundling.d.ts +75 -0
  120. package/lib/aws/compute/function-nodejs/bundling.js +405 -0
  121. package/lib/aws/compute/function-nodejs/function.d.ts +99 -0
  122. package/lib/aws/compute/function-nodejs/function.js +175 -0
  123. package/lib/aws/compute/function-nodejs/index.d.ts +2 -0
  124. package/lib/aws/compute/function-nodejs/index.js +19 -0
  125. package/lib/aws/compute/function-nodejs/package-installation.d.ts +8 -0
  126. package/lib/aws/compute/function-nodejs/package-installation.js +36 -0
  127. package/lib/aws/compute/function-nodejs/package-manager.d.ts +33 -0
  128. package/lib/aws/compute/function-nodejs/package-manager.js +99 -0
  129. package/lib/aws/compute/function-nodejs/types.d.ts +410 -0
  130. package/lib/aws/compute/function-nodejs/types.js +81 -0
  131. package/lib/aws/compute/function-nodejs/util.d.ts +60 -0
  132. package/lib/aws/compute/function-nodejs/util.js +202 -0
  133. package/lib/aws/compute/function-url.d.ts +2 -2
  134. package/lib/aws/compute/function-url.js +4 -4
  135. package/lib/aws/compute/function.d.ts +34 -4
  136. package/lib/aws/compute/function.js +91 -17
  137. package/lib/aws/compute/gateway-response.d.ts +157 -0
  138. package/lib/aws/compute/gateway-response.js +156 -0
  139. package/lib/aws/compute/handler.d.ts +10 -0
  140. package/lib/aws/compute/handler.js +20 -0
  141. package/lib/aws/compute/index.d.ts +27 -0
  142. package/lib/aws/compute/index.js +29 -1
  143. package/lib/aws/compute/instance-types.js +1 -1
  144. package/lib/aws/compute/instance.js +1 -1
  145. package/lib/aws/compute/integration.d.ts +311 -0
  146. package/lib/aws/compute/integration.js +165 -0
  147. package/lib/aws/compute/integrations/aws.d.ts +72 -0
  148. package/lib/aws/compute/integrations/aws.js +55 -0
  149. package/lib/aws/compute/integrations/http.d.ts +37 -0
  150. package/lib/aws/compute/integrations/http.js +35 -0
  151. package/lib/aws/compute/integrations/index.d.ts +6 -0
  152. package/lib/aws/compute/integrations/index.js +24 -0
  153. package/lib/aws/compute/integrations/lambda.d.ts +40 -0
  154. package/lib/aws/compute/integrations/lambda.js +73 -0
  155. package/lib/aws/compute/integrations/mock.d.ts +16 -0
  156. package/lib/aws/compute/integrations/mock.js +30 -0
  157. package/lib/aws/compute/integrations/request-context.d.ts +144 -0
  158. package/lib/aws/compute/integrations/request-context.js +3 -0
  159. package/lib/aws/compute/integrations/stepfunctions.d.ts +102 -0
  160. package/lib/aws/compute/integrations/stepfunctions.js +268 -0
  161. package/lib/aws/compute/ip-addresses.js +2 -2
  162. package/lib/aws/compute/ipam.js +1 -1
  163. package/lib/aws/compute/json-schema.d.ts +75 -0
  164. package/lib/aws/compute/json-schema.js +23 -0
  165. package/lib/aws/compute/key-pair.js +1 -1
  166. package/lib/aws/compute/lambda-api.d.ts +46 -0
  167. package/lib/aws/compute/lambda-api.js +64 -0
  168. package/lib/aws/compute/launch-template.js +2 -2
  169. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  170. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  171. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  172. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  173. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  174. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  175. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  176. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  177. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  178. package/lib/aws/compute/load-balancer.js +3 -3
  179. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  180. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  181. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  182. package/lib/aws/compute/machine-image/common.js +1 -1
  183. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  184. package/lib/aws/compute/method.d.ts +219 -0
  185. package/lib/aws/compute/method.js +396 -0
  186. package/lib/aws/compute/methodresponse.d.ts +28 -0
  187. package/lib/aws/compute/methodresponse.js +3 -0
  188. package/lib/aws/compute/model.d.ts +143 -0
  189. package/lib/aws/compute/model.js +141 -0
  190. package/lib/aws/compute/nat.js +5 -5
  191. package/lib/aws/compute/network-acl-types.js +2 -2
  192. package/lib/aws/compute/network-acl.js +3 -3
  193. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  194. package/lib/aws/compute/nlb/network-listener.js +1 -1
  195. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  196. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  197. package/lib/aws/compute/peer.js +1 -1
  198. package/lib/aws/compute/placement-group.js +1 -1
  199. package/lib/aws/compute/port.js +1 -1
  200. package/lib/aws/compute/prefix-list.js +1 -1
  201. package/lib/aws/compute/requestvalidator.d.ts +50 -0
  202. package/lib/aws/compute/requestvalidator.js +59 -0
  203. package/lib/aws/compute/resource.d.ts +223 -0
  204. package/lib/aws/compute/resource.js +316 -0
  205. package/lib/aws/compute/restapi.d.ts +510 -0
  206. package/lib/aws/compute/restapi.js +626 -0
  207. package/lib/aws/compute/route.js +8 -8
  208. package/lib/aws/compute/runtime.d.ts +282 -0
  209. package/lib/aws/compute/runtime.js +337 -0
  210. package/lib/aws/compute/scalable-target.js +3 -3
  211. package/lib/aws/compute/schedule.js +3 -3
  212. package/lib/aws/compute/security-group.js +1 -1
  213. package/lib/aws/compute/stage.d.ts +350 -0
  214. package/lib/aws/compute/stage.js +304 -0
  215. package/lib/aws/compute/state-graph.js +1 -1
  216. package/lib/aws/compute/state-machine-fragment.js +1 -1
  217. package/lib/aws/compute/state-machine.js +4 -4
  218. package/lib/aws/compute/states/choice.js +1 -1
  219. package/lib/aws/compute/states/custom-state.js +1 -1
  220. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  221. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  222. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  223. package/lib/aws/compute/states/distributed-map.js +1 -1
  224. package/lib/aws/compute/states/fail.js +1 -1
  225. package/lib/aws/compute/states/map-base.js +1 -1
  226. package/lib/aws/compute/states/map.js +1 -1
  227. package/lib/aws/compute/states/parallel.js +1 -1
  228. package/lib/aws/compute/states/pass.js +2 -2
  229. package/lib/aws/compute/states/state.js +1 -1
  230. package/lib/aws/compute/states/succeed.js +1 -1
  231. package/lib/aws/compute/states/task-base.js +2 -2
  232. package/lib/aws/compute/states/task.js +1 -1
  233. package/lib/aws/compute/states/wait.js +2 -2
  234. package/lib/aws/compute/step-scaling-action.js +3 -3
  235. package/lib/aws/compute/step-scaling-policy.js +1 -1
  236. package/lib/aws/compute/stepfunctions-api.d.ts +103 -0
  237. package/lib/aws/compute/stepfunctions-api.js +39 -0
  238. package/lib/aws/compute/subnet-v2.js +2 -2
  239. package/lib/aws/compute/subnet.js +1 -1
  240. package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
  241. package/lib/aws/compute/task-credentials.js +1 -1
  242. package/lib/aws/compute/task-input.js +1 -1
  243. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  244. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  245. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  246. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  247. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  248. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  249. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  250. package/lib/aws/compute/types.js +1 -1
  251. package/lib/aws/compute/usage-plan.d.ts +194 -0
  252. package/lib/aws/compute/usage-plan.js +174 -0
  253. package/lib/aws/compute/user-data.js +3 -3
  254. package/lib/aws/compute/volume.js +2 -2
  255. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  256. package/lib/aws/compute/vpc-endpoint.js +6 -6
  257. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  258. package/lib/aws/compute/vpc-link.d.ts +104 -0
  259. package/lib/aws/compute/vpc-link.js +137 -0
  260. package/lib/aws/compute/vpc-v2-base.js +1 -1
  261. package/lib/aws/compute/vpc-v2.js +2 -2
  262. package/lib/aws/compute/vpc.js +4 -4
  263. package/lib/aws/compute/vpn.js +3 -3
  264. package/lib/aws/edge/certificate.js +1 -1
  265. package/lib/aws/edge/distribution.js +3 -3
  266. package/lib/aws/edge/dns-alias-record-targets.js +3 -3
  267. package/lib/aws/edge/dns-record.js +13 -13
  268. package/lib/aws/edge/dns-zone.js +1 -1
  269. package/lib/aws/edge/function.js +2 -2
  270. package/lib/aws/edge/key-value-store.js +4 -4
  271. package/lib/aws/edge/origin.js +3 -3
  272. package/lib/aws/edge/response-headers-policy.js +1 -1
  273. package/lib/aws/encryption/alias.js +1 -1
  274. package/lib/aws/encryption/key.js +1 -1
  275. package/lib/aws/encryption/via-service-principal.js +1 -1
  276. package/lib/aws/iam/grant.js +2 -2
  277. package/lib/aws/iam/group.js +1 -1
  278. package/lib/aws/iam/instance-profile.js +1 -1
  279. package/lib/aws/iam/managed-policy.js +1 -1
  280. package/lib/aws/iam/oidc-provider.js +1 -1
  281. package/lib/aws/iam/policy-document.js +1 -1
  282. package/lib/aws/iam/policy-statement.js +1 -1
  283. package/lib/aws/iam/policy.js +1 -1
  284. package/lib/aws/iam/principals.js +20 -20
  285. package/lib/aws/iam/role.js +1 -1
  286. package/lib/aws/iam/saml-provider.js +2 -2
  287. package/lib/aws/iam/unknown-principal.js +1 -1
  288. package/lib/aws/iam/user.js +5 -5
  289. package/lib/aws/index.d.ts +1 -0
  290. package/lib/aws/index.js +4 -1
  291. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  292. package/lib/aws/network/subnet-group.js +3 -3
  293. package/lib/aws/network/subnet.js +4 -4
  294. package/lib/aws/notify/archive.js +1 -1
  295. package/lib/aws/notify/connection.js +3 -3
  296. package/lib/aws/notify/event-bus.js +3 -3
  297. package/lib/aws/notify/event-pattern.js +1 -1
  298. package/lib/aws/notify/input.js +2 -2
  299. package/lib/aws/notify/kinesis-stream.js +1 -1
  300. package/lib/aws/notify/notification-rule.d.ts +1 -1
  301. package/lib/aws/notify/notification-rule.js +5 -5
  302. package/lib/aws/notify/policy.js +1 -1
  303. package/lib/aws/notify/queue-policy.js +1 -1
  304. package/lib/aws/notify/queue.js +1 -1
  305. package/lib/aws/notify/resource-policy.js +1 -1
  306. package/lib/aws/notify/rule.js +1 -1
  307. package/lib/aws/notify/schedule.js +1 -1
  308. package/lib/aws/notify/subscription-filter.js +1 -1
  309. package/lib/aws/notify/subscription.js +4 -4
  310. package/lib/aws/notify/subscriptions/email.js +1 -1
  311. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  312. package/lib/aws/notify/subscriptions/sms.js +1 -1
  313. package/lib/aws/notify/subscriptions/sqs.js +1 -1
  314. package/lib/aws/notify/subscriptions/url.js +1 -1
  315. package/lib/aws/notify/targets/event-bus.js +1 -1
  316. package/lib/aws/notify/targets/function.js +1 -1
  317. package/lib/aws/notify/targets/log-group.js +2 -2
  318. package/lib/aws/notify/targets/sqs.js +1 -1
  319. package/lib/aws/notify/targets/state-machine.js +1 -1
  320. package/lib/aws/notify/topic-base.js +1 -1
  321. package/lib/aws/notify/topic.js +6 -5
  322. package/lib/aws/partition.d.ts +21 -0
  323. package/lib/aws/partition.js +42 -0
  324. package/lib/aws/storage/assets/image-asset.d.ts +379 -0
  325. package/lib/aws/storage/assets/image-asset.js +247 -0
  326. package/lib/aws/storage/assets/index.d.ts +2 -0
  327. package/lib/aws/storage/assets/index.js +21 -0
  328. package/lib/aws/storage/assets/s3.d.ts +125 -0
  329. package/lib/aws/storage/assets/s3.js +80 -0
  330. package/lib/aws/storage/auth-token.d.ts +25 -0
  331. package/lib/aws/storage/auth-token.js +54 -0
  332. package/lib/aws/storage/billing.js +1 -1
  333. package/lib/aws/storage/bucket-notifications.js +1 -1
  334. package/lib/aws/storage/bucket-policy.js +1 -1
  335. package/lib/aws/storage/bucket-source.d.ts +1 -1
  336. package/lib/aws/storage/bucket-source.js +4 -4
  337. package/lib/aws/storage/bucket.d.ts +14 -6
  338. package/lib/aws/storage/bucket.js +48 -40
  339. package/lib/aws/storage/capacity.js +1 -1
  340. package/lib/aws/storage/ecr-lifecycle.d.ts +88 -0
  341. package/lib/aws/storage/ecr-lifecycle.js +23 -0
  342. package/lib/aws/storage/ecr-repository.d.ts +446 -0
  343. package/lib/aws/storage/ecr-repository.js +685 -0
  344. package/lib/aws/storage/encryption.js +1 -1
  345. package/lib/aws/storage/index.d.ts +5 -0
  346. package/lib/aws/storage/index.js +10 -3
  347. package/lib/aws/storage/location.d.ts +17 -0
  348. package/lib/aws/storage/location.js +4 -0
  349. package/lib/aws/storage/notification-targets/function.js +1 -1
  350. package/lib/aws/storage/notification-targets/queue.js +1 -1
  351. package/lib/aws/storage/origin-access-identity.js +1 -1
  352. package/lib/aws/storage/parameter.js +2 -2
  353. package/lib/aws/storage/table.js +3 -3
  354. package/lib/aws/storage/util.d.ts +8 -20
  355. package/lib/aws/storage/util.js +56 -34
  356. package/lib/aws/util.d.ts +1 -0
  357. package/lib/aws/util.js +6 -1
  358. package/lib/bundling.d.ts +434 -0
  359. package/lib/bundling.js +368 -0
  360. package/lib/construct-base.js +2 -2
  361. package/lib/duration.js +1 -1
  362. package/lib/expiration.js +1 -1
  363. package/lib/fs/copy.d.ts +2 -0
  364. package/lib/fs/copy.js +57 -0
  365. package/lib/fs/fingerprint.d.ts +21 -0
  366. package/lib/fs/fingerprint.js +165 -0
  367. package/lib/fs/ignore.d.ts +107 -0
  368. package/lib/fs/ignore.js +190 -0
  369. package/lib/fs/index.d.ts +47 -0
  370. package/lib/fs/index.js +88 -0
  371. package/lib/fs/options.d.ts +110 -0
  372. package/lib/fs/options.js +60 -0
  373. package/lib/fs/utils.d.ts +11 -0
  374. package/lib/fs/utils.js +34 -0
  375. package/lib/index.d.ts +5 -0
  376. package/lib/index.js +7 -1
  377. package/lib/private/asset-staging.d.ts +83 -0
  378. package/lib/private/asset-staging.js +205 -0
  379. package/lib/private/cache.d.ts +17 -0
  380. package/lib/private/cache.js +35 -0
  381. package/lib/private/jsii-deprecated.d.ts +2 -0
  382. package/lib/private/jsii-deprecated.js +19 -0
  383. package/lib/private/unique-resource-name.js +3 -2
  384. package/lib/size.js +1 -1
  385. package/lib/stack-base.js +1 -1
  386. package/lib/terra-func.js +2 -2
  387. package/lib/time-zone.js +1 -1
  388. package/node_modules/@balena/dockerignore/CHANGELOG.md +31 -0
  389. package/node_modules/@balena/dockerignore/LICENSE.md +206 -0
  390. package/node_modules/@balena/dockerignore/README.md +261 -0
  391. package/node_modules/@balena/dockerignore/ignore.js +363 -0
  392. package/node_modules/@balena/dockerignore/index.d.ts +45 -0
  393. package/node_modules/@balena/dockerignore/package.json +49 -0
  394. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  395. package/node_modules/balanced-match/LICENSE.md +21 -0
  396. package/node_modules/balanced-match/README.md +97 -0
  397. package/node_modules/balanced-match/index.js +62 -0
  398. package/node_modules/balanced-match/package.json +48 -0
  399. package/node_modules/concat-map/.travis.yml +4 -0
  400. package/node_modules/concat-map/LICENSE +18 -0
  401. package/node_modules/concat-map/README.markdown +62 -0
  402. package/node_modules/concat-map/example/map.js +6 -0
  403. package/node_modules/concat-map/index.js +13 -0
  404. package/node_modules/concat-map/package.json +43 -0
  405. package/node_modules/concat-map/test/map.js +39 -0
  406. package/node_modules/ignore/LICENSE-MIT +21 -0
  407. package/node_modules/ignore/README.md +412 -0
  408. package/node_modules/ignore/index.d.ts +61 -0
  409. package/node_modules/ignore/index.js +636 -0
  410. package/node_modules/ignore/legacy.js +559 -0
  411. package/node_modules/ignore/package.json +74 -0
  412. package/node_modules/minimatch/LICENSE +15 -0
  413. package/node_modules/minimatch/README.md +230 -0
  414. package/node_modules/minimatch/minimatch.js +947 -0
  415. package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
  416. package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
  417. package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
  418. package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
  419. package/node_modules/minimatch/package.json +33 -0
  420. package/package.json +14 -5
  421. package/lib/aws/compute/function-nodejs.d.ts +0 -55
  422. package/lib/aws/compute/function-nodejs.js +0 -70
@@ -0,0 +1,424 @@
1
+ "use strict";
2
+ var _a, _b, _c, _d, _e, _f, _g, _h;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AssetImageCode = exports.EcrImageCode = exports.TerraformVariablesCode = exports.AssetCode = exports.InlineCode = exports.S3CodeV2 = exports.S3Code = exports.Code = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const child_process_1 = require("child_process");
7
+ const cdktf = require("cdktf");
8
+ const bundling_1 = require("../../bundling");
9
+ const aws_stack_1 = require("../aws-stack");
10
+ const iam = require("../iam");
11
+ // import { IAwsConstruct } from "../aws-construct";
12
+ const ecr_assets = require("../storage/assets/image-asset");
13
+ const s3_assets = require("../storage/assets/s3");
14
+ // TODO: Adopt UnscopedValidationError
15
+ // - https://github.com/aws/aws-cdk/pull/33382/
16
+ // - https://github.com/aws/aws-cdk/pull/33045
17
+ // import {
18
+ // UnscopedValidationError,
19
+ // ValidationError,
20
+ // } from "../../core/lib/errors";
21
+ /**
22
+ * Represents the Lambda Handler Code.
23
+ */
24
+ class Code {
25
+ /**
26
+ * Lambda handler code as an S3 object.
27
+ * @param bucket The S3 bucket
28
+ * @param key The object key
29
+ * @param objectVersion Optional S3 object version
30
+ */
31
+ static fromBucket(bucket, key, objectVersion) {
32
+ return new S3Code(bucket, key, objectVersion);
33
+ }
34
+ /**
35
+ * Lambda handler code as an S3 object.
36
+ * @param bucket The S3 bucket
37
+ * @param key The object key
38
+ * @param options Optional parameters for setting the code, current optional parameters to set here are
39
+ * 1. `objectVersion` to set S3 object version
40
+ * 2. `sourceKMSKey` to set KMS Key for encryption of code
41
+ */
42
+ static fromBucketV2(bucket, key, options) {
43
+ return new S3CodeV2(bucket, key, options);
44
+ }
45
+ /**
46
+ * DEPRECATED
47
+ * @deprecated use `fromBucket`
48
+ */
49
+ static bucket(bucket, key, objectVersion) {
50
+ return this.fromBucket(bucket, key, objectVersion);
51
+ }
52
+ /**
53
+ * Inline code for Lambda handler
54
+ * @returns `LambdaInlineCode` with inline code.
55
+ * @param code The actual handler code (the resulting zip file cannot exceed 4MB)
56
+ */
57
+ static fromInline(code) {
58
+ return new InlineCode(code);
59
+ }
60
+ /**
61
+ * DEPRECATED
62
+ * @deprecated use `fromInline`
63
+ */
64
+ static inline(code) {
65
+ return this.fromInline(code);
66
+ }
67
+ /**
68
+ * Loads the function code from a local disk path.
69
+ *
70
+ * @param path Either a directory with the Lambda code bundle or a .zip file
71
+ */
72
+ static fromAsset(path, options) {
73
+ return new AssetCode(path, options);
74
+ }
75
+ /**
76
+ * Runs a command to build the code asset that will be used.
77
+ *
78
+ * @param output Where the output of the command will be directed, either a directory or a .zip file with the output Lambda code bundle
79
+ * * For example, if you use the command to run a build script (e.g., [ 'node', 'bundle_code.js' ]), and the build script generates a directory `/my/lambda/code`
80
+ * containing code that should be ran in a Lambda function, then output should be set to `/my/lambda/code`
81
+ * @param command The command which will be executed to generate the output, for example, [ 'node', 'bundle_code.js' ]
82
+ * @param options options for the custom command, and other asset options -- but bundling options are not allowed.
83
+ */
84
+ static fromCustomCommand(output, command, options) {
85
+ if (command.length === 0) {
86
+ // throw new UnscopedValidationError(
87
+ throw new Error('command must contain at least one argument. For example, ["node", "buildFile.js"].');
88
+ }
89
+ const cmd = command[0];
90
+ const commandArguments = command.splice(1);
91
+ const proc = options?.commandOptions === undefined
92
+ ? (0, child_process_1.spawnSync)(cmd, commandArguments) // use the default spawnSyncOptions
93
+ : (0, child_process_1.spawnSync)(cmd, commandArguments, options.commandOptions);
94
+ if (proc.error) {
95
+ // throw new UnscopedValidationError(
96
+ throw new Error(`Failed to execute custom command: ${proc.error}`);
97
+ }
98
+ if (proc.status !== 0) {
99
+ // throw new UnscopedValidationError(
100
+ throw new Error(`${command.join(" ")} exited with status: ${proc.status}\n\nstdout: ${proc.stdout?.toString().trim()}\n\nstderr: ${proc.stderr?.toString().trim()}`);
101
+ }
102
+ return new AssetCode(output, options);
103
+ }
104
+ /**
105
+ * Loads the function code from an asset created by a Docker build.
106
+ *
107
+ * By default, the asset is expected to be located at `/asset` in the
108
+ * image.
109
+ *
110
+ * @param path The path to the directory containing the Docker file
111
+ * @param options Docker build options
112
+ */
113
+ static fromDockerBuild(path, options = {}) {
114
+ let imagePath = options.imagePath ?? "/asset/.";
115
+ // ensure imagePath ends with /. to copy the **content** at this path
116
+ if (imagePath.endsWith("/")) {
117
+ imagePath = `${imagePath}.`;
118
+ }
119
+ else if (!imagePath.endsWith("/.")) {
120
+ imagePath = `${imagePath}/.`;
121
+ }
122
+ const assetPath = bundling_1.DockerImage.fromBuild(path, options).cp(imagePath, options.outputPath);
123
+ return new AssetCode(assetPath);
124
+ }
125
+ /**
126
+ * DEPRECATED
127
+ * @deprecated use `fromAsset`
128
+ */
129
+ static asset(path) {
130
+ return this.fromAsset(path);
131
+ }
132
+ /**
133
+ * Creates a new Lambda source defined using Terraform variables.
134
+ *
135
+ * @returns a new instance of `TerraformVariablesCode`
136
+ * @param props optional construction properties of `TerraformVariablesCode`
137
+ */
138
+ static fromTerraformVariables(props) {
139
+ return new TerraformVariablesCode(props);
140
+ }
141
+ /**
142
+ * DEPRECATED
143
+ * @deprecated use `fromCfnParameters`
144
+ */
145
+ static terraformVariables(props) {
146
+ return this.fromTerraformVariables(props);
147
+ }
148
+ /**
149
+ * Use an existing ECR image as the Lambda code.
150
+ * @param repository the ECR repository that the image is in
151
+ * @param props properties to further configure the selected image
152
+ */
153
+ static fromEcrImage(repository, props) {
154
+ return new EcrImageCode(repository, props);
155
+ }
156
+ /**
157
+ * Create an ECR image from the specified asset and bind it as the Lambda code.
158
+ * @param directory the directory from which the asset must be created
159
+ * @param props properties to further configure the selected image
160
+ */
161
+ static fromAssetImage(directory, props = {}) {
162
+ return new AssetImageCode(directory, props);
163
+ }
164
+ }
165
+ exports.Code = Code;
166
+ _a = JSII_RTTI_SYMBOL_1;
167
+ Code[_a] = { fqn: "terraconstructs.aws.compute.Code", version: "0.1.0" };
168
+ /**
169
+ * Lambda code from an S3 archive.
170
+ */
171
+ class S3Code extends Code {
172
+ constructor(bucket, key, objectVersion) {
173
+ super();
174
+ this.key = key;
175
+ this.objectVersion = objectVersion;
176
+ this.isInline = false;
177
+ if (!bucket.bucketName) {
178
+ // throw new ValidationError(
179
+ throw new Error("bucketName is undefined for the provided bucket");
180
+ }
181
+ this.bucketName = bucket.bucketName;
182
+ }
183
+ bind(_scope) {
184
+ return {
185
+ s3Location: {
186
+ bucketName: this.bucketName,
187
+ objectKey: this.key,
188
+ objectVersion: this.objectVersion,
189
+ },
190
+ };
191
+ }
192
+ }
193
+ exports.S3Code = S3Code;
194
+ _b = JSII_RTTI_SYMBOL_1;
195
+ S3Code[_b] = { fqn: "terraconstructs.aws.compute.S3Code", version: "0.1.0" };
196
+ /**
197
+ * Lambda code from an S3 archive. With option to set KMSKey for encryption.
198
+ */
199
+ class S3CodeV2 extends Code {
200
+ constructor(bucket, key, options) {
201
+ super();
202
+ this.key = key;
203
+ this.options = options;
204
+ this.isInline = false;
205
+ if (!bucket.bucketName) {
206
+ // throw new ValidationError(
207
+ throw new Error("bucketName is undefined for the provided bucket");
208
+ }
209
+ this.bucketName = bucket.bucketName;
210
+ }
211
+ bind(_scope) {
212
+ return {
213
+ s3Location: {
214
+ bucketName: this.bucketName,
215
+ objectKey: this.key,
216
+ objectVersion: this.options?.objectVersion,
217
+ },
218
+ sourceKMSKeyArn: this.options?.sourceKMSKey?.keyArn,
219
+ };
220
+ }
221
+ }
222
+ exports.S3CodeV2 = S3CodeV2;
223
+ _c = JSII_RTTI_SYMBOL_1;
224
+ S3CodeV2[_c] = { fqn: "terraconstructs.aws.compute.S3CodeV2", version: "0.1.0" };
225
+ /**
226
+ * Lambda code from an inline string.
227
+ */
228
+ class InlineCode extends Code {
229
+ constructor(code) {
230
+ super();
231
+ this.code = code;
232
+ this.isInline = true;
233
+ if (code.length === 0) {
234
+ // throw new UnscopedValidationError(
235
+ throw new Error("Lambda inline code cannot be empty");
236
+ }
237
+ }
238
+ bind(_scope) {
239
+ return {
240
+ inlineCode: this.code,
241
+ };
242
+ }
243
+ }
244
+ exports.InlineCode = InlineCode;
245
+ _d = JSII_RTTI_SYMBOL_1;
246
+ InlineCode[_d] = { fqn: "terraconstructs.aws.compute.InlineCode", version: "0.1.0" };
247
+ /**
248
+ * Lambda code from a local directory.
249
+ */
250
+ class AssetCode extends Code {
251
+ /**
252
+ * @param path The path to the asset file or directory.
253
+ */
254
+ constructor(path, options = {}) {
255
+ super();
256
+ this.path = path;
257
+ this.options = options;
258
+ this.isInline = false;
259
+ }
260
+ bind(scope) {
261
+ // If the same AssetCode is used multiple times, retain only the first instantiation.
262
+ if (!this.asset) {
263
+ this.asset = new s3_assets.Asset(scope, "Code", {
264
+ path: this.path,
265
+ deployTime: true,
266
+ ...this.options,
267
+ });
268
+ }
269
+ else if (aws_stack_1.AwsStack.ofAwsConstruct(this.asset) !== aws_stack_1.AwsStack.ofAwsConstruct(scope)) {
270
+ // throw new ValidationError(
271
+ throw new Error(`Asset is already associated with another stack '${aws_stack_1.AwsStack.ofAwsConstruct(this.asset).gridUUID}'. ` +
272
+ "Create a new Code instance for every stack.");
273
+ }
274
+ if (!this.asset.isZipArchive) {
275
+ // throw new ValidationError(
276
+ throw new Error(`Asset must be a .zip file or a directory (${this.path})`);
277
+ }
278
+ return {
279
+ s3Location: {
280
+ bucketName: this.asset.s3BucketName,
281
+ objectKey: this.asset.s3ObjectKey,
282
+ },
283
+ sourceKMSKeyArn: this.options.sourceKMSKey?.keyArn,
284
+ };
285
+ }
286
+ }
287
+ exports.AssetCode = AssetCode;
288
+ _e = JSII_RTTI_SYMBOL_1;
289
+ AssetCode[_e] = { fqn: "terraconstructs.aws.compute.AssetCode", version: "0.1.0" };
290
+ /**
291
+ * Lambda code defined using 2 Terraform variables.
292
+ * Useful when you don't have access to the code of your Lambda from your CDK code, so you can't use Assets,
293
+ * and you want to deploy the Lambda in a pipeline, during Terraform execution.
294
+ */
295
+ class TerraformVariablesCode extends Code {
296
+ constructor(props = {}) {
297
+ super();
298
+ this.isInline = false;
299
+ this._bucketNameVar = props.bucketNameVar;
300
+ this._objectKeyVar = props.objectKeyVar;
301
+ this._sourceKMSKey = props.sourceKMSKey;
302
+ }
303
+ bind(scope) {
304
+ if (!this._bucketNameVar) {
305
+ this._bucketNameVar = new cdktf.TerraformVariable(scope, "LambdaSourceBucketNameParameter", {
306
+ type: "String",
307
+ });
308
+ }
309
+ if (!this._objectKeyVar) {
310
+ this._objectKeyVar = new cdktf.TerraformVariable(scope, "LambdaSourceObjectKeyParameter", {
311
+ type: "String",
312
+ });
313
+ }
314
+ return {
315
+ s3Location: {
316
+ bucketName: this._bucketNameVar.stringValue,
317
+ objectKey: this._objectKeyVar.stringValue,
318
+ },
319
+ sourceKMSKeyArn: this._sourceKMSKey?.keyArn,
320
+ };
321
+ }
322
+ /**
323
+ * Create a parameters map from this instance's Terraform variables.
324
+ *
325
+ * It returns a map with 2 keys that correspond to the names of the parameters defined in this Lambda code,
326
+ * and as values it contains the appropriate expressions pointing at the provided S3 location
327
+ * (most likely, obtained from a CodePipeline Artifact by calling the `artifact.s3Location` method).
328
+ * The result should be provided to the CloudFormation Action
329
+ * that is deploying the Stack that the Lambda with this code is part of,
330
+ * in the `parameterOverrides` property.
331
+ *
332
+ * @param location the location of the object in S3 that represents the Lambda code
333
+ */
334
+ assign(location) {
335
+ const ret = {};
336
+ ret[this.bucketNameVar] = location.bucketName;
337
+ ret[this.objectKeyVar] = location.objectKey;
338
+ return ret;
339
+ }
340
+ get bucketNameVar() {
341
+ if (this._bucketNameVar) {
342
+ return this._bucketNameVar.fqn;
343
+ }
344
+ else {
345
+ // throw new UnscopedValidationError(
346
+ throw new Error("Pass TerraformVariablesCode to a Lambda Function before accessing the bucketNameVar property");
347
+ }
348
+ }
349
+ get objectKeyVar() {
350
+ if (this._objectKeyVar) {
351
+ return this._objectKeyVar.fqn;
352
+ }
353
+ else {
354
+ // throw new UnscopedValidationError(
355
+ throw new Error("Pass TerraformVariablesCode to a Lambda Function before accessing the objectKeyVar property");
356
+ }
357
+ }
358
+ }
359
+ exports.TerraformVariablesCode = TerraformVariablesCode;
360
+ _f = JSII_RTTI_SYMBOL_1;
361
+ TerraformVariablesCode[_f] = { fqn: "terraconstructs.aws.compute.TerraformVariablesCode", version: "0.1.0" };
362
+ /**
363
+ * Represents a Docker image in ECR that can be bound as Lambda Code.
364
+ */
365
+ class EcrImageCode extends Code {
366
+ constructor(repository, props = {}) {
367
+ super();
368
+ this.repository = repository;
369
+ this.props = props;
370
+ this.isInline = false;
371
+ }
372
+ bind(_scope) {
373
+ this.repository.grantPull(new iam.ServicePrincipal("lambda.amazonaws.com"));
374
+ return {
375
+ image: {
376
+ imageUri: this.repository.repositoryUriForTagOrDigest(this.props?.tagOrDigest ?? this.props?.tag ?? "latest"),
377
+ cmd: this.props.cmd,
378
+ entrypoint: this.props.entrypoint,
379
+ workingDirectory: this.props.workingDirectory,
380
+ },
381
+ };
382
+ }
383
+ }
384
+ exports.EcrImageCode = EcrImageCode;
385
+ _g = JSII_RTTI_SYMBOL_1;
386
+ EcrImageCode[_g] = { fqn: "terraconstructs.aws.compute.EcrImageCode", version: "0.1.0" };
387
+ /**
388
+ * Represents an ECR image that will be constructed from the specified asset and can be bound as Lambda code.
389
+ */
390
+ class AssetImageCode extends Code {
391
+ constructor(directory, props) {
392
+ super();
393
+ this.directory = directory;
394
+ this.props = props;
395
+ this.isInline = false;
396
+ }
397
+ bind(scope) {
398
+ // If the same AssetImageCode is used multiple times, retain only the first instantiation.
399
+ if (!this.asset) {
400
+ this.asset = new ecr_assets.DockerImageAsset(scope, "AssetImage", {
401
+ directory: this.directory,
402
+ ...this.props,
403
+ });
404
+ this.asset.repository.grantPull(new iam.ServicePrincipal("lambda.amazonaws.com"));
405
+ }
406
+ else if (aws_stack_1.AwsStack.ofAwsConstruct(this.asset) !== aws_stack_1.AwsStack.ofAwsConstruct(scope)) {
407
+ // throw new ValidationError(
408
+ throw new Error(`Asset is already associated with another stack '${aws_stack_1.AwsStack.ofAwsConstruct(this.asset).gridUUID}'. ` +
409
+ "Create a new Code instance for every stack.");
410
+ }
411
+ return {
412
+ image: {
413
+ imageUri: this.asset.imageUri,
414
+ entrypoint: this.props.entrypoint,
415
+ cmd: this.props.cmd,
416
+ workingDirectory: this.props.workingDirectory,
417
+ },
418
+ };
419
+ }
420
+ }
421
+ exports.AssetImageCode = AssetImageCode;
422
+ _h = JSII_RTTI_SYMBOL_1;
423
+ AssetImageCode[_h] = { fqn: "terraconstructs.aws.compute.AssetImageCode", version: "0.1.0" };
424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9jb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQTBDO0FBQzFDLCtCQUErQjtBQUUvQiw2Q0FBaUU7QUFDakUsNENBQXdDO0FBRXhDLDhCQUE4QjtBQUU5QixvREFBb0Q7QUFDcEQsNERBQTREO0FBQzVELGtEQUFrRDtBQUNsRCxzQ0FBc0M7QUFDdEMsK0NBQStDO0FBQy9DLDhDQUE4QztBQUM5QyxXQUFXO0FBQ1gsNkJBQTZCO0FBQzdCLHFCQUFxQjtBQUNyQixrQ0FBa0M7QUFFbEM7O0dBRUc7QUFDSCxNQUFzQixJQUFJO0lBQ3hCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FDdEIsTUFBdUIsRUFDdkIsR0FBVyxFQUNYLGFBQXNCO1FBRXRCLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQ3hCLE1BQXVCLEVBQ3ZCLEdBQVcsRUFDWCxPQUF1QjtRQUV2QixPQUFPLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLE1BQXVCLEVBQ3ZCLEdBQVcsRUFDWCxhQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNuQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLElB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Q0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQ3RFLENBQUM7WUFDRCw2QkFBNkI7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYixtREFBbUQsb0JBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsS0FBSztnQkFDbEcsNkNBQTZDLENBRWhELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRTtnQkFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRO2dCQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO2dCQUNqQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO2dCQUNuQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjthQUM5QztTQUNGLENBQUM7SUFDSixDQUFDOztBQXhDSCx3Q0F5REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0ICogYXMgY2RrdGYgZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgRG9ja2VySW1hZ2UsIERvY2tlckJ1aWxkT3B0aW9ucyB9IGZyb20gXCIuLi8uLi9idW5kbGluZ1wiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgeyBJS2V5IH0gZnJvbSBcIi4uL2VuY3J5cHRpb25cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgKiBhcyBzdG9yYWdlIGZyb20gXCIuLi9zdG9yYWdlXCI7XG4vLyBpbXBvcnQgeyBJQXdzQ29uc3RydWN0IH0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCAqIGFzIGVjcl9hc3NldHMgZnJvbSBcIi4uL3N0b3JhZ2UvYXNzZXRzL2ltYWdlLWFzc2V0XCI7XG5pbXBvcnQgKiBhcyBzM19hc3NldHMgZnJvbSBcIi4uL3N0b3JhZ2UvYXNzZXRzL3MzXCI7XG4vLyBUT0RPOiBBZG9wdCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvclxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC8zMzM4Mi9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMzMwNDVcbi8vIGltcG9ydCB7XG4vLyAgIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLFxuLy8gICBWYWxpZGF0aW9uRXJyb3IsXG4vLyB9IGZyb20gXCIuLi8uLi9jb3JlL2xpYi9lcnJvcnNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBMYW1iZGEgSGFuZGxlciBDb2RlLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29kZSB7XG4gIC8qKlxuICAgKiBMYW1iZGEgaGFuZGxlciBjb2RlIGFzIGFuIFMzIG9iamVjdC5cbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0XG4gICAqIEBwYXJhbSBrZXkgVGhlIG9iamVjdCBrZXlcbiAgICogQHBhcmFtIG9iamVjdFZlcnNpb24gT3B0aW9uYWwgUzMgb2JqZWN0IHZlcnNpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJ1Y2tldChcbiAgICBidWNrZXQ6IHN0b3JhZ2UuSUJ1Y2tldCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBvYmplY3RWZXJzaW9uPzogc3RyaW5nLFxuICApOiBTM0NvZGUge1xuICAgIHJldHVybiBuZXcgUzNDb2RlKGJ1Y2tldCwga2V5LCBvYmplY3RWZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYW1iZGEgaGFuZGxlciBjb2RlIGFzIGFuIFMzIG9iamVjdC5cbiAgICogQHBhcmFtIGJ1Y2tldCBUaGUgUzMgYnVja2V0XG4gICAqIEBwYXJhbSBrZXkgVGhlIG9iamVjdCBrZXlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2V0dGluZyB0aGUgY29kZSwgY3VycmVudCBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHNldCBoZXJlIGFyZVxuICAgKiAxLiBgb2JqZWN0VmVyc2lvbmAgdG8gc2V0IFMzIG9iamVjdCB2ZXJzaW9uXG4gICAqIDIuIGBzb3VyY2VLTVNLZXlgIHRvIHNldCBLTVMgS2V5IGZvciBlbmNyeXB0aW9uIG9mIGNvZGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJ1Y2tldFYyKFxuICAgIGJ1Y2tldDogc3RvcmFnZS5JQnVja2V0LFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBCdWNrZXRPcHRpb25zLFxuICApOiBTM0NvZGVWMiB7XG4gICAgcmV0dXJuIG5ldyBTM0NvZGVWMihidWNrZXQsIGtleSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogREVQUkVDQVRFRFxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGZyb21CdWNrZXRgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJ1Y2tldChcbiAgICBidWNrZXQ6IHN0b3JhZ2UuSUJ1Y2tldCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBvYmplY3RWZXJzaW9uPzogc3RyaW5nLFxuICApOiBTM0NvZGUge1xuICAgIHJldHVybiB0aGlzLmZyb21CdWNrZXQoYnVja2V0LCBrZXksIG9iamVjdFZlcnNpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIElubGluZSBjb2RlIGZvciBMYW1iZGEgaGFuZGxlclxuICAgKiBAcmV0dXJucyBgTGFtYmRhSW5saW5lQ29kZWAgd2l0aCBpbmxpbmUgY29kZS5cbiAgICogQHBhcmFtIGNvZGUgVGhlIGFjdHVhbCBoYW5kbGVyIGNvZGUgKHRoZSByZXN1bHRpbmcgemlwIGZpbGUgY2Fubm90IGV4Y2VlZCA0TUIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbmxpbmUoY29kZTogc3RyaW5nKTogSW5saW5lQ29kZSB7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVDb2RlKGNvZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURURcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBmcm9tSW5saW5lYFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpbmxpbmUoY29kZTogc3RyaW5nKTogSW5saW5lQ29kZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUlubGluZShjb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgZnVuY3Rpb24gY29kZSBmcm9tIGEgbG9jYWwgZGlzayBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBFaXRoZXIgYSBkaXJlY3Rvcnkgd2l0aCB0aGUgTGFtYmRhIGNvZGUgYnVuZGxlIG9yIGEgLnppcCBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMsXG4gICk6IEFzc2V0Q29kZSB7XG4gICAgcmV0dXJuIG5ldyBBc3NldENvZGUocGF0aCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGNvbW1hbmQgdG8gYnVpbGQgdGhlIGNvZGUgYXNzZXQgdGhhdCB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIEBwYXJhbSBvdXRwdXQgV2hlcmUgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCB3aWxsIGJlIGRpcmVjdGVkLCBlaXRoZXIgYSBkaXJlY3Rvcnkgb3IgYSAuemlwIGZpbGUgd2l0aCB0aGUgb3V0cHV0IExhbWJkYSBjb2RlIGJ1bmRsZVxuICAgKiAqIEZvciBleGFtcGxlLCBpZiB5b3UgdXNlIHRoZSBjb21tYW5kIHRvIHJ1biBhIGJ1aWxkIHNjcmlwdCAoZS5nLiwgWyAnbm9kZScsICdidW5kbGVfY29kZS5qcycgXSksIGFuZCB0aGUgYnVpbGQgc2NyaXB0IGdlbmVyYXRlcyBhIGRpcmVjdG9yeSBgL215L2xhbWJkYS9jb2RlYFxuICAgKiBjb250YWluaW5nIGNvZGUgdGhhdCBzaG91bGQgYmUgcmFuIGluIGEgTGFtYmRhIGZ1bmN0aW9uLCB0aGVuIG91dHB1dCBzaG91bGQgYmUgc2V0IHRvIGAvbXkvbGFtYmRhL2NvZGVgXG4gICAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgdG8gZ2VuZXJhdGUgdGhlIG91dHB1dCwgZm9yIGV4YW1wbGUsIFsgJ25vZGUnLCAnYnVuZGxlX2NvZGUuanMnIF1cbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyBmb3IgdGhlIGN1c3RvbSBjb21tYW5kLCBhbmQgb3RoZXIgYXNzZXQgb3B0aW9ucyAtLSBidXQgYnVuZGxpbmcgb3B0aW9ucyBhcmUgbm90IGFsbG93ZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21DdXN0b21Db21tYW5kKFxuICAgIG91dHB1dDogc3RyaW5nLFxuICAgIGNvbW1hbmQ6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM/OiBDdXN0b21Db21tYW5kT3B0aW9ucyxcbiAgKTogQXNzZXRDb2RlIHtcbiAgICBpZiAoY29tbWFuZC5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2NvbW1hbmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4gRm9yIGV4YW1wbGUsIFtcIm5vZGVcIiwgXCJidWlsZEZpbGUuanNcIl0uJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY21kID0gY29tbWFuZFswXTtcbiAgICBjb25zdCBjb21tYW5kQXJndW1lbnRzID0gY29tbWFuZC5zcGxpY2UoMSk7XG5cbiAgICBjb25zdCBwcm9jID1cbiAgICAgIG9wdGlvbnM/LmNvbW1hbmRPcHRpb25zID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGF3blN5bmMoY21kLCBjb21tYW5kQXJndW1lbnRzKSAvLyB1c2UgdGhlIGRlZmF1bHQgc3Bhd25TeW5jT3B0aW9uc1xuICAgICAgICA6IHNwYXduU3luYyhjbWQsIGNvbW1hbmRBcmd1bWVudHMsIG9wdGlvbnMuY29tbWFuZE9wdGlvbnMpO1xuXG4gICAgaWYgKHByb2MuZXJyb3IpIHtcbiAgICAgIC8vIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgY3VzdG9tIGNvbW1hbmQ6ICR7cHJvYy5lcnJvcn1gKTtcbiAgICB9XG4gICAgaWYgKHByb2Muc3RhdHVzICE9PSAwKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke2NvbW1hbmQuam9pbihcIiBcIil9IGV4aXRlZCB3aXRoIHN0YXR1czogJHtwcm9jLnN0YXR1c31cXG5cXG5zdGRvdXQ6ICR7cHJvYy5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpfVxcblxcbnN0ZGVycjogJHtwcm9jLnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3NldENvZGUob3V0cHV0LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgZnVuY3Rpb24gY29kZSBmcm9tIGFuIGFzc2V0IGNyZWF0ZWQgYnkgYSBEb2NrZXIgYnVpbGQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBhc3NldCBpcyBleHBlY3RlZCB0byBiZSBsb2NhdGVkIGF0IGAvYXNzZXRgIGluIHRoZVxuICAgKiBpbWFnZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBEb2NrZXIgZmlsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBEb2NrZXIgYnVpbGQgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRG9ja2VyQnVpbGQoXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IERvY2tlckJ1aWxkQXNzZXRPcHRpb25zID0ge30sXG4gICk6IEFzc2V0Q29kZSB7XG4gICAgbGV0IGltYWdlUGF0aCA9IG9wdGlvbnMuaW1hZ2VQYXRoID8/IFwiL2Fzc2V0Ly5cIjtcblxuICAgIC8vIGVuc3VyZSBpbWFnZVBhdGggZW5kcyB3aXRoIC8uIHRvIGNvcHkgdGhlICoqY29udGVudCoqIGF0IHRoaXMgcGF0aFxuICAgIGlmIChpbWFnZVBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICBpbWFnZVBhdGggPSBgJHtpbWFnZVBhdGh9LmA7XG4gICAgfSBlbHNlIGlmICghaW1hZ2VQYXRoLmVuZHNXaXRoKFwiLy5cIikpIHtcbiAgICAgIGltYWdlUGF0aCA9IGAke2ltYWdlUGF0aH0vLmA7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzZXRQYXRoID0gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGgsIG9wdGlvbnMpLmNwKFxuICAgICAgaW1hZ2VQYXRoLFxuICAgICAgb3B0aW9ucy5vdXRwdXRQYXRoLFxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IEFzc2V0Q29kZShhc3NldFBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURURcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBmcm9tQXNzZXRgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzc2V0KHBhdGg6IHN0cmluZyk6IEFzc2V0Q29kZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUFzc2V0KHBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTGFtYmRhIHNvdXJjZSBkZWZpbmVkIHVzaW5nIFRlcnJhZm9ybSB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIGBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlYFxuICAgKiBAcGFyYW0gcHJvcHMgb3B0aW9uYWwgY29uc3RydWN0aW9uIHByb3BlcnRpZXMgb2YgYFRlcnJhZm9ybVZhcmlhYmxlc0NvZGVgXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21UZXJyYWZvcm1WYXJpYWJsZXMoXG4gICAgcHJvcHM/OiBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlUHJvcHMsXG4gICk6IFRlcnJhZm9ybVZhcmlhYmxlc0NvZGUge1xuICAgIHJldHVybiBuZXcgVGVycmFmb3JtVmFyaWFibGVzQ29kZShwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogREVQUkVDQVRFRFxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGZyb21DZm5QYXJhbWV0ZXJzYFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0ZXJyYWZvcm1WYXJpYWJsZXMoXG4gICAgcHJvcHM/OiBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlUHJvcHMsXG4gICk6IFRlcnJhZm9ybVZhcmlhYmxlc0NvZGUge1xuICAgIHJldHVybiB0aGlzLmZyb21UZXJyYWZvcm1WYXJpYWJsZXMocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhbiBleGlzdGluZyBFQ1IgaW1hZ2UgYXMgdGhlIExhbWJkYSBjb2RlLlxuICAgKiBAcGFyYW0gcmVwb3NpdG9yeSB0aGUgRUNSIHJlcG9zaXRvcnkgdGhhdCB0aGUgaW1hZ2UgaXMgaW5cbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIHNlbGVjdGVkIGltYWdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FY3JJbWFnZShcbiAgICByZXBvc2l0b3J5OiBzdG9yYWdlLklSZXBvc2l0b3J5LFxuICAgIHByb3BzPzogRWNySW1hZ2VDb2RlUHJvcHMsXG4gICkge1xuICAgIHJldHVybiBuZXcgRWNySW1hZ2VDb2RlKHJlcG9zaXRvcnksIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gRUNSIGltYWdlIGZyb20gdGhlIHNwZWNpZmllZCBhc3NldCBhbmQgYmluZCBpdCBhcyB0aGUgTGFtYmRhIGNvZGUuXG4gICAqIEBwYXJhbSBkaXJlY3RvcnkgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIHRoZSBhc3NldCBtdXN0IGJlIGNyZWF0ZWRcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIHNlbGVjdGVkIGltYWdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldEltYWdlKFxuICAgIGRpcmVjdG9yeTogc3RyaW5nLFxuICAgIHByb3BzOiBBc3NldEltYWdlQ29kZVByb3BzID0ge30sXG4gICkge1xuICAgIHJldHVybiBuZXcgQXNzZXRJbWFnZUNvZGUoZGlyZWN0b3J5LCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoaXMgQ29kZSBpcyBpbmxpbmUgY29kZSBvciBub3QuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHRoaXMgdmFsdWUgaXMgaWdub3JlZCBzaW5jZSBpbmxpbmUgaXMgbm93IGRldGVybWluZWQgYmFzZWQgb24gdGhlXG4gICAqIHRoZSBgaW5saW5lQ29kZWAgZmllbGQgb2YgYENvZGVDb25maWdgIHJldHVybmVkIGZyb20gYGJpbmQoKWAuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXNJbmxpbmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBsYW1iZGEgb3IgbGF5ZXIgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsb3cgdGhpcyBvYmplY3QgdG8gYmluZFxuICAgKiB0byB0aGUgc3RhY2ssIGFkZCByZXNvdXJjZXMgYW5kIGhhdmUgZnVuLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGJpbmRpbmcgc2NvcGUuIERvbid0IGJlIHNtYXJ0IGFib3V0IHRyeWluZyB0byBkb3duLWNhc3Qgb3JcbiAgICogYXNzdW1lIGl0J3MgaW5pdGlhbGl6ZWQuIFlvdSBtYXkganVzdCB1c2UgaXQgYXMgYSBjb25zdHJ1Y3Qgc2NvcGUuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYmluZChzY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZztcblxuICAvLyBUT0RPOiBwZW5kaW5nIGN1c3RvbSBDTEkgdG8gbW9jayBMYW1iZGEgZnVuY3Rpb24gaW52b2NhdGlvbnMgbG9jYWxseVxuICAvLyAvKipcbiAgLy8gICogQ2FsbGVkIGFmdGVyIHRoZSB0ZXJyYWZvcm0gcHJvdmlkZXIgZnVuY3Rpb24gcmVzb3VyY2UgaGFzIGJlZW4gY3JlYXRlZCB0byBhbGxvdyB0aGUgY29kZVxuICAvLyAgKiBjbGFzcyB0byBiaW5kIHRvIGl0LiBTcGVjaWZpY2FsbHkgaXQncyByZXF1aXJlZCB0byBhbGxvdyBhc3NldHMgdG8gYWRkXG4gIC8vICAqIG1ldGFkYXRhIGZvciB0b29saW5nIGxpa2UgU0FNIENMSSB0byBiZSBhYmxlIHRvIGZpbmQgdGhlaXIgb3JpZ2lucy5cbiAgLy8gICovXG4gIC8vIHB1YmxpYyBiaW5kVG9SZXNvdXJjZShcbiAgLy8gICBfcmVzb3VyY2U6IElBd3NDb25zdHJ1Y3QsXG4gIC8vICAgX29wdGlvbnM/OiBSZXNvdXJjZUJpbmRPcHRpb25zLFxuICAvLyApIHtcbiAgLy8gICByZXR1cm47XG4gIC8vIH1cbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYmluZGluZyBgQ29kZWAgaW50byBhIGBGdW5jdGlvbmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIGNvZGUgaW4gUzMgKG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBpbmxpbmVDb2RlYCBhbmQgYGltYWdlYCkuXG4gICAqIEBkZWZhdWx0IC0gY29kZSBpcyBub3QgYW4gczMgbG9jYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHMzTG9jYXRpb24/OiBzdG9yYWdlLlMzTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIElubGluZSBjb2RlIChtdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgczNMb2NhdGlvbmAgYW5kIGBpbWFnZWApLlxuICAgKiBAZGVmYXVsdCAtIGNvZGUgaXMgbm90IGlubGluZSBjb2RlXG4gICAqL1xuICByZWFkb25seSBpbmxpbmVDb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgaW1hZ2UgY29uZmlndXJhdGlvbiAobXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYHMzTG9jYXRpb25gIGFuZCBgaW5saW5lQ29kZWApLlxuICAgKiBAZGVmYXVsdCAtIGNvZGUgaXMgbm90IGFuIEVDUiBjb250YWluZXIgaW1hZ2VcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlPzogQ29kZUltYWdlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgaGFuZGxlciBjb2RlLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBBbWF6b24gUzMgbWFuYWdlZCBrZXlzKFNTRS1TMykga2V5IHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUtNU0tleUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBoYXNoIG9mIHRoZSBzb3VyY2UgY29kZSwgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGNvZGUgaGFzIGNoYW5nZWQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VDb2RlSGFzaD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgdGhlIGJpbmQgd2hlbiBhbiBFQ1IgaW1hZ2UgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlSW1hZ2VDb25maWcge1xuICAvKipcbiAgICogVVJJIHRvIHRoZSBEb2NrZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBpbWFnZVVyaTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9yIG92ZXJyaWRlIHRoZSBDTUQgb24gdGhlIHNwZWNpZmllZCBEb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICogVGhpcyBuZWVkcyB0byBiZSBpbiB0aGUgJ2V4ZWMgZm9ybScsIHZpei4sIGBbICdleGVjdXRhYmxlJywgJ3BhcmFtMScsICdwYXJhbTInIF1gLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jY21kXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBDTUQgc3BlY2lmaWVkIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGNtZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9yIG92ZXJyaWRlIHRoZSBFTlRSWVBPSU5UIG9uIHRoZSBzcGVjaWZpZWQgRG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqIEFuIEVOVFJZUE9JTlQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYSBjb250YWluZXIgdGhhdCB3aWxsIHJ1biBhcyBhbiBleGVjdXRhYmxlLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGluIHRoZSAnZXhlYyBmb3JtJywgdml6LiwgYFsgJ2V4ZWN1dGFibGUnLCAncGFyYW0xJywgJ3BhcmFtMicgXWAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyNlbnRyeXBvaW50XG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBFTlRSWVBPSU5UIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgV09SS0RJUiBvbiB0aGUgc3BlY2lmaWVkIERvY2tlciBpbWFnZSBvciBEb2NrZXJmaWxlLlxuICAgKiBBIFdPUktESVIgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZSBjb250YWluZXIgd2lsbCB1c2UuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyN3b3JrZGlyXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBXT1JLRElSIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGFtYmRhIGNvZGUgZnJvbSBhbiBTMyBhcmNoaXZlLlxuICovXG5leHBvcnQgY2xhc3MgUzNDb2RlIGV4dGVuZHMgQ29kZSB7XG4gIHB1YmxpYyByZWFkb25seSBpc0lubGluZSA9IGZhbHNlO1xuICBwcml2YXRlIGJ1Y2tldE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBidWNrZXQ6IHN0b3JhZ2UuSUJ1Y2tldCxcbiAgICBwcml2YXRlIGtleTogc3RyaW5nLFxuICAgIHByaXZhdGUgb2JqZWN0VmVyc2lvbj86IHN0cmluZyxcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghYnVja2V0LmJ1Y2tldE5hbWUpIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYnVja2V0TmFtZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBwcm92aWRlZCBidWNrZXRcIixcbiAgICAgICAgLy8gYnVja2V0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1Y2tldE5hbWUgPSBidWNrZXQuYnVja2V0TmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHMzTG9jYXRpb246IHtcbiAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMua2V5LFxuICAgICAgICBvYmplY3RWZXJzaW9uOiB0aGlzLm9iamVjdFZlcnNpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBMYW1iZGEgY29kZSBmcm9tIGFuIFMzIGFyY2hpdmUuIFdpdGggb3B0aW9uIHRvIHNldCBLTVNLZXkgZm9yIGVuY3J5cHRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBTM0NvZGVWMiBleHRlbmRzIENvZGUge1xuICBwdWJsaWMgcmVhZG9ubHkgaXNJbmxpbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBidWNrZXROYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYnVja2V0OiBzdG9yYWdlLklCdWNrZXQsXG4gICAgcHJpdmF0ZSBrZXk6IHN0cmluZyxcbiAgICBwcml2YXRlIG9wdGlvbnM/OiBCdWNrZXRPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghYnVja2V0LmJ1Y2tldE5hbWUpIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYnVja2V0TmFtZSBpcyB1bmRlZmluZWQgZm9yIHRoZSBwcm92aWRlZCBidWNrZXRcIixcbiAgICAgICAgLy8gYnVja2V0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1Y2tldE5hbWUgPSBidWNrZXQuYnVja2V0TmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHMzTG9jYXRpb246IHtcbiAgICAgICAgYnVja2V0TmFtZTogdGhpcy5idWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMua2V5LFxuICAgICAgICBvYmplY3RWZXJzaW9uOiB0aGlzLm9wdGlvbnM/Lm9iamVjdFZlcnNpb24sXG4gICAgICB9LFxuICAgICAgc291cmNlS01TS2V5QXJuOiB0aGlzLm9wdGlvbnM/LnNvdXJjZUtNU0tleT8ua2V5QXJuLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBMYW1iZGEgY29kZSBmcm9tIGFuIGlubGluZSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmxpbmVDb2RlIGV4dGVuZHMgQ29kZSB7XG4gIHB1YmxpYyByZWFkb25seSBpc0lubGluZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb2RlOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKGNvZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMYW1iZGEgaW5saW5lIGNvZGUgY2Fubm90IGJlIGVtcHR5XCIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlubGluZUNvZGU6IHRoaXMuY29kZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogTGFtYmRhIGNvZGUgZnJvbSBhIGxvY2FsIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0Q29kZSBleHRlbmRzIENvZGUge1xuICBwdWJsaWMgcmVhZG9ubHkgaXNJbmxpbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBhc3NldD86IHMzX2Fzc2V0cy5Bc3NldDtcblxuICAvKipcbiAgICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIGFzc2V0IGZpbGUgb3IgZGlyZWN0b3J5LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiBDb2RlQ29uZmlnIHtcbiAgICAvLyBJZiB0aGUgc2FtZSBBc3NldENvZGUgaXMgdXNlZCBtdWx0aXBsZSB0aW1lcywgcmV0YWluIG9ubHkgdGhlIGZpcnN0IGluc3RhbnRpYXRpb24uXG4gICAgaWYgKCF0aGlzLmFzc2V0KSB7XG4gICAgICB0aGlzLmFzc2V0ID0gbmV3IHMzX2Fzc2V0cy5Bc3NldChzY29wZSwgXCJDb2RlXCIsIHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICBkZXBsb3lUaW1lOiB0cnVlLFxuICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcy5hc3NldCkgIT09IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKVxuICAgICkge1xuICAgICAgLy8gdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFzc2V0IGlzIGFscmVhZHkgYXNzb2NpYXRlZCB3aXRoIGFub3RoZXIgc3RhY2sgJyR7QXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcy5hc3NldCkuZ3JpZFVVSUR9Jy4gYCArXG4gICAgICAgICAgXCJDcmVhdGUgYSBuZXcgQ29kZSBpbnN0YW5jZSBmb3IgZXZlcnkgc3RhY2suXCIsXG4gICAgICAgIC8vIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXNzZXQuaXNaaXBBcmNoaXZlKSB7XG4gICAgICAvLyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQXNzZXQgbXVzdCBiZSBhIC56aXAgZmlsZSBvciBhIGRpcmVjdG9yeSAoJHt0aGlzLnBhdGh9KWAsXG4gICAgICAgIC8vIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgczNMb2NhdGlvbjoge1xuICAgICAgICBidWNrZXROYW1lOiB0aGlzLmFzc2V0LnMzQnVja2V0TmFtZSxcbiAgICAgICAgb2JqZWN0S2V5OiB0aGlzLmFzc2V0LnMzT2JqZWN0S2V5LFxuICAgICAgfSxcbiAgICAgIHNvdXJjZUtNU0tleUFybjogdGhpcy5vcHRpb25zLnNvdXJjZUtNU0tleT8ua2V5QXJuLFxuICAgIH07XG4gIH1cblxuICAvLyBwdWJsaWMgYmluZFRvUmVzb3VyY2UoXG4gIC8vICAgcmVzb3VyY2U6IElBd3NDb25zdHJ1Y3QsXG4gIC8vICAgb3B0aW9uczogUmVzb3VyY2VCaW5kT3B0aW9ucyA9IHt9LFxuICAvLyApIHtcbiAgLy8gICBpZiAoIXRoaXMuYXNzZXQpIHtcbiAgLy8gICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gIC8vICAgICAgIFwiYmluZFRvUmVzb3VyY2UoKSBtdXN0IGJlIGNhbGxlZCBhZnRlciBiaW5kKClcIixcbiAgLy8gICAgICAgLy8gcmVzb3VyY2UsXG4gIC8vICAgICApO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IHJlc291cmNlUHJvcGVydHkgPSBvcHRpb25zLnJlc291cmNlUHJvcGVydHkgfHwgXCJDb2RlXCI7XG4gIC8vICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDMyXG4gIC8vICAgdGhpcy5hc3NldC5hZGRSZXNvdXJjZU1ldGFkYXRhKHJlc291cmNlLCByZXNvdXJjZVByb3BlcnR5KTtcbiAgLy8gfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQmluZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGFubm90YXRlIHdpdGggYXNzZXQgbWV0YWRhdGEuXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDMyXG4gICAqIEBkZWZhdWx0IENvZGVcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlUHJvcGVydHk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1WYXJpYWJsZXNDb2RlUHJvcHMge1xuICAvKipcbiAgICogVGhlIFRlcnJhZm9ybSB2YXJpYWJsZSB0aGF0IHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgdGhlIFMzIEJ1Y2tldFxuICAgKiB3aGVyZSB0aGUgTGFtYmRhIGNvZGUgd2lsbCBiZSBsb2NhdGVkIGluLlxuICAgKiBNdXN0IGJlIG9mIHR5cGUgJ1N0cmluZycuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmV3IHZhcmlhYmxlIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZVZhcj86IGNka3RmLlRlcnJhZm9ybVZhcmlhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgVGVycmFmb3JtIHZhcmlhYmxlIHRoYXQgcmVwcmVzZW50cyB0aGUgcGF0aCBpbnNpZGUgdGhlIFMzIEJ1Y2tldFxuICAgKiB3aGVyZSB0aGUgTGFtYmRhIGNvZGUgd2lsbCBiZSBsb2NhdGVkIGF0LlxuICAgKiBNdXN0IGJlIG9mIHR5cGUgJ1N0cmluZycuXG4gICAqXG4gICAqIEBkZWZhdWx0IGEgbmV3IHZhcmlhYmxlIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgb2JqZWN0S2V5VmFyPzogY2RrdGYuVGVycmFmb3JtVmFyaWFibGU7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgaGFuZGxlciBjb2RlLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBBbWF6b24gUzMgbWFuYWdlZCBrZXlzKFNTRS1TMykga2V5IHdpbGwgYmUgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUtNU0tleT86IElLZXk7XG59XG5cbi8qKlxuICogTGFtYmRhIGNvZGUgZGVmaW5lZCB1c2luZyAyIFRlcnJhZm9ybSB2YXJpYWJsZXMuXG4gKiBVc2VmdWwgd2hlbiB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvZGUgb2YgeW91ciBMYW1iZGEgZnJvbSB5b3VyIENESyBjb2RlLCBzbyB5b3UgY2FuJ3QgdXNlIEFzc2V0cyxcbiAqIGFuZCB5b3Ugd2FudCB0byBkZXBsb3kgdGhlIExhbWJkYSBpbiBhIHBpcGVsaW5lLCBkdXJpbmcgVGVycmFmb3JtIGV4ZWN1dGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlcnJhZm9ybVZhcmlhYmxlc0NvZGUgZXh0ZW5kcyBDb2RlIHtcbiAgcHVibGljIHJlYWRvbmx5IGlzSW5saW5lID0gZmFsc2U7XG4gIHByaXZhdGUgX2J1Y2tldE5hbWVWYXI/OiBjZGt0Zi5UZXJyYWZvcm1WYXJpYWJsZTtcbiAgcHJpdmF0ZSBfb2JqZWN0S2V5VmFyPzogY2RrdGYuVGVycmFmb3JtVmFyaWFibGU7XG4gIHByaXZhdGUgX3NvdXJjZUtNU0tleT86IElLZXk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFRlcnJhZm9ybVZhcmlhYmxlc0NvZGVQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuX2J1Y2tldE5hbWVWYXIgPSBwcm9wcy5idWNrZXROYW1lVmFyO1xuICAgIHRoaXMuX29iamVjdEtleVZhciA9IHByb3BzLm9iamVjdEtleVZhcjtcbiAgICB0aGlzLl9zb3VyY2VLTVNLZXkgPSBwcm9wcy5zb3VyY2VLTVNLZXk7XG4gIH1cblxuICBwdWJsaWMgYmluZChzY29wZTogQ29uc3RydWN0KTogQ29kZUNvbmZpZyB7XG4gICAgaWYgKCF0aGlzLl9idWNrZXROYW1lVmFyKSB7XG4gICAgICB0aGlzLl9idWNrZXROYW1lVmFyID0gbmV3IGNka3RmLlRlcnJhZm9ybVZhcmlhYmxlKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgXCJMYW1iZGFTb3VyY2VCdWNrZXROYW1lUGFyYW1ldGVyXCIsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX29iamVjdEtleVZhcikge1xuICAgICAgdGhpcy5fb2JqZWN0S2V5VmFyID0gbmV3IGNka3RmLlRlcnJhZm9ybVZhcmlhYmxlKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgXCJMYW1iZGFTb3VyY2VPYmplY3RLZXlQYXJhbWV0ZXJcIixcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzM0xvY2F0aW9uOiB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuX2J1Y2tldE5hbWVWYXIuc3RyaW5nVmFsdWUsXG4gICAgICAgIG9iamVjdEtleTogdGhpcy5fb2JqZWN0S2V5VmFyLnN0cmluZ1ZhbHVlLFxuICAgICAgfSxcbiAgICAgIHNvdXJjZUtNU0tleUFybjogdGhpcy5fc291cmNlS01TS2V5Py5rZXlBcm4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwYXJhbWV0ZXJzIG1hcCBmcm9tIHRoaXMgaW5zdGFuY2UncyBUZXJyYWZvcm0gdmFyaWFibGVzLlxuICAgKlxuICAgKiBJdCByZXR1cm5zIGEgbWFwIHdpdGggMiBrZXlzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgbmFtZXMgb2YgdGhlIHBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGlzIExhbWJkYSBjb2RlLFxuICAgKiBhbmQgYXMgdmFsdWVzIGl0IGNvbnRhaW5zIHRoZSBhcHByb3ByaWF0ZSBleHByZXNzaW9ucyBwb2ludGluZyBhdCB0aGUgcHJvdmlkZWQgUzMgbG9jYXRpb25cbiAgICogKG1vc3QgbGlrZWx5LCBvYnRhaW5lZCBmcm9tIGEgQ29kZVBpcGVsaW5lIEFydGlmYWN0IGJ5IGNhbGxpbmcgdGhlIGBhcnRpZmFjdC5zM0xvY2F0aW9uYCBtZXRob2QpLlxuICAgKiBUaGUgcmVzdWx0IHNob3VsZCBiZSBwcm92aWRlZCB0byB0aGUgQ2xvdWRGb3JtYXRpb24gQWN0aW9uXG4gICAqIHRoYXQgaXMgZGVwbG95aW5nIHRoZSBTdGFjayB0aGF0IHRoZSBMYW1iZGEgd2l0aCB0aGlzIGNvZGUgaXMgcGFydCBvZixcbiAgICogaW4gdGhlIGBwYXJhbWV0ZXJPdmVycmlkZXNgIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0gbG9jYXRpb24gdGhlIGxvY2F0aW9uIG9mIHRoZSBvYmplY3QgaW4gUzMgdGhhdCByZXByZXNlbnRzIHRoZSBMYW1iZGEgY29kZVxuICAgKi9cbiAgcHVibGljIGFzc2lnbihsb2NhdGlvbjogc3RvcmFnZS5TM0xvY2F0aW9uKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIGNvbnN0IHJldDogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICByZXRbdGhpcy5idWNrZXROYW1lVmFyXSA9IGxvY2F0aW9uLmJ1Y2tldE5hbWU7XG4gICAgcmV0W3RoaXMub2JqZWN0S2V5VmFyXSA9IGxvY2F0aW9uLm9iamVjdEtleTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIGdldCBidWNrZXROYW1lVmFyKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX2J1Y2tldE5hbWVWYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9idWNrZXROYW1lVmFyLmZxbjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlBhc3MgVGVycmFmb3JtVmFyaWFibGVzQ29kZSB0byBhIExhbWJkYSBGdW5jdGlvbiBiZWZvcmUgYWNjZXNzaW5nIHRoZSBidWNrZXROYW1lVmFyIHByb3BlcnR5XCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgb2JqZWN0S2V5VmFyKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX29iamVjdEtleVZhcikge1xuICAgICAgcmV0dXJuIHRoaXMuX29iamVjdEtleVZhci5mcW47XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJQYXNzIFRlcnJhZm9ybVZhcmlhYmxlc0NvZGUgdG8gYSBMYW1iZGEgRnVuY3Rpb24gYmVmb3JlIGFjY2Vzc2luZyB0aGUgb2JqZWN0S2V5VmFyIHByb3BlcnR5XCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBhIG5ldyBFY3JJbWFnZUNvZGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3JJbWFnZUNvZGVQcm9wcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9yIG92ZXJyaWRlIHRoZSBDTUQgb24gdGhlIHNwZWNpZmllZCBEb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICogVGhpcyBuZWVkcyB0byBiZSBpbiB0aGUgJ2V4ZWMgZm9ybScsIHZpei4sIGBbICdleGVjdXRhYmxlJywgJ3BhcmFtMScsICdwYXJhbTInIF1gLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jY21kXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBDTUQgc3BlY2lmaWVkIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGNtZD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IG9yIG92ZXJyaWRlIHRoZSBFTlRSWVBPSU5UIG9uIHRoZSBzcGVjaWZpZWQgRG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqIEFuIEVOVFJZUE9JTlQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYSBjb250YWluZXIgdGhhdCB3aWxsIHJ1biBhcyBhbiBleGVjdXRhYmxlLlxuICAgKiBUaGlzIG5lZWRzIHRvIGJlIGluIHRoZSAnZXhlYyBmb3JtJywgdml6LiwgYFsgJ2V4ZWN1dGFibGUnLCAncGFyYW0xJywgJ3BhcmFtMicgXWAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyNlbnRyeXBvaW50XG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBFTlRSWVBPSU5UIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5cG9pbnQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgV09SS0RJUiBvbiB0aGUgc3BlY2lmaWVkIERvY2tlciBpbWFnZSBvciBEb2NrZXJmaWxlLlxuICAgKiBBIFdPUktESVIgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRoZSBjb250YWluZXIgd2lsbCB1c2UuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyN3b3JrZGlyXG4gICAqIEBkZWZhdWx0IC0gdXNlIHRoZSBXT1JLRElSIGluIHRoZSBkb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB0YWcgdG8gdXNlIHdoZW4gcHVsbGluZyB0aGUgaW1hZ2UgZnJvbSBFQ1IuXG4gICAqIEBkZWZhdWx0ICdsYXRlc3QnXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgdGFnT3JEaWdlc3RgXG4gICAqL1xuICByZWFkb25seSB0YWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB0YWcgb3IgZGlnZXN0IHRvIHVzZSB3aGVuIHB1bGxpbmcgdGhlIGltYWdlIGZyb20gRUNSIChkaWdlc3RzIG11c3Qgc3RhcnQgd2l0aCBgc2hhMjU2OmApLlxuICAgKiBAZGVmYXVsdCAnbGF0ZXN0J1xuICAgKi9cbiAgcmVhZG9ubHkgdGFnT3JEaWdlc3Q/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIERvY2tlciBpbWFnZSBpbiBFQ1IgdGhhdCBjYW4gYmUgYm91bmQgYXMgTGFtYmRhIENvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBFY3JJbWFnZUNvZGUgZXh0ZW5kcyBDb2RlIHtcbiAgcHVibGljIHJlYWRvbmx5IGlzSW5saW5lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBvc2l0b3J5OiBzdG9yYWdlLklSZXBvc2l0b3J5LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEVjckltYWdlQ29kZVByb3BzID0ge30sXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgYmluZChfc2NvcGU6IENvbnN0cnVjdCk6IENvZGVDb25maWcge1xuICAgIHRoaXMucmVwb3NpdG9yeS5ncmFudFB1bGwobmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwibGFtYmRhLmFtYXpvbmF3cy5jb21cIikpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlOiB7XG4gICAgICAgIGltYWdlVXJpOiB0aGlzLnJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaUZvclRhZ09yRGlnZXN0KFxuICAgICAgICAgIHRoaXMucHJvcHM/LnRhZ09yRGlnZXN0ID8/IHRoaXMucHJvcHM/LnRhZyA/PyBcImxhdGVzdFwiLFxuICAgICAgICApLFxuICAgICAgICBjbWQ6IHRoaXMucHJvcHMuY21kLFxuICAgICAgICBlbnRyeXBvaW50OiB0aGlzLnByb3BzLmVudHJ5cG9pbnQsXG4gICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMucHJvcHMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSBhIG5ldyBBc3NldEltYWdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXRJbWFnZUNvZGVQcm9wc1xuICBleHRlbmRzIGVjcl9hc3NldHMuRG9ja2VySW1hZ2VBc3NldE9wdGlvbnMge1xuICAvKipcbiAgICogU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgQ01EIG9uIHRoZSBzcGVjaWZpZWQgRG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqIFRoaXMgbmVlZHMgdG8gYmUgaW4gdGhlICdleGVjIGZvcm0nLCB2aXouLCBgWyAnZXhlY3V0YWJsZScsICdwYXJhbTEnLCAncGFyYW0yJyBdYC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI2NtZFxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgQ01EIHNwZWNpZmllZCBpbiB0aGUgZG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqL1xuICByZWFkb25seSBjbWQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmeSBvciBvdmVycmlkZSB0aGUgRU5UUllQT0lOVCBvbiB0aGUgc3BlY2lmaWVkIERvY2tlciBpbWFnZSBvciBEb2NrZXJmaWxlLlxuICAgKiBBbiBFTlRSWVBPSU5UIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIGEgY29udGFpbmVyIHRoYXQgd2lsbCBydW4gYXMgYW4gZXhlY3V0YWJsZS5cbiAgICogVGhpcyBuZWVkcyB0byBiZSBpbiB0aGUgJ2V4ZWMgZm9ybScsIHZpei4sIGBbICdleGVjdXRhYmxlJywgJ3BhcmFtMScsICdwYXJhbTInIF1gLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jZW50cnlwb2ludFxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgRU5UUllQT0lOVCBpbiB0aGUgZG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqL1xuICByZWFkb25seSBlbnRyeXBvaW50Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgb3Igb3ZlcnJpZGUgdGhlIFdPUktESVIgb24gdGhlIHNwZWNpZmllZCBEb2NrZXIgaW1hZ2Ugb3IgRG9ja2VyZmlsZS5cbiAgICogQSBXT1JLRElSIGFsbG93cyB5b3UgdG8gY29uZmlndXJlIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGUgY29udGFpbmVyIHdpbGwgdXNlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jd29ya2RpclxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgV09SS0RJUiBpbiB0aGUgZG9ja2VyIGltYWdlIG9yIERvY2tlcmZpbGUuXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUNSIGltYWdlIHRoYXQgd2lsbCBiZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSBzcGVjaWZpZWQgYXNzZXQgYW5kIGNhbiBiZSBib3VuZCBhcyBMYW1iZGEgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0SW1hZ2VDb2RlIGV4dGVuZHMgQ29kZSB7XG4gIHB1YmxpYyByZWFkb25seSBpc0lubGluZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGFzc2V0PzogZWNyX2Fzc2V0cy5Eb2NrZXJJbWFnZUFzc2V0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQXNzZXRJbWFnZUNvZGVQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiBDb2RlQ29uZmlnIHtcbiAgICAvLyBJZiB0aGUgc2FtZSBBc3NldEltYWdlQ29kZSBpcyB1c2VkIG11bHRpcGxlIHRpbWVzLCByZXRhaW4gb25seSB0aGUgZmlyc3QgaW5zdGFudGlhdGlvbi5cbiAgICBpZiAoIXRoaXMuYXNzZXQpIHtcbiAgICAgIHRoaXMuYXNzZXQgPSBuZXcgZWNyX2Fzc2V0cy5Eb2NrZXJJbWFnZUFzc2V0KHNjb3BlLCBcIkFzc2V0SW1hZ2VcIiwge1xuICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAuLi50aGlzLnByb3BzLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFzc2V0LnJlcG9zaXRvcnkuZ3JhbnRQdWxsKFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMuYXNzZXQpICE9PSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSlcbiAgICApIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBc3NldCBpcyBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhbm90aGVyIHN0YWNrICcke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMuYXNzZXQpLmdyaWRVVUlEfScuIGAgK1xuICAgICAgICAgIFwiQ3JlYXRlIGEgbmV3IENvZGUgaW5zdGFuY2UgZm9yIGV2ZXJ5IHN0YWNrLlwiLFxuICAgICAgICAvLyBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGltYWdlOiB7XG4gICAgICAgIGltYWdlVXJpOiB0aGlzLmFzc2V0LmltYWdlVXJpLFxuICAgICAgICBlbnRyeXBvaW50OiB0aGlzLnByb3BzLmVudHJ5cG9pbnQsXG4gICAgICAgIGNtZDogdGhpcy5wcm9wcy5jbWQsXG4gICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMucHJvcHMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIC8vIFRPRE86IHBlbmRpbmcgY3VzdG9tIENMSSB0byBtb2NrIExhbWJkYSBmdW5jdGlvbiBpbnZvY2F0aW9ucyBsb2NhbGx5XG4gIC8vIHB1YmxpYyBiaW5kVG9SZXNvdXJjZShcbiAgLy8gICByZXNvdXJjZTogSUF3c0NvbnN0cnVjdCxcbiAgLy8gICBvcHRpb25zOiBSZXNvdXJjZUJpbmRPcHRpb25zID0ge30sXG4gIC8vICkge1xuICAvLyAgIGlmICghdGhpcy5hc3NldCkge1xuICAvLyAgICAgLy8gdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgLy8gICAgIHRocm93IG5ldyBFcnJvcihcImJpbmRUb1Jlc291cmNlKCkgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYmluZCgpXCIpOyAvLywgcmVzb3VyY2UpO1xuICAvLyAgIH1cblxuICAvLyAgIC8vIGNvbnN0IHJlc291cmNlUHJvcGVydHkgPSBfb3B0aW9ucy5yZXNvdXJjZVByb3BlcnR5IHx8IFwiQ29kZS5JbWFnZVVyaVwiO1xuXG4gIC8vICAgLy8gLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDU5M1xuICAvLyAgIC8vIHRoaXMuYXNzZXQuYWRkUmVzb3VyY2VNZXRhZGF0YShfcmVzb3VyY2UsIHJlc291cmNlUHJvcGVydHkpO1xuICAvLyB9XG59XG5cbi8qKlxuICogT3B0aW9ucyB3aGVuIGNyZWF0aW5nIGFuIGFzc2V0IGZyb20gYSBEb2NrZXIgYnVpbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG9ja2VyQnVpbGRBc3NldE9wdGlvbnMgZXh0ZW5kcyBEb2NrZXJCdWlsZE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBhdGggaW4gdGhlIERvY2tlciBpbWFnZSB3aGVyZSB0aGUgYXNzZXQgaXMgbG9jYXRlZCBhZnRlciB0aGUgYnVpbGRcbiAgICogb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAvYXNzZXRcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggb24gdGhlIGxvY2FsIGZpbGVzeXN0ZW0gd2hlcmUgdGhlIGFzc2V0IHdpbGwgYmUgY29waWVkXG4gICAqIHVzaW5nIGBkb2NrZXIgY3BgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgdW5pcXVlIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBgQXNzZXRDb2RlYCB3aXRoIGEgY3VzdG9tIGNvbW1hbmQsIHN1Y2ggYXMgcnVubmluZyBhIGJ1aWxkZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Db21tYW5kT3B0aW9ucyBleHRlbmRzIHMzX2Fzc2V0cy5Bc3NldE9wdGlvbnMge1xuICAvKipcbiAgICogb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIHNwYXduZWQgcHJvY2Vzcywgd2hpY2ggZGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHNwYXduZWQgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHNlZSBgY2hpbGRfcHJvY2Vzcy5TcGF3blN5bmNPcHRpb25zYCAoaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jaGlsZF9wcm9jZXNzLmh0bWwjY2hpbGRfcHJvY2Vzc3NwYXduc3luY2NvbW1hbmQtYXJncy1vcHRpb25zKS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRPcHRpb25zPzogeyBbb3B0aW9uczogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgY29kZSB1c2luZyBidWNrZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWNrZXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFMzIG9iamVjdCB2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBvYmplY3RWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIGhhbmRsZXIgY29kZS5cbiAgICogQGRlZmF1bHQgLSB0aGUgZGVmYXVsdCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIHdpdGggQW1hem9uIFMzIG1hbmFnZWQga2V5cyhTU0UtUzMpIGtleSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VLTVNLZXk/OiBJS2V5O1xufVxuIl19
@@ -300,7 +300,7 @@ class Condition {
300
300
  }
301
301
  exports.Condition = Condition;
302
302
  _a = JSII_RTTI_SYMBOL_1;
303
- Condition[_a] = { fqn: "terraconstructs.aws.compute.Condition", version: "0.0.24" };
303
+ Condition[_a] = { fqn: "terraconstructs.aws.compute.Condition", version: "0.1.0" };
304
304
  /**
305
305
  * Comparison Operator types
306
306
  */
@@ -178,7 +178,7 @@ class Connections {
178
178
  }
179
179
  exports.Connections = Connections;
180
180
  _a = JSII_RTTI_SYMBOL_1;
181
- Connections[_a] = { fqn: "terraconstructs.aws.compute.Connections", version: "0.0.24" };
181
+ Connections[_a] = { fqn: "terraconstructs.aws.compute.Connections", version: "0.1.0" };
182
182
  class ReactiveList {
183
183
  constructor() {
184
184
  this.elements = new Array();
@@ -0,0 +1,102 @@
1
+ import { Duration } from "../../duration";
2
+ export interface CorsOptions {
3
+ /**
4
+ * Specifies the response status code returned from the OPTIONS method.
5
+ *
6
+ * @default 204
7
+ */
8
+ readonly statusCode?: number;
9
+ /**
10
+ * Specifies the list of origins that are allowed to make requests to this
11
+ * resource. If you wish to allow all origins, specify `Cors.ALL_ORIGINS` or
12
+ * `[ * ]`.
13
+ *
14
+ * Responses will include the `Access-Control-Allow-Origin` response header.
15
+ * If specific origins are specified (not `Cors.ALL_ORIGINS`), the `Vary: Origin`
16
+ * response header will also be included.
17
+ *
18
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
19
+ */
20
+ readonly allowOrigins: string[];
21
+ /**
22
+ * The Access-Control-Allow-Headers response header is used in response to a
23
+ * preflight request which includes the Access-Control-Request-Headers to
24
+ * indicate which HTTP headers can be used during the actual request.
25
+ *
26
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers
27
+ * @default Cors.DEFAULT_HEADERS
28
+ */
29
+ readonly allowHeaders?: string[];
30
+ /**
31
+ * The Access-Control-Allow-Methods response header specifies the method or
32
+ * methods allowed when accessing the resource in response to a preflight request.
33
+ *
34
+ * If `ANY` is specified, it will be expanded to `Cors.ALL_METHODS`.
35
+ *
36
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods
37
+ * @default Cors.ALL_METHODS
38
+ */
39
+ readonly allowMethods?: string[];
40
+ /**
41
+ * The Access-Control-Allow-Credentials response header tells browsers whether
42
+ * to expose the response to frontend JavaScript code when the request's
43
+ * credentials mode (Request.credentials) is "include".
44
+ *
45
+ * When a request's credentials mode (Request.credentials) is "include",
46
+ * browsers will only expose the response to frontend JavaScript code if the
47
+ * Access-Control-Allow-Credentials value is true.
48
+ *
49
+ * Credentials are cookies, authorization headers or TLS client certificates.
50
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials
51
+ * @default false
52
+ */
53
+ readonly allowCredentials?: boolean;
54
+ /**
55
+ * The Access-Control-Max-Age response header indicates how long the results of
56
+ * a preflight request (that is the information contained in the
57
+ * Access-Control-Allow-Methods and Access-Control-Allow-Headers headers)
58
+ * can be cached.
59
+ *
60
+ * To disable caching altogether use `disableCache: true`.
61
+ *
62
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age
63
+ * @default - browser-specific (see reference)
64
+ */
65
+ readonly maxAge?: Duration;
66
+ /**
67
+ * Sets Access-Control-Max-Age to -1, which means that caching is disabled.
68
+ * This option cannot be used with `maxAge`.
69
+ *
70
+ * @default - cache is enabled
71
+ */
72
+ readonly disableCache?: boolean;
73
+ /**
74
+ * The Access-Control-Expose-Headers response header indicates which headers
75
+ * can be exposed as part of the response by listing their names.
76
+ *
77
+ * If you want clients to be able to access other headers, you have to list
78
+ * them using the Access-Control-Expose-Headers header.
79
+ *
80
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers
81
+ *
82
+ * @default - only the 6 CORS-safelisted response headers are exposed:
83
+ * Cache-Control, Content-Language, Content-Type, Expires, Last-Modified,
84
+ * Pragma
85
+ */
86
+ readonly exposeHeaders?: string[];
87
+ }
88
+ export declare class Cors {
89
+ /**
90
+ * All HTTP methods.
91
+ */
92
+ static readonly ALL_METHODS: string[];
93
+ /**
94
+ * All origins.
95
+ */
96
+ static readonly ALL_ORIGINS: string[];
97
+ /**
98
+ * The set of default headers allowed for CORS and useful for API Gateway.
99
+ */
100
+ static readonly DEFAULT_HEADERS: string[];
101
+ private constructor();
102
+ }