terraconstructs 0.1.7 → 0.1.9

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 (297) hide show
  1. package/.jsii +1602 -1223
  2. package/go.mod +83 -77
  3. package/go.sum +175 -159
  4. package/lib/asset-staging.js +1 -1
  5. package/lib/aws/arn.js +1 -1
  6. package/lib/aws/aws-asset-manager.js +1 -1
  7. package/lib/aws/aws-construct.js +1 -1
  8. package/lib/aws/aws-stack.js +1 -1
  9. package/lib/aws/aws-tags.js +2 -2
  10. package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
  11. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  12. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  13. package/lib/aws/cloudwatch/actions/sns.js +1 -1
  14. package/lib/aws/cloudwatch/actions/ssm.js +2 -2
  15. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  16. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  17. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  18. package/lib/aws/cloudwatch/alarm.js +9 -8
  19. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  20. package/lib/aws/cloudwatch/dashboard.js +1 -1
  21. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  22. package/lib/aws/cloudwatch/graph.js +8 -8
  23. package/lib/aws/cloudwatch/layout.js +3 -3
  24. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  25. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  26. package/lib/aws/cloudwatch/log-group.js +1 -1
  27. package/lib/aws/cloudwatch/log-query.js +1 -1
  28. package/lib/aws/cloudwatch/log-stream.js +1 -1
  29. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  30. package/lib/aws/cloudwatch/metric.js +2 -2
  31. package/lib/aws/cloudwatch/pattern.js +3 -3
  32. package/lib/aws/cloudwatch/policy.js +1 -1
  33. package/lib/aws/cloudwatch/query-definition.js +2 -2
  34. package/lib/aws/cloudwatch/stats.js +1 -1
  35. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  36. package/lib/aws/cloudwatch/text.js +1 -1
  37. package/lib/aws/cloudwatch/variable.js +3 -3
  38. package/lib/aws/cloudwatch/widget.js +1 -1
  39. package/lib/aws/compute/access-log.js +9 -7
  40. package/lib/aws/compute/activity.js +1 -1
  41. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  42. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  43. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  44. package/lib/aws/compute/alb/application-listener.js +1 -1
  45. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  46. package/lib/aws/compute/alb/application-target-group.js +1 -1
  47. package/lib/aws/compute/alb/conditions.js +1 -1
  48. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  49. package/lib/aws/compute/alb/trust-store.js +1 -1
  50. package/lib/aws/compute/api-definition.d.ts +1 -1
  51. package/lib/aws/compute/api-definition.js +11 -16
  52. package/lib/aws/compute/api-key.js +7 -8
  53. package/lib/aws/compute/apigateway-util.js +10 -21
  54. package/lib/aws/compute/architecture.js +1 -1
  55. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  56. package/lib/aws/compute/authorizer.js +1 -1
  57. package/lib/aws/compute/authorizers/identity-source.js +4 -5
  58. package/lib/aws/compute/authorizers/lambda.js +8 -11
  59. package/lib/aws/compute/autoscaling-common/interval-utils.js +7 -11
  60. package/lib/aws/compute/base-path-mapping.js +6 -8
  61. package/lib/aws/compute/base-scalable-attribute.js +1 -1
  62. package/lib/aws/compute/bastion-host.js +1 -1
  63. package/lib/aws/compute/chain.js +1 -1
  64. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  65. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  66. package/lib/aws/compute/client-vpn-route.js +2 -2
  67. package/lib/aws/compute/code.js +23 -40
  68. package/lib/aws/compute/condition.js +1 -1
  69. package/lib/aws/compute/connections.js +1 -1
  70. package/lib/aws/compute/cors.js +1 -1
  71. package/lib/aws/compute/deployment.js +1 -1
  72. package/lib/aws/compute/domain-name.js +9 -8
  73. package/lib/aws/compute/event-invoke-config.js +1 -1
  74. package/lib/aws/compute/event-source-filter.js +2 -2
  75. package/lib/aws/compute/event-source-mapping.js +1 -1
  76. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  77. package/lib/aws/compute/event-sources/s3.js +1 -1
  78. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  79. package/lib/aws/compute/event-sources/sqs.js +1 -1
  80. package/lib/aws/compute/fields.js +4 -4
  81. package/lib/aws/compute/function-alias.js +1 -1
  82. package/lib/aws/compute/function-base.js +12 -12
  83. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  84. package/lib/aws/compute/function-destinations/function.js +1 -1
  85. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  86. package/lib/aws/compute/function-nodejs/function.js +1 -1
  87. package/lib/aws/compute/function-url.js +1 -1
  88. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  89. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  90. package/lib/aws/compute/function.js +4 -3
  91. package/lib/aws/compute/gateway-response.js +2 -2
  92. package/lib/aws/compute/handler.js +1 -1
  93. package/lib/aws/compute/instance-types.js +1 -1
  94. package/lib/aws/compute/instance.js +1 -1
  95. package/lib/aws/compute/integration.js +10 -16
  96. package/lib/aws/compute/integrations/aws.js +4 -4
  97. package/lib/aws/compute/integrations/http.js +1 -1
  98. package/lib/aws/compute/integrations/lambda.js +1 -1
  99. package/lib/aws/compute/integrations/mock.js +1 -1
  100. package/lib/aws/compute/integrations/stepfunctions.js +4 -5
  101. package/lib/aws/compute/ip-addresses.js +2 -2
  102. package/lib/aws/compute/ipam.js +1 -1
  103. package/lib/aws/compute/key-pair.js +1 -1
  104. package/lib/aws/compute/lambda-api.js +7 -10
  105. package/lib/aws/compute/launch-template.js +2 -2
  106. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  107. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  108. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  109. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +37 -31
  110. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
  111. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +10 -4
  112. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
  113. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  114. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  115. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  116. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  117. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  118. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  119. package/lib/aws/compute/load-balancer.js +3 -3
  120. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  121. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  122. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  123. package/lib/aws/compute/machine-image/common.js +1 -1
  124. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  125. package/lib/aws/compute/method.js +1 -1
  126. package/lib/aws/compute/model.js +3 -3
  127. package/lib/aws/compute/nat.js +5 -5
  128. package/lib/aws/compute/network-acl-types.js +2 -2
  129. package/lib/aws/compute/network-acl.js +3 -3
  130. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  131. package/lib/aws/compute/nlb/network-listener.js +1 -1
  132. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  133. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  134. package/lib/aws/compute/peer.js +1 -1
  135. package/lib/aws/compute/placement-group.js +1 -1
  136. package/lib/aws/compute/port.js +1 -1
  137. package/lib/aws/compute/prefix-list.js +1 -1
  138. package/lib/aws/compute/requestvalidator.js +1 -1
  139. package/lib/aws/compute/resource.js +3 -3
  140. package/lib/aws/compute/restapi.js +9 -10
  141. package/lib/aws/compute/route.js +10 -10
  142. package/lib/aws/compute/runtime.d.ts +8 -0
  143. package/lib/aws/compute/runtime.js +20 -7
  144. package/lib/aws/compute/scalable-target.js +1 -1
  145. package/lib/aws/compute/schedule.js +6 -12
  146. package/lib/aws/compute/security-group.js +1 -1
  147. package/lib/aws/compute/stage.js +8 -11
  148. package/lib/aws/compute/state-graph.js +1 -1
  149. package/lib/aws/compute/state-machine-fragment.js +1 -1
  150. package/lib/aws/compute/state-machine.js +4 -4
  151. package/lib/aws/compute/states/choice.js +1 -1
  152. package/lib/aws/compute/states/custom-state.js +1 -1
  153. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  154. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  155. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  156. package/lib/aws/compute/states/distributed-map.js +1 -1
  157. package/lib/aws/compute/states/fail.js +1 -1
  158. package/lib/aws/compute/states/map-base.js +1 -1
  159. package/lib/aws/compute/states/map.js +1 -1
  160. package/lib/aws/compute/states/parallel.js +1 -1
  161. package/lib/aws/compute/states/pass.js +2 -2
  162. package/lib/aws/compute/states/state.js +1 -1
  163. package/lib/aws/compute/states/succeed.js +1 -1
  164. package/lib/aws/compute/states/task-base.js +2 -2
  165. package/lib/aws/compute/states/task.js +1 -1
  166. package/lib/aws/compute/states/wait.js +2 -2
  167. package/lib/aws/compute/step-scaling-action.js +1 -1
  168. package/lib/aws/compute/step-scaling-policy.js +9 -14
  169. package/lib/aws/compute/stepfunctions-api.js +5 -6
  170. package/lib/aws/compute/subnet-v2.js +2 -2
  171. package/lib/aws/compute/subnet.js +1 -1
  172. package/lib/aws/compute/target-tracking-scaling-policy.js +9 -12
  173. package/lib/aws/compute/task-credentials.js +1 -1
  174. package/lib/aws/compute/task-input.js +1 -1
  175. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  176. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  177. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  178. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  179. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  180. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  181. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  182. package/lib/aws/compute/types.js +1 -1
  183. package/lib/aws/compute/usage-plan.js +1 -1
  184. package/lib/aws/compute/user-data.js +3 -3
  185. package/lib/aws/compute/volume.js +2 -2
  186. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  187. package/lib/aws/compute/vpc-endpoint.js +6 -6
  188. package/lib/aws/compute/vpc-flow-logs.js +8 -6
  189. package/lib/aws/compute/vpc-link.js +1 -1
  190. package/lib/aws/compute/vpc-v2-base.js +1 -1
  191. package/lib/aws/compute/vpc-v2.js +2 -2
  192. package/lib/aws/compute/vpc.js +4 -4
  193. package/lib/aws/compute/vpn.js +3 -3
  194. package/lib/aws/edge/certificate.js +1 -1
  195. package/lib/aws/edge/distribution.js +3 -3
  196. package/lib/aws/edge/dns-alias-record-targets.js +6 -6
  197. package/lib/aws/edge/dns-record.js +13 -13
  198. package/lib/aws/edge/dns-zone.d.ts +1 -1
  199. package/lib/aws/edge/dns-zone.js +8 -7
  200. package/lib/aws/edge/function.js +2 -2
  201. package/lib/aws/edge/key-value-store.js +4 -4
  202. package/lib/aws/edge/origin.js +3 -3
  203. package/lib/aws/edge/response-headers-policy.js +1 -1
  204. package/lib/aws/encryption/alias.js +1 -1
  205. package/lib/aws/encryption/key.js +1 -1
  206. package/lib/aws/encryption/via-service-principal.js +1 -1
  207. package/lib/aws/iam/grant.js +2 -2
  208. package/lib/aws/iam/group.js +1 -1
  209. package/lib/aws/iam/instance-profile.js +1 -1
  210. package/lib/aws/iam/managed-policy.js +1 -1
  211. package/lib/aws/iam/oidc-provider.js +1 -1
  212. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  213. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  214. package/lib/aws/iam/policy-document.js +1 -1
  215. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  216. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  217. package/lib/aws/iam/policy-statement.js +1 -1
  218. package/lib/aws/iam/policy.js +1 -1
  219. package/lib/aws/iam/principals.js +20 -20
  220. package/lib/aws/iam/role.js +1 -1
  221. package/lib/aws/iam/saml-provider.js +2 -2
  222. package/lib/aws/iam/unknown-principal.js +1 -1
  223. package/lib/aws/iam/user.js +1 -1
  224. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  225. package/lib/aws/network/subnet-group.js +3 -3
  226. package/lib/aws/network/subnet.js +4 -4
  227. package/lib/aws/notify/archive.js +1 -1
  228. package/lib/aws/notify/connection.js +3 -3
  229. package/lib/aws/notify/event-bus.d.ts +19 -0
  230. package/lib/aws/notify/event-bus.js +22 -26
  231. package/lib/aws/notify/event-pattern.js +1 -1
  232. package/lib/aws/notify/input.js +2 -2
  233. package/lib/aws/notify/kinesis-stream.js +1 -1
  234. package/lib/aws/notify/notification-rule.js +1 -1
  235. package/lib/aws/notify/policy.js +1 -1
  236. package/lib/aws/notify/queue-config.generated.d.ts +18 -12
  237. package/lib/aws/notify/queue-config.generated.js +1 -1
  238. package/lib/aws/notify/queue-policy.js +1 -1
  239. package/lib/aws/notify/queue.js +1 -1
  240. package/lib/aws/notify/resource-policy.js +1 -1
  241. package/lib/aws/notify/rule.js +1 -1
  242. package/lib/aws/notify/schedule.js +1 -1
  243. package/lib/aws/notify/subscription-filter.js +7 -8
  244. package/lib/aws/notify/subscription.js +23 -25
  245. package/lib/aws/notify/subscriptions/email.js +1 -1
  246. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  247. package/lib/aws/notify/subscriptions/sms.js +1 -1
  248. package/lib/aws/notify/subscriptions/sqs.js +1 -1
  249. package/lib/aws/notify/subscriptions/url.js +1 -1
  250. package/lib/aws/notify/targets/event-bus.js +1 -1
  251. package/lib/aws/notify/targets/function.js +1 -1
  252. package/lib/aws/notify/targets/log-group.js +2 -2
  253. package/lib/aws/notify/targets/sqs.js +1 -1
  254. package/lib/aws/notify/targets/state-machine.js +1 -1
  255. package/lib/aws/notify/topic-base.js +4 -4
  256. package/lib/aws/notify/topic.js +1 -1
  257. package/lib/aws/provider-config.generated.d.ts +41 -33
  258. package/lib/aws/provider-config.generated.js +1 -1
  259. package/lib/aws/storage/assets/image-asset.js +8 -12
  260. package/lib/aws/storage/assets/s3.js +4 -4
  261. package/lib/aws/storage/auth-token.js +2 -2
  262. package/lib/aws/storage/billing.js +1 -1
  263. package/lib/aws/storage/bucket-notifications.js +1 -1
  264. package/lib/aws/storage/bucket-policy.js +1 -1
  265. package/lib/aws/storage/bucket-source.js +1 -1
  266. package/lib/aws/storage/bucket.js +2 -2
  267. package/lib/aws/storage/capacity.js +1 -1
  268. package/lib/aws/storage/cors-config.generated.d.ts +9 -3
  269. package/lib/aws/storage/cors-config.generated.js +1 -1
  270. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  271. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  272. package/lib/aws/storage/ecr-repository.js +19 -32
  273. package/lib/aws/storage/encryption.js +1 -1
  274. package/lib/aws/storage/lifecycle-config.generated.d.ts +7 -7
  275. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  276. package/lib/aws/storage/notification-targets/function.js +1 -1
  277. package/lib/aws/storage/notification-targets/queue.js +1 -1
  278. package/lib/aws/storage/origin-access-identity.js +1 -1
  279. package/lib/aws/storage/parameter.js +2 -2
  280. package/lib/aws/storage/table.js +50 -101
  281. package/lib/aws/storage/website-config.generated.d.ts +11 -5
  282. package/lib/aws/storage/website-config.generated.js +1 -1
  283. package/lib/bundling.js +7 -6
  284. package/lib/construct-base.js +2 -2
  285. package/lib/duration.js +1 -1
  286. package/lib/errors.js +5 -3
  287. package/lib/expiration.js +1 -1
  288. package/lib/fs/ignore.js +4 -4
  289. package/lib/fs/index.js +1 -1
  290. package/lib/index.d.ts +1 -0
  291. package/lib/index.js +2 -1
  292. package/lib/private/asset-staging.js +3 -2
  293. package/lib/size.js +1 -1
  294. package/lib/stack-base.js +1 -1
  295. package/lib/terra-func.js +1 -1
  296. package/lib/time-zone.js +1 -1
  297. package/package.json +3 -3
@@ -63,7 +63,7 @@ class EgressOnlyInternetGateway extends aws_construct_1.AwsConstructBase {
63
63
  }
64
64
  exports.EgressOnlyInternetGateway = EgressOnlyInternetGateway;
65
65
  _a = JSII_RTTI_SYMBOL_1;
66
- EgressOnlyInternetGateway[_a] = { fqn: "terraconstructs.aws.compute.alpha.EgressOnlyInternetGateway", version: "0.1.7" };
66
+ EgressOnlyInternetGateway[_a] = { fqn: "terraconstructs.aws.compute.alpha.EgressOnlyInternetGateway", version: "0.1.9" };
67
67
  /**
68
68
  * Creates an internet gateway
69
69
  * @resource AWS::EC2::InternetGateway
@@ -96,7 +96,7 @@ class InternetGateway extends aws_construct_1.AwsConstructBase {
96
96
  }
97
97
  exports.InternetGateway = InternetGateway;
98
98
  _b = JSII_RTTI_SYMBOL_1;
99
- InternetGateway[_b] = { fqn: "terraconstructs.aws.compute.alpha.InternetGateway", version: "0.1.7" };
99
+ InternetGateway[_b] = { fqn: "terraconstructs.aws.compute.alpha.InternetGateway", version: "0.1.9" };
100
100
  /**
101
101
  * Creates a virtual private gateway
102
102
  * @resource AWS::EC2::VPNGateway
@@ -162,7 +162,7 @@ class VPNGatewayV2 extends aws_construct_1.AwsConstructBase {
162
162
  }
163
163
  exports.VPNGatewayV2 = VPNGatewayV2;
164
164
  _c = JSII_RTTI_SYMBOL_1;
165
- VPNGatewayV2[_c] = { fqn: "terraconstructs.aws.compute.alpha.VPNGatewayV2", version: "0.1.7" };
165
+ VPNGatewayV2[_c] = { fqn: "terraconstructs.aws.compute.alpha.VPNGatewayV2", version: "0.1.9" };
166
166
  /**
167
167
  * Creates a network address translation (NAT) gateway
168
168
  * @resource AWS::EC2::NatGateway
@@ -196,7 +196,7 @@ class NatGateway extends aws_construct_1.AwsConstructBase {
196
196
  if (this.connectivityType === NatConnectivityType.PUBLIC) {
197
197
  if (!props.allocationId) {
198
198
  const eip = new provider_aws_1.eip.Eip(this, "EIP", {
199
- domain: props.vpc?.vpcId,
199
+ domain: "vpc",
200
200
  });
201
201
  aId = eip.allocationId;
202
202
  }
@@ -231,7 +231,7 @@ class NatGateway extends aws_construct_1.AwsConstructBase {
231
231
  }
232
232
  exports.NatGateway = NatGateway;
233
233
  _d = JSII_RTTI_SYMBOL_1;
234
- NatGateway[_d] = { fqn: "terraconstructs.aws.compute.alpha.NatGateway", version: "0.1.7" };
234
+ NatGateway[_d] = { fqn: "terraconstructs.aws.compute.alpha.NatGateway", version: "0.1.9" };
235
235
  /**
236
236
  * Creates a peering connection between two VPCs
237
237
  * @resource AWS::EC2::VPCPeeringConnection
@@ -319,7 +319,7 @@ class VPCPeeringConnection extends aws_construct_1.AwsConstructBase {
319
319
  }
320
320
  exports.VPCPeeringConnection = VPCPeeringConnection;
321
321
  _e = JSII_RTTI_SYMBOL_1;
322
- VPCPeeringConnection[_e] = { fqn: "terraconstructs.aws.compute.alpha.VPCPeeringConnection", version: "0.1.7" };
322
+ VPCPeeringConnection[_e] = { fqn: "terraconstructs.aws.compute.alpha.VPCPeeringConnection", version: "0.1.9" };
323
323
  /**
324
324
  * The gateway or endpoint targeted by the route.
325
325
  */
