terraconstructs 0.2.4 → 0.2.6

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 (412) hide show
  1. package/.jsii +3099 -2917
  2. package/CLAUDE.md +6 -6
  3. package/README.md +1 -1
  4. package/lib/asset-staging.js +3 -3
  5. package/lib/aws/arn.js +5 -5
  6. package/lib/aws/aws-asset-manager.js +9 -9
  7. package/lib/aws/aws-construct.js +1 -1
  8. package/lib/aws/aws-stack.d.ts +19 -4
  9. package/lib/aws/aws-stack.js +43 -18
  10. package/lib/aws/aws-tags.d.ts +1 -1
  11. package/lib/aws/aws-tags.js +5 -5
  12. package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
  13. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  14. package/lib/aws/cloudwatch/actions/lambda.js +2 -2
  15. package/lib/aws/cloudwatch/actions/sns.js +1 -1
  16. package/lib/aws/cloudwatch/actions/ssm.js +2 -2
  17. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  18. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  19. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  20. package/lib/aws/cloudwatch/alarm.d.ts +1 -1
  21. package/lib/aws/cloudwatch/alarm.js +10 -10
  22. package/lib/aws/cloudwatch/composite-alarm.d.ts +1 -1
  23. package/lib/aws/cloudwatch/composite-alarm.js +7 -7
  24. package/lib/aws/cloudwatch/dashboard.d.ts +1 -1
  25. package/lib/aws/cloudwatch/dashboard.js +7 -7
  26. package/lib/aws/cloudwatch/data-protection-policy.d.ts +1 -1
  27. package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
  28. package/lib/aws/cloudwatch/graph.js +8 -8
  29. package/lib/aws/cloudwatch/layout.js +3 -3
  30. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  31. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  32. package/lib/aws/cloudwatch/log-group.d.ts +1 -1
  33. package/lib/aws/cloudwatch/log-group.js +7 -7
  34. package/lib/aws/cloudwatch/log-query.js +1 -1
  35. package/lib/aws/cloudwatch/log-stream.d.ts +1 -1
  36. package/lib/aws/cloudwatch/log-stream.js +3 -3
  37. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/metric-filter.js +3 -3
  39. package/lib/aws/cloudwatch/metric.js +6 -6
  40. package/lib/aws/cloudwatch/pattern.js +3 -3
  41. package/lib/aws/cloudwatch/policy.d.ts +1 -1
  42. package/lib/aws/cloudwatch/policy.js +3 -3
  43. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +1 -1
  44. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +1 -1
  45. package/lib/aws/cloudwatch/private/env-tokens.js +6 -6
  46. package/lib/aws/cloudwatch/query-definition.d.ts +1 -1
  47. package/lib/aws/cloudwatch/query-definition.js +4 -4
  48. package/lib/aws/cloudwatch/stats.js +1 -1
  49. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  50. package/lib/aws/cloudwatch/subscription-filter.js +6 -6
  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 +1 -1
  55. package/lib/aws/compute/access-log.js +5 -5
  56. package/lib/aws/compute/activity.d.ts +1 -1
  57. package/lib/aws/compute/activity.js +5 -5
  58. package/lib/aws/compute/alb/application-listener-action.d.ts +1 -1
  59. package/lib/aws/compute/alb/application-listener-action.js +5 -5
  60. package/lib/aws/compute/alb/application-listener-certificate.js +3 -3
  61. package/lib/aws/compute/alb/application-listener-rule.js +9 -9
  62. package/lib/aws/compute/alb/application-listener.js +5 -5
  63. package/lib/aws/compute/alb/application-load-balancer.js +8 -8
  64. package/lib/aws/compute/alb/application-target-group.js +7 -7
  65. package/lib/aws/compute/alb/conditions.js +3 -3
  66. package/lib/aws/compute/alb/trust-store-revocation.js +3 -3
  67. package/lib/aws/compute/alb/trust-store.js +7 -7
  68. package/lib/aws/compute/api-definition.js +9 -9
  69. package/lib/aws/compute/api-key.js +6 -6
  70. package/lib/aws/compute/architecture.js +1 -1
  71. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +1 -1
  72. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +6 -6
  73. package/lib/aws/compute/authorizer.js +1 -1
  74. package/lib/aws/compute/authorizers/identity-source.js +1 -1
  75. package/lib/aws/compute/authorizers/lambda.d.ts +1 -1
  76. package/lib/aws/compute/authorizers/lambda.js +6 -6
  77. package/lib/aws/compute/base-path-mapping.js +5 -5
  78. package/lib/aws/compute/base-scalable-attribute.js +1 -1
  79. package/lib/aws/compute/bastion-host.js +4 -4
  80. package/lib/aws/compute/chain.js +1 -1
  81. package/lib/aws/compute/client-vpn-authorization-rule.js +3 -3
  82. package/lib/aws/compute/client-vpn-endpoint.d.ts +1 -1
  83. package/lib/aws/compute/client-vpn-endpoint.js +9 -9
  84. package/lib/aws/compute/client-vpn-route.d.ts +1 -1
  85. package/lib/aws/compute/client-vpn-route.js +4 -4
  86. package/lib/aws/compute/code.d.ts +3 -3
  87. package/lib/aws/compute/code.js +15 -15
  88. package/lib/aws/compute/condition.js +1 -1
  89. package/lib/aws/compute/connections.js +1 -1
  90. package/lib/aws/compute/cors.js +1 -1
  91. package/lib/aws/compute/deployment.js +5 -5
  92. package/lib/aws/compute/domain-name.js +5 -5
  93. package/lib/aws/compute/event-invoke-config.d.ts +1 -1
  94. package/lib/aws/compute/event-invoke-config.js +3 -3
  95. package/lib/aws/compute/event-source-filter.js +2 -2
  96. package/lib/aws/compute/event-source-mapping.js +7 -7
  97. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  98. package/lib/aws/compute/event-sources/s3.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  100. package/lib/aws/compute/event-sources/sqs.js +5 -5
  101. package/lib/aws/compute/fields.d.ts +1 -1
  102. package/lib/aws/compute/fields.js +12 -12
  103. package/lib/aws/compute/function-alias.d.ts +1 -1
  104. package/lib/aws/compute/function-alias.js +3 -3
  105. package/lib/aws/compute/function-base.d.ts +1 -1
  106. package/lib/aws/compute/function-base.js +10 -9
  107. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  108. package/lib/aws/compute/function-destinations/function.js +1 -1
  109. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  110. package/lib/aws/compute/function-nodejs/bundling.js +6 -6
  111. package/lib/aws/compute/function-nodejs/function.js +4 -4
  112. package/lib/aws/compute/function-url.d.ts +1 -1
  113. package/lib/aws/compute/function-url.js +3 -3
  114. package/lib/aws/compute/function-vpc-config.generated.d.ts +5 -5
  115. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  116. package/lib/aws/compute/function.d.ts +2 -2
  117. package/lib/aws/compute/function.js +9 -9
  118. package/lib/aws/compute/gateway-response.d.ts +1 -1
  119. package/lib/aws/compute/gateway-response.js +4 -4
  120. package/lib/aws/compute/handler.js +1 -1
  121. package/lib/aws/compute/instance-types.js +1 -1
  122. package/lib/aws/compute/instance.d.ts +1 -1
  123. package/lib/aws/compute/instance.js +9 -9
  124. package/lib/aws/compute/integration.js +4 -4
  125. package/lib/aws/compute/integrations/aws.js +3 -3
  126. package/lib/aws/compute/integrations/http.js +1 -1
  127. package/lib/aws/compute/integrations/lambda.js +5 -5
  128. package/lib/aws/compute/integrations/mock.js +1 -1
  129. package/lib/aws/compute/integrations/stepfunctions.js +4 -4
  130. package/lib/aws/compute/ip-addresses.d.ts +1 -1
  131. package/lib/aws/compute/ip-addresses.js +10 -10
  132. package/lib/aws/compute/ipam.d.ts +1 -1
  133. package/lib/aws/compute/ipam.js +5 -5
  134. package/lib/aws/compute/key-pair.d.ts +1 -1
  135. package/lib/aws/compute/key-pair.js +6 -6
  136. package/lib/aws/compute/lambda-api.js +1 -1
  137. package/lib/aws/compute/launch-template.d.ts +1 -1
  138. package/lib/aws/compute/launch-template.js +12 -12
  139. package/lib/aws/compute/lb-shared/base-listener.js +9 -9
  140. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +2 -2
  141. package/lib/aws/compute/lb-shared/base-load-balancer.js +12 -12
  142. package/lib/aws/compute/lb-shared/base-target-group.d.ts +1 -1
  143. package/lib/aws/compute/lb-shared/base-target-group.js +15 -15
  144. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +34 -34
  145. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
  146. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +11 -6
  147. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
  148. package/lib/aws/compute/lb-shared/listener-action.d.ts +1 -1
  149. package/lib/aws/compute/lb-shared/listener-action.js +1 -1
  150. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  151. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  152. package/lib/aws/compute/lb-shared/util.js +5 -5
  153. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  154. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  155. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  156. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  157. package/lib/aws/compute/load-balancer.d.ts +1 -1
  158. package/lib/aws/compute/load-balancer.js +8 -8
  159. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  160. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  161. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  162. package/lib/aws/compute/machine-image/common.js +1 -1
  163. package/lib/aws/compute/machine-image/machine-image.js +10 -10
  164. package/lib/aws/compute/method.js +6 -6
  165. package/lib/aws/compute/model.js +5 -5
  166. package/lib/aws/compute/nat.js +10 -10
  167. package/lib/aws/compute/network-acl-types.js +2 -2
  168. package/lib/aws/compute/network-acl.d.ts +1 -1
  169. package/lib/aws/compute/network-acl.js +5 -5
  170. package/lib/aws/compute/nlb/network-listener-action.d.ts +1 -1
  171. package/lib/aws/compute/nlb/network-listener-action.js +2 -2
  172. package/lib/aws/compute/nlb/network-listener-certificate.js +2 -2
  173. package/lib/aws/compute/nlb/network-listener.js +5 -5
  174. package/lib/aws/compute/nlb/network-load-balancer.js +6 -6
  175. package/lib/aws/compute/nlb/network-target-group.js +4 -4
  176. package/lib/aws/compute/peer.js +7 -7
  177. package/lib/aws/compute/placement-group.d.ts +1 -1
  178. package/lib/aws/compute/placement-group.js +3 -3
  179. package/lib/aws/compute/port.js +5 -5
  180. package/lib/aws/compute/prefix-list.d.ts +1 -1
  181. package/lib/aws/compute/prefix-list.js +5 -5
  182. package/lib/aws/compute/private/context-stub.js +7 -7
  183. package/lib/aws/compute/private/ebs-util.d.ts +1 -1
  184. package/lib/aws/compute/private/ebs-util.js +3 -3
  185. package/lib/aws/compute/private/json-path.d.ts +1 -1
  186. package/lib/aws/compute/private/json-path.js +8 -8
  187. package/lib/aws/compute/requestvalidator.js +3 -3
  188. package/lib/aws/compute/resource.js +5 -5
  189. package/lib/aws/compute/restapi.d.ts +1 -1
  190. package/lib/aws/compute/restapi.js +11 -11
  191. package/lib/aws/compute/route.d.ts +1 -1
  192. package/lib/aws/compute/route.js +12 -12
  193. package/lib/aws/compute/runtime.js +3 -3
  194. package/lib/aws/compute/scalable-target.d.ts +1 -1
  195. package/lib/aws/compute/scalable-target.js +3 -3
  196. package/lib/aws/compute/schedule.js +4 -4
  197. package/lib/aws/compute/security-group.js +12 -12
  198. package/lib/aws/compute/stage.d.ts +1 -1
  199. package/lib/aws/compute/stage.js +6 -6
  200. package/lib/aws/compute/state-graph.js +1 -1
  201. package/lib/aws/compute/state-machine-fragment.js +1 -1
  202. package/lib/aws/compute/state-machine.d.ts +2 -2
  203. package/lib/aws/compute/state-machine.js +8 -8
  204. package/lib/aws/compute/states/choice.js +1 -1
  205. package/lib/aws/compute/states/custom-state.js +5 -5
  206. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  207. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  208. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  209. package/lib/aws/compute/states/distributed-map.js +4 -4
  210. package/lib/aws/compute/states/fail.js +4 -4
  211. package/lib/aws/compute/states/map-base.js +4 -4
  212. package/lib/aws/compute/states/map.js +1 -1
  213. package/lib/aws/compute/states/parallel.js +1 -1
  214. package/lib/aws/compute/states/pass.js +2 -2
  215. package/lib/aws/compute/states/state.js +4 -4
  216. package/lib/aws/compute/states/succeed.js +1 -1
  217. package/lib/aws/compute/states/task-base.js +2 -2
  218. package/lib/aws/compute/states/task.js +1 -1
  219. package/lib/aws/compute/states/wait.js +2 -2
  220. package/lib/aws/compute/step-scaling-action.js +5 -5
  221. package/lib/aws/compute/step-scaling-policy.js +7 -7
  222. package/lib/aws/compute/stepfunctions-api.js +2 -2
  223. package/lib/aws/compute/subnet-v2.d.ts +1 -1
  224. package/lib/aws/compute/subnet-v2.js +5 -5
  225. package/lib/aws/compute/subnet.js +4 -4
  226. package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
  227. package/lib/aws/compute/task-credentials.js +1 -1
  228. package/lib/aws/compute/task-input.js +1 -1
  229. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +5 -5
  230. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  231. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  232. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  233. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  234. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  235. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  236. package/lib/aws/compute/types.js +1 -1
  237. package/lib/aws/compute/usage-plan.js +5 -5
  238. package/lib/aws/compute/user-data.d.ts +2 -2
  239. package/lib/aws/compute/user-data.js +10 -10
  240. package/lib/aws/compute/volume.d.ts +1 -1
  241. package/lib/aws/compute/volume.js +7 -7
  242. package/lib/aws/compute/vpc-endpoint-service.js +3 -3
  243. package/lib/aws/compute/vpc-endpoint.d.ts +1 -1
  244. package/lib/aws/compute/vpc-endpoint.js +13 -13
  245. package/lib/aws/compute/vpc-flow-logs.d.ts +1 -1
  246. package/lib/aws/compute/vpc-flow-logs.js +8 -8
  247. package/lib/aws/compute/vpc-link.js +5 -5
  248. package/lib/aws/compute/vpc-v2-base.js +6 -6
  249. package/lib/aws/compute/vpc-v2.d.ts +2 -2
  250. package/lib/aws/compute/vpc-v2.js +4 -4
  251. package/lib/aws/compute/vpc.d.ts +1 -1
  252. package/lib/aws/compute/vpc.js +24 -22
  253. package/lib/aws/compute/vpn.js +8 -8
  254. package/lib/aws/context-provider.js +4 -4
  255. package/lib/aws/edge/certificate.d.ts +1 -1
  256. package/lib/aws/edge/certificate.js +6 -6
  257. package/lib/aws/edge/distribution.d.ts +1 -1
  258. package/lib/aws/edge/distribution.js +9 -9
  259. package/lib/aws/edge/dns-alias-record-targets.d.ts +1 -1
  260. package/lib/aws/edge/dns-alias-record-targets.js +7 -7
  261. package/lib/aws/edge/dns-record.d.ts +1 -1
  262. package/lib/aws/edge/dns-record.js +19 -19
  263. package/lib/aws/edge/dns-zone.d.ts +2 -2
  264. package/lib/aws/edge/dns-zone.js +5 -5
  265. package/lib/aws/edge/function.d.ts +1 -1
  266. package/lib/aws/edge/function.js +4 -4
  267. package/lib/aws/edge/key-value-store.d.ts +1 -1
  268. package/lib/aws/edge/key-value-store.js +6 -6
  269. package/lib/aws/edge/origin.d.ts +1 -1
  270. package/lib/aws/edge/origin.js +6 -6
  271. package/lib/aws/edge/response-headers-policy.d.ts +1 -1
  272. package/lib/aws/edge/response-headers-policy.js +6 -6
  273. package/lib/aws/encryption/alias.d.ts +1 -1
  274. package/lib/aws/encryption/alias.js +8 -8
  275. package/lib/aws/encryption/key.d.ts +1 -1
  276. package/lib/aws/encryption/key.js +6 -6
  277. package/lib/aws/encryption/via-service-principal.js +1 -1
  278. package/lib/aws/iam/grant.js +3 -3
  279. package/lib/aws/iam/group.js +5 -5
  280. package/lib/aws/iam/instance-profile.d.ts +1 -1
  281. package/lib/aws/iam/instance-profile.js +3 -3
  282. package/lib/aws/iam/managed-policy.d.ts +1 -1
  283. package/lib/aws/iam/managed-policy.js +3 -3
  284. package/lib/aws/iam/oidc-provider.d.ts +1 -1
  285. package/lib/aws/iam/oidc-provider.js +3 -3
  286. package/lib/aws/iam/policy-document-config.generated.d.ts +9 -9
  287. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  288. package/lib/aws/iam/policy-document.d.ts +1 -1
  289. package/lib/aws/iam/policy-document.js +5 -5
  290. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  291. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  292. package/lib/aws/iam/policy-statement.d.ts +1 -1
  293. package/lib/aws/iam/policy-statement.js +8 -8
  294. package/lib/aws/iam/policy.js +3 -3
  295. package/lib/aws/iam/principals.js +25 -25
  296. package/lib/aws/iam/private/imported-role.js +3 -3
  297. package/lib/aws/iam/private/postprocess-policy-document.d.ts +1 -1
  298. package/lib/aws/iam/private/postprocess-policy-document.js +1 -1
  299. package/lib/aws/iam/private/util.d.ts +1 -1
  300. package/lib/aws/iam/private/util.js +5 -5
  301. package/lib/aws/iam/role.d.ts +1 -1
  302. package/lib/aws/iam/role.js +6 -6
  303. package/lib/aws/iam/saml-provider.d.ts +1 -1
  304. package/lib/aws/iam/saml-provider.js +6 -6
  305. package/lib/aws/iam/unknown-principal.js +4 -4
  306. package/lib/aws/iam/user.js +3 -3
  307. package/lib/aws/network/network.d.ts +1 -1
  308. package/lib/aws/network/network.js +1 -1
  309. package/lib/aws/network/simple-ipv4-vpc.js +12 -12
  310. package/lib/aws/network/subnet-group.d.ts +1 -1
  311. package/lib/aws/network/subnet-group.js +5 -5
  312. package/lib/aws/network/subnet.d.ts +1 -1
  313. package/lib/aws/network/subnet.js +6 -6
  314. package/lib/aws/notify/archive.d.ts +1 -1
  315. package/lib/aws/notify/archive.js +3 -3
  316. package/lib/aws/notify/connection.d.ts +1 -1
  317. package/lib/aws/notify/connection.js +5 -5
  318. package/lib/aws/notify/event-bus.d.ts +1 -1
  319. package/lib/aws/notify/event-bus.js +10 -10
  320. package/lib/aws/notify/event-pattern.d.ts +1 -1
  321. package/lib/aws/notify/event-pattern.js +5 -5
  322. package/lib/aws/notify/input.d.ts +1 -1
  323. package/lib/aws/notify/input.js +12 -12
  324. package/lib/aws/notify/kinesis-stream.d.ts +1 -1
  325. package/lib/aws/notify/kinesis-stream.js +7 -7
  326. package/lib/aws/notify/notification-rule.js +8 -8
  327. package/lib/aws/notify/policy.js +3 -3
  328. package/lib/aws/notify/queue-base.js +1 -1
  329. package/lib/aws/notify/queue-policy.js +3 -3
  330. package/lib/aws/notify/queue.d.ts +1 -1
  331. package/lib/aws/notify/queue.js +8 -8
  332. package/lib/aws/notify/resource-policy.js +3 -3
  333. package/lib/aws/notify/rule.d.ts +1 -1
  334. package/lib/aws/notify/rule.js +6 -6
  335. package/lib/aws/notify/schedule.js +4 -4
  336. package/lib/aws/notify/sns-grants.generated.js +1 -1
  337. package/lib/aws/notify/sqs-grants.generated.js +1 -1
  338. package/lib/aws/notify/subscription-filter.js +1 -1
  339. package/lib/aws/notify/subscription.js +6 -6
  340. package/lib/aws/notify/subscriptions/email.js +1 -1
  341. package/lib/aws/notify/subscriptions/lambda.js +4 -4
  342. package/lib/aws/notify/subscriptions/sms.js +1 -1
  343. package/lib/aws/notify/subscriptions/sqs.js +4 -4
  344. package/lib/aws/notify/subscriptions/url.js +4 -4
  345. package/lib/aws/notify/target.d.ts +1 -1
  346. package/lib/aws/notify/target.js +1 -1
  347. package/lib/aws/notify/targets/event-bus.js +1 -1
  348. package/lib/aws/notify/targets/function.js +1 -1
  349. package/lib/aws/notify/targets/log-group.js +2 -2
  350. package/lib/aws/notify/targets/sqs.js +1 -1
  351. package/lib/aws/notify/targets/state-machine.js +1 -1
  352. package/lib/aws/notify/targets/util.js +3 -3
  353. package/lib/aws/notify/topic-base.js +4 -4
  354. package/lib/aws/notify/topic.js +7 -7
  355. package/lib/aws/provider-config.generated.d.ts +42 -36
  356. package/lib/aws/provider-config.generated.js +1 -1
  357. package/lib/aws/region-lookup.js +4 -4
  358. package/lib/aws/storage/assets/image-asset.js +8 -8
  359. package/lib/aws/storage/assets/s3.js +1 -1
  360. package/lib/aws/storage/auth-token.js +2 -2
  361. package/lib/aws/storage/billing.js +1 -1
  362. package/lib/aws/storage/bucket-notifications.d.ts +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +8 -8
  364. package/lib/aws/storage/bucket-policy.d.ts +1 -1
  365. package/lib/aws/storage/bucket-policy.js +3 -3
  366. package/lib/aws/storage/bucket-source.d.ts +1 -1
  367. package/lib/aws/storage/bucket-source.js +7 -7
  368. package/lib/aws/storage/bucket.d.ts +1 -1
  369. package/lib/aws/storage/bucket.js +8 -8
  370. package/lib/aws/storage/capacity.js +1 -1
  371. package/lib/aws/storage/cors-config.generated.d.ts +5 -5
  372. package/lib/aws/storage/cors-config.generated.js +1 -1
  373. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  374. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  375. package/lib/aws/storage/ecr-repository.js +11 -11
  376. package/lib/aws/storage/encryption.d.ts +1 -1
  377. package/lib/aws/storage/encryption.js +5 -5
  378. package/lib/aws/storage/lifecycle-config.generated.d.ts +9 -9
  379. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  380. package/lib/aws/storage/notification-targets/function.js +2 -2
  381. package/lib/aws/storage/notification-targets/queue.js +4 -4
  382. package/lib/aws/storage/origin-access-identity.d.ts +2 -2
  383. package/lib/aws/storage/origin-access-identity.js +3 -3
  384. package/lib/aws/storage/parameter-util.js +5 -5
  385. package/lib/aws/storage/parameter.d.ts +2 -2
  386. package/lib/aws/storage/parameter.js +16 -16
  387. package/lib/aws/storage/stream-grants.js +1 -1
  388. package/lib/aws/storage/table-grants.js +1 -1
  389. package/lib/aws/storage/table.d.ts +1 -1
  390. package/lib/aws/storage/table.js +10 -10
  391. package/lib/aws/storage/website-config.generated.d.ts +8 -8
  392. package/lib/aws/storage/website-config.generated.js +1 -1
  393. package/lib/bundling.js +5 -5
  394. package/lib/construct-base.d.ts +1 -1
  395. package/lib/construct-base.js +10 -10
  396. package/lib/duration.js +9 -9
  397. package/lib/errors.js +1 -1
  398. package/lib/expiration.js +1 -1
  399. package/lib/fs/ignore.js +4 -4
  400. package/lib/fs/index.js +1 -1
  401. package/lib/private/terraform-dependables-aspect.d.ts +1 -1
  402. package/lib/private/terraform-dependables-aspect.js +6 -6
  403. package/lib/private/unique-resource-name.js +3 -3
  404. package/lib/size.js +6 -6
  405. package/lib/stack-base.d.ts +2 -2
  406. package/lib/stack-base.js +16 -16
  407. package/lib/terra-func.d.ts +1 -1
  408. package/lib/terra-func.js +18 -18
  409. package/lib/time-zone.js +1 -1
  410. package/lib/token.js +5 -5
  411. package/package.json +17 -17
  412. package/setup.js +2 -2
@@ -5,8 +5,8 @@ exports.TunnelStartupAction = exports.Phase2DhGroupNumber = exports.Phase1DhGrou
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/vpn.ts
7
7
  const net = require("node:net");
8
- const provider_aws_1 = require("@cdktf/provider-aws");
9
- const cdktf_1 = require("cdktf");
8
+ const provider_aws_1 = require("@cdktn/provider-aws");
9
+ const cdktn_1 = require("cdktn");
10
10
  const duration_1 = require("../../duration");
11
11
  const aws_construct_1 = require("../aws-construct");
12
12
  const cloudwatch = require("../cloudwatch");
@@ -57,7 +57,7 @@ class VpnGateway extends aws_construct_1.AwsConstructBase {
57
57
  }
58
58
  exports.VpnGateway = VpnGateway;
59
59
  _a = JSII_RTTI_SYMBOL_1;
60
- VpnGateway[_a] = { fqn: "terraconstructs.aws.compute.VpnGateway", version: "0.2.4" };
60
+ VpnGateway[_a] = { fqn: "terraconstructs.aws.compute.VpnGateway", version: "0.2.6" };
61
61
  /**
62
62
  * Base class for Vpn connections.
63
63
  */
