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.ImportedLoadBalancer = exports.BaseLoadBalancer = 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-elasticloadbalancingv2/lib/shared/base-load-balancer.ts
7
7
  const region_info_1 = require("@aws-cdk/region-info");
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 enums_1 = require("./enums");
11
11
  const util_1 = require("./util");
12
12
  const ec2 = require("../");
@@ -204,8 +204,8 @@ class BaseLoadBalancer extends aws_construct_1.AwsConstructBase {
204
204
  const bucketPolicy = bucket.policy?.node.defaultChild;
205
205
  if (lb &&
206
206
  bucketPolicy &&
207
- cdktf_1.TerraformResource.isTerraformResource(lb) &&
208
- cdktf_1.TerraformResource.isTerraformResource(bucketPolicy)) {
207
+ cdktn_1.TerraformResource.isTerraformResource(lb) &&
208
+ cdktn_1.TerraformResource.isTerraformResource(bucketPolicy)) {
209
209
  lb.node.addDependency(bucketPolicy);
210
210
  }
211
211
  // TODO: Should putAccessLogs be handled as part of prepareStack (in toTerraform() instead)?
@@ -233,23 +233,23 @@ class BaseLoadBalancer extends aws_construct_1.AwsConstructBase {
233
233
  this.setAttribute(key, undefined);
234
234
  }
235
235
  lazyStringAttr(key) {
236
- return cdktf_1.Lazy.stringValue({
236
+ return cdktn_1.Lazy.stringValue({
237
237
  produce: () => (0, util_1.lookupStringAttribute)(this.attributes, key),
238
238
  });
239
239
  }
240
240
  lazyBoolAttr(key) {
241
- return cdktf_1.Lazy.anyValue({
241
+ return cdktn_1.Lazy.anyValue({
242
242
  produce: () => (0, util_1.lookupBoolAttribute)(this.attributes, key),
243
243
  });
244
244
  }
245
245
  lazyNumberAttr(key) {
246
- return cdktf_1.Lazy.numberValue({
246
+ return cdktn_1.Lazy.numberValue({
247
247
  produce: () => (0, util_1.lookupNumberAttribute)(this.attributes, key),
248
248
  });
249
249
  }
250
250
  resourcePolicyPrincipal() {
251
251
  const region = this.stack.region;
252
- if (cdktf_1.Token.isUnresolved(region)) {
252
+ if (cdktn_1.Token.isUnresolved(region)) {
253
253
  throw new Error("Region is required to enable ELBv2 access logging");
254
254
  }
255
255
  const account = region_info_1.RegionInfo.get(region).elbv2Account;
@@ -264,7 +264,7 @@ class BaseLoadBalancer extends aws_construct_1.AwsConstructBase {
264
264
  const ret = new Array();
265
265
  // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-name
266
266
  const loadBalancerName = this.physicalName;
267
- if (!cdktf_1.Token.isUnresolved(loadBalancerName) &&
267
+ if (!cdktn_1.Token.isUnresolved(loadBalancerName) &&
268
268
  loadBalancerName !== undefined) {
269
269
  if (loadBalancerName.length > 32) {
270
270
  ret.push(`Load balancer name: "${loadBalancerName}" can have a maximum of 32 characters.`);
@@ -284,7 +284,7 @@ class BaseLoadBalancer extends aws_construct_1.AwsConstructBase {
284
284
  }
285
285
  exports.BaseLoadBalancer = BaseLoadBalancer;
286
286
  _a = JSII_RTTI_SYMBOL_1;
287
- BaseLoadBalancer[_a] = { fqn: "terraconstructs.aws.compute.BaseLoadBalancer", version: "0.2.4" };
287
+ BaseLoadBalancer[_a] = { fqn: "terraconstructs.aws.compute.BaseLoadBalancer", version: "0.2.6" };
288
288
  /**
289
289
  * A helper class to instantiate an ILoadBalancerV2
290
290
  */
@@ -296,5 +296,5 @@ class ImportedLoadBalancer {
296
296
  }
297
297
  exports.ImportedLoadBalancer = ImportedLoadBalancer;
298
298
  _b = JSII_RTTI_SYMBOL_1;
299
- ImportedLoadBalancer[_b] = { fqn: "terraconstructs.aws.compute.ImportedLoadBalancer", version: "0.2.4" };
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1sb2FkLWJhbGFuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2xiLXNoYXJlZC9iYXNlLWxvYWQtYmFsYW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnSUFBZ0k7QUFFaEksc0RBQWtEO0FBQ2xELHNEQUEyRDtBQUMzRCxpQ0FLZTtBQUVmLG1DQUF3QztBQUN4QyxpQ0FTZ0I7QUFDaEIsMkJBQTJCO0FBQzNCLDJEQUF1RDtBQUN2RCxtQ0FBc0M7QUFDdEMsdURBSTZCO0FBQzdCLCtDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsbUNBQThEO0FBeUk5RDs7R0FFRztBQUNILE1BQXNCLGdCQUFpQixTQUFRLGdDQUFnQjtJQUM3RCxNQUFNO0lBQ04sd0VBQXdFO0lBQ3hFLGVBQWU7SUFDZixNQUFNO0lBQ04sMENBQTBDO0lBQzFDLHNCQUFzQjtJQUN0QixzREFBc0Q7SUFDdEQsTUFBTTtJQUNOLFNBQVM7SUFDVCxpRUFBaUU7SUFDakUsc0VBQXNFO0lBQ3RFLDRCQUE0QjtJQUM1QixRQUFRO0lBQ1IsUUFBUTtJQUNSLHVCQUF1QjtJQUN2QixpRkFBaUY7SUFDakYsU0FBUztJQUNULE1BQU07SUFFTixrREFBa0Q7SUFDbEQsZ0RBQWdEO0lBQ2hELGdGQUFnRjtJQUNoRixNQUFNO0lBRU4sK0VBQStFO0lBQy9FLGFBQWE7SUFDYixRQUFRO0lBQ1IsbUVBQW1FO0lBQ25FLGlCQUFpQjtJQUNqQixnRUFBZ0U7SUFDaEUsMENBQTBDO0lBQzFDLHNEQUFzRDtJQUN0RCxnREFBZ0Q7SUFDaEQsc0JBQXNCO0lBQ3RCLHFFQUFxRTtJQUNyRSxvRUFBb0U7SUFDcEUsNkpBQTZKO0lBQzdKLCtEQUErRDtJQUMvRCwrQkFBK0I7SUFDL0IsdUVBQXVFO0lBQ3ZFLHlDQUF5QztJQUN6Qyw4QkFBOEI7SUFDOUIsZ0RBQWdEO0lBQ2hELFNBQVM7SUFDVCxhQUFhO0lBRWIsa0JBQWtC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Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQVE7SUFDMUMsQ0FBQzs7QUFKTixvREFLQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyL2xpYi9zaGFyZWQvYmFzZS1sb2FkLWJhbGFuY2VyLnRzXG5cbmltcG9ydCB7IFJlZ2lvbkluZm8gfSBmcm9tIFwiQGF3cy1jZGsvcmVnaW9uLWluZm9cIjtcbmltcG9ydCB7IGxiIGFzIHRmTG9hZEJhbGFuY2VyIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybVJlc291cmNlLFxuICAvLyBDb250ZXh0UHJvdmlkZXIsXG4gIExhenksXG4gIFRva2VuLFxufSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJcEFkZHJlc3NUeXBlIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZXMsXG4gIGlmVW5kZWZpbmVkLFxuICBMb2FkQmFsYW5jZXJBdHRyaWJ1dGUgYXMgQXR0cmlidXRlLFxuICBsb29rdXBCb29sQXR0cmlidXRlLFxuICBsb29rdXBOdW1iZXJBdHRyaWJ1dGUsXG4gIGxvb2t1cFN0cmluZ0F0dHJpYnV0ZSxcbiAgLy8gbWFwVGFnTWFwVG9DeHNjaGVtYSxcbiAgLy8gcmVuZGVyQXR0cmlidXRlcyxcbn0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCIuLi9cIjtcbmltcG9ydCB7IExvYWRCYWxhbmNlclR5cGUgfSBmcm9tIFwiLi9ncmlkLWxvb2t1cC10eXBlc1wiO1xuaW1wb3J0IHsgQXJuRm9ybWF0IH0gZnJvbSBcIi4uLy4uL2FyblwiO1xuaW1wb3J0IHtcbiAgSUF3c0NvbnN0cnVjdCxcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG59IGZyb20gXCIuLi8uLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi8uLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vLi4vaWFtXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiLi4vLi4vaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiLi4vLi4vc3RvcmFnZVwiO1xuXG4vKipcbiAqIFNoYXJlZCBwcm9wZXJ0aWVzIG9mIGJvdGggQXBwbGljYXRpb24gYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTG9hZEJhbGFuY2VyUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgbG9hZCBiYWxhbmNlciBpblxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbG9hZCBiYWxhbmNlciBoYXMgYW4gaW50ZXJuZXQtcm91dGFibGUgYWRkcmVzc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRGYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGljaCBzdWJuZXRzIHBsYWNlIHRoZSBsb2FkIGJhbGFuY2VyIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIFZwYyBkZWZhdWx0IHN0cmF0ZWd5LlxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGRlbGV0aW9uIHByb3RlY3Rpb24gaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGNyb3NzLXpvbmUgbG9hZCBiYWxhbmNpbmcgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZSBmb3IgTmV0d29yayBMb2FkIEJhbGFuY2VycyBhbmQgdHJ1ZSBmb3IgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMuXG4gICAqIFRoaXMgY2FuIG5vdCBiZSBgZmFsc2VgIGZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2Vycy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1sb2FkYmFsYW5jZXJhdHRyaWJ1dGUuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgY3Jvc3Nab25lRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBsb2FkIGJhbGFuY2VyIGJsb2NrcyB0cmFmZmljIHRocm91Z2ggdGhlIEludGVybmV0IEdhdGV3YXkgKElHVykuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2UgZm9yIGludGVybmV0LWZhY2luZyBsb2FkIGJhbGFuY2VycyBhbmQgdHJ1ZSBmb3IgaW50ZXJuYWwgbG9hZCBiYWxhbmNlcnNcbiAgICovXG4gIHJlYWRvbmx5IGRlbnlBbGxJZ3dUcmFmZmljPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclYyT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgY2Fub25pY2FsIGhvc3RlZCB6b25lIElEIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgWjJQNzBKN0VYQU1QTEVgXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEROUyBuYW1lIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgbXktbG9hZC1iYWxhbmNlci00MjQ4MzU3MDYudXMtd2VzdC0yLmVsYi5hbWF6b25hd3MuY29tYFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJEbnNOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvYWRCYWxhbmNlckJhc2VWMiB7XG4gIC8qKlxuICAgKiBUaGUgY2Fub25pY2FsIGhvc3RlZCB6b25lIElEIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgWjJQNzBKN0VYQU1QTEVgXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRE5TIG5hbWUgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBteS1sb2FkLWJhbGFuY2VyLTQyNDgzNTcwNi51cy13ZXN0LTIuZWxiLmFtYXpvbmF3cy5jb21gXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckRuc05hbWU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUxvYWRCYWxhbmNlclYyIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCwgSUxvYWRCYWxhbmNlckJhc2VWMiB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclYyT3V0cHV0czogTG9hZEJhbGFuY2VyVjJPdXRwdXRzO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGxvb2tpbmcgdXAgbG9hZCBiYWxhbmNlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTG9hZEJhbGFuY2VyTG9va3VwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaW5kIGJ5IGxvYWQgYmFsYW5jZXIncyBBUk5cbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBzZWFyY2ggYnkgbG9hZCBiYWxhbmNlciBhcm5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckFybj86IHN0cmluZztcblxuICAvKipcbiAgICogTWF0Y2ggbG9hZCBiYWxhbmNlciB0YWdzLlxuICAgKiBAZGVmYXVsdCAtIGRvZXMgbm90IG1hdGNoIGxvYWQgYmFsYW5jZXJzIGJ5IHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHF1ZXJ5IGNvbnRleHQgcHJvdmlkZXJcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclF1ZXJ5Q29udGV4dFByb3ZpZGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBVc2VyJ3MgbG9va3VwIG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJPcHRpb25zOiBCYXNlTG9hZEJhbGFuY2VyTG9va3VwT3B0aW9ucztcblxuICAvKipcbiAgICogVHlwZSBvZiBsb2FkIGJhbGFuY2VyXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJUeXBlOiBMb2FkQmFsYW5jZXJUeXBlO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGJvdGggQXBwbGljYXRpb24gYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VMb2FkQmFsYW5jZXIgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIHtcbiAgLy8gLyoqXG4gIC8vICAqIFF1ZXJpZXMgdGhlIGxvYWQgYmFsYW5jZXIgY29udGV4dCBwcm92aWRlciBmb3IgbG9hZCBiYWxhbmNlciBpbmZvLlxuICAvLyAgKiBAaW50ZXJuYWxcbiAgLy8gICovXG4gIC8vIHByb3RlY3RlZCBzdGF0aWMgX3F1ZXJ5Q29udGV4dFByb3ZpZGVyKFxuICAvLyAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIC8vICAgb3B0aW9uczogTG9hZEJhbGFuY2VyUXVlcnlDb250ZXh0UHJvdmlkZXJPcHRpb25zLFxuICAvLyApIHtcbiAgLy8gICBpZiAoXG4gIC8vICAgICBUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9ucy51c2VyT3B0aW9ucy5sb2FkQmFsYW5jZXJBcm4pIHx8XG4gIC8vICAgICBPYmplY3QudmFsdWVzKG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyVGFncyA/PyB7fSkuc29tZShcbiAgLy8gICAgICAgVG9rZW4uaXNVbnJlc29sdmVkLFxuICAvLyAgICAgKVxuICAvLyAgICkge1xuICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAvLyAgICAgICBcIkFsbCBhcmd1bWVudHMgdG8gbG9vayB1cCBhIGxvYWQgYmFsYW5jZXIgbXVzdCBiZSBjb25jcmV0ZSAobm8gVG9rZW5zKVwiLFxuICAvLyAgICAgKTtcbiAgLy8gICB9XG5cbiAgLy8gICBsZXQgY3hzY2hlbWFUYWdzOiBjeHNjaGVtYS5UYWdbXSB8IHVuZGVmaW5lZDtcbiAgLy8gICBpZiAob3B0aW9ucy51c2VyT3B0aW9ucy5sb2FkQmFsYW5jZXJUYWdzKSB7XG4gIC8vICAgICBjeHNjaGVtYVRhZ3MgPSBtYXBUYWdNYXBUb0N4c2NoZW1hKG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyVGFncyk7XG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgcHJvcHM6IGN4YXBpLkxvYWRCYWxhbmNlckNvbnRleHRSZXNwb25zZSA9IENvbnRleHRQcm92aWRlci5nZXRWYWx1ZShcbiAgLy8gICAgIHNjb3BlLFxuICAvLyAgICAge1xuICAvLyAgICAgICBwcm92aWRlcjogY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLkxPQURfQkFMQU5DRVJfUFJPVklERVIsXG4gIC8vICAgICAgIHByb3BzOiB7XG4gIC8vICAgICAgICAgbG9hZEJhbGFuY2VyQXJuOiBvcHRpb25zLnVzZXJPcHRpb25zLmxvYWRCYWxhbmNlckFybixcbiAgLy8gICAgICAgICBsb2FkQmFsYW5jZXJUYWdzOiBjeHNjaGVtYVRhZ3MsXG4gIC8vICAgICAgICAgbG9hZEJhbGFuY2VyVHlwZTogb3B0aW9ucy5sb2FkQmFsYW5jZXJUeXBlLFxuICAvLyAgICAgICB9IGFzIGN4c2NoZW1hLkxvYWRCYWxhbmNlckNvbnRleHRRdWVyeSxcbiAgLy8gICAgICAgZHVtbXlWYWx1ZToge1xuICAvLyAgICAgICAgIGlwQWRkcmVzc1R5cGU6IGN4YXBpLkxvYWRCYWxhbmNlcklwQWRkcmVzc1R5cGUuRFVBTF9TVEFDSyxcbiAgLy8gICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvbm8tbGl0ZXJhbC1wYXJ0aXRpb25cbiAgLy8gICAgICAgICBsb2FkQmFsYW5jZXJBcm46IGBhcm46YXdzOmVsYXN0aWNsb2FkYmFsYW5jaW5nOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6bG9hZGJhbGFuY2VyLyR7b3B0aW9ucy5sb2FkQmFsYW5jZXJUeXBlfS9teS1sb2FkLWJhbGFuY2VyLzUwZGM2YzQ5NWMwYzkxODhgLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogXCJaM0RaWEUwRVhBTVBMRVwiLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlckRuc05hbWU6XG4gIC8vICAgICAgICAgICBcIm15LWxvYWQtYmFsYW5jZXItMTIzNDU2Nzg5MC51cy13ZXN0LTIuZWxiLmFtYXpvbmF3cy5jb21cIixcbiAgLy8gICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiBbXCJzZy0xMjM0XCJdLFxuICAvLyAgICAgICAgIHZwY0lkOiBcInZwYy0xMjM0NVwiLFxuICAvLyAgICAgICB9IGFzIGN4YXBpLkxvYWRCYWxhbmNlckNvbnRleHRSZXNwb25zZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgKS52YWx1ZTtcblxuICAvLyAgIHJldHVybiBwcm9wcztcbiAgLy8gfVxuXG4gIHB1YmxpYyBnZXQgbG9hZEJhbGFuY2VyVjJPdXRwdXRzKCk6IExvYWRCYWxhbmNlclYyT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogdGhpcy5sb2FkQmFsYW5jZXJDYW5vbmljYWxIb3N0ZWRab25lSWQsXG4gICAgICBsb2FkQmFsYW5jZXJEbnNOYW1lOiB0aGlzLmxvYWRCYWxhbmNlckRuc05hbWUsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZEJhbGFuY2VyVjJPdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjYW5vbmljYWwgaG9zdGVkIHpvbmUgSUQgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBaMlA3MEo3RVhBTVBMRWBcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRE5TIG5hbWUgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBteS1sb2FkLWJhbGFuY2VyLTQyNDgzNTcwNi51cy13ZXN0LTIuZWxiLmFtYXpvbmF3cy5jb21gXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJEbnNOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIG5hbWUgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBhcHAvbXktbG9hZC1iYWxhbmNlci81MGRjNmM0OTVjMGM5MTg4YFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyRnVsbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBteS1sb2FkLWJhbGFuY2VyYFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgYXJuOmF3czplbGFzdGljbG9hZGJhbGFuY2luZzp1cy13ZXN0LTI6MTIzNDU2Nzg5MDEyOmxvYWRiYWxhbmNlci9hcHAvbXktaW50ZXJuYWwtbG9hZC1iYWxhbmNlci81MGRjNmM0OTVjMGM5MTg4YFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3Vwczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhpcyBsb2FkIGJhbGFuY2VyIGhhcyBiZWVuIGNyZWF0ZWQgaW4uXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgYWx3YXlzIGRlZmluZWQgKG5vdCBgbnVsbGAgb3IgYHVuZGVmaW5lZGApIGZvciBzdWItY2xhc3NlcyBvZiBgQmFzZUxvYWRCYWxhbmNlcmAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgc2V0IG9uIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVzID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgcGh5c2ljYWxOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGJhc2VQcm9wczogQmFzZUxvYWRCYWxhbmNlclByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczogdGZMb2FkQmFsYW5jZXIuTGJDb25maWcsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgYmFzZVByb3BzKTtcbiAgICB0aGlzLnBoeXNpY2FsTmFtZSA9XG4gICAgICBiYXNlUHJvcHMubG9hZEJhbGFuY2VyTmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGludGVybmV0RmFjaW5nID0gaWZVbmRlZmluZWQoYmFzZVByb3BzLmludGVybmV0RmFjaW5nLCBmYWxzZSk7XG5cbiAgICBjb25zdCB2cGNTdWJuZXRzID0gaWZVbmRlZmluZWQoXG4gICAgICBiYXNlUHJvcHMudnBjU3VibmV0cyxcbiAgICAgIGludGVybmV0RmFjaW5nID8geyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfSA6IHt9LFxuICAgICk7XG4gICAgY29uc3QgeyBzdWJuZXRJZHMsIGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgfSA9XG4gICAgICBiYXNlUHJvcHMudnBjLnNlbGVjdFN1Ym5ldHModnBjU3VibmV0cyk7XG5cbiAgICB0aGlzLnZwYyA9IGJhc2VQcm9wcy52cGM7XG5cbiAgICBpZiAoXG4gICAgICBhZGRpdGlvbmFsUHJvcHMuaXBBZGRyZXNzVHlwZSA9PT1cbiAgICAgICAgSXBBZGRyZXNzVHlwZS5EVUFMX1NUQUNLX1dJVEhPVVRfUFVCTElDX0lQVjQgJiZcbiAgICAgIGFkZGl0aW9uYWxQcm9wcy5sb2FkQmFsYW5jZXJUeXBlICE9PSBMb2FkQmFsYW5jZXJUeXBlLkFQUExJQ0FUSU9OXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAnaXBBZGRyZXNzVHlwZScgRFVBTF9TVEFDS19XSVRIT1VUX1BVQkxJQ19JUFY0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyLCBnb3QgJHthZGRpdGlvbmFsUHJvcHMubG9hZEJhbGFuY2VyVHlwZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyB0ZkxvYWRCYWxhbmNlci5MYih0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgc3VibmV0czogc3VibmV0SWRzLFxuICAgICAgaW50ZXJuYWw6ICFpbnRlcm5ldEZhY2luZywgLy8gQVdTIENESyBcIlNjaGVtZVwiXG4gICAgICAvLyBSZXZlcnNlIENGTiBMb2FkQmFsYW5jZXJBdHRyaWJ1dGVzIHRvIFRlcnJhZm9ybSBSZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1wcm92aWRlci1hd3MvYmxvYi92NS44OC4wL2ludGVybmFsL3NlcnZpY2UvZWxidjIvbG9hZF9iYWxhbmNlci5nbyNMNzE4XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1sb2FkYmFsYW5jZXJhdHRyaWJ1dGUuaHRtbFxuICAgICAgY2xpZW50S2VlcEFsaXZlOiB0aGlzLmxhenlOdW1iZXJBdHRyKEF0dHJpYnV0ZS5jbGllbnRLZWVwQWxpdmVTZWNvbmRzKSxcbiAgICAgIC8vIGN1c3RvbWVyT3duZWRJcHY0UG9vbCBbQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMgb24gT3V0cG9zdHNdXG4gICAgICBkZXN5bmNNaXRpZ2F0aW9uTW9kZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQRGVzeW5jTWl0aWdhdGlvbk1vZGUsXG4gICAgICApLFxuICAgICAgZG5zUmVjb3JkQ2xpZW50Um91dGluZ1BvbGljeTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLmROU1JlY29yZENsaWVudFJvdXRpbmdQb2xpY3ksXG4gICAgICApLFxuICAgICAgZHJvcEludmFsaWRIZWFkZXJGaWVsZHM6IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBEcm9wSW52YWxpZEhlYWRlckZpZWxkc0VuYWJsZWQsXG4gICAgICApLFxuICAgICAgZW5hYmxlQ3Jvc3Nab25lTG9hZEJhbGFuY2luZzogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5sb2FkQmFsYW5jaW5nQ3Jvc3Nab25lRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBlbmFibGVEZWxldGlvblByb3RlY3Rpb246IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUuZGVsZXRpb25Qcm90ZWN0aW9uRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBlbmFibGVIdHRwMjogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLnJvdXRpbmdIVFRQMkVuYWJsZWQpLFxuICAgICAgZW5hYmxlVGxzVmVyc2lvbkFuZENpcGhlclN1aXRlSGVhZGVyczogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFhBbXpuVExTVmVyc2lvbkFuZENpcGhlclN1aXRlRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBlbmFibGVXYWZGYWlsT3BlbjogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLndBRkZhaWxPcGVuRW5hYmxlZCksXG4gICAgICBlbmFibGVYZmZDbGllbnRQb3J0OiB0aGlzLmxhenlCb29sQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQWEZGQ2xpZW50UG9ydEVuYWJsZWQsXG4gICAgICApLFxuICAgICAgZW5hYmxlWm9uYWxTaGlmdDogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLnpvbmFsU2hpZnRDb25maWdFbmFibGVkKSxcbiAgICAgIC8vIGVuZm9yY2VTZWN1cml0eUdyb3VwSW5ib3VuZFJ1bGVzT25Qcml2YXRlTGlua1RyYWZmaWMsXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXIuaHRtbCNjZm4tZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXItZW5mb3JjZXNlY3VyaXR5Z3JvdXBpbmJvdW5kcnVsZXNvbnByaXZhdGVsaW5rdHJhZmZpY1xuICAgICAgaWRsZVRpbWVvdXQ6IHRoaXMubGF6eU51bWJlckF0dHIoQXR0cmlidXRlLmlkbGVUaW1lb3V0VGltZW91dFNlY29uZHMpLFxuICAgICAgLy8gaXBBZGRyZXNzVHlwZVxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbG9hZGJhbGFuY2VyLmh0bWwjY2ZuLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbG9hZGJhbGFuY2VyLWlwYWRkcmVzc3R5cGVcbiAgICAgIHByZXNlcnZlSG9zdEhlYWRlcjogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFByZXNlcnZlSG9zdEhlYWRlckVuYWJsZWQsXG4gICAgICApLFxuICAgICAgeGZmSGVhZGVyUHJvY2Vzc2luZ01vZGU6IHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFhGRkhlYWRlclByb2Nlc3NpbmdNb2RlLFxuICAgICAgKSxcbiAgICAgIC8vIC8vIHRoaXMgcmVzdWx0cyBpbiBlbXB0eSBgYWNjZXNzX2xvZ3M6IHt9YCB3aGljaCBpcyBub3QgdmFsaWQgKGJ1Y2tldCBpcyByZXF1aXJlZClcbiAgICAgIC8vIGFjY2Vzc0xvZ3M6IHtcbiAgICAgIC8vICAgZW5hYmxlZDogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLmFjY2Vzc0xvZ3NTM0VuYWJsZWQpLFxuICAgICAgLy8gICBidWNrZXQ6IHRoaXMubGF6eVN0cmluZ0F0dHIoQXR0cmlidXRlLmFjY2Vzc0xvZ3NTM0J1Y2tldCksXG4gICAgICAvLyAgIHByZWZpeDogdGhpcy5sYXp5U3RyaW5nQXR0cihBdHRyaWJ1dGUuYWNjZXNzTG9nc1MzUHJlZml4KSxcbiAgICAgIC8vIH0sXG4gICAgICAvLyAvLyB0aGlzIHJlc3VsdHMgaW4gZW1wdHkgYGNvbm5lY3Rpb25fbG9nczoge31gIHdoaWNoIGlzIG5vdCB2YWxpZCAoYnVja2V0IGlzIHJlcXVpcmVkKVxuICAgICAgLy8gY29ubmVjdGlvbkxvZ3M6IHtcbiAgICAgIC8vICAgZW5hYmxlZDogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLmNvbm5lY3Rpb25Mb2dzUzNFbmFibGVkKSxcbiAgICAgIC8vICAgYnVja2V0OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5jb25uZWN0aW9uTG9nc1MzQnVja2V0KSxcbiAgICAgIC8vICAgcHJlZml4OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5jb25uZWN0aW9uTG9nc1MzUHJlZml4KSxcbiAgICAgIC8vIH0sXG4gICAgICAvL3N1Ym5ldE1hcHBpbmdzXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXIuaHRtbCNjZm4tZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXItc3VibmV0bWFwcGluZ3NcbiAgICAgIC4uLmFkZGl0aW9uYWxQcm9wcyxcbiAgICB9KTtcbiAgICBpZiAoaW50ZXJuZXRGYWNpbmcpIHtcbiAgICAgIHJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgIEF0dHJpYnV0ZS5kZWxldGlvblByb3RlY3Rpb25FbmFibGVkLFxuICAgICAgYmFzZVByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbiA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICk7XG5cbiAgICBpZiAoYmFzZVByb3BzLmNyb3NzWm9uZUVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIEF0dHJpYnV0ZS5sb2FkQmFsYW5jaW5nQ3Jvc3Nab25lRW5hYmxlZCxcbiAgICAgICAgYmFzZVByb3BzLmNyb3NzWm9uZUVuYWJsZWQgPT09IHRydWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VQcm9wcy5kZW55QWxsSWd3VHJhZmZpYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYWRkaXRpb25hbFByb3BzLmlwQWRkcmVzc1R5cGUgPT09IElwQWRkcmVzc1R5cGUuRFVBTF9TVEFDSykge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBBdHRyaWJ1dGUuaVB2NkRlbnlBbGxJR1dUcmFmZmljLFxuICAgICAgICAgIGJhc2VQcm9wcy5kZW55QWxsSWd3VHJhZmZpYy50b1N0cmluZygpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAnZGVueUFsbElnd1RyYWZmaWMnIG1heSBvbmx5IGJlIHNldCBvbiBsb2FkIGJhbGFuY2VycyB3aXRoICR7SXBBZGRyZXNzVHlwZS5EVUFMX1NUQUNLfSBhZGRyZXNzaW5nLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkQmFsYW5jZXJDYW5vbmljYWxIb3N0ZWRab25lSWQgPSByZXNvdXJjZS56b25lSWQ7XG4gICAgdGhpcy5sb2FkQmFsYW5jZXJEbnNOYW1lID0gcmVzb3VyY2UuZG5zTmFtZTtcbiAgICB0aGlzLmxvYWRCYWxhbmNlckZ1bGxOYW1lID0gdGhpcy5zdGFjay5zcGxpdEFybihcbiAgICAgIHJlc291cmNlLmFybixcbiAgICAgIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICkucmVzb3VyY2U7XG4gICAgdGhpcy5sb2FkQmFsYW5jZXJOYW1lID0gcmVzb3VyY2UubmFtZTtcbiAgICB0aGlzLmxvYWRCYWxhbmNlckFybiA9IHJlc291cmNlLmFybjtcbiAgICB0aGlzLmxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXBzID0gcmVzb3VyY2Uuc2VjdXJpdHlHcm91cHM7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7IHZhbGlkYXRlOiB0aGlzLnZhbGlkYXRlTG9hZEJhbGFuY2VyLmJpbmQodGhpcykgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGFjY2VzcyBsb2dnaW5nIGZvciB0aGlzIGxvYWQgYmFsYW5jZXIuXG4gICAqXG4gICAqIEEgcmVnaW9uIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBzdGFjayBjb250YWluaW5nIHRoZSBsb2FkIGJhbGFuY2VyOyB5b3UgY2Fubm90IGVuYWJsZSBsb2dnaW5nIG9uXG4gICAqIGVudmlyb25tZW50LWFnbm9zdGljIHN0YWNrcy4gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvbGF0ZXN0L2d1aWRlL2Vudmlyb25tZW50cy5odG1sXG4gICAqL1xuICBwdWJsaWMgbG9nQWNjZXNzTG9ncyhidWNrZXQ6IHMzLklCdWNrZXQsIHByZWZpeD86IHN0cmluZykge1xuICAgIC8vIHByZWZpeCA9IHByZWZpeDsgLy8gb3B0aW9uYWwgaW4gVEYuLi4gfHwgXCJcIjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFjY2Vzc19sb2dzLnMzLmVuYWJsZWRcIiwgXCJ0cnVlXCIpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWNjZXNzX2xvZ3MuczMuYnVja2V0XCIsIGJ1Y2tldC5idWNrZXROYW1lLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWNjZXNzX2xvZ3MuczMucHJlZml4XCIsIHByZWZpeCk7XG5cbiAgICBjb25zdCBsb2dzRGVsaXZlcnlTZXJ2aWNlUHJpbmNpcGFsID0gbmV3IFNlcnZpY2VQcmluY2lwYWwoXG4gICAgICBcImRlbGl2ZXJ5LmxvZ3MuYW1hem9uYXdzLmNvbVwiLFxuICAgICk7XG4gICAgYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wiczM6UHV0T2JqZWN0XCJdLFxuICAgICAgICBwcmluY2lwYWxzOiBbdGhpcy5yZXNvdXJjZVBvbGljeVByaW5jaXBhbCgpXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYnVja2V0LmFybkZvck9iamVjdHMoXG4gICAgICAgICAgICBgJHtwcmVmaXggPyBwcmVmaXggKyBcIi9cIiA6IFwiXCJ9QVdTTG9ncy8ke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLmFjY291bnR9LypgLFxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInMzOlB1dE9iamVjdFwiXSxcbiAgICAgICAgcHJpbmNpcGFsczogW2xvZ3NEZWxpdmVyeVNlcnZpY2VQcmluY2lwYWxdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBidWNrZXQuYXJuRm9yT2JqZWN0cyhcbiAgICAgICAgICAgIGAke3ByZWZpeCA/IHByZWZpeCArIFwiL1wiIDogXCJcIn1BV1NMb2dzLyR7dGhpcy5lbnYuYWNjb3VudH0vKmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgICAgY29uZGl0aW9uOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVzdDogXCJTdHJpbmdFcXVhbHNcIixcbiAgICAgICAgICAgIHZhcmlhYmxlOiBcInMzOngtYW16LWFjbFwiLFxuICAgICAgICAgICAgdmFsdWVzOiBbXCJidWNrZXQtb3duZXItZnVsbC1jb250cm9sXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInMzOkdldEJ1Y2tldEFjbFwiXSxcbiAgICAgICAgcHJpbmNpcGFsczogW2xvZ3NEZWxpdmVyeVNlcnZpY2VQcmluY2lwYWxdLFxuICAgICAgICByZXNvdXJjZXM6IFtidWNrZXQuYnVja2V0QXJuXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIGJ1Y2tldCdzIHBvbGljeSBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgQUxCIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNjMzKVxuICAgIC8vIGF0IHRoZSBMMSBsZXZlbCB0byBhdm9pZCBjcmVhdGluZyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzI3NTI4XG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMjc5MjgpXG4gICAgY29uc3QgbGIgPSB0aGlzLm5vZGUuZGVmYXVsdENoaWxkIGFzIHRmTG9hZEJhbGFuY2VyLkxiO1xuICAgIGNvbnN0IGJ1Y2tldFBvbGljeSA9IGJ1Y2tldC5wb2xpY3k/Lm5vZGUuZGVmYXVsdENoaWxkO1xuICAgIGlmIChcbiAgICAgIGxiICYmXG4gICAgICBidWNrZXRQb2xpY3kgJiZcbiAgICAgIFRlcnJhZm9ybVJlc291cmNlLmlzVGVycmFmb3JtUmVzb3VyY2UobGIpICYmXG4gICAgICBUZXJyYWZvcm1SZXNvdXJjZS5pc1RlcnJhZm9ybVJlc291cmNlKGJ1Y2tldFBvbGljeSlcbiAgICApIHtcbiAgICAgIGxiLm5vZGUuYWRkRGVwZW5kZW5jeShidWNrZXRQb2xpY3kpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBTaG91bGQgcHV0QWNjZXNzTG9ncyBiZSBoYW5kbGVkIGFzIHBhcnQgb2YgcHJlcGFyZVN0YWNrIChpbiB0b1RlcnJhZm9ybSgpIGluc3RlYWQpP1xuICAgIC8vIG9ubHkgaWYgbGIuYWNjZXNzTG9ncy5pbnRlcm5hbFZhbHVlICE9PSB1bmRlZmluZWQ/IChvciBiYXNlZCBvbiB0aGlzLmF0dHJpYnV0ZXM/KVxuICAgIGxiLnB1dEFjY2Vzc0xvZ3Moe1xuICAgICAgZW5hYmxlZDogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLmFjY2Vzc0xvZ3NTM0VuYWJsZWQpLFxuICAgICAgYnVja2V0OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5hY2Nlc3NMb2dzUzNCdWNrZXQpLFxuICAgICAgcHJlZml4OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5hY2Nlc3NMb2dzUzNQcmVmaXgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUgb24gdGhlIGxvYWQgYmFsYW5jZXJcbiAgICpcbiAgICogVXNlIHRoZSBkZWRpY2F0ZWQgbG9nQWNjZXNzTG9ncygpIG1ldGhvZCBpbnRlYWQgb2Ygc2V0QXR0cmlidXRlIGlmIHlvdSB3YW50IHRvIHNldHVwIGFjY2VzcyBsb2dnaW5nLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vYXBwbGljYXRpb24tbG9hZC1iYWxhbmNlcnMuaHRtbCNsb2FkLWJhbGFuY2VyLWF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzZXRBdHRyaWJ1dGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgbG9hZCBiYWxhbmNlclxuICAgKi9cbiAgcHVibGljIHJlbW92ZUF0dHJpYnV0ZShrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKGtleSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsYXp5U3RyaW5nQXR0cihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBMYXp5LnN0cmluZ1ZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IGxvb2t1cFN0cmluZ0F0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZXMsIGtleSksXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGxhenlCb29sQXR0cihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBMYXp5LmFueVZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IGxvb2t1cEJvb2xBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVzLCBrZXkpLFxuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBsYXp5TnVtYmVyQXR0cihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBMYXp5Lm51bWJlclZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IGxvb2t1cE51bWJlckF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZXMsIGtleSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VQb2xpY3lQcmluY2lwYWwoKTogaWFtLklQcmluY2lwYWwge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuc3RhY2sucmVnaW9uO1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVnaW9uIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBFTEJ2MiBhY2Nlc3MgbG9nZ2luZ1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50ID0gUmVnaW9uSW5mby5nZXQocmVnaW9uKS5lbGJ2MkFjY291bnQ7XG4gICAgaWYgKCFhY2NvdW50KSB7XG4gICAgICAvLyBOZXcgUmVnaW9ucyB1c2UgYSBzZXJ2aWNlIHByaW5jaXBhbFxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9jbGFzc2ljL2VuYWJsZS1hY2Nlc3MtbG9ncy5odG1sI2F0dGFjaC1idWNrZXQtcG9saWN5XG4gICAgICByZXR1cm4gbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFxuICAgICAgICBcImxvZ2RlbGl2ZXJ5LmVsYXN0aWNsb2FkYmFsYW5jaW5nLmFtYXpvbmF3cy5jb21cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBpYW0uQWNjb3VudFByaW5jaXBhbChhY2NvdW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUxvYWRCYWxhbmNlcigpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1uYW1lXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyTmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIGlmIChcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQobG9hZEJhbGFuY2VyTmFtZSkgJiZcbiAgICAgIGxvYWRCYWxhbmNlck5hbWUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgaWYgKGxvYWRCYWxhbmNlck5hbWUubGVuZ3RoID4gMzIpIHtcbiAgICAgICAgcmV0LnB1c2goXG4gICAgICAgICAgYExvYWQgYmFsYW5jZXIgbmFtZTogXCIke2xvYWRCYWxhbmNlck5hbWV9XCIgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDMyIGNoYXJhY3RlcnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2FkQmFsYW5jZXJOYW1lLnN0YXJ0c1dpdGgoXCJpbnRlcm5hbC1cIikpIHtcbiAgICAgICAgcmV0LnB1c2goXG4gICAgICAgICAgYExvYWQgYmFsYW5jZXIgbmFtZTogXCIke2xvYWRCYWxhbmNlck5hbWV9XCIgbXVzdCBub3QgYmVnaW4gd2l0aCBcImludGVybmFsLVwiLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAobG9hZEJhbGFuY2VyTmFtZS5zdGFydHNXaXRoKFwiLVwiKSB8fCBsb2FkQmFsYW5jZXJOYW1lLmVuZHNXaXRoKFwiLVwiKSkge1xuICAgICAgICByZXQucHVzaChcbiAgICAgICAgICBgTG9hZCBiYWxhbmNlciBuYW1lOiBcIiR7bG9hZEJhbGFuY2VyTmFtZX1cIiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlswLTlhLXotXSskL2kudGVzdChsb2FkQmFsYW5jZXJOYW1lKSkge1xuICAgICAgICByZXQucHVzaChcbiAgICAgICAgICBgTG9hZCBiYWxhbmNlciBuYW1lOiBcIiR7bG9hZEJhbGFuY2VyTmFtZX1cIiBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBoeXBoZW5zLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIGNsYXNzIHRvIGluc3RhbnRpYXRlIGFuIElMb2FkQmFsYW5jZXJWMlxuICovXG5leHBvcnQgY2xhc3MgSW1wb3J0ZWRMb2FkQmFsYW5jZXIgaW1wbGVtZW50cyBJTG9hZEJhbGFuY2VyQmFzZVYyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJEbnNOYW1lOiBzdHJpbmcsXG4gICkge31cbn1cbiJdfQ==
299
+ ImportedLoadBalancer[_b] = { fqn: "terraconstructs.aws.compute.ImportedLoadBalancer", version: "0.2.6" };
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1sb2FkLWJhbGFuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2xiLXNoYXJlZC9iYXNlLWxvYWQtYmFsYW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnSUFBZ0k7QUFFaEksc0RBQWtEO0FBQ2xELHNEQUEyRDtBQUMzRCxpQ0FLZTtBQUVmLG1DQUF3QztBQUN4QyxpQ0FTZ0I7QUFDaEIsMkJBQTJCO0FBQzNCLDJEQUF1RDtBQUN2RCxtQ0FBc0M7QUFDdEMsdURBSTZCO0FBQzdCLCtDQUEyQztBQUMzQyxpQ0FBaUM7QUFDakMsbUNBQThEO0FBeUk5RDs7R0FFRztBQUNILE1BQXNCLGdCQUFpQixTQUFRLGdDQUFnQjtJQUM3RCxNQUFNO0lBQ04sd0VBQXdFO0lBQ3hFLGVBQWU7SUFDZixNQUFNO0lBQ04sMENBQTBDO0lBQzFDLHNCQUFzQjtJQUN0QixzREFBc0Q7SUFDdEQsTUFBTTtJQUNOLFNBQVM7SUFDVCxpRUFBaUU7SUFDakUsc0VBQXNFO0lBQ3RFLDRCQUE0QjtJQUM1QixRQUFRO0lBQ1IsUUFBUTtJQUNSLHVCQUF1QjtJQUN2QixpRkFBaUY7SUFDakYsU0FBUztJQUNULE1BQU07SUFFTixrREFBa0Q7SUFDbEQsZ0RBQWdEO0lBQ2hELGdGQUFnRjtJQUNoRixNQUFNO0lBRU4sK0VBQStFO0lBQy9FLGFBQWE7SUFDYixRQUFRO0lBQ1IsbUVBQW1FO0lBQ25FLGlCQUFpQjtJQUNqQixnRUFBZ0U7SUFDaEUsMENBQTBDO0lBQzFDLHNEQUFzRDtJQUN0RCxnREFBZ0Q7SUFDaEQsc0JBQXNCO0lBQ3RCLHFFQUFxRTtJQUNyRSxvRUFBb0U7SUFDcEUsNkpBQTZKO0lBQzdKLCtEQUErRDtJQUMvRCwrQkFBK0I7SUFDL0IsdUVBQXVFO0lBQ3ZFLHlDQUF5QztJQUN6Qyw4QkFBOEI7SUFDOUIsZ0RBQWdEO0lBQ2hELFNBQVM7SUFDVCxhQUFhO0lBRWIsa0JBQWtC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Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQVE7SUFDMUMsQ0FBQzs7QUFKTixvREFLQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyL2xpYi9zaGFyZWQvYmFzZS1sb2FkLWJhbGFuY2VyLnRzXG5cbmltcG9ydCB7IFJlZ2lvbkluZm8gfSBmcm9tIFwiQGF3cy1jZGsvcmVnaW9uLWluZm9cIjtcbmltcG9ydCB7IGxiIGFzIHRmTG9hZEJhbGFuY2VyIH0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybVJlc291cmNlLFxuICAvLyBDb250ZXh0UHJvdmlkZXIsXG4gIExhenksXG4gIFRva2VuLFxufSBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJcEFkZHJlc3NUeXBlIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZXMsXG4gIGlmVW5kZWZpbmVkLFxuICBMb2FkQmFsYW5jZXJBdHRyaWJ1dGUgYXMgQXR0cmlidXRlLFxuICBsb29rdXBCb29sQXR0cmlidXRlLFxuICBsb29rdXBOdW1iZXJBdHRyaWJ1dGUsXG4gIGxvb2t1cFN0cmluZ0F0dHJpYnV0ZSxcbiAgLy8gbWFwVGFnTWFwVG9DeHNjaGVtYSxcbiAgLy8gcmVuZGVyQXR0cmlidXRlcyxcbn0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCIuLi9cIjtcbmltcG9ydCB7IExvYWRCYWxhbmNlclR5cGUgfSBmcm9tIFwiLi9ncmlkLWxvb2t1cC10eXBlc1wiO1xuaW1wb3J0IHsgQXJuRm9ybWF0IH0gZnJvbSBcIi4uLy4uL2FyblwiO1xuaW1wb3J0IHtcbiAgSUF3c0NvbnN0cnVjdCxcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG59IGZyb20gXCIuLi8uLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi8uLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vLi4vaWFtXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiLi4vLi4vaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiLi4vLi4vc3RvcmFnZVwiO1xuXG4vKipcbiAqIFNoYXJlZCBwcm9wZXJ0aWVzIG9mIGJvdGggQXBwbGljYXRpb24gYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTG9hZEJhbGFuY2VyUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgbG9hZCBiYWxhbmNlciBpblxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbG9hZCBiYWxhbmNlciBoYXMgYW4gaW50ZXJuZXQtcm91dGFibGUgYWRkcmVzc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRGYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGljaCBzdWJuZXRzIHBsYWNlIHRoZSBsb2FkIGJhbGFuY2VyIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIFZwYyBkZWZhdWx0IHN0cmF0ZWd5LlxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGRlbGV0aW9uIHByb3RlY3Rpb24gaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGNyb3NzLXpvbmUgbG9hZCBiYWxhbmNpbmcgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZSBmb3IgTmV0d29yayBMb2FkIEJhbGFuY2VycyBhbmQgdHJ1ZSBmb3IgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMuXG4gICAqIFRoaXMgY2FuIG5vdCBiZSBgZmFsc2VgIGZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2Vycy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1sb2FkYmFsYW5jZXJhdHRyaWJ1dGUuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgY3Jvc3Nab25lRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBsb2FkIGJhbGFuY2VyIGJsb2NrcyB0cmFmZmljIHRocm91Z2ggdGhlIEludGVybmV0IEdhdGV3YXkgKElHVykuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2UgZm9yIGludGVybmV0LWZhY2luZyBsb2FkIGJhbGFuY2VycyBhbmQgdHJ1ZSBmb3IgaW50ZXJuYWwgbG9hZCBiYWxhbmNlcnNcbiAgICovXG4gIHJlYWRvbmx5IGRlbnlBbGxJZ3dUcmFmZmljPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclYyT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgY2Fub25pY2FsIGhvc3RlZCB6b25lIElEIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgWjJQNzBKN0VYQU1QTEVgXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEROUyBuYW1lIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgbXktbG9hZC1iYWxhbmNlci00MjQ4MzU3MDYudXMtd2VzdC0yLmVsYi5hbWF6b25hd3MuY29tYFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJEbnNOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvYWRCYWxhbmNlckJhc2VWMiB7XG4gIC8qKlxuICAgKiBUaGUgY2Fub25pY2FsIGhvc3RlZCB6b25lIElEIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgWjJQNzBKN0VYQU1QTEVgXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRE5TIG5hbWUgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBteS1sb2FkLWJhbGFuY2VyLTQyNDgzNTcwNi51cy13ZXN0LTIuZWxiLmFtYXpvbmF3cy5jb21gXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckRuc05hbWU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUxvYWRCYWxhbmNlclYyIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCwgSUxvYWRCYWxhbmNlckJhc2VWMiB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclYyT3V0cHV0czogTG9hZEJhbGFuY2VyVjJPdXRwdXRzO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGxvb2tpbmcgdXAgbG9hZCBiYWxhbmNlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTG9hZEJhbGFuY2VyTG9va3VwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGaW5kIGJ5IGxvYWQgYmFsYW5jZXIncyBBUk5cbiAgICogQGRlZmF1bHQgLSBkb2VzIG5vdCBzZWFyY2ggYnkgbG9hZCBiYWxhbmNlciBhcm5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckFybj86IHN0cmluZztcblxuICAvKipcbiAgICogTWF0Y2ggbG9hZCBiYWxhbmNlciB0YWdzLlxuICAgKiBAZGVmYXVsdCAtIGRvZXMgbm90IG1hdGNoIGxvYWQgYmFsYW5jZXJzIGJ5IHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHF1ZXJ5IGNvbnRleHQgcHJvdmlkZXJcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclF1ZXJ5Q29udGV4dFByb3ZpZGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBVc2VyJ3MgbG9va3VwIG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJPcHRpb25zOiBCYXNlTG9hZEJhbGFuY2VyTG9va3VwT3B0aW9ucztcblxuICAvKipcbiAgICogVHlwZSBvZiBsb2FkIGJhbGFuY2VyXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJUeXBlOiBMb2FkQmFsYW5jZXJUeXBlO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGJvdGggQXBwbGljYXRpb24gYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VMb2FkQmFsYW5jZXIgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIHtcbiAgLy8gLyoqXG4gIC8vICAqIFF1ZXJpZXMgdGhlIGxvYWQgYmFsYW5jZXIgY29udGV4dCBwcm92aWRlciBmb3IgbG9hZCBiYWxhbmNlciBpbmZvLlxuICAvLyAgKiBAaW50ZXJuYWxcbiAgLy8gICovXG4gIC8vIHByb3RlY3RlZCBzdGF0aWMgX3F1ZXJ5Q29udGV4dFByb3ZpZGVyKFxuICAvLyAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIC8vICAgb3B0aW9uczogTG9hZEJhbGFuY2VyUXVlcnlDb250ZXh0UHJvdmlkZXJPcHRpb25zLFxuICAvLyApIHtcbiAgLy8gICBpZiAoXG4gIC8vICAgICBUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9ucy51c2VyT3B0aW9ucy5sb2FkQmFsYW5jZXJBcm4pIHx8XG4gIC8vICAgICBPYmplY3QudmFsdWVzKG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyVGFncyA/PyB7fSkuc29tZShcbiAgLy8gICAgICAgVG9rZW4uaXNVbnJlc29sdmVkLFxuICAvLyAgICAgKVxuICAvLyAgICkge1xuICAvLyAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAvLyAgICAgICBcIkFsbCBhcmd1bWVudHMgdG8gbG9vayB1cCBhIGxvYWQgYmFsYW5jZXIgbXVzdCBiZSBjb25jcmV0ZSAobm8gVG9rZW5zKVwiLFxuICAvLyAgICAgKTtcbiAgLy8gICB9XG5cbiAgLy8gICBsZXQgY3hzY2hlbWFUYWdzOiBjeHNjaGVtYS5UYWdbXSB8IHVuZGVmaW5lZDtcbiAgLy8gICBpZiAob3B0aW9ucy51c2VyT3B0aW9ucy5sb2FkQmFsYW5jZXJUYWdzKSB7XG4gIC8vICAgICBjeHNjaGVtYVRhZ3MgPSBtYXBUYWdNYXBUb0N4c2NoZW1hKG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyVGFncyk7XG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgcHJvcHM6IGN4YXBpLkxvYWRCYWxhbmNlckNvbnRleHRSZXNwb25zZSA9IENvbnRleHRQcm92aWRlci5nZXRWYWx1ZShcbiAgLy8gICAgIHNjb3BlLFxuICAvLyAgICAge1xuICAvLyAgICAgICBwcm92aWRlcjogY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLkxPQURfQkFMQU5DRVJfUFJPVklERVIsXG4gIC8vICAgICAgIHByb3BzOiB7XG4gIC8vICAgICAgICAgbG9hZEJhbGFuY2VyQXJuOiBvcHRpb25zLnVzZXJPcHRpb25zLmxvYWRCYWxhbmNlckFybixcbiAgLy8gICAgICAgICBsb2FkQmFsYW5jZXJUYWdzOiBjeHNjaGVtYVRhZ3MsXG4gIC8vICAgICAgICAgbG9hZEJhbGFuY2VyVHlwZTogb3B0aW9ucy5sb2FkQmFsYW5jZXJUeXBlLFxuICAvLyAgICAgICB9IGFzIGN4c2NoZW1hLkxvYWRCYWxhbmNlckNvbnRleHRRdWVyeSxcbiAgLy8gICAgICAgZHVtbXlWYWx1ZToge1xuICAvLyAgICAgICAgIGlwQWRkcmVzc1R5cGU6IGN4YXBpLkxvYWRCYWxhbmNlcklwQWRkcmVzc1R5cGUuRFVBTF9TVEFDSyxcbiAgLy8gICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvbm8tbGl0ZXJhbC1wYXJ0aXRpb25cbiAgLy8gICAgICAgICBsb2FkQmFsYW5jZXJBcm46IGBhcm46YXdzOmVsYXN0aWNsb2FkYmFsYW5jaW5nOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6bG9hZGJhbGFuY2VyLyR7b3B0aW9ucy5sb2FkQmFsYW5jZXJUeXBlfS9teS1sb2FkLWJhbGFuY2VyLzUwZGM2YzQ5NWMwYzkxODhgLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogXCJaM0RaWEUwRVhBTVBMRVwiLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlckRuc05hbWU6XG4gIC8vICAgICAgICAgICBcIm15LWxvYWQtYmFsYW5jZXItMTIzNDU2Nzg5MC51cy13ZXN0LTIuZWxiLmFtYXpvbmF3cy5jb21cIixcbiAgLy8gICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiBbXCJzZy0xMjM0XCJdLFxuICAvLyAgICAgICAgIHZwY0lkOiBcInZwYy0xMjM0NVwiLFxuICAvLyAgICAgICB9IGFzIGN4YXBpLkxvYWRCYWxhbmNlckNvbnRleHRSZXNwb25zZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgKS52YWx1ZTtcblxuICAvLyAgIHJldHVybiBwcm9wcztcbiAgLy8gfVxuXG4gIHB1YmxpYyBnZXQgbG9hZEJhbGFuY2VyVjJPdXRwdXRzKCk6IExvYWRCYWxhbmNlclYyT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogdGhpcy5sb2FkQmFsYW5jZXJDYW5vbmljYWxIb3N0ZWRab25lSWQsXG4gICAgICBsb2FkQmFsYW5jZXJEbnNOYW1lOiB0aGlzLmxvYWRCYWxhbmNlckRuc05hbWUsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZEJhbGFuY2VyVjJPdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjYW5vbmljYWwgaG9zdGVkIHpvbmUgSUQgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBaMlA3MEo3RVhBTVBMRWBcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgRE5TIG5hbWUgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBteS1sb2FkLWJhbGFuY2VyLTQyNDgzNTcwNi51cy13ZXN0LTIuZWxiLmFtYXpvbmF3cy5jb21gXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJEbnNOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIG5hbWUgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBhcHAvbXktbG9hZC1iYWxhbmNlci81MGRjNmM0OTVjMGM5MTg4YFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyRnVsbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBteS1sb2FkLWJhbGFuY2VyYFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgYXJuOmF3czplbGFzdGljbG9hZGJhbGFuY2luZzp1cy13ZXN0LTI6MTIzNDU2Nzg5MDEyOmxvYWRiYWxhbmNlci9hcHAvbXktaW50ZXJuYWwtbG9hZC1iYWxhbmNlci81MGRjNmM0OTVjMGM5MTg4YFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3Vwczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhpcyBsb2FkIGJhbGFuY2VyIGhhcyBiZWVuIGNyZWF0ZWQgaW4uXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgaXMgYWx3YXlzIGRlZmluZWQgKG5vdCBgbnVsbGAgb3IgYHVuZGVmaW5lZGApIGZvciBzdWItY2xhc3NlcyBvZiBgQmFzZUxvYWRCYWxhbmNlcmAuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgc2V0IG9uIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVzID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgcGh5c2ljYWxOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGJhc2VQcm9wczogQmFzZUxvYWRCYWxhbmNlclByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczogdGZMb2FkQmFsYW5jZXIuTGJDb25maWcsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgYmFzZVByb3BzKTtcbiAgICB0aGlzLnBoeXNpY2FsTmFtZSA9XG4gICAgICBiYXNlUHJvcHMubG9hZEJhbGFuY2VyTmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGludGVybmV0RmFjaW5nID0gaWZVbmRlZmluZWQoYmFzZVByb3BzLmludGVybmV0RmFjaW5nLCBmYWxzZSk7XG5cbiAgICBjb25zdCB2cGNTdWJuZXRzID0gaWZVbmRlZmluZWQoXG4gICAgICBiYXNlUHJvcHMudnBjU3VibmV0cyxcbiAgICAgIGludGVybmV0RmFjaW5nID8geyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfSA6IHt9LFxuICAgICk7XG4gICAgY29uc3QgeyBzdWJuZXRJZHMsIGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgfSA9XG4gICAgICBiYXNlUHJvcHMudnBjLnNlbGVjdFN1Ym5ldHModnBjU3VibmV0cyk7XG5cbiAgICB0aGlzLnZwYyA9IGJhc2VQcm9wcy52cGM7XG5cbiAgICBpZiAoXG4gICAgICBhZGRpdGlvbmFsUHJvcHMuaXBBZGRyZXNzVHlwZSA9PT1cbiAgICAgICAgSXBBZGRyZXNzVHlwZS5EVUFMX1NUQUNLX1dJVEhPVVRfUFVCTElDX0lQVjQgJiZcbiAgICAgIGFkZGl0aW9uYWxQcm9wcy5sb2FkQmFsYW5jZXJUeXBlICE9PSBMb2FkQmFsYW5jZXJUeXBlLkFQUExJQ0FUSU9OXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAnaXBBZGRyZXNzVHlwZScgRFVBTF9TVEFDS19XSVRIT1VUX1BVQkxJQ19JUFY0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyLCBnb3QgJHthZGRpdGlvbmFsUHJvcHMubG9hZEJhbGFuY2VyVHlwZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyB0ZkxvYWRCYWxhbmNlci5MYih0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgc3VibmV0czogc3VibmV0SWRzLFxuICAgICAgaW50ZXJuYWw6ICFpbnRlcm5ldEZhY2luZywgLy8gQVdTIENESyBcIlNjaGVtZVwiXG4gICAgICAvLyBSZXZlcnNlIENGTiBMb2FkQmFsYW5jZXJBdHRyaWJ1dGVzIHRvIFRlcnJhZm9ybSBSZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1wcm92aWRlci1hd3MvYmxvYi92NS44OC4wL2ludGVybmFsL3NlcnZpY2UvZWxidjIvbG9hZF9iYWxhbmNlci5nbyNMNzE4XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1sb2FkYmFsYW5jZXJhdHRyaWJ1dGUuaHRtbFxuICAgICAgY2xpZW50S2VlcEFsaXZlOiB0aGlzLmxhenlOdW1iZXJBdHRyKEF0dHJpYnV0ZS5jbGllbnRLZWVwQWxpdmVTZWNvbmRzKSxcbiAgICAgIC8vIGN1c3RvbWVyT3duZWRJcHY0UG9vbCBbQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMgb24gT3V0cG9zdHNdXG4gICAgICBkZXN5bmNNaXRpZ2F0aW9uTW9kZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQRGVzeW5jTWl0aWdhdGlvbk1vZGUsXG4gICAgICApLFxuICAgICAgZG5zUmVjb3JkQ2xpZW50Um91dGluZ1BvbGljeTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLmROU1JlY29yZENsaWVudFJvdXRpbmdQb2xpY3ksXG4gICAgICApLFxuICAgICAgZHJvcEludmFsaWRIZWFkZXJGaWVsZHM6IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBEcm9wSW52YWxpZEhlYWRlckZpZWxkc0VuYWJsZWQsXG4gICAgICApLFxuICAgICAgZW5hYmxlQ3Jvc3Nab25lTG9hZEJhbGFuY2luZzogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5sb2FkQmFsYW5jaW5nQ3Jvc3Nab25lRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBlbmFibGVEZWxldGlvblByb3RlY3Rpb246IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUuZGVsZXRpb25Qcm90ZWN0aW9uRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBlbmFibGVIdHRwMjogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLnJvdXRpbmdIVFRQMkVuYWJsZWQpLFxuICAgICAgZW5hYmxlVGxzVmVyc2lvbkFuZENpcGhlclN1aXRlSGVhZGVyczogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFhBbXpuVExTVmVyc2lvbkFuZENpcGhlclN1aXRlRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBlbmFibGVXYWZGYWlsT3BlbjogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLndBRkZhaWxPcGVuRW5hYmxlZCksXG4gICAgICBlbmFibGVYZmZDbGllbnRQb3J0OiB0aGlzLmxhenlCb29sQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQWEZGQ2xpZW50UG9ydEVuYWJsZWQsXG4gICAgICApLFxuICAgICAgZW5hYmxlWm9uYWxTaGlmdDogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLnpvbmFsU2hpZnRDb25maWdFbmFibGVkKSxcbiAgICAgIC8vIGVuZm9yY2VTZWN1cml0eUdyb3VwSW5ib3VuZFJ1bGVzT25Qcml2YXRlTGlua1RyYWZmaWMsXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXIuaHRtbCNjZm4tZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXItZW5mb3JjZXNlY3VyaXR5Z3JvdXBpbmJvdW5kcnVsZXNvbnByaXZhdGVsaW5rdHJhZmZpY1xuICAgICAgaWRsZVRpbWVvdXQ6IHRoaXMubGF6eU51bWJlckF0dHIoQXR0cmlidXRlLmlkbGVUaW1lb3V0VGltZW91dFNlY29uZHMpLFxuICAgICAgLy8gaXBBZGRyZXNzVHlwZVxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbG9hZGJhbGFuY2VyLmh0bWwjY2ZuLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbG9hZGJhbGFuY2VyLWlwYWRkcmVzc3R5cGVcbiAgICAgIHByZXNlcnZlSG9zdEhlYWRlcjogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFByZXNlcnZlSG9zdEhlYWRlckVuYWJsZWQsXG4gICAgICApLFxuICAgICAgeGZmSGVhZGVyUHJvY2Vzc2luZ01vZGU6IHRoaXMubGF6eVN0cmluZ0F0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUFhGRkhlYWRlclByb2Nlc3NpbmdNb2RlLFxuICAgICAgKSxcbiAgICAgIC8vIC8vIHRoaXMgcmVzdWx0cyBpbiBlbXB0eSBgYWNjZXNzX2xvZ3M6IHt9YCB3aGljaCBpcyBub3QgdmFsaWQgKGJ1Y2tldCBpcyByZXF1aXJlZClcbiAgICAgIC8vIGFjY2Vzc0xvZ3M6IHtcbiAgICAgIC8vICAgZW5hYmxlZDogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLmFjY2Vzc0xvZ3NTM0VuYWJsZWQpLFxuICAgICAgLy8gICBidWNrZXQ6IHRoaXMubGF6eVN0cmluZ0F0dHIoQXR0cmlidXRlLmFjY2Vzc0xvZ3NTM0J1Y2tldCksXG4gICAgICAvLyAgIHByZWZpeDogdGhpcy5sYXp5U3RyaW5nQXR0cihBdHRyaWJ1dGUuYWNjZXNzTG9nc1MzUHJlZml4KSxcbiAgICAgIC8vIH0sXG4gICAgICAvLyAvLyB0aGlzIHJlc3VsdHMgaW4gZW1wdHkgYGNvbm5lY3Rpb25fbG9nczoge31gIHdoaWNoIGlzIG5vdCB2YWxpZCAoYnVja2V0IGlzIHJlcXVpcmVkKVxuICAgICAgLy8gY29ubmVjdGlvbkxvZ3M6IHtcbiAgICAgIC8vICAgZW5hYmxlZDogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLmNvbm5lY3Rpb25Mb2dzUzNFbmFibGVkKSxcbiAgICAgIC8vICAgYnVja2V0OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5jb25uZWN0aW9uTG9nc1MzQnVja2V0KSxcbiAgICAgIC8vICAgcHJlZml4OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5jb25uZWN0aW9uTG9nc1MzUHJlZml4KSxcbiAgICAgIC8vIH0sXG4gICAgICAvL3N1Ym5ldE1hcHBpbmdzXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXIuaHRtbCNjZm4tZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXItc3VibmV0bWFwcGluZ3NcbiAgICAgIC4uLmFkZGl0aW9uYWxQcm9wcyxcbiAgICB9KTtcbiAgICBpZiAoaW50ZXJuZXRGYWNpbmcpIHtcbiAgICAgIHJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgIEF0dHJpYnV0ZS5kZWxldGlvblByb3RlY3Rpb25FbmFibGVkLFxuICAgICAgYmFzZVByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbiA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICk7XG5cbiAgICBpZiAoYmFzZVByb3BzLmNyb3NzWm9uZUVuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXG4gICAgICAgIEF0dHJpYnV0ZS5sb2FkQmFsYW5jaW5nQ3Jvc3Nab25lRW5hYmxlZCxcbiAgICAgICAgYmFzZVByb3BzLmNyb3NzWm9uZUVuYWJsZWQgPT09IHRydWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VQcm9wcy5kZW55QWxsSWd3VHJhZmZpYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoYWRkaXRpb25hbFByb3BzLmlwQWRkcmVzc1R5cGUgPT09IElwQWRkcmVzc1R5cGUuRFVBTF9TVEFDSykge1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgICAgICBBdHRyaWJ1dGUuaVB2NkRlbnlBbGxJR1dUcmFmZmljLFxuICAgICAgICAgIGJhc2VQcm9wcy5kZW55QWxsSWd3VHJhZmZpYy50b1N0cmluZygpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGAnZGVueUFsbElnd1RyYWZmaWMnIG1heSBvbmx5IGJlIHNldCBvbiBsb2FkIGJhbGFuY2VycyB3aXRoICR7SXBBZGRyZXNzVHlwZS5EVUFMX1NUQUNLfSBhZGRyZXNzaW5nLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkQmFsYW5jZXJDYW5vbmljYWxIb3N0ZWRab25lSWQgPSByZXNvdXJjZS56b25lSWQ7XG4gICAgdGhpcy5sb2FkQmFsYW5jZXJEbnNOYW1lID0gcmVzb3VyY2UuZG5zTmFtZTtcbiAgICB0aGlzLmxvYWRCYWxhbmNlckZ1bGxOYW1lID0gdGhpcy5zdGFjay5zcGxpdEFybihcbiAgICAgIHJlc291cmNlLmFybixcbiAgICAgIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICkucmVzb3VyY2U7XG4gICAgdGhpcy5sb2FkQmFsYW5jZXJOYW1lID0gcmVzb3VyY2UubmFtZTtcbiAgICB0aGlzLmxvYWRCYWxhbmNlckFybiA9IHJlc291cmNlLmFybjtcbiAgICB0aGlzLmxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXBzID0gcmVzb3VyY2Uuc2VjdXJpdHlHcm91cHM7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7IHZhbGlkYXRlOiB0aGlzLnZhbGlkYXRlTG9hZEJhbGFuY2VyLmJpbmQodGhpcykgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGFjY2VzcyBsb2dnaW5nIGZvciB0aGlzIGxvYWQgYmFsYW5jZXIuXG4gICAqXG4gICAqIEEgcmVnaW9uIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBzdGFjayBjb250YWluaW5nIHRoZSBsb2FkIGJhbGFuY2VyOyB5b3UgY2Fubm90IGVuYWJsZSBsb2dnaW5nIG9uXG4gICAqIGVudmlyb25tZW50LWFnbm9zdGljIHN0YWNrcy4gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvbGF0ZXN0L2d1aWRlL2Vudmlyb25tZW50cy5odG1sXG4gICAqL1xuICBwdWJsaWMgbG9nQWNjZXNzTG9ncyhidWNrZXQ6IHMzLklCdWNrZXQsIHByZWZpeD86IHN0cmluZykge1xuICAgIC8vIHByZWZpeCA9IHByZWZpeDsgLy8gb3B0aW9uYWwgaW4gVEYuLi4gfHwgXCJcIjtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZShcImFjY2Vzc19sb2dzLnMzLmVuYWJsZWRcIiwgXCJ0cnVlXCIpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWNjZXNzX2xvZ3MuczMuYnVja2V0XCIsIGJ1Y2tldC5idWNrZXROYW1lLnRvU3RyaW5nKCkpO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWNjZXNzX2xvZ3MuczMucHJlZml4XCIsIHByZWZpeCk7XG5cbiAgICBjb25zdCBsb2dzRGVsaXZlcnlTZXJ2aWNlUHJpbmNpcGFsID0gbmV3IFNlcnZpY2VQcmluY2lwYWwoXG4gICAgICBcImRlbGl2ZXJ5LmxvZ3MuYW1hem9uYXdzLmNvbVwiLFxuICAgICk7XG4gICAgYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wiczM6UHV0T2JqZWN0XCJdLFxuICAgICAgICBwcmluY2lwYWxzOiBbdGhpcy5yZXNvdXJjZVBvbGljeVByaW5jaXBhbCgpXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYnVja2V0LmFybkZvck9iamVjdHMoXG4gICAgICAgICAgICBgJHtwcmVmaXggPyBwcmVmaXggKyBcIi9cIiA6IFwiXCJ9QVdTTG9ncy8ke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLmFjY291bnR9LypgLFxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInMzOlB1dE9iamVjdFwiXSxcbiAgICAgICAgcHJpbmNpcGFsczogW2xvZ3NEZWxpdmVyeVNlcnZpY2VQcmluY2lwYWxdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBidWNrZXQuYXJuRm9yT2JqZWN0cyhcbiAgICAgICAgICAgIGAke3ByZWZpeCA/IHByZWZpeCArIFwiL1wiIDogXCJcIn1BV1NMb2dzLyR7dGhpcy5lbnYuYWNjb3VudH0vKmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgICAgY29uZGl0aW9uOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVzdDogXCJTdHJpbmdFcXVhbHNcIixcbiAgICAgICAgICAgIHZhcmlhYmxlOiBcInMzOngtYW16LWFjbFwiLFxuICAgICAgICAgICAgdmFsdWVzOiBbXCJidWNrZXQtb3duZXItZnVsbC1jb250cm9sXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGJ1Y2tldC5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInMzOkdldEJ1Y2tldEFjbFwiXSxcbiAgICAgICAgcHJpbmNpcGFsczogW2xvZ3NEZWxpdmVyeVNlcnZpY2VQcmluY2lwYWxdLFxuICAgICAgICByZXNvdXJjZXM6IFtidWNrZXQuYnVja2V0QXJuXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBtYWtlIHN1cmUgdGhlIGJ1Y2tldCdzIHBvbGljeSBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgQUxCIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNjMzKVxuICAgIC8vIGF0IHRoZSBMMSBsZXZlbCB0byBhdm9pZCBjcmVhdGluZyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzI3NTI4XG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMjc5MjgpXG4gICAgY29uc3QgbGIgPSB0aGlzLm5vZGUuZGVmYXVsdENoaWxkIGFzIHRmTG9hZEJhbGFuY2VyLkxiO1xuICAgIGNvbnN0IGJ1Y2tldFBvbGljeSA9IGJ1Y2tldC5wb2xpY3k/Lm5vZGUuZGVmYXVsdENoaWxkO1xuICAgIGlmIChcbiAgICAgIGxiICYmXG4gICAgICBidWNrZXRQb2xpY3kgJiZcbiAgICAgIFRlcnJhZm9ybVJlc291cmNlLmlzVGVycmFmb3JtUmVzb3VyY2UobGIpICYmXG4gICAgICBUZXJyYWZvcm1SZXNvdXJjZS5pc1RlcnJhZm9ybVJlc291cmNlKGJ1Y2tldFBvbGljeSlcbiAgICApIHtcbiAgICAgIGxiLm5vZGUuYWRkRGVwZW5kZW5jeShidWNrZXRQb2xpY3kpO1xuICAgIH1cbiAgICAvLyBUT0RPOiBTaG91bGQgcHV0QWNjZXNzTG9ncyBiZSBoYW5kbGVkIGFzIHBhcnQgb2YgcHJlcGFyZVN0YWNrIChpbiB0b1RlcnJhZm9ybSgpIGluc3RlYWQpP1xuICAgIC8vIG9ubHkgaWYgbGIuYWNjZXNzTG9ncy5pbnRlcm5hbFZhbHVlICE9PSB1bmRlZmluZWQ/IChvciBiYXNlZCBvbiB0aGlzLmF0dHJpYnV0ZXM/KVxuICAgIGxiLnB1dEFjY2Vzc0xvZ3Moe1xuICAgICAgZW5hYmxlZDogdGhpcy5sYXp5Qm9vbEF0dHIoQXR0cmlidXRlLmFjY2Vzc0xvZ3NTM0VuYWJsZWQpLFxuICAgICAgYnVja2V0OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5hY2Nlc3NMb2dzUzNCdWNrZXQpLFxuICAgICAgcHJlZml4OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5hY2Nlc3NMb2dzUzNQcmVmaXgpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUgb24gdGhlIGxvYWQgYmFsYW5jZXJcbiAgICpcbiAgICogVXNlIHRoZSBkZWRpY2F0ZWQgbG9nQWNjZXNzTG9ncygpIG1ldGhvZCBpbnRlYWQgb2Ygc2V0QXR0cmlidXRlIGlmIHlvdSB3YW50IHRvIHNldHVwIGFjY2VzcyBsb2dnaW5nLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vYXBwbGljYXRpb24tbG9hZC1iYWxhbmNlcnMuaHRtbCNsb2FkLWJhbGFuY2VyLWF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzZXRBdHRyaWJ1dGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgbG9hZCBiYWxhbmNlclxuICAgKi9cbiAgcHVibGljIHJlbW92ZUF0dHJpYnV0ZShrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKGtleSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsYXp5U3RyaW5nQXR0cihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBMYXp5LnN0cmluZ1ZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IGxvb2t1cFN0cmluZ0F0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZXMsIGtleSksXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGxhenlCb29sQXR0cihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBMYXp5LmFueVZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IGxvb2t1cEJvb2xBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVzLCBrZXkpLFxuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBsYXp5TnVtYmVyQXR0cihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBMYXp5Lm51bWJlclZhbHVlKHtcbiAgICAgIHByb2R1Y2U6ICgpID0+IGxvb2t1cE51bWJlckF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZXMsIGtleSksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VQb2xpY3lQcmluY2lwYWwoKTogaWFtLklQcmluY2lwYWwge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHRoaXMuc3RhY2sucmVnaW9uO1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVnaW9uIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBFTEJ2MiBhY2Nlc3MgbG9nZ2luZ1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50ID0gUmVnaW9uSW5mby5nZXQocmVnaW9uKS5lbGJ2MkFjY291bnQ7XG4gICAgaWYgKCFhY2NvdW50KSB7XG4gICAgICAvLyBOZXcgUmVnaW9ucyB1c2UgYSBzZXJ2aWNlIHByaW5jaXBhbFxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9jbGFzc2ljL2VuYWJsZS1hY2Nlc3MtbG9ncy5odG1sI2F0dGFjaC1idWNrZXQtcG9saWN5XG4gICAgICByZXR1cm4gbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFxuICAgICAgICBcImxvZ2RlbGl2ZXJ5LmVsYXN0aWNsb2FkYmFsYW5jaW5nLmFtYXpvbmF3cy5jb21cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBpYW0uQWNjb3VudFByaW5jaXBhbChhY2NvdW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUxvYWRCYWxhbmNlcigpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1uYW1lXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyTmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIGlmIChcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQobG9hZEJhbGFuY2VyTmFtZSkgJiZcbiAgICAgIGxvYWRCYWxhbmNlck5hbWUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgaWYgKGxvYWRCYWxhbmNlck5hbWUubGVuZ3RoID4gMzIpIHtcbiAgICAgICAgcmV0LnB1c2goXG4gICAgICAgICAgYExvYWQgYmFsYW5jZXIgbmFtZTogXCIke2xvYWRCYWxhbmNlck5hbWV9XCIgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDMyIGNoYXJhY3RlcnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2FkQmFsYW5jZXJOYW1lLnN0YXJ0c1dpdGgoXCJpbnRlcm5hbC1cIikpIHtcbiAgICAgICAgcmV0LnB1c2goXG4gICAgICAgICAgYExvYWQgYmFsYW5jZXIgbmFtZTogXCIke2xvYWRCYWxhbmNlck5hbWV9XCIgbXVzdCBub3QgYmVnaW4gd2l0aCBcImludGVybmFsLVwiLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAobG9hZEJhbGFuY2VyTmFtZS5zdGFydHNXaXRoKFwiLVwiKSB8fCBsb2FkQmFsYW5jZXJOYW1lLmVuZHNXaXRoKFwiLVwiKSkge1xuICAgICAgICByZXQucHVzaChcbiAgICAgICAgICBgTG9hZCBiYWxhbmNlciBuYW1lOiBcIiR7bG9hZEJhbGFuY2VyTmFtZX1cIiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlswLTlhLXotXSskL2kudGVzdChsb2FkQmFsYW5jZXJOYW1lKSkge1xuICAgICAgICByZXQucHVzaChcbiAgICAgICAgICBgTG9hZCBiYWxhbmNlciBuYW1lOiBcIiR7bG9hZEJhbGFuY2VyTmFtZX1cIiBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBoeXBoZW5zLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIGNsYXNzIHRvIGluc3RhbnRpYXRlIGFuIElMb2FkQmFsYW5jZXJWMlxuICovXG5leHBvcnQgY2xhc3MgSW1wb3J0ZWRMb2FkQmFsYW5jZXIgaW1wbGVtZW50cyBJTG9hZEJhbGFuY2VyQmFzZVYyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJEbnNOYW1lOiBzdHJpbmcsXG4gICkge31cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { lbTargetGroup as tfTargetGroup } from "@cdktf/provider-aws";
1
+ import { lbTargetGroup as tfTargetGroup } from "@cdktn/provider-aws";
2
2
  import { Construct, DependencyGroup, IConstruct, IDependable } from "constructs";
3
3
  import { IVpc } from "../vpc";
4
4
  import { LbProtocol, TargetType } from "./enums";
@@ -5,8 +5,8 @@ exports.TargetGroupBase = exports.TargetGroupIpAddressType = void 0;
5
5
  exports.loadBalancerNameFromListenerArn = loadBalancerNameFromListenerArn;
6
6
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
7
7
  // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/shared/base-target-group.ts
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 constructs_1 = require("constructs");
11
11
  const enums_1 = require("./enums");
12
12
  const util_1 = require("./util");
@@ -77,8 +77,8 @@ class TargetGroupBase extends aws_construct_1.AwsConstructBase {
77
77
  this.targetType = baseProps.targetType;
78
78
  this.resource = new provider_aws_1.lbTargetGroup.LbTargetGroup(this, "Resource", {
79
79
  name: targetGroupName,
80
- targetType: cdktf_1.Lazy.stringValue({ produce: () => this.targetType }),
81
- vpcId: cdktf_1.Lazy.stringValue({
80
+ targetType: cdktn_1.Lazy.stringValue({ produce: () => this.targetType }),
81
+ vpcId: cdktn_1.Lazy.stringValue({
82
82
  produce: () => this.vpc && this.targetType !== enums_1.TargetType.LAMBDA
83
83
  ? this.vpc.vpcId
84
84
  : undefined,
@@ -101,7 +101,7 @@ class TargetGroupBase extends aws_construct_1.AwsConstructBase {
101
101
  preserveClientIp: this.lazyStringAttr(util_1.TargetGroupAttribute.preserveClientIPEnabled),
102
102
  proxyProtocolV2: this.lazyBoolAttr(util_1.TargetGroupAttribute.proxyProtocolV2Enabled),
103
103
  lambdaMultiValueHeadersEnabled: this.lazyBoolAttr(util_1.TargetGroupAttribute.lambdaMultiValueHeadersEnabled),
104
- targetHealthState: cdktf_1.Lazy.anyValue({
104
+ targetHealthState: cdktn_1.Lazy.anyValue({
105
105
  produce: () => {
106
106
  const result = new Array();
107
107
  const unhealthyDrainingInterval = (0, util_1.lookupNumberAttribute)(this.attributes, util_1.TargetGroupAttribute.targetHealthStateUnhealthyDrainingIntervalSeconds);
@@ -116,7 +116,7 @@ class TargetGroupBase extends aws_construct_1.AwsConstructBase {
116
116
  return result;
117
117
  },
118
118
  }, { omitEmptyArray: true }),
119
- targetFailover: cdktf_1.Lazy.anyValue({
119
+ targetFailover: cdktn_1.Lazy.anyValue({
120
120
  produce: () => {
121
121
  const result = new Array();
122
122
  const onUnhealthy = (0, util_1.lookupStringAttribute)(this.attributes, util_1.TargetGroupAttribute.targetFailoverOnUnhealthy);
@@ -193,14 +193,14 @@ class TargetGroupBase extends aws_construct_1.AwsConstructBase {
193
193
  const ret = new Array();
194
194
  if (this.targetType === undefined && this.targetsJson.length === 0) {
195
195
  // "@aws-cdk/aws-elbv2:targetGroupSpecifyTargetTypeForEmptyTargetGroup",
196
- cdktf_1.Annotations.of(this).addWarning("When creating an empty TargetGroup, you should specify a 'targetType' (this warning may become an error in the future).");
196
+ cdktn_1.Annotations.of(this).addWarning("When creating an empty TargetGroup, you should specify a 'targetType' (this warning may become an error in the future).");
197
197
  }
198
198
  if (this.targetType !== enums_1.TargetType.LAMBDA && this.vpc === undefined) {
199
199
  ret.push("'vpc' is required for a non-Lambda TargetGroup");
200
200
  }
201
201
  // https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-name
202
202
  const targetGroupName = this.resource.nameInput;
203
- if (!cdktf_1.Token.isUnresolved(targetGroupName) && targetGroupName !== undefined) {
203
+ if (!cdktn_1.Token.isUnresolved(targetGroupName) && targetGroupName !== undefined) {
204
204
  if (targetGroupName.length > 32) {
205
205
  ret.push(`Target group name: "${targetGroupName}" can have a maximum of 32 characters.`);
206
206
  }
@@ -227,17 +227,17 @@ class TargetGroupBase extends aws_construct_1.AwsConstructBase {
227
227
  return ret;
228
228
  }
229
229
  lazyStringAttr(key) {
230
- return cdktf_1.Lazy.stringValue({
230
+ return cdktn_1.Lazy.stringValue({
231
231
  produce: () => this.attributes[key],
232
232
  });
233
233
  }
234
234
  lazyBoolAttr(key) {
235
- return cdktf_1.Lazy.anyValue({
235
+ return cdktn_1.Lazy.anyValue({
236
236
  produce: () => (0, util_1.lookupBoolAttribute)(this.attributes, key),
237
237
  });
238
238
  }
239
239
  lazyNumberAttr(key) {
240
- return cdktf_1.Lazy.numberValue({
240
+ return cdktn_1.Lazy.numberValue({
241
241
  produce: () => (0, util_1.lookupNumberAttribute)(this.attributes, key),
242
242
  });
243
243
  }
@@ -345,7 +345,7 @@ class TargetGroupBase extends aws_construct_1.AwsConstructBase {
345
345
  }
346
346
  exports.TargetGroupBase = TargetGroupBase;
347
347
  _a = JSII_RTTI_SYMBOL_1;
348
- TargetGroupBase[_a] = { fqn: "terraconstructs.aws.compute.TargetGroupBase", version: "0.2.4" };
348
+ TargetGroupBase[_a] = { fqn: "terraconstructs.aws.compute.TargetGroupBase", version: "0.2.6" };
349
349
  /**
350
350
  * Extract the full load balancer name (used for metrics) from the listener ARN:
351
351
  *
@@ -358,7 +358,7 @@ TargetGroupBase[_a] = { fqn: "terraconstructs.aws.compute.TargetGroupBase", vers
358
358
  * app/my-load-balancer/50dc6c495c0c9188
359
359
  */
360
360
  function loadBalancerNameFromListenerArn(listenerArn) {
361
- const arnParts = cdktf_1.Fn.split("/", listenerArn);
362
- return `${cdktf_1.Fn.element(arnParts, 1)}/${cdktf_1.Fn.element(arnParts, 2)}/${cdktf_1.Fn.element(arnParts, 3)}`;
361
+ const arnParts = cdktn_1.Fn.split("/", listenerArn);
362
+ return `${cdktn_1.Fn.element(arnParts, 1)}/${cdktn_1.Fn.element(arnParts, 2)}/${cdktn_1.Fn.element(arnParts, 3)}`;
363
363
  }
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YXJnZXQtZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvbGItc2hhcmVkL2Jhc2UtdGFyZ2V0LWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUE4MUJBLDBFQUdDOztBQWoyQkQsK0hBQStIO0FBRS9ILHNEQUc2QjtBQUM3QixpQ0FBcUQ7QUFDckQsMkNBS29CO0FBRXBCLG1DQUFpRDtBQUVqRCxpQ0FNZ0I7QUFFaEIsbUNBQXNDO0FBQ3RDLHVEQUk2QjtBQUU3Qjs7R0FFRztBQUNILElBQVksd0JBVVg7QUFWRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHlDQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILHlDQUFhLENBQUE7QUFDZixDQUFDLEVBVlcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFVbkM7QUFrTUQ7O0dBRUc7QUFDSCxNQUFzQixlQUNwQixTQUFRLGdDQUFnQjtJQUd4QixJQUFXLGtCQUFrQjtRQUMzQixPQUFPO1lBQ0wsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDN0MsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLDJCQUEyQixFQUFFLElBQUksQ0FBQywyQkFBMkI7WUFDN0QseUJBQXlCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBNEZEOztPQUVHO0lBQ0gsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsU0FBK0IsRUFDL0IsZUFBa0Q7UUFFbEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUF2RDlCOztXQUVHO1FBQ2dCLHFDQUFnQyxHQUFHLElBQUksNEJBQWUsRUFBRSxDQUFD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QixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7Z0JBQzVELGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUc7Z0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7Z0JBQ3RDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO2dCQUN0RCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQy9CLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O0FBdmhCSCwwQ0F3aEJDOzs7QUEwRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLCtCQUErQixDQUFDLFdBQW1CO0lBQ2pFLE1BQU0sUUFBUSxHQUFHLFVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxVQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxVQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxVQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi9saWIvc2hhcmVkL2Jhc2UtdGFyZ2V0LWdyb3VwLnRzXG5cbmltcG9ydCB7XG4gIGxiVGFyZ2V0R3JvdXAgYXMgdGZUYXJnZXRHcm91cCxcbiAgbGJUYXJnZXRHcm91cEF0dGFjaG1lbnQgYXMgdGZUYXJnZXRHcm91cEF0dGFjaG1lbnQsXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBMYXp5LCBUb2tlbiwgRm4sIEFubm90YXRpb25zIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3QsXG4gIERlcGVuZGVuY3lHcm91cCxcbiAgSUNvbnN0cnVjdCxcbiAgSURlcGVuZGFibGUsXG59IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcIi4uL3ZwY1wiO1xuaW1wb3J0IHsgTGJQcm90b2NvbCwgVGFyZ2V0VHlwZSB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBMYlRhcmdldEdyb3VwQXR0YWNobWVudENvbmZpZyB9IGZyb20gXCIuL2xiLXRhcmdldC1ncm91cC1hdHRhY2htZW50LWNvbmZpZy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZXMsXG4gIGxvb2t1cFN0cmluZ0F0dHJpYnV0ZSxcbiAgbG9va3VwQm9vbEF0dHJpYnV0ZSxcbiAgbG9va3VwTnVtYmVyQXR0cmlidXRlLFxuICBUYXJnZXRHcm91cEF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUsXG59IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQgfSBmcm9tIFwiLi4vLi4vYXJuXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgLy8gSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uLy4uL2F3cy1jb25zdHJ1Y3RcIjtcblxuLyoqXG4gKiBUaGUgSVAgYWRkcmVzcyB0eXBlIG9mIHRhcmdldHMgcmVnaXN0ZXJlZCB3aXRoIGEgdGFyZ2V0IGdyb3VwXG4gKi9cbmV4cG9ydCBlbnVtIFRhcmdldEdyb3VwSXBBZGRyZXNzVHlwZSB7XG4gIC8qKlxuICAgKiBJUHY0IGFkZHJlc3Nlc1xuICAgKi9cbiAgSVBWNCA9IFwiaXB2NFwiLFxuXG4gIC8qKlxuICAgKiBJUHY2IGFkZHJlc3Nlc1xuICAgKi9cbiAgSVBWNiA9IFwiaXB2NlwiLFxufVxuXG4vKipcbiAqIEJhc2ljIHByb3BlcnRpZXMgb2YgYm90aCBBcHBsaWNhdGlvbiBhbmQgTmV0d29yayBUYXJnZXQgR3JvdXBzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVRhcmdldEdyb3VwUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgcGVyIHJlZ2lvbiBwZXIgYWNjb3VudCwgY2FuIGhhdmUgYSBtYXhpbXVtIG9mXG4gICAqIDMyIGNoYXJhY3RlcnMsIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yIGh5cGhlbnMsIGFuZFxuICAgKiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBjbG91ZCAoVlBDKS5cbiAgICpcbiAgICogb25seSBpZiBgVGFyZ2V0VHlwZWAgaXMgYElwYCBvciBgSW5zdGFuY2VJZGBcbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSBmb3IgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0byB3YWl0IGJlZm9yZSBkZXJlZ2lzdGVyaW5nIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBUaGUgcmFuZ2UgaXMgMC0zNjAwIHNlY29uZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IDMwMFxuICAgKi9cbiAgcmVhZG9ubHkgZGVyZWdpc3RyYXRpb25EZWxheT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIZWFsdGggY2hlY2sgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoaXMgY29uZmlndXJhdGlvbiB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItdGFyZ2V0Z3JvdXAuaHRtbCNhd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRncm91cC1wcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBoZWFsdGhDaGVjaz86IEhlYWx0aENoZWNrO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0YXJnZXRzIHJlZ2lzdGVyZWQgdG8gdGhpcyBUYXJnZXRHcm91cCwgZWl0aGVyIElQIG9yIEluc3RhbmNlLlxuICAgKlxuICAgKiBBbGwgdGFyZ2V0cyByZWdpc3RlcmVkIGludG8gdGhlIGdyb3VwIG11c3QgYmUgb2YgdGhpcyB0eXBlLiBJZiB5b3VcbiAgICogcmVnaXN0ZXIgdGFyZ2V0cyB0byB0aGUgVGFyZ2V0R3JvdXAgaW4gdGhlIENESyBhcHAsIHRoZSBUYXJnZXRUeXBlIGlzXG4gICAqIGRldGVybWluZWQgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRUeXBlPzogVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgY3Jvc3Mgem9uZSBsb2FkIGJhbGFuY2luZyBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZSBsb2FkIGJhbGFuY2VyIGNvbmZpZ3VyYXRpb25cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLXRhcmdldGdyb3VwLXRhcmdldGdyb3VwYXR0cmlidXRlLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGNyb3NzWm9uZUVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBJUCBhZGRyZXNzZXMgb2YgdGhlIHRhcmdldHMgcmVnaXN0ZXJlZCB3aXRoIHRoZSB0YXJnZXQgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIEVMQiBkZWZhdWx0cyB0byBJUHY0XG4gICAqL1xuICByZWFkb25seSBpcEFkZHJlc3NUeXBlPzogVGFyZ2V0R3JvdXBJcEFkZHJlc3NUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNvbmZpZ3VyaW5nIGEgaGVhbHRoIGNoZWNrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2sge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgaGVhbHRoIGNoZWNrcyBhcmUgZW5hYmxlZC4gSWYgdGhlIHRhcmdldCB0eXBlIGlzIGxhbWJkYSxcbiAgICogaGVhbHRoIGNoZWNrcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCBidXQgY2FuIGJlIGVuYWJsZWQuIElmIHRoZSB0YXJnZXQgdHlwZVxuICAgKiBpcyBpbnN0YW5jZSBvciBpcCwgaGVhbHRoIGNoZWNrcyBhcmUgYWx3YXlzIGVuYWJsZWQgYW5kIGNhbm5vdCBiZSBkaXNhYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGFwcHJveGltYXRlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gaGVhbHRoIGNoZWNrcyBmb3IgYW4gaW5kaXZpZHVhbCB0YXJnZXQuXG4gICAqIE11c3QgYmUgNSB0byAzMDAgc2Vjb25kc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIDEwIHNlY29uZHMgaWYgcHJvdG9jb2wgaXMgYEdFTkVWRWAsIDM1IHNlY29uZHMgaWYgdGFyZ2V0IHR5cGUgaXMgYGxhbWJkYWAsIGVsc2UgMzAgc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWw/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHBpbmcgcGF0aCBkZXN0aW5hdGlvbiB3aGVyZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHNlbmRzIGhlYWx0aCBjaGVjayByZXF1ZXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgL1xuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvcnQgdGhhdCB0aGUgbG9hZCBiYWxhbmNlciB1c2VzIHdoZW4gcGVyZm9ybWluZyBoZWFsdGggY2hlY2tzIG9uIHRoZSB0YXJnZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAndHJhZmZpYy1wb3J0J1xuICAgKi9cbiAgcmVhZG9ubHkgcG9ydD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHRoZSBsb2FkIGJhbGFuY2VyIHVzZXMgd2hlbiBwZXJmb3JtaW5nIGhlYWx0aCBjaGVja3Mgb24gdGFyZ2V0cy5cbiAgICpcbiAgICogVGhlIFRDUCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgZm9yIGhlYWx0aCBjaGVja3Mgb25seSBpZiB0aGUgcHJvdG9jb2wgb2YgdGhlIHRhcmdldCBncm91cCBpcyBUQ1AsIFRMUywgVURQLCBvciBUQ1BfVURQLlxuICAgKiBUaGUgVExTLCBVRFAsIGFuZCBUQ1BfVURQIHByb3RvY29scyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgaGVhbHRoIGNoZWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBIVFRQIGZvciBBTEJzLCBUQ1AgZm9yIE5MQnNcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogTGJQcm90b2NvbDtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCBkdXJpbmcgd2hpY2ggbm8gcmVzcG9uc2UgZnJvbSBhIHRhcmdldCBtZWFucyBhIGZhaWxlZCBoZWFsdGggY2hlY2suXG4gICAqIE11c3QgYmUgMiB0byAxMjAgc2Vjb25kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA2IHNlY29uZHMgaWYgdGhlIHByb3RvY29sIGlzIEhUVFAsIDUgc2Vjb25kcyBpZiBwcm90b2NvbCBpcyBgR0VORVZFYCwgMzAgc2Vjb25kcyBpZiB0YXJnZXQgdHlwZSBpcyBgbGFtYmRhYCwgMTAgc2Vjb25kcyBmb3IgVENQLCBUTFMsIG9yIEhUVFBTXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaGVhbHRoIGNoZWNrcyBzdWNjZXNzZXMgcmVxdWlyZWQgYmVmb3JlIGNvbnNpZGVyaW5nIGFuIHVuaGVhbHRoeSB0YXJnZXQgaGVhbHRoeS5cbiAgICpcbiAgICogRm9yIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzLCB0aGUgZGVmYXVsdCBpcyA1LiBGb3IgTmV0d29yayBMb2FkIEJhbGFuY2VycywgdGhlIGRlZmF1bHQgaXMgMy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA1IGZvciBBTEJzLCAzIGZvciBOTEJzXG4gICAqL1xuICByZWFkb25seSBoZWFsdGh5VGhyZXNob2xkQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaGVhbHRoIGNoZWNrIGZhaWx1cmVzIHJlcXVpcmVkIGJlZm9yZSBjb25zaWRlcmluZyBhIHRhcmdldCB1bmhlYWx0aHkuXG4gICAqXG4gICAqIEZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycywgdGhlIGRlZmF1bHQgaXMgMi4gRm9yIE5ldHdvcmsgTG9hZFxuICAgKiBCYWxhbmNlcnMsIHRoZSByYW5nZSBpcyBiZXR3ZWVuIDItMTAgYW5kIGNhbiBiZSBzZXQgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDJcbiAgICovXG4gIHJlYWRvbmx5IHVuaGVhbHRoeVRocmVzaG9sZENvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHUlBDIGNvZGUgdG8gdXNlIHdoZW4gY2hlY2tpbmcgZm9yIGEgc3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgdmFsdWVzIGJldHdlZW4gMCBhbmQgOTkuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSB2YWx1ZXNcbiAgICogKGZvciBleGFtcGxlLCBcIjAsMVwiKSBvciBhIHJhbmdlIG9mIHZhbHVlcyAoZm9yIGV4YW1wbGUsIFwiMC01XCIpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoeUdycGNDb2Rlcz86IHN0cmluZztcblxuICAvKipcbiAgICogSFRUUCBjb2RlIHRvIHVzZSB3aGVuIGNoZWNraW5nIGZvciBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHRhcmdldC5cbiAgICpcbiAgICogRm9yIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzLCB5b3UgY2FuIHNwZWNpZnkgdmFsdWVzIGJldHdlZW4gMjAwIGFuZFxuICAgKiA0OTksIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAyMDAuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSB2YWx1ZXMgKGZvclxuICAgKiBleGFtcGxlLCBcIjIwMCwyMDJcIikgb3IgYSByYW5nZSBvZiB2YWx1ZXMgKGZvciBleGFtcGxlLCBcIjIwMC0yOTlcIikuXG4gICAqL1xuICByZWFkb25seSBoZWFsdGh5SHR0cENvZGVzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldEdyb3VwT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIHRhcmdldCBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0R3JvdXBBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZ1bGwgbmFtZSBvZiB0aGUgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cEZ1bGxOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk5zIG9mIGxvYWQgYmFsYW5jZXJzIGxvYWQgYmFsYW5jaW5nIHRvIHRoaXMgVGFyZ2V0R3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwTG9hZEJhbGFuY2VyQXJuczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEZ1bGwgbmFtZSBvZiBmaXJzdCBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIFRoaXMgaWRlbnRpZmllciBpcyBlbWl0dGVkIGFzIGEgZGltZW5zaW9ucyBvZiB0aGUgbWV0cmljcyBvZiB0aGlzIHRhcmdldFxuICAgKiBncm91cC5cbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYGFwcC9teS1sb2FkLWJhbGFuY2VyLzEyMzQ1Njc4OWBcbiAgICovXG4gIHJlYWRvbmx5IGZpcnN0TG9hZEJhbGFuY2VyRnVsbE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmUgdGhlIHRhcmdldCBvZiBhIGxvYWQgYmFsYW5jZXJcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRhcmdldEdyb3VwQmFzZVxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJVGFyZ2V0R3JvdXBcbntcbiAgcHVibGljIGdldCB0YXJnZXRHcm91cE91dHB1dHMoKTogVGFyZ2V0R3JvdXBPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0R3JvdXBBcm46IHRoaXMudGFyZ2V0R3JvdXBBcm4sXG4gICAgICB0YXJnZXRHcm91cEZ1bGxOYW1lOiB0aGlzLnRhcmdldEdyb3VwRnVsbE5hbWUsXG4gICAgICB0YXJnZXRHcm91cE5hbWU6IHRoaXMudGFyZ2V0R3JvdXBOYW1lLFxuICAgICAgdGFyZ2V0R3JvdXBMb2FkQmFsYW5jZXJBcm5zOiB0aGlzLnRhcmdldEdyb3VwTG9hZEJhbGFuY2VyQXJucyxcbiAgICAgIGZpcnN0TG9hZEJhbGFuY2VyRnVsbE5hbWU6IHRoaXMuZmlyc3RMb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXRHcm91cE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldEdyb3VwQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIG5hbWUgb2YgdGhlIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldEdyb3VwRnVsbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldEdyb3VwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk5zIG9mIGxvYWQgYmFsYW5jZXJzIGxvYWQgYmFsYW5jaW5nIHRvIHRoaXMgVGFyZ2V0R3JvdXBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRHcm91cExvYWRCYWxhbmNlckFybnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGdWxsIG5hbWUgb2YgZmlyc3QgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBUaGlzIGlkZW50aWZpZXIgaXMgZW1pdHRlZCBhcyBhIGRpbWVuc2lvbnMgb2YgdGhlIG1ldHJpY3Mgb2YgdGhpcyB0YXJnZXRcbiAgICogZ3JvdXAuXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBhcHAvbXktbG9hZC1iYWxhbmNlci8xMjM0NTY3ODlgXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZmlyc3RMb2FkQmFsYW5jZXJGdWxsTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHRva2VuIHJlcHJlc2VudGluZyBhIGxpc3Qgb2YgQVJOcyBvZiB0aGUgbG9hZCBiYWxhbmNlcnMgdGhhdCByb3V0ZSB0cmFmZmljIHRvIHRoaXMgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXJuczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIZWFsdGggY2hlY2sgZm9yIHRoZSBtZW1iZXJzIG9mIHRoaXMgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICBwdWJsaWMgaGVhbHRoQ2hlY2s6IEhlYWx0aENoZWNrO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHBvcnQgY29uZmlndXJlZCBmb3IgbWVtYmVycyBvZiB0aGlzIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRQb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYWJsZSBkZXBlbmRhYmxlIHdpdGggYWxsIHJlc291cmNlcyB0aGF0IGxlYWQgdG8gbG9hZCBiYWxhbmNlciBhdHRhY2htZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXR0YWNoZWREZXBlbmRlbmNpZXMgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlcyBvZiB0aGUgZGlyZWN0bHkgcmVnaXN0ZXJlZCBtZW1iZXJzIG9mIHRoaXMgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICBwcm90ZWN0ZWQgdGFyZ2V0VHlwZT86IFRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgb2YgdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlczogQXR0cmlidXRlcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBUaGUgSlNPTiBvYmplY3RzIHJldHVybmVkIGJ5IHRoZSBkaXJlY3RseSByZWdpc3RlcmVkIG1lbWJlcnMgb2YgdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0c0pzb24gPSBuZXcgQXJyYXk8TGJUYXJnZXRHcm91cEF0dGFjaG1lbnRDb25maWc+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZ3JvdXAgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmVxdWlyZWQgaWYgYWRkaW5nIGluc3RhbmNlcyBpbnN0ZWFkIG9mIExhbWJkYXMgdG8gVGFyZ2V0R3JvdXBcbiAgICovXG4gIHByaXZhdGUgdnBjPzogSVZwYztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHZlcnNpb24gdG8gdXNlXG4gICAqXG4gICAqIE9ubHkgYXBwbGljYWJsZSB3aGVuIHByb3RvY29sIGlzIEhUVFAgb3IgSFRUUFMuIFRoZSBwcm90b2NvbCB2ZXJzaW9uLlxuICAgKlxuICAgKiBTcGVjaWZ5IEdSUEMgdG8gc2VuZCByZXF1ZXN0cyB0byB0YXJnZXRzIHVzaW5nIGdSUEMuXG4gICAqIFNwZWNpZnkgSFRUUDIgdG8gc2VuZCByZXF1ZXN0cyB0byB0YXJnZXRzIHVzaW5nIEhUVFAvMi5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgSFRUUDEsIHdoaWNoIHNlbmRzIHJlcXVlc3RzIHRvIHRhcmdldHMgdXNpbmcgSFRUUC8xLjFcbiAgICpcbiAgICogQGRlZmF1bHQgXCJIVFRQMVwiXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3RvY29sVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBncm91cCByZXNvdXJjZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiB0ZlRhcmdldEdyb3VwLkxiVGFyZ2V0R3JvdXA7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhZGRpdGlvbmFsUHJvcHMgaGVhbHRoQ2hlY2ssIHN0aWNraW5lc3MsIHRhcmdldEdyb3VwSGVhbHRoIGFyZSBjb250cm9sbGVkIGJ5IG1ldGhvZHMgYW5kIGlnbm9yZWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBiYXNlUHJvcHM6IEJhc2VUYXJnZXRHcm91cFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczogdGZUYXJnZXRHcm91cC5MYlRhcmdldEdyb3VwQ29uZmlnLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIGJhc2VQcm9wcyk7XG4gICAgLy8gVE9ETzogTXVzdCBub3QgYmVnaW4gb3IgZW5kIHdpdGggYSBoeXBoZW5cbiAgICBjb25zdCB0YXJnZXRHcm91cE5hbWUgPVxuICAgICAgYmFzZVByb3BzLnRhcmdldEdyb3VwTmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCItXCIsXG4gICAgICAgIG1heExlbmd0aDogMzIsXG4gICAgICB9KTtcblxuICAgIGlmIChiYXNlUHJvcHMuZGVyZWdpc3RyYXRpb25EZWxheSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgICAgQXR0cmlidXRlLmRlcmVnaXN0cmF0aW9uRGVsYXlUaW1lb3V0U2Vjb25kcyxcbiAgICAgICAgYmFzZVByb3BzLmRlcmVnaXN0cmF0aW9uRGVsYXkudG9TZWNvbmRzKCkudG9TdHJpbmcoKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VQcm9wcy5jcm9zc1pvbmVFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICBBdHRyaWJ1dGUubG9hZEJhbGFuY2luZ0Nyb3NzWm9uZUVuYWJsZWQsXG4gICAgICAgIGJhc2VQcm9wcy5jcm9zc1pvbmVFbmFibGVkID09PSB0cnVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaGVhbHRoQ2hlY2sgPSBiYXNlUHJvcHMuaGVhbHRoQ2hlY2sgfHwge307XG4gICAgdGhpcy52cGMgPSBiYXNlUHJvcHMudnBjO1xuICAgIHRoaXMudGFyZ2V0VHlwZSA9IGJhc2VQcm9wcy50YXJnZXRUeXBlO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZlRhcmdldEdyb3VwLkxiVGFyZ2V0R3JvdXAodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiB0YXJnZXRHcm91cE5hbWUsXG4gICAgICB0YXJnZXRUeXBlOiBMYXp5LnN0cmluZ1ZhbHVlKHsgcHJvZHVjZTogKCkgPT4gdGhpcy50YXJnZXRUeXBlIH0pLFxuICAgICAgdnBjSWQ6IExhenkuc3RyaW5nVmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgIHRoaXMudnBjICYmIHRoaXMudGFyZ2V0VHlwZSAhPT0gVGFyZ2V0VHlwZS5MQU1CREFcbiAgICAgICAgICAgID8gdGhpcy52cGMudnBjSWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSksXG4gICAgICAvLyBSZXZlcnNlIENGTiBUYXJnZXRHcm91cEF0dHJpYnV0ZXMgdG8gVGVycmFmb3JtIFJlc291cmNlIHByb3BlcnRpZXNcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLXByb3ZpZGVyLWF3cy9ibG9iL3Y1Ljg4LjAvaW50ZXJuYWwvc2VydmljZS9lbGJ2Mi90YXJnZXRfZ3JvdXAuZ28jTDgwMFxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRncm91cC10YXJnZXRncm91cGF0dHJpYnV0ZS5odG1sXG4gICAgICBkZXJlZ2lzdHJhdGlvbkRlbGF5OiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUuZGVyZWdpc3RyYXRpb25EZWxheVRpbWVvdXRTZWNvbmRzLFxuICAgICAgKSxcbiAgICAgIGNvbm5lY3Rpb25UZXJtaW5hdGlvbjogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5kZXJlZ2lzdHJhdGlvbkRlbGF5Q29ubmVjdGlvblRlcm1pbmF0aW9uRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBsb2FkQmFsYW5jaW5nQ3Jvc3Nab25lRW5hYmxlZDogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLmxvYWRCYWxhbmNpbmdDcm9zc1pvbmVFbmFibGVkLFxuICAgICAgKSxcbiAgICAgIGxvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlOiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUubG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGUsXG4gICAgICApLFxuICAgICAgbG9hZEJhbGFuY2luZ0Fub21hbHlNaXRpZ2F0aW9uOiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUubG9hZEJhbGFuY2luZ0FsZ29yaXRobUFub21hbHlNaXRpZ2F0aW9uLFxuICAgICAgKSxcbiAgICAgIHNsb3dTdGFydDogdGhpcy5sYXp5TnVtYmVyQXR0cihBdHRyaWJ1dGUuc2xvd1N0YXJ0RHVyYXRpb25TZWNvbmRzKSxcbiAgICAgIC8vIHN0aWNraW5lc3MgaXMgc2V0IGluIHRvVGVycmFmb3JtIGFzIGl0IGNvdWxkIGJlIGVtcHR5IG9iamVjdFxuICAgICAgLy8gaXQgaXMgQ29tcGxleE9iamVjdCAtIGRvZXNuJ3Qgd29yayB3aXRoIElSZXNvbHZhYmxlXG4gICAgICAvLyBzdGlja2luZXNzOiBMYXp5LmFueVZhbHVlKHsgLi4uIH0pLFxuICAgICAgLy8gdGFyZ2V0X2dyb3VwX2hlYWx0aCBpcyBzZXQgaW4gdG9UZXJyYWZvcm0gYXMgaXQgY291bGQgYmUgZW1wdHkgb2JqZWN0XG4gICAgICAvLyBpdCBpcyBDb21wbGV4T2JqZWN0IC0gZG9lc24ndCB3b3JrIHdpdGggSVJlc29sdmFibGVcbiAgICAgIC8vIHRhcmdldEdyb3VwSGVhbHRoOiBMYXp5LmFueVZhbHVlKHsgLi4uIH0pLFxuICAgICAgcHJlc2VydmVDbGllbnRJcDogdGhpcy5sYXp5U3RyaW5nQXR0cihBdHRyaWJ1dGUucHJlc2VydmVDbGllbnRJUEVuYWJsZWQpLFxuICAgICAgcHJveHlQcm90b2NvbFYyOiB0aGlzLmxhenlCb29sQXR0cihBdHRyaWJ1dGUucHJveHlQcm90b2NvbFYyRW5hYmxlZCksXG4gICAgICBsYW1iZGFNdWx0aVZhbHVlSGVhZGVyc0VuYWJsZWQ6IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUubGFtYmRhTXVsdGlWYWx1ZUhlYWRlcnNFbmFibGVkLFxuICAgICAgKSxcbiAgICAgIHRhcmdldEhlYWx0aFN0YXRlOiBMYXp5LmFueVZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgICAgICAgbmV3IEFycmF5PHRmVGFyZ2V0R3JvdXAuTGJUYXJnZXRHcm91cFRhcmdldEhlYWx0aFN0YXRlPigpO1xuICAgICAgICAgICAgY29uc3QgdW5oZWFsdGh5RHJhaW5pbmdJbnRlcnZhbCA9IGxvb2t1cE51bWJlckF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICBBdHRyaWJ1dGUudGFyZ2V0SGVhbHRoU3RhdGVVbmhlYWx0aHlEcmFpbmluZ0ludGVydmFsU2Vjb25kcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVVbmhlYWx0aHlDb25uZWN0aW9uVGVybWluYXRpb24gPSBsb29rdXBCb29sQXR0cmlidXRlKFxuICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRIZWFsdGhTdGF0ZVVuaGVhbHRoeUNvbm5lY3Rpb25UZXJtaW5hdGlvbkVuYWJsZWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB1bmhlYWx0aHlEcmFpbmluZ0ludGVydmFsICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgZW5hYmxlVW5oZWFsdGh5Q29ubmVjdGlvblRlcm1pbmF0aW9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgZW5hYmxlVW5oZWFsdGh5Q29ubmVjdGlvblRlcm1pbmF0aW9uOlxuICAgICAgICAgICAgICAgICAgZW5hYmxlVW5oZWFsdGh5Q29ubmVjdGlvblRlcm1pbmF0aW9uID8/IHRydWUsXG4gICAgICAgICAgICAgICAgdW5oZWFsdGh5RHJhaW5pbmdJbnRlcnZhbCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgb21pdEVtcHR5QXJyYXk6IHRydWUgfSxcbiAgICAgICksXG4gICAgICB0YXJnZXRGYWlsb3ZlcjogTGF6eS5hbnlWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIHByb2R1Y2U6ICgpOlxuICAgICAgICAgICAgfCB0ZlRhcmdldEdyb3VwLkxiVGFyZ2V0R3JvdXBUYXJnZXRGYWlsb3ZlcltdXG4gICAgICAgICAgICB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICAgICAgICBuZXcgQXJyYXk8dGZUYXJnZXRHcm91cC5MYlRhcmdldEdyb3VwVGFyZ2V0RmFpbG92ZXI+KCk7XG4gICAgICAgICAgICBjb25zdCBvblVuaGVhbHRoeSA9IGxvb2t1cFN0cmluZ0F0dHJpYnV0ZShcbiAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICBBdHRyaWJ1dGUudGFyZ2V0RmFpbG92ZXJPblVuaGVhbHRoeSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBvbkRlcmVnaXN0cmF0aW9uID0gbG9va3VwU3RyaW5nQXR0cmlidXRlKFxuICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRGYWlsb3Zlck9uRGVyZWdpc3RyYXRpb24sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3IgaWYgZWl0aGVyIGlzIGRlZmluZWQgd2l0aG91dCB0aGUgb3RoZXJcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKG9uVW5oZWFsdGh5ICE9PSB1bmRlZmluZWQgJiYgb25EZXJlZ2lzdHJhdGlvbiA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgICAgICAob25VbmhlYWx0aHkgPT09IHVuZGVmaW5lZCAmJiBvbkRlcmVnaXN0cmF0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwidGFyZ2V0X2ZhaWxvdmVyLm9uX3VuaGVhbHRoeSBhbmQgdGFyZ2V0X2ZhaWxvdmVyLm9uX2RlcmVnaXN0cmF0aW9uIG11c3QgYmUgZGVmaW5lZCB0b2dldGhlclwiLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uVW5oZWFsdGh5ICE9PSB1bmRlZmluZWQgJiYgb25EZXJlZ2lzdHJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBvblVuaGVhbHRoeSxcbiAgICAgICAgICAgICAgICBvbkRlcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBvbWl0RW1wdHlBcnJheTogdHJ1ZSB9LFxuICAgICAgKSxcbiAgICAgIC8vIGhlYWx0aF9jaGVjayBpcyBzZXQgaW4gdG9UZXJyYWZvcm0gYXMgaXQgY291bGQgYmUgZW1wdHkgb2JqZWN0XG4gICAgICAvLyBpdCBpcyBDb21wbGV4T2JqZWN0IC0gZG9lc24ndCB3b3JrIHdpdGggSVJlc29sdmFibGVcbiAgICAgIC8vIGhlYWx0aENoZWNrOiBMYXp5LmFueVZhbHVlKHsgLi4ufSksXG4gICAgICBpcEFkZHJlc3NUeXBlOiBiYXNlUHJvcHMuaXBBZGRyZXNzVHlwZSxcblxuICAgICAgLi4uYWRkaXRpb25hbFByb3BzLFxuICAgIH0pO1xuXG4gICAgdGhpcy50YXJnZXRHcm91cExvYWRCYWxhbmNlckFybnMgPSB0aGlzLnJlc291cmNlLmxvYWRCYWxhbmNlckFybnM7XG4gICAgdGhpcy50YXJnZXRHcm91cEFybiA9IHRoaXMucmVzb3VyY2UuYXJuO1xuICAgIC8vdGhpcy5yZXNvdXJjZS5hdHRyVGFyZ2V0R3JvdXBGdWxsTmFtZTtcbiAgICB0aGlzLnRhcmdldEdyb3VwRnVsbE5hbWUgPSB0aGlzLnN0YWNrLnNwbGl0QXJuKFxuICAgICAgdGhpcy5yZXNvdXJjZS5hcm4sXG4gICAgICBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICApLnJlc291cmNlO1xuICAgIHRoaXMubG9hZEJhbGFuY2VyQXJucyA9IHRoaXMucmVzb3VyY2UubG9hZEJhbGFuY2VyQXJucy50b1N0cmluZygpO1xuICAgIHRoaXMudGFyZ2V0R3JvdXBOYW1lID0gdGhpcy5yZXNvdXJjZS5uYW1lO1xuICAgIHRoaXMuZGVmYXVsdFBvcnQgPSBhZGRpdGlvbmFsUHJvcHMucG9ydCA/PyA4MDsgLy8gVE9ETzogVGhpcyBpcyBidWcgaW4gQVdTQ0RLIGFzIGl0IGNhbiBiZSB1bmRlZmluZWQuXG4gICAgdGhpcy5wcm90b2NvbFZlcnNpb24gPSBhZGRpdGlvbmFsUHJvcHM/LnByb3RvY29sVmVyc2lvbjtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHsgdmFsaWRhdGU6ICgpID0+IHRoaXMudmFsaWRhdGVIZWFsdGhDaGVjaygpIH0pO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHsgdmFsaWRhdGU6ICgpID0+IHRoaXMudmFsaWRhdGVUYXJnZXRHcm91cCgpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY29uc3RydWN0cyB0aGF0IG5lZWQgdG8gYmUgZGVwZW5kZWQgb24gdG8gZW5zdXJlIHRoZSBUYXJnZXRHcm91cCBpcyBhc3NvY2lhdGVkIHRvIGEgbG9hZCBiYWxhbmNlclxuICAgKi9cbiAgcHVibGljIGdldCBsb2FkQmFsYW5jZXJBdHRhY2hlZCgpOiBJRGVwZW5kYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZEJhbGFuY2VyQXR0YWNoZWREZXBlbmRlbmNpZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L3JlcGxhY2UgdGhlIHRhcmdldCBncm91cCdzIGhlYWx0aCBjaGVja1xuICAgKi9cbiAgcHVibGljIGNvbmZpZ3VyZUhlYWx0aENoZWNrKGhlYWx0aENoZWNrOiBIZWFsdGhDaGVjaykge1xuICAgIHRoaXMuaGVhbHRoQ2hlY2sgPSBoZWFsdGhDaGVjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBBV1MgQ0RLIHNwZWNpZmljIHdheSBvZiBzZXR0aW5nIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUgb24gdGhlIHRhcmdldCBncm91cFxuICAgKlxuICAgKiBQcmVmZXIgdG8gdXNlIGRlZGljYXRlZCBtZXRob2RzIGxpa2UgYGNvbmZpZ3VyZUhlYWx0aENoZWNrYCBvciBgc2V0QXR0cmlidXRlYFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vbG9hZC1iYWxhbmNlci10YXJnZXQtZ3JvdXBzLmh0bWwjdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzZXRBdHRyaWJ1dGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBsb2FkIGJhbGFuY2luZyB0YXJnZXQgYXMgcGFydCBvZiB0aGlzIGdyb3VwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWRkTG9hZEJhbGFuY2VyVGFyZ2V0KHByb3BzOiBMb2FkQmFsYW5jZXJUYXJnZXRQcm9wcykge1xuICAgIGlmICh0aGlzLnRhcmdldFR5cGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhcmdldFR5cGUgIT09IHByb3BzLnRhcmdldFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFscmVhZHkgaGF2ZSBhIG9mIHR5cGUgJyR7dGhpcy50YXJnZXRUeXBlfScsIGFkZGluZyAnJHtwcm9wcy50YXJnZXRUeXBlfSc7IG1ha2UgYWxsIHRhcmdldHMgdGhlIHNhbWUgdHlwZS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXRUeXBlID0gcHJvcHMudGFyZ2V0VHlwZTtcblxuICAgIGlmICh0aGlzLnRhcmdldFR5cGUgPT09IFRhcmdldFR5cGUuTEFNQkRBICYmIHRoaXMudGFyZ2V0c0pzb24ubGVuZ3RoID49IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUYXJnZXRHcm91cCBjYW4gb25seSBjb250YWluIG9uZSBMQU1CREEgdGFyZ2V0LiBDcmVhdGUgYSBuZXcgVGFyZ2V0R3JvdXAuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50YXJnZXRKc29uKSB7XG4gICAgICB0aGlzLnRhcmdldHNKc29uLnB1c2gocHJvcHMudGFyZ2V0SnNvbik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlVGFyZ2V0R3JvdXAoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAodGhpcy50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiYgdGhpcy50YXJnZXRzSnNvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIFwiQGF3cy1jZGsvYXdzLWVsYnYyOnRhcmdldEdyb3VwU3BlY2lmeVRhcmdldFR5cGVGb3JFbXB0eVRhcmdldEdyb3VwXCIsXG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBcIldoZW4gY3JlYXRpbmcgYW4gZW1wdHkgVGFyZ2V0R3JvdXAsIHlvdSBzaG91bGQgc3BlY2lmeSBhICd0YXJnZXRUeXBlJyAodGhpcyB3YXJuaW5nIG1heSBiZWNvbWUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZSkuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldFR5cGUgIT09IFRhcmdldFR5cGUuTEFNQkRBICYmIHRoaXMudnBjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldC5wdXNoKFwiJ3ZwYycgaXMgcmVxdWlyZWQgZm9yIGEgbm9uLUxhbWJkYSBUYXJnZXRHcm91cFwiKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRncm91cC5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLXRhcmdldGdyb3VwLW5hbWVcbiAgICBjb25zdCB0YXJnZXRHcm91cE5hbWUgPSB0aGlzLnJlc291cmNlLm5hbWVJbnB1dDtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh0YXJnZXRHcm91cE5hbWUpICYmIHRhcmdldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGFyZ2V0R3JvdXBOYW1lLmxlbmd0aCA+IDMyKSB7XG4gICAgICAgIHJldC5wdXNoKFxuICAgICAgICAgIGBUYXJnZXQgZ3JvdXAgbmFtZTogXCIke3RhcmdldEdyb3VwTmFtZX1cIiBjYW4gaGF2ZSBhIG1heGltdW0gb2YgMzIgY2hhcmFjdGVycy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldEdyb3VwTmFtZS5zdGFydHNXaXRoKFwiLVwiKSB8fCB0YXJnZXRHcm91cE5hbWUuZW5kc1dpdGgoXCItXCIpKSB7XG4gICAgICAgIHJldC5wdXNoKFxuICAgICAgICAgIGBUYXJnZXQgZ3JvdXAgbmFtZTogXCIke3RhcmdldEdyb3VwTmFtZX1cIiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlswLTlhLXotXSskL2kudGVzdCh0YXJnZXRHcm91cE5hbWUpKSB7XG4gICAgICAgIHJldC5wdXNoKFxuICAgICAgICAgIGBUYXJnZXQgZ3JvdXAgbmFtZTogXCIke3RhcmdldEdyb3VwTmFtZX1cIiBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBoeXBoZW5zLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUhlYWx0aENoZWNrKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxTZWNvbmRzID0gdGhpcy5oZWFsdGhDaGVjay5pbnRlcnZhbD8udG9TZWNvbmRzKCk7XG4gICAgY29uc3QgdGltZW91dFNlY29uZHMgPSB0aGlzLmhlYWx0aENoZWNrLnRpbWVvdXQ/LnRvU2Vjb25kcygpO1xuXG4gICAgaWYgKGludGVydmFsU2Vjb25kcyAmJiB0aW1lb3V0U2Vjb25kcykge1xuICAgICAgaWYgKGludGVydmFsU2Vjb25kcyA8IHRpbWVvdXRTZWNvbmRzKSB7XG4gICAgICAgIC8vIDwgaW5zdGVhZCBvZiA8PSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzI2MDMxXG4gICAgICAgIHJldC5wdXNoKFxuICAgICAgICAgIFwiSGVhbHRoIGNoZWNrIGludGVydmFsIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0aW1lb3V0OyByZWNlaXZlZCBpbnRlcnZhbCBcIiArXG4gICAgICAgICAgICBgJHtpbnRlcnZhbFNlY29uZHN9LCB0aW1lb3V0ICR7dGltZW91dFNlY29uZHN9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwcml2YXRlIGxhenlTdHJpbmdBdHRyKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIExhenkuc3RyaW5nVmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5hdHRyaWJ1dGVzW2tleV0sXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBsYXp5Qm9vbEF0dHIoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTGF6eS5hbnlWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoKSA9PiBsb29rdXBCb29sQXR0cmlidXRlKHRoaXMuYXR0cmlidXRlcywga2V5KSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGxhenlOdW1iZXJBdHRyKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIExhenkubnVtYmVyVmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gbG9va3VwTnVtYmVyQXR0cmlidXRlKHRoaXMuYXR0cmlidXRlcywga2V5KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHJlc291cmNlIHRvIHRoZSB0ZXJyYWZvcm0gSlNPTiBvdXRwdXQuXG4gICAqXG4gICAqIGNhbGxlZCBieSBUZXJyYWZvcm1TdGFjay5wcmVwYXJlU3RhY2soKVxuICAgKi9cbiAgcHVibGljIHRvVGVycmFmb3JtKCk6IGFueSB7XG4gICAgLy8gVE9ETzogU3dpdGNoIGZyb20gcHJvdmlkZXItYXdzIHRvIHByb3ZpZGVyLWF3c2NjIGFuZCB1c2UgTGF6eVZhbHVlP1xuICAgIC8vIGluc3RlYWQgb2YgaW5saW5lIExhenlWYWx1ZSwgd2UgdXNlIHByZXBhcmVTdGFjaygpIHRvIHN5bnRoIGFkZGl0aW9uYWwgcmVzb3VyY2VzXG4gICAgLy8gdGFyZ2V0czogTGF6eS5hbnlWYWx1ZShcbiAgICAvLyAgIHsgcHJvZHVjZTogKCkgPT4gdGhpcy50YXJnZXRzSnNvbiB9LFxuICAgIC8vICAgeyBvbWl0RW1wdHlBcnJheTogdHJ1ZSB9LFxuICAgIC8vICksXG5cbiAgICAvLyBwdXQgcHV0U3RpY2tpbmVzcyBpZiBhdHRyaWJ1dGVzIGFyZSBzZXRcbiAgICBjb25zdCBzdGlja2luZXNzRW5hYmxlZCA9IGxvb2t1cEJvb2xBdHRyaWJ1dGUoXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICBBdHRyaWJ1dGUuc3RpY2tpbmVzc0VuYWJsZWQsXG4gICAgKTtcbiAgICBjb25zdCBzdGlja2luZXNzQXBwQ29va2llRHVyYXRpb24gPSBsb29rdXBOdW1iZXJBdHRyaWJ1dGUoXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICBBdHRyaWJ1dGUuc3RpY2tpbmVzc0FwcENvb2tpZUR1cmF0aW9uU2Vjb25kcyxcbiAgICApO1xuICAgIGNvbnN0IHN0aWNraW5lc3NMQkNvb2tpZUR1cmF0aW9uID0gbG9va3VwTnVtYmVyQXR0cmlidXRlKFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgQXR0cmlidXRlLnN0aWNraW5lc3NMQkNvb2tpZUR1cmF0aW9uU2Vjb25kcyxcbiAgICApO1xuICAgIGNvbnN0IHN0aWNraW5lc3NDb29raWVOYW1lID0gbG9va3VwU3RyaW5nQXR0cmlidXRlKFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgQXR0cmlidXRlLnN0aWNraW5lc3NBcHBDb29raWVDb29raWVOYW1lLFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgKHN0aWNraW5lc3NFbmFibGVkICE9PSB1bmRlZmluZWQgJiYgc3RpY2tpbmVzc0VuYWJsZWQgIT09IGZhbHNlKSB8fFxuICAgICAgc3RpY2tpbmVzc0FwcENvb2tpZUR1cmF0aW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHN0aWNraW5lc3NMQkNvb2tpZUR1cmF0aW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHN0aWNraW5lc3NDb29raWVOYW1lICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIHBvc3NpYmxlIHZhbHVlcyBmb3IgQUxCIGFyZSBgbGJfY29va2llYCBvciBgYXBwX2Nvb2tpZWBcbiAgICAgIC8vIG9ubHkgcG9zc2libGUgdmFsdWUgZm9yIE5MQiBpcyBgc291cmNlX2lwYFxuICAgICAgLy8gcG9zc2libGUgdmFsdWVzIGZvciBHV0xCIGFyZSBgc291cmNlX2lwX2Rlc3RfaXBgIG9yIGBzb3VyY2VfaXBfZGVzdF9pcF9wcm90b2BcbiAgICAgIGNvbnN0IHR5cGUgPSBsb29rdXBTdHJpbmdBdHRyaWJ1dGUoXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgQXR0cmlidXRlLnN0aWNraW5lc3NUeXBlLFxuICAgICAgKTtcbiAgICAgIC8vIHRmIHJlcXVpcmVzIHR5cGUgdG8gYmUgc2V0XG4gICAgICBpZiAoIXR5cGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcInN0aWNraW5lc3MudHlwZSBpcyByZXF1aXJlZCBpZiBhbnkgc3RpY2tpbmVzcyBhdHRyaWJ1dGUgaXMgc2V0XCIsXG4gICAgICAgICk7XG4gICAgICB0aGlzLnJlc291cmNlLnB1dFN0aWNraW5lc3Moe1xuICAgICAgICB0eXBlLFxuICAgICAgICBlbmFibGVkOiBsb29rdXBCb29sQXR0cmlidXRlKFxuICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICBBdHRyaWJ1dGUuc3RpY2tpbmVzc0VuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGNvb2tpZUR1cmF0aW9uOlxuICAgICAgICAgIHR5cGUgPT09IFwibGJfY29va2llXCJcbiAgICAgICAgICAgID8gc3RpY2tpbmVzc0xCQ29va2llRHVyYXRpb25cbiAgICAgICAgICAgIDogc3RpY2tpbmVzc0FwcENvb2tpZUR1cmF0aW9uLFxuICAgICAgICAvLyBhcHBfY29va2llIGF0dHJpYnV0ZXNcbiAgICAgICAgY29va2llTmFtZTogbG9va3VwU3RyaW5nQXR0cmlidXRlKFxuICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICBBdHRyaWJ1dGUuc3RpY2tpbmVzc0FwcENvb2tpZUNvb2tpZU5hbWUsXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgSFRUUCBvciBnUlBDIGNvZGVzIHRvIHVzZSB3aGVuIGNoZWNraW5nIGZvciBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHRhcmdldC5cbiAgICAgKiBUaGUgYGhlYWx0aF9jaGVjay5wcm90b2NvbGAgbXVzdCBiZSBvbmUgb2YgSFRUUCBvciBIVFRQUyBvciB0aGUgYHRhcmdldF90eXBlYCBtdXN0IGJlIGxhbWJkYS5cbiAgICAgKiBWYWx1ZXMgY2FuIGJlIGNvbW1hLXNlcGFyYXRlZCBpbmRpdmlkdWFsIHZhbHVlcyAoZS5nLiwgXCIyMDAsMjAyXCIpIG9yIGEgcmFuZ2Ugb2ZcbiAgICAgKiB2YWx1ZXMgKGUuZy4sIFwiMjAwLTI5OVwiKS5cbiAgICAgKlxuICAgICAqIC0gRm9yIGdSUEMtYmFzZWQgdGFyZ2V0IGdyb3VwcyAoaS5lLiwgdGhlIHByb3RvY29sIGlzIG9uZSBvZiBIVFRQIG9yIEhUVFBTIGFuZCB0aGVcbiAgICAgKiAgIGBwcm90b2NvbF92ZXJzaW9uYCBpcyBHUlBDKSwgdmFsdWVzIGNhbiBiZSBiZXR3ZWVuIDAgYW5kIDk5LiBUaGUgZGVmYXVsdCBpcyAxMi5cbiAgICAgKiAtIFdoZW4gdXNlZCB3aXRoIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgKGkuZS4sIHRoZSBwcm90b2NvbCBpcyBvbmUgb2YgSFRUUFxuICAgICAqICAgb3IgSFRUUFMgYW5kIHRoZSBgcHJvdG9jb2xfdmVyc2lvbmAgaXMgbm90IEdSUEMpLCB2YWx1ZXMgY2FuIGJlIGJldHdlZW4gMjAwIGFuZCA0OTkuXG4gICAgICogICBUaGUgZGVmYXVsdCBpcyAyMDAuXG4gICAgICogLSBXaGVuIHVzZWQgd2l0aCBhIE5ldHdvcmsgTG9hZCBCYWxhbmNlciAoaS5lLiwgdGhlIHByb3RvY29sIGlzIG9uZSBvZiBUQ1AsIFRDUF9VRFAsIFVEUCwgb3IgVExTKSxcbiAgICAgKiAgIHZhbHVlcyBjYW4gYmUgYmV0d2VlbiAyMDAgYW5kIDU5OS4gVGhlIGRlZmF1bHQgaXMgMjAwLTM5OS5cbiAgICAgKiAtIFdoZW4gdGhlIHRhcmdldF90eXBlIGlzIGxhbWJkYSwgdmFsdWVzIGNhbiBiZSBiZXR3ZWVuIDIwMCBhbmQgNDk5LiBUaGUgZGVmYXVsdCBpcyAyMDAuXG4gICAgICpcbiAgICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuODguMC9kb2NzL3Jlc291cmNlcy9sYl90YXJnZXRfZ3JvdXAjbWF0Y2hlci0xIExiVGFyZ2V0R3JvdXAjbWF0Y2hlcn1cbiAgICAgKi9cbiAgICBsZXQgbWF0Y2hlciA9IHRoaXMuaGVhbHRoQ2hlY2s/LmhlYWx0aHlIdHRwQ29kZXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wcm90b2NvbFZlcnNpb24gPT09IFwiR1JQQ1wiICYmXG4gICAgICB0aGlzLmhlYWx0aENoZWNrPy5oZWFsdGh5R3JwY0NvZGVzICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIG1hdGNoZXIgPSB0aGlzLmhlYWx0aENoZWNrLmhlYWx0aHlHcnBjQ29kZXM7XG4gICAgfVxuXG4gICAgLy8gcHV0IEhlYWx0aENoZWNrIGlmIGF0dHJpYnV0ZXMgYXJlIHNldFxuICAgIHRoaXMucmVzb3VyY2UucHV0SGVhbHRoQ2hlY2soe1xuICAgICAgZW5hYmxlZDogdGhpcy5oZWFsdGhDaGVjaz8uZW5hYmxlZCxcbiAgICAgIGludGVydmFsOiB0aGlzLmhlYWx0aENoZWNrPy5pbnRlcnZhbD8udG9TZWNvbmRzKCksXG4gICAgICBwYXRoOiB0aGlzLmhlYWx0aENoZWNrPy5wYXRoLFxuICAgICAgcG9ydDogdGhpcy5oZWFsdGhDaGVjaz8ucG9ydCxcbiAgICAgIHByb3RvY29sOiB0aGlzLmhlYWx0aENoZWNrPy5wcm90b2NvbCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuaGVhbHRoQ2hlY2s/LnRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgaGVhbHRoeVRocmVzaG9sZDogdGhpcy5oZWFsdGhDaGVjaz8uaGVhbHRoeVRocmVzaG9sZENvdW50LFxuICAgICAgdW5oZWFsdGh5VGhyZXNob2xkOiB0aGlzLmhlYWx0aENoZWNrPy51bmhlYWx0aHlUaHJlc2hvbGRDb3VudCxcbiAgICAgIG1hdGNoZXIsXG4gICAgfSk7XG5cbiAgICAvLyBwdXQgdGFyZ2V0R3JvdXBIZWFsdGggaWYgYXR0cmlidXRlcyBhcmUgc2V0XG4gICAgY29uc3QgZG5zRmFpbG92ZXI6IHRmVGFyZ2V0R3JvdXAuTGJUYXJnZXRHcm91cFRhcmdldEdyb3VwSGVhbHRoRG5zRmFpbG92ZXIgPVxuICAgICAge1xuICAgICAgICBtaW5pbXVtSGVhbHRoeVRhcmdldHNDb3VudDogbG9va3VwU3RyaW5nQXR0cmlidXRlKFxuICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICBBdHRyaWJ1dGUudGFyZ2V0R3JvdXBIZWFsdGhETlNGYWlsb3Zlck1pbmltdW1IZWFsdGh5VGFyZ2V0c0NvdW50LFxuICAgICAgICApLFxuICAgICAgICBtaW5pbXVtSGVhbHRoeVRhcmdldHNQZXJjZW50YWdlOiBsb29rdXBTdHJpbmdBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRHcm91cEhlYWx0aEROU0ZhaWxvdmVyTWluaW11bUhlYWx0aHlUYXJnZXRzUGVyY2VudGFnZSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY29uc3QgdW5oZWFsdGh5U3RhdGVSb3V0aW5nOiB0ZlRhcmdldEdyb3VwLkxiVGFyZ2V0R3JvdXBUYXJnZXRHcm91cEhlYWx0aFVuaGVhbHRoeVN0YXRlUm91dGluZyA9XG4gICAgICB7XG4gICAgICAgIG1pbmltdW1IZWFsdGh5VGFyZ2V0c0NvdW50OiBsb29rdXBOdW1iZXJBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRHcm91cEhlYWx0aFVuaGVhbHRoeVN0YXRlUm91dGluZ01pbmltdW1IZWFsdGh5VGFyZ2V0c0NvdW50LFxuICAgICAgICApLFxuICAgICAgICBtaW5pbXVtSGVhbHRoeVRhcmdldHNQZXJjZW50YWdlOiBsb29rdXBTdHJpbmdBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRHcm91cEhlYWx0aFVuaGVhbHRoeVN0YXRlUm91dGluZ01pbmltdW1IZWFsdGh5VGFyZ2V0c1BlcmNlbnRhZ2UsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIHRoaXMucmVzb3VyY2UucHV0VGFyZ2V0R3JvdXBIZWFsdGgoe1xuICAgICAgZG5zRmFpbG92ZXIsIC8vIFRPRE86IHNob3VsZCBiZSB1bmRlZmluZWQgaWYgYWxsIG9iamVjdCBrZXlzIGFyZSB1bmRlZmluZWRcbiAgICAgIHVuaGVhbHRoeVN0YXRlUm91dGluZywgLy8gVE9ETzogc2hvdWxkIGJlIHVuZGVmaW5lZCBpZiBhbGwgb2JqZWN0IGtleXMgYXJlIHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIGxiVGFyZ2V0R3JvdXBBdHRhY2htZW50IHJlc291cmNlIGZvciBlYWNoIHRhcmdldFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YXJnZXRzSnNvbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBgQXR0YWNobWVudCR7aX1gO1xuICAgICAgLy8gVE9ETzogSWRlYWxseSB3ZSBzaG91bGQgaGF2ZSB1c2VkIElSZXNvbHZhYmxlLnJlc29sdmUgYW5kIHVzZSB0aGUgSVJlc29sdmVDb250ZXh0LnByZXBhcmluZyBmbGFnXG4gICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1pYW0vbGliL3BvbGljeS1kb2N1bWVudC50cyNMNDhcbiAgICAgIGlmICh0aGlzLm5vZGUudHJ5RmluZENoaWxkKGlkKSkgY29udGludWU7IC8vIGlnbm9yZSBpZiBhbHJlYWR5IGdlbmVyYXRlZFxuXG4gICAgICBuZXcgdGZUYXJnZXRHcm91cEF0dGFjaG1lbnQuTGJUYXJnZXRHcm91cEF0dGFjaG1lbnQodGhpcywgaWQsIHtcbiAgICAgICAgdGFyZ2V0R3JvdXBBcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgICB0YXJnZXRJZDogdGhpcy50YXJnZXRzSnNvbltpXS50YXJnZXRJZCxcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy50YXJnZXRzSnNvbltpXS5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICBwb3J0OiB0aGlzLnRhcmdldHNKc29uW2ldLnBvcnQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byByZWZlcmVuY2UgYW4gZXhpc3RpbmcgdGFyZ2V0IGdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb3J0IHRhcmdldCBncm91cCBpcyBsaXN0ZW5pbmcgb25cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIHByb3BlcnR5IGlzIHVudXNlZCBhbmQgdGhlIHdyb25nIHR5cGUuIE5vIG5lZWQgdG8gdXNlIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFBvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVG9rZW4gcmVwcmVzZW50aW5nIHRoZSBsaXN0IG9mIEFSTnMgZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHJvdXRpbmcgdG8gdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckFybnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byByZWZlcmVuY2UgYW4gZXhpc3RpbmcgdGFyZ2V0IGdyb3VwXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFRhcmdldEdyb3VwQXR0cmlidXRlcyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0R3JvdXBJbXBvcnRQcm9wcyBleHRlbmRzIFRhcmdldEdyb3VwQXR0cmlidXRlcyB7fVxuXG4vKipcbiAqIEEgdGFyZ2V0IGdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRhcmdldEdyb3VwIGV4dGVuZHMgSUNvbnN0cnVjdCB7XG4gIC8vIFRPRE86IEV4dGVuZCBJQXdzQ29uc3RydWN0IGluc3RlYWQ/XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQVJOIG9mIHRoZSB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgdG9rZW4gcmVwcmVzZW50aW5nIGEgbGlzdCBvZiBBUk5zIG9mIHRoZSBsb2FkIGJhbGFuY2VycyB0aGF0IHJvdXRlIHRyYWZmaWMgdG8gdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckFybnM6IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCB0byBkZXBlbmQgb24gdGhlIGxpc3RlbmVycyBhZGRlZCB0byB0aGlzIHRhcmdldCBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXR0YWNoZWQ6IElEZXBlbmRhYmxlO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhdHRhY2hpbmcgYSB0YXJnZXQgdG8gbG9hZCBiYWxhbmNlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclRhcmdldFByb3BzIHtcbiAgLyoqXG4gICAqIFdoYXQga2luZCBvZiB0YXJnZXQgdGhpcyBpc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0VHlwZTogVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogSlNPTiByZXByZXNlbnRpbmcgdGhlIHRhcmdldCdzIGRpcmVjdCBhZGRpdGlvbiB0byB0aGUgVGFyZ2V0R3JvdXAgbGlzdFxuICAgKlxuICAgKiBNYXkgYmUgb21pdHRlZCBpZiB0aGUgdGFyZ2V0IGlzIGdvaW5nIHRvIHJlZ2lzdGVyIGl0c2VsZiBsYXRlci5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEpzb24/OiBMYlRhcmdldEdyb3VwQXR0YWNobWVudENvbmZpZztcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBmdWxsIGxvYWQgYmFsYW5jZXIgbmFtZSAodXNlZCBmb3IgbWV0cmljcykgZnJvbSB0aGUgbGlzdGVuZXIgQVJOOlxuICpcbiAqIFR1cm5zXG4gKlxuICogICAgIGFybjphd3M6ZWxhc3RpY2xvYWRiYWxhbmNpbmc6dXMtd2VzdC0yOjEyMzQ1Njc4OTAxMjpsaXN0ZW5lci9hcHAvbXktbG9hZC1iYWxhbmNlci81MGRjNmM0OTVjMGM5MTg4L2YyZjdkYzhlZmM1MjJhYjJcbiAqXG4gKiBJbnRvXG4gKlxuICogICAgIGFwcC9teS1sb2FkLWJhbGFuY2VyLzUwZGM2YzQ5NWMwYzkxODhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRCYWxhbmNlck5hbWVGcm9tTGlzdGVuZXJBcm4obGlzdGVuZXJBcm46IHN0cmluZykge1xuICBjb25zdCBhcm5QYXJ0cyA9IEZuLnNwbGl0KFwiL1wiLCBsaXN0ZW5lckFybik7XG4gIHJldHVybiBgJHtGbi5lbGVtZW50KGFyblBhcnRzLCAxKX0vJHtGbi5lbGVtZW50KGFyblBhcnRzLCAyKX0vJHtGbi5lbGVtZW50KGFyblBhcnRzLCAzKX1gO1xufVxuIl19
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YXJnZXQtZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvbGItc2hhcmVkL2Jhc2UtdGFyZ2V0LWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUE4MUJBLDBFQUdDOztBQWoyQkQsK0hBQStIO0FBRS9ILHNEQUc2QjtBQUM3QixpQ0FBcUQ7QUFDckQsMkNBS29CO0FBRXBCLG1DQUFpRDtBQUVqRCxpQ0FNZ0I7QUFFaEIsbUNBQXNDO0FBQ3RDLHVEQUk2QjtBQUU3Qjs7R0FFRztBQUNILElBQVksd0JBVVg7QUFWRCxXQUFZLHdCQUF3QjtJQUNsQzs7T0FFRztJQUNILHlDQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILHlDQUFhLENBQUE7QUFDZixDQUFDLEVBVlcsd0JBQXdCLHdDQUF4Qix3QkFBd0IsUUFVbkM7QUFrTUQ7O0dBRUc7QUFDSCxNQUFzQixlQUNwQixTQUFRLGdDQUFnQjtJQUd4QixJQUFXLGtCQUFrQjtRQUMzQixPQUFPO1lBQ0wsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDN0MsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQ3JDLDJCQUEyQixFQUFFLElBQUksQ0FBQywyQkFBMkI7WUFDN0QseUJBQXlCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtTQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBNEZEOztPQUVHO0lBQ0gsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsU0FBK0IsRUFDL0IsZUFBa0Q7UUFFbEQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUF2RDlCOztXQUVHO1FBQ2dCLHFDQUFnQyxHQUFHLElBQUksNEJBQWUsRUFBRSxDQUFDO1FBTzVFOztXQUVHO1FBQ2MsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUU3Qzs7V0FFRztRQUNjLGdCQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWlDLENBQUM7UUFzQ3hFLDRDQUE0QztRQUM1QyxNQUFNLGVBQWUsR0FDbkIsU0FBUyxDQUFDLGVBQWU7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDckIsd0JBQXdCLEVBQUUsR0FBRztnQkFDN0IsU0FBUyxFQUFFLEVBQUU7YUFDZCxDQUFDLENBQUM7UUFFTCxJQUFJLFNBQVMsQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUNmLDJCQUFTLENBQUMsaUNBQWlDLEVBQzNDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FDckQsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsWUFBWSxDQUNmLDJCQUFTLENBQUMsNkJBQTZCLEVBQ3ZDLFNBQVMsQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN2RCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUV2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksNEJBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNoRSxJQUFJLEVBQUUsZUFBZTtZQUNyQixVQUFVLEVBQUUsWUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEUsS0FBSyxFQUFFLFlBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3RCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FDWixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQVUsQ0FBQyxNQUFNO29CQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO29CQUNoQixDQUFDLENBQUMsU0FBUzthQUNoQixDQUFDO1lBQ0YscUVBQXFFO1lBQ3JFLCtHQUErRztZQUMvRyw2SUFBNkk7WUFDN0ksbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FDdEMsMkJBQVMsQ0FBQyxpQ0FBaUMsQ0FDNUM7WUFDRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUN0QywyQkFBUyxDQUFDLCtDQUErQyxDQUMxRDtZQUNELDZCQUE2QixFQUFFLElBQUksQ0FBQyxjQUFjLENBQ2hELDJCQUFTLENBQUMsNkJBQTZCLENBQ3hDO1lBQ0QsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FDN0MsMkJBQVMsQ0FBQywwQkFBMEIsQ0FDckM7WUFDRCw4QkFBOEIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUNqRCwyQkFBUyxDQUFDLHVDQUF1QyxDQUNsRDtZQUNELFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLDJCQUFTLENBQUMsd0JBQXdCLENBQUM7WUFDbEUsK0RBQStEO1lBQy9ELHNEQUFzRDtZQUN0RCxzQ0FBc0M7WUFDdEMsd0VBQXdFO1lBQ3hFLHNEQUFzRDtZQUN0RCw2Q0FBNkM7WUFDN0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQywyQkFBUyxDQUFDLHVCQUF1QixDQUFDO1lBQ3hFLGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUFTLENBQUMsc0JBQXNCLENBQUM7WUFDcEUsOEJBQThCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FDL0MsMkJBQVMsQ0FBQyw4QkFBOEIsQ0FDekM7WUFDRCxpQkFBaUIsRUFBRSxZQUFJLENBQUMsUUFBUSxDQUM5QjtnQkFDRSxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNaLE1BQU0sTUFBTSxHQUNWLElBQUksS0FBSyxFQUFnRCxDQUFDO29CQUM1RCxNQUFNLHlCQUF5QixHQUFHLElBQUEsNEJBQXFCLEVBQ3JELElBQUksQ0FBQyxVQUFVLEVBQ2YsMkJBQVMsQ0FBQyxpREFBaUQsQ0FDNUQsQ0FBQztvQkFDRixNQUFNLG9DQUFvQyxHQUFHLElBQUEsMEJBQW1CLEVBQzlELElBQUksQ0FBQyxVQUFVLEVBQ2YsMkJBQVMsQ0FBQyxzREFBc0QsQ0FDakUsQ0FBQztvQkFDRixJQUNFLHlCQUF5QixLQUFLLFNBQVM7d0JBQ3ZDLG9DQUFvQyxLQUFLLFNBQVMsRUFDbEQsQ0FBQzt3QkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDOzRCQUNWLG9DQUFvQyxFQUNsQyxvQ0FBb0MsSUFBSSxJQUFJOzRCQUM5Qyx5QkFBeUI7eUJBQzFCLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUNELE9BQU8sTUFBTSxDQUFDO2dCQUNoQixDQUFDO2FBQ0YsRUFDRCxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FDekI7WUFDRCxjQUFjLEVBQUUsWUFBSSxDQUFDLFFBQVEsQ0FDM0I7Z0JBQ0UsT0FBTyxFQUFFLEdBRUssRUFBRTtvQkFDZCxNQUFNLE1BQU0sR0FDVixJQUFJLEtBQUssRUFBNkMsQ0FBQztvQkFDekQsTUFBTSxXQUFXLEdBQUcsSUFBQSw0QkFBcUIsRUFDdkMsSUFBSSxDQUFDLFVBQVUsRUFDZiwyQkFBUyxDQUFDLHlCQUF5QixDQUNwQyxDQUFDO29CQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSw0QkFBcUIsRUFDNUMsSUFBSSxDQUFDLFVBQVUsRUFDZiwyQkFBUyxDQUFDLDhCQUE4QixDQUN6QyxDQUFDO29CQUNGLHFEQUFxRDtvQkFDckQsSUFDRSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksZ0JBQWdCLEtBQUssU0FBUyxDQUFDO3dCQUM3RCxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksZ0JBQWdCLEtBQUssU0FBUyxDQUFDLEVBQzdELENBQUM7d0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYiw2RkFBNkYsQ0FDOUYsQ0FBQztvQkFDSixDQUFDO29CQUNELElBQUksV0FBVyxLQUFLLFNBQVMsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQzs0QkFDVixXQUFXOzRCQUNYLGdCQUFnQjt5QkFDakIsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBQ0QsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUM7YUFDRixFQUNELEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUN6QjtZQUNELGlFQUFpRTtZQUNqRSxzREFBc0Q7WUFDdEQsc0NBQXNDO1lBQ3RDLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYTtZQUV0QyxHQUFHLGVBQWU7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDbEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUN4Qyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFDakIsZUFBUyxDQUFDLG1CQUFtQixDQUM5QixDQUFDLFFBQVEsQ0FBQztRQUNYLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHNEQUFzRDtRQUNyRyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsRUFBRSxlQUFlLENBQUM7UUFFeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLG9CQUFvQjtRQUM3QixPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0IsQ0FBQyxXQUF3QjtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksWUFBWSxDQUFDLEdBQVcsRUFBRSxLQUF5QjtRQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxxQkFBcUIsQ0FBQyxLQUE4QjtRQUM1RCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFFLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkJBQTJCLElBQUksQ0FBQyxVQUFVLGNBQWMsS0FBSyxDQUFDLFVBQVUsb0NBQW9DLENBQzdHLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRW5DLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxrQkFBVSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxRSxNQUFNLElBQUksS0FBSyxDQUNiLDJFQUEyRSxDQUM1RSxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUVTLG1CQUFtQjtRQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkUsd0VBQXdFO1lBQ3hFLG1CQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDN0IseUhBQXlILENBQzFILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFVLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEUsR0FBRyxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxrS0FBa0s7UUFDbEssTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDaEQsSUFBSSxDQUFDLGFBQUssQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFFLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDaEMsR0FBRyxDQUFDLElBQUksQ0FDTix1QkFBdUIsZUFBZSx3Q0FBd0MsQ0FDL0UsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyRSxHQUFHLENBQUMsSUFBSSxDQUNOLHVCQUF1QixlQUFlLHdDQUF3QyxDQUMvRSxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxJQUFJLENBQ04sdUJBQXVCLGVBQWUseURBQXlELENBQ2hHLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVTLG1CQUFtQjtRQUMzQixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBRWhDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQy9ELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBRTdELElBQUksZUFBZSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3RDLElBQUksZUFBZSxHQUFHLGNBQWMsRUFBRSxDQUFDO2dCQUNyQywyR0FBMkc7Z0JBQzNHLEdBQUcsQ0FBQyxJQUFJLENBQ04sd0ZBQXdGO29CQUN0RixHQUFHLGVBQWUsYUFBYSxjQUFjLEdBQUcsQ0FDbkQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQVc7UUFDaEMsT0FBTyxZQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ08sWUFBWSxDQUFDLEdBQVc7UUFDOUIsT0FBTyxZQUFJLENBQUMsUUFBUSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFBLDBCQUFtQixFQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO1NBQ3pELENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyxjQUFjLENBQUMsR0FBVztRQUNoQyxPQUFPLFlBQUksQ0FBQyxXQUFXLENBQUM7WUFDdEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUEsNEJBQXFCLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUM7U0FDM0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXO1FBQ2hCLHNFQUFzRTtRQUN0RSxtRkFBbUY7UUFDbkYsMEJBQTBCO1FBQzFCLHlDQUF5QztRQUN6Qyw4QkFBOEI7UUFDOUIsS0FBSztRQUVMLDBDQUEwQztRQUMxQyxNQUFNLGlCQUFpQixHQUFHLElBQUEsMEJBQW1CLEVBQzNDLElBQUksQ0FBQyxVQUFVLEVBQ2YsMkJBQVMsQ0FBQyxpQkFBaUIsQ0FDNUIsQ0FBQztRQUNGLE1BQU0sMkJBQTJCLEdBQUcsSUFBQSw0QkFBcUIsRUFDdkQsSUFBSSxDQUFDLFVBQVUsRUFDZiwyQkFBUyxDQUFDLGtDQUFrQyxDQUM3QyxDQUFDO1FBQ0YsTUFBTSwwQkFBMEIsR0FBRyxJQUFBLDRCQUFxQixFQUN0RCxJQUFJLENBQUMsVUFBVSxFQUNmLDJCQUFTLENBQUMsaUNBQWlDLENBQzVDLENBQUM7UUFDRixNQUFNLG9CQUFvQixHQUFHLElBQUEsNEJBQXFCLEVBQ2hELElBQUksQ0FBQyxVQUFVLEVBQ2YsMkJBQVMsQ0FBQyw2QkFBNkIsQ0FDeEMsQ0FBQztRQUNGLElBQ0UsQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLElBQUksaUJBQWlCLEtBQUssS0FBSyxDQUFDO1lBQ2hFLDJCQUEyQixLQUFLLFNBQVM7WUFDekMsMEJBQTBCLEtBQUssU0FBUztZQUN4QyxvQkFBb0IsS0FBSyxTQUFTLEVBQ2xDLENBQUM7WUFDRCwwREFBMEQ7WUFDMUQsNkNBQTZDO1lBQzdDLGdGQUFnRjtZQUNoRixNQUFNLElBQUksR0FBRyxJQUFBLDRCQUFxQixFQUNoQyxJQUFJLENBQUMsVUFBVSxFQUNmLDJCQUFTLENBQUMsY0FBYyxDQUN6QixDQUFDO1lBQ0YsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxJQUFJO2dCQUNQLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFLENBQ2pFLENBQUM7WUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztnQkFDMUIsSUFBSTtnQkFDSixPQUFPLEVBQUUsSUFBQSwwQkFBbUIsRUFDMUIsSUFBSSxDQUFDLFVBQVUsRUFDZiwyQkFBUyxDQUFDLGlCQUFpQixDQUM1QjtnQkFDRCxjQUFjLEVBQ1osSUFBSSxLQUFLLFdBQVc7b0JBQ2xCLENBQUMsQ0FBQywwQkFBMEI7b0JBQzVCLENBQUMsQ0FBQywyQkFBMkI7Z0JBQ2pDLHdCQUF3QjtnQkFDeEIsVUFBVSxFQUFFLElBQUEsNEJBQXFCLEVBQy9CLElBQUksQ0FBQyxVQUFVLEVBQ2YsMkJBQVMsQ0FBQyw2QkFBNkIsQ0FDeEM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7V0FnQkc7UUFDSCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLGdCQUFnQixDQUFDO1FBQ2pELElBQ0UsSUFBSSxDQUFDLGVBQWUsS0FBSyxNQUFNO1lBQy9CLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEtBQUssU0FBUyxFQUNoRCxDQUFDO1lBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDOUMsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPO1lBQ2xDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUU7WUFDakQsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSTtZQUM1QixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJO1lBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVE7WUFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRTtZQUMvQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLHFCQUFxQjtZQUN6RCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLHVCQUF1QjtZQUM3RCxPQUFPO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsOENBQThDO1FBQzlDLE1BQU0sV0FBVyxHQUNmO1lBQ0UsMEJBQTBCLEVBQUUsSUFBQSw0QkFBcUIsRUFDL0MsSUFBSSxDQUFDLFVBQVUsRUFDZiwyQkFBUyxDQUFDLHNEQUFzRCxDQUNqRTtZQUNELCtCQUErQixFQUFFLElBQUEsNEJBQXFCLEVBQ3BELElBQUksQ0FBQyxVQUFVLEVBQ2YsMkJBQVMsQ0FBQywyREFBMkQsQ0FDdEU7U0FDRixDQUFDO1FBQ0osTUFBTSxxQkFBcUIsR0FDekI7WUFDRSwwQkFBMEIsRUFBRSxJQUFBLDRCQUFxQixFQUMvQyxJQUFJLENBQUMsVUFBVSxFQUNmLDJCQUFTLENBQUMsZ0VBQWdFLENBQzNFO1lBQ0QsK0JBQStCLEVBQUUsSUFBQSw0QkFBcUIsRUFDcEQsSUFBSSxDQUFDLFVBQVUsRUFDZiwyQkFBUyxDQUFDLHFFQUFxRSxDQUNoRjtTQUNGLENBQUM7UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1lBQ2pDLFdBQVcsRUFBRSw2REFBNkQ7WUFDMUUscUJBQXFCLEVBQUUsNkRBQTZEO1NBQ3JGLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqRCxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzVCLG1HQUFtRztZQUNuRyw0R0FBNEc7WUFDNUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQUUsU0FBUyxDQUFDLDhCQUE4QjtZQUV4RSxJQUFJLHNDQUF1QixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7Z0JBQzVELGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUc7Z0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7Z0JBQ3RDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO2dCQUN0RCxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQy9CLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O0FBdmhCSCwwQ0F3aEJDOzs7QUEwRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLCtCQUErQixDQUFDLFdBQW1CO0lBQ2pFLE1BQU0sUUFBUSxHQUFHLFVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxVQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxVQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxVQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi9saWIvc2hhcmVkL2Jhc2UtdGFyZ2V0LWdyb3VwLnRzXG5cbmltcG9ydCB7XG4gIGxiVGFyZ2V0R3JvdXAgYXMgdGZUYXJnZXRHcm91cCxcbiAgbGJUYXJnZXRHcm91cEF0dGFjaG1lbnQgYXMgdGZUYXJnZXRHcm91cEF0dGFjaG1lbnQsXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBMYXp5LCBUb2tlbiwgRm4sIEFubm90YXRpb25zIH0gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3QsXG4gIERlcGVuZGVuY3lHcm91cCxcbiAgSUNvbnN0cnVjdCxcbiAgSURlcGVuZGFibGUsXG59IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcIi4uL3ZwY1wiO1xuaW1wb3J0IHsgTGJQcm90b2NvbCwgVGFyZ2V0VHlwZSB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBMYlRhcmdldEdyb3VwQXR0YWNobWVudENvbmZpZyB9IGZyb20gXCIuL2xiLXRhcmdldC1ncm91cC1hdHRhY2htZW50LWNvbmZpZy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZXMsXG4gIGxvb2t1cFN0cmluZ0F0dHJpYnV0ZSxcbiAgbG9va3VwQm9vbEF0dHJpYnV0ZSxcbiAgbG9va3VwTnVtYmVyQXR0cmlidXRlLFxuICBUYXJnZXRHcm91cEF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUsXG59IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQgfSBmcm9tIFwiLi4vLi4vYXJuXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgLy8gSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uLy4uL2F3cy1jb25zdHJ1Y3RcIjtcblxuLyoqXG4gKiBUaGUgSVAgYWRkcmVzcyB0eXBlIG9mIHRhcmdldHMgcmVnaXN0ZXJlZCB3aXRoIGEgdGFyZ2V0IGdyb3VwXG4gKi9cbmV4cG9ydCBlbnVtIFRhcmdldEdyb3VwSXBBZGRyZXNzVHlwZSB7XG4gIC8qKlxuICAgKiBJUHY0IGFkZHJlc3Nlc1xuICAgKi9cbiAgSVBWNCA9IFwiaXB2NFwiLFxuXG4gIC8qKlxuICAgKiBJUHY2IGFkZHJlc3Nlc1xuICAgKi9cbiAgSVBWNiA9IFwiaXB2NlwiLFxufVxuXG4vKipcbiAqIEJhc2ljIHByb3BlcnRpZXMgb2YgYm90aCBBcHBsaWNhdGlvbiBhbmQgTmV0d29yayBUYXJnZXQgR3JvdXBzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVRhcmdldEdyb3VwUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgcGVyIHJlZ2lvbiBwZXIgYWNjb3VudCwgY2FuIGhhdmUgYSBtYXhpbXVtIG9mXG4gICAqIDMyIGNoYXJhY3RlcnMsIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yIGh5cGhlbnMsIGFuZFxuICAgKiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBjbG91ZCAoVlBDKS5cbiAgICpcbiAgICogb25seSBpZiBgVGFyZ2V0VHlwZWAgaXMgYElwYCBvciBgSW5zdGFuY2VJZGBcbiAgICpcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSBmb3IgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0byB3YWl0IGJlZm9yZSBkZXJlZ2lzdGVyaW5nIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBUaGUgcmFuZ2UgaXMgMC0zNjAwIHNlY29uZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IDMwMFxuICAgKi9cbiAgcmVhZG9ubHkgZGVyZWdpc3RyYXRpb25EZWxheT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIZWFsdGggY2hlY2sgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIHByb3BlcnR5IGluIHRoaXMgY29uZmlndXJhdGlvbiB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItdGFyZ2V0Z3JvdXAuaHRtbCNhd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRncm91cC1wcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBoZWFsdGhDaGVjaz86IEhlYWx0aENoZWNrO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0YXJnZXRzIHJlZ2lzdGVyZWQgdG8gdGhpcyBUYXJnZXRHcm91cCwgZWl0aGVyIElQIG9yIEluc3RhbmNlLlxuICAgKlxuICAgKiBBbGwgdGFyZ2V0cyByZWdpc3RlcmVkIGludG8gdGhlIGdyb3VwIG11c3QgYmUgb2YgdGhpcyB0eXBlLiBJZiB5b3VcbiAgICogcmVnaXN0ZXIgdGFyZ2V0cyB0byB0aGUgVGFyZ2V0R3JvdXAgaW4gdGhlIENESyBhcHAsIHRoZSBUYXJnZXRUeXBlIGlzXG4gICAqIGRldGVybWluZWQgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRUeXBlPzogVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgY3Jvc3Mgem9uZSBsb2FkIGJhbGFuY2luZyBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZSBsb2FkIGJhbGFuY2VyIGNvbmZpZ3VyYXRpb25cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLXRhcmdldGdyb3VwLXRhcmdldGdyb3VwYXR0cmlidXRlLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGNyb3NzWm9uZUVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBJUCBhZGRyZXNzZXMgb2YgdGhlIHRhcmdldHMgcmVnaXN0ZXJlZCB3aXRoIHRoZSB0YXJnZXQgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIEVMQiBkZWZhdWx0cyB0byBJUHY0XG4gICAqL1xuICByZWFkb25seSBpcEFkZHJlc3NUeXBlPzogVGFyZ2V0R3JvdXBJcEFkZHJlc3NUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNvbmZpZ3VyaW5nIGEgaGVhbHRoIGNoZWNrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2sge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgaGVhbHRoIGNoZWNrcyBhcmUgZW5hYmxlZC4gSWYgdGhlIHRhcmdldCB0eXBlIGlzIGxhbWJkYSxcbiAgICogaGVhbHRoIGNoZWNrcyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCBidXQgY2FuIGJlIGVuYWJsZWQuIElmIHRoZSB0YXJnZXQgdHlwZVxuICAgKiBpcyBpbnN0YW5jZSBvciBpcCwgaGVhbHRoIGNoZWNrcyBhcmUgYWx3YXlzIGVuYWJsZWQgYW5kIGNhbm5vdCBiZSBkaXNhYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGFwcHJveGltYXRlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gaGVhbHRoIGNoZWNrcyBmb3IgYW4gaW5kaXZpZHVhbCB0YXJnZXQuXG4gICAqIE11c3QgYmUgNSB0byAzMDAgc2Vjb25kc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIDEwIHNlY29uZHMgaWYgcHJvdG9jb2wgaXMgYEdFTkVWRWAsIDM1IHNlY29uZHMgaWYgdGFyZ2V0IHR5cGUgaXMgYGxhbWJkYWAsIGVsc2UgMzAgc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJ2YWw/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHBpbmcgcGF0aCBkZXN0aW5hdGlvbiB3aGVyZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHNlbmRzIGhlYWx0aCBjaGVjayByZXF1ZXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgL1xuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBvcnQgdGhhdCB0aGUgbG9hZCBiYWxhbmNlciB1c2VzIHdoZW4gcGVyZm9ybWluZyBoZWFsdGggY2hlY2tzIG9uIHRoZSB0YXJnZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAndHJhZmZpYy1wb3J0J1xuICAgKi9cbiAgcmVhZG9ubHkgcG9ydD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHRoZSBsb2FkIGJhbGFuY2VyIHVzZXMgd2hlbiBwZXJmb3JtaW5nIGhlYWx0aCBjaGVja3Mgb24gdGFyZ2V0cy5cbiAgICpcbiAgICogVGhlIFRDUCBwcm90b2NvbCBpcyBzdXBwb3J0ZWQgZm9yIGhlYWx0aCBjaGVja3Mgb25seSBpZiB0aGUgcHJvdG9jb2wgb2YgdGhlIHRhcmdldCBncm91cCBpcyBUQ1AsIFRMUywgVURQLCBvciBUQ1BfVURQLlxuICAgKiBUaGUgVExTLCBVRFAsIGFuZCBUQ1BfVURQIHByb3RvY29scyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgaGVhbHRoIGNoZWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBIVFRQIGZvciBBTEJzLCBUQ1AgZm9yIE5MQnNcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogTGJQcm90b2NvbDtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCBkdXJpbmcgd2hpY2ggbm8gcmVzcG9uc2UgZnJvbSBhIHRhcmdldCBtZWFucyBhIGZhaWxlZCBoZWFsdGggY2hlY2suXG4gICAqIE11c3QgYmUgMiB0byAxMjAgc2Vjb25kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA2IHNlY29uZHMgaWYgdGhlIHByb3RvY29sIGlzIEhUVFAsIDUgc2Vjb25kcyBpZiBwcm90b2NvbCBpcyBgR0VORVZFYCwgMzAgc2Vjb25kcyBpZiB0YXJnZXQgdHlwZSBpcyBgbGFtYmRhYCwgMTAgc2Vjb25kcyBmb3IgVENQLCBUTFMsIG9yIEhUVFBTXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaGVhbHRoIGNoZWNrcyBzdWNjZXNzZXMgcmVxdWlyZWQgYmVmb3JlIGNvbnNpZGVyaW5nIGFuIHVuaGVhbHRoeSB0YXJnZXQgaGVhbHRoeS5cbiAgICpcbiAgICogRm9yIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzLCB0aGUgZGVmYXVsdCBpcyA1LiBGb3IgTmV0d29yayBMb2FkIEJhbGFuY2VycywgdGhlIGRlZmF1bHQgaXMgMy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSA1IGZvciBBTEJzLCAzIGZvciBOTEJzXG4gICAqL1xuICByZWFkb25seSBoZWFsdGh5VGhyZXNob2xkQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgaGVhbHRoIGNoZWNrIGZhaWx1cmVzIHJlcXVpcmVkIGJlZm9yZSBjb25zaWRlcmluZyBhIHRhcmdldCB1bmhlYWx0aHkuXG4gICAqXG4gICAqIEZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycywgdGhlIGRlZmF1bHQgaXMgMi4gRm9yIE5ldHdvcmsgTG9hZFxuICAgKiBCYWxhbmNlcnMsIHRoZSByYW5nZSBpcyBiZXR3ZWVuIDItMTAgYW5kIGNhbiBiZSBzZXQgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDJcbiAgICovXG4gIHJlYWRvbmx5IHVuaGVhbHRoeVRocmVzaG9sZENvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBHUlBDIGNvZGUgdG8gdXNlIHdoZW4gY2hlY2tpbmcgZm9yIGEgc3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgdmFsdWVzIGJldHdlZW4gMCBhbmQgOTkuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSB2YWx1ZXNcbiAgICogKGZvciBleGFtcGxlLCBcIjAsMVwiKSBvciBhIHJhbmdlIG9mIHZhbHVlcyAoZm9yIGV4YW1wbGUsIFwiMC01XCIpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoeUdycGNDb2Rlcz86IHN0cmluZztcblxuICAvKipcbiAgICogSFRUUCBjb2RlIHRvIHVzZSB3aGVuIGNoZWNraW5nIGZvciBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHRhcmdldC5cbiAgICpcbiAgICogRm9yIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzLCB5b3UgY2FuIHNwZWNpZnkgdmFsdWVzIGJldHdlZW4gMjAwIGFuZFxuICAgKiA0OTksIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAyMDAuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSB2YWx1ZXMgKGZvclxuICAgKiBleGFtcGxlLCBcIjIwMCwyMDJcIikgb3IgYSByYW5nZSBvZiB2YWx1ZXMgKGZvciBleGFtcGxlLCBcIjIwMC0yOTlcIikuXG4gICAqL1xuICByZWFkb25seSBoZWFsdGh5SHR0cENvZGVzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldEdyb3VwT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIHRhcmdldCBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0R3JvdXBBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZ1bGwgbmFtZSBvZiB0aGUgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cEZ1bGxOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk5zIG9mIGxvYWQgYmFsYW5jZXJzIGxvYWQgYmFsYW5jaW5nIHRvIHRoaXMgVGFyZ2V0R3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwTG9hZEJhbGFuY2VyQXJuczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEZ1bGwgbmFtZSBvZiBmaXJzdCBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIFRoaXMgaWRlbnRpZmllciBpcyBlbWl0dGVkIGFzIGEgZGltZW5zaW9ucyBvZiB0aGUgbWV0cmljcyBvZiB0aGlzIHRhcmdldFxuICAgKiBncm91cC5cbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYGFwcC9teS1sb2FkLWJhbGFuY2VyLzEyMzQ1Njc4OWBcbiAgICovXG4gIHJlYWRvbmx5IGZpcnN0TG9hZEJhbGFuY2VyRnVsbE5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmUgdGhlIHRhcmdldCBvZiBhIGxvYWQgYmFsYW5jZXJcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRhcmdldEdyb3VwQmFzZVxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJVGFyZ2V0R3JvdXBcbntcbiAgcHVibGljIGdldCB0YXJnZXRHcm91cE91dHB1dHMoKTogVGFyZ2V0R3JvdXBPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0R3JvdXBBcm46IHRoaXMudGFyZ2V0R3JvdXBBcm4sXG4gICAgICB0YXJnZXRHcm91cEZ1bGxOYW1lOiB0aGlzLnRhcmdldEdyb3VwRnVsbE5hbWUsXG4gICAgICB0YXJnZXRHcm91cE5hbWU6IHRoaXMudGFyZ2V0R3JvdXBOYW1lLFxuICAgICAgdGFyZ2V0R3JvdXBMb2FkQmFsYW5jZXJBcm5zOiB0aGlzLnRhcmdldEdyb3VwTG9hZEJhbGFuY2VyQXJucyxcbiAgICAgIGZpcnN0TG9hZEJhbGFuY2VyRnVsbE5hbWU6IHRoaXMuZmlyc3RMb2FkQmFsYW5jZXJGdWxsTmFtZSxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXRHcm91cE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldEdyb3VwQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxsIG5hbWUgb2YgdGhlIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldEdyb3VwRnVsbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldEdyb3VwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk5zIG9mIGxvYWQgYmFsYW5jZXJzIGxvYWQgYmFsYW5jaW5nIHRvIHRoaXMgVGFyZ2V0R3JvdXBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRHcm91cExvYWRCYWxhbmNlckFybnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGdWxsIG5hbWUgb2YgZmlyc3QgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBUaGlzIGlkZW50aWZpZXIgaXMgZW1pdHRlZCBhcyBhIGRpbWVuc2lvbnMgb2YgdGhlIG1ldHJpY3Mgb2YgdGhpcyB0YXJnZXRcbiAgICogZ3JvdXAuXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBhcHAvbXktbG9hZC1iYWxhbmNlci8xMjM0NTY3ODlgXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZmlyc3RMb2FkQmFsYW5jZXJGdWxsTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHRva2VuIHJlcHJlc2VudGluZyBhIGxpc3Qgb2YgQVJOcyBvZiB0aGUgbG9hZCBiYWxhbmNlcnMgdGhhdCByb3V0ZSB0cmFmZmljIHRvIHRoaXMgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXJuczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIZWFsdGggY2hlY2sgZm9yIHRoZSBtZW1iZXJzIG9mIHRoaXMgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICBwdWJsaWMgaGVhbHRoQ2hlY2s6IEhlYWx0aENoZWNrO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHBvcnQgY29uZmlndXJlZCBmb3IgbWVtYmVycyBvZiB0aGlzIHRhcmdldCBncm91cFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRQb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYWJsZSBkZXBlbmRhYmxlIHdpdGggYWxsIHJlc291cmNlcyB0aGF0IGxlYWQgdG8gbG9hZCBiYWxhbmNlciBhdHRhY2htZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXR0YWNoZWREZXBlbmRlbmNpZXMgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlcyBvZiB0aGUgZGlyZWN0bHkgcmVnaXN0ZXJlZCBtZW1iZXJzIG9mIHRoaXMgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICBwcm90ZWN0ZWQgdGFyZ2V0VHlwZT86IFRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZXMgb2YgdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlczogQXR0cmlidXRlcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBUaGUgSlNPTiBvYmplY3RzIHJldHVybmVkIGJ5IHRoZSBkaXJlY3RseSByZWdpc3RlcmVkIG1lbWJlcnMgb2YgdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFyZ2V0c0pzb24gPSBuZXcgQXJyYXk8TGJUYXJnZXRHcm91cEF0dGFjaG1lbnRDb25maWc+KCk7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZ3JvdXAgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmVxdWlyZWQgaWYgYWRkaW5nIGluc3RhbmNlcyBpbnN0ZWFkIG9mIExhbWJkYXMgdG8gVGFyZ2V0R3JvdXBcbiAgICovXG4gIHByaXZhdGUgdnBjPzogSVZwYztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHZlcnNpb24gdG8gdXNlXG4gICAqXG4gICAqIE9ubHkgYXBwbGljYWJsZSB3aGVuIHByb3RvY29sIGlzIEhUVFAgb3IgSFRUUFMuIFRoZSBwcm90b2NvbCB2ZXJzaW9uLlxuICAgKlxuICAgKiBTcGVjaWZ5IEdSUEMgdG8gc2VuZCByZXF1ZXN0cyB0byB0YXJnZXRzIHVzaW5nIGdSUEMuXG4gICAqIFNwZWNpZnkgSFRUUDIgdG8gc2VuZCByZXF1ZXN0cyB0byB0YXJnZXRzIHVzaW5nIEhUVFAvMi5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgSFRUUDEsIHdoaWNoIHNlbmRzIHJlcXVlc3RzIHRvIHRhcmdldHMgdXNpbmcgSFRUUC8xLjFcbiAgICpcbiAgICogQGRlZmF1bHQgXCJIVFRQMVwiXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3RvY29sVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBncm91cCByZXNvdXJjZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiB0ZlRhcmdldEdyb3VwLkxiVGFyZ2V0R3JvdXA7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBhZGRpdGlvbmFsUHJvcHMgaGVhbHRoQ2hlY2ssIHN0aWNraW5lc3MsIHRhcmdldEdyb3VwSGVhbHRoIGFyZSBjb250cm9sbGVkIGJ5IG1ldGhvZHMgYW5kIGlnbm9yZWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBiYXNlUHJvcHM6IEJhc2VUYXJnZXRHcm91cFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczogdGZUYXJnZXRHcm91cC5MYlRhcmdldEdyb3VwQ29uZmlnLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIGJhc2VQcm9wcyk7XG4gICAgLy8gVE9ETzogTXVzdCBub3QgYmVnaW4gb3IgZW5kIHdpdGggYSBoeXBoZW5cbiAgICBjb25zdCB0YXJnZXRHcm91cE5hbWUgPVxuICAgICAgYmFzZVByb3BzLnRhcmdldEdyb3VwTmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCItXCIsXG4gICAgICAgIG1heExlbmd0aDogMzIsXG4gICAgICB9KTtcblxuICAgIGlmIChiYXNlUHJvcHMuZGVyZWdpc3RyYXRpb25EZWxheSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgICAgQXR0cmlidXRlLmRlcmVnaXN0cmF0aW9uRGVsYXlUaW1lb3V0U2Vjb25kcyxcbiAgICAgICAgYmFzZVByb3BzLmRlcmVnaXN0cmF0aW9uRGVsYXkudG9TZWNvbmRzKCkudG9TdHJpbmcoKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGJhc2VQcm9wcy5jcm9zc1pvbmVFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICBBdHRyaWJ1dGUubG9hZEJhbGFuY2luZ0Nyb3NzWm9uZUVuYWJsZWQsXG4gICAgICAgIGJhc2VQcm9wcy5jcm9zc1pvbmVFbmFibGVkID09PSB0cnVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaGVhbHRoQ2hlY2sgPSBiYXNlUHJvcHMuaGVhbHRoQ2hlY2sgfHwge307XG4gICAgdGhpcy52cGMgPSBiYXNlUHJvcHMudnBjO1xuICAgIHRoaXMudGFyZ2V0VHlwZSA9IGJhc2VQcm9wcy50YXJnZXRUeXBlO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZlRhcmdldEdyb3VwLkxiVGFyZ2V0R3JvdXAodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiB0YXJnZXRHcm91cE5hbWUsXG4gICAgICB0YXJnZXRUeXBlOiBMYXp5LnN0cmluZ1ZhbHVlKHsgcHJvZHVjZTogKCkgPT4gdGhpcy50YXJnZXRUeXBlIH0pLFxuICAgICAgdnBjSWQ6IExhenkuc3RyaW5nVmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgIHRoaXMudnBjICYmIHRoaXMudGFyZ2V0VHlwZSAhPT0gVGFyZ2V0VHlwZS5MQU1CREFcbiAgICAgICAgICAgID8gdGhpcy52cGMudnBjSWRcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSksXG4gICAgICAvLyBSZXZlcnNlIENGTiBUYXJnZXRHcm91cEF0dHJpYnV0ZXMgdG8gVGVycmFmb3JtIFJlc291cmNlIHByb3BlcnRpZXNcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLXByb3ZpZGVyLWF3cy9ibG9iL3Y1Ljg4LjAvaW50ZXJuYWwvc2VydmljZS9lbGJ2Mi90YXJnZXRfZ3JvdXAuZ28jTDgwMFxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRncm91cC10YXJnZXRncm91cGF0dHJpYnV0ZS5odG1sXG4gICAgICBkZXJlZ2lzdHJhdGlvbkRlbGF5OiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUuZGVyZWdpc3RyYXRpb25EZWxheVRpbWVvdXRTZWNvbmRzLFxuICAgICAgKSxcbiAgICAgIGNvbm5lY3Rpb25UZXJtaW5hdGlvbjogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5kZXJlZ2lzdHJhdGlvbkRlbGF5Q29ubmVjdGlvblRlcm1pbmF0aW9uRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBsb2FkQmFsYW5jaW5nQ3Jvc3Nab25lRW5hYmxlZDogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLmxvYWRCYWxhbmNpbmdDcm9zc1pvbmVFbmFibGVkLFxuICAgICAgKSxcbiAgICAgIGxvYWRCYWxhbmNpbmdBbGdvcml0aG1UeXBlOiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUubG9hZEJhbGFuY2luZ0FsZ29yaXRobVR5cGUsXG4gICAgICApLFxuICAgICAgbG9hZEJhbGFuY2luZ0Fub21hbHlNaXRpZ2F0aW9uOiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUubG9hZEJhbGFuY2luZ0FsZ29yaXRobUFub21hbHlNaXRpZ2F0aW9uLFxuICAgICAgKSxcbiAgICAgIHNsb3dTdGFydDogdGhpcy5sYXp5TnVtYmVyQXR0cihBdHRyaWJ1dGUuc2xvd1N0YXJ0RHVyYXRpb25TZWNvbmRzKSxcbiAgICAgIC8vIHN0aWNraW5lc3MgaXMgc2V0IGluIHRvVGVycmFmb3JtIGFzIGl0IGNvdWxkIGJlIGVtcHR5IG9iamVjdFxuICAgICAgLy8gaXQgaXMgQ29tcGxleE9iamVjdCAtIGRvZXNuJ3Qgd29yayB3aXRoIElSZXNvbHZhYmxlXG4gICAgICAvLyBzdGlja2luZXNzOiBMYXp5LmFueVZhbHVlKHsgLi4uIH0pLFxuICAgICAgLy8gdGFyZ2V0X2dyb3VwX2hlYWx0aCBpcyBzZXQgaW4gdG9UZXJyYWZvcm0gYXMgaXQgY291bGQgYmUgZW1wdHkgb2JqZWN0XG4gICAgICAvLyBpdCBpcyBDb21wbGV4T2JqZWN0IC0gZG9lc24ndCB3b3JrIHdpdGggSVJlc29sdmFibGVcbiAgICAgIC8vIHRhcmdldEdyb3VwSGVhbHRoOiBMYXp5LmFueVZhbHVlKHsgLi4uIH0pLFxuICAgICAgcHJlc2VydmVDbGllbnRJcDogdGhpcy5sYXp5U3RyaW5nQXR0cihBdHRyaWJ1dGUucHJlc2VydmVDbGllbnRJUEVuYWJsZWQpLFxuICAgICAgcHJveHlQcm90b2NvbFYyOiB0aGlzLmxhenlCb29sQXR0cihBdHRyaWJ1dGUucHJveHlQcm90b2NvbFYyRW5hYmxlZCksXG4gICAgICBsYW1iZGFNdWx0aVZhbHVlSGVhZGVyc0VuYWJsZWQ6IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUubGFtYmRhTXVsdGlWYWx1ZUhlYWRlcnNFbmFibGVkLFxuICAgICAgKSxcbiAgICAgIHRhcmdldEhlYWx0aFN0YXRlOiBMYXp5LmFueVZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID1cbiAgICAgICAgICAgICAgbmV3IEFycmF5PHRmVGFyZ2V0R3JvdXAuTGJUYXJnZXRHcm91cFRhcmdldEhlYWx0aFN0YXRlPigpO1xuICAgICAgICAgICAgY29uc3QgdW5oZWFsdGh5RHJhaW5pbmdJbnRlcnZhbCA9IGxvb2t1cE51bWJlckF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICBBdHRyaWJ1dGUudGFyZ2V0SGVhbHRoU3RhdGVVbmhlYWx0aHlEcmFpbmluZ0ludGVydmFsU2Vjb25kcyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBlbmFibGVVbmhlYWx0aHlDb25uZWN0aW9uVGVybWluYXRpb24gPSBsb29rdXBCb29sQXR0cmlidXRlKFxuICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRIZWFsdGhTdGF0ZVVuaGVhbHRoeUNvbm5lY3Rpb25UZXJtaW5hdGlvbkVuYWJsZWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB1bmhlYWx0aHlEcmFpbmluZ0ludGVydmFsICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgZW5hYmxlVW5oZWFsdGh5Q29ubmVjdGlvblRlcm1pbmF0aW9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgZW5hYmxlVW5oZWFsdGh5Q29ubmVjdGlvblRlcm1pbmF0aW9uOlxuICAgICAgICAgICAgICAgICAgZW5hYmxlVW5oZWFsdGh5Q29ubmVjdGlvblRlcm1pbmF0aW9uID8/IHRydWUsXG4gICAgICAgICAgICAgICAgdW5oZWFsdGh5RHJhaW5pbmdJbnRlcnZhbCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgb21pdEVtcHR5QXJyYXk6IHRydWUgfSxcbiAgICAgICksXG4gICAgICB0YXJnZXRGYWlsb3ZlcjogTGF6eS5hbnlWYWx1ZShcbiAgICAgICAge1xuICAgICAgICAgIHByb2R1Y2U6ICgpOlxuICAgICAgICAgICAgfCB0ZlRhcmdldEdyb3VwLkxiVGFyZ2V0R3JvdXBUYXJnZXRGYWlsb3ZlcltdXG4gICAgICAgICAgICB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPVxuICAgICAgICAgICAgICBuZXcgQXJyYXk8dGZUYXJnZXRHcm91cC5MYlRhcmdldEdyb3VwVGFyZ2V0RmFpbG92ZXI+KCk7XG4gICAgICAgICAgICBjb25zdCBvblVuaGVhbHRoeSA9IGxvb2t1cFN0cmluZ0F0dHJpYnV0ZShcbiAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICBBdHRyaWJ1dGUudGFyZ2V0RmFpbG92ZXJPblVuaGVhbHRoeSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBvbkRlcmVnaXN0cmF0aW9uID0gbG9va3VwU3RyaW5nQXR0cmlidXRlKFxuICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRGYWlsb3Zlck9uRGVyZWdpc3RyYXRpb24sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3IgaWYgZWl0aGVyIGlzIGRlZmluZWQgd2l0aG91dCB0aGUgb3RoZXJcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgKG9uVW5oZWFsdGh5ICE9PSB1bmRlZmluZWQgJiYgb25EZXJlZ2lzdHJhdGlvbiA9PT0gdW5kZWZpbmVkKSB8fFxuICAgICAgICAgICAgICAob25VbmhlYWx0aHkgPT09IHVuZGVmaW5lZCAmJiBvbkRlcmVnaXN0cmF0aW9uICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwidGFyZ2V0X2ZhaWxvdmVyLm9uX3VuaGVhbHRoeSBhbmQgdGFyZ2V0X2ZhaWxvdmVyLm9uX2RlcmVnaXN0cmF0aW9uIG11c3QgYmUgZGVmaW5lZCB0b2dldGhlclwiLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uVW5oZWFsdGh5ICE9PSB1bmRlZmluZWQgJiYgb25EZXJlZ2lzdHJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBvblVuaGVhbHRoeSxcbiAgICAgICAgICAgICAgICBvbkRlcmVnaXN0cmF0aW9uLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBvbWl0RW1wdHlBcnJheTogdHJ1ZSB9LFxuICAgICAgKSxcbiAgICAgIC8vIGhlYWx0aF9jaGVjayBpcyBzZXQgaW4gdG9UZXJyYWZvcm0gYXMgaXQgY291bGQgYmUgZW1wdHkgb2JqZWN0XG4gICAgICAvLyBpdCBpcyBDb21wbGV4T2JqZWN0IC0gZG9lc24ndCB3b3JrIHdpdGggSVJlc29sdmFibGVcbiAgICAgIC8vIGhlYWx0aENoZWNrOiBMYXp5LmFueVZhbHVlKHsgLi4ufSksXG4gICAgICBpcEFkZHJlc3NUeXBlOiBiYXNlUHJvcHMuaXBBZGRyZXNzVHlwZSxcblxuICAgICAgLi4uYWRkaXRpb25hbFByb3BzLFxuICAgIH0pO1xuXG4gICAgdGhpcy50YXJnZXRHcm91cExvYWRCYWxhbmNlckFybnMgPSB0aGlzLnJlc291cmNlLmxvYWRCYWxhbmNlckFybnM7XG4gICAgdGhpcy50YXJnZXRHcm91cEFybiA9IHRoaXMucmVzb3VyY2UuYXJuO1xuICAgIC8vdGhpcy5yZXNvdXJjZS5hdHRyVGFyZ2V0R3JvdXBGdWxsTmFtZTtcbiAgICB0aGlzLnRhcmdldEdyb3VwRnVsbE5hbWUgPSB0aGlzLnN0YWNrLnNwbGl0QXJuKFxuICAgICAgdGhpcy5yZXNvdXJjZS5hcm4sXG4gICAgICBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICApLnJlc291cmNlO1xuICAgIHRoaXMubG9hZEJhbGFuY2VyQXJucyA9IHRoaXMucmVzb3VyY2UubG9hZEJhbGFuY2VyQXJucy50b1N0cmluZygpO1xuICAgIHRoaXMudGFyZ2V0R3JvdXBOYW1lID0gdGhpcy5yZXNvdXJjZS5uYW1lO1xuICAgIHRoaXMuZGVmYXVsdFBvcnQgPSBhZGRpdGlvbmFsUHJvcHMucG9ydCA/PyA4MDsgLy8gVE9ETzogVGhpcyBpcyBidWcgaW4gQVdTQ0RLIGFzIGl0IGNhbiBiZSB1bmRlZmluZWQuXG4gICAgdGhpcy5wcm90b2NvbFZlcnNpb24gPSBhZGRpdGlvbmFsUHJvcHM/LnByb3RvY29sVmVyc2lvbjtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHsgdmFsaWRhdGU6ICgpID0+IHRoaXMudmFsaWRhdGVIZWFsdGhDaGVjaygpIH0pO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHsgdmFsaWRhdGU6ICgpID0+IHRoaXMudmFsaWRhdGVUYXJnZXRHcm91cCgpIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY29uc3RydWN0cyB0aGF0IG5lZWQgdG8gYmUgZGVwZW5kZWQgb24gdG8gZW5zdXJlIHRoZSBUYXJnZXRHcm91cCBpcyBhc3NvY2lhdGVkIHRvIGEgbG9hZCBiYWxhbmNlclxuICAgKi9cbiAgcHVibGljIGdldCBsb2FkQmFsYW5jZXJBdHRhY2hlZCgpOiBJRGVwZW5kYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZEJhbGFuY2VyQXR0YWNoZWREZXBlbmRlbmNpZXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L3JlcGxhY2UgdGhlIHRhcmdldCBncm91cCdzIGhlYWx0aCBjaGVja1xuICAgKi9cbiAgcHVibGljIGNvbmZpZ3VyZUhlYWx0aENoZWNrKGhlYWx0aENoZWNrOiBIZWFsdGhDaGVjaykge1xuICAgIHRoaXMuaGVhbHRoQ2hlY2sgPSBoZWFsdGhDaGVjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBBV1MgQ0RLIHNwZWNpZmljIHdheSBvZiBzZXR0aW5nIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGUgb24gdGhlIHRhcmdldCBncm91cFxuICAgKlxuICAgKiBQcmVmZXIgdG8gdXNlIGRlZGljYXRlZCBtZXRob2RzIGxpa2UgYGNvbmZpZ3VyZUhlYWx0aENoZWNrYCBvciBgc2V0QXR0cmlidXRlYFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vbG9hZC1iYWxhbmNlci10YXJnZXQtZ3JvdXBzLmh0bWwjdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzZXRBdHRyaWJ1dGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBsb2FkIGJhbGFuY2luZyB0YXJnZXQgYXMgcGFydCBvZiB0aGlzIGdyb3VwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWRkTG9hZEJhbGFuY2VyVGFyZ2V0KHByb3BzOiBMb2FkQmFsYW5jZXJUYXJnZXRQcm9wcykge1xuICAgIGlmICh0aGlzLnRhcmdldFR5cGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnRhcmdldFR5cGUgIT09IHByb3BzLnRhcmdldFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFscmVhZHkgaGF2ZSBhIG9mIHR5cGUgJyR7dGhpcy50YXJnZXRUeXBlfScsIGFkZGluZyAnJHtwcm9wcy50YXJnZXRUeXBlfSc7IG1ha2UgYWxsIHRhcmdldHMgdGhlIHNhbWUgdHlwZS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXRUeXBlID0gcHJvcHMudGFyZ2V0VHlwZTtcblxuICAgIGlmICh0aGlzLnRhcmdldFR5cGUgPT09IFRhcmdldFR5cGUuTEFNQkRBICYmIHRoaXMudGFyZ2V0c0pzb24ubGVuZ3RoID49IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUYXJnZXRHcm91cCBjYW4gb25seSBjb250YWluIG9uZSBMQU1CREEgdGFyZ2V0LiBDcmVhdGUgYSBuZXcgVGFyZ2V0R3JvdXAuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50YXJnZXRKc29uKSB7XG4gICAgICB0aGlzLnRhcmdldHNKc29uLnB1c2gocHJvcHMudGFyZ2V0SnNvbik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlVGFyZ2V0R3JvdXAoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBpZiAodGhpcy50YXJnZXRUeXBlID09PSB1bmRlZmluZWQgJiYgdGhpcy50YXJnZXRzSnNvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIFwiQGF3cy1jZGsvYXdzLWVsYnYyOnRhcmdldEdyb3VwU3BlY2lmeVRhcmdldFR5cGVGb3JFbXB0eVRhcmdldEdyb3VwXCIsXG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICBcIldoZW4gY3JlYXRpbmcgYW4gZW1wdHkgVGFyZ2V0R3JvdXAsIHlvdSBzaG91bGQgc3BlY2lmeSBhICd0YXJnZXRUeXBlJyAodGhpcyB3YXJuaW5nIG1heSBiZWNvbWUgYW4gZXJyb3IgaW4gdGhlIGZ1dHVyZSkuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldFR5cGUgIT09IFRhcmdldFR5cGUuTEFNQkRBICYmIHRoaXMudnBjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldC5wdXNoKFwiJ3ZwYycgaXMgcmVxdWlyZWQgZm9yIGEgbm9uLUxhbWJkYSBUYXJnZXRHcm91cFwiKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRncm91cC5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLXRhcmdldGdyb3VwLW5hbWVcbiAgICBjb25zdCB0YXJnZXRHcm91cE5hbWUgPSB0aGlzLnJlc291cmNlLm5hbWVJbnB1dDtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh0YXJnZXRHcm91cE5hbWUpICYmIHRhcmdldEdyb3VwTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGFyZ2V0R3JvdXBOYW1lLmxlbmd0aCA+IDMyKSB7XG4gICAgICAgIHJldC5wdXNoKFxuICAgICAgICAgIGBUYXJnZXQgZ3JvdXAgbmFtZTogXCIke3RhcmdldEdyb3VwTmFtZX1cIiBjYW4gaGF2ZSBhIG1heGltdW0gb2YgMzIgY2hhcmFjdGVycy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldEdyb3VwTmFtZS5zdGFydHNXaXRoKFwiLVwiKSB8fCB0YXJnZXRHcm91cE5hbWUuZW5kc1dpdGgoXCItXCIpKSB7XG4gICAgICAgIHJldC5wdXNoKFxuICAgICAgICAgIGBUYXJnZXQgZ3JvdXAgbmFtZTogXCIke3RhcmdldEdyb3VwTmFtZX1cIiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlswLTlhLXotXSskL2kudGVzdCh0YXJnZXRHcm91cE5hbWUpKSB7XG4gICAgICAgIHJldC5wdXNoKFxuICAgICAgICAgIGBUYXJnZXQgZ3JvdXAgbmFtZTogXCIke3RhcmdldEdyb3VwTmFtZX1cIiBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBoeXBoZW5zLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUhlYWx0aENoZWNrKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxTZWNvbmRzID0gdGhpcy5oZWFsdGhDaGVjay5pbnRlcnZhbD8udG9TZWNvbmRzKCk7XG4gICAgY29uc3QgdGltZW91dFNlY29uZHMgPSB0aGlzLmhlYWx0aENoZWNrLnRpbWVvdXQ/LnRvU2Vjb25kcygpO1xuXG4gICAgaWYgKGludGVydmFsU2Vjb25kcyAmJiB0aW1lb3V0U2Vjb25kcykge1xuICAgICAgaWYgKGludGVydmFsU2Vjb25kcyA8IHRpbWVvdXRTZWNvbmRzKSB7XG4gICAgICAgIC8vIDwgaW5zdGVhZCBvZiA8PSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzI2MDMxXG4gICAgICAgIHJldC5wdXNoKFxuICAgICAgICAgIFwiSGVhbHRoIGNoZWNrIGludGVydmFsIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB0aW1lb3V0OyByZWNlaXZlZCBpbnRlcnZhbCBcIiArXG4gICAgICAgICAgICBgJHtpbnRlcnZhbFNlY29uZHN9LCB0aW1lb3V0ICR7dGltZW91dFNlY29uZHN9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwcml2YXRlIGxhenlTdHJpbmdBdHRyKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIExhenkuc3RyaW5nVmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5hdHRyaWJ1dGVzW2tleV0sXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBsYXp5Qm9vbEF0dHIoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTGF6eS5hbnlWYWx1ZSh7XG4gICAgICBwcm9kdWNlOiAoKSA9PiBsb29rdXBCb29sQXR0cmlidXRlKHRoaXMuYXR0cmlidXRlcywga2V5KSxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGxhenlOdW1iZXJBdHRyKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIExhenkubnVtYmVyVmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gbG9va3VwTnVtYmVyQXR0cmlidXRlKHRoaXMuYXR0cmlidXRlcywga2V5KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHJlc291cmNlIHRvIHRoZSB0ZXJyYWZvcm0gSlNPTiBvdXRwdXQuXG4gICAqXG4gICAqIGNhbGxlZCBieSBUZXJyYWZvcm1TdGFjay5wcmVwYXJlU3RhY2soKVxuICAgKi9cbiAgcHVibGljIHRvVGVycmFmb3JtKCk6IGFueSB7XG4gICAgLy8gVE9ETzogU3dpdGNoIGZyb20gcHJvdmlkZXItYXdzIHRvIHByb3ZpZGVyLWF3c2NjIGFuZCB1c2UgTGF6eVZhbHVlP1xuICAgIC8vIGluc3RlYWQgb2YgaW5saW5lIExhenlWYWx1ZSwgd2UgdXNlIHByZXBhcmVTdGFjaygpIHRvIHN5bnRoIGFkZGl0aW9uYWwgcmVzb3VyY2VzXG4gICAgLy8gdGFyZ2V0czogTGF6eS5hbnlWYWx1ZShcbiAgICAvLyAgIHsgcHJvZHVjZTogKCkgPT4gdGhpcy50YXJnZXRzSnNvbiB9LFxuICAgIC8vICAgeyBvbWl0RW1wdHlBcnJheTogdHJ1ZSB9LFxuICAgIC8vICksXG5cbiAgICAvLyBwdXQgcHV0U3RpY2tpbmVzcyBpZiBhdHRyaWJ1dGVzIGFyZSBzZXRcbiAgICBjb25zdCBzdGlja2luZXNzRW5hYmxlZCA9IGxvb2t1cEJvb2xBdHRyaWJ1dGUoXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICBBdHRyaWJ1dGUuc3RpY2tpbmVzc0VuYWJsZWQsXG4gICAgKTtcbiAgICBjb25zdCBzdGlja2luZXNzQXBwQ29va2llRHVyYXRpb24gPSBsb29rdXBOdW1iZXJBdHRyaWJ1dGUoXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICBBdHRyaWJ1dGUuc3RpY2tpbmVzc0FwcENvb2tpZUR1cmF0aW9uU2Vjb25kcyxcbiAgICApO1xuICAgIGNvbnN0IHN0aWNraW5lc3NMQkNvb2tpZUR1cmF0aW9uID0gbG9va3VwTnVtYmVyQXR0cmlidXRlKFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgQXR0cmlidXRlLnN0aWNraW5lc3NMQkNvb2tpZUR1cmF0aW9uU2Vjb25kcyxcbiAgICApO1xuICAgIGNvbnN0IHN0aWNraW5lc3NDb29raWVOYW1lID0gbG9va3VwU3RyaW5nQXR0cmlidXRlKFxuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgQXR0cmlidXRlLnN0aWNraW5lc3NBcHBDb29raWVDb29raWVOYW1lLFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgKHN0aWNraW5lc3NFbmFibGVkICE9PSB1bmRlZmluZWQgJiYgc3RpY2tpbmVzc0VuYWJsZWQgIT09IGZhbHNlKSB8fFxuICAgICAgc3RpY2tpbmVzc0FwcENvb2tpZUR1cmF0aW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHN0aWNraW5lc3NMQkNvb2tpZUR1cmF0aW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICAgIHN0aWNraW5lc3NDb29raWVOYW1lICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIHBvc3NpYmxlIHZhbHVlcyBmb3IgQUxCIGFyZSBgbGJfY29va2llYCBvciBgYXBwX2Nvb2tpZWBcbiAgICAgIC8vIG9ubHkgcG9zc2libGUgdmFsdWUgZm9yIE5MQiBpcyBgc291cmNlX2lwYFxuICAgICAgLy8gcG9zc2libGUgdmFsdWVzIGZvciBHV0xCIGFyZSBgc291cmNlX2lwX2Rlc3RfaXBgIG9yIGBzb3VyY2VfaXBfZGVzdF9pcF9wcm90b2BcbiAgICAgIGNvbnN0IHR5cGUgPSBsb29rdXBTdHJpbmdBdHRyaWJ1dGUoXG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgQXR0cmlidXRlLnN0aWNraW5lc3NUeXBlLFxuICAgICAgKTtcbiAgICAgIC8vIHRmIHJlcXVpcmVzIHR5cGUgdG8gYmUgc2V0XG4gICAgICBpZiAoIXR5cGUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcInN0aWNraW5lc3MudHlwZSBpcyByZXF1aXJlZCBpZiBhbnkgc3RpY2tpbmVzcyBhdHRyaWJ1dGUgaXMgc2V0XCIsXG4gICAgICAgICk7XG4gICAgICB0aGlzLnJlc291cmNlLnB1dFN0aWNraW5lc3Moe1xuICAgICAgICB0eXBlLFxuICAgICAgICBlbmFibGVkOiBsb29rdXBCb29sQXR0cmlidXRlKFxuICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICBBdHRyaWJ1dGUuc3RpY2tpbmVzc0VuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGNvb2tpZUR1cmF0aW9uOlxuICAgICAgICAgIHR5cGUgPT09IFwibGJfY29va2llXCJcbiAgICAgICAgICAgID8gc3RpY2tpbmVzc0xCQ29va2llRHVyYXRpb25cbiAgICAgICAgICAgIDogc3RpY2tpbmVzc0FwcENvb2tpZUR1cmF0aW9uLFxuICAgICAgICAvLyBhcHBfY29va2llIGF0dHJpYnV0ZXNcbiAgICAgICAgY29va2llTmFtZTogbG9va3VwU3RyaW5nQXR0cmlidXRlKFxuICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICBBdHRyaWJ1dGUuc3RpY2tpbmVzc0FwcENvb2tpZUNvb2tpZU5hbWUsXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgSFRUUCBvciBnUlBDIGNvZGVzIHRvIHVzZSB3aGVuIGNoZWNraW5nIGZvciBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBhIHRhcmdldC5cbiAgICAgKiBUaGUgYGhlYWx0aF9jaGVjay5wcm90b2NvbGAgbXVzdCBiZSBvbmUgb2YgSFRUUCBvciBIVFRQUyBvciB0aGUgYHRhcmdldF90eXBlYCBtdXN0IGJlIGxhbWJkYS5cbiAgICAgKiBWYWx1ZXMgY2FuIGJlIGNvbW1hLXNlcGFyYXRlZCBpbmRpdmlkdWFsIHZhbHVlcyAoZS5nLiwgXCIyMDAsMjAyXCIpIG9yIGEgcmFuZ2Ugb2ZcbiAgICAgKiB2YWx1ZXMgKGUuZy4sIFwiMjAwLTI5OVwiKS5cbiAgICAgKlxuICAgICAqIC0gRm9yIGdSUEMtYmFzZWQgdGFyZ2V0IGdyb3VwcyAoaS5lLiwgdGhlIHByb3RvY29sIGlzIG9uZSBvZiBIVFRQIG9yIEhUVFBTIGFuZCB0aGVcbiAgICAgKiAgIGBwcm90b2NvbF92ZXJzaW9uYCBpcyBHUlBDKSwgdmFsdWVzIGNhbiBiZSBiZXR3ZWVuIDAgYW5kIDk5LiBUaGUgZGVmYXVsdCBpcyAxMi5cbiAgICAgKiAtIFdoZW4gdXNlZCB3aXRoIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgKGkuZS4sIHRoZSBwcm90b2NvbCBpcyBvbmUgb2YgSFRUUFxuICAgICAqICAgb3IgSFRUUFMgYW5kIHRoZSBgcHJvdG9jb2xfdmVyc2lvbmAgaXMgbm90IEdSUEMpLCB2YWx1ZXMgY2FuIGJlIGJldHdlZW4gMjAwIGFuZCA0OTkuXG4gICAgICogICBUaGUgZGVmYXVsdCBpcyAyMDAuXG4gICAgICogLSBXaGVuIHVzZWQgd2l0aCBhIE5ldHdvcmsgTG9hZCBCYWxhbmNlciAoaS5lLiwgdGhlIHByb3RvY29sIGlzIG9uZSBvZiBUQ1AsIFRDUF9VRFAsIFVEUCwgb3IgVExTKSxcbiAgICAgKiAgIHZhbHVlcyBjYW4gYmUgYmV0d2VlbiAyMDAgYW5kIDU5OS4gVGhlIGRlZmF1bHQgaXMgMjAwLTM5OS5cbiAgICAgKiAtIFdoZW4gdGhlIHRhcmdldF90eXBlIGlzIGxhbWJkYSwgdmFsdWVzIGNhbiBiZSBiZXR3ZWVuIDIwMCBhbmQgNDk5LiBUaGUgZGVmYXVsdCBpcyAyMDAuXG4gICAgICpcbiAgICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuODguMC9kb2NzL3Jlc291cmNlcy9sYl90YXJnZXRfZ3JvdXAjbWF0Y2hlci0xIExiVGFyZ2V0R3JvdXAjbWF0Y2hlcn1cbiAgICAgKi9cbiAgICBsZXQgbWF0Y2hlciA9IHRoaXMuaGVhbHRoQ2hlY2s/LmhlYWx0aHlIdHRwQ29kZXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wcm90b2NvbFZlcnNpb24gPT09IFwiR1JQQ1wiICYmXG4gICAgICB0aGlzLmhlYWx0aENoZWNrPy5oZWFsdGh5R3JwY0NvZGVzICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIG1hdGNoZXIgPSB0aGlzLmhlYWx0aENoZWNrLmhlYWx0aHlHcnBjQ29kZXM7XG4gICAgfVxuXG4gICAgLy8gcHV0IEhlYWx0aENoZWNrIGlmIGF0dHJpYnV0ZXMgYXJlIHNldFxuICAgIHRoaXMucmVzb3VyY2UucHV0SGVhbHRoQ2hlY2soe1xuICAgICAgZW5hYmxlZDogdGhpcy5oZWFsdGhDaGVjaz8uZW5hYmxlZCxcbiAgICAgIGludGVydmFsOiB0aGlzLmhlYWx0aENoZWNrPy5pbnRlcnZhbD8udG9TZWNvbmRzKCksXG4gICAgICBwYXRoOiB0aGlzLmhlYWx0aENoZWNrPy5wYXRoLFxuICAgICAgcG9ydDogdGhpcy5oZWFsdGhDaGVjaz8ucG9ydCxcbiAgICAgIHByb3RvY29sOiB0aGlzLmhlYWx0aENoZWNrPy5wcm90b2NvbCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuaGVhbHRoQ2hlY2s/LnRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgaGVhbHRoeVRocmVzaG9sZDogdGhpcy5oZWFsdGhDaGVjaz8uaGVhbHRoeVRocmVzaG9sZENvdW50LFxuICAgICAgdW5oZWFsdGh5VGhyZXNob2xkOiB0aGlzLmhlYWx0aENoZWNrPy51bmhlYWx0aHlUaHJlc2hvbGRDb3VudCxcbiAgICAgIG1hdGNoZXIsXG4gICAgfSk7XG5cbiAgICAvLyBwdXQgdGFyZ2V0R3JvdXBIZWFsdGggaWYgYXR0cmlidXRlcyBhcmUgc2V0XG4gICAgY29uc3QgZG5zRmFpbG92ZXI6IHRmVGFyZ2V0R3JvdXAuTGJUYXJnZXRHcm91cFRhcmdldEdyb3VwSGVhbHRoRG5zRmFpbG92ZXIgPVxuICAgICAge1xuICAgICAgICBtaW5pbXVtSGVhbHRoeVRhcmdldHNDb3VudDogbG9va3VwU3RyaW5nQXR0cmlidXRlKFxuICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgICAgICBBdHRyaWJ1dGUudGFyZ2V0R3JvdXBIZWFsdGhETlNGYWlsb3Zlck1pbmltdW1IZWFsdGh5VGFyZ2V0c0NvdW50LFxuICAgICAgICApLFxuICAgICAgICBtaW5pbXVtSGVhbHRoeVRhcmdldHNQZXJjZW50YWdlOiBsb29rdXBTdHJpbmdBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRHcm91cEhlYWx0aEROU0ZhaWxvdmVyTWluaW11bUhlYWx0aHlUYXJnZXRzUGVyY2VudGFnZSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY29uc3QgdW5oZWFsdGh5U3RhdGVSb3V0aW5nOiB0ZlRhcmdldEdyb3VwLkxiVGFyZ2V0R3JvdXBUYXJnZXRHcm91cEhlYWx0aFVuaGVhbHRoeVN0YXRlUm91dGluZyA9XG4gICAgICB7XG4gICAgICAgIG1pbmltdW1IZWFsdGh5VGFyZ2V0c0NvdW50OiBsb29rdXBOdW1iZXJBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRHcm91cEhlYWx0aFVuaGVhbHRoeVN0YXRlUm91dGluZ01pbmltdW1IZWFsdGh5VGFyZ2V0c0NvdW50LFxuICAgICAgICApLFxuICAgICAgICBtaW5pbXVtSGVhbHRoeVRhcmdldHNQZXJjZW50YWdlOiBsb29rdXBTdHJpbmdBdHRyaWJ1dGUoXG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgICAgIEF0dHJpYnV0ZS50YXJnZXRHcm91cEhlYWx0aFVuaGVhbHRoeVN0YXRlUm91dGluZ01pbmltdW1IZWFsdGh5VGFyZ2V0c1BlcmNlbnRhZ2UsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIHRoaXMucmVzb3VyY2UucHV0VGFyZ2V0R3JvdXBIZWFsdGgoe1xuICAgICAgZG5zRmFpbG92ZXIsIC8vIFRPRE86IHNob3VsZCBiZSB1bmRlZmluZWQgaWYgYWxsIG9iamVjdCBrZXlzIGFyZSB1bmRlZmluZWRcbiAgICAgIHVuaGVhbHRoeVN0YXRlUm91dGluZywgLy8gVE9ETzogc2hvdWxkIGJlIHVuZGVmaW5lZCBpZiBhbGwgb2JqZWN0IGtleXMgYXJlIHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIGxiVGFyZ2V0R3JvdXBBdHRhY2htZW50IHJlc291cmNlIGZvciBlYWNoIHRhcmdldFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YXJnZXRzSnNvbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSBgQXR0YWNobWVudCR7aX1gO1xuICAgICAgLy8gVE9ETzogSWRlYWxseSB3ZSBzaG91bGQgaGF2ZSB1c2VkIElSZXNvbHZhYmxlLnJlc29sdmUgYW5kIHVzZSB0aGUgSVJlc29sdmVDb250ZXh0LnByZXBhcmluZyBmbGFnXG4gICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1pYW0vbGliL3BvbGljeS1kb2N1bWVudC50cyNMNDhcbiAgICAgIGlmICh0aGlzLm5vZGUudHJ5RmluZENoaWxkKGlkKSkgY29udGludWU7IC8vIGlnbm9yZSBpZiBhbHJlYWR5IGdlbmVyYXRlZFxuXG4gICAgICBuZXcgdGZUYXJnZXRHcm91cEF0dGFjaG1lbnQuTGJUYXJnZXRHcm91cEF0dGFjaG1lbnQodGhpcywgaWQsIHtcbiAgICAgICAgdGFyZ2V0R3JvdXBBcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgICB0YXJnZXRJZDogdGhpcy50YXJnZXRzSnNvbltpXS50YXJnZXRJZCxcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy50YXJnZXRzSnNvbltpXS5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICBwb3J0OiB0aGlzLnRhcmdldHNKc29uW2ldLnBvcnQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byByZWZlcmVuY2UgYW4gZXhpc3RpbmcgdGFyZ2V0IGdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiB0aGUgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb3J0IHRhcmdldCBncm91cCBpcyBsaXN0ZW5pbmcgb25cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIHByb3BlcnR5IGlzIHVudXNlZCBhbmQgdGhlIHdyb25nIHR5cGUuIE5vIG5lZWQgdG8gdXNlIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFBvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVG9rZW4gcmVwcmVzZW50aW5nIHRoZSBsaXN0IG9mIEFSTnMgZm9yIHRoZSBsb2FkIGJhbGFuY2VyIHJvdXRpbmcgdG8gdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckFybnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byByZWZlcmVuY2UgYW4gZXhpc3RpbmcgdGFyZ2V0IGdyb3VwXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIFRhcmdldEdyb3VwQXR0cmlidXRlcyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFyZ2V0R3JvdXBJbXBvcnRQcm9wcyBleHRlbmRzIFRhcmdldEdyb3VwQXR0cmlidXRlcyB7fVxuXG4vKipcbiAqIEEgdGFyZ2V0IGdyb3VwXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRhcmdldEdyb3VwIGV4dGVuZHMgSUNvbnN0cnVjdCB7XG4gIC8vIFRPRE86IEV4dGVuZCBJQXdzQ29uc3RydWN0IGluc3RlYWQ/XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQVJOIG9mIHRoZSB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgdG9rZW4gcmVwcmVzZW50aW5nIGEgbGlzdCBvZiBBUk5zIG9mIHRoZSBsb2FkIGJhbGFuY2VycyB0aGF0IHJvdXRlIHRyYWZmaWMgdG8gdGhpcyB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckFybnM6IHN0cmluZztcblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9iamVjdCB0byBkZXBlbmQgb24gdGhlIGxpc3RlbmVycyBhZGRlZCB0byB0aGlzIHRhcmdldCBncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXR0YWNoZWQ6IElEZXBlbmRhYmxlO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhdHRhY2hpbmcgYSB0YXJnZXQgdG8gbG9hZCBiYWxhbmNlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclRhcmdldFByb3BzIHtcbiAgLyoqXG4gICAqIFdoYXQga2luZCBvZiB0YXJnZXQgdGhpcyBpc1xuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0VHlwZTogVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogSlNPTiByZXByZXNlbnRpbmcgdGhlIHRhcmdldCdzIGRpcmVjdCBhZGRpdGlvbiB0byB0aGUgVGFyZ2V0R3JvdXAgbGlzdFxuICAgKlxuICAgKiBNYXkgYmUgb21pdHRlZCBpZiB0aGUgdGFyZ2V0IGlzIGdvaW5nIHRvIHJlZ2lzdGVyIGl0c2VsZiBsYXRlci5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEpzb24/OiBMYlRhcmdldEdyb3VwQXR0YWNobWVudENvbmZpZztcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBmdWxsIGxvYWQgYmFsYW5jZXIgbmFtZSAodXNlZCBmb3IgbWV0cmljcykgZnJvbSB0aGUgbGlzdGVuZXIgQVJOOlxuICpcbiAqIFR1cm5zXG4gKlxuICogICAgIGFybjphd3M6ZWxhc3RpY2xvYWRiYWxhbmNpbmc6dXMtd2VzdC0yOjEyMzQ1Njc4OTAxMjpsaXN0ZW5lci9hcHAvbXktbG9hZC1iYWxhbmNlci81MGRjNmM0OTVjMGM5MTg4L2YyZjdkYzhlZmM1MjJhYjJcbiAqXG4gKiBJbnRvXG4gKlxuICogICAgIGFwcC9teS1sb2FkLWJhbGFuY2VyLzUwZGM2YzQ5NWMwYzkxODhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRCYWxhbmNlck5hbWVGcm9tTGlzdGVuZXJBcm4obGlzdGVuZXJBcm46IHN0cmluZykge1xuICBjb25zdCBhcm5QYXJ0cyA9IEZuLnNwbGl0KFwiL1wiLCBsaXN0ZW5lckFybik7XG4gIHJldHVybiBgJHtGbi5lbGVtZW50KGFyblBhcnRzLCAxKX0vJHtGbi5lbGVtZW50KGFyblBhcnRzLCAyKX0vJHtGbi5lbGVtZW50KGFyblBhcnRzLCAzKX1gO1xufVxuIl19