@@ -337,7 +337,7 @@ class RouteTargetType {
337
337
  }
338
338
  exports.RouteTargetType = RouteTargetType;
339
339
  _f = JSII_RTTI_SYMBOL_1;
340
- RouteTargetType[_f] = { fqn: "terraconstructs.aws.compute.alpha.RouteTargetType", version: "0.1.7" };
340
+ RouteTargetType[_f] = { fqn: "terraconstructs.aws.compute.alpha.RouteTargetType", version: "0.1.9" };
341
341
  /**
342
342
  * Creates a new route with added functionality.
343
343
  * @resource AWS::EC2::Route
@@ -401,7 +401,7 @@ class Route extends aws_construct_1.AwsConstructBase {
401
401
  }
402
402
  exports.Route = Route;
403
403
  _g = JSII_RTTI_SYMBOL_1;
404
- Route[_g] = { fqn: "terraconstructs.aws.compute.alpha.Route", version: "0.1.7" };
404
+ Route[_g] = { fqn: "terraconstructs.aws.compute.alpha.Route", version: "0.1.9" };
405
405
  /**
406
406
  * Creates a route table for the specified VPC
407
407
  * @resource aws_route_table
@@ -444,7 +444,7 @@ class RouteTable extends aws_construct_1.AwsConstructBase {
444
444
  }
445
445
  exports.RouteTable = RouteTable;
446
446
  _h = JSII_RTTI_SYMBOL_1;
447
- RouteTable[_h] = { fqn: "terraconstructs.aws.compute.alpha.RouteTable", version: "0.1.7" };
447
+ RouteTable[_h] = { fqn: "terraconstructs.aws.compute.alpha.RouteTable", version: "0.1.9" };
448
448
  /**
449
449
  * inverse of
450
450
  * https://github.com/hashicorp/terraform-provider-aws/blob/v5.87.0/internal/service/ec2/vpc_route.go#L219-L239
@@ -466,4 +466,4 @@ function routerTypeToPropName(routerType) {
466
466
  };
467
467
  return lookupMap[routerType];
468
468
  }
469
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBNEY7QUFFNUYsc0RBWTZCO0FBQzdCLGlDQUFvQztBQUVwQywrQkFBbUU7QUFDbkUsaURBSXdCO0FBRXhCLG9EQUkwQjtBQUMxQiw4Q0FBOEM7QUFDOUMsMENBQW1DO0FBQ25DLHdDQUF3QztBQUN4Qyx5Q0FBOEM7QUFDOUMsK0NBQXdEO0FBSXhEOzs7O0dBSUc7QUFDSCxJQUFZLG1CQVNYO0FBVEQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCx3Q0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFUVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVM5QjtBQXNORDs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLE1BQU0sQ0FBQztBQUVoQzs7O0dBR0c7QUFDSCxNQUFhLHlCQUNYLFNBQVEsZ0NBQWdCO0lBR3hCLElBQVcsa0JBQWtCO1FBQzNCLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFnQkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBcUM7UUFFckMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3hDLGVBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVB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b0JBQW9CLENBQUMsVUFBc0I7SUFDbEQsTUFBTSxTQUFTLEdBQWtEO1FBQy9ELENBQUMsZ0JBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0I7UUFDaEQsQ0FBQyxnQkFBVSxDQUFDLDRCQUE0QixDQUFDLEVBQUUscUJBQXFCO1FBQ2hFLENBQUMsZ0JBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXO1FBQ2pDLCtEQUErRDtRQUMvRCw4RUFBOEU7UUFDOUUsdUNBQXVDO1FBQ3ZDLENBQUMsZ0JBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxnQkFBZ0I7UUFDNUMsQ0FBQyxnQkFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLGNBQWM7UUFDeEMsQ0FBQyxnQkFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsb0JBQW9CO1FBQ3BELENBQUMsZ0JBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0I7UUFDaEQsQ0FBQyxnQkFBVSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsd0JBQXdCO1FBQzdELENBQUMsZ0JBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxlQUFlO0tBQzNDLENBQUM7SUFDRixPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvQGF3cy1jZGsvYXdzLWVjMi1hbHBoYS9saWIvcm91dGUudHNcblxuaW1wb3J0IHtcbiAgZWlwIGFzIHRmRWlwLFxuICBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5IGFzIHRmRWdyZXNzT25seUludGVybmV0R2F0ZXdheSxcbiAgaW50ZXJuZXRHYXRld2F5IGFzIHRmSW50ZXJuZXRHYXRld2F5LFxuICBuYXRHYXRld2F5IGFzIHRmTmF0R2F0ZXdheSxcbiAgdnBjUGVlcmluZ0Nvbm5lY3Rpb24gYXMgdGZWcGNQZWVyaW5nQ29ubmVjdGlvbixcbiAgcm91dGUgYXMgdGZSb3V0ZSxcbiAgcm91dGVUYWJsZSBhcyB0ZlJvdXRlVGFibGUsXG4gIHZwbkdhdGV3YXlBdHRhY2htZW50IGFzIHRmVnBuR2F0ZXdheUF0dGFjaG1lbnQsXG4gIGludGVybmV0R2F0ZXdheUF0dGFjaG1lbnQgYXMgdGZJbnRlcm5ldEdhdGV3YXlBdHRhY2htZW50LFxuICB2cG5HYXRld2F5IGFzIHRmVnBuR2F0ZXdheSxcbiAgdnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24gYXMgdGZWcG5HYXRld2F5Um91dGVQcm9wYWdhdGlvbixcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IEFubm90YXRpb25zIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElEZXBlbmRhYmxlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElSb3V0ZVRhYmxlLCBSb3V0ZXJUeXBlLCBSb3V0ZVRhYmxlT3V0cHV0cyB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHtcbiAgR2F0ZXdheVZwY0VuZHBvaW50LFxuICBJVnBjRW5kcG9pbnQsXG4gIFZwY0VuZHBvaW50T3V0cHV0cyxcbn0gZnJvbSBcIi4vdnBjLWVuZHBvaW50XCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG4gIElBd3NDb25zdHJ1Y3QsXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG4vLyBUT0RPOiBVc2UgVGFnTWFuYWdlciBhbmQgdGFnLWFzcGVjdCBpbnN0ZWFkXG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL2F3cy10YWdzXCI7XG4vLyBpbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL3RhZy1hc3BlY3RcIjtcbmltcG9ydCB7IGFsbFJvdXRlVGFibGVJZHMgfSBmcm9tIFwiLi9lYzItdXRpbFwiO1xuaW1wb3J0IHsgTmV0d29ya1V0aWxzLCBDaWRyQmxvY2sgfSBmcm9tIFwiLi9lYzItdXRpbC12MlwiO1xuaW1wb3J0IHsgSVN1Ym5ldFYyIH0gZnJvbSBcIi4vc3VibmV0LXYyXCI7XG5pbXBvcnQgeyBJVnBjVjIsIFZQTkdhdGV3YXlWMk9wdGlvbnMgfSBmcm9tIFwiLi92cGMtdjItYmFzZVwiO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gKiBUaGUgZGVmYXVsdCBpcyBwdWJsaWMgY29ubmVjdGl2aXR5LlxuICogU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbCNjZm4tZWMyLW5hdGdhdGV3YXktY29ubmVjdGl2aXR5dHlwZVxuICovXG5leHBvcnQgZW51bSBOYXRDb25uZWN0aXZpdHlUeXBlIHtcbiAgLyoqXG4gICAqIFNldHMgQ29ubmVjdGl2aXR5IHR5cGUgdG8gUFVCTElDXG4gICAqL1xuICBQVUJMSUMgPSBcInB1YmxpY1wiLFxuICAvKipcbiAgICogU2V0cyBDb25uZWN0aXZpdHkgdHlwZSB0byBQUklWQVRFXG4gICAqL1xuICBQUklWQVRFID0gXCJwcml2YXRlXCIsXG59XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGRlZmluZSBhIHJvdXRpbmcgdGFyZ2V0LCBzdWNoIGFzIGFuXG4gKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVUYXJnZXQgZXh0ZW5kcyBJRGVwZW5kYWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgb3V0cHV0cyBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYXJnZXRPdXRwdXRzOiBSb3V0ZVRhcmdldE91dHB1dHM7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGludGVybmV0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSBWUE4gZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUE5HYXRld2F5VjJQcm9wc1xuICBleHRlbmRzIFZQTkdhdGV3YXlWMk9wdGlvbnMsXG4gICAgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdWJuZXQgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXQ6IElTdWJuZXRWMjtcblxuICAvKipcbiAgICogQWxsb2NhdGlvbklEIG9mIEVsYXN0aWMgSVAgYWRkcmVzcyB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBOQVQgZ2F0ZXdheS4gVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCBmb3IgYSBwdWJsaWMgTkFUXG4gICAqIGdhdGV3YXkgYW5kIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aCBhIHByaXZhdGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXR0ci5hbGxvY2F0aW9uSUQgb2YgYSBuZXcgRWxhc3RpYyBJUCBjcmVhdGVkIGJ5IGRlZmF1bHRcbiAgICogLy9UT0RPOiBBREQgTDIgZm9yIGVsYXN0aWMgaXBcbiAgICovXG4gIHJlYWRvbmx5IGFsbG9jYXRpb25JZD86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5BVCBnYXRld2F5IHN1cHBvcnRzIHB1YmxpYyBvciBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgTmF0Q29ubmVjdGl2aXR5VHlwZS5QdWJsaWNcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVR5cGU/OiBOYXRDb25uZWN0aXZpdHlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaWJseSByZWxlYXNpbmcgdGhlXG4gICAqIElQIGFkZHJlc3NlcyBpZiBjb25uZWN0aW9ucyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IDM1MHNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IG1heERyYWluRHVyYXRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHByaXZhdGUgSVB2NCBhZGRyZXNzIHRvIGFzc2lnbiB0byB0aGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgeW91IGRvbid0IHByb3ZpZGUgYW4gYWRkcmVzcywgYSBwcml2YXRlIElQdjQgYWRkcmVzcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlSXBBZGRyZXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWNvbmRhcnkgRUlQIGFsbG9jYXRpb24gSURzLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBhbGxvY2F0aW9uIElEcyBhdHRhY2hlZCB0byBOQVRHV1xuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5QWxsb2NhdGlvbklkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZGFyeSBwcml2YXRlIElQdjQgYWRkcmVzc2VzIHlvdVxuICAgKiB3YW50IHRvIGFzc2lnbiB0byB0aGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnRgIGFuZCBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzYCBjYW5ub3QgYmVcbiAgICogc2V0IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IGFsbG9jYXRpb24gSURzIGFzc29jaWF0ZWQgd2l0aCBOQVRHV1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTZWNvbmRhcnkgcHJpdmF0ZSBJUHY0IGFkZHJlc3Nlcy5cbiAgICpcbiAgICogYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudGAgYW5kIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXNgIGNhbm5vdCBiZVxuICAgKiBzZXQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgcHJpdmF0ZSBJcEFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggTkFUR1dcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTkFUR1cgcHJvdmlzaW9uZWQgd2l0aG91dCBhbnkgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmF0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSBOQVQgZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRHYXRld2F5UHJvcHMgZXh0ZW5kcyBOYXRHYXRld2F5T3B0aW9ucywgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZWxhc3RpYyBpcCBhc3NvY2lhdGVkLCByZXF1aXJlZCBpbiBjYXNlIG9mIHB1YmxpYyBjb25uZWN0aXZpdHkgaWYgYEFsbG9jYXRpb25JZGAgaXMgbm90IGRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhhdCBpcyBhY2NlcHRpbmcgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2VwdG9yVnBjOiBJVnBjVjI7XG5cbiAgLy8gVE9ETzogaGFuZGxlIGNyb3NzQWNjb3VudCBURiBQcm92aWRlciBmb3IgdnBjX3BlZXJpbmdfY29ubmVjdGlvbl9hY2NlcHRlclxuICAvLyAvKipcbiAgLy8gICogVGhlIHJvbGUgYXJuIGNyZWF0ZWQgaW4gdGhlIGFjY2VwdG9yIGFjY291bnQuXG4gIC8vICAqXG4gIC8vICAqIEBkZWZhdWx0IC0gbm8gcGVlclJvbGVBcm4gbmVlZGVkIGlmIG5vdCBjcm9zcyBhY2NvdW50IGNvbm5lY3Rpb25cbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IHBlZXJSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBlZXJpbmcgY29ubmVjdGlvbiBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSB2cGNQZWVyaW5nQ29ubmVjdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQQ1BlZXJpbmdDb25uZWN0aW9uUHJvcHMgZXh0ZW5kcyBWUENQZWVyaW5nQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFZQQyB0aGF0IGlzIHJlcXVlc3RpbmcgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RvclZwYzogSVZwY1YyO1xufVxuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBhd3NfZWdyZXNzX29ubHlfaW50ZXJuZXRfZ2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgRWdyZXNzT25seUludGVybmV0R2F0ZXdheVxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJUm91dGVUYXJnZXRcbntcbiAgcHVibGljIGdldCByb3V0ZVRhcmdldE91dHB1dHMoKTogUm91dGVUYXJnZXRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyVHlwZTogdGhpcy5yb3V0ZXJUeXBlLFxuICAgICAgcm91dGVyVGFyZ2V0SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVUYXJnZXRPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5UHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5lZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdGZFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkoXG4gICAgICB0aGlzLFxuICAgICAgXCJFSUdXXCIsXG4gICAgICB7XG4gICAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW50ZXJuZXQgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpJbnRlcm5ldEdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVybmV0R2F0ZXdheSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFyZ2V0T3V0cHV0cygpOiBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXJUeXBlOiB0aGlzLnJvdXRlclR5cGUsXG4gICAgICByb3V0ZXJUYXJnZXRJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhcmdldE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJuZXQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmSW50ZXJuZXRHYXRld2F5LkludGVybmV0R2F0ZXdheTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW50ZXJuZXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5HQVRFV0FZO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZkludGVybmV0R2F0ZXdheS5JbnRlcm5ldEdhdGV3YXkodGhpcywgXCJJR1dcIiwge30pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcblxuICAgIGlmIChwcm9wcy5pbnRlcm5ldEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgbmV3IHRmSW50ZXJuZXRHYXRld2F5QXR0YWNobWVudC5JbnRlcm5ldEdhdGV3YXlBdHRhY2htZW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiR1dBdHRhY2htZW50XCIsXG4gICAgICB7XG4gICAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgICBpbnRlcm5ldEdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUE5HYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBWUE5HYXRld2F5VjIgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgcHVibGljIGdldCByb3V0ZVRhcmdldE91dHB1dHMoKTogUm91dGVUYXJnZXRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyVHlwZTogdGhpcy5yb3V0ZXJUeXBlLFxuICAgICAgcm91dGVyVGFyZ2V0SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVUYXJnZXRPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIFZQTiBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUE4gZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmVnBuR2F0ZXdheS5WcG5HYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgQXR0YWNobWVudFxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYXR0YWNobWVudDogdGZWcG5HYXRld2F5QXR0YWNobWVudC5WcG5HYXRld2F5QXR0YWNobWVudDtcblxuICAvKipcbiAgICogVGhlIFZQTiBHYXRld2F5IFJvdXRlIFByb3BhZ2F0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZVByb3BhZ2F0aW9uOiB0ZlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uW10gPVxuICAgIFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWUE5HYXRld2F5VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IHZwbkdhdGV3YXlOYW1lID1cbiAgICAgIHByb3BzLnZwbkdhdGV3YXlOYW1lIHx8XG4gICAgICB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgIHByZWZpeDogdGhpcy5ncmlkVVVJRCxcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5HQVRFV0FZO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZlZwbkdhdGV3YXkuVnBuR2F0ZXdheSh0aGlzLCBcIklHV1wiLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOlxuICAgICAgICBwcm9wcy5hbWF6b25TaWRlQXNuICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByb3BzLmFtYXpvblNpZGVBc24udG9TdHJpbmcoKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG5cbiAgICB0aGlzLnZwY0lkID0gcHJvcHMudnBjLnZwY0lkO1xuICAgIHRoaXMuX2F0dGFjaG1lbnQgPSBuZXcgdGZWcG5HYXRld2F5QXR0YWNobWVudC5WcG5HYXRld2F5QXR0YWNobWVudChcbiAgICAgIHRoaXMsXG4gICAgICBcIlZQQ1ZQTkdXXCIsXG4gICAgICB7XG4gICAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgICB2cG5HYXRld2F5SWQ6IHRoaXMucmVzb3VyY2UuaWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBpZiAocHJvcHMudnBuR2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCB2cG5HYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHJvdXRlcyBvbiByb3V0ZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByaWdodCBzdWJuZXRzXG4gICAgY29uc3QgdnBuUm91dGVQcm9wYWdhdGlvbiA9IHByb3BzLnZwblJvdXRlUHJvcGFnYXRpb24gPz8gW107XG4gICAgY29uc3Qgc3VibmV0cyA9IHZwblJvdXRlUHJvcGFnYXRpb25cbiAgICAgIC5tYXAoKHMpID0+IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHMpLnN1Ym5ldHMpXG4gICAgICAuZmxhdCgpO1xuICAgIGNvbnN0IHJvdXRlVGFibGVJZHMgPSBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHMpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBcIkBhd3MtY2RrOmF3cy1lYzItZWxwaGE6ZW5hYmxlVnBuR2F0ZXdheVYyXCIsXG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZyhcbiAgICAgICAgYE5vIHN1Ym5ldHMgbWF0Y2hpbmcgc2VsZWN0aW9uOiAnJHtKU09OLnN0cmluZ2lmeSh2cG5Sb3V0ZVByb3BhZ2F0aW9uKX0nLiBTZWxlY3Qgb3RoZXIgc3VibmV0cyB0byBhZGQgcm91dGVzIHRvLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VibmV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgcm91dGVQcm9wYWdhdGlvbiA9XG4gICAgICAgIG5ldyB0ZlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYFJvdXRlUHJvcGFnYXRpb24ke2l9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByb3V0ZVRhYmxlSWQ6IHN1Ym5ldHNbaV0ucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgICAgICAgICB2cG5HYXRld2F5SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgLy8gVGhlIEFXUzo6RUMyOjpWUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiByZXNvdXJjZSBjYW5ub3QgdXNlIHRoZSBWUE4gZ2F0ZXdheVxuICAgICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuLWdhdGV3YXlyb3V0ZXByb3AuaHRtbFxuICAgICAgcm91dGVQcm9wYWdhdGlvbi5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5fYXR0YWNobWVudCk7XG4gICAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uLnB1c2gocm91dGVQcm9wYWdhdGlvbik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiAoTkFUKSBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6Ok5hdEdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIE5hdEdhdGV3YXkgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgcHVibGljIGdldCByb3V0ZVRhcmdldE91dHB1dHMoKTogUm91dGVUYXJnZXRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyVHlwZTogdGhpcy5yb3V0ZXJUeXBlLFxuICAgICAgcm91dGVyVGFyZ2V0SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVUYXJnZXRPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgTmF0R2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmF0R2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMzAgbWludXRlcydcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXhEcmFpbkR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBOQVQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmTmF0R2F0ZXdheS5OYXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOYXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5OQVRfR0FURVdBWTtcblxuICAgIHRoaXMuY29ubmVjdGl2aXR5VHlwZSA9XG4gICAgICBwcm9wcy5jb25uZWN0aXZpdHlUeXBlIHx8IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDO1xuICAgIHRoaXMubWF4RHJhaW5EdXJhdGlvbiA9IHByb3BzLm1heERyYWluRHVyYXRpb247XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQykge1xuICAgICAgaWYgKCFwcm9wcy52cGMgJiYgIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFaXRoZXIgcHJvdmlkZSB2cGMgb3IgYWxsb2NhdGlvbklkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5uYXRHYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzPy5uYXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdXNlciBkb2VzIG5vdCBwcm92aWRlIEVJUCwgZ2VuZXJhdGUgb25lIGZvciB0aGVtXG4gICAgbGV0IGFJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICBjb25zdCBlaXAgPSBuZXcgdGZFaXAuRWlwKHRoaXMsIFwiRUlQXCIsIHtcbiAgICAgICAgICBkb21haW46IHByb3BzLnZwYz8udnBjSWQsXG4gICAgICAgIH0pO1xuICAgICAgICBhSWQgPSBlaXAuYWxsb2NhdGlvbklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYUlkID0gcHJvcHMuYWxsb2NhdGlvbklkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdGZOYXRHYXRld2F5Lk5hdEdhdGV3YXkodGhpcywgXCJOQVRHYXRld2F5XCIsIHtcbiAgICAgIHN1Ym5ldElkOiBwcm9wcy5zdWJuZXQuc3VibmV0SWQsXG4gICAgICBhbGxvY2F0aW9uSWQ6IGFJZCxcbiAgICAgIHByaXZhdGVJcDogcHJvcHMucHJpdmF0ZUlwQWRkcmVzcyxcbiAgICAgIC8vIC4uLnByb3BzLFxuICAgICAgY29ubmVjdGl2aXR5VHlwZTogcHJvcHMuY29ubmVjdGl2aXR5VHlwZSxcbiAgICAgIHNlY29uZGFyeUFsbG9jYXRpb25JZHM6IHByb3BzLnNlY29uZGFyeUFsbG9jYXRpb25JZHMsXG4gICAgICBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnQ6IHByb3BzLnNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudCxcbiAgICAgIHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NlczogcHJvcHMuc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzLFxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1uYXRnYXRld2F5Lmh0bWwjY2ZuLWVjMi1uYXRnYXRld2F5LW1heGRyYWluZHVyYXRpb25zZWNvbmRzXG4gICAgICAvLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvbmF0X2dhdGV3YXkjdGltZW91dHNcbiAgICAgIC4uLih0aGlzLm1heERyYWluRHVyYXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0aW1lb3V0czoge1xuICAgICAgICAgICAgICBkZWxldGU6IHRoaXMubWF4RHJhaW5EdXJhdGlvbi50b1NlY29uZHMoKS50b1N0cmluZygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0pO1xuICAgIHRoaXMubmF0R2F0ZXdheUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmlkO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnN1Ym5ldC5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwZWVyaW5nIGNvbm5lY3Rpb24gYmV0d2VlbiB0d28gVlBDc1xuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUENQZWVyaW5nQ29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVlBDUGVlcmluZ0Nvbm5lY3Rpb25cbiAgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0XG57XG4gIHB1YmxpYyBnZXQgcm91dGVUYXJnZXRPdXRwdXRzKCk6IFJvdXRlVGFyZ2V0T3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlclR5cGU6IHRoaXMucm91dGVyVHlwZSxcbiAgICAgIHJvdXRlclRhcmdldElkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlVGFyZ2V0T3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHBlZXJpbmcgY29ubmVjdGlvbiBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmVnBjUGVlcmluZ0Nvbm5lY3Rpb24uVnBjUGVlcmluZ0Nvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZQQ1BlZXJpbmdDb25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5WUENfUEVFUklOR19DT05ORUNUSU9OO1xuXG4gICAgLy8gY29uc3QgaXNDcm9zc0FjY291bnQgPVxuICAgIC8vICAgcHJvcHMucmVxdWVzdG9yVnBjLm93bmVyQWNjb3VudElkICE9PSBwcm9wcy5hY2NlcHRvclZwYy5vd25lckFjY291bnRJZDtcblxuICAgIC8vIGlmICghaXNDcm9zc0FjY291bnQgJiYgcHJvcHMucGVlclJvbGVBcm4pIHtcbiAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcInBlZXJSb2xlQXJuIGlzIG5vdCBuZWVkZWQgZm9yIHNhbWUgYWNjb3VudCBwZWVyaW5nXCIpO1xuICAgIC8vIH1cblxuICAgIC8vIGlmIChpc0Nyb3NzQWNjb3VudCAmJiAhcHJvcHMucGVlclJvbGVBcm4pIHtcbiAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcIkNyb3NzIGFjY291bnQgVlBDIHBlZXJpbmcgcmVxdWlyZXMgcGVlclJvbGVBcm5cIik7XG4gICAgLy8gfVxuXG4gICAgY29uc3Qgb3ZlcmxhcCA9IHRoaXMudmFsaWRhdGVWcGNDaWRyT3ZlcmxhcChcbiAgICAgIHByb3BzLnJlcXVlc3RvclZwYyxcbiAgICAgIHByb3BzLmFjY2VwdG9yVnBjLFxuICAgICk7XG4gICAgaWYgKG92ZXJsYXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGVhY2ggb3RoZXIgZm9yIGVzdGFibGlzaGluZyBhIHBlZXJpbmcgY29ubmVjdGlvblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZlZwY1BlZXJpbmdDb25uZWN0aW9uLlZwY1BlZXJpbmdDb25uZWN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiVlBDUGVlcmluZ0Nvbm5lY3Rpb25cIixcbiAgICAgIHtcbiAgICAgICAgdnBjSWQ6IHByb3BzLnJlcXVlc3RvclZwYy52cGNJZCxcbiAgICAgICAgcGVlclZwY0lkOiBwcm9wcy5hY2NlcHRvclZwYy52cGNJZCxcbiAgICAgICAgcGVlck93bmVySWQ6IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkLFxuICAgICAgICBwZWVyUmVnaW9uOiBwcm9wcy5hY2NlcHRvclZwYy5yZWdpb24sIC8vIGF1dG9BY2NlcHQgbXVzdCBiZSBmYWxzZVxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgY3Jvc3NBY2NvdW50IFRGIFByb3ZpZGVyIGZvciB2cGNfcGVlcmluZ19jb25uZWN0aW9uX2FjY2VwdGVyXG4gICAgICAgIC8vIHBlZXJSb2xlQXJuOiBpc0Nyb3NzQWNjb3VudCA/IHByb3BzLnBlZXJSb2xlQXJuIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICAgIC8vIFRPRE86IEFkZCBhd3NfdnBjX3BlZXJpbmdfY29ubmVjdGlvbl9hY2NlcHRlciB0byBtYW5hZ2UgQWNjZXB0ZXIgU2lkZT9cblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmlkO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgSVB2NCBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzIHdpdGhpbiB0aGUgZ2l2ZW4gVlBDLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdG9yVnBjIFRoZSBWUEMgb2YgdGhlIHJlcXVlc3Rvci5cbiAgICogQHBhcmFtIGFjY2VwdG9yVnBjIFRoZSBWUEMgb2YgdGhlIGFjY2VwdG9yLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBlYWNoIG90aGVyIGZvciB0d28gVlBDcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVWcGNDaWRyT3ZlcmxhcChcbiAgICByZXF1ZXN0b3JWcGM6IElWcGNWMixcbiAgICBhY2NlcHRvclZwYzogSVZwY1YyLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCByZXF1ZXN0b3JDaWRycyA9IFtyZXF1ZXN0b3JWcGMuaXB2NENpZHJCbG9ja107XG4gICAgY29uc3QgYWNjZXB0b3JDaWRycyA9IFthY2NlcHRvclZwYy5pcHY0Q2lkckJsb2NrXTtcblxuICAgIGlmIChyZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICByZXF1ZXN0b3JDaWRycy5wdXNoKFxuICAgICAgICAuLi5yZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrXG4gICAgICAgICAgLm1hcCgoYmxvY2spID0+IGJsb2NrLmNpZHJCbG9jaylcbiAgICAgICAgICAuZmlsdGVyKChjaWRyKTogY2lkciBpcyBzdHJpbmcgPT4gY2lkciAhPT0gdW5kZWZpbmVkKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgYWNjZXB0b3JDaWRycy5wdXNoKFxuICAgICAgICAuLi5hY2NlcHRvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2tcbiAgICAgICAgICAubWFwKChibG9jaykgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAgIC5maWx0ZXIoKGNpZHIpOiBjaWRyIGlzIHN0cmluZyA9PiBjaWRyICE9PSB1bmRlZmluZWQpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RvckNpZHIgb2YgcmVxdWVzdG9yQ2lkcnMpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RvclJhbmdlID0gbmV3IENpZHJCbG9jayhyZXF1ZXN0b3JDaWRyKTtcbiAgICAgIGNvbnN0IHJlcXVlc3RvcklwUmFuZ2U6IFtzdHJpbmcsIHN0cmluZ10gPSBbXG4gICAgICAgIHJlcXVlc3RvclJhbmdlLm1pbklwKCksXG4gICAgICAgIHJlcXVlc3RvclJhbmdlLm1heElwKCksXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjY2VwdG9yQ2lkciBvZiBhY2NlcHRvckNpZHJzKSB7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKGFjY2VwdG9yQ2lkcik7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFtcbiAgICAgICAgICBhY2NlcHRvclJhbmdlLm1pbklwKCksXG4gICAgICAgICAgYWNjZXB0b3JSYW5nZS5tYXhJcCgpLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0b3JSYW5nZS5yYW5nZXNPdmVybGFwKGFjY2VwdG9ySXBSYW5nZSwgcmVxdWVzdG9ySXBSYW5nZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGVuZHBvaW50IG9yIGdhdGV3YXkgYmVpbmcgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFyZ2V0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcbn1cblxuLyoqXG4gKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZVRhcmdldFR5cGUge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUm91dGVUYXJnZXRQcm9wcykge1xuICAgIGlmIChcbiAgICAgIChwcm9wcy5nYXRld2F5ICYmIHByb3BzLmVuZHBvaW50KSB8fFxuICAgICAgKCFwcm9wcy5nYXRld2F5ICYmICFwcm9wcy5lbmRwb2ludClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFeGFjdGx5IG9uZSBvZiBgZ2F0ZXdheWAgb3IgYGVuZHBvaW50YCBtdXN0IGJlIHNwZWNpZmllZC5cIixcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2F0ZXdheSA9IHByb3BzLmdhdGV3YXk7XG4gICAgICB0aGlzLmVuZHBvaW50ID0gcHJvcHMuZW5kcG9pbnQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFJvdXRlVGFyZ2V0T3V0cHV0cyB8IFZwY0VuZHBvaW50T3V0cHV0cztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIGEgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlVjIgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBvdXRwdXRzIG9mIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlT3V0cHV0czogUm91dGVPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGU6IElSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqIFRPRE86IExvb2sgZm9yIHN0cm9uZyBJUCB0eXBlIGltcGxlbWVudGF0aW9uIGhlcmUuXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFJvdXRlVGFyZ2V0VHlwZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlUHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGU6IElSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFJvdXRlVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByb3V0ZSBuYW1lXG4gICAqL1xuICByZWFkb25seSByb3V0ZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByb3V0ZSB3aXRoIGFkZGVkIGZ1bmN0aW9uYWxpdHkuXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlJvdXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVWMiB7XG4gIHB1YmxpYyBnZXQgcm91dGVPdXRwdXRzKCk6IFJvdXRlT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlVGFibGU6IHRoaXMucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5kZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGhpcy50YXJnZXQuZW5kcG9pbnRcbiAgICAgICAgPyB0aGlzLnRhcmdldC5lbmRwb2ludC52cGNFbmRwb2ludE91dHB1dHNcbiAgICAgICAgOiB0aGlzLnRhcmdldC5nYXRld2F5IS5yb3V0ZVRhcmdldE91dHB1dHMsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB0aGUgcm91dGUgaXMgdGFyZ2V0aW5nXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0Um91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIHJvdXRlIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZT86IHRmUm91dGUuUm91dGU7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIGNpZHIgYmxvY2sgZm9yIGlwdjZcbiAgICovXG4gIHByaXZhdGUgZGVzdGluYXRpb25JcHY2Q2lkcj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NFxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjRDaWRyPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMudGFyZ2V0ID0gcHJvcHMudGFyZ2V0O1xuICAgIHRoaXMucm91dGVUYWJsZSA9IHByb3BzLnJvdXRlVGFibGU7XG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGlzRGVzdGluYXRpb25JcHY0ID0gTmV0d29ya1V0aWxzLnZhbGlkSXAocHJvcHMuZGVzdGluYXRpb24pO1xuICAgIGlmICghaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIC8vVE9ETyBWYWxpZGF0ZSBmb3IgSVB2NiBDSURSIHJhbmdlXG4gICAgICB0aGlzLmRlc3RpbmF0aW9uSXB2NkNpZHIgPSBwcm9wcy5kZXN0aW5hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbklwdjRDaWRyID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy50YXJnZXQuZ2F0ZXdheT8ucm91dGVyVHlwZSA9PT1cbiAgICAgICAgUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZICYmXG4gICAgICBpc0Rlc3RpbmF0aW9uSXB2NFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkVncmVzcyBvbmx5IGludGVybmV0IGdhdGV3YXkgZG9lcyBub3Qgc3VwcG9ydCBJUHY0IHJvdXRpbmdcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0Um91dGVyVHlwZSA9IHRoaXMudGFyZ2V0LmdhdGV3YXlcbiAgICAgID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUeXBlXG4gICAgICA6IFJvdXRlclR5cGUuVlBDX0VORFBPSU5UO1xuICAgIC8vIEdhdGV3YXkgZ2VuZXJhdGVzIHJvdXRlIGF1dG9tYXRpY2FsbHkgdmlhIGl0cyBSb3V0ZVRhYmxlLCB0aHVzIHdlIGRvbid0IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHJlc291cmNlIGZvciBpdFxuICAgIGlmICghKHRoaXMudGFyZ2V0LmVuZHBvaW50IGluc3RhbmNlb2YgR2F0ZXdheVZwY0VuZHBvaW50KSkge1xuICAgICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZlJvdXRlLlJvdXRlKHRoaXMsIFwiUm91dGVcIiwge1xuICAgICAgICByb3V0ZVRhYmxlSWQ6IHRoaXMucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgICAgIGRlc3RpbmF0aW9uQ2lkckJsb2NrOiB0aGlzLmRlc3RpbmF0aW9uSXB2NENpZHIsXG4gICAgICAgIGRlc3RpbmF0aW9uSXB2NkNpZHJCbG9jazogdGhpcy5kZXN0aW5hdGlvbklwdjZDaWRyLFxuICAgICAgICBbcm91dGVyVHlwZVRvUHJvcE5hbWUodGhpcy50YXJnZXRSb3V0ZXJUeXBlKV06IHRoaXMudGFyZ2V0LmdhdGV3YXlcbiAgICAgICAgICA/IHRoaXMudGFyZ2V0LmdhdGV3YXkucm91dGVyVGFyZ2V0SWRcbiAgICAgICAgICA6IHRoaXMudGFyZ2V0LmVuZHBvaW50XG4gICAgICAgICAgICA/IHRoaXMudGFyZ2V0LmVuZHBvaW50LnZwY0VuZHBvaW50SWRcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIC8vQ3JlYXRlIGEgcm91dGUgb25seSBhZnRlciB0YXJnZXQgZ2F0ZXdheSBvciBlbmRwb2ludCBpcyBjcmVhdGVkXG4gICAgaWYgKHRoaXMudGFyZ2V0LmdhdGV3YXkpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmdhdGV3YXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXJnZXQuZW5kcG9pbnQpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmVuZHBvaW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIHJvdXRlIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIHRhYmxlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZSB0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBWUENcbiAqIEByZXNvdXJjZSBhd3Nfcm91dGVfdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlVGFibGUgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVJvdXRlVGFibGUge1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFibGVPdXRwdXRzKCk6IFJvdXRlVGFibGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVUYWJsZUlkOiB0aGlzLnJvdXRlVGFibGVJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhYmxlT3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvdXRlIHRhYmxlIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZSb3V0ZVRhYmxlLlJvdXRlVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmUm91dGVUYWJsZS5Sb3V0ZVRhYmxlKHRoaXMsIFwiUm91dGVUYWJsZVwiLCB7XG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgIH0pO1xuICAgIGlmIChwcm9wcy5yb3V0ZVRhYmxlTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnJvdXRlVGFibGVOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlVGFibGVJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBjdXN0b20gcm91dGUgdG8gdGhlIHJvdXRlIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqIEBwYXJhbSByb3V0ZU5hbWUgVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIGFkZFJvdXRlKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGVzdGluYXRpb246IHN0cmluZyxcbiAgICB0YXJnZXQ6IFJvdXRlVGFyZ2V0VHlwZSxcbiAgICByb3V0ZU5hbWU/OiBzdHJpbmcsXG4gICkge1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgcm91dGVUYWJsZTogdGhpcyxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcm91dGVOYW1lOiByb3V0ZU5hbWUsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBpbnZlcnNlIG9mXG4gKiBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1wcm92aWRlci1hd3MvYmxvYi92NS44Ny4wL2ludGVybmFsL3NlcnZpY2UvZWMyL3ZwY19yb3V0ZS5nbyNMMjE5LUwyMzlcbiAqL1xuZnVuY3Rpb24gcm91dGVyVHlwZVRvUHJvcE5hbWUocm91dGVyVHlwZTogUm91dGVyVHlwZSkge1xuICBjb25zdCBsb29rdXBNYXA6IFJlY29yZDxSb3V0ZXJUeXBlLCBrZXlvZiB0ZlJvdXRlLlJvdXRlQ29uZmlnPiA9IHtcbiAgICBbUm91dGVyVHlwZS5DQVJSSUVSX0dBVEVXQVldOiBcImNhcnJpZXJHYXRld2F5SWRcIixcbiAgICBbUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZXTogXCJlZ3Jlc3NPbmx5R2F0ZXdheUlkXCIsXG4gICAgW1JvdXRlclR5cGUuR0FURVdBWV06IFwiZ2F0ZXdheUlkXCIsXG4gICAgLy8gdGVycmFmb3JtLXByb3ZpZGVyLWF3cyBpcyBtaXNzaW5nIHN3aXRjaCBjYXNlIGZvciBJbnN0YW5jZUlkXG4gICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVSb3V0ZS5odG1sXG4gICAgLy8gW1JvdXRlclR5cGUuSU5TVEFOQ0VdOiBcImluc3RhbmNlSWRcIixcbiAgICBbUm91dGVyVHlwZS5MT0NBTF9HQVRFV0FZXTogXCJsb2NhbEdhdGV3YXlJZFwiLFxuICAgIFtSb3V0ZXJUeXBlLk5BVF9HQVRFV0FZXTogXCJuYXRHYXRld2F5SWRcIixcbiAgICBbUm91dGVyVHlwZS5ORVRXT1JLX0lOVEVSRkFDRV06IFwibmV0d29ya0ludGVyZmFjZUlkXCIsXG4gICAgW1JvdXRlclR5cGUuVFJBTlNJVF9HQVRFV0FZXTogXCJ0cmFuc2l0R2F0ZXdheUlkXCIsXG4gICAgW1JvdXRlclR5cGUuVlBDX1BFRVJJTkdfQ09OTkVDVElPTl06IFwidnBjUGVlcmluZ0Nvbm5lY3Rpb25JZFwiLFxuICAgIFtSb3V0ZXJUeXBlLlZQQ19FTkRQT0lOVF06IFwidnBjRW5kcG9pbnRJZFwiLFxuICB9O1xuICByZXR1cm4gbG9va3VwTWFwW3JvdXRlclR5cGVdO1xufVxuIl19
469
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBNEY7QUFFNUYsc0RBWTZCO0FBQzdCLGlDQUFvQztBQUVwQywrQkFBbUU7QUFDbkUsaURBSXdCO0FBRXhCLG9EQUkwQjtBQUMxQiw4Q0FBOEM7QUFDOUMsMENBQW1DO0FBQ25DLHdDQUF3QztBQUN4Qyx5Q0FBOEM7QUFDOUMsK0NBQXdEO0FBSXhEOzs7O0dBSUc7QUFDSCxJQUFZLG1CQVNYO0FBVEQsV0FBWSxtQkFBbUI7SUFDN0I7O09BRUc7SUFDSCx3Q0FBaUIsQ0FBQTtJQUNqQjs7T0FFRztJQUNILDBDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFUVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQVM5QjtBQXNORDs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLE1BQU0sQ0FBQztBQUVoQzs7O0dBR0c7QUFDSCxNQUFhLHlCQUNYLFNBQVEsZ0NBQWdCO0lBR3hCLElBQVcsa0JBQWtCO1FBQzNCLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFnQkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBcUM7UUFFckMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3hDLGVBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVB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bEQsTUFBTSxTQUFTLEdBQWtEO1FBQy9ELENBQUMsZ0JBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0I7UUFDaEQsQ0FBQyxnQkFBVSxDQUFDLDRCQUE0QixDQUFDLEVBQUUscUJBQXFCO1FBQ2hFLENBQUMsZ0JBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXO1FBQ2pDLCtEQUErRDtRQUMvRCw4RUFBOEU7UUFDOUUsdUNBQXVDO1FBQ3ZDLENBQUMsZ0JBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxnQkFBZ0I7UUFDNUMsQ0FBQyxnQkFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLGNBQWM7UUFDeEMsQ0FBQyxnQkFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsb0JBQW9CO1FBQ3BELENBQUMsZ0JBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxrQkFBa0I7UUFDaEQsQ0FBQyxnQkFBVSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsd0JBQXdCO1FBQzdELENBQUMsZ0JBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxlQUFlO0tBQzNDLENBQUM7SUFDRixPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvQGF3cy1jZGsvYXdzLWVjMi1hbHBoYS9saWIvcm91dGUudHNcblxuaW1wb3J0IHtcbiAgZWlwIGFzIHRmRWlwLFxuICBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5IGFzIHRmRWdyZXNzT25seUludGVybmV0R2F0ZXdheSxcbiAgaW50ZXJuZXRHYXRld2F5IGFzIHRmSW50ZXJuZXRHYXRld2F5LFxuICBuYXRHYXRld2F5IGFzIHRmTmF0R2F0ZXdheSxcbiAgdnBjUGVlcmluZ0Nvbm5lY3Rpb24gYXMgdGZWcGNQZWVyaW5nQ29ubmVjdGlvbixcbiAgcm91dGUgYXMgdGZSb3V0ZSxcbiAgcm91dGVUYWJsZSBhcyB0ZlJvdXRlVGFibGUsXG4gIHZwbkdhdGV3YXlBdHRhY2htZW50IGFzIHRmVnBuR2F0ZXdheUF0dGFjaG1lbnQsXG4gIGludGVybmV0R2F0ZXdheUF0dGFjaG1lbnQgYXMgdGZJbnRlcm5ldEdhdGV3YXlBdHRhY2htZW50LFxuICB2cG5HYXRld2F5IGFzIHRmVnBuR2F0ZXdheSxcbiAgdnBuR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24gYXMgdGZWcG5HYXRld2F5Um91dGVQcm9wYWdhdGlvbixcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IEFubm90YXRpb25zIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElEZXBlbmRhYmxlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElSb3V0ZVRhYmxlLCBSb3V0ZXJUeXBlLCBSb3V0ZVRhYmxlT3V0cHV0cyB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHtcbiAgR2F0ZXdheVZwY0VuZHBvaW50LFxuICBJVnBjRW5kcG9pbnQsXG4gIFZwY0VuZHBvaW50T3V0cHV0cyxcbn0gZnJvbSBcIi4vdnBjLWVuZHBvaW50XCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHtcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG4gIElBd3NDb25zdHJ1Y3QsXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG4vLyBUT0RPOiBVc2UgVGFnTWFuYWdlciBhbmQgdGFnLWFzcGVjdCBpbnN0ZWFkXG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL2F3cy10YWdzXCI7XG4vLyBpbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL3RhZy1hc3BlY3RcIjtcbmltcG9ydCB7IGFsbFJvdXRlVGFibGVJZHMgfSBmcm9tIFwiLi9lYzItdXRpbFwiO1xuaW1wb3J0IHsgTmV0d29ya1V0aWxzLCBDaWRyQmxvY2sgfSBmcm9tIFwiLi9lYzItdXRpbC12MlwiO1xuaW1wb3J0IHsgSVN1Ym5ldFYyIH0gZnJvbSBcIi4vc3VibmV0LXYyXCI7XG5pbXBvcnQgeyBJVnBjVjIsIFZQTkdhdGV3YXlWMk9wdGlvbnMgfSBmcm9tIFwiLi92cGMtdjItYmFzZVwiO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gKiBUaGUgZGVmYXVsdCBpcyBwdWJsaWMgY29ubmVjdGl2aXR5LlxuICogU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbCNjZm4tZWMyLW5hdGdhdGV3YXktY29ubmVjdGl2aXR5dHlwZVxuICovXG5leHBvcnQgZW51bSBOYXRDb25uZWN0aXZpdHlUeXBlIHtcbiAgLyoqXG4gICAqIFNldHMgQ29ubmVjdGl2aXR5IHR5cGUgdG8gUFVCTElDXG4gICAqL1xuICBQVUJMSUMgPSBcInB1YmxpY1wiLFxuICAvKipcbiAgICogU2V0cyBDb25uZWN0aXZpdHkgdHlwZSB0byBQUklWQVRFXG4gICAqL1xuICBQUklWQVRFID0gXCJwcml2YXRlXCIsXG59XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGRlZmluZSBhIHJvdXRpbmcgdGFyZ2V0LCBzdWNoIGFzIGFuXG4gKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVUYXJnZXQgZXh0ZW5kcyBJRGVwZW5kYWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgb3V0cHV0cyBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYXJnZXRPdXRwdXRzOiBSb3V0ZVRhcmdldE91dHB1dHM7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGludGVybmV0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSBWUE4gZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUE5HYXRld2F5VjJQcm9wc1xuICBleHRlbmRzIFZQTkdhdGV3YXlWMk9wdGlvbnMsXG4gICAgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdWJuZXQgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXQ6IElTdWJuZXRWMjtcblxuICAvKipcbiAgICogQWxsb2NhdGlvbklEIG9mIEVsYXN0aWMgSVAgYWRkcmVzcyB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBOQVQgZ2F0ZXdheS4gVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCBmb3IgYSBwdWJsaWMgTkFUXG4gICAqIGdhdGV3YXkgYW5kIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aCBhIHByaXZhdGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXR0ci5hbGxvY2F0aW9uSUQgb2YgYSBuZXcgRWxhc3RpYyBJUCBjcmVhdGVkIGJ5IGRlZmF1bHRcbiAgICogLy9UT0RPOiBBREQgTDIgZm9yIGVsYXN0aWMgaXBcbiAgICovXG4gIHJlYWRvbmx5IGFsbG9jYXRpb25JZD86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5BVCBnYXRld2F5IHN1cHBvcnRzIHB1YmxpYyBvciBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgTmF0Q29ubmVjdGl2aXR5VHlwZS5QdWJsaWNcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVR5cGU/OiBOYXRDb25uZWN0aXZpdHlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaWJseSByZWxlYXNpbmcgdGhlXG4gICAqIElQIGFkZHJlc3NlcyBpZiBjb25uZWN0aW9ucyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IDM1MHNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IG1heERyYWluRHVyYXRpb24/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHByaXZhdGUgSVB2NCBhZGRyZXNzIHRvIGFzc2lnbiB0byB0aGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgeW91IGRvbid0IHByb3ZpZGUgYW4gYWRkcmVzcywgYSBwcml2YXRlIElQdjQgYWRkcmVzcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQuXG4gICAqL1xuICByZWFkb25seSBwcml2YXRlSXBBZGRyZXNzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWNvbmRhcnkgRUlQIGFsbG9jYXRpb24gSURzLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBhbGxvY2F0aW9uIElEcyBhdHRhY2hlZCB0byBOQVRHV1xuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5QWxsb2NhdGlvbklkcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZGFyeSBwcml2YXRlIElQdjQgYWRkcmVzc2VzIHlvdVxuICAgKiB3YW50IHRvIGFzc2lnbiB0byB0aGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnRgIGFuZCBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzYCBjYW5ub3QgYmVcbiAgICogc2V0IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IGFsbG9jYXRpb24gSURzIGFzc29jaWF0ZWQgd2l0aCBOQVRHV1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTZWNvbmRhcnkgcHJpdmF0ZSBJUHY0IGFkZHJlc3Nlcy5cbiAgICpcbiAgICogYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudGAgYW5kIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXNgIGNhbm5vdCBiZVxuICAgKiBzZXQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgcHJpdmF0ZSBJcEFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggTkFUR1dcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTkFUR1cgcHJvdmlzaW9uZWQgd2l0aG91dCBhbnkgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmF0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSBOQVQgZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRHYXRld2F5UHJvcHMgZXh0ZW5kcyBOYXRHYXRld2F5T3B0aW9ucywgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZWxhc3RpYyBpcCBhc3NvY2lhdGVkLCByZXF1aXJlZCBpbiBjYXNlIG9mIHB1YmxpYyBjb25uZWN0aXZpdHkgaWYgYEFsbG9jYXRpb25JZGAgaXMgbm90IGRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhhdCBpcyBhY2NlcHRpbmcgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2VwdG9yVnBjOiBJVnBjVjI7XG5cbiAgLy8gVE9ETzogaGFuZGxlIGNyb3NzQWNjb3VudCBURiBQcm92aWRlciBmb3IgdnBjX3BlZXJpbmdfY29ubmVjdGlvbl9hY2NlcHRlclxuICAvLyAvKipcbiAgLy8gICogVGhlIHJvbGUgYXJuIGNyZWF0ZWQgaW4gdGhlIGFjY2VwdG9yIGFjY291bnQuXG4gIC8vICAqXG4gIC8vICAqIEBkZWZhdWx0IC0gbm8gcGVlclJvbGVBcm4gbmVlZGVkIGlmIG5vdCBjcm9zcyBhY2NvdW50IGNvbm5lY3Rpb25cbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IHBlZXJSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBlZXJpbmcgY29ubmVjdGlvbiBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSB2cGNQZWVyaW5nQ29ubmVjdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQQ1BlZXJpbmdDb25uZWN0aW9uUHJvcHMgZXh0ZW5kcyBWUENQZWVyaW5nQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFZQQyB0aGF0IGlzIHJlcXVlc3RpbmcgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RvclZwYzogSVZwY1YyO1xufVxuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBhd3NfZWdyZXNzX29ubHlfaW50ZXJuZXRfZ2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgRWdyZXNzT25seUludGVybmV0R2F0ZXdheVxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJUm91dGVUYXJnZXRcbntcbiAgcHVibGljIGdldCByb3V0ZVRhcmdldE91dHB1dHMoKTogUm91dGVUYXJnZXRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyVHlwZTogdGhpcy5yb3V0ZXJUeXBlLFxuICAgICAgcm91dGVyVGFyZ2V0SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVUYXJnZXRPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5UHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5lZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdGZFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXkoXG4gICAgICB0aGlzLFxuICAgICAgXCJFSUdXXCIsXG4gICAgICB7XG4gICAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW50ZXJuZXQgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpJbnRlcm5ldEdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVybmV0R2F0ZXdheSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFyZ2V0T3V0cHV0cygpOiBSb3V0ZVRhcmdldE91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXJUeXBlOiB0aGlzLnJvdXRlclR5cGUsXG4gICAgICByb3V0ZXJUYXJnZXRJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhcmdldE91dHB1dHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJuZXQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmSW50ZXJuZXRHYXRld2F5LkludGVybmV0R2F0ZXdheTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW50ZXJuZXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5HQVRFV0FZO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZkludGVybmV0R2F0ZXdheS5JbnRlcm5ldEdhdGV3YXkodGhpcywgXCJJR1dcIiwge30pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcblxuICAgIGlmIChwcm9wcy5pbnRlcm5ldEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgbmV3IHRmSW50ZXJuZXRHYXRld2F5QXR0YWNobWVudC5JbnRlcm5ldEdhdGV3YXlBdHRhY2htZW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiR1dBdHRhY2htZW50XCIsXG4gICAgICB7XG4gICAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgICBpbnRlcm5ldEdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB2aXJ0dWFsIHByaXZhdGUgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUE5HYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBWUE5HYXRld2F5VjIgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgcHVibGljIGdldCByb3V0ZVRhcmdldE91dHB1dHMoKTogUm91dGVUYXJnZXRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyVHlwZTogdGhpcy5yb3V0ZXJUeXBlLFxuICAgICAgcm91dGVyVGFyZ2V0SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVUYXJnZXRPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIFZQTiBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUE4gZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmVnBuR2F0ZXdheS5WcG5HYXRld2F5O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgQXR0YWNobWVudFxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYXR0YWNobWVudDogdGZWcG5HYXRld2F5QXR0YWNobWVudC5WcG5HYXRld2F5QXR0YWNobWVudDtcblxuICAvKipcbiAgICogVGhlIFZQTiBHYXRld2F5IFJvdXRlIFByb3BhZ2F0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZVByb3BhZ2F0aW9uOiB0ZlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uW10gPVxuICAgIFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWUE5HYXRld2F5VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IHZwbkdhdGV3YXlOYW1lID1cbiAgICAgIHByb3BzLnZwbkdhdGV3YXlOYW1lIHx8XG4gICAgICB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgIHByZWZpeDogdGhpcy5ncmlkVVVJRCxcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5HQVRFV0FZO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZlZwbkdhdGV3YXkuVnBuR2F0ZXdheSh0aGlzLCBcIklHV1wiLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOlxuICAgICAgICBwcm9wcy5hbWF6b25TaWRlQXNuICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByb3BzLmFtYXpvblNpZGVBc24udG9TdHJpbmcoKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG5cbiAgICB0aGlzLnZwY0lkID0gcHJvcHMudnBjLnZwY0lkO1xuICAgIHRoaXMuX2F0dGFjaG1lbnQgPSBuZXcgdGZWcG5HYXRld2F5QXR0YWNobWVudC5WcG5HYXRld2F5QXR0YWNobWVudChcbiAgICAgIHRoaXMsXG4gICAgICBcIlZQQ1ZQTkdXXCIsXG4gICAgICB7XG4gICAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgICB2cG5HYXRld2F5SWQ6IHRoaXMucmVzb3VyY2UuaWQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBpZiAocHJvcHMudnBuR2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCB2cG5HYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHJvdXRlcyBvbiByb3V0ZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByaWdodCBzdWJuZXRzXG4gICAgY29uc3QgdnBuUm91dGVQcm9wYWdhdGlvbiA9IHByb3BzLnZwblJvdXRlUHJvcGFnYXRpb24gPz8gW107XG4gICAgY29uc3Qgc3VibmV0cyA9IHZwblJvdXRlUHJvcGFnYXRpb25cbiAgICAgIC5tYXAoKHMpID0+IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHMpLnN1Ym5ldHMpXG4gICAgICAuZmxhdCgpO1xuICAgIGNvbnN0IHJvdXRlVGFibGVJZHMgPSBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHMpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBcIkBhd3MtY2RrOmF3cy1lYzItZWxwaGE6ZW5hYmxlVnBuR2F0ZXdheVYyXCIsXG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZyhcbiAgICAgICAgYE5vIHN1Ym5ldHMgbWF0Y2hpbmcgc2VsZWN0aW9uOiAnJHtKU09OLnN0cmluZ2lmeSh2cG5Sb3V0ZVByb3BhZ2F0aW9uKX0nLiBTZWxlY3Qgb3RoZXIgc3VibmV0cyB0byBhZGQgcm91dGVzIHRvLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3VibmV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgcm91dGVQcm9wYWdhdGlvbiA9XG4gICAgICAgIG5ldyB0ZlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLlZwbkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYFJvdXRlUHJvcGFnYXRpb24ke2l9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICByb3V0ZVRhYmxlSWQ6IHN1Ym5ldHNbaV0ucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgICAgICAgICB2cG5HYXRld2F5SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgLy8gVGhlIEFXUzo6RUMyOjpWUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiByZXNvdXJjZSBjYW5ub3QgdXNlIHRoZSBWUE4gZ2F0ZXdheVxuICAgICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuLWdhdGV3YXlyb3V0ZXByb3AuaHRtbFxuICAgICAgcm91dGVQcm9wYWdhdGlvbi5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5fYXR0YWNobWVudCk7XG4gICAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uLnB1c2gocm91dGVQcm9wYWdhdGlvbik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldHdvcmsgYWRkcmVzcyB0cmFuc2xhdGlvbiAoTkFUKSBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6Ok5hdEdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIE5hdEdhdGV3YXkgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgcHVibGljIGdldCByb3V0ZVRhcmdldE91dHB1dHMoKTogUm91dGVUYXJnZXRPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyVHlwZTogdGhpcy5yb3V0ZXJUeXBlLFxuICAgICAgcm91dGVyVGFyZ2V0SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVUYXJnZXRPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgTmF0R2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmF0R2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMzAgbWludXRlcydcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXhEcmFpbkR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBOQVQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmTmF0R2F0ZXdheS5OYXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOYXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5OQVRfR0FURVdBWTtcblxuICAgIHRoaXMuY29ubmVjdGl2aXR5VHlwZSA9XG4gICAgICBwcm9wcy5jb25uZWN0aXZpdHlUeXBlIHx8IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDO1xuICAgIHRoaXMubWF4RHJhaW5EdXJhdGlvbiA9IHByb3BzLm1heERyYWluRHVyYXRpb247XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQykge1xuICAgICAgaWYgKCFwcm9wcy52cGMgJiYgIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFaXRoZXIgcHJvdmlkZSB2cGMgb3IgYWxsb2NhdGlvbklkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5uYXRHYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzPy5uYXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdXNlciBkb2VzIG5vdCBwcm92aWRlIEVJUCwgZ2VuZXJhdGUgb25lIGZvciB0aGVtXG4gICAgbGV0IGFJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICBjb25zdCBlaXAgPSBuZXcgdGZFaXAuRWlwKHRoaXMsIFwiRUlQXCIsIHtcbiAgICAgICAgICBkb21haW46IFwidnBjXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBhSWQgPSBlaXAuYWxsb2NhdGlvbklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYUlkID0gcHJvcHMuYWxsb2NhdGlvbklkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgdGZOYXRHYXRld2F5Lk5hdEdhdGV3YXkodGhpcywgXCJOQVRHYXRld2F5XCIsIHtcbiAgICAgIHN1Ym5ldElkOiBwcm9wcy5zdWJuZXQuc3VibmV0SWQsXG4gICAgICBhbGxvY2F0aW9uSWQ6IGFJZCxcbiAgICAgIHByaXZhdGVJcDogcHJvcHMucHJpdmF0ZUlwQWRkcmVzcyxcbiAgICAgIC8vIC4uLnByb3BzLFxuICAgICAgY29ubmVjdGl2aXR5VHlwZTogcHJvcHMuY29ubmVjdGl2aXR5VHlwZSxcbiAgICAgIHNlY29uZGFyeUFsbG9jYXRpb25JZHM6IHByb3BzLnNlY29uZGFyeUFsbG9jYXRpb25JZHMsXG4gICAgICBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnQ6IHByb3BzLnNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudCxcbiAgICAgIHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NlczogcHJvcHMuc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzLFxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1uYXRnYXRld2F5Lmh0bWwjY2ZuLWVjMi1uYXRnYXRld2F5LW1heGRyYWluZHVyYXRpb25zZWNvbmRzXG4gICAgICAvLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvbmF0X2dhdGV3YXkjdGltZW91dHNcbiAgICAgIC4uLih0aGlzLm1heERyYWluRHVyYXRpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0aW1lb3V0czoge1xuICAgICAgICAgICAgICBkZWxldGU6IHRoaXMubWF4RHJhaW5EdXJhdGlvbi50b1NlY29uZHMoKS50b1N0cmluZygpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0pO1xuICAgIHRoaXMubmF0R2F0ZXdheUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmlkO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnN1Ym5ldC5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwZWVyaW5nIGNvbm5lY3Rpb24gYmV0d2VlbiB0d28gVlBDc1xuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUENQZWVyaW5nQ29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVlBDUGVlcmluZ0Nvbm5lY3Rpb25cbiAgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0XG57XG4gIHB1YmxpYyBnZXQgcm91dGVUYXJnZXRPdXRwdXRzKCk6IFJvdXRlVGFyZ2V0T3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlclR5cGU6IHRoaXMucm91dGVyVHlwZSxcbiAgICAgIHJvdXRlclRhcmdldElkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJvdXRlVGFyZ2V0T3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHBlZXJpbmcgY29ubmVjdGlvbiBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHRmVnBjUGVlcmluZ0Nvbm5lY3Rpb24uVnBjUGVlcmluZ0Nvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZQQ1BlZXJpbmdDb25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5WUENfUEVFUklOR19DT05ORUNUSU9OO1xuXG4gICAgLy8gY29uc3QgaXNDcm9zc0FjY291bnQgPVxuICAgIC8vICAgcHJvcHMucmVxdWVzdG9yVnBjLm93bmVyQWNjb3VudElkICE9PSBwcm9wcy5hY2NlcHRvclZwYy5vd25lckFjY291bnRJZDtcblxuICAgIC8vIGlmICghaXNDcm9zc0FjY291bnQgJiYgcHJvcHMucGVlclJvbGVBcm4pIHtcbiAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcInBlZXJSb2xlQXJuIGlzIG5vdCBuZWVkZWQgZm9yIHNhbWUgYWNjb3VudCBwZWVyaW5nXCIpO1xuICAgIC8vIH1cblxuICAgIC8vIGlmIChpc0Nyb3NzQWNjb3VudCAmJiAhcHJvcHMucGVlclJvbGVBcm4pIHtcbiAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcIkNyb3NzIGFjY291bnQgVlBDIHBlZXJpbmcgcmVxdWlyZXMgcGVlclJvbGVBcm5cIik7XG4gICAgLy8gfVxuXG4gICAgY29uc3Qgb3ZlcmxhcCA9IHRoaXMudmFsaWRhdGVWcGNDaWRyT3ZlcmxhcChcbiAgICAgIHByb3BzLnJlcXVlc3RvclZwYyxcbiAgICAgIHByb3BzLmFjY2VwdG9yVnBjLFxuICAgICk7XG4gICAgaWYgKG92ZXJsYXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGVhY2ggb3RoZXIgZm9yIGVzdGFibGlzaGluZyBhIHBlZXJpbmcgY29ubmVjdGlvblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLnZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZlZwY1BlZXJpbmdDb25uZWN0aW9uLlZwY1BlZXJpbmdDb25uZWN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiVlBDUGVlcmluZ0Nvbm5lY3Rpb25cIixcbiAgICAgIHtcbiAgICAgICAgdnBjSWQ6IHByb3BzLnJlcXVlc3RvclZwYy52cGNJZCxcbiAgICAgICAgcGVlclZwY0lkOiBwcm9wcy5hY2NlcHRvclZwYy52cGNJZCxcbiAgICAgICAgcGVlck93bmVySWQ6IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkLFxuICAgICAgICBwZWVyUmVnaW9uOiBwcm9wcy5hY2NlcHRvclZwYy5yZWdpb24sIC8vIGF1dG9BY2NlcHQgbXVzdCBiZSBmYWxzZVxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgY3Jvc3NBY2NvdW50IFRGIFByb3ZpZGVyIGZvciB2cGNfcGVlcmluZ19jb25uZWN0aW9uX2FjY2VwdGVyXG4gICAgICAgIC8vIHBlZXJSb2xlQXJuOiBpc0Nyb3NzQWNjb3VudCA/IHByb3BzLnBlZXJSb2xlQXJuIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICApO1xuICAgIC8vIFRPRE86IEFkZCBhd3NfdnBjX3BlZXJpbmdfY29ubmVjdGlvbl9hY2NlcHRlciB0byBtYW5hZ2UgQWNjZXB0ZXIgU2lkZT9cblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmlkO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgSVB2NCBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzIHdpdGhpbiB0aGUgZ2l2ZW4gVlBDLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdG9yVnBjIFRoZSBWUEMgb2YgdGhlIHJlcXVlc3Rvci5cbiAgICogQHBhcmFtIGFjY2VwdG9yVnBjIFRoZSBWUEMgb2YgdGhlIGFjY2VwdG9yLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBlYWNoIG90aGVyIGZvciB0d28gVlBDcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVWcGNDaWRyT3ZlcmxhcChcbiAgICByZXF1ZXN0b3JWcGM6IElWcGNWMixcbiAgICBhY2NlcHRvclZwYzogSVZwY1YyLFxuICApOiBib29sZWFuIHtcbiAgICBjb25zdCByZXF1ZXN0b3JDaWRycyA9IFtyZXF1ZXN0b3JWcGMuaXB2NENpZHJCbG9ja107XG4gICAgY29uc3QgYWNjZXB0b3JDaWRycyA9IFthY2NlcHRvclZwYy5pcHY0Q2lkckJsb2NrXTtcblxuICAgIGlmIChyZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICByZXF1ZXN0b3JDaWRycy5wdXNoKFxuICAgICAgICAuLi5yZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrXG4gICAgICAgICAgLm1hcCgoYmxvY2spID0+IGJsb2NrLmNpZHJCbG9jaylcbiAgICAgICAgICAuZmlsdGVyKChjaWRyKTogY2lkciBpcyBzdHJpbmcgPT4gY2lkciAhPT0gdW5kZWZpbmVkKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgYWNjZXB0b3JDaWRycy5wdXNoKFxuICAgICAgICAuLi5hY2NlcHRvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2tcbiAgICAgICAgICAubWFwKChibG9jaykgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAgIC5maWx0ZXIoKGNpZHIpOiBjaWRyIGlzIHN0cmluZyA9PiBjaWRyICE9PSB1bmRlZmluZWQpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RvckNpZHIgb2YgcmVxdWVzdG9yQ2lkcnMpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RvclJhbmdlID0gbmV3IENpZHJCbG9jayhyZXF1ZXN0b3JDaWRyKTtcbiAgICAgIGNvbnN0IHJlcXVlc3RvcklwUmFuZ2U6IFtzdHJpbmcsIHN0cmluZ10gPSBbXG4gICAgICAgIHJlcXVlc3RvclJhbmdlLm1pbklwKCksXG4gICAgICAgIHJlcXVlc3RvclJhbmdlLm1heElwKCksXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjY2VwdG9yQ2lkciBvZiBhY2NlcHRvckNpZHJzKSB7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKGFjY2VwdG9yQ2lkcik7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFtcbiAgICAgICAgICBhY2NlcHRvclJhbmdlLm1pbklwKCksXG4gICAgICAgICAgYWNjZXB0b3JSYW5nZS5tYXhJcCgpLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0b3JSYW5nZS5yYW5nZXNPdmVybGFwKGFjY2VwdG9ySXBSYW5nZSwgcmVxdWVzdG9ySXBSYW5nZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGVuZHBvaW50IG9yIGdhdGV3YXkgYmVpbmcgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFyZ2V0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcbn1cblxuLyoqXG4gKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZVRhcmdldFR5cGUge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUm91dGVUYXJnZXRQcm9wcykge1xuICAgIGlmIChcbiAgICAgIChwcm9wcy5nYXRld2F5ICYmIHByb3BzLmVuZHBvaW50KSB8fFxuICAgICAgKCFwcm9wcy5nYXRld2F5ICYmICFwcm9wcy5lbmRwb2ludClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFeGFjdGx5IG9uZSBvZiBgZ2F0ZXdheWAgb3IgYGVuZHBvaW50YCBtdXN0IGJlIHNwZWNpZmllZC5cIixcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2F0ZXdheSA9IHByb3BzLmdhdGV3YXk7XG4gICAgICB0aGlzLmVuZHBvaW50ID0gcHJvcHMuZW5kcG9pbnQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFJvdXRlVGFyZ2V0T3V0cHV0cyB8IFZwY0VuZHBvaW50T3V0cHV0cztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIGEgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlVjIgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBvdXRwdXRzIG9mIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlT3V0cHV0czogUm91dGVPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGU6IElSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqIFRPRE86IExvb2sgZm9yIHN0cm9uZyBJUCB0eXBlIGltcGxlbWVudGF0aW9uIGhlcmUuXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFJvdXRlVGFyZ2V0VHlwZTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlUHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGU6IElSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ6IFJvdXRlVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHJvdXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByb3V0ZSBuYW1lXG4gICAqL1xuICByZWFkb25seSByb3V0ZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByb3V0ZSB3aXRoIGFkZGVkIGZ1bmN0aW9uYWxpdHkuXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlJvdXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJUm91dGVWMiB7XG4gIHB1YmxpYyBnZXQgcm91dGVPdXRwdXRzKCk6IFJvdXRlT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdXRlVGFibGU6IHRoaXMucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgICBkZXN0aW5hdGlvbjogdGhpcy5kZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGhpcy50YXJnZXQuZW5kcG9pbnRcbiAgICAgICAgPyB0aGlzLnRhcmdldC5lbmRwb2ludC52cGNFbmRwb2ludE91dHB1dHNcbiAgICAgICAgOiB0aGlzLnRhcmdldC5nYXRld2F5IS5yb3V0ZVRhcmdldE91dHB1dHMsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVPdXRwdXRzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB0aGUgcm91dGUgaXMgdGFyZ2V0aW5nXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0Um91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIHJvdXRlIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZT86IHRmUm91dGUuUm91dGU7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIGNpZHIgYmxvY2sgZm9yIGlwdjZcbiAgICovXG4gIHByaXZhdGUgZGVzdGluYXRpb25JcHY2Q2lkcj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NFxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjRDaWRyPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMudGFyZ2V0ID0gcHJvcHMudGFyZ2V0O1xuICAgIHRoaXMucm91dGVUYWJsZSA9IHByb3BzLnJvdXRlVGFibGU7XG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGlzRGVzdGluYXRpb25JcHY0ID0gTmV0d29ya1V0aWxzLnZhbGlkSXAocHJvcHMuZGVzdGluYXRpb24pO1xuICAgIGlmICghaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIC8vVE9ETyBWYWxpZGF0ZSBmb3IgSVB2NiBDSURSIHJhbmdlXG4gICAgICB0aGlzLmRlc3RpbmF0aW9uSXB2NkNpZHIgPSBwcm9wcy5kZXN0aW5hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbklwdjRDaWRyID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy50YXJnZXQuZ2F0ZXdheT8ucm91dGVyVHlwZSA9PT1cbiAgICAgICAgUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZICYmXG4gICAgICBpc0Rlc3RpbmF0aW9uSXB2NFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkVncmVzcyBvbmx5IGludGVybmV0IGdhdGV3YXkgZG9lcyBub3Qgc3VwcG9ydCBJUHY0IHJvdXRpbmdcIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0Um91dGVyVHlwZSA9IHRoaXMudGFyZ2V0LmdhdGV3YXlcbiAgICAgID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUeXBlXG4gICAgICA6IFJvdXRlclR5cGUuVlBDX0VORFBPSU5UO1xuICAgIC8vIEdhdGV3YXkgZ2VuZXJhdGVzIHJvdXRlIGF1dG9tYXRpY2FsbHkgdmlhIGl0cyBSb3V0ZVRhYmxlLCB0aHVzIHdlIGRvbid0IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHJlc291cmNlIGZvciBpdFxuICAgIGlmICghKHRoaXMudGFyZ2V0LmVuZHBvaW50IGluc3RhbmNlb2YgR2F0ZXdheVZwY0VuZHBvaW50KSkge1xuICAgICAgdGhpcy5yZXNvdXJjZSA9IG5ldyB0ZlJvdXRlLlJvdXRlKHRoaXMsIFwiUm91dGVcIiwge1xuICAgICAgICByb3V0ZVRhYmxlSWQ6IHRoaXMucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgICAgIGRlc3RpbmF0aW9uQ2lkckJsb2NrOiB0aGlzLmRlc3RpbmF0aW9uSXB2NENpZHIsXG4gICAgICAgIGRlc3RpbmF0aW9uSXB2NkNpZHJCbG9jazogdGhpcy5kZXN0aW5hdGlvbklwdjZDaWRyLFxuICAgICAgICBbcm91dGVyVHlwZVRvUHJvcE5hbWUodGhpcy50YXJnZXRSb3V0ZXJUeXBlKV06IHRoaXMudGFyZ2V0LmdhdGV3YXlcbiAgICAgICAgICA/IHRoaXMudGFyZ2V0LmdhdGV3YXkucm91dGVyVGFyZ2V0SWRcbiAgICAgICAgICA6IHRoaXMudGFyZ2V0LmVuZHBvaW50XG4gICAgICAgICAgICA/IHRoaXMudGFyZ2V0LmVuZHBvaW50LnZwY0VuZHBvaW50SWRcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIC8vQ3JlYXRlIGEgcm91dGUgb25seSBhZnRlciB0YXJnZXQgZ2F0ZXdheSBvciBlbmRwb2ludCBpcyBjcmVhdGVkXG4gICAgaWYgKHRoaXMudGFyZ2V0LmdhdGV3YXkpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmdhdGV3YXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXJnZXQuZW5kcG9pbnQpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmVuZHBvaW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIHJvdXRlIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIHRhYmxlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZSB0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBWUENcbiAqIEByZXNvdXJjZSBhd3Nfcm91dGVfdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlVGFibGUgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVJvdXRlVGFibGUge1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFibGVPdXRwdXRzKCk6IFJvdXRlVGFibGVPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVUYWJsZUlkOiB0aGlzLnJvdXRlVGFibGVJZCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZVRhYmxlT3V0cHV0cztcbiAgfVxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvdXRlIHRhYmxlIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogdGZSb3V0ZVRhYmxlLlJvdXRlVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHRmUm91dGVUYWJsZS5Sb3V0ZVRhYmxlKHRoaXMsIFwiUm91dGVUYWJsZVwiLCB7XG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgIH0pO1xuICAgIGlmIChwcm9wcy5yb3V0ZVRhYmxlTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnJvdXRlVGFibGVOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlVGFibGVJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBjdXN0b20gcm91dGUgdG8gdGhlIHJvdXRlIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqIEBwYXJhbSByb3V0ZU5hbWUgVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIGFkZFJvdXRlKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGVzdGluYXRpb246IHN0cmluZyxcbiAgICB0YXJnZXQ6IFJvdXRlVGFyZ2V0VHlwZSxcbiAgICByb3V0ZU5hbWU/OiBzdHJpbmcsXG4gICkge1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgcm91dGVUYWJsZTogdGhpcyxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcm91dGVOYW1lOiByb3V0ZU5hbWUsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBpbnZlcnNlIG9mXG4gKiBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1wcm92aWRlci1hd3MvYmxvYi92NS44Ny4wL2ludGVybmFsL3NlcnZpY2UvZWMyL3ZwY19yb3V0ZS5nbyNMMjE5LUwyMzlcbiAqL1xuZnVuY3Rpb24gcm91dGVyVHlwZVRvUHJvcE5hbWUocm91dGVyVHlwZTogUm91dGVyVHlwZSkge1xuICBjb25zdCBsb29rdXBNYXA6IFJlY29yZDxSb3V0ZXJUeXBlLCBrZXlvZiB0ZlJvdXRlLlJvdXRlQ29uZmlnPiA9IHtcbiAgICBbUm91dGVyVHlwZS5DQVJSSUVSX0dBVEVXQVldOiBcImNhcnJpZXJHYXRld2F5SWRcIixcbiAgICBbUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZXTogXCJlZ3Jlc3NPbmx5R2F0ZXdheUlkXCIsXG4gICAgW1JvdXRlclR5cGUuR0FURVdBWV06IFwiZ2F0ZXdheUlkXCIsXG4gICAgLy8gdGVycmFmb3JtLXByb3ZpZGVyLWF3cyBpcyBtaXNzaW5nIHN3aXRjaCBjYXNlIGZvciBJbnN0YW5jZUlkXG4gICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVSb3V0ZS5odG1sXG4gICAgLy8gW1JvdXRlclR5cGUuSU5TVEFOQ0VdOiBcImluc3RhbmNlSWRcIixcbiAgICBbUm91dGVyVHlwZS5MT0NBTF9HQVRFV0FZXTogXCJsb2NhbEdhdGV3YXlJZFwiLFxuICAgIFtSb3V0ZXJUeXBlLk5BVF9HQVRFV0FZXTogXCJuYXRHYXRld2F5SWRcIixcbiAgICBbUm91dGVyVHlwZS5ORVRXT1JLX0lOVEVSRkFDRV06IFwibmV0d29ya0ludGVyZmFjZUlkXCIsXG4gICAgW1JvdXRlclR5cGUuVFJBTlNJVF9HQVRFV0FZXTogXCJ0cmFuc2l0R2F0ZXdheUlkXCIsXG4gICAgW1JvdXRlclR5cGUuVlBDX1BFRVJJTkdfQ09OTkVDVElPTl06IFwidnBjUGVlcmluZ0Nvbm5lY3Rpb25JZFwiLFxuICAgIFtSb3V0ZXJUeXBlLlZQQ19FTkRQT0lOVF06IFwidnBjRW5kcG9pbnRJZFwiLFxuICB9O1xuICByZXR1cm4gbG9va3VwTWFwW3JvdXRlclR5cGVdO1xufVxuIl19
@@ -102,6 +102,10 @@ export declare class Runtime {
102
102
  * The NodeJS 22.x runtime (nodejs22.x)
103
103
  */