@@ -76,7 +76,7 @@ class VpnConnectionBase extends aws_construct_1.AwsConstructBase {
76
76
  }
77
77
  exports.VpnConnectionBase = VpnConnectionBase;
78
78
  _b = JSII_RTTI_SYMBOL_1;
79
- VpnConnectionBase[_b] = { fqn: "terraconstructs.aws.compute.VpnConnectionBase", version: "0.2.4" };
79
+ VpnConnectionBase[_b] = { fqn: "terraconstructs.aws.compute.VpnConnectionBase", version: "0.2.6" };
80
80
  /**
81
81
  * Define a VPN Connection
82
82
  *
@@ -140,7 +140,7 @@ class VpnConnection extends VpnConnectionBase {
140
140
  amazonSideAsn: props.asn,
141
141
  });
142
142
  }
143
- if (!cdktf_1.Token.isUnresolved(props.ip) && !net.isIPv4(props.ip)) {
143
+ if (!cdktn_1.Token.isUnresolved(props.ip) && !net.isIPv4(props.ip)) {
144
144
  throw new Error(`The \`ip\` ${props.ip} is not a valid IPv4 address.`);
145
145
  }
146
146
  const type = VpnConnectionType.IPSEC_1;
@@ -172,7 +172,7 @@ class VpnConnection extends VpnConnectionBase {
172
172
  // );
173
173
  // }
174
174
  if (options.preSharedKey &&
175
- !cdktf_1.Token.isUnresolved(options.preSharedKey) &&
175
+ !cdktn_1.Token.isUnresolved(options.preSharedKey) &&
176
176
  !/^[a-zA-Z1-9._][a-zA-Z\d._]{7,63}$/.test(options.preSharedKey)) {
177
177
  throw new Error(`The \`preSharedKey\` ${options.preSharedKey} for tunnel ${index + 1} is invalid. Allowed characters are alphanumeric characters and ._. Must be between 8 and 64 characters in length and cannot start with zero (0).`);
178
178
  }
@@ -254,7 +254,7 @@ class VpnConnection extends VpnConnectionBase {
254
254
  }
255
255
  exports.VpnConnection = VpnConnection;
256
256
  _c = JSII_RTTI_SYMBOL_1;
257
- VpnConnection[_c] = { fqn: "terraconstructs.aws.compute.VpnConnection", version: "0.2.4" };
257
+ VpnConnection[_c] = { fqn: "terraconstructs.aws.compute.VpnConnection", version: "0.2.6" };
258
258
  exports.RESERVED_TUNNEL_INSIDE_CIDR = [
259
259
  "169.254.0.0/30",
260
260
  "169.254.1.0/30",
@@ -391,4 +391,4 @@ var TunnelStartupAction;
391
391
  */
392
392
  TunnelStartupAction["START"] = "start";
393
393
  })(TunnelStartupAction || (exports.TunnelStartupAction = TunnelStartupAction = {}));
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3Zwbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVGQUF1RjtBQUV2RixnQ0FBZ0M7QUFDaEMsc0RBSzZCO0FBQzdCLGlDQUdlO0FBR2YsNkNBQTBDO0FBQzFDLG9EQUFtRTtBQUNuRSw0Q0FBNEM7QUE2UTVDOztHQUVHO0FBQ0gsSUFBWSxpQkFjWDtBQWRELFdBQVksaUJBQWlCO0lBQzNCLDRFQUE0RTtJQUM1RSxnQ0FBZ0M7SUFDaEMsMkdBQTJHO0lBQzNHOztPQUVHO0lBQ0gsd0NBQW1CLENBQUE7SUFFbkI7OztPQUdHO0lBQ0gsb0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBZFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFjNUI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsZ0NBQWdCO0lBSzlDLElBQVcsaUJBQWlCO1FBQzFCLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixpRkFBaUY7UUFDakYsc0ZBQXNGO1FBQ3RGLDBFQUEwRTtRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLHlCQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDdkQsYUFBYSxFQUNYLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUztnQkFDL0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxDQUFDLENBQUMsU0FBUztTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FB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SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0FBQ2YsQ0FBQyxFQWJXLG1CQUFtQixtQ0FBbkIsbUJBQW1CLFFBYTlCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG1CQWNYO0FBZEQsV0FBWSxtQkFBbUI7SUFDN0IsbUVBQVcsQ0FBQTtJQUNYLG1FQUFXLENBQUE7SUFDWCxzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtBQUNmLENBQUMsRUFkVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQWM5QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxtQkFVWDtBQVZELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsa0NBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsc0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBVlcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFVOUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi92cG4udHNcblxuaW1wb3J0ICogYXMgbmV0IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHtcbiAgY3VzdG9tZXJHYXRld2F5LFxuICB2cG5Db25uZWN0aW9uLFxuICB2cG5Db25uZWN0aW9uUm91dGUsXG4gIHZwbkdhdGV3YXksXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICAvL1NlY3JldFZhbHVlLFxuICBUb2tlbixcbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVZwYywgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHsgSUF3c0NvbnN0cnVjdCwgQXdzQ29uc3RydWN0QmFzZSB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcG5Db25uZWN0aW9uT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICAgKiBAYXR0cmlidXRlIFZwbkNvbm5lY3Rpb25JZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlwIGFkZHJlc3Mgb2YgdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21lckdhdGV3YXlJcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVNOIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5QXNuOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZwbkNvbm5lY3Rpb24gZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgdnBuQ29ubmVjdGlvbk91dHB1dHM6IFZwbkNvbm5lY3Rpb25PdXRwdXRzO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAgICogQGF0dHJpYnV0ZSBWcG5Db25uZWN0aW9uSWRcbiAgICovXG4gIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBhZGRyZXNzIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFTTiBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuR2F0ZXdheU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqIEBhdHRyaWJ1dGUgVnBuR2F0ZXdheUlkXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgdmlydHVhbCBwcml2YXRlIGdhdGV3YXkgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZwbkdhdGV3YXkgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheU91dHB1dHM6IFZwbkdhdGV3YXlPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWcG5UdW5uZWxPcHRpb24ge1xuICAvKipcbiAgICogVGhlIHByZS1zaGFyZWQga2V5IChQU0spIHRvIGVzdGFibGlzaCBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gdGhlXG4gICAqIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IGFuZCBjdXN0b21lciBnYXRld2F5LiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlXG4gICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHBlcmlvZCBgLmAgYW5kIHVuZGVyc2NvcmVzIGBfYC4gTXVzdCBiZSBiZXR3ZWVuIDhcbiAgICogYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYW4gQW1hem9uIGdlbmVyYXRlZCBwcmUtc2hhcmVkIGtleVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlU2hhcmVkS2V5Pzogc3RyaW5nO1xuXG4gIC8vIFRPRE86IEFkb3B0IFNlY3JldFZhbHVlIHBhdHRlcm4gZnJvbSBBV1NDREtcblxuICAvLyAvKipcbiAgLy8gICogVGhlIHByZS1zaGFyZWQga2V5IChQU0spIHRvIGVzdGFibGlzaCBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gdGhlXG4gIC8vICAqIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IGFuZCBjdXN0b21lciBnYXRld2F5LiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlXG4gIC8vICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHBlcmlvZCBgLmAgYW5kIHVuZGVyc2NvcmVzIGBfYC4gTXVzdCBiZSBiZXR3ZWVuIDhcbiAgLy8gICogYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgYW4gQW1hem9uIGdlbmVyYXRlZCBwcmUtc2hhcmVkIGtleVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgcHJlU2hhcmVkS2V5U2VjcmV0PzogU2VjcmV0VmFsdWU7XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSBvZiBpbnNpZGUgSVAgYWRkcmVzc2VzIGZvciB0aGUgdHVubmVsLiBBbnkgc3BlY2lmaWVkIENJRFIgYmxvY2tzIG11c3QgYmVcbiAgICogdW5pcXVlIGFjcm9zcyBhbGwgVlBOIGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSBzYW1lIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5LlxuICAgKiBBIHNpemUgLzMwIENJRFIgYmxvY2sgZnJvbSB0aGUgMTY5LjI1NC4wLjAvMTYgcmFuZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFuIEFtYXpvbiBnZW5lcmF0ZWQgaW5zaWRlIElQIENJRFJcbiAgICovXG4gIHJlYWRvbmx5IHR1bm5lbEluc2lkZUNpZHI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJS0UgdmVyc2lvbnMgZm9yIHRoZSB0dW5uZWxcbiAgICovXG4gIHJlYWRvbmx5IGlrZVZlcnNpb25zPzogSWtlVmVyc2lvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgRFBEIHRpbWVvdXQgYWN0aW9uIGZvciB0aGUgdHVubmVsXG4gICAqL1xuICByZWFkb25seSBkcGRUaW1lb3V0QWN0aW9uPzogRHBkVGltZW91dEFjdGlvbjtcblxuICAvKipcbiAgICogVGhlIERQRCB0aW1lb3V0XG4gICAqL1xuICByZWFkb25seSBkcGRUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0dW5uZWwgbGlmZWN5Y2xlIGNvbnRyb2xcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2w/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMSBESCBncm91cCBudW1iZXJzXG4gICAqL1xuICByZWFkb25seSBwaGFzZTFEaEdyb3VwTnVtYmVycz86IFBoYXNlMURoR3JvdXBOdW1iZXJbXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgZW5jcnlwdGlvbiBhbGdvcml0aG1zXG4gICAqL1xuICByZWFkb25seSBwaGFzZTFFbmNyeXB0aW9uQWxnb3JpdGhtcz86IEVuY3J5cHRpb25BbGdvcml0aG1bXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgaW50ZWdyaXR5IGFsZ29yaXRobXNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMUludGVncml0eUFsZ29yaXRobXM/OiBJbnRlZ3JpdHlBbGdvcml0aG1bXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgbGlmZXRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMUxpZmV0aW1lPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwaGFzZSAyIERIIGdyb3VwIG51bWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMkRoR3JvdXBOdW1iZXJzPzogUGhhc2UyRGhHcm91cE51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBlbmNyeXB0aW9uIGFsZ29yaXRobXNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zPzogRW5jcnlwdGlvbkFsZ29yaXRobVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBpbnRlZ3JpdHkgYWxnb3JpdGhtc1xuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtcz86IEludGVncml0eUFsZ29yaXRobVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBsaWZldGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBwaGFzZTJMaWZldGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0aGUgcmVrZXkgd2luZG93IGR1cmluZyB3aGljaCB0aGUgcmVrZXkgdGltZSBpcyByYW5kb21seSBzZWxlY3RlZFxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICogQG1pbmltdW0gMFxuICAgKiBAbWF4aW11bSAxMDBcbiAgICovXG4gIHJlYWRvbmx5IHJla2V5RnV6elBlcmNlbnRhZ2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJnaW4gdGltZSBiZWZvcmUgcGhhc2UgMiBsaWZldGltZSBleHBpcmVzIGZvciBJS0UgcmVrZXlcbiAgICogQGRlZmF1bHQgNTQwXG4gICAqIEBtaW5pbXVtIDYwXG4gICAqIEByZW1hcmtzIE11c3QgYmUgYmV0d2VlbiA2MCBhbmQgaGFsZiBvZiBwaGFzZTJMaWZldGltZVNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IHJla2V5TWFyZ2luVGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSUtFIHJlcGxheSB3aW5kb3dcbiAgICogQGRlZmF1bHQgMTAyNFxuICAgKiBAbWluaW11bSA2NFxuICAgKiBAbWF4aW11bSAyMDQ4XG4gICAqL1xuICByZWFkb25seSByZXBsYXlXaW5kb3dTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHRha2Ugd2hlbiB0aGUgZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwgZm9yIHRoZSBzZWNvbmQgVlBOIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHlvdXIgY3VzdG9tZXIgZ2F0ZXdheSBkZXZpY2UgbXVzdCBpbml0aWF0ZSB0aGUgSUtFIG5lZ290aWF0aW9uIGFuZCBicmluZyB1cCB0aGUgdHVubmVsLlxuICAgKiBTcGVjaWZ5IGBzdGFydGAgZm9yIEFXUyB0byBpbml0aWF0ZSB0aGUgSUtFIG5lZ290aWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnR1cEFjdGlvbj86IFR1bm5lbFN0YXJ0dXBBY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlwIGFkZHJlc3Mgb2YgdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBpcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVNOIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCA2NTAwMFxuICAgKi9cbiAgcmVhZG9ubHkgYXNuPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGljIHJvdXRlcyB0byBiZSByb3V0ZWQgZnJvbSB0aGUgVlBOIGdhdGV3YXkgdG8gdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IER5bmFtaWMgcm91dGluZyAoQkdQKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljUm91dGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB0dW5uZWwgb3B0aW9ucyBmb3IgdGhlIFZQTiBjb25uZWN0aW9uLiBBdCBtb3N0IHR3byBlbGVtZW50cyAob25lIHBlciB0dW5uZWwpLlxuICAgKiBEdXBsaWNhdGVzIG5vdCBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBbWF6b24gZ2VuZXJhdGVkIHR1bm5lbCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSB0dW5uZWxPcHRpb25zPzogVnBuVHVubmVsT3B0aW9uW107XG59XG5cbi8qKlxuICogVGhlIFZwbkdhdGV3YXkgUHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwbkdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHR5cGUgaXBzZWMuMVxuICAgKlxuICAgKiBUaGlzIGlzIGlnbm9yZWQgYnkgVGVycmFmb3JtIFByb3ZpZGVyIEFXU1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9pbnRlcm5ldF9nYXRld2F5X2F0dGFjaG1lbnQjYXJndW1lbnQtcmVmZXJlbmNlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG5nYXRld2F5Lmh0bWwjY2ZuLWVjMi12cG5nYXRld2F5LXR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogRXhwbGljaXRseSBzcGVjaWZ5IGFuIEFzbiBvciBsZXQgYXdzIHBpY2sgYW4gQXNuIGZvciB5b3UuXG4gICAqIEBkZWZhdWx0IDY1MDAwXG4gICAqL1xuICByZWFkb25seSBhbWF6b25TaWRlQXNuPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBWcGMuZW5hYmxlVnBuR2F0ZXdheSgpIG1ldGhvZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVZwbkdhdGV3YXlPcHRpb25zIGV4dGVuZHMgVnBuR2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYXJyYXkgb2Ygc3VibmV0cyB3aGVyZSB0aGUgcm91dGUgcHJvcGFnYXRpb24gc2hvdWxkIGJlIGFkZGVkLlxuICAgKiBAZGVmYXVsdCBub1Byb3BhZ2F0aW9uXG4gICAqL1xuICByZWFkb25seSB2cG5Sb3V0ZVByb3BhZ2F0aW9uPzogU3VibmV0U2VsZWN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgVnBuQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFZQQyB0byBjb25uZWN0IHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xufVxuXG4vKipcbiAqIFRoZSBWUE4gY29ubmVjdGlvbiB0eXBlLlxuICovXG5leHBvcnQgZW51bSBWcG5Db25uZWN0aW9uVHlwZSB7XG4gIC8vIE5PVEU6IFRlcnJhZm9ybSBQcm92aWRlciBBV1MgZG9lcyBub3QgaGF2ZSBhIFZwbkNvbm5lY3Rpb24uVHlwZSBmaWVsZCAuLi5cbiAgLy8gQnV0IHRoZSBDdXN0b21lciBHYXRld2F5IERvZXNcbiAgLy8gQHNlZSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvY3VzdG9tZXJfZ2F0ZXdheSN0eXBlLTFcbiAgLyoqXG4gICAqIFRoZSBJUHNlYyAxIFZQTiBjb25uZWN0aW9uIHR5cGUuXG4gICAqL1xuICBJUFNFQ18xID0gXCJpcHNlYy4xXCIsXG5cbiAgLyoqXG4gICAqIER1bW15IG1lbWJlclxuICAgKiBUT0RPOiByZW1vdmUgb25jZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzIzMSBpcyBmaXhlZFxuICAgKi9cbiAgRFVNTVkgPSBcImR1bW15XCIsXG59XG5cbi8qKlxuICogVGhlIFZQTiBHYXRld2F5IHRoYXQgc2hhbGwgYmUgYWRkZWQgdG8gdGhlIFZQQ1xuICpcbiAqIEByZXNvdXJjZSBhd3NfdnBuX2dhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZwbkdhdGV3YXkgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZwbkdhdGV3YXkge1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgdnBuR2F0ZXdheU91dHB1dHMoKTogVnBuR2F0ZXdheU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBnYXRld2F5SWQ6IHRoaXMuZ2F0ZXdheUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZwbkdhdGV3YXlPdXRwdXRzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZwbkdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBUaGlzIGlzICdEZWZhdWx0JyBpbnN0ZWFkIG9mICdSZXNvdXJjZScsIGJlY2F1c2UgdXNpbmcgJ0RlZmF1bHQnIHdpbGwgZ2VuZXJhdGVcbiAgICAvLyBhIGxvZ2ljYWwgSUQgZm9yIGEgVnBuR2F0ZXdheSB3aGljaCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBsb2dpY2FsIElEIHRoYXQgdXNlZFxuICAgIC8vIHRvIGJlIGNyZWF0ZWQgZm9yIHRoZSBDZm5WUE5HYXRld2F5IChhbmQgJ1Jlc291cmNlJyB3b3VsZCBub3QgZG8gdGhhdCkuXG4gICAgY29uc3QgdnBuR1cgPSBuZXcgdnBuR2F0ZXdheS5WcG5HYXRld2F5KHRoaXMsIFwiRGVmYXVsdFwiLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOlxuICAgICAgICBwcm9wcy5hbWF6b25TaWRlQXNuICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByb3BzLmFtYXpvblNpZGVBc24udG9TdHJpbmcoKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMuZ2F0ZXdheUlkID0gdnBuR1cuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIG9mIGFuIGltcG9ydGVkIFZwbkNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvbkF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBhZGRyZXNzIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFTTiBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFZwbiBjb25uZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZwbkNvbm5lY3Rpb25CYXNlXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElWcG5Db25uZWN0aW9uXG57XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cG5JZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlwOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjdXN0b21lckdhdGV3YXlBc246IG51bWJlcjtcbiAgcHVibGljIGdldCB2cG5Db25uZWN0aW9uT3V0cHV0cygpOiBWcG5Db25uZWN0aW9uT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZwbklkOiB0aGlzLnZwbklkLFxuICAgICAgY3VzdG9tZXJHYXRld2F5SWQ6IHRoaXMuY3VzdG9tZXJHYXRld2F5SWQsXG4gICAgICBjdXN0b21lckdhdGV3YXlJcDogdGhpcy5jdXN0b21lckdhdGV3YXlJcCxcbiAgICAgIGN1c3RvbWVyR2F0ZXdheUFzbjogdGhpcy5jdXN0b21lckdhdGV3YXlBc24sXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMudnBuQ29ubmVjdGlvbk91dHB1dHM7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBWUE4gQ29ubmVjdGlvblxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBOQ29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVnBuQ29ubmVjdGlvbiBleHRlbmRzIFZwbkNvbm5lY3Rpb25CYXNlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhIFZQTiBjb25uZWN0aW9uIGJ5IHN1cHBseWluZyBhbGwgYXR0cmlidXRlcyBkaXJlY3RseVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVnBuQ29ubmVjdGlvbkF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBWcG5Db25uZWN0aW9uQXR0cmlidXRlcyxcbiAgKTogSVZwbkNvbm5lY3Rpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFZwbkNvbm5lY3Rpb25CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cG5JZDogc3RyaW5nID0gYXR0cnMudnBuSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZyA9IGF0dHJzLmN1c3RvbWVyR2F0ZXdheUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlwOiBzdHJpbmcgPSBhdHRycy5jdXN0b21lckdhdGV3YXlJcDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21lckdhdGV3YXlBc246IG51bWJlciA9IGF0dHJzLmN1c3RvbWVyR2F0ZXdheUFzbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciBhbGwgVlBOIGNvbm5lY3Rpb25zIGluIHRoZSBhY2NvdW50L3JlZ2lvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9WUE5cIixcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0dW5uZWwgc3RhdGUgb2YgYWxsIFZQTiBjb25uZWN0aW9ucyBpbiB0aGUgYWNjb3VudC9yZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsVHVubmVsU3RhdGUoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNBbGwoXCJUdW5uZWxTdGF0ZVwiLCB7IHN0YXRpc3RpYzogXCJhdmdcIiwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdHVubmVsIGRhdGEgaW4gb2YgYWxsIFZQTiBjb25uZWN0aW9ucyBpbiB0aGUgYWNjb3VudC9yZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZXRyaWNBbGxUdW5uZWxEYXRhSW4oXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNBbGwoXCJUdW5uZWxEYXRhSW5cIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHR1bm5lbCBkYXRhIG91dCBvZiBhbGwgVlBOIGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsVHVubmVsRGF0YU91dChcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0FsbChcIlR1bm5lbERhdGFPdXRcIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21lckdhdGV3YXlJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcG5Db25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFwcm9wcy52cGMudnBuR2F0ZXdheUlkKSB7XG4gICAgICBwcm9wcy52cGMuZW5hYmxlVnBuR2F0ZXdheSh7XG4gICAgICAgIHR5cGU6IFwiaXBzZWMuMVwiLFxuICAgICAgICBhbWF6b25TaWRlQXNuOiBwcm9wcy5hc24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5pcCkgJiYgIW5ldC5pc0lQdjQocHJvcHMuaXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcXGBpcFxcYCAke3Byb3BzLmlwfSBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IFZwbkNvbm5lY3Rpb25UeXBlLklQU0VDXzE7XG4gICAgY29uc3QgYmdwQXNuID0gcHJvcHMuYXNuIHx8IDY1MDAwO1xuXG4gICAgY29uc3QgY3VzdG9tZXJHdyA9IG5ldyBjdXN0b21lckdhdGV3YXkuQ3VzdG9tZXJHYXRld2F5KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQ3VzdG9tZXJHYXRld2F5XCIsXG4gICAgICB7XG4gICAgICAgIGJncEFzbjogYmdwQXNuLnRvU3RyaW5nKCksXG4gICAgICAgIGlwQWRkcmVzczogcHJvcHMuaXAsXG4gICAgICAgIHR5cGUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUlkID0gY3VzdG9tZXJHdy5pZDtcbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUFzbiA9IGJncEFzbjtcbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUlwID0gcHJvcHMuaXA7XG5cbiAgICBjb25zdCB2cG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAvLyBWYWxpZGF0ZSB0dW5uZWwgb3B0aW9uc1xuICAgIGlmIChwcm9wcy50dW5uZWxPcHRpb25zKSB7XG4gICAgICBpZiAocHJvcHMudHVubmVsT3B0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IG1vcmUgdGhhbiB0d28gYHR1bm5lbE9wdGlvbnNgXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnR1bm5lbE9wdGlvbnMubGVuZ3RoID09PSAyICYmXG4gICAgICAgIHByb3BzLnR1bm5lbE9wdGlvbnNbMF0udHVubmVsSW5zaWRlQ2lkciA9PT1cbiAgICAgICAgICBwcm9wcy50dW5uZWxPcHRpb25zWzFdLnR1bm5lbEluc2lkZUNpZHIgJiZcbiAgICAgICAgcHJvcHMudHVubmVsT3B0aW9uc1swXS50dW5uZWxJbnNpZGVDaWRyICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNhbWUgJHtwcm9wcy50dW5uZWxPcHRpb25zWzBdLnR1bm5lbEluc2lkZUNpZHJ9IFxcYHR1bm5lbEluc2lkZUNpZHJcXGAgY2Fubm90IGJlIHVzZWQgZm9yIGJvdGggdHVubmVscy5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy50dW5uZWxPcHRpb25zLmZvckVhY2goKG9wdGlvbnMsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIGlmIChvcHRpb25zLnByZVNoYXJlZEtleSAmJiBvcHRpb25zLnByZVNoYXJlZEtleVNlY3JldCkge1xuICAgICAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gICAgIFwiU3BlY2lmeSBhdCBtb3N0IG9uZSBvZiAncHJlU2hhcmVkS2V5JyBhbmQgJ3ByZVNoYXJlZEtleVNlY3JldCcuXCIsXG4gICAgICAgIC8vICAgKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLnByZVNoYXJlZEtleSAmJlxuICAgICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9ucy5wcmVTaGFyZWRLZXkpICYmXG4gICAgICAgICAgIS9eW2EtekEtWjEtOS5fXVthLXpBLVpcXGQuX117Nyw2M30kLy50ZXN0KG9wdGlvbnMucHJlU2hhcmVkS2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIFxcYHByZVNoYXJlZEtleVxcYCAke29wdGlvbnMucHJlU2hhcmVkS2V5fSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBpcyBpbnZhbGlkLiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCAuXy4gTXVzdCBiZSBiZXR3ZWVuIDggYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy50dW5uZWxJbnNpZGVDaWRyKSB7XG4gICAgICAgICAgaWYgKFJFU0VSVkVEX1RVTk5FTF9JTlNJREVfQ0lEUi5pbmNsdWRlcyhvcHRpb25zLnR1bm5lbEluc2lkZUNpZHIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgXFxgdHVubmVsSW5zaWRlQ2lkclxcYCAke29wdGlvbnMudHVubmVsSW5zaWRlQ2lkcn0gZm9yIHR1bm5lbCAke2luZGV4ICsgMX0gaXMgYSByZXNlcnZlZCBpbnNpZGUgQ0lEUi5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhL14xNjlcXC4yNTRcXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwvMzAkLy50ZXN0KG9wdGlvbnMudHVubmVsSW5zaWRlQ2lkcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRoZSBcXGB0dW5uZWxJbnNpZGVDaWRyXFxgICR7b3B0aW9ucy50dW5uZWxJbnNpZGVDaWRyfSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBpcyBub3QgYSBzaXplIC8zMCBDSURSIGJsb2NrIGZyb20gdGhlIDE2OS4yNTQuMC4wLzE2IHJhbmdlLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFZhbGlkYXRlIHJla2V5RnV6elBlcmNlbnRhZ2VcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZWtleUZ1enpQZXJjZW50YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZWtleUZ1enpQZXJjZW50YWdlIDwgMCB8fFxuICAgICAgICAgICAgICBvcHRpb25zLnJla2V5RnV6elBlcmNlbnRhZ2UgPiAxMDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYHJla2V5RnV6elBlcmNlbnRhZ2UgZm9yIHR1bm5lbCAke2luZGV4ICsgMX0gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMGAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmFsaWRhdGUgcmVrZXlNYXJnaW5UaW1lU2Vjb25kc1xuICAgICAgICAgIGlmIChvcHRpb25zLnJla2V5TWFyZ2luVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZWtleU1hcmdpblRpbWUudG9TZWNvbmRzKCkgPCA2MCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYHJla2V5TWFyZ2luVGltZSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBtdXN0IGJlIGF0IGxlYXN0IDYwIHNlY29uZHNgLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGxlc3MgdGhhbiBoYWxmIG9mIHBoYXNlMkxpZmV0aW1lU2Vjb25kc1xuICAgICAgICAgICAgY29uc3QgcGhhc2UyTGlmZXRpbWUgPSBvcHRpb25zLnBoYXNlMkxpZmV0aW1lIHx8IER1cmF0aW9uLmhvdXJzKDEpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLnJla2V5TWFyZ2luVGltZS50b1NlY29uZHMoKSA+XG4gICAgICAgICAgICAgIHBoYXNlMkxpZmV0aW1lLnRvU2Vjb25kcygpIC8gMlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgcmVrZXlNYXJnaW5UaW1lIGZvciB0dW5uZWwgJHtpbmRleCArIDF9IG11c3QgYmUgbGVzcyB0aGFuIGhhbGYgb2YgcGhhc2UyTGlmZXRpbWUgKCR7cGhhc2UyTGlmZXRpbWUudG9TZWNvbmRzKCkgLyAyfSlgLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFZhbGlkYXRlIHJlcGxheVdpbmRvd1NpemVcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXBsYXlXaW5kb3dTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZXBsYXlXaW5kb3dTaXplIDwgNjQgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZXBsYXlXaW5kb3dTaXplID4gMjA0OFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgcmVwbGF5V2luZG93U2l6ZSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBtdXN0IGJlIGJldHdlZW4gNjQgYW5kIDIwNDhgLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hcCB0dW5uZWwgb3B0aW9ucyB0byBBV1MgcHJvdmlkZXIgZm9ybWF0XG4gICAgICAgIGNvbnN0IHR1bm5lbFByZWZpeCA9IGB0dW5uZWwke2luZGV4ICsgMX1gO1xuICAgICAgICBPYmplY3QuYXNzaWduKHZwblR1bm5lbE9wdGlvbnNTcGVjaWZpY2F0aW9ucywge1xuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UHJlc2hhcmVkS2V5YF06IG9wdGlvbnMucHJlU2hhcmVkS2V5LFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9SW5zaWRlQ2lkcmBdOiBvcHRpb25zLnR1bm5lbEluc2lkZUNpZHIsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1EcGRUaW1lb3V0QWN0aW9uYF06IG9wdGlvbnMuZHBkVGltZW91dEFjdGlvbixcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fURwZFRpbWVvdXRTZWNvbmRzYF06IG9wdGlvbnMuZHBkVGltZW91dD8udG9TZWNvbmRzKCksXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1FbmFibGVUdW5uZWxMaWZlY3ljbGVDb250cm9sYF06XG4gICAgICAgICAgICBvcHRpb25zLmVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2wsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1Ja2VWZXJzaW9uc2BdOiBvcHRpb25zLmlrZVZlcnNpb25zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UxRGhHcm91cE51bWJlcnNgXTogb3B0aW9ucy5waGFzZTFEaEdyb3VwTnVtYmVycyxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMUVuY3J5cHRpb25BbGdvcml0aG1zYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMUVuY3J5cHRpb25BbGdvcml0aG1zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UxSW50ZWdyaXR5QWxnb3JpdGhtc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5waGFzZTFJbnRlZ3JpdHlBbGdvcml0aG1zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UxTGlmZXRpbWVTZWNvbmRzYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMUxpZmV0aW1lPy50b1NlY29uZHMoKSxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMkRoR3JvdXBOdW1iZXJzYF06IG9wdGlvbnMucGhhc2UyRGhHcm91cE51bWJlcnMsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QaGFzZTJFbmNyeXB0aW9uQWxnb3JpdGhtc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5waGFzZTJFbmNyeXB0aW9uQWxnb3JpdGhtcyxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMkludGVncml0eUFsZ29yaXRobXNgXTpcbiAgICAgICAgICAgIG9wdGlvbnMucGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtcyxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMkxpZmV0aW1lU2Vjb25kc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5waGFzZTJMaWZldGltZT8udG9TZWNvbmRzKCksXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1TdGFydHVwQWN0aW9uYF06IG9wdGlvbnMuc3RhcnR1cEFjdGlvbixcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVJla2V5RnV6elBlcmNlbnRhZ2VgXTogb3B0aW9ucy5yZWtleUZ1enpQZXJjZW50YWdlLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UmVrZXlNYXJnaW5UaW1lU2Vjb25kc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5yZWtleU1hcmdpblRpbWU/LnRvU2Vjb25kcygpLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UmVwbGF5V2luZG93U2l6ZWBdOiBvcHRpb25zLnJlcGxheVdpbmRvd1NpemUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgdnBuQ29ubmVjdGlvbi5WcG5Db25uZWN0aW9uKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgdHlwZSxcbiAgICAgIGN1c3RvbWVyR2F0ZXdheUlkOiBjdXN0b21lckd3LmlkLFxuICAgICAgc3RhdGljUm91dGVzT25seTogcHJvcHMuc3RhdGljUm91dGVzID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgdnBuR2F0ZXdheUlkOiBwcm9wcy52cGMudnBuR2F0ZXdheUlkLFxuICAgICAgLi4udnBuVHVubmVsT3B0aW9uc1NwZWNpZmljYXRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy52cG5JZCA9IHJlc291cmNlLmlkO1xuXG4gICAgaWYgKHByb3BzLnN0YXRpY1JvdXRlcykge1xuICAgICAgcHJvcHMuc3RhdGljUm91dGVzLmZvckVhY2goKHJvdXRlKSA9PiB7XG4gICAgICAgIG5ldyB2cG5Db25uZWN0aW9uUm91dGUuVnBuQ29ubmVjdGlvblJvdXRlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYFJvdXRlJHtyb3V0ZS5yZXBsYWNlKC9bXlxcZF0vZywgXCJcIil9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogcm91dGUsXG4gICAgICAgICAgICB2cG5Db25uZWN0aW9uSWQ6IHRoaXMudnBuSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUkVTRVJWRURfVFVOTkVMX0lOU0lERV9DSURSID0gW1xuICBcIjE2OS4yNTQuMC4wLzMwXCIsXG4gIFwiMTY5LjI1NC4xLjAvMzBcIixcbiAgXCIxNjkuMjU0LjIuMC8zMFwiLFxuICBcIjE2OS4yNTQuMy4wLzMwXCIsXG4gIFwiMTY5LjI1NC40LjAvMzBcIixcbiAgXCIxNjkuMjU0LjUuMC8zMFwiLFxuICBcIjE2OS4yNTQuMTY5LjI1Mi8zMFwiLFxuXTtcblxuLyoqXG4gKiBBY3Rpb24gdG8gdGFrZSBhZnRlciBEUEQgdGltZW91dCBvY2N1cnNcbiAqL1xuZXhwb3J0IGVudW0gRHBkVGltZW91dEFjdGlvbiB7XG4gIC8qKlxuICAgKiBFbmQgdGhlIElLRSBzZXNzaW9uXG4gICAqL1xuICBDTEVBUiA9IFwiY2xlYXJcIixcblxuICAvKipcbiAgICogVGFrZSBubyBhY3Rpb25cbiAgICovXG4gIE5PTkUgPSBcIm5vbmVcIixcblxuICAvKipcbiAgICogUmVzdGFydCB0aGUgSUtFIGluaXRpYXRpb25cbiAgICovXG4gIFJFU1RBUlQgPSBcInJlc3RhcnRcIixcbn1cblxuLyoqXG4gKiBJS0UgdmVyc2lvbnMgcGVybWl0dGVkIGZvciBWUE4gdHVubmVsc1xuICovXG5leHBvcnQgZW51bSBJa2VWZXJzaW9uIHtcbiAgLyoqXG4gICAqIElLRSB2ZXJzaW9uIDFcbiAgICovXG4gIElLRVYxID0gXCJpa2V2MVwiLFxuXG4gIC8qKlxuICAgKiBJS0UgdmVyc2lvbiAyXG4gICAqL1xuICBJS0VWMiA9IFwiaWtldjJcIixcbn1cblxuLyoqXG4gKiBQaGFzZSAxIGFuZCAyIGVuY3J5cHRpb24gYWxnb3JpdGhtc1xuICovXG5leHBvcnQgZW51bSBFbmNyeXB0aW9uQWxnb3JpdGhtIHtcbiAgLyoqXG4gICAqIEFFUyB3aXRoIDEyOC1iaXQga2V5XG4gICAqL1xuICBBRVMxMjggPSBcIkFFUzEyOFwiLFxuXG4gIC8qKlxuICAgKiBBRVMgd2l0aCAyNTYtYml0IGtleVxuICAgKi9cbiAgQUVTMjU2ID0gXCJBRVMyNTZcIixcblxuICAvKipcbiAgICogQUVTLUdDTSB3aXRoIDEyOC1iaXQga2V5IGFuZCAxNiBieXRlIGludGVncml0eSBjaGVja1xuICAgKi9cbiAgQUVTMTI4X0dDTV8xNiA9IFwiQUVTMTI4LUdDTS0xNlwiLFxuXG4gIC8qKlxuICAgKiBBRVMtR0NNIHdpdGggMjU2LWJpdCBrZXkgYW5kIDE2IGJ5dGUgaW50ZWdyaXR5IGNoZWNrXG4gICAqL1xuICBBRVMyNTZfR0NNXzE2ID0gXCJBRVMyNTYtR0NNLTE2XCIsXG59XG5cbi8qKlxuICogUGhhc2UgMSBhbmQgMiBpbnRlZ3JpdHkgYWxnb3JpdGhtc1xuICovXG5leHBvcnQgZW51bSBJbnRlZ3JpdHlBbGdvcml0aG0ge1xuICAvKipcbiAgICogU0hBLTEgaGFzaCBhbGdvcml0aG1cbiAgICovXG4gIFNIQTEgPSBcIlNIQTFcIixcblxuICAvKipcbiAgICogU0hBLTIgd2l0aCAyNTYtYml0IGRpZ2VzdFxuICAgKi9cbiAgU0hBMl8yNTYgPSBcIlNIQTItMjU2XCIsXG5cbiAgLyoqXG4gICAqIFNIQS0yIHdpdGggMzg0LWJpdCBkaWdlc3RcbiAgICovXG4gIFNIQTJfMzg0ID0gXCJTSEEyLTM4NFwiLFxuXG4gIC8qKlxuICAgKiBTSEEtMiB3aXRoIDUxMi1iaXQgZGlnZXN0XG4gICAqL1xuICBTSEEyXzUxMiA9IFwiU0hBMi01MTJcIixcbn1cblxuLyoqXG4gKiBQaGFzZSAxIERpZmZpZS1IZWxsbWFuIGdyb3VwIG51bWJlcnNcbiAqL1xuZXhwb3J0IGVudW0gUGhhc2UxRGhHcm91cE51bWJlciB7XG4gIEdST1VQXzIgPSAyLFxuICBHUk9VUF8xNCA9IDE0LFxuICBHUk9VUF8xNSA9IDE1LFxuICBHUk9VUF8xNiA9IDE2LFxuICBHUk9VUF8xNyA9IDE3LFxuICBHUk9VUF8xOCA9IDE4LFxuICBHUk9VUF8xOSA9IDE5LFxuICBHUk9VUF8yMCA9IDIwLFxuICBHUk9VUF8yMSA9IDIxLFxuICBHUk9VUF8yMiA9IDIyLFxuICBHUk9VUF8yMyA9IDIzLFxuICBHUk9VUF8yNCA9IDI0LFxufVxuXG4vKipcbiAqIFBoYXNlIDIgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVyc1xuICovXG5leHBvcnQgZW51bSBQaGFzZTJEaEdyb3VwTnVtYmVyIHtcbiAgR1JPVVBfMiA9IDIsXG4gIEdST1VQXzUgPSA1LFxuICBHUk9VUF8xNCA9IDE0LFxuICBHUk9VUF8xNSA9IDE1LFxuICBHUk9VUF8xNiA9IDE2LFxuICBHUk9VUF8xNyA9IDE3LFxuICBHUk9VUF8xOCA9IDE4LFxuICBHUk9VUF8xOSA9IDE5LFxuICBHUk9VUF8yMCA9IDIwLFxuICBHUk9VUF8yMSA9IDIxLFxuICBHUk9VUF8yMiA9IDIyLFxuICBHUk9VUF8yMyA9IDIzLFxuICBHUk9VUF8yNCA9IDI0LFxufVxuXG4vKipcbiAqIFR1bm5lbCBzdGFydHVwIGFjdGlvblxuICovXG5leHBvcnQgZW51bSBUdW5uZWxTdGFydHVwQWN0aW9uIHtcbiAgLyoqXG4gICAqIEN1c3RvbWVyIGdhdGV3YXkgbXVzdCBpbml0aWF0ZSBJS0UgbmVnb3RpYXRpb25cbiAgICovXG4gIEFERCA9IFwiYWRkXCIsXG5cbiAgLyoqXG4gICAqIEFXUyB3aWxsIGluaXRpYXRlIElLRSBuZWdvdGlhdGlvblxuICAgKi9cbiAgU1RBUlQgPSBcInN0YXJ0XCIsXG59XG4iXX0=
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3Zwbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVGQUF1RjtBQUV2RixnQ0FBZ0M7QUFDaEMsc0RBSzZCO0FBQzdCLGlDQUdlO0FBR2YsNkNBQTBDO0FBQzFDLG9EQUFtRTtBQUNuRSw0Q0FBNEM7QUE2UTVDOztHQUVHO0FBQ0gsSUFBWSxpQkFjWDtBQWRELFdBQVksaUJBQWlCO0lBQzNCLDRFQUE0RTtJQUM1RSxnQ0FBZ0M7SUFDaEMsMkdBQTJHO0lBQzNHOztPQUVHO0lBQ0gsd0NBQW1CLENBQUE7SUFFbkI7OztPQUdHO0lBQ0gsb0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBZFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFjNUI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsZ0NBQWdCO0lBSzlDLElBQVcsaUJBQWlCO1FBQzFCLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixpRkFBaUY7UUFDakYsc0ZBQXNGO1FBQ3RGLDBFQUEwRTtRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLHlCQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDdkQsYUFBYSxFQUNYLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUztnQkFDL0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxDQUFDLENBQUMsU0FBUztTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FB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SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0FBQ2YsQ0FBQyxFQWJXLG1CQUFtQixtQ0FBbkIsbUJBQW1CLFFBYTlCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG1CQWNYO0FBZEQsV0FBWSxtQkFBbUI7SUFDN0IsbUVBQVcsQ0FBQTtJQUNYLG1FQUFXLENBQUE7SUFDWCxzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtBQUNmLENBQUMsRUFkVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQWM5QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxtQkFVWDtBQVZELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsa0NBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsc0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBVlcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFVOUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi92cG4udHNcblxuaW1wb3J0ICogYXMgbmV0IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHtcbiAgY3VzdG9tZXJHYXRld2F5LFxuICB2cG5Db25uZWN0aW9uLFxuICB2cG5Db25uZWN0aW9uUm91dGUsXG4gIHZwbkdhdGV3YXksXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICAvL1NlY3JldFZhbHVlLFxuICBUb2tlbixcbn0gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVZwYywgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHsgSUF3c0NvbnN0cnVjdCwgQXdzQ29uc3RydWN0QmFzZSB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcG5Db25uZWN0aW9uT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICAgKiBAYXR0cmlidXRlIFZwbkNvbm5lY3Rpb25JZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlwIGFkZHJlc3Mgb2YgdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21lckdhdGV3YXlJcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVNOIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5QXNuOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZwbkNvbm5lY3Rpb24gZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgdnBuQ29ubmVjdGlvbk91dHB1dHM6IFZwbkNvbm5lY3Rpb25PdXRwdXRzO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAgICogQGF0dHJpYnV0ZSBWcG5Db25uZWN0aW9uSWRcbiAgICovXG4gIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBhZGRyZXNzIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFTTiBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuR2F0ZXdheU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqIEBhdHRyaWJ1dGUgVnBuR2F0ZXdheUlkXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgdmlydHVhbCBwcml2YXRlIGdhdGV3YXkgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZwbkdhdGV3YXkgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheU91dHB1dHM6IFZwbkdhdGV3YXlPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWcG5UdW5uZWxPcHRpb24ge1xuICAvKipcbiAgICogVGhlIHByZS1zaGFyZWQga2V5IChQU0spIHRvIGVzdGFibGlzaCBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gdGhlXG4gICAqIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IGFuZCBjdXN0b21lciBnYXRld2F5LiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlXG4gICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHBlcmlvZCBgLmAgYW5kIHVuZGVyc2NvcmVzIGBfYC4gTXVzdCBiZSBiZXR3ZWVuIDhcbiAgICogYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYW4gQW1hem9uIGdlbmVyYXRlZCBwcmUtc2hhcmVkIGtleVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlU2hhcmVkS2V5Pzogc3RyaW5nO1xuXG4gIC8vIFRPRE86IEFkb3B0IFNlY3JldFZhbHVlIHBhdHRlcm4gZnJvbSBBV1NDREtcblxuICAvLyAvKipcbiAgLy8gICogVGhlIHByZS1zaGFyZWQga2V5IChQU0spIHRvIGVzdGFibGlzaCBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gdGhlXG4gIC8vICAqIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IGFuZCBjdXN0b21lciBnYXRld2F5LiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlXG4gIC8vICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHBlcmlvZCBgLmAgYW5kIHVuZGVyc2NvcmVzIGBfYC4gTXVzdCBiZSBiZXR3ZWVuIDhcbiAgLy8gICogYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgYW4gQW1hem9uIGdlbmVyYXRlZCBwcmUtc2hhcmVkIGtleVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgcHJlU2hhcmVkS2V5U2VjcmV0PzogU2VjcmV0VmFsdWU7XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSBvZiBpbnNpZGUgSVAgYWRkcmVzc2VzIGZvciB0aGUgdHVubmVsLiBBbnkgc3BlY2lmaWVkIENJRFIgYmxvY2tzIG11c3QgYmVcbiAgICogdW5pcXVlIGFjcm9zcyBhbGwgVlBOIGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSBzYW1lIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5LlxuICAgKiBBIHNpemUgLzMwIENJRFIgYmxvY2sgZnJvbSB0aGUgMTY5LjI1NC4wLjAvMTYgcmFuZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFuIEFtYXpvbiBnZW5lcmF0ZWQgaW5zaWRlIElQIENJRFJcbiAgICovXG4gIHJlYWRvbmx5IHR1bm5lbEluc2lkZUNpZHI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJS0UgdmVyc2lvbnMgZm9yIHRoZSB0dW5uZWxcbiAgICovXG4gIHJlYWRvbmx5IGlrZVZlcnNpb25zPzogSWtlVmVyc2lvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgRFBEIHRpbWVvdXQgYWN0aW9uIGZvciB0aGUgdHVubmVsXG4gICAqL1xuICByZWFkb25seSBkcGRUaW1lb3V0QWN0aW9uPzogRHBkVGltZW91dEFjdGlvbjtcblxuICAvKipcbiAgICogVGhlIERQRCB0aW1lb3V0XG4gICAqL1xuICByZWFkb25seSBkcGRUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0dW5uZWwgbGlmZWN5Y2xlIGNvbnRyb2xcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2w/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMSBESCBncm91cCBudW1iZXJzXG4gICAqL1xuICByZWFkb25seSBwaGFzZTFEaEdyb3VwTnVtYmVycz86IFBoYXNlMURoR3JvdXBOdW1iZXJbXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgZW5jcnlwdGlvbiBhbGdvcml0aG1zXG4gICAqL1xuICByZWFkb25seSBwaGFzZTFFbmNyeXB0aW9uQWxnb3JpdGhtcz86IEVuY3J5cHRpb25BbGdvcml0aG1bXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgaW50ZWdyaXR5IGFsZ29yaXRobXNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMUludGVncml0eUFsZ29yaXRobXM/OiBJbnRlZ3JpdHlBbGdvcml0aG1bXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgbGlmZXRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMUxpZmV0aW1lPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwaGFzZSAyIERIIGdyb3VwIG51bWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMkRoR3JvdXBOdW1iZXJzPzogUGhhc2UyRGhHcm91cE51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBlbmNyeXB0aW9uIGFsZ29yaXRobXNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zPzogRW5jcnlwdGlvbkFsZ29yaXRobVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBpbnRlZ3JpdHkgYWxnb3JpdGhtc1xuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtcz86IEludGVncml0eUFsZ29yaXRobVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBsaWZldGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBwaGFzZTJMaWZldGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0aGUgcmVrZXkgd2luZG93IGR1cmluZyB3aGljaCB0aGUgcmVrZXkgdGltZSBpcyByYW5kb21seSBzZWxlY3RlZFxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICogQG1pbmltdW0gMFxuICAgKiBAbWF4aW11bSAxMDBcbiAgICovXG4gIHJlYWRvbmx5IHJla2V5RnV6elBlcmNlbnRhZ2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJnaW4gdGltZSBiZWZvcmUgcGhhc2UgMiBsaWZldGltZSBleHBpcmVzIGZvciBJS0UgcmVrZXlcbiAgICogQGRlZmF1bHQgNTQwXG4gICAqIEBtaW5pbXVtIDYwXG4gICAqIEByZW1hcmtzIE11c3QgYmUgYmV0d2VlbiA2MCBhbmQgaGFsZiBvZiBwaGFzZTJMaWZldGltZVNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IHJla2V5TWFyZ2luVGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSUtFIHJlcGxheSB3aW5kb3dcbiAgICogQGRlZmF1bHQgMTAyNFxuICAgKiBAbWluaW11bSA2NFxuICAgKiBAbWF4aW11bSAyMDQ4XG4gICAqL1xuICByZWFkb25seSByZXBsYXlXaW5kb3dTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHRha2Ugd2hlbiB0aGUgZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwgZm9yIHRoZSBzZWNvbmQgVlBOIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHlvdXIgY3VzdG9tZXIgZ2F0ZXdheSBkZXZpY2UgbXVzdCBpbml0aWF0ZSB0aGUgSUtFIG5lZ290aWF0aW9uIGFuZCBicmluZyB1cCB0aGUgdHVubmVsLlxuICAgKiBTcGVjaWZ5IGBzdGFydGAgZm9yIEFXUyB0byBpbml0aWF0ZSB0aGUgSUtFIG5lZ290aWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnR1cEFjdGlvbj86IFR1bm5lbFN0YXJ0dXBBY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlwIGFkZHJlc3Mgb2YgdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBpcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVNOIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCA2NTAwMFxuICAgKi9cbiAgcmVhZG9ubHkgYXNuPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGljIHJvdXRlcyB0byBiZSByb3V0ZWQgZnJvbSB0aGUgVlBOIGdhdGV3YXkgdG8gdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IER5bmFtaWMgcm91dGluZyAoQkdQKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljUm91dGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB0dW5uZWwgb3B0aW9ucyBmb3IgdGhlIFZQTiBjb25uZWN0aW9uLiBBdCBtb3N0IHR3byBlbGVtZW50cyAob25lIHBlciB0dW5uZWwpLlxuICAgKiBEdXBsaWNhdGVzIG5vdCBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBbWF6b24gZ2VuZXJhdGVkIHR1bm5lbCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSB0dW5uZWxPcHRpb25zPzogVnBuVHVubmVsT3B0aW9uW107XG59XG5cbi8qKlxuICogVGhlIFZwbkdhdGV3YXkgUHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwbkdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHR5cGUgaXBzZWMuMVxuICAgKlxuICAgKiBUaGlzIGlzIGlnbm9yZWQgYnkgVGVycmFmb3JtIFByb3ZpZGVyIEFXU1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9pbnRlcm5ldF9nYXRld2F5X2F0dGFjaG1lbnQjYXJndW1lbnQtcmVmZXJlbmNlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG5nYXRld2F5Lmh0bWwjY2ZuLWVjMi12cG5nYXRld2F5LXR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogRXhwbGljaXRseSBzcGVjaWZ5IGFuIEFzbiBvciBsZXQgYXdzIHBpY2sgYW4gQXNuIGZvciB5b3UuXG4gICAqIEBkZWZhdWx0IDY1MDAwXG4gICAqL1xuICByZWFkb25seSBhbWF6b25TaWRlQXNuPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBWcGMuZW5hYmxlVnBuR2F0ZXdheSgpIG1ldGhvZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVZwbkdhdGV3YXlPcHRpb25zIGV4dGVuZHMgVnBuR2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYXJyYXkgb2Ygc3VibmV0cyB3aGVyZSB0aGUgcm91dGUgcHJvcGFnYXRpb24gc2hvdWxkIGJlIGFkZGVkLlxuICAgKiBAZGVmYXVsdCBub1Byb3BhZ2F0aW9uXG4gICAqL1xuICByZWFkb25seSB2cG5Sb3V0ZVByb3BhZ2F0aW9uPzogU3VibmV0U2VsZWN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgVnBuQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFZQQyB0byBjb25uZWN0IHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xufVxuXG4vKipcbiAqIFRoZSBWUE4gY29ubmVjdGlvbiB0eXBlLlxuICovXG5leHBvcnQgZW51bSBWcG5Db25uZWN0aW9uVHlwZSB7XG4gIC8vIE5PVEU6IFRlcnJhZm9ybSBQcm92aWRlciBBV1MgZG9lcyBub3QgaGF2ZSBhIFZwbkNvbm5lY3Rpb24uVHlwZSBmaWVsZCAuLi5cbiAgLy8gQnV0IHRoZSBDdXN0b21lciBHYXRld2F5IERvZXNcbiAgLy8gQHNlZSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvY3VzdG9tZXJfZ2F0ZXdheSN0eXBlLTFcbiAgLyoqXG4gICAqIFRoZSBJUHNlYyAxIFZQTiBjb25uZWN0aW9uIHR5cGUuXG4gICAqL1xuICBJUFNFQ18xID0gXCJpcHNlYy4xXCIsXG5cbiAgLyoqXG4gICAqIER1bW15IG1lbWJlclxuICAgKiBUT0RPOiByZW1vdmUgb25jZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzIzMSBpcyBmaXhlZFxuICAgKi9cbiAgRFVNTVkgPSBcImR1bW15XCIsXG59XG5cbi8qKlxuICogVGhlIFZQTiBHYXRld2F5IHRoYXQgc2hhbGwgYmUgYWRkZWQgdG8gdGhlIFZQQ1xuICpcbiAqIEByZXNvdXJjZSBhd3NfdnBuX2dhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZwbkdhdGV3YXkgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZwbkdhdGV3YXkge1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgdnBuR2F0ZXdheU91dHB1dHMoKTogVnBuR2F0ZXdheU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBnYXRld2F5SWQ6IHRoaXMuZ2F0ZXdheUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZwbkdhdGV3YXlPdXRwdXRzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZwbkdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBUaGlzIGlzICdEZWZhdWx0JyBpbnN0ZWFkIG9mICdSZXNvdXJjZScsIGJlY2F1c2UgdXNpbmcgJ0RlZmF1bHQnIHdpbGwgZ2VuZXJhdGVcbiAgICAvLyBhIGxvZ2ljYWwgSUQgZm9yIGEgVnBuR2F0ZXdheSB3aGljaCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBsb2dpY2FsIElEIHRoYXQgdXNlZFxuICAgIC8vIHRvIGJlIGNyZWF0ZWQgZm9yIHRoZSBDZm5WUE5HYXRld2F5IChhbmQgJ1Jlc291cmNlJyB3b3VsZCBub3QgZG8gdGhhdCkuXG4gICAgY29uc3QgdnBuR1cgPSBuZXcgdnBuR2F0ZXdheS5WcG5HYXRld2F5KHRoaXMsIFwiRGVmYXVsdFwiLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOlxuICAgICAgICBwcm9wcy5hbWF6b25TaWRlQXNuICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByb3BzLmFtYXpvblNpZGVBc24udG9TdHJpbmcoKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMuZ2F0ZXdheUlkID0gdnBuR1cuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIG9mIGFuIGltcG9ydGVkIFZwbkNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvbkF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBhZGRyZXNzIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFTTiBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFZwbiBjb25uZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZwbkNvbm5lY3Rpb25CYXNlXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElWcG5Db25uZWN0aW9uXG57XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cG5JZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlwOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjdXN0b21lckdhdGV3YXlBc246IG51bWJlcjtcbiAgcHVibGljIGdldCB2cG5Db25uZWN0aW9uT3V0cHV0cygpOiBWcG5Db25uZWN0aW9uT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZwbklkOiB0aGlzLnZwbklkLFxuICAgICAgY3VzdG9tZXJHYXRld2F5SWQ6IHRoaXMuY3VzdG9tZXJHYXRld2F5SWQsXG4gICAgICBjdXN0b21lckdhdGV3YXlJcDogdGhpcy5jdXN0b21lckdhdGV3YXlJcCxcbiAgICAgIGN1c3RvbWVyR2F0ZXdheUFzbjogdGhpcy5jdXN0b21lckdhdGV3YXlBc24sXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMudnBuQ29ubmVjdGlvbk91dHB1dHM7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBWUE4gQ29ubmVjdGlvblxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBOQ29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVnBuQ29ubmVjdGlvbiBleHRlbmRzIFZwbkNvbm5lY3Rpb25CYXNlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhIFZQTiBjb25uZWN0aW9uIGJ5IHN1cHBseWluZyBhbGwgYXR0cmlidXRlcyBkaXJlY3RseVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVnBuQ29ubmVjdGlvbkF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBWcG5Db25uZWN0aW9uQXR0cmlidXRlcyxcbiAgKTogSVZwbkNvbm5lY3Rpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFZwbkNvbm5lY3Rpb25CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cG5JZDogc3RyaW5nID0gYXR0cnMudnBuSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZyA9IGF0dHJzLmN1c3RvbWVyR2F0ZXdheUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlwOiBzdHJpbmcgPSBhdHRycy5jdXN0b21lckdhdGV3YXlJcDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21lckdhdGV3YXlBc246IG51bWJlciA9IGF0dHJzLmN1c3RvbWVyR2F0ZXdheUFzbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciBhbGwgVlBOIGNvbm5lY3Rpb25zIGluIHRoZSBhY2NvdW50L3JlZ2lvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9WUE5cIixcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0dW5uZWwgc3RhdGUgb2YgYWxsIFZQTiBjb25uZWN0aW9ucyBpbiB0aGUgYWNjb3VudC9yZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsVHVubmVsU3RhdGUoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNBbGwoXCJUdW5uZWxTdGF0ZVwiLCB7IHN0YXRpc3RpYzogXCJhdmdcIiwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdHVubmVsIGRhdGEgaW4gb2YgYWxsIFZQTiBjb25uZWN0aW9ucyBpbiB0aGUgYWNjb3VudC9yZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZXRyaWNBbGxUdW5uZWxEYXRhSW4oXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNBbGwoXCJUdW5uZWxEYXRhSW5cIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHR1bm5lbCBkYXRhIG91dCBvZiBhbGwgVlBOIGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsVHVubmVsRGF0YU91dChcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0FsbChcIlR1bm5lbERhdGFPdXRcIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21lckdhdGV3YXlJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcG5Db25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFwcm9wcy52cGMudnBuR2F0ZXdheUlkKSB7XG4gICAgICBwcm9wcy52cGMuZW5hYmxlVnBuR2F0ZXdheSh7XG4gICAgICAgIHR5cGU6IFwiaXBzZWMuMVwiLFxuICAgICAgICBhbWF6b25TaWRlQXNuOiBwcm9wcy5hc24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5pcCkgJiYgIW5ldC5pc0lQdjQocHJvcHMuaXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcXGBpcFxcYCAke3Byb3BzLmlwfSBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IFZwbkNvbm5lY3Rpb25UeXBlLklQU0VDXzE7XG4gICAgY29uc3QgYmdwQXNuID0gcHJvcHMuYXNuIHx8IDY1MDAwO1xuXG4gICAgY29uc3QgY3VzdG9tZXJHdyA9IG5ldyBjdXN0b21lckdhdGV3YXkuQ3VzdG9tZXJHYXRld2F5KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQ3VzdG9tZXJHYXRld2F5XCIsXG4gICAgICB7XG4gICAgICAgIGJncEFzbjogYmdwQXNuLnRvU3RyaW5nKCksXG4gICAgICAgIGlwQWRkcmVzczogcHJvcHMuaXAsXG4gICAgICAgIHR5cGUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUlkID0gY3VzdG9tZXJHdy5pZDtcbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUFzbiA9IGJncEFzbjtcbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUlwID0gcHJvcHMuaXA7XG5cbiAgICBjb25zdCB2cG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAvLyBWYWxpZGF0ZSB0dW5uZWwgb3B0aW9uc1xuICAgIGlmIChwcm9wcy50dW5uZWxPcHRpb25zKSB7XG4gICAgICBpZiAocHJvcHMudHVubmVsT3B0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IG1vcmUgdGhhbiB0d28gYHR1bm5lbE9wdGlvbnNgXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnR1bm5lbE9wdGlvbnMubGVuZ3RoID09PSAyICYmXG4gICAgICAgIHByb3BzLnR1bm5lbE9wdGlvbnNbMF0udHVubmVsSW5zaWRlQ2lkciA9PT1cbiAgICAgICAgICBwcm9wcy50dW5uZWxPcHRpb25zWzFdLnR1bm5lbEluc2lkZUNpZHIgJiZcbiAgICAgICAgcHJvcHMudHVubmVsT3B0aW9uc1swXS50dW5uZWxJbnNpZGVDaWRyICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNhbWUgJHtwcm9wcy50dW5uZWxPcHRpb25zWzBdLnR1bm5lbEluc2lkZUNpZHJ9IFxcYHR1bm5lbEluc2lkZUNpZHJcXGAgY2Fubm90IGJlIHVzZWQgZm9yIGJvdGggdHVubmVscy5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy50dW5uZWxPcHRpb25zLmZvckVhY2goKG9wdGlvbnMsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIGlmIChvcHRpb25zLnByZVNoYXJlZEtleSAmJiBvcHRpb25zLnByZVNoYXJlZEtleVNlY3JldCkge1xuICAgICAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gICAgIFwiU3BlY2lmeSBhdCBtb3N0IG9uZSBvZiAncHJlU2hhcmVkS2V5JyBhbmQgJ3ByZVNoYXJlZEtleVNlY3JldCcuXCIsXG4gICAgICAgIC8vICAgKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLnByZVNoYXJlZEtleSAmJlxuICAgICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9ucy5wcmVTaGFyZWRLZXkpICYmXG4gICAgICAgICAgIS9eW2EtekEtWjEtOS5fXVthLXpBLVpcXGQuX117Nyw2M30kLy50ZXN0KG9wdGlvbnMucHJlU2hhcmVkS2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIFxcYHByZVNoYXJlZEtleVxcYCAke29wdGlvbnMucHJlU2hhcmVkS2V5fSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBpcyBpbnZhbGlkLiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCAuXy4gTXVzdCBiZSBiZXR3ZWVuIDggYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy50dW5uZWxJbnNpZGVDaWRyKSB7XG4gICAgICAgICAgaWYgKFJFU0VSVkVEX1RVTk5FTF9JTlNJREVfQ0lEUi5pbmNsdWRlcyhvcHRpb25zLnR1bm5lbEluc2lkZUNpZHIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBUaGUgXFxgdHVubmVsSW5zaWRlQ2lkclxcYCAke29wdGlvbnMudHVubmVsSW5zaWRlQ2lkcn0gZm9yIHR1bm5lbCAke2luZGV4ICsgMX0gaXMgYSByZXNlcnZlZCBpbnNpZGUgQ0lEUi5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhL14xNjlcXC4yNTRcXC5cXGR7MSwzfVxcLlxcZHsxLDN9XFwvMzAkLy50ZXN0KG9wdGlvbnMudHVubmVsSW5zaWRlQ2lkcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYFRoZSBcXGB0dW5uZWxJbnNpZGVDaWRyXFxgICR7b3B0aW9ucy50dW5uZWxJbnNpZGVDaWRyfSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBpcyBub3QgYSBzaXplIC8zMCBDSURSIGJsb2NrIGZyb20gdGhlIDE2OS4yNTQuMC4wLzE2IHJhbmdlLmAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFZhbGlkYXRlIHJla2V5RnV6elBlcmNlbnRhZ2VcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZWtleUZ1enpQZXJjZW50YWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZWtleUZ1enpQZXJjZW50YWdlIDwgMCB8fFxuICAgICAgICAgICAgICBvcHRpb25zLnJla2V5RnV6elBlcmNlbnRhZ2UgPiAxMDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYHJla2V5RnV6elBlcmNlbnRhZ2UgZm9yIHR1bm5lbCAke2luZGV4ICsgMX0gbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEwMGAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmFsaWRhdGUgcmVrZXlNYXJnaW5UaW1lU2Vjb25kc1xuICAgICAgICAgIGlmIChvcHRpb25zLnJla2V5TWFyZ2luVGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5yZWtleU1hcmdpblRpbWUudG9TZWNvbmRzKCkgPCA2MCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYHJla2V5TWFyZ2luVGltZSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBtdXN0IGJlIGF0IGxlYXN0IDYwIHNlY29uZHNgLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGxlc3MgdGhhbiBoYWxmIG9mIHBoYXNlMkxpZmV0aW1lU2Vjb25kc1xuICAgICAgICAgICAgY29uc3QgcGhhc2UyTGlmZXRpbWUgPSBvcHRpb25zLnBoYXNlMkxpZmV0aW1lIHx8IER1cmF0aW9uLmhvdXJzKDEpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLnJla2V5TWFyZ2luVGltZS50b1NlY29uZHMoKSA+XG4gICAgICAgICAgICAgIHBoYXNlMkxpZmV0aW1lLnRvU2Vjb25kcygpIC8gMlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgcmVrZXlNYXJnaW5UaW1lIGZvciB0dW5uZWwgJHtpbmRleCArIDF9IG11c3QgYmUgbGVzcyB0aGFuIGhhbGYgb2YgcGhhc2UyTGlmZXRpbWUgKCR7cGhhc2UyTGlmZXRpbWUudG9TZWNvbmRzKCkgLyAyfSlgLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFZhbGlkYXRlIHJlcGxheVdpbmRvd1NpemVcbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXBsYXlXaW5kb3dTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZXBsYXlXaW5kb3dTaXplIDwgNjQgfHxcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZXBsYXlXaW5kb3dTaXplID4gMjA0OFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgcmVwbGF5V2luZG93U2l6ZSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBtdXN0IGJlIGJldHdlZW4gNjQgYW5kIDIwNDhgLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1hcCB0dW5uZWwgb3B0aW9ucyB0byBBV1MgcHJvdmlkZXIgZm9ybWF0XG4gICAgICAgIGNvbnN0IHR1bm5lbFByZWZpeCA9IGB0dW5uZWwke2luZGV4ICsgMX1gO1xuICAgICAgICBPYmplY3QuYXNzaWduKHZwblR1bm5lbE9wdGlvbnNTcGVjaWZpY2F0aW9ucywge1xuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UHJlc2hhcmVkS2V5YF06IG9wdGlvbnMucHJlU2hhcmVkS2V5LFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9SW5zaWRlQ2lkcmBdOiBvcHRpb25zLnR1bm5lbEluc2lkZUNpZHIsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1EcGRUaW1lb3V0QWN0aW9uYF06IG9wdGlvbnMuZHBkVGltZW91dEFjdGlvbixcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fURwZFRpbWVvdXRTZWNvbmRzYF06IG9wdGlvbnMuZHBkVGltZW91dD8udG9TZWNvbmRzKCksXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1FbmFibGVUdW5uZWxMaWZlY3ljbGVDb250cm9sYF06XG4gICAgICAgICAgICBvcHRpb25zLmVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2wsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1Ja2VWZXJzaW9uc2BdOiBvcHRpb25zLmlrZVZlcnNpb25zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UxRGhHcm91cE51bWJlcnNgXTogb3B0aW9ucy5waGFzZTFEaEdyb3VwTnVtYmVycyxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMUVuY3J5cHRpb25BbGdvcml0aG1zYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMUVuY3J5cHRpb25BbGdvcml0aG1zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UxSW50ZWdyaXR5QWxnb3JpdGhtc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5waGFzZTFJbnRlZ3JpdHlBbGdvcml0aG1zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UxTGlmZXRpbWVTZWNvbmRzYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMUxpZmV0aW1lPy50b1NlY29uZHMoKSxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMkRoR3JvdXBOdW1iZXJzYF06IG9wdGlvbnMucGhhc2UyRGhHcm91cE51bWJlcnMsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QaGFzZTJFbmNyeXB0aW9uQWxnb3JpdGhtc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5waGFzZTJFbmNyeXB0aW9uQWxnb3JpdGhtcyxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMkludGVncml0eUFsZ29yaXRobXNgXTpcbiAgICAgICAgICAgIG9wdGlvbnMucGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtcyxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMkxpZmV0aW1lU2Vjb25kc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5waGFzZTJMaWZldGltZT8udG9TZWNvbmRzKCksXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1TdGFydHVwQWN0aW9uYF06IG9wdGlvbnMuc3RhcnR1cEFjdGlvbixcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVJla2V5RnV6elBlcmNlbnRhZ2VgXTogb3B0aW9ucy5yZWtleUZ1enpQZXJjZW50YWdlLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UmVrZXlNYXJnaW5UaW1lU2Vjb25kc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5yZWtleU1hcmdpblRpbWU/LnRvU2Vjb25kcygpLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UmVwbGF5V2luZG93U2l6ZWBdOiBvcHRpb25zLnJlcGxheVdpbmRvd1NpemUsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgdnBuQ29ubmVjdGlvbi5WcG5Db25uZWN0aW9uKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgdHlwZSxcbiAgICAgIGN1c3RvbWVyR2F0ZXdheUlkOiBjdXN0b21lckd3LmlkLFxuICAgICAgc3RhdGljUm91dGVzT25seTogcHJvcHMuc3RhdGljUm91dGVzID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgdnBuR2F0ZXdheUlkOiBwcm9wcy52cGMudnBuR2F0ZXdheUlkLFxuICAgICAgLi4udnBuVHVubmVsT3B0aW9uc1NwZWNpZmljYXRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy52cG5JZCA9IHJlc291cmNlLmlkO1xuXG4gICAgaWYgKHByb3BzLnN0YXRpY1JvdXRlcykge1xuICAgICAgcHJvcHMuc3RhdGljUm91dGVzLmZvckVhY2goKHJvdXRlKSA9PiB7XG4gICAgICAgIG5ldyB2cG5Db25uZWN0aW9uUm91dGUuVnBuQ29ubmVjdGlvblJvdXRlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYFJvdXRlJHtyb3V0ZS5yZXBsYWNlKC9bXlxcZF0vZywgXCJcIil9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogcm91dGUsXG4gICAgICAgICAgICB2cG5Db25uZWN0aW9uSWQ6IHRoaXMudnBuSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUkVTRVJWRURfVFVOTkVMX0lOU0lERV9DSURSID0gW1xuICBcIjE2OS4yNTQuMC4wLzMwXCIsXG4gIFwiMTY5LjI1NC4xLjAvMzBcIixcbiAgXCIxNjkuMjU0LjIuMC8zMFwiLFxuICBcIjE2OS4yNTQuMy4wLzMwXCIsXG4gIFwiMTY5LjI1NC40LjAvMzBcIixcbiAgXCIxNjkuMjU0LjUuMC8zMFwiLFxuICBcIjE2OS4yNTQuMTY5LjI1Mi8zMFwiLFxuXTtcblxuLyoqXG4gKiBBY3Rpb24gdG8gdGFrZSBhZnRlciBEUEQgdGltZW91dCBvY2N1cnNcbiAqL1xuZXhwb3J0IGVudW0gRHBkVGltZW91dEFjdGlvbiB7XG4gIC8qKlxuICAgKiBFbmQgdGhlIElLRSBzZXNzaW9uXG4gICAqL1xuICBDTEVBUiA9IFwiY2xlYXJcIixcblxuICAvKipcbiAgICogVGFrZSBubyBhY3Rpb25cbiAgICovXG4gIE5PTkUgPSBcIm5vbmVcIixcblxuICAvKipcbiAgICogUmVzdGFydCB0aGUgSUtFIGluaXRpYXRpb25cbiAgICovXG4gIFJFU1RBUlQgPSBcInJlc3RhcnRcIixcbn1cblxuLyoqXG4gKiBJS0UgdmVyc2lvbnMgcGVybWl0dGVkIGZvciBWUE4gdHVubmVsc1xuICovXG5leHBvcnQgZW51bSBJa2VWZXJzaW9uIHtcbiAgLyoqXG4gICAqIElLRSB2ZXJzaW9uIDFcbiAgICovXG4gIElLRVYxID0gXCJpa2V2MVwiLFxuXG4gIC8qKlxuICAgKiBJS0UgdmVyc2lvbiAyXG4gICAqL1xuICBJS0VWMiA9IFwiaWtldjJcIixcbn1cblxuLyoqXG4gKiBQaGFzZSAxIGFuZCAyIGVuY3J5cHRpb24gYWxnb3JpdGhtc1xuICovXG5leHBvcnQgZW51bSBFbmNyeXB0aW9uQWxnb3JpdGhtIHtcbiAgLyoqXG4gICAqIEFFUyB3aXRoIDEyOC1iaXQga2V5XG4gICAqL1xuICBBRVMxMjggPSBcIkFFUzEyOFwiLFxuXG4gIC8qKlxuICAgKiBBRVMgd2l0aCAyNTYtYml0IGtleVxuICAgKi9cbiAgQUVTMjU2ID0gXCJBRVMyNTZcIixcblxuICAvKipcbiAgICogQUVTLUdDTSB3aXRoIDEyOC1iaXQga2V5IGFuZCAxNiBieXRlIGludGVncml0eSBjaGVja1xuICAgKi9cbiAgQUVTMTI4X0dDTV8xNiA9IFwiQUVTMTI4LUdDTS0xNlwiLFxuXG4gIC8qKlxuICAgKiBBRVMtR0NNIHdpdGggMjU2LWJpdCBrZXkgYW5kIDE2IGJ5dGUgaW50ZWdyaXR5IGNoZWNrXG4gICAqL1xuICBBRVMyNTZfR0NNXzE2ID0gXCJBRVMyNTYtR0NNLTE2XCIsXG59XG5cbi8qKlxuICogUGhhc2UgMSBhbmQgMiBpbnRlZ3JpdHkgYWxnb3JpdGhtc1xuICovXG5leHBvcnQgZW51bSBJbnRlZ3JpdHlBbGdvcml0aG0ge1xuICAvKipcbiAgICogU0hBLTEgaGFzaCBhbGdvcml0aG1cbiAgICovXG4gIFNIQTEgPSBcIlNIQTFcIixcblxuICAvKipcbiAgICogU0hBLTIgd2l0aCAyNTYtYml0IGRpZ2VzdFxuICAgKi9cbiAgU0hBMl8yNTYgPSBcIlNIQTItMjU2XCIsXG5cbiAgLyoqXG4gICAqIFNIQS0yIHdpdGggMzg0LWJpdCBkaWdlc3RcbiAgICovXG4gIFNIQTJfMzg0ID0gXCJTSEEyLTM4NFwiLFxuXG4gIC8qKlxuICAgKiBTSEEtMiB3aXRoIDUxMi1iaXQgZGlnZXN0XG4gICAqL1xuICBTSEEyXzUxMiA9IFwiU0hBMi01MTJcIixcbn1cblxuLyoqXG4gKiBQaGFzZSAxIERpZmZpZS1IZWxsbWFuIGdyb3VwIG51bWJlcnNcbiAqL1xuZXhwb3J0IGVudW0gUGhhc2UxRGhHcm91cE51bWJlciB7XG4gIEdST1VQXzIgPSAyLFxuICBHUk9VUF8xNCA9IDE0LFxuICBHUk9VUF8xNSA9IDE1LFxuICBHUk9VUF8xNiA9IDE2LFxuICBHUk9VUF8xNyA9IDE3LFxuICBHUk9VUF8xOCA9IDE4LFxuICBHUk9VUF8xOSA9IDE5LFxuICBHUk9VUF8yMCA9IDIwLFxuICBHUk9VUF8yMSA9IDIxLFxuICBHUk9VUF8yMiA9IDIyLFxuICBHUk9VUF8yMyA9IDIzLFxuICBHUk9VUF8yNCA9IDI0LFxufVxuXG4vKipcbiAqIFBoYXNlIDIgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVyc1xuICovXG5leHBvcnQgZW51bSBQaGFzZTJEaEdyb3VwTnVtYmVyIHtcbiAgR1JPVVBfMiA9IDIsXG4gIEdST1VQXzUgPSA1LFxuICBHUk9VUF8xNCA9IDE0LFxuICBHUk9VUF8xNSA9IDE1LFxuICBHUk9VUF8xNiA9IDE2LFxuICBHUk9VUF8xNyA9IDE3LFxuICBHUk9VUF8xOCA9IDE4LFxuICBHUk9VUF8xOSA9IDE5LFxuICBHUk9VUF8yMCA9IDIwLFxuICBHUk9VUF8yMSA9IDIxLFxuICBHUk9VUF8yMiA9IDIyLFxuICBHUk9VUF8yMyA9IDIzLFxuICBHUk9VUF8yNCA9IDI0LFxufVxuXG4vKipcbiAqIFR1bm5lbCBzdGFydHVwIGFjdGlvblxuICovXG5leHBvcnQgZW51bSBUdW5uZWxTdGFydHVwQWN0aW9uIHtcbiAgLyoqXG4gICAqIEN1c3RvbWVyIGdhdGV3YXkgbXVzdCBpbml0aWF0ZSBJS0UgbmVnb3RpYXRpb25cbiAgICovXG4gIEFERCA9IFwiYWRkXCIsXG5cbiAgLyoqXG4gICAqIEFXUyB3aWxsIGluaXRpYXRlIElLRSBuZWdvdGlhdGlvblxuICAgKi9cbiAgU1RBUlQgPSBcInN0YXJ0XCIsXG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ContextProvider = void 0;
4
- const cdktf_1 = require("cdktf");
4
+ const cdktn_1 = require("cdktn");
5
5
  const constructs_1 = require("constructs");