104
104
  static readonly NODEJS_22_X: Runtime;
105
+ /**
106
+ * The NodeJS 24.x runtime (nodejs24.x)
107
+ */
108
+ static readonly NODEJS_24_X: Runtime;
105
109
  /**
106
110
  * The Python 2.7 runtime (python2.7)
107
111
  * @deprecated Legacy runtime no longer supported by AWS Lambda. Migrate to the latest Python runtime.
@@ -145,6 +149,10 @@ export declare class Runtime {
145
149
  * The Python 3.13 runtime (python3.13)
146
150
  */
147
151
  static readonly PYTHON_3_13: Runtime;
152
+ /**
153
+ * The Python 3.14 runtime (python3.14)
154
+ */
155
+ static readonly PYTHON_3_14: Runtime;
148
156
  /**
149
157
  * The Java 8 runtime (java8)
150
158
  * @deprecated Legacy runtime no longer supported by AWS Lambda. Migrate to the latest Java runtime.
@@ -49,7 +49,7 @@ class Runtime {
49
49
  }
50
50
  exports.Runtime = Runtime;
51
51
  _a = JSII_RTTI_SYMBOL_1;
52
- Runtime[_a] = { fqn: "terraconstructs.aws.compute.Runtime", version: "0.1.7" };
52
+ Runtime[_a] = { fqn: "terraconstructs.aws.compute.Runtime", version: "0.1.9" };
53
53
  /** A list of all known `Runtime`'s. */