6
6
  const errors_1 = require("../errors");
7
7
  const aws_stack_1 = require("./aws-stack");
@@ -32,7 +32,7 @@ class ContextProvider {
32
32
  : {}),
33
33
  ...options.props,
34
34
  };
35
- if (Object.values(props).find((x) => cdktf_1.Token.isUnresolved(x))) {
35
+ if (Object.values(props).find((x) => cdktn_1.Token.isUnresolved(x))) {
36
36
  throw new errors_1.ValidationError(`Cannot determine scope for context provider ${options.provider}.\n` +
37
37
  "This usually happens when one or more of the provider props have unresolved tokens", scope);
38
38
  }
@@ -86,7 +86,7 @@ class ContextProvider {
86
86
  props: extendedProps,
87
87
  });
88
88
  if (providerError !== undefined) {
89
- cdktf_1.Annotations.of(scope).addError(providerError);
89
+ cdktn_1.Annotations.of(scope).addError(providerError);
90
90
  }
91
91
  return { value: options.dummyValue };
92
92
  }
@@ -138,4 +138,4 @@ function propsToArray(props, keyPrefix = "") {
138
138
  ret.sort();
139
139
  return ret;
140
140
  }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3MvY29udGV4dC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpQ0FBMkM7QUFDM0MsMkNBQTZDO0FBQzdDLHNDQUE0QztBQUM1QywyQ0FBdUM7QUFDdkMsa0NBQWtDO0FBd0dsQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLGVBQWU7SUFDMUI7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUNsQixLQUFnQixFQUNoQixPQUE2QjtRQUU3QixNQUFNLEtBQUssR0FBRyxvQkFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxNQUFNLEtBQUssR0FBRztZQUNaLHVFQUF1RTtZQUN2RSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDbEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCO2dCQUM1QixDQUFDLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLE9BQU8sQ0FBQyxLQUFLO1NBQ2pCLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksd0JBQWUsQ0FDdkIsK0NBQStDLE9BQU8sQ0FBQyxRQUFRLEtBQUs7Z0JBQ2xFLG9GQUFvRixFQUN0RixLQUFLLENBQ04s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Q0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gXCJAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWFcIjtcbmltcG9ydCB7IEFubm90YXRpb25zLCBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBOb2RlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tIFwiLi9jeC1hcGlcIjtcblxuLyoqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Q29udGV4dEtleU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbnRleHQgcHJvdmlkZXIgdG8gcXVlcnkuXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlci1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHN0YWNrJ3MgYWNjb3VudCBhbmQgcmVnaW9uIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlRW52aXJvbm1lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGFkZGl0aW9uYWwgZGlzY3JpbWluYXRvciB0byB0aGUgYGNkay5jb250ZXh0Lmpzb25gIGNhY2hlIGtleS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGNhY2hlIGtleVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbENhY2hlS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRDb250ZXh0VmFsdWVPcHRpb25zIGV4dGVuZHMgR2V0Q29udGV4dEtleU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgbG9va3VwIGhhcyBub3QgeWV0IGJlZW4gcGVyZm9ybWVkLlxuICAgKlxuICAgKiBVcG9uIGZpcnN0IHN5bnRoZXNpcywgdGhlIGxvb2t1cHMgaGFzIG5vdCB5ZXQgYmVlbiBwZXJmb3JtZWQuIFRoZVxuICAgKiBgZ2V0VmFsdWUoKWAgb3BlcmF0aW9uIHJldHVybnMgdGhpcyB2YWx1ZSBpbnN0ZWFkLCBzbyB0aGF0IHN5bnRoZXNpcyBjYW5cbiAgICogcHJvY2VlZC4gQWZ0ZXIgc3ludGhlc2lzIGNvbXBsZXRlcyB0aGUgZmlyc3QgdGltZSwgdGhlIGFjdHVhbCBsb29rdXAgd2lsbFxuICAgKiBiZSBwZXJmb3JtZWQgYW5kIHN5bnRoZXNpcyB3aWxsIHJ1biBhZ2FpbiB3aXRoIHRoZSAqcmVhbCogdmFsdWUuXG4gICAqXG4gICAqIER1bW15IHZhbHVlcyBzaG91bGQgcHJlZmVyYWJseSBoYXZlIHZhbGlkIHNoYXBlcyBzbyB0aGF0IGRvd25zdHJlYW1cbiAgICogY29uc3VtZXJzIG9mIGxvb2t1cCB2YWx1ZXMgZG9uJ3QgdGhyb3cgdmFsaWRhdGlvbiBleGNlcHRpb25zIGlmIHRoZXlcbiAgICogZW5jb3VudGVyIGEgZHVtbXkgdmFsdWUgKG9yIGFsbCBwb3NzaWJsZSBkb3duc3RyZWFtIGNvbnN1bWVycyBuZWVkIHRvXG4gICAqIGVmZmVjdGl2ZWx5IGNoZWNrIGZvciB0aGUgd2VsbC1rbm93biBzaGFwZSBvZiB0aGUgZHVtbXkgdmFsdWUpOyB0aHJvd2luZyBhblxuICAgKiBleGNlcHRpb24gd291bGQgZXJyb3Igb3V0IHRoZSBzeW50aGVzaXMgb3BlcmF0aW9uIGFuZCBwcmV2ZW50IHRoZSBsb29rdXBcbiAgICogYW5kIHRoZSBzZWNvbmQsIHJlYWwsIHN5bnRoZXNpcyBmcm9tIGhhcHBlbmluZy5cbiAgICpcbiAgICogIyMgQ29ubmVjdGlvbiB0byBtdXN0RXhpc3RcbiAgICpcbiAgICogYGR1bW15VmFsdWVgIGlzIGFsc28gdXNlZCBhcyB0aGUgb2ZmaWNpYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBsb29rdXAgaGFzXG4gICAqIGZhaWxlZCBhbmQgYG11c3RFeGlzdCA9PSBmYWxzZWAuXG4gICAqL1xuICByZWFkb25seSBkdW1teVZhbHVlOiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlc291cmNlIG11c3QgZXhpc3RcbiAgICpcbiAgICogSWYgdGhpcyBpcyBzZXQgKHRoZSBkZWZhdWx0KSwgdGhlIHF1ZXJ5IGZhaWxzIGlmIHRoZSB2YWx1ZSBvciByZXNvdXJjZSB3ZVxuICAgKiB0cmllZCB0byBsb29rIHVwIGRvZXNuJ3QgZXhpc3QuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYGZhbHNlYCBhbmQgdGhlIHZhbHVlIHdlIHRyaWVkIHRvIGxvb2sgdXAgY291bGQgbm90IGJlIGZvdW5kLCB0aGVcbiAgICogZmFpbHVyZSBpcyBzdXBwcmVzc2VkIGFuZCBgZHVtbXlWYWx1ZWAgaXMgb2ZmaWNpYWxseSByZXR1cm5lZCBpbnN0ZWFkLlxuICAgKlxuICAgKiBXaGVuIHRoaXMgaGFwcGVucywgYGR1bW15VmFsdWVgIGlzIGVuY29kZWQgaW50byBjYWNoZWQgY29udGV4dCBhbmQgaXQgd2lsbFxuICAgKiBuZXZlciBiZSByZWZyZXNoZWQgYW55bW9yZSB1bnRpbCB0aGUgdXNlciBydW5zIGBjZGsgY29udGV4dCAtLXJlc2V0IDxrZXk+YC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgdGhlIENESyBhcHAgY29kZSB0byBtYWtlIGEgZGlzdGluY3Rpb25cbiAgICogYmV0d2VlbiBcInRoZSBsb29rdXAgaGFzIG5vdCBiZWVuIHBlcmZvcm1lZCB5ZXRcIiBhbmQgXCJ0aGUgbG9va3VwIGRpZG4ndFxuICAgKiBmaW5kIGFueXRoaW5nIGFuZCB3ZSByZXR1cm5lZCBhIGRlZmF1bHQgdmFsdWUgaW5zdGVhZFwiLlxuICAgKlxuICAgKiAjIyBDb250ZXh0IHByb3ZpZGVyc1xuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgbXVzdCBleHBsaWNpdGx5IGJlIHN1cHBvcnRlZCBieSBjb250ZXh0IHByb3ZpZGVycy4gSXQgaXNcbiAgICogY3VycmVudGx5IHN1cHBvcnRlZCBieTpcbiAgICpcbiAgICogLSBLTVMga2V5IHByb3ZpZGVyXG4gICAqIC0gU1NNIHBhcmFtZXRlciBwcm92aWRlclxuICAgKlxuICAgKiAjIyBOb3RlIHRvIGltcGxlbWVudG9yc1xuICAgKlxuICAgKiBUaGUgZHVtbXkgdmFsdWUgc2hvdWxkIG5vdCBiZSByZXR1cm5lZCBmb3IgYWxsIFNESyBsb29rdXAgZmFpbHVyZXMuIEZvclxuICAgKiBleGFtcGxlLCBcIm5vIG5ldHdvcmtcIiBvciBcIm5vIGNyZWRlbnRpYWxzXCIgb3IgXCJtYWxmb3JtZWQgcXVlcnlcIiBzaG91bGRcbiAgICogbm90IGxlYWQgdG8gdGhlIGR1bW15IHZhbHVlIGJlaW5nIHJldHVybmVkLiBPbmx5IHRoZSBjYXNlIG9mIFwibm8gc3VjaFxuICAgKiByZXNvdXJjZVwiIHNob3VsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbXVzdEV4aXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Q29udGV4dEtleVJlc3VsdCB7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Q29udGV4dFZhbHVlUmVzdWx0IHtcbiAgcmVhZG9ubHkgdmFsdWU/OiBhbnk7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgdGhlIG1vZGVsIHNpZGUgb2YgY29udGV4dCBwcm92aWRlcnNcbiAqXG4gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjb21tdW5pY2F0ZSB3aXRoIGNvbnRleHQgcHJvdmlkZXIgcGx1Z2lucyBpbiB0aGUgJ2Nka1xuICogdG9vbGtpdCcgdmlhIGNvbnRleHQgdmFyaWFibGVzIChpbnB1dCksIG91dHB1dHRpbmcgc3BlY2lhbGl6ZWQgcXVlcmllcyBmb3JcbiAqIG1vcmUgY29udGV4dCB2YXJpYWJsZXMgKG91dHB1dCkuXG4gKlxuICogQ29udGV4dFByb3ZpZGVyIG5lZWRzIGFjY2VzcyB0byBhIENvbnN0cnVjdCB0byBob29rIGludG8gdGhlIGNvbnRleHQgbWVjaGFuaXNtLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRleHRQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAcmV0dXJucyB0aGUgY29udGV4dCBrZXkgb3IgdW5kZWZpbmVkIGlmIGEga2V5IGNhbm5vdCBiZSByZW5kZXJlZCAoZHVlIHRvIHRva2VucyB1c2VkIGluIGFueSBvZiB0aGUgcHJvcHMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEtleShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wdGlvbnM6IEdldENvbnRleHRLZXlPcHRpb25zLFxuICApOiBHZXRDb250ZXh0S2V5UmVzdWx0IHtcbiAgICBjb25zdCBzdGFjayA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKTtcblxuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkbyBub3Qgc3VwcG9ydCBzdGF0aWMgdmFsdWUgZm9yIGFjY291bnRcbiAgICAgIC4uLigob3B0aW9ucy5pbmNsdWRlRW52aXJvbm1lbnQgPz8gZmFsc2UpXG4gICAgICAgID8geyBhY2NvdW50OiBzdGFjay5hY2NvdW50LCByZWdpb246IHN0YWNrLnJlZ2lvbiB9XG4gICAgICAgIDoge30pLFxuICAgICAgLi4uKG9wdGlvbnMuYWRkaXRpb25hbENhY2hlS2V5XG4gICAgICAgID8geyBhZGRpdGlvbmFsQ2FjaGVLZXk6IG9wdGlvbnMuYWRkaXRpb25hbENhY2hlS2V5IH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi5vcHRpb25zLnByb3BzLFxuICAgIH07XG5cbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhwcm9wcykuZmluZCgoeCkgPT4gVG9rZW4uaXNVbnJlc29sdmVkKHgpKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYENhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgJHtvcHRpb25zLnByb3ZpZGVyfS5cXG5gICtcbiAgICAgICAgICBcIlRoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gb25lIG9yIG1vcmUgb2YgdGhlIHByb3ZpZGVyIHByb3BzIGhhdmUgdW5yZXNvbHZlZCB0b2tlbnNcIixcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BTdHJpbmdzID0gcHJvcHNUb0FycmF5KHByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBgJHtvcHRpb25zLnByb3ZpZGVyfToke3Byb3BTdHJpbmdzLmpvaW4oXCI6XCIpfWAsXG4gICAgICBwcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRWYWx1ZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wdGlvbnM6IEdldENvbnRleHRWYWx1ZU9wdGlvbnMsXG4gICk6IEdldENvbnRleHRWYWx1ZVJlc3VsdCB7XG4gICAgaWYgKG9wdGlvbnMubXVzdEV4aXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiT25seSBzdXBwbHkgb25lIG9mICdtdXN0RXhpc3QnIGFuZCAnaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0J1wiLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSk7XG5cbiAgICAvLyBUT0RPOiByZS1lbmFibGUgd2hlbmV2ZXIgZW52aXJvbm1lbnQgZGV0YWlscyBjYW4gYmUgc2V0IGRpcmVjdGx5XG4gICAgLy8gaWYgKFRva2VuLmlzVW5yZXNvbHZlZChzdGFjay5hY2NvdW50KSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2sucmVnaW9uKSkge1xuICAgIC8vICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAvLyAgICAgYENhbm5vdCByZXRyaWV2ZSB2YWx1ZSBmcm9tIGNvbnRleHQgcHJvdmlkZXIgJHtvcHRpb25zLnByb3ZpZGVyfSBzaW5jZSBhY2NvdW50L3JlZ2lvbiBgICtcbiAgICAvLyAgICAgICAnYXJlIG5vdCBzcGVjaWZpZWQgYXQgdGhlIHN0YWNrIGxldmVsLiBDb25maWd1cmUgXCJlbnZcIiB3aXRoIGFuIGFjY291bnQgYW5kIHJlZ2lvbiB3aGVuICcgK1xuICAgIC8vICAgICAgIFwieW91IGRlZmluZSB5b3VyIHN0YWNrLlwiICtcbiAgICAvLyAgICAgICBcIlNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2xhdGVzdC9ndWlkZS9lbnZpcm9ubWVudHMuaHRtbCBmb3IgbW9yZSBkZXRhaWxzLlwiLFxuICAgIC8vICAgICBzY29wZSxcbiAgICAvLyAgICk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgeyBrZXksIHByb3BzIH0gPSB0aGlzLmdldEtleShzY29wZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgdmFsdWUgPSBOb2RlLm9mKHNjb3BlKS50cnlHZXRDb250ZXh0KGtleSk7XG4gICAgY29uc3QgcHJvdmlkZXJFcnJvciA9IGV4dHJhY3RQcm92aWRlckVycm9yKHZhbHVlKTtcblxuICAgIC8vIGlmIGNvbnRleHQgaXMgbWlzc2luZyBvciBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY29udGV4dCByZXRyaWV2YWwsXG4gICAgLy8gcmVwb3J0IGFuZCByZXR1cm4gYSBkdW1teSB2YWx1ZS5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm92aWRlckVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFJlbmRlciAnaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0JyBpZmYgb25lIG9mIHRoZSBwYXJhbWV0ZXJzIGlzIHN1cHBsaWVkLlxuICAgICAgY29uc3QgaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0ID1cbiAgICAgICAgb3B0aW9ucy5tdXN0RXhpc3QgIT09IHVuZGVmaW5lZCA/ICFvcHRpb25zLm11c3RFeGlzdCA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gYnVpbGQgYSB2ZXJzaW9uIG9mIHRoZSBwcm9wcyB3aGljaCBpbmNsdWRlcyB0aGUgZHVtbXlWYWx1ZSBhbmQgaWdub3JlRXJyb3IgZmxhZ1xuICAgICAgY29uc3QgZXh0ZW5kZWRQcm9wczogeyBbcDogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICAgIGR1bW15VmFsdWU6IG9wdGlvbnMuZHVtbXlWYWx1ZSxcblxuICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSByZW5hbWVkIHRoZSB1c2VyLWZhY2luZyBwcm9wZXJ0eSwgdGhlIGZpZWxkIGluIHRoZVxuICAgICAgICAvLyBjbG91ZCBhc3NlbWJseSBzdGlsbCBoYXMgdGhlIG9yaWdpbmFsIG5hbWUsIHdoaWNoIGlzIHNvbWV3aGF0IHdyb25nXG4gICAgICAgIC8vIGJlY2F1c2UgaXQncyBub3QgYWJvdXQgbWlzc2luZyBjb250ZXh0LlxuICAgICAgICBpZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQsXG4gICAgICAgIC4uLihvcHRpb25zLmFkZGl0aW9uYWxDYWNoZUtleVxuICAgICAgICAgID8geyBhZGRpdGlvbmFsQ2FjaGVLZXk6IG9wdGlvbnMuYWRkaXRpb25hbENhY2hlS2V5IH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9O1xuXG4gICAgICAvLyBXZSdsbCBzdG9yZSB0aGUgZXh0ZW5kZWRQcm9wcyBpbiB0aGUgbWlzc2luZ0NvbnRleHRLZXkgcmVwb3J0XG4gICAgICAvLyBzbyB0aGF0IHdlIGNhbiByZXRyaWV2ZSB0aGUgZHVtbXlWYWx1ZSBhbmQgaWdub3JlRXJyb3IgZmxhZ1xuICAgICAgLy8gaW4gdGhlIGF3cy1jZGsncyBzc20tY29udGV4dCBhbmQga21zIGtleSBwcm92aWRlclxuICAgICAgc3RhY2sucmVwb3J0TWlzc2luZ0NvbnRleHRLZXkoe1xuICAgICAgICBrZXksXG4gICAgICAgIHByb3ZpZGVyOiBvcHRpb25zLnByb3ZpZGVyIGFzIGN4c2NoZW1hLkNvbnRleHRQcm92aWRlcixcbiAgICAgICAgcHJvcHM6IGV4dGVuZGVkUHJvcHMgYXMgY3hzY2hlbWEuQ29udGV4dFF1ZXJ5UHJvcGVydGllcyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocHJvdmlkZXJFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKHNjb3BlKS5hZGRFcnJvcihwcm92aWRlckVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgdmFsdWU6IG9wdGlvbnMuZHVtbXlWYWx1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbn1cblxuLyoqXG4gKiBJZiB0aGUgY29udGV4dCB2YWx1ZSByZXByZXNlbnRzIGFuIGVycm9yLCByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFByb3ZpZGVyRXJyb3IodmFsdWU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWVbY3hhcGkuUFJPVklERVJfRVJST1JfS0VZXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFF1b3RlIGNvbG9ucyBpbiBhbGwgc3RyaW5ncyBzbyB0aGF0IHdlIGNhbiB1bmRvIHRoZSBxdW90aW5nIGF0IGEgbGF0ZXIgcG9pbnRcbiAqXG4gKiBXZSdsbCB1c2UgJCBhcyBhIHF1b3RpbmcgY2hhcmFjdGVyLCBmb3Igbm8gcGFydGljdWxhcmx5IGdvb2QgcmVhc29uIG90aGVyXG4gKiB0aGFuIHRoYXQgXFwgaXMgZ29pbmcgdG8gbGVhZCB0byBxdW90aW5nIGhlbGwgd2hlbiB0aGUga2V5cyBhcmUgc3RvcmVkIGluIEpTT04uXG4gKi9cbmZ1bmN0aW9uIGNvbG9uUXVvdGUoeHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB4cy5yZXBsYWNlKC9cXCQvZywgXCIkJFwiKS5yZXBsYWNlKC86L2csIFwiJDpcIik7XG59XG5cbmZ1bmN0aW9uIHByb3BzVG9BcnJheShwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwga2V5UHJlZml4ID0gXCJcIik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0OiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIC8vIHNraXAgdW5kZWZpbmVkIHZhbHVlc1xuICAgIGlmIChwcm9wc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZW9mIHByb3BzW2tleV0pIHtcbiAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICByZXQucHVzaCguLi5wcm9wc1RvQXJyYXkocHJvcHNba2V5XSwgYCR7a2V5UHJlZml4fSR7a2V5fS5gKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgIHJldC5wdXNoKGAke2tleVByZWZpeH0ke2tleX09JHtjb2xvblF1b3RlKHByb3BzW2tleV0pfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0LnB1c2goYCR7a2V5UHJlZml4fSR7a2V5fT0ke0pTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXQuc29ydCgpO1xuICByZXR1cm4gcmV0O1xufVxuIl19
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3MvY29udGV4dC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpQ0FBMkM7QUFDM0MsMkNBQTZDO0FBQzdDLHNDQUE0QztBQUM1QywyQ0FBdUM7QUFDdkMsa0NBQWtDO0FBd0dsQzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLGVBQWU7SUFDMUI7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUNsQixLQUFnQixFQUNoQixPQUE2QjtRQUU3QixNQUFNLEtBQUssR0FBRyxvQkFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QyxNQUFNLEtBQUssR0FBRztZQUNaLHVFQUF1RTtZQUN2RSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDbEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCO2dCQUM1QixDQUFDLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3BELENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxHQUFHLE9BQU8sQ0FBQyxLQUFLO1NBQ2pCLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxNQUFNLElBQUksd0JBQWUsQ0FDdkIsK0NBQStDLE9BQU8sQ0FBQyxRQUFRLEtBQUs7Z0JBQ2xFLG9GQUFvRixFQUN0RixLQUFLLENBQ04s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Q0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNYLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gXCJAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWFcIjtcbmltcG9ydCB7IEFubm90YXRpb25zLCBUb2tlbiB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBOb2RlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tIFwiLi9jeC1hcGlcIjtcblxuLyoqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Q29udGV4dEtleU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbnRleHQgcHJvdmlkZXIgdG8gcXVlcnkuXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlci1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHN0YWNrJ3MgYWNjb3VudCBhbmQgcmVnaW9uIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlRW52aXJvbm1lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGFkZGl0aW9uYWwgZGlzY3JpbWluYXRvciB0byB0aGUgYGNkay5jb250ZXh0Lmpzb25gIGNhY2hlIGtleS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGNhY2hlIGtleVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbENhY2hlS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRDb250ZXh0VmFsdWVPcHRpb25zIGV4dGVuZHMgR2V0Q29udGV4dEtleU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgbG9va3VwIGhhcyBub3QgeWV0IGJlZW4gcGVyZm9ybWVkLlxuICAgKlxuICAgKiBVcG9uIGZpcnN0IHN5bnRoZXNpcywgdGhlIGxvb2t1cHMgaGFzIG5vdCB5ZXQgYmVlbiBwZXJmb3JtZWQuIFRoZVxuICAgKiBgZ2V0VmFsdWUoKWAgb3BlcmF0aW9uIHJldHVybnMgdGhpcyB2YWx1ZSBpbnN0ZWFkLCBzbyB0aGF0IHN5bnRoZXNpcyBjYW5cbiAgICogcHJvY2VlZC4gQWZ0ZXIgc3ludGhlc2lzIGNvbXBsZXRlcyB0aGUgZmlyc3QgdGltZSwgdGhlIGFjdHVhbCBsb29rdXAgd2lsbFxuICAgKiBiZSBwZXJmb3JtZWQgYW5kIHN5bnRoZXNpcyB3aWxsIHJ1biBhZ2FpbiB3aXRoIHRoZSAqcmVhbCogdmFsdWUuXG4gICAqXG4gICAqIER1bW15IHZhbHVlcyBzaG91bGQgcHJlZmVyYWJseSBoYXZlIHZhbGlkIHNoYXBlcyBzbyB0aGF0IGRvd25zdHJlYW1cbiAgICogY29uc3VtZXJzIG9mIGxvb2t1cCB2YWx1ZXMgZG9uJ3QgdGhyb3cgdmFsaWRhdGlvbiBleGNlcHRpb25zIGlmIHRoZXlcbiAgICogZW5jb3VudGVyIGEgZHVtbXkgdmFsdWUgKG9yIGFsbCBwb3NzaWJsZSBkb3duc3RyZWFtIGNvbnN1bWVycyBuZWVkIHRvXG4gICAqIGVmZmVjdGl2ZWx5IGNoZWNrIGZvciB0aGUgd2VsbC1rbm93biBzaGFwZSBvZiB0aGUgZHVtbXkgdmFsdWUpOyB0aHJvd2luZyBhblxuICAgKiBleGNlcHRpb24gd291bGQgZXJyb3Igb3V0IHRoZSBzeW50aGVzaXMgb3BlcmF0aW9uIGFuZCBwcmV2ZW50IHRoZSBsb29rdXBcbiAgICogYW5kIHRoZSBzZWNvbmQsIHJlYWwsIHN5bnRoZXNpcyBmcm9tIGhhcHBlbmluZy5cbiAgICpcbiAgICogIyMgQ29ubmVjdGlvbiB0byBtdXN0RXhpc3RcbiAgICpcbiAgICogYGR1bW15VmFsdWVgIGlzIGFsc28gdXNlZCBhcyB0aGUgb2ZmaWNpYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBsb29rdXAgaGFzXG4gICAqIGZhaWxlZCBhbmQgYG11c3RFeGlzdCA9PSBmYWxzZWAuXG4gICAqL1xuICByZWFkb25seSBkdW1teVZhbHVlOiBhbnk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlc291cmNlIG11c3QgZXhpc3RcbiAgICpcbiAgICogSWYgdGhpcyBpcyBzZXQgKHRoZSBkZWZhdWx0KSwgdGhlIHF1ZXJ5IGZhaWxzIGlmIHRoZSB2YWx1ZSBvciByZXNvdXJjZSB3ZVxuICAgKiB0cmllZCB0byBsb29rIHVwIGRvZXNuJ3QgZXhpc3QuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYGZhbHNlYCBhbmQgdGhlIHZhbHVlIHdlIHRyaWVkIHRvIGxvb2sgdXAgY291bGQgbm90IGJlIGZvdW5kLCB0aGVcbiAgICogZmFpbHVyZSBpcyBzdXBwcmVzc2VkIGFuZCBgZHVtbXlWYWx1ZWAgaXMgb2ZmaWNpYWxseSByZXR1cm5lZCBpbnN0ZWFkLlxuICAgKlxuICAgKiBXaGVuIHRoaXMgaGFwcGVucywgYGR1bW15VmFsdWVgIGlzIGVuY29kZWQgaW50byBjYWNoZWQgY29udGV4dCBhbmQgaXQgd2lsbFxuICAgKiBuZXZlciBiZSByZWZyZXNoZWQgYW55bW9yZSB1bnRpbCB0aGUgdXNlciBydW5zIGBjZGsgY29udGV4dCAtLXJlc2V0IDxrZXk+YC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgdGhlIENESyBhcHAgY29kZSB0byBtYWtlIGEgZGlzdGluY3Rpb25cbiAgICogYmV0d2VlbiBcInRoZSBsb29rdXAgaGFzIG5vdCBiZWVuIHBlcmZvcm1lZCB5ZXRcIiBhbmQgXCJ0aGUgbG9va3VwIGRpZG4ndFxuICAgKiBmaW5kIGFueXRoaW5nIGFuZCB3ZSByZXR1cm5lZCBhIGRlZmF1bHQgdmFsdWUgaW5zdGVhZFwiLlxuICAgKlxuICAgKiAjIyBDb250ZXh0IHByb3ZpZGVyc1xuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgbXVzdCBleHBsaWNpdGx5IGJlIHN1cHBvcnRlZCBieSBjb250ZXh0IHByb3ZpZGVycy4gSXQgaXNcbiAgICogY3VycmVudGx5IHN1cHBvcnRlZCBieTpcbiAgICpcbiAgICogLSBLTVMga2V5IHByb3ZpZGVyXG4gICAqIC0gU1NNIHBhcmFtZXRlciBwcm92aWRlclxuICAgKlxuICAgKiAjIyBOb3RlIHRvIGltcGxlbWVudG9yc1xuICAgKlxuICAgKiBUaGUgZHVtbXkgdmFsdWUgc2hvdWxkIG5vdCBiZSByZXR1cm5lZCBmb3IgYWxsIFNESyBsb29rdXAgZmFpbHVyZXMuIEZvclxuICAgKiBleGFtcGxlLCBcIm5vIG5ldHdvcmtcIiBvciBcIm5vIGNyZWRlbnRpYWxzXCIgb3IgXCJtYWxmb3JtZWQgcXVlcnlcIiBzaG91bGRcbiAgICogbm90IGxlYWQgdG8gdGhlIGR1bW15IHZhbHVlIGJlaW5nIHJldHVybmVkLiBPbmx5IHRoZSBjYXNlIG9mIFwibm8gc3VjaFxuICAgKiByZXNvdXJjZVwiIHNob3VsZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbXVzdEV4aXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Q29udGV4dEtleVJlc3VsdCB7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Q29udGV4dFZhbHVlUmVzdWx0IHtcbiAgcmVhZG9ubHkgdmFsdWU/OiBhbnk7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgdGhlIG1vZGVsIHNpZGUgb2YgY29udGV4dCBwcm92aWRlcnNcbiAqXG4gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjb21tdW5pY2F0ZSB3aXRoIGNvbnRleHQgcHJvdmlkZXIgcGx1Z2lucyBpbiB0aGUgJ2Nka1xuICogdG9vbGtpdCcgdmlhIGNvbnRleHQgdmFyaWFibGVzIChpbnB1dCksIG91dHB1dHRpbmcgc3BlY2lhbGl6ZWQgcXVlcmllcyBmb3JcbiAqIG1vcmUgY29udGV4dCB2YXJpYWJsZXMgKG91dHB1dCkuXG4gKlxuICogQ29udGV4dFByb3ZpZGVyIG5lZWRzIGFjY2VzcyB0byBhIENvbnN0cnVjdCB0byBob29rIGludG8gdGhlIGNvbnRleHQgbWVjaGFuaXNtLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRleHRQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAcmV0dXJucyB0aGUgY29udGV4dCBrZXkgb3IgdW5kZWZpbmVkIGlmIGEga2V5IGNhbm5vdCBiZSByZW5kZXJlZCAoZHVlIHRvIHRva2VucyB1c2VkIGluIGFueSBvZiB0aGUgcHJvcHMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEtleShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wdGlvbnM6IEdldENvbnRleHRLZXlPcHRpb25zLFxuICApOiBHZXRDb250ZXh0S2V5UmVzdWx0IHtcbiAgICBjb25zdCBzdGFjayA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKTtcblxuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UgYmVjYXVzZSB3ZSBkbyBub3Qgc3VwcG9ydCBzdGF0aWMgdmFsdWUgZm9yIGFjY291bnRcbiAgICAgIC4uLigob3B0aW9ucy5pbmNsdWRlRW52aXJvbm1lbnQgPz8gZmFsc2UpXG4gICAgICAgID8geyBhY2NvdW50OiBzdGFjay5hY2NvdW50LCByZWdpb246IHN0YWNrLnJlZ2lvbiB9XG4gICAgICAgIDoge30pLFxuICAgICAgLi4uKG9wdGlvbnMuYWRkaXRpb25hbENhY2hlS2V5XG4gICAgICAgID8geyBhZGRpdGlvbmFsQ2FjaGVLZXk6IG9wdGlvbnMuYWRkaXRpb25hbENhY2hlS2V5IH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi5vcHRpb25zLnByb3BzLFxuICAgIH07XG5cbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhwcm9wcykuZmluZCgoeCkgPT4gVG9rZW4uaXNVbnJlc29sdmVkKHgpKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYENhbm5vdCBkZXRlcm1pbmUgc2NvcGUgZm9yIGNvbnRleHQgcHJvdmlkZXIgJHtvcHRpb25zLnByb3ZpZGVyfS5cXG5gICtcbiAgICAgICAgICBcIlRoaXMgdXN1YWxseSBoYXBwZW5zIHdoZW4gb25lIG9yIG1vcmUgb2YgdGhlIHByb3ZpZGVyIHByb3BzIGhhdmUgdW5yZXNvbHZlZCB0b2tlbnNcIixcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BTdHJpbmdzID0gcHJvcHNUb0FycmF5KHByb3BzKTtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBgJHtvcHRpb25zLnByb3ZpZGVyfToke3Byb3BTdHJpbmdzLmpvaW4oXCI6XCIpfWAsXG4gICAgICBwcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRWYWx1ZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIG9wdGlvbnM6IEdldENvbnRleHRWYWx1ZU9wdGlvbnMsXG4gICk6IEdldENvbnRleHRWYWx1ZVJlc3VsdCB7XG4gICAgaWYgKG9wdGlvbnMubXVzdEV4aXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiT25seSBzdXBwbHkgb25lIG9mICdtdXN0RXhpc3QnIGFuZCAnaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0J1wiLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSk7XG5cbiAgICAvLyBUT0RPOiByZS1lbmFibGUgd2hlbmV2ZXIgZW52aXJvbm1lbnQgZGV0YWlscyBjYW4gYmUgc2V0IGRpcmVjdGx5XG4gICAgLy8gaWYgKFRva2VuLmlzVW5yZXNvbHZlZChzdGFjay5hY2NvdW50KSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQoc3RhY2sucmVnaW9uKSkge1xuICAgIC8vICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAvLyAgICAgYENhbm5vdCByZXRyaWV2ZSB2YWx1ZSBmcm9tIGNvbnRleHQgcHJvdmlkZXIgJHtvcHRpb25zLnByb3ZpZGVyfSBzaW5jZSBhY2NvdW50L3JlZ2lvbiBgICtcbiAgICAvLyAgICAgICAnYXJlIG5vdCBzcGVjaWZpZWQgYXQgdGhlIHN0YWNrIGxldmVsLiBDb25maWd1cmUgXCJlbnZcIiB3aXRoIGFuIGFjY291bnQgYW5kIHJlZ2lvbiB3aGVuICcgK1xuICAgIC8vICAgICAgIFwieW91IGRlZmluZSB5b3VyIHN0YWNrLlwiICtcbiAgICAvLyAgICAgICBcIlNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2xhdGVzdC9ndWlkZS9lbnZpcm9ubWVudHMuaHRtbCBmb3IgbW9yZSBkZXRhaWxzLlwiLFxuICAgIC8vICAgICBzY29wZSxcbiAgICAvLyAgICk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgeyBrZXksIHByb3BzIH0gPSB0aGlzLmdldEtleShzY29wZSwgb3B0aW9ucyk7XG4gICAgY29uc3QgdmFsdWUgPSBOb2RlLm9mKHNjb3BlKS50cnlHZXRDb250ZXh0KGtleSk7XG4gICAgY29uc3QgcHJvdmlkZXJFcnJvciA9IGV4dHJhY3RQcm92aWRlckVycm9yKHZhbHVlKTtcblxuICAgIC8vIGlmIGNvbnRleHQgaXMgbWlzc2luZyBvciBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY29udGV4dCByZXRyaWV2YWwsXG4gICAgLy8gcmVwb3J0IGFuZCByZXR1cm4gYSBkdW1teSB2YWx1ZS5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcm92aWRlckVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFJlbmRlciAnaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0JyBpZmYgb25lIG9mIHRoZSBwYXJhbWV0ZXJzIGlzIHN1cHBsaWVkLlxuICAgICAgY29uc3QgaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0ID1cbiAgICAgICAgb3B0aW9ucy5tdXN0RXhpc3QgIT09IHVuZGVmaW5lZCA/ICFvcHRpb25zLm11c3RFeGlzdCA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gYnVpbGQgYSB2ZXJzaW9uIG9mIHRoZSBwcm9wcyB3aGljaCBpbmNsdWRlcyB0aGUgZHVtbXlWYWx1ZSBhbmQgaWdub3JlRXJyb3IgZmxhZ1xuICAgICAgY29uc3QgZXh0ZW5kZWRQcm9wczogeyBbcDogc3RyaW5nXTogYW55IH0gPSB7XG4gICAgICAgIGR1bW15VmFsdWU6IG9wdGlvbnMuZHVtbXlWYWx1ZSxcblxuICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSByZW5hbWVkIHRoZSB1c2VyLWZhY2luZyBwcm9wZXJ0eSwgdGhlIGZpZWxkIGluIHRoZVxuICAgICAgICAvLyBjbG91ZCBhc3NlbWJseSBzdGlsbCBoYXMgdGhlIG9yaWdpbmFsIG5hbWUsIHdoaWNoIGlzIHNvbWV3aGF0IHdyb25nXG4gICAgICAgIC8vIGJlY2F1c2UgaXQncyBub3QgYWJvdXQgbWlzc2luZyBjb250ZXh0LlxuICAgICAgICBpZ25vcmVFcnJvck9uTWlzc2luZ0NvbnRleHQsXG4gICAgICAgIC4uLihvcHRpb25zLmFkZGl0aW9uYWxDYWNoZUtleVxuICAgICAgICAgID8geyBhZGRpdGlvbmFsQ2FjaGVLZXk6IG9wdGlvbnMuYWRkaXRpb25hbENhY2hlS2V5IH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9O1xuXG4gICAgICAvLyBXZSdsbCBzdG9yZSB0aGUgZXh0ZW5kZWRQcm9wcyBpbiB0aGUgbWlzc2luZ0NvbnRleHRLZXkgcmVwb3J0XG4gICAgICAvLyBzbyB0aGF0IHdlIGNhbiByZXRyaWV2ZSB0aGUgZHVtbXlWYWx1ZSBhbmQgaWdub3JlRXJyb3IgZmxhZ1xuICAgICAgLy8gaW4gdGhlIGF3cy1jZGsncyBzc20tY29udGV4dCBhbmQga21zIGtleSBwcm92aWRlclxuICAgICAgc3RhY2sucmVwb3J0TWlzc2luZ0NvbnRleHRLZXkoe1xuICAgICAgICBrZXksXG4gICAgICAgIHByb3ZpZGVyOiBvcHRpb25zLnByb3ZpZGVyIGFzIGN4c2NoZW1hLkNvbnRleHRQcm92aWRlcixcbiAgICAgICAgcHJvcHM6IGV4dGVuZGVkUHJvcHMgYXMgY3hzY2hlbWEuQ29udGV4dFF1ZXJ5UHJvcGVydGllcyxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocHJvdmlkZXJFcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIEFubm90YXRpb25zLm9mKHNjb3BlKS5hZGRFcnJvcihwcm92aWRlckVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgdmFsdWU6IG9wdGlvbnMuZHVtbXlWYWx1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cbn1cblxuLyoqXG4gKiBJZiB0aGUgY29udGV4dCB2YWx1ZSByZXByZXNlbnRzIGFuIGVycm9yLCByZXR1cm4gdGhlIGVycm9yIG1lc3NhZ2VcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFByb3ZpZGVyRXJyb3IodmFsdWU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWVbY3hhcGkuUFJPVklERVJfRVJST1JfS0VZXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFF1b3RlIGNvbG9ucyBpbiBhbGwgc3RyaW5ncyBzbyB0aGF0IHdlIGNhbiB1bmRvIHRoZSBxdW90aW5nIGF0IGEgbGF0ZXIgcG9pbnRcbiAqXG4gKiBXZSdsbCB1c2UgJCBhcyBhIHF1b3RpbmcgY2hhcmFjdGVyLCBmb3Igbm8gcGFydGljdWxhcmx5IGdvb2QgcmVhc29uIG90aGVyXG4gKiB0aGFuIHRoYXQgXFwgaXMgZ29pbmcgdG8gbGVhZCB0byBxdW90aW5nIGhlbGwgd2hlbiB0aGUga2V5cyBhcmUgc3RvcmVkIGluIEpTT04uXG4gKi9cbmZ1bmN0aW9uIGNvbG9uUXVvdGUoeHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB4cy5yZXBsYWNlKC9cXCQvZywgXCIkJFwiKS5yZXBsYWNlKC86L2csIFwiJDpcIik7XG59XG5cbmZ1bmN0aW9uIHByb3BzVG9BcnJheShwcm9wczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwga2V5UHJlZml4ID0gXCJcIik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0OiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIC8vIHNraXAgdW5kZWZpbmVkIHZhbHVlc1xuICAgIGlmIChwcm9wc1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHlwZW9mIHByb3BzW2tleV0pIHtcbiAgICAgIGNhc2UgXCJvYmplY3RcIjoge1xuICAgICAgICByZXQucHVzaCguLi5wcm9wc1RvQXJyYXkocHJvcHNba2V5XSwgYCR7a2V5UHJlZml4fSR7a2V5fS5gKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBcInN0cmluZ1wiOiB7XG4gICAgICAgIHJldC5wdXNoKGAke2tleVByZWZpeH0ke2tleX09JHtjb2xvblF1b3RlKHByb3BzW2tleV0pfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0LnB1c2goYCR7a2V5UHJlZml4fSR7a2V5fT0ke0pTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXQuc29ydCgpO1xuICByZXR1cm4gcmV0O1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { acmCertificate } from "@cdktf/provider-aws";
1
+ import { acmCertificate } from "@cdktn/provider-aws";
2
2
  import { Construct } from "constructs";