54
54
  Runtime.ALL = new Array();
55
55
  /**
@@ -106,11 +106,16 @@ Runtime.NODEJS_20_X = new Runtime("nodejs20.x", RuntimeFamily.NODEJS, { supports
106
106
  * The latest NodeJS version currently available in ALL regions (not necessarily the latest NodeJS version
107
107
  * available in YOUR region).
108
108
  */
109
- Runtime.NODEJS_LATEST = new Runtime("nodejs18.x", RuntimeFamily.NODEJS, { supportsInlineCode: true, isVariable: true });
109
+ Runtime.NODEJS_LATEST = new Runtime("nodejs22.x", // TODO: review this
110
+ RuntimeFamily.NODEJS, { supportsInlineCode: true, isVariable: true });
110
111
  /**
111
112
  * The NodeJS 22.x runtime (nodejs22.x)
112
113
  */
113
114
  Runtime.NODEJS_22_X = new Runtime("nodejs22.x", RuntimeFamily.NODEJS, { supportsInlineCode: true });
115
+ /**
116
+ * The NodeJS 24.x runtime (nodejs24.x)
117
+ */
118
+ Runtime.NODEJS_24_X = new Runtime("nodejs24.x", RuntimeFamily.NODEJS, { supportsInlineCode: true });
114
119
  /**
115
120
  * The Python 2.7 runtime (python2.7)
116
121
  * @deprecated Legacy runtime no longer supported by AWS Lambda. Migrate to the latest Python runtime.
@@ -180,6 +185,14 @@ Runtime.PYTHON_3_13 = new Runtime("python3.13", RuntimeFamily.PYTHON, {
180
185
  supportsCodeGuruProfiling: true,
181
186
  supportsSnapStart: true,
182
187
  });
188
+ /**
189
+ * The Python 3.14 runtime (python3.14)
190
+ */
191
+ Runtime.PYTHON_3_14 = new Runtime("python3.14", RuntimeFamily.PYTHON, {
192
+ supportsInlineCode: true,
193
+ supportsCodeGuruProfiling: true,
194
+ supportsSnapStart: true,
195
+ });
183
196
  /**
184
197
  * The Java 8 runtime (java8)
185
198
  * @deprecated Legacy runtime no longer supported by AWS Lambda. Migrate to the latest Java runtime.
@@ -329,9 +342,9 @@ const LATEST_NODE_RUNTIME_MAP = {
329
342
  [partition_1.Partition.Default]: RuntimeFact.NODE_22,
330
343
  [partition_1.Partition.Cn]: RuntimeFact.NODE_22,
331
344
  [partition_1.Partition.UsGov]: RuntimeFact.NODE_22,
332
- [partition_1.Partition.UsIso]: RuntimeFact.NODE_18,
333
- [partition_1.Partition.UsIsoB]: RuntimeFact.NODE_18,
334
- [partition_1.Partition.UsIsoF]: RuntimeFact.NODE_18,
335
- [partition_1.Partition.EuIsoE]: RuntimeFact.NODE_18,
345
+ [partition_1.Partition.UsIso]: RuntimeFact.NODE_22,
346
+ [partition_1.Partition.UsIsoB]: RuntimeFact.NODE_22,
347
+ [partition_1.Partition.UsIsoF]: RuntimeFact.NODE_22,
348
+ [partition_1.Partition.EuIsoE]: RuntimeFact.NODE_22,
336
349
  };
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFvaEJBLGdFQVdDO0FBS0Qsc0NBWUM7O0FBaGpCRCxpQ0FBOEI7QUFFOUIsZ0RBQWdEO0FBQ2hELDZDQUE2QztBQUM3Qyw0Q0FBd0M7QUFDeEMsNENBQTBEO0FBbUMxRCxJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDdkIscURBQU0sQ0FBQTtJQUNOLGlEQUFJLENBQUE7SUFDSixxREFBTSxDQUFBO0lBQ04sK0RBQVcsQ0FBQTtJQUNYLDZDQUFFLENBQUE7SUFDRixpREFBSSxDQUFBO0lBQ0osbURBQUssQ0FBQTtBQUNQLENBQUMsRUFSVyxhQUFhLDZCQUFiLGFBQWEsUUFReEI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsT0FBTztJQXlibEIsWUFDRSxJQUFZLEVBQ1osTUFBc0IsRUFDdEIsUUFBNEIsRUFBRTtRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRXJDLE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsSUFBSSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLEtBQUssQ0FBQztRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtB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IjpbImltcG9ydCB7IFRva2VuIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuLy8gVE9ETzogdXNlIEBjZGt0Zi9wcm92aWRlci1kb2NrZXIgZm9yIGJ1bmRsaW5nXG5pbXBvcnQgeyBEb2NrZXJJbWFnZSB9IGZyb20gXCIuLi8uLi9idW5kbGluZ1wiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgeyBQYXJ0aXRpb24sIHBhcnRpdGlvbkxvb2t1cCB9IGZyb20gXCIuLi9wYXJ0aXRpb25cIjtcbi8vIGltcG9ydCB7IEZhY3ROYW1lIH0gZnJvbSAnLi4vLi4vcmVnaW9uLWluZm8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJ1bnRpbWVQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBgYFppcEZpbGVgYCAoYWthIGlubGluZSBjb2RlKSBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIHRoaXMgcnVudGltZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRzSW5saW5lQ29kZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJ1bnRpbWUgZW51bSBpcyBtZWFudCB0byBjaGFuZ2Ugb3ZlciB0aW1lLCBJRSBOT0RFSlNfTEFURVNULlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNWYXJpYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBEb2NrZXIgaW1hZ2UgbmFtZSB0byBiZSB1c2VkIGZvciBidW5kbGluZyBpbiB0aGlzIHJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCBkb2NrZXIgaW1hZ2UgXCJhbWF6b24vcHVibGljLmVjci5hd3Mvc2FtL2J1aWxkLTxydW50aW1lPlwiIGZyb20gaHR0cHM6Ly9nYWxsZXJ5LmVjci5hd3NcbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsaW5nRG9ja2VySW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBydW50aW1lIGlzIGludGVncmF0ZWQgd2l0aCBhbmQgc3VwcG9ydGVkIGZvciBwcm9maWxpbmcgdXNpbmcgQW1hem9uIENvZGVHdXJ1IFByb2ZpbGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBydW50aW1lIHN1cHBvcnRzIFNuYXBTdGFydC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRzU25hcFN0YXJ0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gUnVudGltZUZhbWlseSB7XG4gIE5PREVKUyxcbiAgSkFWQSxcbiAgUFlUSE9OLFxuICBET1RORVRfQ09SRSxcbiAgR08sXG4gIFJVQlksXG4gIE9USEVSLFxufVxuXG4vKipcbiAqIExhbWJkYSBmdW5jdGlvbiBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIElmIHlvdSBuZWVkIHRvIHVzZSBhIHJ1bnRpbWUgbmFtZSB0aGF0IGRvZXNuJ3QgZXhpc3QgYXMgYSBzdGF0aWMgbWVtYmVyLCB5b3VcbiAqIGNhbiBpbnN0YW50aWF0ZSBhIGBSdW50aW1lYCBvYmplY3QsIGUuZzogYG5ldyBSdW50aW1lKCdub2RlanM5OS45OScpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bnRpbWUge1xuICAvKiogQSBsaXN0IG9mIGFsbCBrbm93biBgUnVudGltZWAncy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTEwgPSBuZXcgQXJyYXk8UnVudGltZT4oKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyBydW50aW1lIChub2RlanMpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlMgPSBuZXcgUnVudGltZShcIm5vZGVqc1wiLCBSdW50aW1lRmFtaWx5Lk5PREVKUywge1xuICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgNC4zIHJ1bnRpbWUgKG5vZGVqczQuMylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU180XzMgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczQuM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgNi4xMCBydW50aW1lIChub2RlanM2LjEwKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzZfMTAgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczYuMTBcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDguMTAgcnVudGltZSAobm9kZWpzOC4xMClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU184XzEwID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanM4LjEwXCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxMC54IHJ1bnRpbWUgKG5vZGVqczEwLngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTBfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTAueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTIueCBydW50aW1lIChub2RlanMxMi54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzEyX1ggPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczEyLnhcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDE0LnggcnVudGltZSAobm9kZWpzMTQueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xNF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxNC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxNi54IHJ1bnRpbWUgKG5vZGVqczE2LngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTZfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTYueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTgueCBydW50aW1lIChub2RlanMxOC54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMThfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTgueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMjAueCBydW50aW1lIChub2RlanMyMC54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMjBfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjAueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgTm9kZUpTIHZlcnNpb24gY3VycmVudGx5IGF2YWlsYWJsZSBpbiBBTEwgcmVnaW9ucyAobm90IG5lY2Vzc2FyaWx5IHRoZSBsYXRlc3QgTm9kZUpTIHZlcnNpb25cbiAgICogYXZhaWxhYmxlIGluIFlPVVIgcmVnaW9uKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTX0xBVEVTVCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTgueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLCBpc1ZhcmlhYmxlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMjIueCBydW50aW1lIChub2RlanMyMi54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMjJfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjIueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMi43IHJ1bnRpbWUgKHB5dGhvbjIuNylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8yXzcgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjIuN1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy42IHJ1bnRpbWUgKHB5dGhvbjMuNikgKG5vdCByZWNvbW1lbmRlZClcbiAgICpcbiAgICogVGhlIFB5dGhvbiAzLjYgcnVudGltZSBpcyBkZXByZWNhdGVkIGFzIG9mIEp1bHkgMjAyMi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzYgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuNlwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjcgcnVudGltZSAocHl0aG9uMy43KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfNyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy43XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuOCBydW50aW1lIChweXRob24zLjgpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFB5dGhvbiBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM184ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjhcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy45IHJ1bnRpbWUgKHB5dGhvbjMuOSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfOSA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy45XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuMTAgcnVudGltZSAocHl0aG9uMy4xMClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfMTAgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuMTBcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMSBydW50aW1lIChweXRob24zLjExKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMSA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xMVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjEyIHJ1bnRpbWUgKHB5dGhvbjMuMTIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzEyID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjEyXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMyBydW50aW1lIChweXRob24zLjEzKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSA4IHJ1bnRpbWUgKGphdmE4KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBKYXZhIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfOCA9IG5ldyBSdW50aW1lKFwiamF2YThcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDggQ29ycmV0dG8gcnVudGltZSAoamF2YTguYWwyKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzhfQ09SUkVUVE8gPSBuZXcgUnVudGltZShcbiAgICBcImphdmE4LmFsMlwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuSkFWQSxcbiAgICB7XG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDExIHJ1bnRpbWUgKGphdmExMSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkFWQV8xMSA9IG5ldyBSdW50aW1lKFwiamF2YTExXCIsIFJ1bnRpbWVGYW1pbHkuSkFWQSwge1xuICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSAxNyBydW50aW1lIChqYXZhMTcpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfMTcgPSBuZXcgUnVudGltZShcImphdmExN1wiLCBSdW50aW1lRmFtaWx5LkpBVkEsIHtcbiAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIEphdmEgMjEgcnVudGltZSAoamF2YTIxKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzIxID0gbmV3IFJ1bnRpbWUoXCJqYXZhMjFcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIDYgcnVudGltZSAoZG90bmV0NilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUXzYgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldDZcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA4IHJ1bnRpbWUgKGRvdG5ldDgpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF84ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ4XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgICB7XG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA5IHJ1bnRpbWUgKGRvdG5ldDkpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF85ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ5XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgICB7XG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCBDb3JlIDEuMCBydW50aW1lIChkb3RuZXRjb3JlMS4wKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCAuTkVUIENvcmUgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUX0NPUkVfMSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTEuMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMi4wIHJ1bnRpbWUgKGRvdG5ldGNvcmUyLjApXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8yID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXRjb3JlMi4wXCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgQ29yZSAyLjEgcnVudGltZSAoZG90bmV0Y29yZTIuMSlcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgLk5FVCBDb3JlIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF9DT1JFXzJfMSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTIuMVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMy4xIHJ1bnRpbWUgKGRvdG5ldGNvcmUzLjEpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8zXzEgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldGNvcmUzLjFcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgR28gMS54IHJ1bnRpbWUgKGdvMS54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIFBST1ZJREVEX0FMMjAyMyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBHT18xX1ggPSBuZXcgUnVudGltZShcImdvMS54XCIsIFJ1bnRpbWVGYW1pbHkuR08pO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAyLjUgcnVudGltZSAocnVieTIuNSlcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUnVieSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzJfNSA9IG5ldyBSdW50aW1lKFwicnVieTIuNVwiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAyLjcgcnVudGltZSAocnVieTIuNylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUnVieSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzJfNyA9IG5ldyBSdW50aW1lKFwicnVieTIuN1wiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAzLjIgcnVudGltZSAocnVieTMuMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8zXzIgPSBuZXcgUnVudGltZShcInJ1YnkzLjJcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMy4zIHJ1bnRpbWUgKHJ1YnkzLjMpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJVQllfM18zID0gbmV3IFJ1bnRpbWUoXCJydWJ5My4zXCIsIFJ1bnRpbWVGYW1pbHkuUlVCWSk7XG5cbiAgLyoqXG4gICAqIFRoZSBSdWJ5IDMuNCBydW50aW1lIChydWJ5My40KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzNfNCA9IG5ldyBSdW50aW1lKFwicnVieTMuNFwiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHByb3ZpZGVkIHJ1bnRpbWUgKHByb3ZpZGVkKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBwcm92aWRlZC5hbDIwMjMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERUQgPSBuZXcgUnVudGltZShcbiAgICBcInByb3ZpZGVkXCIsXG4gICAgUnVudGltZUZhbWlseS5PVEhFUixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBwcm92aWRlZCBydW50aW1lIHdpdGggQW1hem9uIExpbnV4IDIgKHByb3ZpZGVkLmFsMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERURfQUwyID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJwcm92aWRlZC5hbDJcIixcbiAgICBSdW50aW1lRmFtaWx5Lk9USEVSLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHByb3ZpZGVkIHJ1bnRpbWUgd2l0aCBBbWF6b24gTGludXggMjAyMyAocHJvdmlkZWQuYWwyMDIzKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9WSURFRF9BTDIwMjMgPSBuZXcgUnVudGltZShcbiAgICBcInByb3ZpZGVkLmFsMjAyM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuT1RIRVIsXG4gICk7XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbCBydW50aW1lIGVudHJ5IHRvIGJlIHVzZWQgd2hlbiBmdW5jdGlvbiBpcyB1c2luZyBhIGRvY2tlciBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRlJPTV9JTUFHRSA9IG5ldyBSdW50aW1lKFwiRlJPTV9JTUFHRVwiKTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBydW50aW1lLCBhcyBleHBlY3RlZCBieSB0aGUgTGFtYmRhIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYGBaaXBGaWxlYGAgKGFrYSBpbmxpbmUgY29kZSkgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCB0aGlzXG4gICAqIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNJbmxpbmVDb2RlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcnVudGltZSBpcyBpbnRlZ3JhdGVkIHdpdGggYW5kIHN1cHBvcnRlZCBmb3IgcHJvZmlsaW5nIHVzaW5nIEFtYXpvbiBDb2RlR3VydSBQcm9maWxlci5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcnVudGltZSBzdXBwb3J0cyBzbmFwc3RhcnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNTbmFwU3RhcnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIGZhbWlseS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmYW1pbHk/OiBSdW50aW1lRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBUaGUgYnVuZGxpbmcgRG9ja2VyIGltYWdlIGZvciB0aGlzIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVuZGxpbmdJbWFnZTogRG9ja2VySW1hZ2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZWQgZm9yIHJ1bnRpbWUgZW51bXMgdGhhdCBhbHdheXMgdGFyZ2V0IHRoZSBsYXRlc3QgYXZhaWxhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzVmFyaWFibGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZhbWlseT86IFJ1bnRpbWVGYW1pbHksXG4gICAgcHJvcHM6IExhbWJkYVJ1bnRpbWVQcm9wcyA9IHt9LFxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuc3VwcG9ydHNJbmxpbmVDb2RlID0gISFwcm9wcy5zdXBwb3J0c0lubGluZUNvZGU7XG4gICAgdGhpcy5mYW1pbHkgPSBmYW1pbHk7XG4gICAgdGhpcy5pc1ZhcmlhYmxlID0gISFwcm9wcy5pc1ZhcmlhYmxlO1xuXG4gICAgY29uc3QgaW1hZ2VOYW1lID1cbiAgICAgIHByb3BzLmJ1bmRsaW5nRG9ja2VySW1hZ2UgPz8gYHB1YmxpYy5lY3IuYXdzL3NhbS9idWlsZC0ke25hbWV9YDtcbiAgICB0aGlzLmJ1bmRsaW5nSW1hZ2UgPSBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoaW1hZ2VOYW1lKTtcbiAgICB0aGlzLnN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmcgPSBwcm9wcy5zdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nID8/IGZhbHNlO1xuICAgIHRoaXMuc3VwcG9ydHNTbmFwU3RhcnQgPSBwcm9wcy5zdXBwb3J0c1NuYXBTdGFydCA/PyBmYWxzZTtcblxuICAgIFJ1bnRpbWUuQUxMLnB1c2godGhpcyk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgcHVibGljIHJ1bnRpbWVFcXVhbHMob3RoZXI6IFJ1bnRpbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgb3RoZXIubmFtZSA9PT0gdGhpcy5uYW1lICYmXG4gICAgICBvdGhlci5mYW1pbHkgPT09IHRoaXMuZmFtaWx5ICYmXG4gICAgICBvdGhlci5zdXBwb3J0c0lubGluZUNvZGUgPT09IHRoaXMuc3VwcG9ydHNJbmxpbmVDb2RlXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBsYXRlc3QgTGFtYmRhIG5vZGUgcnVudGltZSBhdmFpbGFibGUgYnkgQVdTIHJlZ2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZUxhdGVzdE5vZGVSdW50aW1lKHNjb3BlOiBDb25zdHJ1Y3QpOiBSdW50aW1lIHtcbiAgLy8gUnVudGltZSByZWdpb25hbCBmYWN0IHNob3VsZCBhbHdheXMgcmV0dXJuIGEga25vd24gcnVudGltZSBzdHJpbmcgdGhhdCBSdW50aW1lIGNhbiBpbmRleCBvZmYsIGJ1dCBmb3IgdHlwZVxuICAvLyBzYWZldHkgd2UgYWxzbyBkZWZhdWx0IGl0IGhlcmUuXG4gIGNvbnN0IHJ1bnRpbWVOYW1lID0gcnVudGltZUxvb2t1cChcbiAgICBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSkucmVnaW9uLFxuICAgIFJ1bnRpbWUuTk9ERUpTXzE4X1gubmFtZSxcbiAgKTtcbiAgcmV0dXJuIG5ldyBSdW50aW1lKHJ1bnRpbWVOYW1lLCBSdW50aW1lRmFtaWx5Lk5PREVKUywge1xuICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICBpc1ZhcmlhYmxlOiB0cnVlLFxuICB9KTtcbn1cblxuLy8gRmFjdCBUYWJsZSBNb2NrIGZ1bmN0aW9uc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvbWFpbi9wYWNrYWdlcy9hd3MtY2RrLWxpYi9yZWdpb24taW5mby9idWlsZC10b29scy9mYWN0LXRhYmxlcy50c1xuXG5leHBvcnQgZnVuY3Rpb24gcnVudGltZUxvb2t1cChyZWdpb246IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChyZWdpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGRldGVybWluZSByZWdpb24gcGFydGl0aW9uIGZvciB1bnJlc29sdmVkIHJlZ2lvblwiKTtcbiAgfVxuICBjb25zdCB7IHBhcnRpdGlvbiB9ID0gcGFydGl0aW9uTG9va3VwKHJlZ2lvbik7XG4gIGNvbnN0IHJ1bnRpbWUgPSBMQVRFU1RfTk9ERV9SVU5USU1FX01BUFtwYXJ0aXRpb25dID8/IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKCFydW50aW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE5vIHJ1bnRpbWUgZm91bmQgZm9yIHBhcnRpdGlvbiAke3BhcnRpdGlvbn0gaW4gcmVnaW9uICR7cmVnaW9ufS5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJ1bnRpbWU7XG59XG5cbmVudW0gUnVudGltZUZhY3Qge1xuICBOT0RFXzE4ID0gXCJub2RlanMxOC54XCIsXG4gIE5PREVfMjAgPSBcIm5vZGVqczIwLnhcIixcbiAgTk9ERV8yMiA9IFwibm9kZWpzMjIueFwiLFxufVxuXG5jb25zdCBMQVRFU1RfTk9ERV9SVU5USU1FX01BUDogUmVjb3JkPFBhcnRpdGlvbiwgc3RyaW5nPiA9IHtcbiAgW1BhcnRpdGlvbi5EZWZhdWx0XTogUnVudGltZUZhY3QuTk9ERV8yMixcbiAgW1BhcnRpdGlvbi5Dbl06IFJ1bnRpbWVGYWN0Lk5PREVfMjIsXG4gIFtQYXJ0aXRpb24uVXNHb3ZdOiBSdW50aW1lRmFjdC5OT0RFXzIyLFxuICBbUGFydGl0aW9uLlVzSXNvXTogUnVudGltZUZhY3QuTk9ERV8xOCxcbiAgW1BhcnRpdGlvbi5Vc0lzb0JdOiBSdW50aW1lRmFjdC5OT0RFXzE4LFxuICBbUGFydGl0aW9uLlVzSXNvRl06IFJ1bnRpbWVGYWN0Lk5PREVfMTgsXG4gIFtQYXJ0aXRpb24uRXVJc29FXTogUnVudGltZUZhY3QuTk9ERV8xOCxcbn07XG4iXX0=
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUEwaUJBLGdFQVdDO0FBS0Qsc0NBWUM7O0FBdGtCRCxpQ0FBOEI7QUFFOUIsZ0RBQWdEO0FBQ2hELDZDQUE2QztBQUM3Qyw0Q0FBd0M7QUFDeEMsNENBQTBEO0FBbUMxRCxJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDdkIscURBQU0sQ0FBQTtJQUNOLGlEQUFJLENBQUE7SUFDSixxREFBTSxDQUFBO0lBQ04sK0RBQVcsQ0FBQTtJQUNYLDZDQUFFLENBQUE7SUFDRixpREFBSSxDQUFBO0lBQ0osbURBQUssQ0FBQTtBQUNQLENBQUMsRUFSVyxhQUFhLDZCQUFiLGFBQWEsUUFReEI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsT0FBTztJQStjbEIsWUFDRSxJQUFZLEVBQ1osTUFBc0IsRUFDdEIsUUFBNEIsRUFBRTtRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRXJDLE1BQU0sU0FBUyxHQUNiLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsSUFBSSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDLHlCQUF5QixJQUFJLEtBQUssQ0FBQztRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLEtB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Q25DLENBQUMscUJBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTztJQUN0QyxDQUFDLHFCQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsV0FBVyxDQUFDLE9BQU87SUFDdEMsQ0FBQyxxQkFBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxPQUFPO0lBQ3ZDLENBQUMscUJBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTztJQUN2QyxDQUFDLHFCQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDLE9BQU87Q0FDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRva2VuIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuLy8gVE9ETzogdXNlIEBjZGt0Zi9wcm92aWRlci1kb2NrZXIgZm9yIGJ1bmRsaW5nXG5pbXBvcnQgeyBEb2NrZXJJbWFnZSB9IGZyb20gXCIuLi8uLi9idW5kbGluZ1wiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgeyBQYXJ0aXRpb24sIHBhcnRpdGlvbkxvb2t1cCB9IGZyb20gXCIuLi9wYXJ0aXRpb25cIjtcbi8vIGltcG9ydCB7IEZhY3ROYW1lIH0gZnJvbSAnLi4vLi4vcmVnaW9uLWluZm8nO1xuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJ1bnRpbWVQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBgYFppcEZpbGVgYCAoYWthIGlubGluZSBjb2RlKSBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIHRoaXMgcnVudGltZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRzSW5saW5lQ29kZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJ1bnRpbWUgZW51bSBpcyBtZWFudCB0byBjaGFuZ2Ugb3ZlciB0aW1lLCBJRSBOT0RFSlNfTEFURVNULlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNWYXJpYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBEb2NrZXIgaW1hZ2UgbmFtZSB0byBiZSB1c2VkIGZvciBidW5kbGluZyBpbiB0aGlzIHJ1bnRpbWUuXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCBkb2NrZXIgaW1hZ2UgXCJhbWF6b24vcHVibGljLmVjci5hd3Mvc2FtL2J1aWxkLTxydW50aW1lPlwiIGZyb20gaHR0cHM6Ly9nYWxsZXJ5LmVjci5hd3NcbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsaW5nRG9ja2VySW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBydW50aW1lIGlzIGludGVncmF0ZWQgd2l0aCBhbmQgc3VwcG9ydGVkIGZvciBwcm9maWxpbmcgdXNpbmcgQW1hem9uIENvZGVHdXJ1IFByb2ZpbGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBydW50aW1lIHN1cHBvcnRzIFNuYXBTdGFydC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRzU25hcFN0YXJ0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gUnVudGltZUZhbWlseSB7XG4gIE5PREVKUyxcbiAgSkFWQSxcbiAgUFlUSE9OLFxuICBET1RORVRfQ09SRSxcbiAgR08sXG4gIFJVQlksXG4gIE9USEVSLFxufVxuXG4vKipcbiAqIExhbWJkYSBmdW5jdGlvbiBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIElmIHlvdSBuZWVkIHRvIHVzZSBhIHJ1bnRpbWUgbmFtZSB0aGF0IGRvZXNuJ3QgZXhpc3QgYXMgYSBzdGF0aWMgbWVtYmVyLCB5b3VcbiAqIGNhbiBpbnN0YW50aWF0ZSBhIGBSdW50aW1lYCBvYmplY3QsIGUuZzogYG5ldyBSdW50aW1lKCdub2RlanM5OS45OScpYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bnRpbWUge1xuICAvKiogQSBsaXN0IG9mIGFsbCBrbm93biBgUnVudGltZWAncy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTEwgPSBuZXcgQXJyYXk8UnVudGltZT4oKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyBydW50aW1lIChub2RlanMpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlMgPSBuZXcgUnVudGltZShcIm5vZGVqc1wiLCBSdW50aW1lRmFtaWx5Lk5PREVKUywge1xuICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgNC4zIHJ1bnRpbWUgKG5vZGVqczQuMylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU180XzMgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczQuM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgNi4xMCBydW50aW1lIChub2RlanM2LjEwKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzZfMTAgPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczYuMTBcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDguMTAgcnVudGltZSAobm9kZWpzOC4xMClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU184XzEwID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanM4LjEwXCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxMC54IHJ1bnRpbWUgKG5vZGVqczEwLngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTBfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTAueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTIueCBydW50aW1lIChub2RlanMxMi54KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBOb2RlSlMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTXzEyX1ggPSBuZXcgUnVudGltZShcbiAgICBcIm5vZGVqczEyLnhcIixcbiAgICBSdW50aW1lRmFtaWx5Lk5PREVKUyxcbiAgICB7IHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZUpTIDE0LnggcnVudGltZSAobm9kZWpzMTQueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgTm9kZUpTIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PREVKU18xNF9YID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJub2RlanMxNC54XCIsXG4gICAgUnVudGltZUZhbWlseS5OT0RFSlMsXG4gICAgeyBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIE5vZGVKUyAxNi54IHJ1bnRpbWUgKG5vZGVqczE2LngpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IE5vZGVKUyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMTZfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTYueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMTgueCBydW50aW1lIChub2RlanMxOC54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMThfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMTgueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMjAueCBydW50aW1lIChub2RlanMyMC54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMjBfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjAueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBsYXRlc3QgTm9kZUpTIHZlcnNpb24gY3VycmVudGx5IGF2YWlsYWJsZSBpbiBBTEwgcmVnaW9ucyAobm90IG5lY2Vzc2FyaWx5IHRoZSBsYXRlc3QgTm9kZUpTIHZlcnNpb25cbiAgICogYXZhaWxhYmxlIGluIFlPVVIgcmVnaW9uKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ERUpTX0xBVEVTVCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjIueFwiLCAvLyBUT0RPOiByZXZpZXcgdGhpc1xuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLCBpc1ZhcmlhYmxlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMjIueCBydW50aW1lIChub2RlanMyMi54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMjJfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjIueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlSlMgMjQueCBydW50aW1lIChub2RlanMyNC54KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOT0RFSlNfMjRfWCA9IG5ldyBSdW50aW1lKFxuICAgIFwibm9kZWpzMjQueFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuTk9ERUpTLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMi43IHJ1bnRpbWUgKHB5dGhvbjIuNylcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8yXzcgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjIuN1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHsgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy42IHJ1bnRpbWUgKHB5dGhvbjMuNikgKG5vdCByZWNvbW1lbmRlZClcbiAgICpcbiAgICogVGhlIFB5dGhvbiAzLjYgcnVudGltZSBpcyBkZXByZWNhdGVkIGFzIG9mIEp1bHkgMjAyMi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgUHl0aG9uIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzYgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuNlwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjcgcnVudGltZSAocHl0aG9uMy43KVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCBQeXRob24gcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfNyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy43XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuOCBydW50aW1lIChweXRob24zLjgpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFB5dGhvbiBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM184ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjhcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy45IHJ1bnRpbWUgKHB5dGhvbjMuOSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfOSA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy45XCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuMTAgcnVudGltZSAocHl0aG9uMy4xMClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfMTAgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuMTBcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMSBydW50aW1lIChweXRob24zLjExKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMSA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xMVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiAzLjEyIHJ1bnRpbWUgKHB5dGhvbjMuMTIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBZVEhPTl8zXzEyID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJweXRob24zLjEyXCIsXG4gICAgUnVudGltZUZhbWlseS5QWVRIT04sXG4gICAge1xuICAgICAgc3VwcG9ydHNJbmxpbmVDb2RlOiB0cnVlLFxuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBQeXRob24gMy4xMyBydW50aW1lIChweXRob24zLjEzKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQWVRIT05fM18xMyA9IG5ldyBSdW50aW1lKFxuICAgIFwicHl0aG9uMy4xM1wiLFxuICAgIFJ1bnRpbWVGYW1pbHkuUFlUSE9OLFxuICAgIHtcbiAgICAgIHN1cHBvcnRzSW5saW5lQ29kZTogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgUHl0aG9uIDMuMTQgcnVudGltZSAocHl0aG9uMy4xNClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFlUSE9OXzNfMTQgPSBuZXcgUnVudGltZShcbiAgICBcInB5dGhvbjMuMTRcIixcbiAgICBSdW50aW1lRmFtaWx5LlBZVEhPTixcbiAgICB7XG4gICAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIEphdmEgOCBydW50aW1lIChqYXZhOClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgSmF2YSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzggPSBuZXcgUnVudGltZShcImphdmE4XCIsIFJ1bnRpbWVGYW1pbHkuSkFWQSwge1xuICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSA4IENvcnJldHRvIHJ1bnRpbWUgKGphdmE4LmFsMilcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkFWQV84X0NPUlJFVFRPID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJqYXZhOC5hbDJcIixcbiAgICBSdW50aW1lRmFtaWx5LkpBVkEsXG4gICAge1xuICAgICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgSmF2YSAxMSBydW50aW1lIChqYXZhMTEpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEpBVkFfMTEgPSBuZXcgUnVudGltZShcImphdmExMVwiLCBSdW50aW1lRmFtaWx5LkpBVkEsIHtcbiAgICBzdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nOiB0cnVlLFxuICAgIHN1cHBvcnRzU25hcFN0YXJ0OiB0cnVlLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIEphdmEgMTcgcnVudGltZSAoamF2YTE3KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBKQVZBXzE3ID0gbmV3IFJ1bnRpbWUoXCJqYXZhMTdcIiwgUnVudGltZUZhbWlseS5KQVZBLCB7XG4gICAgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogdHJ1ZSxcbiAgICBzdXBwb3J0c1NuYXBTdGFydDogdHJ1ZSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBKYXZhIDIxIHJ1bnRpbWUgKGphdmEyMSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSkFWQV8yMSA9IG5ldyBSdW50aW1lKFwiamF2YTIxXCIsIFJ1bnRpbWVGYW1pbHkuSkFWQSwge1xuICAgIHN1cHBvcnRzQ29kZUd1cnVQcm9maWxpbmc6IHRydWUsXG4gICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCA2IHJ1bnRpbWUgKGRvdG5ldDYpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF82ID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXQ2XCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgOCBydW50aW1lIChkb3RuZXQ4KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfOCA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0OFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICAge1xuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgOSBydW50aW1lIChkb3RuZXQ5KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfOSA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0OVwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICAge1xuICAgICAgc3VwcG9ydHNTbmFwU3RhcnQ6IHRydWUsXG4gICAgfSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIC5ORVQgQ29yZSAxLjAgcnVudGltZSAoZG90bmV0Y29yZTEuMClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgLk5FVCBDb3JlIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERPVE5FVF9DT1JFXzEgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldGNvcmUxLjBcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCBDb3JlIDIuMCBydW50aW1lIChkb3RuZXRjb3JlMi4wKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCAuTkVUIENvcmUgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUX0NPUkVfMiA9IG5ldyBSdW50aW1lKFxuICAgIFwiZG90bmV0Y29yZTIuMFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuRE9UTkVUX0NPUkUsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSAuTkVUIENvcmUgMi4xIHJ1bnRpbWUgKGRvdG5ldGNvcmUyLjEpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IC5ORVQgQ29yZSBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET1RORVRfQ09SRV8yXzEgPSBuZXcgUnVudGltZShcbiAgICBcImRvdG5ldGNvcmUyLjFcIixcbiAgICBSdW50aW1lRmFtaWx5LkRPVE5FVF9DT1JFLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgLk5FVCBDb3JlIDMuMSBydW50aW1lIChkb3RuZXRjb3JlMy4xKVxuICAgKiBAZGVwcmVjYXRlZCBMZWdhY3kgcnVudGltZSBubyBsb25nZXIgc3VwcG9ydGVkIGJ5IEFXUyBMYW1iZGEuIE1pZ3JhdGUgdG8gdGhlIGxhdGVzdCAuTkVUIENvcmUgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRE9UTkVUX0NPUkVfM18xID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJkb3RuZXRjb3JlMy4xXCIsXG4gICAgUnVudGltZUZhbWlseS5ET1RORVRfQ09SRSxcbiAgKTtcblxuICAvKipcbiAgICogVGhlIEdvIDEueCBydW50aW1lIChnbzEueClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBQUk9WSURFRF9BTDIwMjMgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgR09fMV9YID0gbmV3IFJ1bnRpbWUoXCJnbzEueFwiLCBSdW50aW1lRmFtaWx5LkdPKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMi41IHJ1bnRpbWUgKHJ1YnkyLjUpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFJ1YnkgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8yXzUgPSBuZXcgUnVudGltZShcInJ1YnkyLjVcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMi43IHJ1bnRpbWUgKHJ1YnkyLjcpXG4gICAqIEBkZXByZWNhdGVkIExlZ2FjeSBydW50aW1lIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgQVdTIExhbWJkYS4gTWlncmF0ZSB0byB0aGUgbGF0ZXN0IFJ1YnkgcnVudGltZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8yXzcgPSBuZXcgUnVudGltZShcInJ1YnkyLjdcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIFJ1YnkgMy4yIHJ1bnRpbWUgKHJ1YnkzLjIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJVQllfM18yID0gbmV3IFJ1bnRpbWUoXCJydWJ5My4yXCIsIFJ1bnRpbWVGYW1pbHkuUlVCWSk7XG5cbiAgLyoqXG4gICAqIFRoZSBSdWJ5IDMuMyBydW50aW1lIChydWJ5My4zKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSVUJZXzNfMyA9IG5ldyBSdW50aW1lKFwicnVieTMuM1wiLCBSdW50aW1lRmFtaWx5LlJVQlkpO1xuXG4gIC8qKlxuICAgKiBUaGUgUnVieSAzLjQgcnVudGltZSAocnVieTMuNClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUlVCWV8zXzQgPSBuZXcgUnVudGltZShcInJ1YnkzLjRcIiwgUnVudGltZUZhbWlseS5SVUJZKTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBwcm92aWRlZCBydW50aW1lIChwcm92aWRlZClcbiAgICogQGRlcHJlY2F0ZWQgTGVnYWN5IHJ1bnRpbWUgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBBV1MgTGFtYmRhLiBNaWdyYXRlIHRvIHRoZSBsYXRlc3QgcHJvdmlkZWQuYWwyMDIzIHJ1bnRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1ZJREVEID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJwcm92aWRlZFwiLFxuICAgIFJ1bnRpbWVGYW1pbHkuT1RIRVIsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gcHJvdmlkZWQgcnVudGltZSB3aXRoIEFtYXpvbiBMaW51eCAyIChwcm92aWRlZC5hbDIpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1ZJREVEX0FMMiA9IG5ldyBSdW50aW1lKFxuICAgIFwicHJvdmlkZWQuYWwyXCIsXG4gICAgUnVudGltZUZhbWlseS5PVEhFUixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBwcm92aWRlZCBydW50aW1lIHdpdGggQW1hem9uIExpbnV4IDIwMjMgKHByb3ZpZGVkLmFsMjAyMylcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPVklERURfQUwyMDIzID0gbmV3IFJ1bnRpbWUoXG4gICAgXCJwcm92aWRlZC5hbDIwMjNcIixcbiAgICBSdW50aW1lRmFtaWx5Lk9USEVSLFxuICApO1xuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWwgcnVudGltZSBlbnRyeSB0byBiZSB1c2VkIHdoZW4gZnVuY3Rpb24gaXMgdXNpbmcgYSBkb2NrZXIgaW1hZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZST01fSU1BR0UgPSBuZXcgUnVudGltZShcIkZST01fSU1BR0VcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgcnVudGltZSwgYXMgZXhwZWN0ZWQgYnkgdGhlIExhbWJkYSByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGBgWmlwRmlsZWBgIChha2EgaW5saW5lIGNvZGUpIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggdGhpc1xuICAgKiBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzSW5saW5lQ29kZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgaXMgaW50ZWdyYXRlZCB3aXRoIGFuZCBzdXBwb3J0ZWQgZm9yIHByb2ZpbGluZyB1c2luZyBBbWF6b24gQ29kZUd1cnUgUHJvZmlsZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJ1bnRpbWUgc3VwcG9ydHMgc25hcHN0YXJ0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRzU25hcFN0YXJ0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcnVudGltZSBmYW1pbHkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmFtaWx5PzogUnVudGltZUZhbWlseTtcblxuICAvKipcbiAgICogVGhlIGJ1bmRsaW5nIERvY2tlciBpbWFnZSBmb3IgdGhpcyBydW50aW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1bmRsaW5nSW1hZ2U6IERvY2tlckltYWdlO1xuXG4gIC8qKlxuICAgKiBFbmFibGVkIGZvciBydW50aW1lIGVudW1zIHRoYXQgYWx3YXlzIHRhcmdldCB0aGUgbGF0ZXN0IGF2YWlsYWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc1ZhcmlhYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmYW1pbHk/OiBSdW50aW1lRmFtaWx5LFxuICAgIHByb3BzOiBMYW1iZGFSdW50aW1lUHJvcHMgPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnN1cHBvcnRzSW5saW5lQ29kZSA9ICEhcHJvcHMuc3VwcG9ydHNJbmxpbmVDb2RlO1xuICAgIHRoaXMuZmFtaWx5ID0gZmFtaWx5O1xuICAgIHRoaXMuaXNWYXJpYWJsZSA9ICEhcHJvcHMuaXNWYXJpYWJsZTtcblxuICAgIGNvbnN0IGltYWdlTmFtZSA9XG4gICAgICBwcm9wcy5idW5kbGluZ0RvY2tlckltYWdlID8/IGBwdWJsaWMuZWNyLmF3cy9zYW0vYnVpbGQtJHtuYW1lfWA7XG4gICAgdGhpcy5idW5kbGluZ0ltYWdlID0gRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KGltYWdlTmFtZSk7XG4gICAgdGhpcy5zdXBwb3J0c0NvZGVHdXJ1UHJvZmlsaW5nID0gcHJvcHMuc3VwcG9ydHNDb2RlR3VydVByb2ZpbGluZyA/PyBmYWxzZTtcbiAgICB0aGlzLnN1cHBvcnRzU25hcFN0YXJ0ID0gcHJvcHMuc3VwcG9ydHNTbmFwU3RhcnQgPz8gZmFsc2U7XG5cbiAgICBSdW50aW1lLkFMTC5wdXNoKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBydW50aW1lRXF1YWxzKG90aGVyOiBSdW50aW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIG90aGVyLm5hbWUgPT09IHRoaXMubmFtZSAmJlxuICAgICAgb3RoZXIuZmFtaWx5ID09PSB0aGlzLmZhbWlseSAmJlxuICAgICAgb3RoZXIuc3VwcG9ydHNJbmxpbmVDb2RlID09PSB0aGlzLnN1cHBvcnRzSW5saW5lQ29kZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgbGF0ZXN0IExhbWJkYSBub2RlIHJ1bnRpbWUgYXZhaWxhYmxlIGJ5IEFXUyByZWdpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmVMYXRlc3ROb2RlUnVudGltZShzY29wZTogQ29uc3RydWN0KTogUnVudGltZSB7XG4gIC8vIFJ1bnRpbWUgcmVnaW9uYWwgZmFjdCBzaG91bGQgYWx3YXlzIHJldHVybiBhIGtub3duIHJ1bnRpbWUgc3RyaW5nIHRoYXQgUnVudGltZSBjYW4gaW5kZXggb2ZmLCBidXQgZm9yIHR5cGVcbiAgLy8gc2FmZXR5IHdlIGFsc28gZGVmYXVsdCBpdCBoZXJlLlxuICBjb25zdCBydW50aW1lTmFtZSA9IHJ1bnRpbWVMb29rdXAoXG4gICAgQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3Qoc2NvcGUpLnJlZ2lvbixcbiAgICBSdW50aW1lLk5PREVKU18xOF9YLm5hbWUsXG4gICk7XG4gIHJldHVybiBuZXcgUnVudGltZShydW50aW1lTmFtZSwgUnVudGltZUZhbWlseS5OT0RFSlMsIHtcbiAgICBzdXBwb3J0c0lubGluZUNvZGU6IHRydWUsXG4gICAgaXNWYXJpYWJsZTogdHJ1ZSxcbiAgfSk7XG59XG5cbi8vIEZhY3QgVGFibGUgTW9jayBmdW5jdGlvbnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL21haW4vcGFja2FnZXMvYXdzLWNkay1saWIvcmVnaW9uLWluZm8vYnVpbGQtdG9vbHMvZmFjdC10YWJsZXMudHNcblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bnRpbWVMb29rdXAocmVnaW9uOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocmVnaW9uKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBkZXRlcm1pbmUgcmVnaW9uIHBhcnRpdGlvbiBmb3IgdW5yZXNvbHZlZCByZWdpb25cIik7XG4gIH1cbiAgY29uc3QgeyBwYXJ0aXRpb24gfSA9IHBhcnRpdGlvbkxvb2t1cChyZWdpb24pO1xuICBjb25zdCBydW50aW1lID0gTEFURVNUX05PREVfUlVOVElNRV9NQVBbcGFydGl0aW9uXSA/PyBkZWZhdWx0VmFsdWU7XG4gIGlmICghcnVudGltZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyBydW50aW1lIGZvdW5kIGZvciBwYXJ0aXRpb24gJHtwYXJ0aXRpb259IGluIHJlZ2lvbiAke3JlZ2lvbn0uYCxcbiAgICApO1xuICB9XG4gIHJldHVybiBydW50aW1lO1xufVxuXG5lbnVtIFJ1bnRpbWVGYWN0IHtcbiAgTk9ERV8xOCA9IFwibm9kZWpzMTgueFwiLFxuICBOT0RFXzIwID0gXCJub2RlanMyMC54XCIsXG4gIE5PREVfMjIgPSBcIm5vZGVqczIyLnhcIixcbn1cblxuY29uc3QgTEFURVNUX05PREVfUlVOVElNRV9NQVA6IFJlY29yZDxQYXJ0aXRpb24sIHN0cmluZz4gPSB7XG4gIFtQYXJ0aXRpb24uRGVmYXVsdF06IFJ1bnRpbWVGYWN0Lk5PREVfMjIsXG4gIFtQYXJ0aXRpb24uQ25dOiBSdW50aW1lRmFjdC5OT0RFXzIyLFxuICBbUGFydGl0aW9uLlVzR292XTogUnVudGltZUZhY3QuTk9ERV8yMixcbiAgW1BhcnRpdGlvbi5Vc0lzb106IFJ1bnRpbWVGYWN0Lk5PREVfMjIsXG4gIFtQYXJ0aXRpb24uVXNJc29CXTogUnVudGltZUZhY3QuTk9ERV8yMixcbiAgW1BhcnRpdGlvbi5Vc0lzb0ZdOiBSdW50aW1lRmFjdC5OT0RFXzIyLFxuICBbUGFydGl0aW9uLkV1SXNvRV06IFJ1bnRpbWVGYWN0Lk5PREVfMjIsXG59O1xuIl19
@@ -143,7 +143,7 @@ class ScalableTarget extends aws_construct_1.AwsConstructBase {
143
143
  }
144
144
  exports.ScalableTarget = ScalableTarget;
145
145
  _a = JSII_RTTI_SYMBOL_1;
146
- ScalableTarget[_a] = { fqn: "terraconstructs.aws.compute.ScalableTarget", version: "0.1.7" };
146
+ ScalableTarget[_a] = { fqn: "terraconstructs.aws.compute.ScalableTarget", version: "0.1.9" };
147
147
  /**
148
148
  * The service that supports Application AutoScaling
149
149
  */