3
3
  import { IDnsZone } from ".";
4
4
  import { CertificateBase } from "./certificate-base";
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.ValidationMethod = exports.PublicCertificate = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-certificatemanager/lib/certificate.ts
7
- const provider_aws_1 = require("@cdktf/provider-aws");
8
- const cdktf_1 = require("cdktf");
7
+ const provider_aws_1 = require("@cdktn/provider-aws");
8
+ const cdktn_1 = require("cdktn");
9
9
  const _1 = require(".");
10
10
  const certificate_base_1 = require("./certificate-base");
11
11
  const duration_1 = require("../../duration");
@@ -78,7 +78,7 @@ class PublicCertificate extends certificate_base_1.CertificateBase {
78
78
  super(scope, id, props);
79
79
  this._domainName = props.domainName;
80
80
  // check if domain name is 64 characters or less
81
- if (!cdktf_1.Token.isUnresolved(props.domainName) && props.domainName.length > 64) {
81
+ if (!cdktn_1.Token.isUnresolved(props.domainName) && props.domainName.length > 64) {
82
82
  throw new Error("Domain name must be 64 characters or less");
83
83
  }
84
84
  let { validation } = props;
@@ -154,7 +154,7 @@ class PublicCertificate extends certificate_base_1.CertificateBase {
154
154
  }
155
155
  exports.PublicCertificate = PublicCertificate;
156
156
  _a = JSII_RTTI_SYMBOL_1;
157
- PublicCertificate[_a] = { fqn: "terraconstructs.aws.edge.PublicCertificate", version: "0.2.4" };
157
+ PublicCertificate[_a] = { fqn: "terraconstructs.aws.edge.PublicCertificate", version: "0.2.6" };
158
158
  /**
159
159
  * Method used to assert ownership of the domain
160
160
  */
@@ -233,9 +233,9 @@ function renderDomainValidation(validation, domainNames) {
233
233
  */
234
234
  function getUniqueDnsDomainNames(domainNames) {
235
235
  return domainNames.filter((domain) => {
236
- return (cdktf_1.Token.isUnresolved(domain) ||
236
+ return (cdktn_1.Token.isUnresolved(domain) ||
237
237
  !domain.startsWith("*.") ||
238
238
  !domainNames.includes(domain.replace("*.", "")));
239
239
  });
240
240
  }
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2VkZ2UvY2VydGlmaWNhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4R0FBOEc7QUFFOUcsc0RBSzZCO0FBQzdCLGlDQUtlO0FBRWYsd0JBQWtFO0FBQ2xFLHlEQUFxRDtBQUNyRCw2Q0FBMEM7QUFtSDFDOztHQUVHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxrQ0FBZTtJQUNwRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQzFCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixNQUFjO1FBRWQsTUFBTSxNQUFPLFNBQVEsa0NBQWU7WUFJbEMsSUFBVyxPQUFPO2dCQUNoQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNqQyxDQUFDO1lBQ0Q7Z0JBQ0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFQSCxlQUFVLEdBQUcsTUFBTSxDQUFDO2dCQVFsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLG9DQUFxQixDQUFDLHFCQUFxQixDQUM1RCxJQUFJLEVBQ0osVUFBVSxFQUNWO29CQUNFLE1BQU07aUJBQ1AsQ0FDRixDQUFDO2dCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGtCQUFrQixHQUFHO29CQUN4QixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7b0JBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2lCQUN0QixDQUFDO1lBQ0osQ0FBQztTQUNGO1FBRUQsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUM5QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsY0FBc0I7UUFFdEIsTUFBTSxNQUFPLFNBQVEsa0NBQWU7WUFBcEM7O2dCQUNrQixtQkFBYyxHQUFHLGNB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Q0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlci9saWIvY2VydGlmaWNhdGUudHNcblxuaW1wb3J0IHtcbiAgYWNtQ2VydGlmaWNhdGUsXG4gIGFjbUNlcnRpZmljYXRlVmFsaWRhdGlvbixcbiAgZGF0YUF3c0FjbUNlcnRpZmljYXRlLFxuICAvLyByb3V0ZTUzUmVjb3JkLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHtcbiAgVG9rZW4sXG4gIC8vIFRlcnJhZm9ybUl0ZXJhdG9yLFxuICAvLyBUZXJyYWZvcm1Mb2NhbCxcbiAgLy8gRm5cbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSURuc1pvbmUsIFJlY29yZFNldCwgUmVjb3JkVGFyZ2V0LCBSZWNvcmRUeXBlIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IENlcnRpZmljYXRlQmFzZSB9IGZyb20gXCIuL2NlcnRpZmljYXRlLWJhc2VcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBJQXdzQ29uc3RydWN0LCBBd3NDb25zdHJ1Y3RQcm9wcyB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVPdXRwdXRzIHtcbiAgLyoqXG4gICAqIFN0YXR1cyBvZiB0aGUgY2VydGlmaWNhdGUuXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY2VydGlmaWNhdGUuXG4gICAqL1xuICByZWFkb25seSBhcm46IHN0cmluZztcblxuICAvKipcbiAgICogU2V0IG9mIGRvbWFpbiB2YWxpZGF0aW9uIG9iamVjdHMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29tcGxldGUgY2VydGlmaWNhdGUgdmFsaWRhdGlvbi5cbiAgICogQ2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBlbGVtZW50LCBlLmcuLCBpZiBTQU5zIGFyZSBkZWZpbmVkLlxuICAgKlxuICAgKiBPbmx5IHNldCBpZiBETlMtdmFsaWRhdGlvbiB3YXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpblZhbGlkYXRpb25PcHRpb25zPzogYWNtQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVEb21haW5WYWxpZGF0aW9uT3B0aW9uc0xpc3Q7XG59XG5cbi8vIE5PVEU6IFRoZSByZWFzb24gc29tZSBwcm9wZXJ0aWVzIGFyZSByZXBlYXRlZCBpbiBvdXRwdXRzIGlzXG4vLyBiZWNhdXNlIG91dHB1dHMgYW5kIHRoZSByZXNvdXJjZSBpbnRlcmZhY2Ugc2VydmUgYSBkaWZmZXJlbnQgcHVycG9zZS5cbi8vIFRoZSBvdXRwdXRzIGFyZSBhIG1lY2hhbmlzbSB0byBleHBvc2UgdGhlIHByb3BlcnRpZXMgaW4gdGhlIGdyaWRcbi8vIHRocm91Z2ggdGhlIHN0YWNrIHN0YXRlIHdoaWxlIHRoZSByZXNvdXJjZSBpbnRlcmZhY2UgaXMgdXNlZFxuLy8gd2hpbGUgYnVpbGRpbmcgY29tcG9zaXRlIGJlYWNvbnMgKEwzKSBidWlsZCBvdXQgb2YgYmFzZSAoTDIpIGJlYWNvbnMuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNlcnRpZmljYXRlIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlT3V0cHV0czogQ2VydGlmaWNhdGVPdXRwdXRzO1xuICAvKipcbiAgICogRG9tYWluIG5hbWUgb2YgdGhlIGNlcnRpZmljYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjZXJ0aWZpY2F0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgRGF5c1RvRXhwaXJ5IG1ldHJpYyBmb3IgdGhpcyBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlclxuICAgKiBDZXJ0aWZpY2F0ZS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgbWluaW11bSB2YWx1ZSBvdmVyIDEgZGF5LlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyBpcyBubyBsb25nZXIgZW1pdHRlZCBvbmNlIHRoZSBjZXJ0aWZpY2F0ZSBoYXMgZWZmZWN0aXZlbHlcbiAgICogZXhwaXJlZCwgc28gYWxhcm1zIGNvbmZpZ3VyZWQgb24gdGhpcyBtZXRyaWMgc2hvdWxkIHByb2JhYmx5IHRyZWF0IG1pc3NpbmdcbiAgICogZGF0YSBhcyBcImJyZWFjaGluZ1wiLlxuICAgKi9cbiAgbWV0cmljRGF5c1RvRXhwaXJ5KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljQ2VydGlmaWNhdGVQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZS5cbiAgICpcbiAgICogQ2hhbmdpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIGZvcmNlIGEgbmV3IHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogU0FOcyBmb3IgdGhlIGRvbWFpbi5cbiAgICpcbiAgICogQ2hhbmdpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIGZvcmNlIGEgbmV3IHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViamVjdEFsdGVybmF0aXZlTmFtZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgYWxnb3JpdGhtIG9mIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUga2V5IHBhaXIgdGhhdCB5b3VyIEFtYXpvbiBpc3N1ZWRcbiAgICogY2VydGlmaWNhdGUgdXNlcyB0byBlbmNyeXB0IGRhdGEuXG4gICAqIFNlZSBbQUNNIENlcnRpZmljYXRlIGNoYXJhY3RlcmlzdGljc11bYWNtLWNlcnRpZmljYXRlLWFsZ29yaXRobXNdIGZvciBtb3JlIGRldGFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJTQV8yMDQ4XG4gICAqXG4gICAqIFthY20tY2VydGlmaWNhdGUtYWxnb3JpdGhtc106IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hY20vbGF0ZXN0L3VzZXJndWlkZS9hY20tY2VydGlmaWNhdGUtY2hhcmFjdGVyaXN0aWNzLmh0bWwjYWxnb3JpdGhtc1xuICAgKi9cbiAgcmVhZG9ubHkga2V5QWxnb3JpdGhtPzogc3RyaW5nO1xuICAvKipcbiAgICogVmFsaWRhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgY2VydGlmaWNhdGUuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uPzogQ2VydGlmaWNhdGVWYWxpZGF0aW9uT3B0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnRpZmljYXRlVmFsaWRhdGlvbk9wdGlvbiB7XG4gIC8qKlxuICAgKiBIb3cgdG8gdmFsaWRhdGUgdGhpcyBjZXJ0aWZpY2F0ZVxuICAgKlxuICAgKiBUbyB2YWxpZGF0ZSBvd25lcnNoaXAgYnkgYWRkaW5nIGFwcHJvcHJpYXRlIEROUyByZWNvcmRzXG4gICAqXG4gICAqIEBkZWZhdWx0IFZhbGlkYXRpb25NZXRob2QuRU1BSUxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYWNtL2xhdGVzdC91c2VyZ3VpZGUvZ3MtYWNtLXZhbGlkYXRlLWRucy5odG1sXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IFZhbGlkYXRpb25NZXRob2Q7XG4gIC8qKlxuICAgKiBIb3N0ZWQgem9uZSB0byB1c2UgZm9yIEROUyB2YWxpZGF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIGVtYWlsIHZhbGlkYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU/OiBJRG5zWm9uZTtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGhvc3RlZCB6b25lcyB0byB1c2UgZm9yIEROUyB2YWxpZGF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIGBob3N0ZWRab25lYFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZXM/OiB7IFtkb21haW5OYW1lOiBzdHJpbmddOiBJRG5zWm9uZSB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0aW9uIGRvbWFpbnMgdG8gdXNlIGZvciBlbWFpbCB2YWxpZGF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXBleCBkb21haW5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25Eb21haW5zPzogeyBbZG9tYWluTmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQW1hem9uIGlzc3VlZCBjZXJ0aWZpY2F0ZVxuICovXG5leHBvcnQgY2xhc3MgUHVibGljQ2VydGlmaWNhdGUgZXh0ZW5kcyBDZXJ0aWZpY2F0ZUJhc2UgaW1wbGVtZW50cyBJQ2VydGlmaWNhdGUge1xuICAvKipcbiAgICogSW1wb3J0IGEgY2VydGlmaWNhdGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURvbWFpbk5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICApOiBJQ2VydGlmaWNhdGUge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIENlcnRpZmljYXRlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluTmFtZSA9IGRvbWFpbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjZXJ0aWZpY2F0ZUFybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlT3V0cHV0czogQ2VydGlmaWNhdGVPdXRwdXRzO1xuICAgICAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZU91dHB1dHM7XG4gICAgICB9XG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAgICAgY29uc3QgbG9va3VwID0gbmV3IGRhdGFBd3NBY21DZXJ0aWZpY2F0ZS5EYXRhQXdzQWNtQ2VydGlmaWNhdGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBcIlJlc291cmNlXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZG9tYWluLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVBcm4gPSBsb29rdXAuYXJuO1xuICAgICAgICB0aGlzLmNlcnRpZmljYXRlT3V0cHV0cyA9IHtcbiAgICAgICAgICBhcm46IGxvb2t1cC5hcm4sXG4gICAgICAgICAgc3RhdHVzOiBsb29rdXAuc3RhdHVzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEltcG9ydCBhIGNlcnRpZmljYXRlIGZyb20gQVJOXG4gICAqXG4gICAqIFRlcnJhZm9ybSBwcm92aWRlciBhd3MgZG9lcyBub3Qgc3VwcG9ydCBpbXBvcnRpbmcgY2VydGlmaWNhdGVzIGJ5IEFSTlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGNlcnRpZmljYXRlQXJuOiBzdHJpbmcsXG4gICk6IElDZXJ0aWZpY2F0ZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQ2VydGlmaWNhdGVCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjZXJ0aWZpY2F0ZUFybiA9IGNlcnRpZmljYXRlQXJuO1xuICAgICAgcHVibGljIGdldCBkb21haW5OYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhY2Nlc3MgZG9tYWluTmFtZSBvZiBhbiBpbXBvcnRlZCBjZXJ0aWZpY2F0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgY2VydGlmaWNhdGVPdXRwdXRzKCk6IENlcnRpZmljYXRlT3V0cHV0cyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYXJuOiBjZXJ0aWZpY2F0ZUFybixcbiAgICAgICAgICBzdGF0dXM6IFwiVU5LTk9XTlwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZU91dHB1dHM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuICByZXNvdXJjZTogYWNtQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3V0cHV0czogQ2VydGlmaWNhdGVPdXRwdXRzO1xuICBwdWJsaWMgZ2V0IGNlcnRpZmljYXRlT3V0cHV0cygpOiBDZXJ0aWZpY2F0ZU91dHB1dHMge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRzO1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZU91dHB1dHM7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9tYWluTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGRvbWFpbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZG9tYWluTmFtZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9jZXJ0aWZpY2F0ZUFybjogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNlcnRpZmljYXRlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NlcnRpZmljYXRlQXJuO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFB1YmxpY0NlcnRpZmljYXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLl9kb21haW5OYW1lID0gcHJvcHMuZG9tYWluTmFtZTtcblxuICAgIC8vIGNoZWNrIGlmIGRvbWFpbiBuYW1lIGlzIDY0IGNoYXJhY3RlcnMgb3IgbGVzc1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRvbWFpbk5hbWUpICYmIHByb3BzLmRvbWFpbk5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvbWFpbiBuYW1lIG11c3QgYmUgNjQgY2hhcmFjdGVycyBvciBsZXNzXCIpO1xuICAgIH1cbiAgICBsZXQgeyB2YWxpZGF0aW9uIH0gPSBwcm9wcztcbiAgICBpZiAoIXZhbGlkYXRpb24pIHtcbiAgICAgIHZhbGlkYXRpb24gPSB7XG4gICAgICAgIG1ldGhvZDogVmFsaWRhdGlvbk1ldGhvZC5FTUFJTCxcbiAgICAgICAgdmFsaWRhdGlvbkRvbWFpbnM6IHtcbiAgICAgICAgICBbcHJvcHMuZG9tYWluTmFtZV06IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFsbERvbWFpbk5hbWVzID0gW3Byb3BzLmRvbWFpbk5hbWVdLmNvbmNhdChcbiAgICAgIHByb3BzLnN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzIHx8IFtdLFxuICAgICk7XG5cbiAgICBjb25zdCBkb21haW5WYWxpZGF0aW9uID0gcmVuZGVyRG9tYWluVmFsaWRhdGlvbih2YWxpZGF0aW9uLCBhbGxEb21haW5OYW1lcyk7XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBhY21DZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdmFsaWRhdGlvbk1ldGhvZDogdmFsaWRhdGlvbi5tZXRob2QsXG4gICAgICB2YWxpZGF0aW9uT3B0aW9uOiBkb21haW5WYWxpZGF0aW9uPy5PcHRpb25zLFxuICAgIH0pO1xuXG4gICAgaWYgKGRvbWFpblZhbGlkYXRpb24gJiYgdmFsaWRhdGlvbi5tZXRob2QgPT09IFZhbGlkYXRpb25NZXRob2QuRE5TKSB7XG4gICAgICBjb25zdCByZWNvcmRzID0gbmV3IEFycmF5PFJlY29yZFNldD4oKTtcbiAgICAgIC8vIFRPRE86IFRlc3QgdXNlIGNhc2Ugd2hlcmUgY2VydGlmaWNhdGVzIGV4aXN0IGFjcm9zcyBtdWx0aXBsZSB6b25lcyAodmFsaWRhdGlvbiByZWNvcmQgc2hvdWxkIGFsbG93IG92ZXJyaWRlKVxuICAgICAgY29uc3Qgc29ydGVkWm9uZXMgPSBPYmplY3QuZW50cmllcyhkb21haW5WYWxpZGF0aW9uLnpvbmVMb29rdXApLnNvcnQoXG4gICAgICAgIChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgW2RvbWFpbk5hbWUsIHpvbmVdIG9mIHNvcnRlZFpvbmVzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcmVjb3Jkcy5sZW5ndGg7XG4gICAgICAgIHJlY29yZHMucHVzaChcbiAgICAgICAgICBuZXcgUmVjb3JkU2V0KHRoaXMsIGBWYWxpZGF0aW9uUmVjb3JkLSR7ZG9tYWluTmFtZX1gLCB7XG4gICAgICAgICAgICByZWNvcmRUeXBlOiB0aGlzLnJlc291cmNlLmRvbWFpblZhbGlkYXRpb25PcHRpb25zLmdldChpbmRleClcbiAgICAgICAgICAgICAgLnJlc291cmNlUmVjb3JkVHlwZSBhcyBSZWNvcmRUeXBlLFxuICAgICAgICAgICAgcmVjb3JkTmFtZTpcbiAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZS5kb21haW5WYWxpZGF0aW9uT3B0aW9ucy5nZXQoaW5kZXgpXG4gICAgICAgICAgICAgICAgLnJlc291cmNlUmVjb3JkTmFtZSxcbiAgICAgICAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21WYWx1ZXMoXG4gICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UuZG9tYWluVmFsaWRhdGlvbk9wdGlvbnMuZ2V0KGluZGV4KVxuICAgICAgICAgICAgICAgIC5yZXNvdXJjZVJlY29yZFZhbHVlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHR0bDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICAgICAgICB6b25lLFxuICAgICAgICAgICAgYWxsb3dPdmVyd3JpdGU6IHRydWUsIC8vIHJlcXVpcmVkIHRvIHByZXZlbnQgY3Jvc3MgcmVnaW9uIHdpbGRjYXJkIGVycm9yc1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbmV3IGFjbUNlcnRpZmljYXRlVmFsaWRhdGlvbi5BY21DZXJ0aWZpY2F0ZVZhbGlkYXRpb24oXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiVmFsaWRhdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2VydGlmaWNhdGVBcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgICAgIHZhbGlkYXRpb25SZWNvcmRGcWRuczogcmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmZxZG4pLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIC8vIHRlcnJhZm9ybS1wcm92aWRlci1hd3MgYnVnLCBjYW4ndCB1c2UgVGVycmFmb3JtSXRlcmF0b3IgKGBmb3JfZWFjaGApIGhlcmU6XG4gICAgICAvLyAvLyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvaXNzdWVzLzM3MTNcbiAgICAgIC8vIGNvbnN0IHpvbmVMb29rdXA6IFRlcnJhZm9ybUxvY2FsID0gbmV3IFRlcnJhZm9ybUxvY2FsKCB0aGlzLCBcInpvbmVMb29rdXBcIiwgZG9tYWluVmFsaWRhdGlvbi56b25lTG9va3VwKTtcbiAgICAgIC8vIGNvbnN0IGRvbWFpblZhbGlkYXRpb25JdGVyYXRvciA9IFRlcnJhZm9ybUl0ZXJhdG9yLmZyb21Db21wbGV4TGlzdCggdGhpcy5yZXNvdXJjZS5kb21haW5WYWxpZGF0aW9uT3B0aW9ucywgXCJkb21haW5fbmFtZVwiKTtcbiAgICAgIC8vIC8vIFJlY29yZFNldCBkb2Vzbid0IHdvcmsgd2l0aCB6b25lID0gSVJlc29sdmFibGVcbiAgICAgIC8vIC8vIHVzaW5nIFJvdXRlNTNSZWNvcmQgcmVzb3VyY2UgZGlyZWN0bHlcbiAgICAgIC8vIGNvbnN0IHJlY29yZHMgPSBuZXcgcm91dGU1M1JlY29yZC5Sb3V0ZTUzUmVjb3JkKCB0aGlzLCBcIlZhbGlkYXRpb25SZWNvcmRzXCIsIHtcbiAgICAgIC8vICAgZm9yRWFjaDogZG9tYWluVmFsaWRhdGlvbkl0ZXJhdG9yLFxuICAgICAgLy8gICBhbGxvd092ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgIC8vICAgbmFtZTogZG9tYWluVmFsaWRhdGlvbkl0ZXJhdG9yLmdldFN0cmluZyhcInJlc291cmNlX3JlY29yZF9uYW1lXCIpLFxuICAgICAgLy8gICByZWNvcmRzOiBbXG4gICAgICAvLyAgICAgZG9tYWluVmFsaWRhdGlvbkl0ZXJhdG9yLmdldFN0cmluZyhcInJlc291cmNlX3JlY29yZF92YWx1ZVwiKSxcbiAgICAgIC8vICAgXSxcbiAgICAgIC8vICAgdHRsOiA2MCxcbiAgICAgIC8vICAgdHlwZTogZG9tYWluVmFsaWRhdGlvbkl0ZXJhdG9yLmdldFN0cmluZyhcInJlc291cmNlX3JlY29yZF90eXBlXCIpLFxuICAgICAgLy8gICB6b25lSWQ6IEZuLmxvb2t1cCh6b25lTG9va3VwLCBkb21haW5WYWxpZGF0aW9uSXRlcmF0b3Iua2V5KSxcbiAgICAgIC8vIH0pO1xuICAgICAgLy8gY29uc3QgcmVjb3Jkc0l0ZXJhdG9yID0gVGVycmFmb3JtSXRlcmF0b3IuZnJvbVJlc291cmNlcyhyZWNvcmRzKTtcbiAgICAgIC8vIG5ldyBhY21DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uQWNtQ2VydGlmaWNhdGVWYWxpZGF0aW9uKCB0aGlzLCBcIlZhbGlkYXRpb25cIiwge1xuICAgICAgLy8gICBjZXJ0aWZpY2F0ZUFybjogdGhpcy5yZXNvdXJjZS5hcm4sXG4gICAgICAvLyAgIHZhbGlkYXRpb25SZWNvcmRGcWRuczogVG9rZW4uYXNMaXN0KFxuICAgICAgLy8gICAgIHJlY29yZHNJdGVyYXRvci5wbHVja1Byb3BlcnR5KFwiZnFkblwiKSxcbiAgICAgIC8vICAgKSxcbiAgICAgIC8vIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NlcnRpZmljYXRlQXJuID0gdGhpcy5yZXNvdXJjZS5hcm47XG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIGFybjogdGhpcy5yZXNvdXJjZS5hcm4sXG4gICAgICBzdGF0dXM6IHRoaXMucmVzb3VyY2Uuc3RhdHVzLFxuICAgICAgZG9tYWluVmFsaWRhdGlvbk9wdGlvbnM6IHRoaXMucmVzb3VyY2UuZG9tYWluVmFsaWRhdGlvbk9wdGlvbnMsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIE1ldGhvZCB1c2VkIHRvIGFzc2VydCBvd25lcnNoaXAgb2YgdGhlIGRvbWFpblxuICovXG5leHBvcnQgZW51bSBWYWxpZGF0aW9uTWV0aG9kIHtcbiAgLyoqXG4gICAqIFNlbmQgZW1haWwgdG8gYSBudW1iZXIgb2YgZW1haWwgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZG9tYWluXG4gICAqXG4gICAqIElNUE9SVEFOVDogaWYgeW91IGFyZSBjcmVhdGluZyBhIGNlcnRpZmljYXRlIGFzIHBhcnQgb2YgeW91ciBzdGFjaywgdGhlIHN0YWNrXG4gICAqIHdpbGwgbm90IGNvbXBsZXRlIGNyZWF0aW5nIHVudGlsIHlvdSByZWFkIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGVcbiAgICogZW1haWwgdGhhdCB5b3Ugd2lsbCByZWNlaXZlLlxuICAgKlxuICAgKiBBQ00gd2lsbCBzZW5kIHZhbGlkYXRpb24gZW1haWxzIHRvIHRoZSBmb2xsb3dpbmcgYWRkcmVzc2VzOlxuICAgKlxuICAgKiAgYWRtaW5AZG9tYWluLmNvbVxuICAgKiAgYWRtaW5pc3RyYXRvckBkb21haW4uY29tXG4gICAqICBob3N0bWFzdGVyQGRvbWFpbi5jb21cbiAgICogIHBvc3RtYXN0ZXJAZG9tYWluLmNvbVxuICAgKiAgd2VibWFzdGVyQGRvbWFpbi5jb21cbiAgICpcbiAgICogRm9yIGV2ZXJ5IGRvbWFpbiB0aGF0IHlvdSByZWdpc3Rlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYWNtL2xhdGVzdC91c2VyZ3VpZGUvZ3MtYWNtLXZhbGlkYXRlLWVtYWlsLmh0bWxcbiAgICovXG4gIEVNQUlMID0gXCJFTUFJTFwiLFxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBvd25lcnNoaXAgYnkgYWRkaW5nIGFwcHJvcHJpYXRlIEROUyByZWNvcmRzXG4gICAqXG4gICAqIElNUE9SVEFOVDogSWYgYGhvc3RlZFpvbmVgIGlzIG5vdCBzcGVjaWZpZWQsIEROUyByZWNvcmRzIG11c3QgYmUgYWRkZWRcbiAgICogbWFudWFsbHkgYW5kIHRoZSBzdGFjayB3aWxsIG5vdCBjb21wbGV0ZSBjcmVhdGluZyB1bnRpbCB0aGUgcmVjb3JkcyBhcmVcbiAgICogYWRkZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FjbS9sYXRlc3QvdXNlcmd1aWRlL2dzLWFjbS12YWxpZGF0ZS1kbnMuaHRtbFxuICAgKi9cbiAgRE5TID0gXCJETlNcIixcbn1cblxuaW50ZXJmYWNlIERvbWFpblZhbGlkYXRpb24ge1xuICBPcHRpb25zOiBhY21DZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZVZhbGlkYXRpb25PcHRpb25bXTtcbiAgem9uZUxvb2t1cDogeyBbZG9tYWluTmFtZTogc3RyaW5nXTogSURuc1pvbmUgfTsgLy8gc3RyaW5nIH07XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRvbWFpblZhbGlkYXRpb24oXG4gIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbk9wdGlvbixcbiAgZG9tYWluTmFtZXM6IHN0cmluZ1tdLFxuKTogRG9tYWluVmFsaWRhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlc3VsdDogRG9tYWluVmFsaWRhdGlvbiA9IHtcbiAgICBPcHRpb25zOiBbXSxcbiAgICB6b25lTG9va3VwOiB7fSxcbiAgfTtcblxuICBzd2l0Y2ggKHZhbGlkYXRpb24ubWV0aG9kKSB7XG4gICAgY2FzZSBWYWxpZGF0aW9uTWV0aG9kLkROUzpcbiAgICAgIGZvciAoY29uc3QgZG9tYWluTmFtZSBvZiBnZXRVbmlxdWVEbnNEb21haW5OYW1lcyhkb21haW5OYW1lcykpIHtcbiAgICAgICAgY29uc3QgaG9zdGVkWm9uZSA9XG4gICAgICAgICAgdmFsaWRhdGlvbi5ob3N0ZWRab25lcz8uW2RvbWFpbk5hbWVdID8/IHZhbGlkYXRpb24uaG9zdGVkWm9uZTtcbiAgICAgICAgaWYgKGhvc3RlZFpvbmUpIHtcbiAgICAgICAgICByZXN1bHQuT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGRvbWFpbk5hbWUsXG4gICAgICAgICAgICB2YWxpZGF0aW9uRG9tYWluOiBob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc3VsdC56b25lTG9va3VwW2RvbWFpbk5hbWVdID0gaG9zdGVkWm9uZTsgLy8gLnpvbmVJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWYWxpZGF0aW9uTWV0aG9kLkVNQUlMOlxuICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIG9mIGRvbWFpbk5hbWVzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Eb21haW4gPSB2YWxpZGF0aW9uLnZhbGlkYXRpb25Eb21haW5zPy5bZG9tYWluTmFtZV07XG4gICAgICAgIGlmICghdmFsaWRhdGlvbkRvbWFpbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiV2hlbiB1c2luZyBlbWFpbCBmb3IgdmFsaWRhdGlvbiwgJ3ZhbGlkYXRpb25Eb21haW5zJyBuZWVkcyB0byBiZSBzdXBwbGllZFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0Lk9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgZG9tYWluTmFtZSxcbiAgICAgICAgICB2YWxpZGF0aW9uRG9tYWluOiB2YWxpZGF0aW9uRG9tYWluLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmFsaWRhdGlvbiBtZXRob2QgJHt2YWxpZGF0aW9uLm1ldGhvZH1gKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuT3B0aW9ucy5sZW5ndGggIT09IDAgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB3aWxkY2FyZCBkb21haW5zICgqLmV4YW1wbGUuY29tKSB3aGVyZSB0aGUgYmFzZSBkb21haW4gKGV4YW1wbGUuY29tKSBpcyBwcmVzZW50LlxuICogVGhpcyBpcyBiZWNhdXNlIHRoZSBETlMgdmFsaWRhdGlvbiB0cmVhdHMgdGhlbSBhcyB0aGUgc2FtZSB0aGluZywgYW5kIHRoZSBSb3V0ZTUzIHJlY29yZHNcbiAqIHJlc291cmNlcyB3b3VsZCBiZSBkdXBsaWNhdGVkIGNhdXNpbmcgYXBwbHktdGltZSBlcnJvcnMuXG4gKi9cbmZ1bmN0aW9uIGdldFVuaXF1ZURuc0RvbWFpbk5hbWVzKGRvbWFpbk5hbWVzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gZG9tYWluTmFtZXMuZmlsdGVyKChkb21haW4pID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgVG9rZW4uaXNVbnJlc29sdmVkKGRvbWFpbikgfHxcbiAgICAgICFkb21haW4uc3RhcnRzV2l0aChcIiouXCIpIHx8XG4gICAgICAhZG9tYWluTmFtZXMuaW5jbHVkZXMoZG9tYWluLnJlcGxhY2UoXCIqLlwiLCBcIlwiKSlcbiAgICApO1xuICB9KTtcbn1cbiJdfQ==
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2VkZ2UvY2VydGlmaWNhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4R0FBOEc7QUFFOUcsc0RBSzZCO0FBQzdCLGlDQUtlO0FBRWYsd0JBQWtFO0FBQ2xFLHlEQUFxRDtBQUNyRCw2Q0FBMEM7QUFtSDFDOztHQUVHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxrQ0FBZTtJQUNwRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQzFCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixNQUFjO1FBRWQsTUFBTSxNQUFPLFNBQVEsa0NBQWU7WUFJbEMsSUFBVyxPQUFPO2dCQUNoQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUNqQyxDQUFDO1lBQ0Q7Z0JBQ0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFQSCxlQUFVLEdBQUcsTUFBTSxDQUFDO2dCQVFsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLG9DQUFxQixDQUFDLHFCQUFxQixDQUM1RCxJQUFJLEVBQ0osVUFBVSxFQUNWO29CQUNFLE1BQU07aUJBQ1AsQ0FDRixDQUFDO2dCQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGtCQUFrQixHQUFHO29CQUN4QixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7b0JBQ2YsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2lCQUN0QixDQUFDO1lBQ0osQ0FBQztTQUNGO1FBRUQsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUM5QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsY0FBc0I7UUFFdEIsTUFBTSxNQUFPLFNBQVEsa0NBQWU7WUFBcEM7O2dCQUNrQixtQkFBYyxHQUFHLGNB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Q0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlci9saWIvY2VydGlmaWNhdGUudHNcblxuaW1wb3J0IHtcbiAgYWNtQ2VydGlmaWNhdGUsXG4gIGFjbUNlcnRpZmljYXRlVmFsaWRhdGlvbixcbiAgZGF0YUF3c0FjbUNlcnRpZmljYXRlLFxuICAvLyByb3V0ZTUzUmVjb3JkLFxufSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHtcbiAgVG9rZW4sXG4gIC8vIFRlcnJhZm9ybUl0ZXJhdG9yLFxuICAvLyBUZXJyYWZvcm1Mb2NhbCxcbiAgLy8gRm5cbn0gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSURuc1pvbmUsIFJlY29yZFNldCwgUmVjb3JkVGFyZ2V0LCBSZWNvcmRUeXBlIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IENlcnRpZmljYXRlQmFzZSB9IGZyb20gXCIuL2NlcnRpZmljYXRlLWJhc2VcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBJQXdzQ29uc3RydWN0LCBBd3NDb25zdHJ1Y3RQcm9wcyB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVPdXRwdXRzIHtcbiAgLyoqXG4gICAqIFN0YXR1cyBvZiB0aGUgY2VydGlmaWNhdGUuXG4gICAqL1xuICByZWFkb25seSBzdGF0dXM6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY2VydGlmaWNhdGUuXG4gICAqL1xuICByZWFkb25seSBhcm46IHN0cmluZztcblxuICAvKipcbiAgICogU2V0IG9mIGRvbWFpbiB2YWxpZGF0aW9uIG9iamVjdHMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29tcGxldGUgY2VydGlmaWNhdGUgdmFsaWRhdGlvbi5cbiAgICogQ2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBlbGVtZW50LCBlLmcuLCBpZiBTQU5zIGFyZSBkZWZpbmVkLlxuICAgKlxuICAgKiBPbmx5IHNldCBpZiBETlMtdmFsaWRhdGlvbiB3YXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpblZhbGlkYXRpb25PcHRpb25zPzogYWNtQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVEb21haW5WYWxpZGF0aW9uT3B0aW9uc0xpc3Q7XG59XG5cbi8vIE5PVEU6IFRoZSByZWFzb24gc29tZSBwcm9wZXJ0aWVzIGFyZSByZXBlYXRlZCBpbiBvdXRwdXRzIGlzXG4vLyBiZWNhdXNlIG91dHB1dHMgYW5kIHRoZSByZXNvdXJjZSBpbnRlcmZhY2Ugc2VydmUgYSBkaWZmZXJlbnQgcHVycG9zZS5cbi8vIFRoZSBvdXRwdXRzIGFyZSBhIG1lY2hhbmlzbSB0byBleHBvc2UgdGhlIHByb3BlcnRpZXMgaW4gdGhlIGdyaWRcbi8vIHRocm91Z2ggdGhlIHN0YWNrIHN0YXRlIHdoaWxlIHRoZSByZXNvdXJjZSBpbnRlcmZhY2UgaXMgdXNlZFxuLy8gd2hpbGUgYnVpbGRpbmcgY29tcG9zaXRlIGJlYWNvbnMgKEwzKSBidWlsZCBvdXQgb2YgYmFzZSAoTDIpIGJlYWNvbnMuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNlcnRpZmljYXRlIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlT3V0cHV0czogQ2VydGlmaWNhdGVPdXRwdXRzO1xuICAvKipcbiAgICogRG9tYWluIG5hbWUgb2YgdGhlIGNlcnRpZmljYXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjZXJ0aWZpY2F0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgRGF5c1RvRXhwaXJ5IG1ldHJpYyBmb3IgdGhpcyBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlclxuICAgKiBDZXJ0aWZpY2F0ZS4gQnkgZGVmYXVsdCwgdGhpcyBpcyB0aGUgbWluaW11bSB2YWx1ZSBvdmVyIDEgZGF5LlxuICAgKlxuICAgKiBUaGlzIG1ldHJpYyBpcyBubyBsb25nZXIgZW1pdHRlZCBvbmNlIHRoZSBjZXJ0aWZpY2F0ZSBoYXMgZWZmZWN0aXZlbHlcbiAgICogZXhwaXJlZCwgc28gYWxhcm1zIGNvbmZpZ3VyZWQgb24gdGhpcyBtZXRyaWMgc2hvdWxkIHByb2JhYmx5IHRyZWF0IG1pc3NpbmdcbiAgICogZGF0YSBhcyBcImJyZWFjaGluZ1wiLlxuICAgKi9cbiAgbWV0cmljRGF5c1RvRXhwaXJ5KHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljQ2VydGlmaWNhdGVQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIG9mIHRoZSBjZXJ0aWZpY2F0ZS5cbiAgICpcbiAgICogQ2hhbmdpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIGZvcmNlIGEgbmV3IHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogU0FOcyBmb3IgdGhlIGRvbWFpbi5cbiAgICpcbiAgICogQ2hhbmdpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIGZvcmNlIGEgbmV3IHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViamVjdEFsdGVybmF0aXZlTmFtZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgYWxnb3JpdGhtIG9mIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUga2V5IHBhaXIgdGhhdCB5b3VyIEFtYXpvbiBpc3N1ZWRcbiAgICogY2VydGlmaWNhdGUgdXNlcyB0byBlbmNyeXB0IGRhdGEuXG4gICAqIFNlZSBbQUNNIENlcnRpZmljYXRlIGNoYXJhY3RlcmlzdGljc11bYWNtLWNlcnRpZmljYXRlLWFsZ29yaXRobXNdIGZvciBtb3JlIGRldGFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJTQV8yMDQ4XG4gICAqXG4gICAqIFthY20tY2VydGlmaWNhdGUtYWxnb3JpdGhtc106IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hY20vbGF0ZXN0L3VzZXJndWlkZS9hY20tY2VydGlmaWNhdGUtY2hhcmFjdGVyaXN0aWNzLmh0bWwjYWxnb3JpdGhtc1xuICAgKi9cbiAgcmVhZG9ubHkga2V5QWxnb3JpdGhtPzogc3RyaW5nO1xuICAvKipcbiAgICogVmFsaWRhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgY2VydGlmaWNhdGUuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uPzogQ2VydGlmaWNhdGVWYWxpZGF0aW9uT3B0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnRpZmljYXRlVmFsaWRhdGlvbk9wdGlvbiB7XG4gIC8qKlxuICAgKiBIb3cgdG8gdmFsaWRhdGUgdGhpcyBjZXJ0aWZpY2F0ZVxuICAgKlxuICAgKiBUbyB2YWxpZGF0ZSBvd25lcnNoaXAgYnkgYWRkaW5nIGFwcHJvcHJpYXRlIEROUyByZWNvcmRzXG4gICAqXG4gICAqIEBkZWZhdWx0IFZhbGlkYXRpb25NZXRob2QuRU1BSUxcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYWNtL2xhdGVzdC91c2VyZ3VpZGUvZ3MtYWNtLXZhbGlkYXRlLWRucy5odG1sXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IFZhbGlkYXRpb25NZXRob2Q7XG4gIC8qKlxuICAgKiBIb3N0ZWQgem9uZSB0byB1c2UgZm9yIEROUyB2YWxpZGF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIGVtYWlsIHZhbGlkYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU/OiBJRG5zWm9uZTtcbiAgLyoqXG4gICAqIEEgbWFwIG9mIGhvc3RlZCB6b25lcyB0byB1c2UgZm9yIEROUyB2YWxpZGF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIGBob3N0ZWRab25lYFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZXM/OiB7IFtkb21haW5OYW1lOiBzdHJpbmddOiBJRG5zWm9uZSB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0aW9uIGRvbWFpbnMgdG8gdXNlIGZvciBlbWFpbCB2YWxpZGF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXBleCBkb21haW5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25Eb21haW5zPzogeyBbZG9tYWluTmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQW1hem9uIGlzc3VlZCBjZXJ0aWZpY2F0ZVxuICovXG5leHBvcnQgY2xhc3MgUHVibGljQ2VydGlmaWNhdGUgZXh0ZW5kcyBDZXJ0aWZpY2F0ZUJhc2UgaW1wbGVtZW50cyBJQ2VydGlmaWNhdGUge1xuICAvKipcbiAgICogSW1wb3J0IGEgY2VydGlmaWNhdGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURvbWFpbk5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICApOiBJQ2VydGlmaWNhdGUge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIENlcnRpZmljYXRlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluTmFtZSA9IGRvbWFpbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjZXJ0aWZpY2F0ZUFybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlT3V0cHV0czogQ2VydGlmaWNhdGVPdXRwdXRzO1xuICAgICAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZU91dHB1dHM7XG4gICAgICB9XG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAgICAgY29uc3QgbG9va3VwID0gbmV3IGRhdGFBd3NBY21DZXJ0aWZpY2F0ZS5EYXRhQXdzQWNtQ2VydGlmaWNhdGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBcIlJlc291cmNlXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZG9tYWluLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2VydGlmaWNhdGVBcm4gPSBsb29rdXAuYXJuO1xuICAgICAgICB0aGlzLmNlcnRpZmljYXRlT3V0cHV0cyA9IHtcbiAgICAgICAgICBhcm46IGxvb2t1cC5hcm4sXG4gICAgICAgICAgc3RhdHVzOiBsb29rdXAuc3RhdHVzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEltcG9ydCBhIGNlcnRpZmljYXRlIGZyb20gQVJOXG4gICAqXG4gICAqIFRlcnJhZm9ybSBwcm92aWRlciBhd3MgZG9lcyBub3Qgc3VwcG9ydCBpbXBvcnRpbmcgY2VydGlmaWNhdGVzIGJ5IEFSTlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ2VydGlmaWNhdGVBcm4oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGNlcnRpZmljYXRlQXJuOiBzdHJpbmcsXG4gICk6IElDZXJ0aWZpY2F0ZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQ2VydGlmaWNhdGVCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjZXJ0aWZpY2F0ZUFybiA9IGNlcnRpZmljYXRlQXJuO1xuICAgICAgcHVibGljIGdldCBkb21haW5OYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhY2Nlc3MgZG9tYWluTmFtZSBvZiBhbiBpbXBvcnRlZCBjZXJ0aWZpY2F0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgY2VydGlmaWNhdGVPdXRwdXRzKCk6IENlcnRpZmljYXRlT3V0cHV0cyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYXJuOiBjZXJ0aWZpY2F0ZUFybixcbiAgICAgICAgICBzdGF0dXM6IFwiVU5LTk9XTlwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZU91dHB1dHM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuICByZXNvdXJjZTogYWNtQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3V0cHV0czogQ2VydGlmaWNhdGVPdXRwdXRzO1xuICBwdWJsaWMgZ2V0IGNlcnRpZmljYXRlT3V0cHV0cygpOiBDZXJ0aWZpY2F0ZU91dHB1dHMge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRzO1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZU91dHB1dHM7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9tYWluTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGRvbWFpbk5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZG9tYWluTmFtZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9jZXJ0aWZpY2F0ZUFybjogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IGNlcnRpZmljYXRlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NlcnRpZmljYXRlQXJuO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFB1YmxpY0NlcnRpZmljYXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLl9kb21haW5OYW1lID0gcHJvcHMuZG9tYWluTmFtZTtcblxuICAgIC8vIGNoZWNrIGlmIGRvbWFpbiBuYW1lIGlzIDY0IGNoYXJhY3RlcnMgb3IgbGVzc1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRvbWFpbk5hbWUpICYmIHByb3BzLmRvbWFpbk5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvbWFpbiBuYW1lIG11c3QgYmUgNjQgY2hhcmFjdGVycyBvciBsZXNzXCIpO1xuICAgIH1cbiAgICBsZXQgeyB2YWxpZGF0aW9uIH0gPSBwcm9wcztcbiAgICBpZiAoIXZhbGlkYXRpb24pIHtcbiAgICAgIHZhbGlkYXRpb24gPSB7XG4gICAgICAgIG1ldGhvZDogVmFsaWRhdGlvbk1ldGhvZC5FTUFJTCxcbiAgICAgICAgdmFsaWRhdGlvbkRvbWFpbnM6IHtcbiAgICAgICAgICBbcHJvcHMuZG9tYWluTmFtZV06IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFsbERvbWFpbk5hbWVzID0gW3Byb3BzLmRvbWFpbk5hbWVdLmNvbmNhdChcbiAgICAgIHByb3BzLnN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzIHx8IFtdLFxuICAgICk7XG5cbiAgICBjb25zdCBkb21haW5WYWxpZGF0aW9uID0gcmVuZGVyRG9tYWluVmFsaWRhdGlvbih2YWxpZGF0aW9uLCBhbGxEb21haW5OYW1lcyk7XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBhY21DZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgdmFsaWRhdGlvbk1ldGhvZDogdmFsaWRhdGlvbi5tZXRob2QsXG4gICAgICB2YWxpZGF0aW9uT3B0aW9uOiBkb21haW5WYWxpZGF0aW9uPy5PcHRpb25zLFxuICAgIH0pO1xuXG4gICAgaWYgKGRvbWFpblZhbGlkYXRpb24gJiYgdmFsaWRhdGlvbi5tZXRob2QgPT09IFZhbGlkYXRpb25NZXRob2QuRE5TKSB7XG4gICAgICBjb25zdCByZWNvcmRzID0gbmV3IEFycmF5PFJlY29yZFNldD4oKTtcbiAgICAgIC8vIFRPRE86IFRlc3QgdXNlIGNhc2Ugd2hlcmUgY2VydGlmaWNhdGVzIGV4aXN0IGFjcm9zcyBtdWx0aXBsZSB6b25lcyAodmFsaWRhdGlvbiByZWNvcmQgc2hvdWxkIGFsbG93IG92ZXJyaWRlKVxuICAgICAgY29uc3Qgc29ydGVkWm9uZXMgPSBPYmplY3QuZW50cmllcyhkb21haW5WYWxpZGF0aW9uLnpvbmVMb29rdXApLnNvcnQoXG4gICAgICAgIChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgW2RvbWFpbk5hbWUsIHpvbmVdIG9mIHNvcnRlZFpvbmVzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcmVjb3Jkcy5sZW5ndGg7XG4gICAgICAgIHJlY29yZHMucHVzaChcbiAgICAgICAgICBuZXcgUmVjb3JkU2V0KHRoaXMsIGBWYWxpZGF0aW9uUmVjb3JkLSR7ZG9tYWluTmFtZX1gLCB7XG4gICAgICAgICAgICByZWNvcmRUeXBlOiB0aGlzLnJlc291cmNlLmRvbWFpblZhbGlkYXRpb25PcHRpb25zLmdldChpbmRleClcbiAgICAgICAgICAgICAgLnJlc291cmNlUmVjb3JkVHlwZSBhcyBSZWNvcmRUeXBlLFxuICAgICAgICAgICAgcmVjb3JkTmFtZTpcbiAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZS5kb21haW5WYWxpZGF0aW9uT3B0aW9ucy5nZXQoaW5kZXgpXG4gICAgICAgICAgICAgICAgLnJlc291cmNlUmVjb3JkTmFtZSxcbiAgICAgICAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21WYWx1ZXMoXG4gICAgICAgICAgICAgIHRoaXMucmVzb3VyY2UuZG9tYWluVmFsaWRhdGlvbk9wdGlvbnMuZ2V0KGluZGV4KVxuICAgICAgICAgICAgICAgIC5yZXNvdXJjZVJlY29yZFZhbHVlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHR0bDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICAgICAgICB6b25lLFxuICAgICAgICAgICAgYWxsb3dPdmVyd3JpdGU6IHRydWUsIC8vIHJlcXVpcmVkIHRvIHByZXZlbnQgY3Jvc3MgcmVnaW9uIHdpbGRjYXJkIGVycm9yc1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbmV3IGFjbUNlcnRpZmljYXRlVmFsaWRhdGlvbi5BY21DZXJ0aWZpY2F0ZVZhbGlkYXRpb24oXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiVmFsaWRhdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2VydGlmaWNhdGVBcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgICAgIHZhbGlkYXRpb25SZWNvcmRGcWRuczogcmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmZxZG4pLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIC8vIHRlcnJhZm9ybS1wcm92aWRlci1hd3MgYnVnLCBjYW4ndCB1c2UgVGVycmFmb3JtSXRlcmF0b3IgKGBmb3JfZWFjaGApIGhlcmU6XG4gICAgICAvLyAvLyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvaXNzdWVzLzM3MTNcbiAgICAgIC8vIGNvbnN0IHpvbmVMb29rdXA6IFRlcnJhZm9ybUxvY2FsID0gbmV3IFRlcnJhZm9ybUxvY2FsKCB0aGlzLCBcInpvbmVMb29rdXBcIiwgZG9tYWluVmFsaWRhdGlvbi56b25lTG9va3VwKTtcbiAgICAgIC8vIGNvbnN0IGRvbWFpblZhbGlkYXRpb25JdGVyYXRvciA9IFRlcnJhZm9ybUl0ZXJhdG9yLmZyb21Db21wbGV4TGlzdCggdGhpcy5yZXNvdXJjZS5kb21haW5WYWxpZGF0aW9uT3B0aW9ucywgXCJkb21haW5fbmFtZVwiKTtcbiAgICAgIC8vIC8vIFJlY29yZFNldCBkb2Vzbid0IHdvcmsgd2l0aCB6b25lID0gSVJlc29sdmFibGVcbiAgICAgIC8vIC8vIHVzaW5nIFJvdXRlNTNSZWNvcmQgcmVzb3VyY2UgZGlyZWN0bHlcbiAgICAgIC8vIGNvbnN0IHJlY29yZHMgPSBuZXcgcm91dGU1M1JlY29yZC5Sb3V0ZTUzUmVjb3JkKCB0aGlzLCBcIlZhbGlkYXRpb25SZWNvcmRzXCIsIHtcbiAgICAgIC8vICAgZm9yRWFjaDogZG9tYWluVmFsaWRhdGlvbkl0ZXJhdG9yLFxuICAgICAgLy8gICBhbGxvd092ZXJ3cml0ZTogdHJ1ZSxcbiAgICAgIC8vICAgbmFtZTogZG9tYWluVmFsaWRhdGlvbkl0ZXJhdG9yLmdldFN0cmluZyhcInJlc291cmNlX3JlY29yZF9uYW1lXCIpLFxuICAgICAgLy8gICByZWNvcmRzOiBbXG4gICAgICAvLyAgICAgZG9tYWluVmFsaWRhdGlvbkl0ZXJhdG9yLmdldFN0cmluZyhcInJlc291cmNlX3JlY29yZF92YWx1ZVwiKSxcbiAgICAgIC8vICAgXSxcbiAgICAgIC8vICAgdHRsOiA2MCxcbiAgICAgIC8vICAgdHlwZTogZG9tYWluVmFsaWRhdGlvbkl0ZXJhdG9yLmdldFN0cmluZyhcInJlc291cmNlX3JlY29yZF90eXBlXCIpLFxuICAgICAgLy8gICB6b25lSWQ6IEZuLmxvb2t1cCh6b25lTG9va3VwLCBkb21haW5WYWxpZGF0aW9uSXRlcmF0b3Iua2V5KSxcbiAgICAgIC8vIH0pO1xuICAgICAgLy8gY29uc3QgcmVjb3Jkc0l0ZXJhdG9yID0gVGVycmFmb3JtSXRlcmF0b3IuZnJvbVJlc291cmNlcyhyZWNvcmRzKTtcbiAgICAgIC8vIG5ldyBhY21DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uQWNtQ2VydGlmaWNhdGVWYWxpZGF0aW9uKCB0aGlzLCBcIlZhbGlkYXRpb25cIiwge1xuICAgICAgLy8gICBjZXJ0aWZpY2F0ZUFybjogdGhpcy5yZXNvdXJjZS5hcm4sXG4gICAgICAvLyAgIHZhbGlkYXRpb25SZWNvcmRGcWRuczogVG9rZW4uYXNMaXN0KFxuICAgICAgLy8gICAgIHJlY29yZHNJdGVyYXRvci5wbHVja1Byb3BlcnR5KFwiZnFkblwiKSxcbiAgICAgIC8vICAgKSxcbiAgICAgIC8vIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NlcnRpZmljYXRlQXJuID0gdGhpcy5yZXNvdXJjZS5hcm47XG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIGFybjogdGhpcy5yZXNvdXJjZS5hcm4sXG4gICAgICBzdGF0dXM6IHRoaXMucmVzb3VyY2Uuc3RhdHVzLFxuICAgICAgZG9tYWluVmFsaWRhdGlvbk9wdGlvbnM6IHRoaXMucmVzb3VyY2UuZG9tYWluVmFsaWRhdGlvbk9wdGlvbnMsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIE1ldGhvZCB1c2VkIHRvIGFzc2VydCBvd25lcnNoaXAgb2YgdGhlIGRvbWFpblxuICovXG5leHBvcnQgZW51bSBWYWxpZGF0aW9uTWV0aG9kIHtcbiAgLyoqXG4gICAqIFNlbmQgZW1haWwgdG8gYSBudW1iZXIgb2YgZW1haWwgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZG9tYWluXG4gICAqXG4gICAqIElNUE9SVEFOVDogaWYgeW91IGFyZSBjcmVhdGluZyBhIGNlcnRpZmljYXRlIGFzIHBhcnQgb2YgeW91ciBzdGFjaywgdGhlIHN0YWNrXG4gICAqIHdpbGwgbm90IGNvbXBsZXRlIGNyZWF0aW5nIHVudGlsIHlvdSByZWFkIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB0aGVcbiAgICogZW1haWwgdGhhdCB5b3Ugd2lsbCByZWNlaXZlLlxuICAgKlxuICAgKiBBQ00gd2lsbCBzZW5kIHZhbGlkYXRpb24gZW1haWxzIHRvIHRoZSBmb2xsb3dpbmcgYWRkcmVzc2VzOlxuICAgKlxuICAgKiAgYWRtaW5AZG9tYWluLmNvbVxuICAgKiAgYWRtaW5pc3RyYXRvckBkb21haW4uY29tXG4gICAqICBob3N0bWFzdGVyQGRvbWFpbi5jb21cbiAgICogIHBvc3RtYXN0ZXJAZG9tYWluLmNvbVxuICAgKiAgd2VibWFzdGVyQGRvbWFpbi5jb21cbiAgICpcbiAgICogRm9yIGV2ZXJ5IGRvbWFpbiB0aGF0IHlvdSByZWdpc3Rlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYWNtL2xhdGVzdC91c2VyZ3VpZGUvZ3MtYWNtLXZhbGlkYXRlLWVtYWlsLmh0bWxcbiAgICovXG4gIEVNQUlMID0gXCJFTUFJTFwiLFxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBvd25lcnNoaXAgYnkgYWRkaW5nIGFwcHJvcHJpYXRlIEROUyByZWNvcmRzXG4gICAqXG4gICAqIElNUE9SVEFOVDogSWYgYGhvc3RlZFpvbmVgIGlzIG5vdCBzcGVjaWZpZWQsIEROUyByZWNvcmRzIG11c3QgYmUgYWRkZWRcbiAgICogbWFudWFsbHkgYW5kIHRoZSBzdGFjayB3aWxsIG5vdCBjb21wbGV0ZSBjcmVhdGluZyB1bnRpbCB0aGUgcmVjb3JkcyBhcmVcbiAgICogYWRkZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FjbS9sYXRlc3QvdXNlcmd1aWRlL2dzLWFjbS12YWxpZGF0ZS1kbnMuaHRtbFxuICAgKi9cbiAgRE5TID0gXCJETlNcIixcbn1cblxuaW50ZXJmYWNlIERvbWFpblZhbGlkYXRpb24ge1xuICBPcHRpb25zOiBhY21DZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZVZhbGlkYXRpb25PcHRpb25bXTtcbiAgem9uZUxvb2t1cDogeyBbZG9tYWluTmFtZTogc3RyaW5nXTogSURuc1pvbmUgfTsgLy8gc3RyaW5nIH07XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRvbWFpblZhbGlkYXRpb24oXG4gIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbk9wdGlvbixcbiAgZG9tYWluTmFtZXM6IHN0cmluZ1tdLFxuKTogRG9tYWluVmFsaWRhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHJlc3VsdDogRG9tYWluVmFsaWRhdGlvbiA9IHtcbiAgICBPcHRpb25zOiBbXSxcbiAgICB6b25lTG9va3VwOiB7fSxcbiAgfTtcblxuICBzd2l0Y2ggKHZhbGlkYXRpb24ubWV0aG9kKSB7XG4gICAgY2FzZSBWYWxpZGF0aW9uTWV0aG9kLkROUzpcbiAgICAgIGZvciAoY29uc3QgZG9tYWluTmFtZSBvZiBnZXRVbmlxdWVEbnNEb21haW5OYW1lcyhkb21haW5OYW1lcykpIHtcbiAgICAgICAgY29uc3QgaG9zdGVkWm9uZSA9XG4gICAgICAgICAgdmFsaWRhdGlvbi5ob3N0ZWRab25lcz8uW2RvbWFpbk5hbWVdID8/IHZhbGlkYXRpb24uaG9zdGVkWm9uZTtcbiAgICAgICAgaWYgKGhvc3RlZFpvbmUpIHtcbiAgICAgICAgICByZXN1bHQuT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGRvbWFpbk5hbWUsXG4gICAgICAgICAgICB2YWxpZGF0aW9uRG9tYWluOiBob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc3VsdC56b25lTG9va3VwW2RvbWFpbk5hbWVdID0gaG9zdGVkWm9uZTsgLy8gLnpvbmVJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWYWxpZGF0aW9uTWV0aG9kLkVNQUlMOlxuICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIG9mIGRvbWFpbk5hbWVzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Eb21haW4gPSB2YWxpZGF0aW9uLnZhbGlkYXRpb25Eb21haW5zPy5bZG9tYWluTmFtZV07XG4gICAgICAgIGlmICghdmFsaWRhdGlvbkRvbWFpbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiV2hlbiB1c2luZyBlbWFpbCBmb3IgdmFsaWRhdGlvbiwgJ3ZhbGlkYXRpb25Eb21haW5zJyBuZWVkcyB0byBiZSBzdXBwbGllZFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0Lk9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgZG9tYWluTmFtZSxcbiAgICAgICAgICB2YWxpZGF0aW9uRG9tYWluOiB2YWxpZGF0aW9uRG9tYWluLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmFsaWRhdGlvbiBtZXRob2QgJHt2YWxpZGF0aW9uLm1ldGhvZH1gKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuT3B0aW9ucy5sZW5ndGggIT09IDAgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB3aWxkY2FyZCBkb21haW5zICgqLmV4YW1wbGUuY29tKSB3aGVyZSB0aGUgYmFzZSBkb21haW4gKGV4YW1wbGUuY29tKSBpcyBwcmVzZW50LlxuICogVGhpcyBpcyBiZWNhdXNlIHRoZSBETlMgdmFsaWRhdGlvbiB0cmVhdHMgdGhlbSBhcyB0aGUgc2FtZSB0aGluZywgYW5kIHRoZSBSb3V0ZTUzIHJlY29yZHNcbiAqIHJlc291cmNlcyB3b3VsZCBiZSBkdXBsaWNhdGVkIGNhdXNpbmcgYXBwbHktdGltZSBlcnJvcnMuXG4gKi9cbmZ1bmN0aW9uIGdldFVuaXF1ZURuc0RvbWFpbk5hbWVzKGRvbWFpbk5hbWVzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gZG9tYWluTmFtZXMuZmlsdGVyKChkb21haW4pID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgVG9rZW4uaXNVbnJlc29sdmVkKGRvbWFpbikgfHxcbiAgICAgICFkb21haW4uc3RhcnRzV2l0aChcIiouXCIpIHx8XG4gICAgICAhZG9tYWluTmFtZXMuaW5jbHVkZXMoZG9tYWluLnJlcGxhY2UoXCIqLlwiLCBcIlwiKSlcbiAgICApO1xuICB9KTtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { IResolvable } from "cdktf";
1
+ import { IResolvable } from "cdktn";
2
2
  import { Construct } from "constructs";
3
3
  import { ICertificate, IOrigin, FunctionAssociation } from ".";
4
4
  import { Duration } from "../../duration";