terraconstructs 0.2.4 → 0.2.5
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.
- package/.jsii +2984 -2812
- package/CLAUDE.md +6 -6
- package/README.md +1 -1
- package/lib/asset-staging.js +3 -3
- package/lib/aws/arn.js +5 -5
- package/lib/aws/aws-asset-manager.js +9 -9
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.d.ts +2 -2
- package/lib/aws/aws-stack.js +9 -9
- package/lib/aws/aws-tags.d.ts +1 -1
- package/lib/aws/aws-tags.js +5 -5
- package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +2 -2
- package/lib/aws/cloudwatch/actions/sns.js +1 -1
- package/lib/aws/cloudwatch/actions/ssm.js +2 -2
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.d.ts +1 -1
- package/lib/aws/cloudwatch/alarm.js +10 -10
- package/lib/aws/cloudwatch/composite-alarm.d.ts +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +7 -7
- package/lib/aws/cloudwatch/dashboard.d.ts +1 -1
- package/lib/aws/cloudwatch/dashboard.js +7 -7
- package/lib/aws/cloudwatch/data-protection-policy.d.ts +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.d.ts +1 -1
- package/lib/aws/cloudwatch/log-group.js +7 -7
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.d.ts +1 -1
- package/lib/aws/cloudwatch/log-stream.js +3 -3
- package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +3 -3
- package/lib/aws/cloudwatch/metric.js +6 -6
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.d.ts +1 -1
- package/lib/aws/cloudwatch/policy.js +3 -3
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +1 -1
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +1 -1
- package/lib/aws/cloudwatch/private/env-tokens.js +6 -6
- package/lib/aws/cloudwatch/query-definition.d.ts +1 -1
- package/lib/aws/cloudwatch/query-definition.js +4 -4
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +6 -6
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/access-log.d.ts +1 -1
- package/lib/aws/compute/access-log.js +5 -5
- package/lib/aws/compute/activity.d.ts +1 -1
- package/lib/aws/compute/activity.js +5 -5
- package/lib/aws/compute/alb/application-listener-action.d.ts +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +5 -5
- package/lib/aws/compute/alb/application-listener-certificate.js +3 -3
- package/lib/aws/compute/alb/application-listener-rule.js +9 -9
- package/lib/aws/compute/alb/application-listener.js +5 -5
- package/lib/aws/compute/alb/application-load-balancer.js +8 -8
- package/lib/aws/compute/alb/application-target-group.js +7 -7
- package/lib/aws/compute/alb/conditions.js +3 -3
- package/lib/aws/compute/alb/trust-store-revocation.js +3 -3
- package/lib/aws/compute/alb/trust-store.js +7 -7
- package/lib/aws/compute/api-definition.js +9 -9
- package/lib/aws/compute/api-key.js +6 -6
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +6 -6
- package/lib/aws/compute/authorizer.js +1 -1
- package/lib/aws/compute/authorizers/identity-source.js +1 -1
- package/lib/aws/compute/authorizers/lambda.d.ts +1 -1
- package/lib/aws/compute/authorizers/lambda.js +6 -6
- package/lib/aws/compute/base-path-mapping.js +5 -5
- package/lib/aws/compute/base-scalable-attribute.js +1 -1
- package/lib/aws/compute/bastion-host.js +4 -4
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +3 -3
- package/lib/aws/compute/client-vpn-endpoint.d.ts +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +9 -9
- package/lib/aws/compute/client-vpn-route.d.ts +1 -1
- package/lib/aws/compute/client-vpn-route.js +4 -4
- package/lib/aws/compute/code.d.ts +3 -3
- package/lib/aws/compute/code.js +15 -15
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/cors.js +1 -1
- package/lib/aws/compute/deployment.js +5 -5
- package/lib/aws/compute/domain-name.js +5 -5
- package/lib/aws/compute/event-invoke-config.d.ts +1 -1
- package/lib/aws/compute/event-invoke-config.js +3 -3
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +7 -7
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +5 -5
- package/lib/aws/compute/fields.d.ts +1 -1
- package/lib/aws/compute/fields.js +12 -12
- package/lib/aws/compute/function-alias.d.ts +1 -1
- package/lib/aws/compute/function-alias.js +3 -3
- package/lib/aws/compute/function-base.d.ts +1 -1
- package/lib/aws/compute/function-base.js +10 -9
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs/bundling.js +6 -6
- package/lib/aws/compute/function-nodejs/function.js +4 -4
- package/lib/aws/compute/function-url.d.ts +1 -1
- package/lib/aws/compute/function-url.js +3 -3
- package/lib/aws/compute/function-vpc-config.generated.d.ts +5 -5
- package/lib/aws/compute/function-vpc-config.generated.js +1 -1
- package/lib/aws/compute/function.d.ts +2 -2
- package/lib/aws/compute/function.js +9 -9
- package/lib/aws/compute/gateway-response.d.ts +1 -1
- package/lib/aws/compute/gateway-response.js +4 -4
- package/lib/aws/compute/handler.js +1 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.d.ts +1 -1
- package/lib/aws/compute/instance.js +9 -9
- package/lib/aws/compute/integration.js +4 -4
- package/lib/aws/compute/integrations/aws.js +3 -3
- package/lib/aws/compute/integrations/http.js +1 -1
- package/lib/aws/compute/integrations/lambda.js +5 -5
- package/lib/aws/compute/integrations/mock.js +1 -1
- package/lib/aws/compute/integrations/stepfunctions.js +4 -4
- package/lib/aws/compute/ip-addresses.d.ts +1 -1
- package/lib/aws/compute/ip-addresses.js +10 -10
- package/lib/aws/compute/ipam.d.ts +1 -1
- package/lib/aws/compute/ipam.js +5 -5
- package/lib/aws/compute/key-pair.d.ts +1 -1
- package/lib/aws/compute/key-pair.js +6 -6
- package/lib/aws/compute/lambda-api.js +1 -1
- package/lib/aws/compute/launch-template.d.ts +1 -1
- package/lib/aws/compute/launch-template.js +12 -12
- package/lib/aws/compute/lb-shared/base-listener.js +9 -9
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +2 -2
- package/lib/aws/compute/lb-shared/base-load-balancer.js +12 -12
- package/lib/aws/compute/lb-shared/base-target-group.d.ts +1 -1
- package/lib/aws/compute/lb-shared/base-target-group.js +15 -15
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +34 -34
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +11 -6
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
- package/lib/aws/compute/lb-shared/listener-action.d.ts +1 -1
- package/lib/aws/compute/lb-shared/listener-action.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-shared/util.js +5 -5
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.d.ts +1 -1
- package/lib/aws/compute/load-balancer.js +8 -8
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +10 -10
- package/lib/aws/compute/method.js +6 -6
- package/lib/aws/compute/model.js +5 -5
- package/lib/aws/compute/nat.js +10 -10
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.d.ts +1 -1
- package/lib/aws/compute/network-acl.js +5 -5
- package/lib/aws/compute/nlb/network-listener-action.d.ts +1 -1
- package/lib/aws/compute/nlb/network-listener-action.js +2 -2
- package/lib/aws/compute/nlb/network-listener-certificate.js +2 -2
- package/lib/aws/compute/nlb/network-listener.js +5 -5
- package/lib/aws/compute/nlb/network-load-balancer.js +6 -6
- package/lib/aws/compute/nlb/network-target-group.js +4 -4
- package/lib/aws/compute/peer.js +7 -7
- package/lib/aws/compute/placement-group.d.ts +1 -1
- package/lib/aws/compute/placement-group.js +3 -3
- package/lib/aws/compute/port.js +5 -5
- package/lib/aws/compute/prefix-list.d.ts +1 -1
- package/lib/aws/compute/prefix-list.js +5 -5
- package/lib/aws/compute/private/context-stub.js +7 -7
- package/lib/aws/compute/private/ebs-util.d.ts +1 -1
- package/lib/aws/compute/private/ebs-util.js +3 -3
- package/lib/aws/compute/private/json-path.d.ts +1 -1
- package/lib/aws/compute/private/json-path.js +8 -8
- package/lib/aws/compute/requestvalidator.js +3 -3
- package/lib/aws/compute/resource.js +5 -5
- package/lib/aws/compute/restapi.d.ts +1 -1
- package/lib/aws/compute/restapi.js +11 -11
- package/lib/aws/compute/route.d.ts +1 -1
- package/lib/aws/compute/route.js +12 -12
- package/lib/aws/compute/runtime.js +3 -3
- package/lib/aws/compute/scalable-target.d.ts +1 -1
- package/lib/aws/compute/scalable-target.js +3 -3
- package/lib/aws/compute/schedule.js +4 -4
- package/lib/aws/compute/security-group.js +12 -12
- package/lib/aws/compute/stage.d.ts +1 -1
- package/lib/aws/compute/stage.js +6 -6
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.d.ts +2 -2
- package/lib/aws/compute/state-machine.js +8 -8
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +5 -5
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +4 -4
- package/lib/aws/compute/states/fail.js +4 -4
- package/lib/aws/compute/states/map-base.js +4 -4
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +4 -4
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/step-scaling-action.js +5 -5
- package/lib/aws/compute/step-scaling-policy.js +7 -7
- package/lib/aws/compute/stepfunctions-api.js +2 -2
- package/lib/aws/compute/subnet-v2.d.ts +1 -1
- package/lib/aws/compute/subnet-v2.js +5 -5
- package/lib/aws/compute/subnet.js +4 -4
- package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +5 -5
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +1 -1
- package/lib/aws/compute/usage-plan.js +5 -5
- package/lib/aws/compute/user-data.d.ts +2 -2
- package/lib/aws/compute/user-data.js +10 -10
- package/lib/aws/compute/volume.d.ts +1 -1
- package/lib/aws/compute/volume.js +7 -7
- package/lib/aws/compute/vpc-endpoint-service.js +3 -3
- package/lib/aws/compute/vpc-endpoint.d.ts +1 -1
- package/lib/aws/compute/vpc-endpoint.js +13 -13
- package/lib/aws/compute/vpc-flow-logs.d.ts +1 -1
- package/lib/aws/compute/vpc-flow-logs.js +8 -8
- package/lib/aws/compute/vpc-link.js +5 -5
- package/lib/aws/compute/vpc-v2-base.js +6 -6
- package/lib/aws/compute/vpc-v2.d.ts +2 -2
- package/lib/aws/compute/vpc-v2.js +4 -4
- package/lib/aws/compute/vpc.d.ts +1 -1
- package/lib/aws/compute/vpc.js +21 -21
- package/lib/aws/compute/vpn.js +8 -8
- package/lib/aws/context-provider.js +4 -4
- package/lib/aws/edge/certificate.d.ts +1 -1
- package/lib/aws/edge/certificate.js +6 -6
- package/lib/aws/edge/distribution.d.ts +1 -1
- package/lib/aws/edge/distribution.js +9 -9
- package/lib/aws/edge/dns-alias-record-targets.d.ts +1 -1
- package/lib/aws/edge/dns-alias-record-targets.js +7 -7
- package/lib/aws/edge/dns-record.d.ts +1 -1
- package/lib/aws/edge/dns-record.js +19 -19
- package/lib/aws/edge/dns-zone.d.ts +2 -2
- package/lib/aws/edge/dns-zone.js +5 -5
- package/lib/aws/edge/function.d.ts +1 -1
- package/lib/aws/edge/function.js +4 -4
- package/lib/aws/edge/key-value-store.d.ts +1 -1
- package/lib/aws/edge/key-value-store.js +6 -6
- package/lib/aws/edge/origin.d.ts +1 -1
- package/lib/aws/edge/origin.js +6 -6
- package/lib/aws/edge/response-headers-policy.d.ts +1 -1
- package/lib/aws/edge/response-headers-policy.js +6 -6
- package/lib/aws/encryption/alias.d.ts +1 -1
- package/lib/aws/encryption/alias.js +8 -8
- package/lib/aws/encryption/key.d.ts +1 -1
- package/lib/aws/encryption/key.js +6 -6
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +3 -3
- package/lib/aws/iam/group.js +5 -5
- package/lib/aws/iam/instance-profile.d.ts +1 -1
- package/lib/aws/iam/instance-profile.js +3 -3
- package/lib/aws/iam/managed-policy.d.ts +1 -1
- package/lib/aws/iam/managed-policy.js +3 -3
- package/lib/aws/iam/oidc-provider.d.ts +1 -1
- package/lib/aws/iam/oidc-provider.js +3 -3
- package/lib/aws/iam/policy-document-config.generated.d.ts +9 -9
- package/lib/aws/iam/policy-document-config.generated.js +1 -1
- package/lib/aws/iam/policy-document.d.ts +1 -1
- package/lib/aws/iam/policy-document.js +5 -5
- package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
- package/lib/aws/iam/policy-statement-props.generated.js +1 -1
- package/lib/aws/iam/policy-statement.d.ts +1 -1
- package/lib/aws/iam/policy-statement.js +8 -8
- package/lib/aws/iam/policy.js +3 -3
- package/lib/aws/iam/principals.js +25 -25
- package/lib/aws/iam/private/imported-role.js +3 -3
- package/lib/aws/iam/private/postprocess-policy-document.d.ts +1 -1
- package/lib/aws/iam/private/postprocess-policy-document.js +1 -1
- package/lib/aws/iam/private/util.d.ts +1 -1
- package/lib/aws/iam/private/util.js +5 -5
- package/lib/aws/iam/role.d.ts +1 -1
- package/lib/aws/iam/role.js +6 -6
- package/lib/aws/iam/saml-provider.d.ts +1 -1
- package/lib/aws/iam/saml-provider.js +6 -6
- package/lib/aws/iam/unknown-principal.js +4 -4
- package/lib/aws/iam/user.js +3 -3
- package/lib/aws/network/network.d.ts +1 -1
- package/lib/aws/network/network.js +1 -1
- package/lib/aws/network/simple-ipv4-vpc.js +12 -12
- package/lib/aws/network/subnet-group.d.ts +1 -1
- package/lib/aws/network/subnet-group.js +5 -5
- package/lib/aws/network/subnet.d.ts +1 -1
- package/lib/aws/network/subnet.js +6 -6
- package/lib/aws/notify/archive.d.ts +1 -1
- package/lib/aws/notify/archive.js +3 -3
- package/lib/aws/notify/connection.d.ts +1 -1
- package/lib/aws/notify/connection.js +5 -5
- package/lib/aws/notify/event-bus.d.ts +1 -1
- package/lib/aws/notify/event-bus.js +10 -10
- package/lib/aws/notify/event-pattern.d.ts +1 -1
- package/lib/aws/notify/event-pattern.js +5 -5
- package/lib/aws/notify/input.d.ts +1 -1
- package/lib/aws/notify/input.js +12 -12
- package/lib/aws/notify/kinesis-stream.d.ts +1 -1
- package/lib/aws/notify/kinesis-stream.js +7 -7
- package/lib/aws/notify/notification-rule.js +8 -8
- package/lib/aws/notify/policy.js +3 -3
- package/lib/aws/notify/queue-base.js +1 -1
- package/lib/aws/notify/queue-policy.js +3 -3
- package/lib/aws/notify/queue.d.ts +1 -1
- package/lib/aws/notify/queue.js +8 -8
- package/lib/aws/notify/resource-policy.js +3 -3
- package/lib/aws/notify/rule.d.ts +1 -1
- package/lib/aws/notify/rule.js +6 -6
- package/lib/aws/notify/schedule.js +4 -4
- package/lib/aws/notify/sns-grants.generated.js +1 -1
- package/lib/aws/notify/sqs-grants.generated.js +1 -1
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.js +6 -6
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +4 -4
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +4 -4
- package/lib/aws/notify/subscriptions/url.js +4 -4
- package/lib/aws/notify/target.d.ts +1 -1
- package/lib/aws/notify/target.js +1 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/targets/util.js +3 -3
- package/lib/aws/notify/topic-base.js +4 -4
- package/lib/aws/notify/topic.js +7 -7
- package/lib/aws/provider-config.generated.d.ts +42 -36
- package/lib/aws/provider-config.generated.js +1 -1
- package/lib/aws/region-lookup.js +4 -4
- package/lib/aws/storage/assets/image-asset.js +8 -8
- package/lib/aws/storage/assets/s3.js +1 -1
- package/lib/aws/storage/auth-token.js +2 -2
- package/lib/aws/storage/billing.js +1 -1
- package/lib/aws/storage/bucket-notifications.d.ts +1 -1
- package/lib/aws/storage/bucket-notifications.js +8 -8
- package/lib/aws/storage/bucket-policy.d.ts +1 -1
- package/lib/aws/storage/bucket-policy.js +3 -3
- package/lib/aws/storage/bucket-source.d.ts +1 -1
- package/lib/aws/storage/bucket-source.js +7 -7
- package/lib/aws/storage/bucket.d.ts +1 -1
- package/lib/aws/storage/bucket.js +8 -8
- package/lib/aws/storage/capacity.js +1 -1
- package/lib/aws/storage/cors-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-config.generated.js +1 -1
- package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-rule-config.generated.js +1 -1
- package/lib/aws/storage/ecr-repository.js +11 -11
- package/lib/aws/storage/encryption.d.ts +1 -1
- package/lib/aws/storage/encryption.js +5 -5
- package/lib/aws/storage/lifecycle-config.generated.d.ts +9 -9
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +2 -2
- package/lib/aws/storage/notification-targets/queue.js +4 -4
- package/lib/aws/storage/origin-access-identity.d.ts +2 -2
- package/lib/aws/storage/origin-access-identity.js +3 -3
- package/lib/aws/storage/parameter-util.js +5 -5
- package/lib/aws/storage/parameter.d.ts +2 -2
- package/lib/aws/storage/parameter.js +16 -16
- package/lib/aws/storage/stream-grants.js +1 -1
- package/lib/aws/storage/table-grants.js +1 -1
- package/lib/aws/storage/table.d.ts +1 -1
- package/lib/aws/storage/table.js +10 -10
- package/lib/aws/storage/website-config.generated.d.ts +8 -8
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/bundling.js +5 -5
- package/lib/construct-base.d.ts +1 -1
- package/lib/construct-base.js +10 -10
- package/lib/duration.js +9 -9
- package/lib/errors.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/fs/ignore.js +4 -4
- package/lib/fs/index.js +1 -1
- package/lib/private/terraform-dependables-aspect.d.ts +1 -1
- package/lib/private/terraform-dependables-aspect.js +6 -6
- package/lib/private/unique-resource-name.js +3 -3
- package/lib/size.js +6 -6
- package/lib/stack-base.d.ts +2 -2
- package/lib/stack-base.js +16 -16
- package/lib/terra-func.d.ts +1 -1
- package/lib/terra-func.js +18 -18
- package/lib/time-zone.js +1 -1
- package/lib/token.js +5 -5
- package/package.json +17 -17
- package/setup.js +2 -2
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.ServiceNamespace = exports.ScalableTarget = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-applicationautoscaling/lib/scalable-target.ts
|
|
7
|
-
const provider_aws_1 = require("@
|
|
7
|
+
const provider_aws_1 = require("@cdktn/provider-aws");
|
|
8
8
|
const step_scaling_policy_1 = require("./step-scaling-policy");
|
|
9
9
|
const target_tracking_scaling_policy_1 = require("./target-tracking-scaling-policy");
|
|
10
10
|
const token_1 = require("../../token");
|
|
@@ -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.2.
|
|
146
|
+
ScalableTarget[_a] = { fqn: "terraconstructs.aws.compute.ScalableTarget", version: "0.2.5" };
|
|
147
147
|
/**
|
|
148
148
|
* The service that supports Application AutoScaling
|
|
149
149
|
*/
|
|
@@ -165,4 +165,4 @@ var ServiceNamespace;
|
|
|
165
165
|
ServiceNamespace["CASSANDRA"] = "cassandra";
|
|
166
166
|
ServiceNamespace["WORKSPACES"] = "workspaces";
|
|
167
167
|
})(ServiceNamespace || (exports.ServiceNamespace = ServiceNamespace = {}));
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGFibGUtdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3NjYWxhYmxlLXRhcmdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNIQUFzSDtBQUV0SCxzREFHNkI7QUFHN0IsK0RBRytCO0FBQy9CLHFGQUcwQztBQUUxQyx1Q0FBMkM7QUFDM0Msb0RBSTBCO0FBQzFCLDhCQUE4QjtBQTZIOUI7Ozs7R0FJRztBQUNILE1BQWEsY0FDWCxTQUFRLGdDQUFnQjtJQUdqQixNQUFNLENBQUMsb0JBQW9CLENBQ2hDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixnQkFBd0I7UUFFeEIsNEZBQTRGO1FBQzVGLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYix5RkFBeUYsQ0FDMUYsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQXFCLENBQUM7UUFDdEQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoRCxNQUFNLE1BQU8sU0FBUSxnQ0FBZ0I7WUFPbkMsWUFBWSxDQUFZLEVBQUUsQ0FBUztnQkFDakMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ1Ysa0JBQWtCLEVBQUUsbUNBQW1DLGdDQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBc0IsQ0FBQyxHQUFHLENBQUMs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QTRDO1FBRTVDLE9BQU8sSUFBSSw0REFBMkIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3JELEdBQUcsS0FBSztZQUNSLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBdE5ILHdDQXVOQzs7O0FBMEREOztHQUVHO0FBQ0gsSUFBWSxnQkFnQlg7QUFoQkQsV0FBWSxnQkFBZ0I7SUFDMUIsK0JBQVcsQ0FBQTtJQUNYLDJEQUF1QyxDQUFBO0lBQ3ZDLCtCQUFXLENBQUE7SUFDWCwyQ0FBdUIsQ0FBQTtJQUN2Qix5Q0FBcUIsQ0FBQTtJQUNyQiwrQkFBVyxDQUFBO0lBQ1gsMkNBQXVCLENBQUE7SUFDdkIsdURBQW1DLENBQUE7SUFDbkMscUNBQWlCLENBQUE7SUFDakIsNkNBQXlCLENBQUE7SUFDekIsbUNBQWUsQ0FBQTtJQUNmLCtDQUEyQixDQUFBO0lBQzNCLHVDQUFtQixDQUFBO0lBQ25CLDJDQUF1QixDQUFBO0lBQ3ZCLDZDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFoQlcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUFnQjNCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTg2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWFwcGxpY2F0aW9uYXV0b3NjYWxpbmcvbGliL3NjYWxhYmxlLXRhcmdldC50c1xuXG5pbXBvcnQge1xuICBhcHBhdXRvc2NhbGluZ1RhcmdldCxcbiAgYXBwYXV0b3NjYWxpbmdTY2hlZHVsZWRBY3Rpb24sXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU2NoZWR1bGUgfSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuaW1wb3J0IHtcbiAgQmFzaWNTdGVwU2NhbGluZ1BvbGljeVByb3BzLFxuICBTdGVwU2NhbGluZ1BvbGljeSxcbn0gZnJvbSBcIi4vc3RlcC1zY2FsaW5nLXBvbGljeVwiO1xuaW1wb3J0IHtcbiAgQmFzaWNUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3lQcm9wcyxcbiAgVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5LFxufSBmcm9tIFwiLi90YXJnZXQtdHJhY2tpbmctc2NhbGluZy1wb2xpY3lcIjtcbmltcG9ydCB7IFRpbWVab25lIH0gZnJvbSBcIi4uLy4uL3RpbWUtem9uZVwiO1xuaW1wb3J0IHsgd2l0aFJlc29sdmVkIH0gZnJvbSBcIi4uLy4uL3Rva2VuXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyBTY2FsYWJsZSBUYXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2NhbGFibGVUYXJnZXQgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgU2NhbGFibGUgVGFyZ2V0LlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSBpbiB0aGUgZm9ybWF0OiBzZXJ2aWNlLW5hbWVzcGFjZS9yZXNvdXJjZS1pZC9zY2FsYWJsZS1kaW1lbnNpb25cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGFibGVUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIG1vZGlmeSB5b3VyIHNjYWxhYmxlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBpZGVudGlmaWVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgc2NhbGFibGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NhbGFibGUgZGltZW5zaW9uIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIHNjYWxhYmxlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHNjYWxhYmxlRGltZW5zaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIEFXUyBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWVzcGFjZTogU2VydmljZU5hbWVzcGFjZTtcblxuICAvKipcbiAgICogQWRkIGEgcG9saWN5IHN0YXRlbWVudCB0byB0aGUgcm9sZSdzIHBvbGljeSBkb2N1bWVudC5cbiAgICogQHBhcmFtIHN0YXRlbWVudCBUaGUgcG9saWN5IHN0YXRlbWVudCB0byBhZGRcbiAgICovXG4gIGFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTY2FsZSBvdXQgb3IgaW4gYmFzZWQgb24gdGltZS5cbiAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGFjdGlvblxuICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBzY2FsaW5nIHNjaGVkdWxlXG4gICAqL1xuICBzY2FsZU9uU2NoZWR1bGUoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhY3Rpb246IFNjYWxpbmdTY2hlZHVsZSxcbiAgKTogYXBwYXV0b3NjYWxpbmdTY2hlZHVsZWRBY3Rpb24uQXBwYXV0b3NjYWxpbmdTY2hlZHVsZWRBY3Rpb247XG5cbiAgLyoqXG4gICAqIFNjYWxlIG91dCBvciBpbiwgaW4gcmVzcG9uc2UgdG8gYSBtZXRyaWMuXG4gICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIHNjYWxpbmcgcG9saWN5XG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhlIHN0ZXAgc2NhbGluZyBwb2xpY3lcbiAgICovXG4gIHNjYWxlT25NZXRyaWMoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQmFzaWNTdGVwU2NhbGluZ1BvbGljeVByb3BzLFxuICApOiBTdGVwU2NhbGluZ1BvbGljeTtcblxuICAvKipcbiAgICogU2NhbGUgb3V0IG9yIGluIGluIG9yZGVyIHRvIGtlZXAgYSBtZXRyaWMgYXJvdW5kIGEgdGFyZ2V0IHZhbHVlLlxuICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBzY2FsaW5nIHBvbGljeVxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSB0YXJnZXQgdHJhY2tpbmcgc2NhbGluZyBwb2xpY3lcbiAgICovXG4gIHNjYWxlVG9UcmFja01ldHJpYyhcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBCYXNpY1RhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeVByb3BzLFxuICApOiBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3k7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBzY2FsYWJsZSB0YXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FsYWJsZVRhcmdldFByb3BzIGV4dGVuZHMgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmFsdWUgdGhhdCBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgY2FuIHVzZSB0byBzY2FsZSBhIHRhcmdldCBkdXJpbmcgYSBzY2FsaW5nIGFjdGl2aXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgbWluQ2FwYWNpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gdmFsdWUgdGhhdCBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgY2FuIHVzZSB0byBzY2FsZSBhIHRhcmdldCBkdXJpbmcgYSBzY2FsaW5nIGFjdGl2aXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogUm9sZSB0aGF0IGFsbG93cyBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gbW9kaWZ5IHlvdXIgc2NhbGFibGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBBIHJvbGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgaWRlbnRpZmllciB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjYWxhYmxlIHRhcmdldC5cbiAgICpcbiAgICogVGhpcyBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIHJlc291cmNlIHR5cGUgYW5kIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgc2VydmljZS9lY3NTdGFjay1NeUVDU0NsdXN0ZXItQUIxMkNERTNGNEdIL2Vjc1N0YWNrLU15RUNTU2VydmljZS1BQjEyQ0RFM0Y0R0hgXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2FwcGxpY2F0aW9uL0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJTY2FsYWJsZVRhcmdldC5odG1sXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzY2FsYWJsZSBkaW1lbnNpb24gdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NhbGFibGUgdGFyZ2V0LlxuICAgKlxuICAgKiBTcGVjaWZ5IHRoZSBzZXJ2aWNlIG5hbWVzcGFjZSwgcmVzb3VyY2UgdHlwZSwgYW5kIHNjYWxpbmcgcHJvcGVydHkuXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBlY3M6c2VydmljZTpEZXNpcmVkQ291bnRgXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2FwcGxpY2F0aW9uL0FQSVJlZmVyZW5jZS9BUElfU2NhbGluZ1BvbGljeS5odG1sXG4gICAqL1xuICByZWFkb25seSBzY2FsYWJsZURpbWVuc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIG9mIHRoZSBBV1Mgc2VydmljZSB0aGF0IHByb3ZpZGVzIHRoZSByZXNvdXJjZSBvclxuICAgKiBjdXN0b20tcmVzb3VyY2UgZm9yIGEgcmVzb3VyY2UgcHJvdmlkZWQgYnkgeW91ciBvd24gYXBwbGljYXRpb24gb3JcbiAgICogc2VydmljZS5cbiAgICpcbiAgICogRm9yIHZhbGlkIEFXUyBzZXJ2aWNlIG5hbWVzcGFjZSB2YWx1ZXMsIHNlZSB0aGUgUmVnaXN0ZXJTY2FsYWJsZVRhcmdldFxuICAgKiBhY3Rpb24gaW4gdGhlIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9hcHBsaWNhdGlvbi9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVyU2NhbGFibGVUYXJnZXQuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWVzcGFjZTogU2VydmljZU5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBzY2FsYWJsZSB0YXJnZXRcbiAqXG4gKiBAcmVzb3VyY2UgYXdzX2FwcGF1dG9zY2FsaW5nX3RhcmdldFxuICovXG5leHBvcnQgY2xhc3MgU2NhbGFibGVUYXJnZXRcbiAgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSVNjYWxhYmxlVGFyZ2V0XG57XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNjYWxhYmxlVGFyZ2V0SWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHNjYWxhYmxlVGFyZ2V0SWQ6IHN0cmluZyxcbiAgKTogSVNjYWxhYmxlVGFyZ2V0IHtcbiAgICAvLyBBc3N1bWluZyBzY2FsYWJsZVRhcmdldElkIGlzIGluIHRoZSBmb3JtYXQ6IHNlcnZpY2VOYW1lc3BhY2UvcmVzb3VyY2VJZC9zY2FsYWJsZURpbWVuc2lvblxuICAgIGNvbnN0IHBhcnRzID0gc2NhbGFibGVUYXJnZXRJZC5zcGxpdChcIi9cIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIHNjYWxhYmxlVGFyZ2V0SWQgZm9ybWF0LiBFeHBlY3RlZCBzZXJ2aWNlTmFtZXNwYWNlL3Jlc291cmNlSWQvc2NhbGFibGVEaW1lbnNpb25cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlcnZpY2VOYW1lc3BhY2UgPSBwYXJ0c1swXSBhcyBTZXJ2aWNlTmFtZXNwYWNlO1xuICAgIGNvbnN0IHNjYWxhYmxlRGltZW5zaW9uID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgcmVzb3VyY2VJZCA9IHBhcnRzLnNsaWNlKDEsIC0xKS5qb2luKFwiL1wiKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJU2NhbGFibGVUYXJnZXQge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNjYWxhYmxlVGFyZ2V0SWQgPSBzY2FsYWJsZVRhcmdldElkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSByZXNvdXJjZUlkID0gcmVzb3VyY2VJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzY2FsYWJsZURpbWVuc2lvbiA9IHNjYWxhYmxlRGltZW5zaW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VOYW1lc3BhY2UgPSBzZXJ2aWNlTmFtZXNwYWNlO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiBgYXJuOmF3czphcHBsaWNhdGlvbi1hdXRvc2NhbGluZzoke0F3c0NvbnN0cnVjdEJhc2UuaXNDb25zdHJ1Y3QocykgPyAocyBhcyBBd3NDb25zdHJ1Y3RCYXNlKS5lbnYucmVnaW9uIDogXCJ1bmtub3duXCJ9OiR7QXdzQ29uc3RydWN0QmFzZS5pc0NvbnN0cnVjdChzKSA/IChzIGFzIEF3c0NvbnN0cnVjdEJhc2UpLmVudi5hY2NvdW50IDogXCJ1bmtub3duXCJ9OnNjYWxhYmxlLXRhcmdldC8ke3NjYWxhYmxlVGFyZ2V0SWR9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJvbGUgaXMgbm90IGRpcmVjdGx5IGltcG9ydGFibGUgd2l0aCBqdXN0IHRoZSB0YXJnZXQgSUQsIGl0IHdvdWxkIG5lZWQgdG8gYmUgaW1wb3J0ZWQgc2VwYXJhdGVseSBvciBBUk4gcHJvdmlkZWQuXG4gICAgICAgIC8vIEZvciBzaW1wbGljaXR5LCB3ZSdsbCByZXByZXNlbnQgaXQgYXMgYW4gdW5tb2RpZmlhYmxlIGltcG9ydGVkIHJvbGUgcGxhY2Vob2xkZXIuXG4gICAgICAgIHRoaXMucm9sZSA9IGlhbS5Sb2xlLmZyb21Sb2xlQXJuKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgXCJJbXBvcnRlZFJvbGVcIixcbiAgICAgICAgICBcImFybjphd3M6aWFtOjp1bmtub3duOnJvbGUvdW5rbm93bmFwcGxpY2F0aW9uYXV0b3NjYWxpbmdyb2xlXCIsXG4gICAgICAgICAgeyBtdXRhYmxlOiBmYWxzZSB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiB7IHNjYWxhYmxlVGFyZ2V0SWQ6IHRoaXMuc2NhbGFibGVUYXJnZXRJZCB9O1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgYWRkVG9Sb2xlUG9saWN5KF9zdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGFkZCB0byBwb2xpY3kgb2YgYW4gaW1wb3J0ZWQgU2NhbGFibGVUYXJnZXQgcm9sZSBsaWtlIHRoaXMuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBzY2FsZU9uU2NoZWR1bGUoXG4gICAgICAgIF9hY3Rpb25JZDogc3RyaW5nLFxuICAgICAgICBfYWN0aW9uOiBTY2FsaW5nU2NoZWR1bGUsXG4gICAgICApOiBhcHBhdXRvc2NhbGluZ1NjaGVkdWxlZEFjdGlvbi5BcHBhdXRvc2NhbGluZ1NjaGVkdWxlZEFjdGlvbiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBhZGQgc2NoZWR1bGVkIGFjdGlvbiB0byBhbiBpbXBvcnRlZCBTY2FsYWJsZVRhcmdldC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIHNjYWxlT25NZXRyaWMoXG4gICAgICAgIF9wb2xpY3lJZDogc3RyaW5nLFxuICAgICAgICBfcHJvcHM6IEJhc2ljU3RlcFNjYWxpbmdQb2xpY3lQcm9wcyxcbiAgICAgICk6IFN0ZXBTY2FsaW5nUG9saWN5IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGFkZCBzdGVwIHNjYWxpbmcgcG9saWN5IHRvIGFuIGltcG9ydGVkIFNjYWxhYmxlVGFyZ2V0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2NhbGVUb1RyYWNrTWV0cmljKFxuICAgICAgICBfcG9saWN5SWQ6IHN0cmluZyxcbiAgICAgICAgX3Byb3BzOiBCYXNpY1RhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeVByb3BzLFxuICAgICAgKTogVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGFkZCB0YXJnZXQgdHJhY2tpbmcgcG9saWN5IHRvIGFuIGltcG9ydGVkIFNjYWxhYmxlVGFyZ2V0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHNjYWxhYmxlVGFyZ2V0SWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzY2FsYWJsZURpbWVuc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZU5hbWVzcGFjZTogU2VydmljZU5hbWVzcGFjZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBhcHBhdXRvc2NhbGluZ1RhcmdldC5BcHBhdXRvc2NhbGluZ1RhcmdldDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2NhbGFibGVUYXJnZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgd2l0aFJlc29sdmVkKHByb3BzLm1heENhcGFjaXR5LCAobWF4KSA9PiB7XG4gICAgICBpZiAobWF4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYG1heENhcGFjaXR5IGNhbm5vdCBiZSBuZWdhdGl2ZSwgZ290OiAke3Byb3BzLm1heENhcGFjaXR5fWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3aXRoUmVzb2x2ZWQocHJvcHMubWluQ2FwYWNpdHksIChtaW4pID0+IHtcbiAgICAgIGlmIChtaW4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgbWluQ2FwYWNpdHkgY2Fubm90IGJlIG5lZ2F0aXZlLCBnb3Q6ICR7cHJvcHMubWluQ2FwYWNpdHl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHdpdGhSZXNvbHZlZChwcm9wcy5taW5DYXBhY2l0eSwgcHJvcHMubWF4Q2FwYWNpdHksIChtaW4sIG1heCkgPT4ge1xuICAgICAgaWYgKG1heCA8IG1pbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYG1pbkNhcGFjaXR5ICgke3Byb3BzLm1pbkNhcGFjaXR5fSkgc2hvdWxkIGJlIGxvd2VyIHRoYW4gbWF4Q2FwYWNpdHkgKCR7cHJvcHMubWF4Q2FwYWNpdHl9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGb3IgRHluYW1vREIgYXV0b3NjYWxpbmcsIHVzZSBzZXJ2aWNlLWxpbmtlZCByb2xlcyB3aGVuIG5vIGV4cGxpY2l0IHJvbGUgaXMgcHJvdmlkZWRcbiAgICAvLyBUaGlzIGFsbG93cyBUZXJyYWZvcm0gdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgdGhlIGFwcHJvcHJpYXRlIHNlcnZpY2UtbGlua2VkIHJvbGVcbiAgICAvLyByYXRoZXIgdGhhbiBjcmVhdGluZyBhIGN1c3RvbSBJQU0gcm9sZSB0aGF0IG1heSBoYXZlIGluY29ycmVjdCBBUk4gZm9ybWF0XG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZTtcblxuICAgIGNvbnN0IHRhcmdldENvbmZpZzogYW55ID0ge1xuICAgICAgbWF4Q2FwYWNpdHk6IHByb3BzLm1heENhcGFjaXR5LFxuICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLm1pbkNhcGFjaXR5LFxuICAgICAgcmVzb3VyY2VJZDogcHJvcHMucmVzb3VyY2VJZCxcbiAgICAgIHNjYWxhYmxlRGltZW5zaW9uOiBwcm9wcy5zY2FsYWJsZURpbWVuc2lvbixcbiAgICAgIHNlcnZpY2VOYW1lc3BhY2U6IHByb3BzLnNlcnZpY2VOYW1lc3BhY2UsXG4gICAgfTtcblxuICAgIC8vIE9ubHkgaW5jbHVkZSByb2xlQXJuIGlmIGEgcm9sZSBpcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgLy8gV2hlbiBvbWl0dGVkLCBUZXJyYWZvcm0gd2lsbCB1c2UgYXBwcm9wcmlhdGUgc2VydmljZS1saW5rZWQgcm9sZXNcbiAgICBpZiAodGhpcy5yb2xlKSB7XG4gICAgICB0YXJnZXRDb25maWcucm9sZUFybiA9IHRoaXMucm9sZS5yb2xlQXJuO1xuICAgIH1cblxuICAgIHRoaXMudGFyZ2V0UmVzb3VyY2UgPSBuZXcgYXBwYXV0b3NjYWxpbmdUYXJnZXQuQXBwYXV0b3NjYWxpbmdUYXJnZXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAgdGFyZ2V0Q29uZmlnLFxuICAgICk7XG5cbiAgICB0aGlzLnNjYWxhYmxlVGFyZ2V0SWQgPSB0aGlzLnRhcmdldFJlc291cmNlLmlkO1xuICAgIHRoaXMucmVzb3VyY2VJZCA9IHByb3BzLnJlc291cmNlSWQ7XG4gICAgdGhpcy5zY2FsYWJsZURpbWVuc2lvbiA9IHByb3BzLnNjYWxhYmxlRGltZW5zaW9uO1xuICAgIHRoaXMuc2VydmljZU5hbWVzcGFjZSA9IHByb3BzLnNlcnZpY2VOYW1lc3BhY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjYWxhYmxlVGFyZ2V0SWQ6IHRoaXMuc2NhbGFibGVUYXJnZXRJZCxcbiAgICAgIHJvbGVBcm46IHRoaXMucm9sZT8ucm9sZUFybixcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMucm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBhZGQgcG9saWN5IHRvIHJvbGUgd2hlbiB1c2luZyBzZXJ2aWNlLWxpbmtlZCByb2xlcy4gXCIgK1xuICAgICAgICAgIFwiUHJvdmlkZSBhbiBleHBsaWNpdCByb2xlIGluIFNjYWxhYmxlVGFyZ2V0UHJvcHMgaWYgeW91IG5lZWQgdG8gYWRkIGN1c3RvbSBwb2xpY2llcy5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzdGF0ZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHNjYWxlT25TY2hlZHVsZShcbiAgICBzY2hlZHVsZUlkOiBzdHJpbmcsXG4gICAgYWN0aW9uOiBTY2FsaW5nU2NoZWR1bGUsXG4gICk6IGFwcGF1dG9zY2FsaW5nU2NoZWR1bGVkQWN0aW9uLkFwcGF1dG9zY2FsaW5nU2NoZWR1bGVkQWN0aW9uIHtcbiAgICBpZiAoYWN0aW9uLm1pbkNhcGFjaXR5ID09PSB1bmRlZmluZWQgJiYgYWN0aW9uLm1heENhcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFlvdSBtdXN0IHN1cHBseSBhdCBsZWFzdCBvbmUgb2YgbWluQ2FwYWNpdHkgb3IgbWF4Q2FwYWNpdHksIGdvdCAke0pTT04uc3RyaW5naWZ5KGFjdGlvbil9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYWN0aW9uLnNjaGVkdWxlLl9iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIG5ldyBhcHBhdXRvc2NhbGluZ1NjaGVkdWxlZEFjdGlvbi5BcHBhdXRvc2NhbGluZ1NjaGVkdWxlZEFjdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBzY2hlZHVsZUlkLFxuICAgICAge1xuICAgICAgICBuYW1lOiBzY2hlZHVsZUlkLFxuICAgICAgICBzZXJ2aWNlTmFtZXNwYWNlOiB0aGlzLnNlcnZpY2VOYW1lc3BhY2UsXG4gICAgICAgIHJlc291cmNlSWQ6IHRoaXMucmVzb3VyY2VJZCxcbiAgICAgICAgc2NhbGFibGVEaW1lbnNpb246IHRoaXMuc2NhbGFibGVEaW1lbnNpb24sXG4gICAgICAgIHNjaGVkdWxlOiBhY3Rpb24uc2NoZWR1bGUuZXhwcmVzc2lvblN0cmluZyxcbiAgICAgICAgc3RhcnRUaW1lOiBhY3Rpb24uc3RhcnRUaW1lPy50b0lTT1N0cmluZygpLFxuICAgICAgICBlbmRUaW1lOiBhY3Rpb24uZW5kVGltZT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgc2NhbGFibGVUYXJnZXRBY3Rpb246IHtcbiAgICAgICAgICBtYXhDYXBhY2l0eTogYWN0aW9uLm1heENhcGFjaXR5Py50b1N0cmluZygpLFxuICAgICAgICAgIG1pbkNhcGFjaXR5OiBhY3Rpb24ubWluQ2FwYWNpdHk/LnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWV6b25lOiBhY3Rpb24udGltZVpvbmU/LnRpbWV6b25lTmFtZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzY2FsZU9uTWV0cmljKFxuICAgIHBvbGljeUlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEJhc2ljU3RlcFNjYWxpbmdQb2xpY3lQcm9wcyxcbiAgKTogU3RlcFNjYWxpbmdQb2xpY3kge1xuICAgIHJldHVybiBuZXcgU3RlcFNjYWxpbmdQb2xpY3kodGhpcywgcG9saWN5SWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgc2NhbGluZ1RhcmdldDogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzY2FsZVRvVHJhY2tNZXRyaWMoXG4gICAgcG9saWN5SWQ6IHN0cmluZyxcbiAgICBwcm9wczogQmFzaWNUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3lQcm9wcyxcbiAgKTogVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5IHtcbiAgICByZXR1cm4gbmV3IFRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeSh0aGlzLCBwb2xpY3lJZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBzY2FsaW5nVGFyZ2V0OiB0aGlzLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQSBzY2hlZHVsZWQgc2NhbGluZyBhY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FsaW5nU2NoZWR1bGUge1xuICAvKipcbiAgICogV2hlbiB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU6IFNjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgc2NoZWR1bGVkIGFjdGlvbiBiZWNvbWVzIGFjdGl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIHJ1bGUgaXMgYWN0aXZhdGUgaW1tZWRpYXRlbHlcbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0VGltZT86IERhdGU7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBzY2hlZHVsZWQgYWN0aW9uIGV4cGlyZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBydWxlIG5ldmVyIGV4cGlyZXMuXG4gICAqL1xuICByZWFkb25seSBlbmRUaW1lPzogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIG5ldyBtaW5pbXVtIGNhcGFjaXR5LlxuICAgKlxuICAgKiBEdXJpbmcgdGhlIHNjaGVkdWxlZCB0aW1lLCBpZiB0aGUgY3VycmVudCBjYXBhY2l0eSBpcyBiZWxvdyB0aGUgbWluaW11bVxuICAgKiBjYXBhY2l0eSwgQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHNjYWxlcyBvdXQgdG8gdGhlIG1pbmltdW0gY2FwYWNpdHkuXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBtYXhDYXBhY2l0eSBhbmQgbWluQ2FwYWNpdHkgbXVzdCBiZSBzdXBwbGllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gbmV3IG1pbmltdW0gY2FwYWNpdHlcbiAgICovXG4gIHJlYWRvbmx5IG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IG1heGltdW0gY2FwYWNpdHkuXG4gICAqXG4gICAqIER1cmluZyB0aGUgc2NoZWR1bGVkIHRpbWUsIHRoZSBjdXJyZW50IGNhcGFjaXR5IGlzIGFib3ZlIHRoZSBtYXhpbXVtXG4gICAqIGNhcGFjaXR5LCBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgc2NhbGVzIGluIHRvIHRoZSBtYXhpbXVtIGNhcGFjaXR5LlxuICAgKlxuICAgKiBBdCBsZWFzdCBvbmUgb2YgbWF4Q2FwYWNpdHkgYW5kIG1pbkNhcGFjaXR5IG11c3QgYmUgc3VwcGxpZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIG5ldyBtYXhpbXVtIGNhcGFjaXR5XG4gICAqL1xuICByZWFkb25seSBtYXhDYXBhY2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRpbWUgem9uZSB1c2VkIHdoZW4gcmVmZXJyaW5nIHRvIHRoZSBkYXRlIGFuZCB0aW1lIG9mIGEgc2NoZWR1bGVkIGFjdGlvbixcbiAgICogd2hlbiB0aGUgc2NoZWR1bGVkIGFjdGlvbiB1c2VzIGFuIGF0IG9yIGNyb24gZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBVVENcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVab25lPzogVGltZVpvbmU7XG59XG5cbi8qKlxuICogVGhlIHNlcnZpY2UgdGhhdCBzdXBwb3J0cyBBcHBsaWNhdGlvbiBBdXRvU2NhbGluZ1xuICovXG5leHBvcnQgZW51bSBTZXJ2aWNlTmFtZXNwYWNlIHtcbiAgRUNTID0gXCJlY3NcIixcbiAgRUxBU1RJQ19NQVBfUkVEVUNFID0gXCJlbGFzdGljbWFwcmVkdWNlXCIsXG4gIEVDMiA9IFwiZWMyXCIsXG4gIEFQUFNUUkVBTSA9IFwiYXBwc3RyZWFtXCIsXG4gIERZTkFNT0RCID0gXCJkeW5hbW9kYlwiLFxuICBSRFMgPSBcInJkc1wiLFxuICBTQUdFTUFLRVIgPSBcInNhZ2VtYWtlclwiLFxuICBDVVNUT01fUkVTT1VSQ0UgPSBcImN1c3RvbS1yZXNvdXJjZVwiLFxuICBMQU1CREEgPSBcImxhbWJkYVwiLFxuICBDT01QUkVIRU5EID0gXCJjb21wcmVoZW5kXCIsXG4gIEtBRktBID0gXCJrYWZrYVwiLFxuICBFTEFTVElDQUNIRSA9IFwiZWxhc3RpY2FjaGVcIixcbiAgTkVQVFVORSA9IFwibmVwdHVuZVwiLFxuICBDQVNTQU5EUkEgPSBcImNhc3NhbmRyYVwiLFxuICBXT1JLU1BBQ0VTID0gXCJ3b3Jrc3BhY2VzXCIsXG59XG4iXX0=
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NhbGFibGUtdGFyZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3NjYWxhYmxlLXRhcmdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNIQUFzSDtBQUV0SCxzREFHNkI7QUFHN0IsK0RBRytCO0FBQy9CLHFGQUcwQztBQUUxQyx1Q0FBMkM7QUFDM0Msb0RBSTBCO0FBQzFCLDhCQUE4QjtBQTZIOUI7Ozs7R0FJRztBQUNILE1BQWEsY0FDWCxTQUFRLGdDQUFnQjtJQUdqQixNQUFNLENBQUMsb0JBQW9CLENBQ2hDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixnQkFBd0I7UUFFeEIsNEZBQTRGO1FBQzVGLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FDYix5RkFBeUYsQ0FDMUYsQ0FBQztRQUNKLENBQUM7UUFDRCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQXFCLENBQUM7UUFDdEQsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoRCxNQUFNLE1BQU8sU0FBUSxnQ0FBZ0I7WUFPbkMsWUFBWSxDQUFZLEVBQUUsQ0FBUztnQkFDakMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ1Ysa0JBQWtCLEVBQUUsbUNBQW1DLGdDQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBc0IsQ0FBQyxHQUFHLENBQUMs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QTRDO1FBRTVDLE9BQU8sSUFBSSw0REFBMkIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3JELEdBQUcsS0FBSztZQUNSLGFBQWEsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBdE5ILHdDQXVOQzs7O0FBMEREOztHQUVHO0FBQ0gsSUFBWSxnQkFnQlg7QUFoQkQsV0FBWSxnQkFBZ0I7SUFDMUIsK0JBQVcsQ0FBQTtJQUNYLDJEQUF1QyxDQUFBO0lBQ3ZDLCtCQUFXLENBQUE7SUFDWCwyQ0FBdUIsQ0FBQTtJQUN2Qix5Q0FBcUIsQ0FBQTtJQUNyQiwrQkFBVyxDQUFBO0lBQ1gsMkNBQXVCLENBQUE7SUFDdkIsdURBQW1DLENBQUE7SUFDbkMscUNBQWlCLENBQUE7SUFDakIsNkNBQXlCLENBQUE7SUFDekIsbUNBQWUsQ0FBQTtJQUNmLCtDQUEyQixDQUFBO0lBQzNCLHVDQUFtQixDQUFBO0lBQ25CLDJDQUF1QixDQUFBO0lBQ3ZCLDZDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFoQlcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUFnQjNCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTg2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWFwcGxpY2F0aW9uYXV0b3NjYWxpbmcvbGliL3NjYWxhYmxlLXRhcmdldC50c1xuXG5pbXBvcnQge1xuICBhcHBhdXRvc2NhbGluZ1RhcmdldCxcbiAgYXBwYXV0b3NjYWxpbmdTY2hlZHVsZWRBY3Rpb24sXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU2NoZWR1bGUgfSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuaW1wb3J0IHtcbiAgQmFzaWNTdGVwU2NhbGluZ1BvbGljeVByb3BzLFxuICBTdGVwU2NhbGluZ1BvbGljeSxcbn0gZnJvbSBcIi4vc3RlcC1zY2FsaW5nLXBvbGljeVwiO1xuaW1wb3J0IHtcbiAgQmFzaWNUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3lQcm9wcyxcbiAgVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5LFxufSBmcm9tIFwiLi90YXJnZXQtdHJhY2tpbmctc2NhbGluZy1wb2xpY3lcIjtcbmltcG9ydCB7IFRpbWVab25lIH0gZnJvbSBcIi4uLy4uL3RpbWUtem9uZVwiO1xuaW1wb3J0IHsgd2l0aFJlc29sdmVkIH0gZnJvbSBcIi4uLy4uL3Rva2VuXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyBTY2FsYWJsZSBUYXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2NhbGFibGVUYXJnZXQgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgU2NhbGFibGUgVGFyZ2V0LlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSBpbiB0aGUgZm9ybWF0OiBzZXJ2aWNlLW5hbWVzcGFjZS9yZXNvdXJjZS1pZC9zY2FsYWJsZS1kaW1lbnNpb25cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGFibGVUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgdGhhdCBhbGxvd3MgQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHRvIG1vZGlmeSB5b3VyIHNjYWxhYmxlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBpZGVudGlmaWVyIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgc2NhbGFibGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NhbGFibGUgZGltZW5zaW9uIHRoYXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIHNjYWxhYmxlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHNjYWxhYmxlRGltZW5zaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIEFXUyBzZXJ2aWNlIHRoYXQgcHJvdmlkZXMgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWVzcGFjZTogU2VydmljZU5hbWVzcGFjZTtcblxuICAvKipcbiAgICogQWRkIGEgcG9saWN5IHN0YXRlbWVudCB0byB0aGUgcm9sZSdzIHBvbGljeSBkb2N1bWVudC5cbiAgICogQHBhcmFtIHN0YXRlbWVudCBUaGUgcG9saWN5IHN0YXRlbWVudCB0byBhZGRcbiAgICovXG4gIGFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBTY2FsZSBvdXQgb3IgaW4gYmFzZWQgb24gdGltZS5cbiAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGFjdGlvblxuICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBzY2FsaW5nIHNjaGVkdWxlXG4gICAqL1xuICBzY2FsZU9uU2NoZWR1bGUoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhY3Rpb246IFNjYWxpbmdTY2hlZHVsZSxcbiAgKTogYXBwYXV0b3NjYWxpbmdTY2hlZHVsZWRBY3Rpb24uQXBwYXV0b3NjYWxpbmdTY2hlZHVsZWRBY3Rpb247XG5cbiAgLyoqXG4gICAqIFNjYWxlIG91dCBvciBpbiwgaW4gcmVzcG9uc2UgdG8gYSBtZXRyaWMuXG4gICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIHNjYWxpbmcgcG9saWN5XG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcGVydGllcyBmb3IgdGhlIHN0ZXAgc2NhbGluZyBwb2xpY3lcbiAgICovXG4gIHNjYWxlT25NZXRyaWMoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQmFzaWNTdGVwU2NhbGluZ1BvbGljeVByb3BzLFxuICApOiBTdGVwU2NhbGluZ1BvbGljeTtcblxuICAvKipcbiAgICogU2NhbGUgb3V0IG9yIGluIGluIG9yZGVyIHRvIGtlZXAgYSBtZXRyaWMgYXJvdW5kIGEgdGFyZ2V0IHZhbHVlLlxuICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBzY2FsaW5nIHBvbGljeVxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BlcnRpZXMgZm9yIHRoZSB0YXJnZXQgdHJhY2tpbmcgc2NhbGluZyBwb2xpY3lcbiAgICovXG4gIHNjYWxlVG9UcmFja01ldHJpYyhcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBCYXNpY1RhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeVByb3BzLFxuICApOiBUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3k7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBzY2FsYWJsZSB0YXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FsYWJsZVRhcmdldFByb3BzIGV4dGVuZHMgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmFsdWUgdGhhdCBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgY2FuIHVzZSB0byBzY2FsZSBhIHRhcmdldCBkdXJpbmcgYSBzY2FsaW5nIGFjdGl2aXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgbWluQ2FwYWNpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gdmFsdWUgdGhhdCBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgY2FuIHVzZSB0byBzY2FsZSBhIHRhcmdldCBkdXJpbmcgYSBzY2FsaW5nIGFjdGl2aXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogUm9sZSB0aGF0IGFsbG93cyBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgdG8gbW9kaWZ5IHlvdXIgc2NhbGFibGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBBIHJvbGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgaWRlbnRpZmllciB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHNjYWxhYmxlIHRhcmdldC5cbiAgICpcbiAgICogVGhpcyBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIHJlc291cmNlIHR5cGUgYW5kIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgc2VydmljZS9lY3NTdGFjay1NeUVDU0NsdXN0ZXItQUIxMkNERTNGNEdIL2Vjc1N0YWNrLU15RUNTU2VydmljZS1BQjEyQ0RFM0Y0R0hgXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2FwcGxpY2F0aW9uL0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJTY2FsYWJsZVRhcmdldC5odG1sXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzY2FsYWJsZSBkaW1lbnNpb24gdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NhbGFibGUgdGFyZ2V0LlxuICAgKlxuICAgKiBTcGVjaWZ5IHRoZSBzZXJ2aWNlIG5hbWVzcGFjZSwgcmVzb3VyY2UgdHlwZSwgYW5kIHNjYWxpbmcgcHJvcGVydHkuXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBlY3M6c2VydmljZTpEZXNpcmVkQ291bnRgXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2FwcGxpY2F0aW9uL0FQSVJlZmVyZW5jZS9BUElfU2NhbGluZ1BvbGljeS5odG1sXG4gICAqL1xuICByZWFkb25seSBzY2FsYWJsZURpbWVuc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIG9mIHRoZSBBV1Mgc2VydmljZSB0aGF0IHByb3ZpZGVzIHRoZSByZXNvdXJjZSBvclxuICAgKiBjdXN0b20tcmVzb3VyY2UgZm9yIGEgcmVzb3VyY2UgcHJvdmlkZWQgYnkgeW91ciBvd24gYXBwbGljYXRpb24gb3JcbiAgICogc2VydmljZS5cbiAgICpcbiAgICogRm9yIHZhbGlkIEFXUyBzZXJ2aWNlIG5hbWVzcGFjZSB2YWx1ZXMsIHNlZSB0aGUgUmVnaXN0ZXJTY2FsYWJsZVRhcmdldFxuICAgKiBhY3Rpb24gaW4gdGhlIEFwcGxpY2F0aW9uIEF1dG8gU2NhbGluZyBBUEkgUmVmZXJlbmNlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9hcHBsaWNhdGlvbi9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVyU2NhbGFibGVUYXJnZXQuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWVzcGFjZTogU2VydmljZU5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBzY2FsYWJsZSB0YXJnZXRcbiAqXG4gKiBAcmVzb3VyY2UgYXdzX2FwcGF1dG9zY2FsaW5nX3RhcmdldFxuICovXG5leHBvcnQgY2xhc3MgU2NhbGFibGVUYXJnZXRcbiAgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSVNjYWxhYmxlVGFyZ2V0XG57XG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNjYWxhYmxlVGFyZ2V0SWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHNjYWxhYmxlVGFyZ2V0SWQ6IHN0cmluZyxcbiAgKTogSVNjYWxhYmxlVGFyZ2V0IHtcbiAgICAvLyBBc3N1bWluZyBzY2FsYWJsZVRhcmdldElkIGlzIGluIHRoZSBmb3JtYXQ6IHNlcnZpY2VOYW1lc3BhY2UvcmVzb3VyY2VJZC9zY2FsYWJsZURpbWVuc2lvblxuICAgIGNvbnN0IHBhcnRzID0gc2NhbGFibGVUYXJnZXRJZC5zcGxpdChcIi9cIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJJbnZhbGlkIHNjYWxhYmxlVGFyZ2V0SWQgZm9ybWF0LiBFeHBlY3RlZCBzZXJ2aWNlTmFtZXNwYWNlL3Jlc291cmNlSWQvc2NhbGFibGVEaW1lbnNpb25cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlcnZpY2VOYW1lc3BhY2UgPSBwYXJ0c1swXSBhcyBTZXJ2aWNlTmFtZXNwYWNlO1xuICAgIGNvbnN0IHNjYWxhYmxlRGltZW5zaW9uID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgcmVzb3VyY2VJZCA9IHBhcnRzLnNsaWNlKDEsIC0xKS5qb2luKFwiL1wiKTtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJU2NhbGFibGVUYXJnZXQge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNjYWxhYmxlVGFyZ2V0SWQgPSBzY2FsYWJsZVRhcmdldElkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSByZXNvdXJjZUlkID0gcmVzb3VyY2VJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzY2FsYWJsZURpbWVuc2lvbiA9IHNjYWxhYmxlRGltZW5zaW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2VOYW1lc3BhY2UgPSBzZXJ2aWNlTmFtZXNwYWNlO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiBgYXJuOmF3czphcHBsaWNhdGlvbi1hdXRvc2NhbGluZzoke0F3c0NvbnN0cnVjdEJhc2UuaXNDb25zdHJ1Y3QocykgPyAocyBhcyBBd3NDb25zdHJ1Y3RCYXNlKS5lbnYucmVnaW9uIDogXCJ1bmtub3duXCJ9OiR7QXdzQ29uc3RydWN0QmFzZS5pc0NvbnN0cnVjdChzKSA/IChzIGFzIEF3c0NvbnN0cnVjdEJhc2UpLmVudi5hY2NvdW50IDogXCJ1bmtub3duXCJ9OnNjYWxhYmxlLXRhcmdldC8ke3NjYWxhYmxlVGFyZ2V0SWR9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJvbGUgaXMgbm90IGRpcmVjdGx5IGltcG9ydGFibGUgd2l0aCBqdXN0IHRoZSB0YXJnZXQgSUQsIGl0IHdvdWxkIG5lZWQgdG8gYmUgaW1wb3J0ZWQgc2VwYXJhdGVseSBvciBBUk4gcHJvdmlkZWQuXG4gICAgICAgIC8vIEZvciBzaW1wbGljaXR5LCB3ZSdsbCByZXByZXNlbnQgaXQgYXMgYW4gdW5tb2RpZmlhYmxlIGltcG9ydGVkIHJvbGUgcGxhY2Vob2xkZXIuXG4gICAgICAgIHRoaXMucm9sZSA9IGlhbS5Sb2xlLmZyb21Sb2xlQXJuKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgXCJJbXBvcnRlZFJvbGVcIixcbiAgICAgICAgICBcImFybjphd3M6aWFtOjp1bmtub3duOnJvbGUvdW5rbm93bmFwcGxpY2F0aW9uYXV0b3NjYWxpbmdyb2xlXCIsXG4gICAgICAgICAgeyBtdXRhYmxlOiBmYWxzZSB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgICAgIHJldHVybiB7IHNjYWxhYmxlVGFyZ2V0SWQ6IHRoaXMuc2NhbGFibGVUYXJnZXRJZCB9O1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgYWRkVG9Sb2xlUG9saWN5KF9zdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGFkZCB0byBwb2xpY3kgb2YgYW4gaW1wb3J0ZWQgU2NhbGFibGVUYXJnZXQgcm9sZSBsaWtlIHRoaXMuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBzY2FsZU9uU2NoZWR1bGUoXG4gICAgICAgIF9hY3Rpb25JZDogc3RyaW5nLFxuICAgICAgICBfYWN0aW9uOiBTY2FsaW5nU2NoZWR1bGUsXG4gICAgICApOiBhcHBhdXRvc2NhbGluZ1NjaGVkdWxlZEFjdGlvbi5BcHBhdXRvc2NhbGluZ1NjaGVkdWxlZEFjdGlvbiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBhZGQgc2NoZWR1bGVkIGFjdGlvbiB0byBhbiBpbXBvcnRlZCBTY2FsYWJsZVRhcmdldC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIHNjYWxlT25NZXRyaWMoXG4gICAgICAgIF9wb2xpY3lJZDogc3RyaW5nLFxuICAgICAgICBfcHJvcHM6IEJhc2ljU3RlcFNjYWxpbmdQb2xpY3lQcm9wcyxcbiAgICAgICk6IFN0ZXBTY2FsaW5nUG9saWN5IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGFkZCBzdGVwIHNjYWxpbmcgcG9saWN5IHRvIGFuIGltcG9ydGVkIFNjYWxhYmxlVGFyZ2V0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwdWJsaWMgc2NhbGVUb1RyYWNrTWV0cmljKFxuICAgICAgICBfcG9saWN5SWQ6IHN0cmluZyxcbiAgICAgICAgX3Byb3BzOiBCYXNpY1RhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeVByb3BzLFxuICAgICAgKTogVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGFkZCB0YXJnZXQgdHJhY2tpbmcgcG9saWN5IHRvIGFuIGltcG9ydGVkIFNjYWxhYmxlVGFyZ2V0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHNjYWxhYmxlVGFyZ2V0SWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBzY2FsYWJsZURpbWVuc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZU5hbWVzcGFjZTogU2VydmljZU5hbWVzcGFjZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBhcHBhdXRvc2NhbGluZ1RhcmdldC5BcHBhdXRvc2NhbGluZ1RhcmdldDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2NhbGFibGVUYXJnZXRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgd2l0aFJlc29sdmVkKHByb3BzLm1heENhcGFjaXR5LCAobWF4KSA9PiB7XG4gICAgICBpZiAobWF4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYG1heENhcGFjaXR5IGNhbm5vdCBiZSBuZWdhdGl2ZSwgZ290OiAke3Byb3BzLm1heENhcGFjaXR5fWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3aXRoUmVzb2x2ZWQocHJvcHMubWluQ2FwYWNpdHksIChtaW4pID0+IHtcbiAgICAgIGlmIChtaW4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgbWluQ2FwYWNpdHkgY2Fubm90IGJlIG5lZ2F0aXZlLCBnb3Q6ICR7cHJvcHMubWluQ2FwYWNpdHl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHdpdGhSZXNvbHZlZChwcm9wcy5taW5DYXBhY2l0eSwgcHJvcHMubWF4Q2FwYWNpdHksIChtaW4sIG1heCkgPT4ge1xuICAgICAgaWYgKG1heCA8IG1pbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYG1pbkNhcGFjaXR5ICgke3Byb3BzLm1pbkNhcGFjaXR5fSkgc2hvdWxkIGJlIGxvd2VyIHRoYW4gbWF4Q2FwYWNpdHkgKCR7cHJvcHMubWF4Q2FwYWNpdHl9KWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGb3IgRHluYW1vREIgYXV0b3NjYWxpbmcsIHVzZSBzZXJ2aWNlLWxpbmtlZCByb2xlcyB3aGVuIG5vIGV4cGxpY2l0IHJvbGUgaXMgcHJvdmlkZWRcbiAgICAvLyBUaGlzIGFsbG93cyBUZXJyYWZvcm0gdG8gYXV0b21hdGljYWxseSBtYW5hZ2UgdGhlIGFwcHJvcHJpYXRlIHNlcnZpY2UtbGlua2VkIHJvbGVcbiAgICAvLyByYXRoZXIgdGhhbiBjcmVhdGluZyBhIGN1c3RvbSBJQU0gcm9sZSB0aGF0IG1heSBoYXZlIGluY29ycmVjdCBBUk4gZm9ybWF0XG4gICAgdGhpcy5yb2xlID0gcHJvcHMucm9sZTtcblxuICAgIGNvbnN0IHRhcmdldENvbmZpZzogYW55ID0ge1xuICAgICAgbWF4Q2FwYWNpdHk6IHByb3BzLm1heENhcGFjaXR5LFxuICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLm1pbkNhcGFjaXR5LFxuICAgICAgcmVzb3VyY2VJZDogcHJvcHMucmVzb3VyY2VJZCxcbiAgICAgIHNjYWxhYmxlRGltZW5zaW9uOiBwcm9wcy5zY2FsYWJsZURpbWVuc2lvbixcbiAgICAgIHNlcnZpY2VOYW1lc3BhY2U6IHByb3BzLnNlcnZpY2VOYW1lc3BhY2UsXG4gICAgfTtcblxuICAgIC8vIE9ubHkgaW5jbHVkZSByb2xlQXJuIGlmIGEgcm9sZSBpcyBleHBsaWNpdGx5IHByb3ZpZGVkXG4gICAgLy8gV2hlbiBvbWl0dGVkLCBUZXJyYWZvcm0gd2lsbCB1c2UgYXBwcm9wcmlhdGUgc2VydmljZS1saW5rZWQgcm9sZXNcbiAgICBpZiAodGhpcy5yb2xlKSB7XG4gICAgICB0YXJnZXRDb25maWcucm9sZUFybiA9IHRoaXMucm9sZS5yb2xlQXJuO1xuICAgIH1cblxuICAgIHRoaXMudGFyZ2V0UmVzb3VyY2UgPSBuZXcgYXBwYXV0b3NjYWxpbmdUYXJnZXQuQXBwYXV0b3NjYWxpbmdUYXJnZXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAgdGFyZ2V0Q29uZmlnLFxuICAgICk7XG5cbiAgICB0aGlzLnNjYWxhYmxlVGFyZ2V0SWQgPSB0aGlzLnRhcmdldFJlc291cmNlLmlkO1xuICAgIHRoaXMucmVzb3VyY2VJZCA9IHByb3BzLnJlc291cmNlSWQ7XG4gICAgdGhpcy5zY2FsYWJsZURpbWVuc2lvbiA9IHByb3BzLnNjYWxhYmxlRGltZW5zaW9uO1xuICAgIHRoaXMuc2VydmljZU5hbWVzcGFjZSA9IHByb3BzLnNlcnZpY2VOYW1lc3BhY2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjYWxhYmxlVGFyZ2V0SWQ6IHRoaXMuc2NhbGFibGVUYXJnZXRJZCxcbiAgICAgIHJvbGVBcm46IHRoaXMucm9sZT8ucm9sZUFybixcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFkZFRvUm9sZVBvbGljeShzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMucm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBhZGQgcG9saWN5IHRvIHJvbGUgd2hlbiB1c2luZyBzZXJ2aWNlLWxpbmtlZCByb2xlcy4gXCIgK1xuICAgICAgICAgIFwiUHJvdmlkZSBhbiBleHBsaWNpdCByb2xlIGluIFNjYWxhYmxlVGFyZ2V0UHJvcHMgaWYgeW91IG5lZWQgdG8gYWRkIGN1c3RvbSBwb2xpY2llcy5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzdGF0ZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIHNjYWxlT25TY2hlZHVsZShcbiAgICBzY2hlZHVsZUlkOiBzdHJpbmcsXG4gICAgYWN0aW9uOiBTY2FsaW5nU2NoZWR1bGUsXG4gICk6IGFwcGF1dG9zY2FsaW5nU2NoZWR1bGVkQWN0aW9uLkFwcGF1dG9zY2FsaW5nU2NoZWR1bGVkQWN0aW9uIHtcbiAgICBpZiAoYWN0aW9uLm1pbkNhcGFjaXR5ID09PSB1bmRlZmluZWQgJiYgYWN0aW9uLm1heENhcGFjaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFlvdSBtdXN0IHN1cHBseSBhdCBsZWFzdCBvbmUgb2YgbWluQ2FwYWNpdHkgb3IgbWF4Q2FwYWNpdHksIGdvdCAke0pTT04uc3RyaW5naWZ5KGFjdGlvbil9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgYWN0aW9uLnNjaGVkdWxlLl9iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIG5ldyBhcHBhdXRvc2NhbGluZ1NjaGVkdWxlZEFjdGlvbi5BcHBhdXRvc2NhbGluZ1NjaGVkdWxlZEFjdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBzY2hlZHVsZUlkLFxuICAgICAge1xuICAgICAgICBuYW1lOiBzY2hlZHVsZUlkLFxuICAgICAgICBzZXJ2aWNlTmFtZXNwYWNlOiB0aGlzLnNlcnZpY2VOYW1lc3BhY2UsXG4gICAgICAgIHJlc291cmNlSWQ6IHRoaXMucmVzb3VyY2VJZCxcbiAgICAgICAgc2NhbGFibGVEaW1lbnNpb246IHRoaXMuc2NhbGFibGVEaW1lbnNpb24sXG4gICAgICAgIHNjaGVkdWxlOiBhY3Rpb24uc2NoZWR1bGUuZXhwcmVzc2lvblN0cmluZyxcbiAgICAgICAgc3RhcnRUaW1lOiBhY3Rpb24uc3RhcnRUaW1lPy50b0lTT1N0cmluZygpLFxuICAgICAgICBlbmRUaW1lOiBhY3Rpb24uZW5kVGltZT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgc2NhbGFibGVUYXJnZXRBY3Rpb246IHtcbiAgICAgICAgICBtYXhDYXBhY2l0eTogYWN0aW9uLm1heENhcGFjaXR5Py50b1N0cmluZygpLFxuICAgICAgICAgIG1pbkNhcGFjaXR5OiBhY3Rpb24ubWluQ2FwYWNpdHk/LnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWV6b25lOiBhY3Rpb24udGltZVpvbmU/LnRpbWV6b25lTmFtZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzY2FsZU9uTWV0cmljKFxuICAgIHBvbGljeUlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEJhc2ljU3RlcFNjYWxpbmdQb2xpY3lQcm9wcyxcbiAgKTogU3RlcFNjYWxpbmdQb2xpY3kge1xuICAgIHJldHVybiBuZXcgU3RlcFNjYWxpbmdQb2xpY3kodGhpcywgcG9saWN5SWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgc2NhbGluZ1RhcmdldDogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzY2FsZVRvVHJhY2tNZXRyaWMoXG4gICAgcG9saWN5SWQ6IHN0cmluZyxcbiAgICBwcm9wczogQmFzaWNUYXJnZXRUcmFja2luZ1NjYWxpbmdQb2xpY3lQcm9wcyxcbiAgKTogVGFyZ2V0VHJhY2tpbmdTY2FsaW5nUG9saWN5IHtcbiAgICByZXR1cm4gbmV3IFRhcmdldFRyYWNraW5nU2NhbGluZ1BvbGljeSh0aGlzLCBwb2xpY3lJZCwge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBzY2FsaW5nVGFyZ2V0OiB0aGlzLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQSBzY2hlZHVsZWQgc2NhbGluZyBhY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2FsaW5nU2NoZWR1bGUge1xuICAvKipcbiAgICogV2hlbiB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU6IFNjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRoaXMgc2NoZWR1bGVkIGFjdGlvbiBiZWNvbWVzIGFjdGl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIHJ1bGUgaXMgYWN0aXZhdGUgaW1tZWRpYXRlbHlcbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0VGltZT86IERhdGU7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBzY2hlZHVsZWQgYWN0aW9uIGV4cGlyZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBydWxlIG5ldmVyIGV4cGlyZXMuXG4gICAqL1xuICByZWFkb25seSBlbmRUaW1lPzogRGF0ZTtcblxuICAvKipcbiAgICogVGhlIG5ldyBtaW5pbXVtIGNhcGFjaXR5LlxuICAgKlxuICAgKiBEdXJpbmcgdGhlIHNjaGVkdWxlZCB0aW1lLCBpZiB0aGUgY3VycmVudCBjYXBhY2l0eSBpcyBiZWxvdyB0aGUgbWluaW11bVxuICAgKiBjYXBhY2l0eSwgQXBwbGljYXRpb24gQXV0byBTY2FsaW5nIHNjYWxlcyBvdXQgdG8gdGhlIG1pbmltdW0gY2FwYWNpdHkuXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBtYXhDYXBhY2l0eSBhbmQgbWluQ2FwYWNpdHkgbXVzdCBiZSBzdXBwbGllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gbmV3IG1pbmltdW0gY2FwYWNpdHlcbiAgICovXG4gIHJlYWRvbmx5IG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IG1heGltdW0gY2FwYWNpdHkuXG4gICAqXG4gICAqIER1cmluZyB0aGUgc2NoZWR1bGVkIHRpbWUsIHRoZSBjdXJyZW50IGNhcGFjaXR5IGlzIGFib3ZlIHRoZSBtYXhpbXVtXG4gICAqIGNhcGFjaXR5LCBBcHBsaWNhdGlvbiBBdXRvIFNjYWxpbmcgc2NhbGVzIGluIHRvIHRoZSBtYXhpbXVtIGNhcGFjaXR5LlxuICAgKlxuICAgKiBBdCBsZWFzdCBvbmUgb2YgbWF4Q2FwYWNpdHkgYW5kIG1pbkNhcGFjaXR5IG11c3QgYmUgc3VwcGxpZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIG5ldyBtYXhpbXVtIGNhcGFjaXR5XG4gICAqL1xuICByZWFkb25seSBtYXhDYXBhY2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRpbWUgem9uZSB1c2VkIHdoZW4gcmVmZXJyaW5nIHRvIHRoZSBkYXRlIGFuZCB0aW1lIG9mIGEgc2NoZWR1bGVkIGFjdGlvbixcbiAgICogd2hlbiB0aGUgc2NoZWR1bGVkIGFjdGlvbiB1c2VzIGFuIGF0IG9yIGNyb24gZXhwcmVzc2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBVVENcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVab25lPzogVGltZVpvbmU7XG59XG5cbi8qKlxuICogVGhlIHNlcnZpY2UgdGhhdCBzdXBwb3J0cyBBcHBsaWNhdGlvbiBBdXRvU2NhbGluZ1xuICovXG5leHBvcnQgZW51bSBTZXJ2aWNlTmFtZXNwYWNlIHtcbiAgRUNTID0gXCJlY3NcIixcbiAgRUxBU1RJQ19NQVBfUkVEVUNFID0gXCJlbGFzdGljbWFwcmVkdWNlXCIsXG4gIEVDMiA9IFwiZWMyXCIsXG4gIEFQUFNUUkVBTSA9IFwiYXBwc3RyZWFtXCIsXG4gIERZTkFNT0RCID0gXCJkeW5hbW9kYlwiLFxuICBSRFMgPSBcInJkc1wiLFxuICBTQUdFTUFLRVIgPSBcInNhZ2VtYWtlclwiLFxuICBDVVNUT01fUkVTT1VSQ0UgPSBcImN1c3RvbS1yZXNvdXJjZVwiLFxuICBMQU1CREEgPSBcImxhbWJkYVwiLFxuICBDT01QUkVIRU5EID0gXCJjb21wcmVoZW5kXCIsXG4gIEtBRktBID0gXCJrYWZrYVwiLFxuICBFTEFTVElDQUNIRSA9IFwiZWxhc3RpY2FjaGVcIixcbiAgTkVQVFVORSA9IFwibmVwdHVuZVwiLFxuICBDQVNTQU5EUkEgPSBcImNhc3NhbmRyYVwiLFxuICBXT1JLU1BBQ0VTID0gXCJ3b3Jrc3BhY2VzXCIsXG59XG4iXX0=
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.Schedule = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-applicationautoscaling/lib/schedule.ts
|
|
7
|
-
const
|
|
7
|
+
const cdktn_1 = require("cdktn");
|
|
8
8
|
const errors_1 = require("../../errors");
|
|
9
9
|
/**
|
|
10
10
|
* Schedule for scheduled scaling actions
|
|
@@ -76,7 +76,7 @@ class Schedule {
|
|
|
76
76
|
_bind(scope) {
|
|
77
77
|
if (!options.minute) {
|
|
78
78
|
// "@aws-cdk/aws-applicationautoscaling:defaultRunEveryMinute",
|
|
79
|
-
|
|
79
|
+
cdktn_1.Annotations.of(scope).addWarning("cron: If you don't pass 'minute', by default the event runs every minute. Pass 'minute: '*'' if that's what you intend, or 'minute: 0' to run once per hour instead.");
|
|
80
80
|
}
|
|
81
81
|
return new LiteralSchedule(this.expressionString);
|
|
82
82
|
}
|
|
@@ -86,7 +86,7 @@ class Schedule {
|
|
|
86
86
|
}
|
|
87
87
|
exports.Schedule = Schedule;
|
|
88
88
|
_a = JSII_RTTI_SYMBOL_1;
|
|
89
|
-
Schedule[_a] = { fqn: "terraconstructs.aws.compute.Schedule", version: "0.2.
|
|
89
|
+
Schedule[_a] = { fqn: "terraconstructs.aws.compute.Schedule", version: "0.2.5" };
|
|
90
90
|
class LiteralSchedule extends Schedule {
|
|
91
91
|
constructor(expressionString) {
|
|
92
92
|
super();
|
|
@@ -136,4 +136,4 @@ function makeRate(interval, singular) {
|
|
|
136
136
|
? `rate(1 ${singular})`
|
|
137
137
|
: `rate(${interval} ${singular}s)`;
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvc2NoZWR1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrR0FBK0c7QUFFL0csaUNBQW9DO0FBR3BDLHlDQUF1RDtBQUV2RDs7R0FFRztBQUNILE1BQXNCLFFBQVE7SUFDNUI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBa0I7UUFDekMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWtCO1FBQ25DLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDNUIsTUFBTSxpQkFBaUIsR0FBRztnQkFDeEIsUUFBUTtnQkFDUixTQUFTO2dCQUNULE1BQU07Z0JBQ04sT0FBTztnQkFDUCxLQUFLO2dCQUNMLE1BQU07YUFDUCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxNQUFNLElBQUksZ0NBQXVCLENBQy9CLHlGQUF5RixDQUMxRixDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sSUFBSSxlQUFlLENBQUMsUUFBUSxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLElBQUks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IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1hcHBsaWNhdGlvbmF1dG9zY2FsaW5nL2xpYi9zY2hlZHVsZS50c1xuXG5pbXBvcnQgeyBBbm5vdGF0aW9ucyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcblxuLyoqXG4gKiBTY2hlZHVsZSBmb3Igc2NoZWR1bGVkIHNjYWxpbmcgYWN0aW9uc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2NoZWR1bGUge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgc2NoZWR1bGUgZnJvbSBhIGxpdGVyYWwgc2NoZWR1bGUgZXhwcmVzc2lvblxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byB1c2UuIE11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBBcHBsaWNhdGlvbiBBdXRvU2NhbGluZyB3aWxsIHJlY29nbml6ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBleHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IFNjaGVkdWxlIHtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShleHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBzY2hlZHVsZSBmcm9tIGFuIGludGVydmFsIGFuZCBhIHRpbWUgdW5pdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByYXRlKGR1cmF0aW9uOiBEdXJhdGlvbik6IFNjaGVkdWxlIHtcbiAgICBpZiAoZHVyYXRpb24uaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGNvbnN0IHZhbGlkRHVyYXRpb25Vbml0ID0gW1xuICAgICAgICBcIm1pbnV0ZVwiLFxuICAgICAgICBcIm1pbnV0ZXNcIixcbiAgICAgICAgXCJob3VyXCIsXG4gICAgICAgIFwiaG91cnNcIixcbiAgICAgICAgXCJkYXlcIixcbiAgICAgICAgXCJkYXlzXCIsXG4gICAgICBdO1xuICAgICAgaWYgKCF2YWxpZER1cmF0aW9uVW5pdC5pbmNsdWRlcyhkdXJhdGlvbi51bml0TGFiZWwoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQWxsb3dlZCB1bml0cyBmb3Igc2NoZWR1bGluZyBhcmU6ICdtaW51dGUnLCAnbWludXRlcycsICdob3VyJywgJ2hvdXJzJywgJ2RheScgb3IgJ2RheXMnXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShgcmF0ZSgke2R1cmF0aW9uLmZvcm1hdFRva2VuVG9OdW1iZXIoKX0pYCk7XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbi50b1NlY29uZHMoKSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFwiRHVyYXRpb24gY2Fubm90IGJlIDBcIik7XG4gICAgfVxuXG4gICAgbGV0IHJhdGUgPSBtYXliZVJhdGUoZHVyYXRpb24udG9EYXlzKHsgaW50ZWdyYWw6IGZhbHNlIH0pLCBcImRheVwiKTtcbiAgICBpZiAocmF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByYXRlID0gbWF5YmVSYXRlKGR1cmF0aW9uLnRvSG91cnMoeyBpbnRlZ3JhbDogZmFsc2UgfSksIFwiaG91clwiKTtcbiAgICB9XG4gICAgaWYgKHJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmF0ZSA9IG1ha2VSYXRlKGR1cmF0aW9uLnRvTWludXRlcyh7IGludGVncmFsOiB0cnVlIH0pLCBcIm1pbnV0ZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBMaXRlcmFsU2NoZWR1bGUocmF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgU2NoZWR1bGUgZnJvbSBhIG1vbWVudCBpbiB0aW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF0KG1vbWVudDogRGF0ZSk6IFNjaGVkdWxlIHtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShgYXQoJHtmb3JtYXRJU08obW9tZW50KX0pYCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2NoZWR1bGUgZnJvbSBhIHNldCBvZiBjcm9uIGZpZWxkc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcm9uKG9wdGlvbnM6IENyb25PcHRpb25zKTogU2NoZWR1bGUge1xuICAgIGlmIChvcHRpb25zLndlZWtEYXkgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmRheSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHN1cHBseSBib3RoICdkYXknIGFuZCAnd2Vla0RheScsIHVzZSBhdCBtb3N0IG9uZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaW51dGUgPSBmYWxsYmFjayhvcHRpb25zLm1pbnV0ZSwgXCIqXCIpO1xuICAgIGNvbnN0IGhvdXIgPSBmYWxsYmFjayhvcHRpb25zLmhvdXIsIFwiKlwiKTtcbiAgICBjb25zdCBtb250aCA9IGZhbGxiYWNrKG9wdGlvbnMubW9udGgsIFwiKlwiKTtcbiAgICBjb25zdCB5ZWFyID0gZmFsbGJhY2sob3B0aW9ucy55ZWFyLCBcIipcIik7XG5cbiAgICAvLyBXZWVrZGF5IGRlZmF1bHRzIHRvICc/JyBpZiBub3Qgc3VwcGxpZWQuIElmIGl0IGlzIHN1cHBsaWVkLCBkYXkgbXVzdCBiZWNvbWUgJz8nXG4gICAgY29uc3QgZGF5ID0gZmFsbGJhY2soXG4gICAgICBvcHRpb25zLmRheSxcbiAgICAgIG9wdGlvbnMud2Vla0RheSAhPT0gdW5kZWZpbmVkID8gXCI/XCIgOiBcIipcIixcbiAgICApO1xuICAgIGNvbnN0IHdlZWtEYXkgPSBmYWxsYmFjayhvcHRpb25zLndlZWtEYXksIFwiP1wiKTtcblxuICAgIHJldHVybiBuZXcgKGNsYXNzIGV4dGVuZHMgU2NoZWR1bGUge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyA9IGBjcm9uKCR7bWludXRlfSAke2hvdXJ9ICR7ZGF5fSAke21vbnRofSAke3dlZWtEYXl9ICR7eWVhcn0pYDtcbiAgICAgIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5taW51dGUpIHtcbiAgICAgICAgICAvLyBcIkBhd3MtY2RrL2F3cy1hcHBsaWNhdGlvbmF1dG9zY2FsaW5nOmRlZmF1bHRSdW5FdmVyeU1pbnV0ZVwiLFxuICAgICAgICAgIEFubm90YXRpb25zLm9mKHNjb3BlKS5hZGRXYXJuaW5nKFxuICAgICAgICAgICAgXCJjcm9uOiBJZiB5b3UgZG9uJ3QgcGFzcyAnbWludXRlJywgYnkgZGVmYXVsdCB0aGUgZXZlbnQgcnVucyBldmVyeSBtaW51dGUuIFBhc3MgJ21pbnV0ZTogJyonJyBpZiB0aGF0J3Mgd2hhdCB5b3UgaW50ZW5kLCBvciAnbWludXRlOiAwJyB0byBydW4gb25jZSBwZXIgaG91ciBpbnN0ZWFkLlwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU2NoZWR1bGUodGhpcy5leHByZXNzaW9uU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBleHByZXNzaW9uIGZvciB0aGlzIHNjaGVkdWxlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZXhwcmVzc2lvblN0cmluZzogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gY29uZmlndXJlIGEgY3JvbiBleHByZXNzaW9uXG4gKlxuICogQWxsIGZpZWxkcyBhcmUgc3RyaW5ncyBzbyB5b3UgY2FuIHVzZSBjb21wbGV4IGV4cHJlc3Npb25zLiBBYnNlbmNlIG9mXG4gKiBhIGZpZWxkIGltcGxpZXMgJyonIG9yICc/Jywgd2hpY2hldmVyIG9uZSBpcyBhcHByb3ByaWF0ZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvU2NoZWR1bGVkRXZlbnRzLmh0bWwjQ3JvbkV4cHJlc3Npb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1pbnV0ZSB0byBydW4gdGhpcyBydWxlIGF0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnkgbWludXRlXG4gICAqL1xuICByZWFkb25seSBtaW51dGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBob3VyIHRvIHJ1biB0aGlzIHJ1bGUgYXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBFdmVyeSBob3VyXG4gICAqL1xuICByZWFkb25seSBob3VyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF5IG9mIHRoZSBtb250aCB0byBydW4gdGhpcyBydWxlIGF0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnkgZGF5IG9mIHRoZSBtb250aFxuICAgKi9cbiAgcmVhZG9ubHkgZGF5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9udGggdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEV2ZXJ5IG1vbnRoXG4gICAqL1xuICByZWFkb25seSBtb250aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHllYXIgdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEV2ZXJ5IHllYXJcbiAgICovXG4gIHJlYWRvbmx5IHllYXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXkgb2YgdGhlIHdlZWsgdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFueSBkYXkgb2YgdGhlIHdlZWtcbiAgICovXG4gIHJlYWRvbmx5IHdlZWtEYXk/OiBzdHJpbmc7XG59XG5cbmNsYXNzIExpdGVyYWxTY2hlZHVsZSBleHRlbmRzIFNjaGVkdWxlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoKSB7fVxufVxuXG5mdW5jdGlvbiBmYWxsYmFjazxUPih4OiBUIHwgdW5kZWZpbmVkLCBkZWY6IFQpOiBUIHtcbiAgcmV0dXJuIHggPT09IHVuZGVmaW5lZCA/IGRlZiA6IHg7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdElTTyhkYXRlPzogRGF0ZSkge1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgK1xuICAgIFwiLVwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgK1xuICAgIFwiLVwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENEYXRlKCkpICtcbiAgICBcIlRcIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDSG91cnMoKSkgK1xuICAgIFwiOlwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENNaW51dGVzKCkpICtcbiAgICBcIjpcIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuICApO1xuXG4gIGZ1bmN0aW9uIHBhZChudW06IG51bWJlcikge1xuICAgIGlmIChudW0gPCAxMCkge1xuICAgICAgcmV0dXJuIFwiMFwiICsgbnVtO1xuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSByYXRlIGlmIHRoZSByYXRlIGlzIHdob2xlIG51bWJlclxuICovXG5mdW5jdGlvbiBtYXliZVJhdGUoaW50ZXJ2YWw6IG51bWJlciwgc2luZ3VsYXI6IHN0cmluZykge1xuICBpZiAoaW50ZXJ2YWwgPT09IDAgfHwgIU51bWJlci5pc0ludGVnZXIoaW50ZXJ2YWwpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbWFrZVJhdGUoaW50ZXJ2YWwsIHNpbmd1bGFyKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gJ3JhdGUoJHtpbnRlcnZhbH0gJHtzaW5ndWxhcn0ocykpYCBmb3IgdGhlIGludGVydmFsXG4gKi9cbmZ1bmN0aW9uIG1ha2VSYXRlKGludGVydmFsOiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGludGVydmFsID09PSAxXG4gICAgPyBgcmF0ZSgxICR7c2luZ3VsYXJ9KWBcbiAgICA6IGByYXRlKCR7aW50ZXJ2YWx9ICR7c2luZ3VsYXJ9cylgO1xufVxuIl19
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvc2NoZWR1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwrR0FBK0c7QUFFL0csaUNBQW9DO0FBR3BDLHlDQUF1RDtBQUV2RDs7R0FFRztBQUNILE1BQXNCLFFBQVE7SUFDNUI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsVUFBa0I7UUFDekMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWtCO1FBQ25DLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDNUIsTUFBTSxpQkFBaUIsR0FBRztnQkFDeEIsUUFBUTtnQkFDUixTQUFTO2dCQUNULE1BQU07Z0JBQ04sT0FBTztnQkFDUCxLQUFLO2dCQUNMLE1BQU07YUFDUCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxNQUFNLElBQUksZ0NBQXVCLENBQy9CLHlGQUF5RixDQUMxRixDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU8sSUFBSSxlQUFlLENBQUMsUUFBUSxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFFRCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLElBQUks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IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1hcHBsaWNhdGlvbmF1dG9zY2FsaW5nL2xpYi9zY2hlZHVsZS50c1xuXG5pbXBvcnQgeyBBbm5vdGF0aW9ucyB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi8uLi9lcnJvcnNcIjtcblxuLyoqXG4gKiBTY2hlZHVsZSBmb3Igc2NoZWR1bGVkIHNjYWxpbmcgYWN0aW9uc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2NoZWR1bGUge1xuICAvKipcbiAgICogQ29uc3RydWN0IGEgc2NoZWR1bGUgZnJvbSBhIGxpdGVyYWwgc2NoZWR1bGUgZXhwcmVzc2lvblxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byB1c2UuIE11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBBcHBsaWNhdGlvbiBBdXRvU2NhbGluZyB3aWxsIHJlY29nbml6ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBleHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IFNjaGVkdWxlIHtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShleHByZXNzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBzY2hlZHVsZSBmcm9tIGFuIGludGVydmFsIGFuZCBhIHRpbWUgdW5pdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByYXRlKGR1cmF0aW9uOiBEdXJhdGlvbik6IFNjaGVkdWxlIHtcbiAgICBpZiAoZHVyYXRpb24uaXNVbnJlc29sdmVkKCkpIHtcbiAgICAgIGNvbnN0IHZhbGlkRHVyYXRpb25Vbml0ID0gW1xuICAgICAgICBcIm1pbnV0ZVwiLFxuICAgICAgICBcIm1pbnV0ZXNcIixcbiAgICAgICAgXCJob3VyXCIsXG4gICAgICAgIFwiaG91cnNcIixcbiAgICAgICAgXCJkYXlcIixcbiAgICAgICAgXCJkYXlzXCIsXG4gICAgICBdO1xuICAgICAgaWYgKCF2YWxpZER1cmF0aW9uVW5pdC5pbmNsdWRlcyhkdXJhdGlvbi51bml0TGFiZWwoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQWxsb3dlZCB1bml0cyBmb3Igc2NoZWR1bGluZyBhcmU6ICdtaW51dGUnLCAnbWludXRlcycsICdob3VyJywgJ2hvdXJzJywgJ2RheScgb3IgJ2RheXMnXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShgcmF0ZSgke2R1cmF0aW9uLmZvcm1hdFRva2VuVG9OdW1iZXIoKX0pYCk7XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbi50b1NlY29uZHMoKSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFwiRHVyYXRpb24gY2Fubm90IGJlIDBcIik7XG4gICAgfVxuXG4gICAgbGV0IHJhdGUgPSBtYXliZVJhdGUoZHVyYXRpb24udG9EYXlzKHsgaW50ZWdyYWw6IGZhbHNlIH0pLCBcImRheVwiKTtcbiAgICBpZiAocmF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByYXRlID0gbWF5YmVSYXRlKGR1cmF0aW9uLnRvSG91cnMoeyBpbnRlZ3JhbDogZmFsc2UgfSksIFwiaG91clwiKTtcbiAgICB9XG4gICAgaWYgKHJhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmF0ZSA9IG1ha2VSYXRlKGR1cmF0aW9uLnRvTWludXRlcyh7IGludGVncmFsOiB0cnVlIH0pLCBcIm1pbnV0ZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBMaXRlcmFsU2NoZWR1bGUocmF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0IGEgU2NoZWR1bGUgZnJvbSBhIG1vbWVudCBpbiB0aW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF0KG1vbWVudDogRGF0ZSk6IFNjaGVkdWxlIHtcbiAgICByZXR1cm4gbmV3IExpdGVyYWxTY2hlZHVsZShgYXQoJHtmb3JtYXRJU08obW9tZW50KX0pYCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2NoZWR1bGUgZnJvbSBhIHNldCBvZiBjcm9uIGZpZWxkc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcm9uKG9wdGlvbnM6IENyb25PcHRpb25zKTogU2NoZWR1bGUge1xuICAgIGlmIChvcHRpb25zLndlZWtEYXkgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmRheSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHN1cHBseSBib3RoICdkYXknIGFuZCAnd2Vla0RheScsIHVzZSBhdCBtb3N0IG9uZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaW51dGUgPSBmYWxsYmFjayhvcHRpb25zLm1pbnV0ZSwgXCIqXCIpO1xuICAgIGNvbnN0IGhvdXIgPSBmYWxsYmFjayhvcHRpb25zLmhvdXIsIFwiKlwiKTtcbiAgICBjb25zdCBtb250aCA9IGZhbGxiYWNrKG9wdGlvbnMubW9udGgsIFwiKlwiKTtcbiAgICBjb25zdCB5ZWFyID0gZmFsbGJhY2sob3B0aW9ucy55ZWFyLCBcIipcIik7XG5cbiAgICAvLyBXZWVrZGF5IGRlZmF1bHRzIHRvICc/JyBpZiBub3Qgc3VwcGxpZWQuIElmIGl0IGlzIHN1cHBsaWVkLCBkYXkgbXVzdCBiZWNvbWUgJz8nXG4gICAgY29uc3QgZGF5ID0gZmFsbGJhY2soXG4gICAgICBvcHRpb25zLmRheSxcbiAgICAgIG9wdGlvbnMud2Vla0RheSAhPT0gdW5kZWZpbmVkID8gXCI/XCIgOiBcIipcIixcbiAgICApO1xuICAgIGNvbnN0IHdlZWtEYXkgPSBmYWxsYmFjayhvcHRpb25zLndlZWtEYXksIFwiP1wiKTtcblxuICAgIHJldHVybiBuZXcgKGNsYXNzIGV4dGVuZHMgU2NoZWR1bGUge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyA9IGBjcm9uKCR7bWludXRlfSAke2hvdXJ9ICR7ZGF5fSAke21vbnRofSAke3dlZWtEYXl9ICR7eWVhcn0pYDtcbiAgICAgIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5taW51dGUpIHtcbiAgICAgICAgICAvLyBcIkBhd3MtY2RrL2F3cy1hcHBsaWNhdGlvbmF1dG9zY2FsaW5nOmRlZmF1bHRSdW5FdmVyeU1pbnV0ZVwiLFxuICAgICAgICAgIEFubm90YXRpb25zLm9mKHNjb3BlKS5hZGRXYXJuaW5nKFxuICAgICAgICAgICAgXCJjcm9uOiBJZiB5b3UgZG9uJ3QgcGFzcyAnbWludXRlJywgYnkgZGVmYXVsdCB0aGUgZXZlbnQgcnVucyBldmVyeSBtaW51dGUuIFBhc3MgJ21pbnV0ZTogJyonJyBpZiB0aGF0J3Mgd2hhdCB5b3UgaW50ZW5kLCBvciAnbWludXRlOiAwJyB0byBydW4gb25jZSBwZXIgaG91ciBpbnN0ZWFkLlwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU2NoZWR1bGUodGhpcy5leHByZXNzaW9uU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBleHByZXNzaW9uIGZvciB0aGlzIHNjaGVkdWxlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZXhwcmVzc2lvblN0cmluZzogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gY29uZmlndXJlIGEgY3JvbiBleHByZXNzaW9uXG4gKlxuICogQWxsIGZpZWxkcyBhcmUgc3RyaW5ncyBzbyB5b3UgY2FuIHVzZSBjb21wbGV4IGV4cHJlc3Npb25zLiBBYnNlbmNlIG9mXG4gKiBhIGZpZWxkIGltcGxpZXMgJyonIG9yICc/Jywgd2hpY2hldmVyIG9uZSBpcyBhcHByb3ByaWF0ZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9ldmVudHMvU2NoZWR1bGVkRXZlbnRzLmh0bWwjQ3JvbkV4cHJlc3Npb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3Jvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG1pbnV0ZSB0byBydW4gdGhpcyBydWxlIGF0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnkgbWludXRlXG4gICAqL1xuICByZWFkb25seSBtaW51dGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBob3VyIHRvIHJ1biB0aGlzIHJ1bGUgYXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBFdmVyeSBob3VyXG4gICAqL1xuICByZWFkb25seSBob3VyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF5IG9mIHRoZSBtb250aCB0byBydW4gdGhpcyBydWxlIGF0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnkgZGF5IG9mIHRoZSBtb250aFxuICAgKi9cbiAgcmVhZG9ubHkgZGF5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9udGggdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEV2ZXJ5IG1vbnRoXG4gICAqL1xuICByZWFkb25seSBtb250aD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHllYXIgdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEV2ZXJ5IHllYXJcbiAgICovXG4gIHJlYWRvbmx5IHllYXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXkgb2YgdGhlIHdlZWsgdG8gcnVuIHRoaXMgcnVsZSBhdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFueSBkYXkgb2YgdGhlIHdlZWtcbiAgICovXG4gIHJlYWRvbmx5IHdlZWtEYXk/OiBzdHJpbmc7XG59XG5cbmNsYXNzIExpdGVyYWxTY2hlZHVsZSBleHRlbmRzIFNjaGVkdWxlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoKSB7fVxufVxuXG5mdW5jdGlvbiBmYWxsYmFjazxUPih4OiBUIHwgdW5kZWZpbmVkLCBkZWY6IFQpOiBUIHtcbiAgcmV0dXJuIHggPT09IHVuZGVmaW5lZCA/IGRlZiA6IHg7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdElTTyhkYXRlPzogRGF0ZSkge1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgK1xuICAgIFwiLVwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENNb250aCgpICsgMSkgK1xuICAgIFwiLVwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENEYXRlKCkpICtcbiAgICBcIlRcIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDSG91cnMoKSkgK1xuICAgIFwiOlwiICtcbiAgICBwYWQoZGF0ZS5nZXRVVENNaW51dGVzKCkpICtcbiAgICBcIjpcIiArXG4gICAgcGFkKGRhdGUuZ2V0VVRDU2Vjb25kcygpKVxuICApO1xuXG4gIGZ1bmN0aW9uIHBhZChudW06IG51bWJlcikge1xuICAgIGlmIChudW0gPCAxMCkge1xuICAgICAgcmV0dXJuIFwiMFwiICsgbnVtO1xuICAgIH1cbiAgICByZXR1cm4gbnVtO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSByYXRlIGlmIHRoZSByYXRlIGlzIHdob2xlIG51bWJlclxuICovXG5mdW5jdGlvbiBtYXliZVJhdGUoaW50ZXJ2YWw6IG51bWJlciwgc2luZ3VsYXI6IHN0cmluZykge1xuICBpZiAoaW50ZXJ2YWwgPT09IDAgfHwgIU51bWJlci5pc0ludGVnZXIoaW50ZXJ2YWwpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbWFrZVJhdGUoaW50ZXJ2YWwsIHNpbmd1bGFyKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gJ3JhdGUoJHtpbnRlcnZhbH0gJHtzaW5ndWxhcn0ocykpYCBmb3IgdGhlIGludGVydmFsXG4gKi9cbmZ1bmN0aW9uIG1ha2VSYXRlKGludGVydmFsOiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGludGVydmFsID09PSAxXG4gICAgPyBgcmF0ZSgxICR7c2luZ3VsYXJ9KWBcbiAgICA6IGByYXRlKCR7aW50ZXJ2YWx9ICR7c2luZ3VsYXJ9cylgO1xufVxuIl19
|
|
@@ -5,8 +5,8 @@ exports.SecurityGroup = void 0;
|
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/security-group.ts
|
|
7
7
|
const cxschema = require("@aws-cdk/cloud-assembly-schema");
|
|
8
|
-
const provider_aws_1 = require("@
|
|
9
|
-
const
|
|
8
|
+
const provider_aws_1 = require("@cdktn/provider-aws");
|
|
9
|
+
const cdktn_1 = require("cdktn");
|
|
10
10
|
const connections_1 = require("./connections");
|
|
11
11
|
const peer_1 = require("./peer");
|
|
12
12
|
const port_1 = require("./port");
|
|
@@ -155,7 +155,7 @@ class SecurityGroupBase extends aws_construct_1.AwsConstructBase {
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
renderPeer(peer) {
|
|
158
|
-
if (
|
|
158
|
+
if (cdktn_1.Token.isUnresolved(peer.uniqueId)) {
|
|
159
159
|
// Need to return a unique value each time a peer
|
|
160
160
|
// is an unresolved token, else the duplicate skipper
|
|
161
161
|
// in `sg.addXxxRule` can detect unique rules as duplicates
|
|
@@ -274,8 +274,8 @@ class SecurityGroup extends SecurityGroupBase {
|
|
|
274
274
|
* Look up a security group.
|
|
275
275
|
*/
|
|
276
276
|
static fromLookupAttributes(scope, id, options) {
|
|
277
|
-
if (
|
|
278
|
-
|
|
277
|
+
if (cdktn_1.Token.isUnresolved(options.securityGroupId) ||
|
|
278
|
+
cdktn_1.Token.isUnresolved(options.securityGroupName)
|
|
279
279
|
// We can have an unresolved id when using a lookedup vpc
|
|
280
280
|
// || Token.isUnresolved(options.vpc?.vpcId)
|
|
281
281
|
) {
|
|
@@ -294,7 +294,7 @@ class SecurityGroup extends SecurityGroupBase {
|
|
|
294
294
|
props: {
|
|
295
295
|
securityGroupId: options.securityGroupId,
|
|
296
296
|
securityGroupName: options.securityGroupName,
|
|
297
|
-
vpcId:
|
|
297
|
+
vpcId: cdktn_1.Token.isUnresolved(options.vpc?.vpcId)
|
|
298
298
|
? undefined
|
|
299
299
|
: options.vpc?.vpcId,
|
|
300
300
|
},
|
|
@@ -334,10 +334,10 @@ class SecurityGroup extends SecurityGroupBase {
|
|
|
334
334
|
this.securityGroup = new provider_aws_1.securityGroup.SecurityGroup(this, "Resource", {
|
|
335
335
|
name: groupName,
|
|
336
336
|
description: groupDescription,
|
|
337
|
-
ingress:
|
|
337
|
+
ingress: cdktn_1.Lazy.anyValue({
|
|
338
338
|
produce: () => this.directIngressRules.map(provider_aws_1.securityGroup.securityGroupIngressToTerraform),
|
|
339
339
|
}, { omitEmptyArray: true }),
|
|
340
|
-
egress:
|
|
340
|
+
egress: cdktn_1.Lazy.anyValue({
|
|
341
341
|
produce: () => this.directEgressRules.map(provider_aws_1.securityGroup.securityGroupEgressToTerraform),
|
|
342
342
|
}, { omitEmptyArray: true }),
|
|
343
343
|
vpcId: props.vpc.vpcId,
|
|
@@ -372,7 +372,7 @@ class SecurityGroup extends SecurityGroupBase {
|
|
|
372
372
|
if (!remoteRule) {
|
|
373
373
|
// Warn only if addEgressRule() was explicitely called
|
|
374
374
|
// "@aws-cdk/aws-ec2:ipv4IgnoreEgressRule",
|
|
375
|
-
|
|
375
|
+
cdktn_1.Annotations.of(this).addWarning("Ignoring Egress rule since 'allowAllOutbound' is set to true; To add customized rules, set allowAllOutbound=false on the SecurityGroup");
|
|
376
376
|
}
|
|
377
377
|
return;
|
|
378
378
|
}
|
|
@@ -383,7 +383,7 @@ class SecurityGroup extends SecurityGroupBase {
|
|
|
383
383
|
if (!remoteRule) {
|
|
384
384
|
// Warn only if addEgressRule() was explicitely called
|
|
385
385
|
// "@aws-cdk/aws-ec2:ipv6IgnoreEgressRule",
|
|
386
|
-
|
|
386
|
+
cdktn_1.Annotations.of(this).addWarning("Ignoring Egress rule since 'allowAllIpv6Outbound' is set to true; To add customized rules, set allowAllIpv6Outbound=false on the SecurityGroup");
|
|
387
387
|
}
|
|
388
388
|
return;
|
|
389
389
|
}
|
|
@@ -495,7 +495,7 @@ class SecurityGroup extends SecurityGroupBase {
|
|
|
495
495
|
}
|
|
496
496
|
exports.SecurityGroup = SecurityGroup;
|
|
497
497
|
_a = JSII_RTTI_SYMBOL_1;
|
|
498
|
-
SecurityGroup[_a] = { fqn: "terraconstructs.aws.compute.SecurityGroup", version: "0.2.
|
|
498
|
+
SecurityGroup[_a] = { fqn: "terraconstructs.aws.compute.SecurityGroup", version: "0.2.5" };
|
|
499
499
|
/**
|
|
500
500
|
* Fix up a direct rule to have fromPort/toPort defined
|
|
501
501
|
*/
|
|
@@ -561,4 +561,4 @@ function isAllTrafficRule(rule) {
|
|
|
561
561
|
rule.cidrIpv6 === "::/0") &&
|
|
562
562
|
rule.ipProtocol === "-1");
|
|
563
563
|
}
|
|
564
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvc2VjdXJpdHktZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrR0FBa0c7QUFFbEcsMkRBQTJEO0FBQzNELHNEQUs2QjtBQUM3QixpQ0FBaUQ7QUFFakQsK0NBQTRDO0FBQzVDLGlDQUFxQztBQUNyQyxpQ0FBOEI7QUFFOUIseUNBQStDO0FBQy9DLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFDeEMsMERBQXNEO0FBRXRELGtFQUFrRTtBQUVsRSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQ3RDLCtDQUErQyxDQUNoRCxDQUFDO0FBRUYsTUFBTSwrQ0FBK0MsR0FDbkQsNkRBQTZELENBQUM7QUFnRWhFOztHQUVHO0FBQ0gsTUFBZSxpQkFDYixTQUFRLGdDQUFnQjtJQUd4Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBTTtRQUNsQyxPQUFPLHFCQUFxQixJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBR0QsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTztZQUNMLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBWUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQVRWLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGdCQUFXLEdBQWdCLElBQUkseUJBQVcsQ0FBQztZQUN6RCxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBR0sscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBS25DLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLG9CQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sY0FBYyxDQUNuQixJQUFXLEVBQ1gsVUFBZ0IsRUFDaEIsV0FBb0IsRUFDcEIsVUFBb0I7UUFFcEIsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsV0FBVyxHQUFHLFFBQVEsSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN0RCxDQUFDO1FBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQzNDLElBQUksRUFDSixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsQ0FDWCxDQUFDO1FBRUYsa0JBQWtCO1FBQ2xCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUMsSUFBSSwwQ0FBMkIsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNyRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3JDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM3QixHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLFdBQVc7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVNLGFBQWEsQ0FDbEIsSUFBVyxFQUNYLFVBQWdCLEVBQ2hCLFdBQW9CLEVBQ3BCLFVBQW9CO1FBRXBCLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDcEQsQ0FBQztRQUVELE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUMzQyxJQUFJLEVBQ0osVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLENBQ1gsQ0FBQztRQUVGLGtCQUFrQjtRQUNsQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlDLElBQUkseUNBQTBCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDbkUsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNyQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDNUIsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFO2dCQUMxQixXQUFXO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsK0VBQStFO0lBQ3ZFLFlBQVk7UUFDbEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BK0NHO0lBRU8sa0JBQWtCLENBQzFCLElBQVcsRUFDWCxVQUFnQixFQUNoQixNQUFxQixFQUNyQixVQUFvQjtRQUVwQixJQUNFLFVBQVU7WUFDVixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQzNCLENBQUM7WUFDRCxXQUFXO1lBQ1gsTUFBTSxjQUFjLEdBQUcsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDekQsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsSUFBSSxjQUFjLEVBQUU7YUFDdkQsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sNEVBQTRFO1lBQzVFLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsRUFBRSxFQUFFLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsT0FBTyxDQUM1RCxHQUFHLEVBQ0gsR0FBRyxDQUNKO2FBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVc7UUFDNUIsSUFBSSxhQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3RDLGlEQUFpRDtZQUNqRCxxREFBcUQ7WUFDckQsMkRBQTJEO1lBQzNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUM1QixDQUFDLENBQUMsaUJBQWlCLElBQUksQ0FBQyxnQkFBZ0IsSUFBSTtnQkFDNUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFnQkQsU0FBUyxlQUFlLENBQUMsTUFBeUIsRUFBRSxNQUF5QjtJQUMzRSxPQUFPLG9CQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLG9CQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFvSEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsaUJBQWlCO0lBQ2xEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FDMUIsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLGVBQXVCLEVBQ3ZCLGdCQUEwQjtRQUUxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzFDLGVBQWU7WUFDZixnQkFBZ0I7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUM1QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsaUJBQXlCLEVBQ3pCLEdBQVMsRUFDVCxnQkFBMEI7UUFFMUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUMxQyxpQkFBaUI7WUFDakIsR0FBRztZQUNILGdCQUFnQjtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUMvQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsZUFBdUIsRUFDdkIsVUFBc0MsRUFBRTtRQUV4QyxNQUFNLGFBQWMsU0FBUSxpQkFBaUI7WUFBN0M7O2dCQUNTLG9CQUFlLEdBQUcsZUFBZSxDQUFDO2dCQUNsQyxxQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDO2dCQUNwRCx5QkFBb0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLElBQUksS0FBSyxDQUFDO1lBYXRFLENBQUM7WUFYUSxhQUFhLENBQ2xCLElBQVcsRUFDWCxVQUFnQixFQUNoQixXQUFvQixFQUNwQixVQUFvQjtnQkFFcEIsNkNBQTZDO2dCQUM3QyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDdkMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7U0FDRjtRQUVELE1BQU0sZUFBZ0IsU0FBUSxpQkFBaUI7WUFBL0M7O2dCQUNTLG9CQUFlLEdBQUcsZUFBZSxDQUFDO2dCQUNsQyxxQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDO2dCQUNwRCx5QkFBb0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLElBQUksS0FBSyxDQUFDO1lBbUJ0RSxDQUFDO1lBakJRLGFBQWEsQ0FDbEIsS0FBWSxFQUNaLFdBQWlCLEVBQ2pCLFlBQXFCLEVBQ3JCLFdBQXFCO2dCQUVyQixhQUFhO1lBQ2YsQ0FBQztZQUVNLGNBQWMsQ0FDbkIsS0FBWSxFQUNaLFdBQWlCLEVBQ2pCLFlBQXFCLEVBQ3JCLFdBQXFCO2dCQUVyQixhQUFhO1lBQ2YsQ0FBQztTQUNGO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUs7WUFDOUIsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDOUIsQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsb0JBQW9CLENBQ2pDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixPQUFtQztRQUVuQyxJQUNFLGFBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUMzQyxhQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUM3Qyx5REFBeUQ7UUFDekQsNENBQTRDO1VBQzVDLENBQUM7WUFDRCxNQUFNLElBQUksd0JBQWUsQ0FDdkIsd0VBQXdFLEVBQ3hFLEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQztRQUVELG9DQUFvQztRQUNwQyx1RUFBdUU7UUFDdkUsOERBQThEO1FBQzlELHFEQUFxRDtRQUNyRCxNQUFNLFVBQVUsR0FBRztZQUNqQixlQUFlLEVBQUUsYUFBYTtZQUM5QixnQkFBZ0IsRUFBRSxJQUFJO1NBQ2UsQ0FBQztRQUN4QyxJQUFJLFVBQVUsR0FDWixrQ0FBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDOUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsdUJBQXVCO1lBQzFELEtBQUssRUFBRTtnQkFDTCxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7Z0JBQ3hDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7Z0JBQzVDLEtBQUssRUFBRSxhQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO29CQUMzQyxDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO2FBQ3ZCO1lBQ0QsVUFBVTtTQUNYLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFWCxJQUFJLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLG1DQUFvQixDQUFDLG9CQUFvQixDQUN4RCxLQUFLLEVBQ0wsTUFBTSxHQUFHLEVBQUUsRUFDWDtnQkFDRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO2dCQUN6QixFQUFFLEVBQUUsT0FBTyxDQUFDLGVBQWU7Z0JBQzNCLElBQUksRUFBRSxPQUFPLENBQUMsaUJBQWlCO2FBQ2hDLENBQ0YsQ0FBQztZQUNGLFVBQVUsR0FBRztnQkFDWCxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO2FBQ25ELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUMsbUJBQW1CLENBQ3RDLEtBQUssRUFDTCxFQUFFLEVBQ0YsVUFBVSxDQUFDLGVBQWUsRUFDMUI7WUFDRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsZ0JBQWdCO1lBQzdDLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQW9DRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBVlQsdUJBQWtCLEdBQ2pDLEVBQUUsQ0FBQztRQUNZLHNCQUFpQixHQUF3QyxFQUFFLENBQUM7UUFTM0UsTUFBTSxTQUFTLEdBQ2IsS0FBSyxDQUFDLGlCQUFpQjtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtnQkFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3RCLENBQUMsQ0FBQztRQUVMLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUU3RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FBQztRQUN6RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUVoRSxJQUFJLENBQUMsa0JBQWtCO1lBQ3JCLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxTQUFTO2dCQUNwQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3ZCLCtDQUErQyxDQUNoRCxDQUFDO1FBRVIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDRCQUFhLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDckUsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLE9BQU8sRUFBRSxZQUFJLENBQUMsUUFBUSxDQUNwQjtnQkFDRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ1osSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FDekIsNEJBQWEsQ0FBQywrQkFBK0IsQ0FDOUM7YUFDSixFQUNELEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUN6QjtZQUNELE1BQU0sRUFBRSxZQUFJLENBQUMsUUFBUSxDQUNuQjtnQkFDRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FDeEIsNEJBQWEsQ0FBQyw4QkFBOEIsQ0FDN0M7YUFDSixFQUNELEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUN6QjtZQUNELEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFFbkQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVNLGNBQWMsQ0FDbkIsSUFBVyxFQUNYLFVBQWdCLEVBQ2hCLFdBQW9CLEVBQ3BCLFVBQW9CO1FBRXBCLElBQ0UsQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUNuQixDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsQ0FBQztZQUNELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDaEUsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixXQUFXLEdBQUcsUUFBUSxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3RELENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDeEIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQzFCLFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sYUFBYSxDQUNsQixJQUFXLEVBQ1gsVUFBZ0IsRUFDaEIsV0FBb0IsRUFDcEIsVUFBb0I7UUFFcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckMsd0VBQXdFO1lBQ3hFLHdFQUF3RTtZQUN4RSxRQUFRO1lBQ1IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixzREFBc0Q7Z0JBQ3RELDJDQUEyQztnQkFDM0MsbUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUM3Qix3SUFBd0ksQ0FDekksQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3hDLDRFQUE0RTtZQUM1RSx3RUFBd0U7WUFDeEUsUUFBUTtZQUNSLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsc0RBQXNEO2dCQUN0RCwyQ0FBMkM7Z0JBQzNDLG1CQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDN0IsZ0pBQWdKLENBQ2pKLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDbkIsQ0FBQyxVQUFVLENBQUMsYUFBYTtZQUN6QixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLENBQUM7WUFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQy9ELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsV0FBVyxHQUFHLFFBQVEsSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN0RCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDMUIsV0FBVztTQUNaLENBQUM7UUFFRixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0IseUVBQXlFO1lBQ3pFLDRFQUE0RTtZQUM1RSxvRUFBb0U7WUFDcEUsMkVBQTJFO1lBQzNFLG1EQUFtRDtZQUNuRCxNQUFNLElBQUksd0JBQWUsQ0FDdkIsaUtBQWlLLEVBQ2pLLElBQUksQ0FDTCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0IsQ0FBQyxJQUF3QztRQUNuRSxNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWMsQ0FBQyxJQUF3QztRQUM3RCxPQUFPLENBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUIsQ0FBQyxJQUF1QztRQUNqRSxNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWEsQ0FBQyxJQUF1QztRQUMzRCxPQUFPLENBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLGFBQWEsQ0FDakIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixjQUFjLENBQUMsV0FBVyxFQUMxQixLQUFLLENBQ04sQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssd0JBQXdCO1FBQzlCLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO1FBQ2pFLE1BQU0sSUFBSSxHQUFHLFdBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzVCLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxDQUFDO29CQUNYLE1BQU0sRUFBRSxDQUFDO29CQUNULGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQy9CLFdBQVc7aUJBQ1osQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOztBQXJiSCxzQ0FzYkM7OztBQUVEOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsSUFBNEU7SUFFNUUseUVBQXlFO0lBQ3pFLHdDQUF3QztJQUN4QyxRQUFRO0lBQ1IsNkhBQTZIO0lBQzdILE9BQU87SUFDUCwwR0FBMEc7SUFDMUcsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUM7UUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQXNDO0lBQ3hELFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUN6QixXQUFXLEVBQUUsdUNBQXVDO0lBQ3BEOzs7T0FHRztJQUNILFFBQVEsRUFBRSxJQUFJO0lBQ2QsUUFBUSxFQUFFLENBQUM7SUFDWCxNQUFNLEVBQUUsQ0FBQztDQUNWLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLFdBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QyxNQUFNLGdCQUFnQixHQUFHLFdBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQTJDM0M7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixDQUFxQyxFQUNyQyxDQUFxQztJQUVyQyxPQUFPLENBQ0wsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVTtRQUM3QixDQUFDLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQyxjQUFjO1FBQ3JDLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVE7UUFDekIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtRQUNyQixDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRO1FBQ3pCLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLGFBQWE7UUFDbkMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUN0QyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDdkIsQ0FBb0MsRUFDcEMsQ0FBb0M7SUFFcEMsT0FBTyxDQUNMLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFVBQVU7UUFDN0IsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYztRQUNyQyxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRO1FBQ3pCLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07UUFDckIsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsUUFBUTtRQUN6QixDQUFDLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxhQUFhO1FBQ25DLENBQUMsQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FDdEMsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsSUFBUztJQUNqQyxPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVc7UUFDNUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUN6QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL3NlY3VyaXR5LWdyb3VwLnRzXG5cbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gXCJAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWFcIjtcbmltcG9ydCB7XG4gIGRhdGFBd3NTZWN1cml0eUdyb3VwLFxuICBzZWN1cml0eUdyb3VwLFxuICB2cGNTZWN1cml0eUdyb3VwRWdyZXNzUnVsZSxcbiAgdnBjU2VjdXJpdHlHcm91cEluZ3Jlc3NSdWxlLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIExhenksIFRva2VuIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuaW1wb3J0IHsgSVBlZXIsIFBlZXIgfSBmcm9tIFwiLi9wZWVyXCI7XG5pbXBvcnQgeyBQb3J0IH0gZnJvbSBcIi4vcG9ydFwiO1xuaW1wb3J0IHsgSVZwYyB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuaW1wb3J0IHtcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgSUF3c0NvbnN0cnVjdCxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCB7IENvbnRleHRQcm92aWRlciB9IGZyb20gXCIuLi9jb250ZXh0LXByb3ZpZGVyXCI7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tIFwiLi4vY3gtYXBpXCI7XG4vLyBpbXBvcnQgeyBhbGxvd0FsbE91dGJvdW5kTG9jYWwgfSBmcm9tIFwiLi9wcml2YXRlL2NvbnRleHQtc3R1YlwiO1xuXG5jb25zdCBTRUNVUklUWV9HUk9VUF9TWU1CT0wgPSBTeW1ib2wuZm9yKFxuICBcInRlcnJhY29uc3RydWN0cy9saWIvYXdzL2NvbXB1dGUuU2VjdXJpdHlHcm91cFwiLFxuKTtcblxuY29uc3QgU0VDVVJJVFlfR1JPVVBfRElTQUJMRV9JTkxJTkVfUlVMRVNfQ09OVEVYVF9LRVkgPVxuICBcInRlcnJhY29uc3RydWN0cy9hd3MvY29tcHV0ZS5zZWN1cml0eUdyb3VwRGlzYWJsZUlubGluZVJ1bGVzXCI7XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUdyb3VwT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBJRCBmb3IgdGhlIGN1cnJlbnQgc2VjdXJpdHkgZ3JvdXBcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBzZWN1cml0eSBncm91cC1saWtlIG9iamVjdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2VjdXJpdHlHcm91cCBleHRlbmRzIElBd3NDb25zdHJ1Y3QsIElQZWVyIHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cE91dHB1dHM6IFNlY3VyaXR5R3JvdXBPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBJRCBmb3IgdGhlIGN1cnJlbnQgc2VjdXJpdHkgZ3JvdXBcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIFNlY3VyaXR5R3JvdXAgaGFzIGJlZW4gY29uZmlndXJlZCB0byBhbGxvdyBhbGwgb3V0Ym91bmQgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBbGxPdXRib3VuZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkIGFuIGluZ3Jlc3MgcnVsZSBmb3IgdGhlIGN1cnJlbnQgc2VjdXJpdHkgZ3JvdXBcbiAgICpcbiAgICogYHJlbW90ZVJ1bGVgIGNvbnRyb2xzIHdoZXJlIHRoZSBSdWxlIG9iamVjdCBpcyBjcmVhdGVkIGlmIHRoZSBwZWVyIGlzIGFsc28gYVxuICAgKiBzZWN1cml0eUdyb3VwIGFuZCB0aGV5IGFyZSBpbiBkaWZmZXJlbnQgc3RhY2suIElmIGZhbHNlIChkZWZhdWx0KSB0aGVcbiAgICogcnVsZSBvYmplY3QgaXMgY3JlYXRlZCB1bmRlciB0aGUgY3VycmVudCBTZWN1cml0eUdyb3VwIG9iamVjdC4gSWYgdHJ1ZSBhbmQgdGhlXG4gICAqIHBlZXIgaXMgYWxzbyBhIFNlY3VyaXR5R3JvdXAsIHRoZSBydWxlIG9iamVjdCBpcyBjcmVhdGVkIHVuZGVyIHRoZSByZW1vdGVcbiAgICogU2VjdXJpdHlHcm91cCBvYmplY3QuXG4gICAqL1xuICBhZGRJbmdyZXNzUnVsZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlbW90ZVJ1bGU/OiBib29sZWFuLFxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gZWdyZXNzIHJ1bGUgZm9yIHRoZSBjdXJyZW50IHNlY3VyaXR5IGdyb3VwXG4gICAqXG4gICAqIGByZW1vdGVSdWxlYCBjb250cm9scyB3aGVyZSB0aGUgUnVsZSBvYmplY3QgaXMgY3JlYXRlZCBpZiB0aGUgcGVlciBpcyBhbHNvIGFcbiAgICogc2VjdXJpdHlHcm91cCBhbmQgdGhleSBhcmUgaW4gZGlmZmVyZW50IHN0YWNrLiBJZiBmYWxzZSAoZGVmYXVsdCkgdGhlXG4gICAqIHJ1bGUgb2JqZWN0IGlzIGNyZWF0ZWQgdW5kZXIgdGhlIGN1cnJlbnQgU2VjdXJpdHlHcm91cCBvYmplY3QuIElmIHRydWUgYW5kIHRoZVxuICAgKiBwZWVyIGlzIGFsc28gYSBTZWN1cml0eUdyb3VwLCB0aGUgcnVsZSBvYmplY3QgaXMgY3JlYXRlZCB1bmRlciB0aGUgcmVtb3RlXG4gICAqIFNlY3VyaXR5R3JvdXAgb2JqZWN0LlxuICAgKi9cbiAgYWRkRWdyZXNzUnVsZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlbW90ZVJ1bGU/OiBib29sZWFuLFxuICApOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgU2VjdXJpdHlHcm91cCB0aGF0IGlzIG5vdCBjcmVhdGVkIGluIHRoaXMgdGVtcGxhdGVcbiAqL1xuYWJzdHJhY3QgY2xhc3MgU2VjdXJpdHlHcm91cEJhc2VcbiAgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSVNlY3VyaXR5R3JvdXBcbntcbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBpbmRpY2F0ZWQgb2JqZWN0IGlzIGEgc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNTZWN1cml0eUdyb3VwKHg6IGFueSk6IHggaXMgU2VjdXJpdHlHcm91cEJhc2Uge1xuICAgIHJldHVybiBTRUNVUklUWV9HUk9VUF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzZWN1cml0eUdyb3VwSWQ6IHN0cmluZztcbiAgcHVibGljIGdldCBzZWN1cml0eUdyb3VwT3V0cHV0cygpOiBTZWN1cml0eUdyb3VwT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VjdXJpdHlHcm91cE91dHB1dHM7XG4gIH1cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGFsbG93QWxsT3V0Ym91bmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhbGxvd0FsbElwdjZPdXRib3VuZDogYm9vbGVhbjtcblxuICBwdWJsaWMgcmVhZG9ubHkgY2FuSW5saW5lUnVsZSA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHtcbiAgICBzZWN1cml0eUdyb3VwczogW3RoaXNdLFxuICB9KTtcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRQb3J0PzogUG9ydDtcblxuICBwcml2YXRlIHBlZXJBc1Rva2VuQ291bnQ6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBBd3NDb25zdHJ1Y3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFNFQ1VSSVRZX0dST1VQX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIEF3c1N0YWNrLnVuaXF1ZUlkKHRoaXMubm9kZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkSW5ncmVzc1J1bGUoXG4gICAgcGVlcjogSVBlZXIsXG4gICAgY29ubmVjdGlvbjogUG9ydCxcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICByZW1vdGVSdWxlPzogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc2NyaXB0aW9uID0gYGZyb20gJHtwZWVyLnVuaXF1ZUlkfToke2Nvbm5lY3Rpb259YDtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNjb3BlLCBpZCB9ID0gdGhpcy5kZXRlcm1pbmVSdWxlU2NvcGUoXG4gICAgICBwZWVyLFxuICAgICAgY29ubmVjdGlvbixcbiAgICAgIFwiZnJvbVwiLFxuICAgICAgcmVtb3RlUnVsZSxcbiAgICApO1xuXG4gICAgLy8gU2tpcCBkdXBsaWNhdGVzXG4gICAgaWYgKHNjb3BlLm5vZGUudHJ5RmluZENoaWxkKGlkKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXcgdnBjU2VjdXJpdHlHcm91cEluZ3Jlc3NSdWxlLlZwY1NlY3VyaXR5R3JvdXBJbmdyZXNzUnVsZShzY29wZSwgaWQsIHtcbiAgICAgICAgc2VjdXJpdHlHcm91cElkOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgLi4ucGVlci50b0luZ3Jlc3NSdWxlQ29uZmlnKCksXG4gICAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSnNvbigpLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRFZ3Jlc3NSdWxlKFxuICAgIHBlZXI6IElQZWVyLFxuICAgIGNvbm5lY3Rpb246IFBvcnQsXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgcmVtb3RlUnVsZT86IGJvb2xlYW4sXG4gICkge1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXNjcmlwdGlvbiA9IGB0byAke3BlZXIudW5pcXVlSWR9OiR7Y29ubmVjdGlvbn1gO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2NvcGUsIGlkIH0gPSB0aGlzLmRldGVybWluZVJ1bGVTY29wZShcbiAgICAgIHBlZXIsXG4gICAgICBjb25uZWN0aW9uLFxuICAgICAgXCJ0b1wiLFxuICAgICAgcmVtb3RlUnVsZSxcbiAgICApO1xuXG4gICAgLy8gU2tpcCBkdXBsaWNhdGVzXG4gICAgaWYgKHNjb3BlLm5vZGUudHJ5RmluZENoaWxkKGlkKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXcgdnBjU2VjdXJpdHlHcm91cEVncmVzc1J1bGUuVnBjU2VjdXJpdHlHcm91cEVncmVzc1J1bGUoc2NvcGUsIGlkLCB7XG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgIC4uLnBlZXIudG9FZ3Jlc3NSdWxlQ29uZmlnKCksXG4gICAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSnNvbigpLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b0luZ3Jlc3NSdWxlQ29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudG9SdWxlQ29uZmlnKCk7XG4gIH1cblxuICBwdWJsaWMgdG9FZ3Jlc3NSdWxlQ29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudG9SdWxlQ29uZmlnKCk7XG4gIH1cblxuICAvLyBUZXJyYWZvcm0gZG9lcyBub3QgdXNlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGJldHdlZW4gaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzXG4gIHByaXZhdGUgdG9SdWxlQ29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgcmVmZXJlbmNlZFNlY3VyaXR5R3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hlcmUgdG8gcGFyZW50IGEgbmV3IGluZ3Jlc3MvZWdyZXNzIHJ1bGVcbiAgICpcbiAgICogQSBTZWN1cml0eUdyb3VwIHJ1bGUgaXMgcGFyZW50ZWQgdW5kZXIgdGhlIGdyb3VwIGl0J3MgcmVsYXRlZCB0bywgVU5MRVNTXG4gICAqIHdlJ3JlIGluIGEgY3Jvc3Mtc3RhY2sgc2NlbmFyaW8gd2l0aCBhbm90aGVyIFNlY3VyaXR5IEdyb3VwLiBJbiB0aGF0IGNhc2UsXG4gICAqIHdlIHJlc3BlY3QgdGhlICdyZW1vdGVSdWxlJyBmbGFnIGFuZCB3aWxsIHBhcmVudCB1bmRlciB0aGUgb3RoZXIgc2VjdXJpdHlcbiAgICogZ3JvdXAuXG4gICAqXG4gICAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGN5Y2xpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdGFja3MsIHNpbmNlIGJvdGhcbiAgICogaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzIHdpbGwgcmVmZXJlbmNlIGJvdGggc2VjdXJpdHkgZ3JvdXBzLCBhbmQgYSBuYWl2ZVxuICAgKiBwYXJlbnRpbmcgd2lsbCBsZWFkIHRvIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOlxuICAgKlxuICAgKiAgIOKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlyAgICAgICAgIOKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVl1xuICAgKiAgIOKVkSAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICDilZEgICAgICAgICDilZEgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pWRXG4gICAqICAg4pWRICDilIIgIEdyb3VwQSAgIOKUguKXgOKUgOKUgOKUgOKUgOKVrOKUgOKUkCAgIOKUjOKUgOKUgOKUgOKVrOKUgOKUgOKUgOKWtuKUgiAgR3JvdXBCICAg4pSCICAg4pWRXG4gICAqICAg4pWRICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgIOKVkSDilIIgICDilIIgICDilZEgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAg4pWRXG4gICAqICAg4pWRICAgICAgICDilrIgICAgICAgICAgIOKVkSDilIIgICDilIIgICDilZEgICAgICAgICAg4payICAgICAgICAg4pWRXG4gICAqICAg4pWRICAgICAgICDilIIgICAgICAgICAgIOKVkSDilIIgICDilIIgICDilZEgICAgICAgICAg4pSCICAgICAgICAg4pWRXG4gICAqICAg4pWRICAgICAgICDilIIgICAgICAgICAgIOKVkSDilIIgICDilIIgICDilZEgICAgICAgICAg4pSCICAgICAgICAg4pWRXG4gICAqICAg4pWRICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgIOKVkSDilJTilIDilIDilIDilLzilIDilIDilIDilazilIDilIDilIDilIDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICDilZFcbiAgICogICDilZEgIOKUgiAgRWdyZXNzQSAg4pSC4pSA4pSA4pSA4pSA4pSA4pWs4pSA4pSA4pSA4pSA4pSA4pSYICAg4pWRICAgIOKUgiBJbmdyZXNzQiAg4pSCICAg4pWRXG4gICAqICAg4pWRICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgIOKVkSAgICAgICAgIOKVkSAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilZFcbiAgICogICDilZEgICAgICAgICAgICAgICAgICAgIOKVkSAgICAgICAgIOKVkSAgICAgICAgICAgICAgICAgICAg4pWRXG4gICAqICAg4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdICAgICAgICAg4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdXG4gICAqXG4gICAqIEJ5IGhhdmluZyB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggdGhlIHBhcmVudCwgd2UgYXZvaWQgdGhlIGN5Y2xpYyByZWZlcmVuY2UgYnlcbiAgICoga2VlcGluZyBhbGwgcnVsZXMgaW4gYSBzaW5nbGUgc3RhY2suXG4gICAqXG4gICAqIElmIHRoaXMgaGFwcGVucywgd2UgYWxzbyBoYXZlIHRvIGNoYW5nZSB0aGUgY29uc3RydWN0IElELCBiZWNhdXNlXG4gICAqIG90aGVyd2lzZSB3ZSBtaWdodCBoYXZlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUgSUQgaWYgd2UgaGF2ZVxuICAgKiBtdWx0aXBsZSByZXZlcnNlZCBzZWN1cml0eSBncm91cCByZWxhdGlvbnNoaXBzLlxuICAgKlxuICAgKiAgIOKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVl1xuICAgKiAgIOKVkeKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgICAgICAgICAgICDilZFcbiAgICogICDilZHilIIgIEdyb3VwQiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICDilZFcbiAgICogICDilZHilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgICAgICAgICAg4pWRXG4gICAqICAg4pWRICAgICAg4payICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUgiAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUnOKUgOKUgOKUgOKUgFwiZnJvbSBBXCLilIDilIDilIIgSW5ncmVzc0IgIOKUgiDilZFcbiAgICogICDilZEgICAgICDilIIgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDilZFcbiAgICogICDilZEgICAgICDilIIgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCDilZFcbiAgICogICDilZEgICAgICDilJzilIDilIDilIDilIDilIBcInRvIEJcIuKUgOKUgOKUgOKUgiAgRWdyZXNzQSAg4pSCIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUgiAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUgiAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgFwidG8gQlwi4pSA4pSA4pSA4pSCICBFZ3Jlc3NDICDilIIg4pWRICA8LS0gb29wc1xuICAgKiAgIOKVkSAgICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDilZFcbiAgICogICDilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ1cbiAgICovXG5cbiAgcHJvdGVjdGVkIGRldGVybWluZVJ1bGVTY29wZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGZyb21UbzogXCJmcm9tXCIgfCBcInRvXCIsXG4gICAgcmVtb3RlUnVsZT86IGJvb2xlYW4sXG4gICk6IFJ1bGVTY29wZSB7XG4gICAgaWYgKFxuICAgICAgcmVtb3RlUnVsZSAmJlxuICAgICAgU2VjdXJpdHlHcm91cEJhc2UuaXNTZWN1cml0eUdyb3VwKHBlZXIpICYmXG4gICAgICBkaWZmZXJlbnRTdGFja3ModGhpcywgcGVlcilcbiAgICApIHtcbiAgICAgIC8vIFJldmVyc2VkXG4gICAgICBjb25zdCByZXZlcnNlZEZyb21UbyA9IGZyb21UbyA9PT0gXCJmcm9tXCIgPyBcInRvXCIgOiBcImZyb21cIjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjb3BlOiBwZWVyLFxuICAgICAgICBpZDogYCR7dGhpcy51bmlxdWVJZH06JHtjb25uZWN0aW9ufSAke3JldmVyc2VkRnJvbVRvfWAsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWd1bGFyIChkbyBvbGQgSUQgZXNjYXBpbmcgaW4gb3JkZXIgdG8gbm90IGRpc3R1cmIgZXhpc3RpbmcgZGVwbG95bWVudHMpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgICAgaWQ6IGAke2Zyb21Ub30gJHt0aGlzLnJlbmRlclBlZXIocGVlcil9OiR7Y29ubmVjdGlvbn1gLnJlcGxhY2UoXG4gICAgICAgICAgXCIvXCIsXG4gICAgICAgICAgXCJfXCIsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUGVlcihwZWVyOiBJUGVlcikge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocGVlci51bmlxdWVJZCkpIHtcbiAgICAgIC8vIE5lZWQgdG8gcmV0dXJuIGEgdW5pcXVlIHZhbHVlIGVhY2ggdGltZSBhIHBlZXJcbiAgICAgIC8vIGlzIGFuIHVucmVzb2x2ZWQgdG9rZW4sIGVsc2UgdGhlIGR1cGxpY2F0ZSBza2lwcGVyXG4gICAgICAvLyBpbiBgc2cuYWRkWHh4UnVsZWAgY2FuIGRldGVjdCB1bmlxdWUgcnVsZXMgYXMgZHVwbGljYXRlc1xuICAgICAgcmV0dXJuIHRoaXMucGVlckFzVG9rZW5Db3VudCsrXG4gICAgICAgID8gYCd7SW5kaXJlY3RQZWVyJHt0aGlzLnBlZXJBc1Rva2VuQ291bnR9fSdgXG4gICAgICAgIDogXCJ7SW5kaXJlY3RQZWVyfVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGVlci51bmlxdWVJZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2NvcGUgYW5kIGlkIGluIHdoaWNoIGEgZ2l2ZW4gU2VjdXJpdHlHcm91cCBydWxlIHNob3VsZCBiZSBkZWZpbmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVTY29wZSB7XG4gIC8qKlxuICAgKiBUaGUgU2VjdXJpdHlHcm91cCBpbiB3aGljaCBhIHJ1bGUgc2hvdWxkIGJlIHNjb3BlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBJU2VjdXJpdHlHcm91cDtcbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3QgSUQgdG8gdXNlIGZvciB0aGUgcnVsZS5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGRpZmZlcmVudFN0YWNrcyhncm91cDE6IFNlY3VyaXR5R3JvdXBCYXNlLCBncm91cDI6IFNlY3VyaXR5R3JvdXBCYXNlKSB7XG4gIHJldHVybiBBd3NTdGFjay5vZihncm91cDEpICE9PSBBd3NTdGFjay5vZihncm91cDIpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWN1cml0eSBncm91cC4gRm9yIHZhbGlkIHZhbHVlcywgc2VlIHRoZSBHcm91cE5hbWVcbiAgICogcGFyYW1ldGVyIG9mIHRoZSBDcmVhdGVTZWN1cml0eUdyb3VwIGFjdGlvbiBpbiB0aGUgQW1hem9uIEVDMiBBUElcbiAgICogUmVmZXJlbmNlLlxuICAgKlxuICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIGFuIGV4cGxpY2l0IGdyb3VwIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgR3JvdXBOYW1lLCBBV1MgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIGFcbiAgICogdW5pcXVlIHBoeXNpY2FsIElEIGFuZCB1c2VzIHRoYXQgSUQgZm9yIHRoZSBncm91cCBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIHNlY3VyaXR5IGdyb3VwLlxuICAgKlxuICAgKiBGb3JjZXMgbmV3IHJlc291cmNlXG4gICAqXG4gICAqIFNlY3VyaXR5IGdyb3VwIGRlc2NyaXB0aW9uLiBEZWZhdWx0cyB0byBgTWFuYWdlZCBieSBUZXJyYWZvcm1gLiBDYW5ub3QgYmUgYFwiXCJgLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIGZpZWxkIG1hcHMgdG8gdGhlIEFXUyBgR3JvdXBEZXNjcmlwdGlvbmAgYXR0cmlidXRlLCBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gVXBkYXRlIEFQSS5cbiAgICogSWYgeW91J2QgbGlrZSB0byBjbGFzc2lmeSB5b3VyIHNlY3VyaXR5IGdyb3VwcyBpbiBhIHdheSB0aGF0IGNhbiBiZSB1cGRhdGVkLCB1c2UgdGFncy5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGRlZmF1bHQgbmFtZSB3aWxsIGJlIHRoZSBjb25zdHJ1Y3QncyBDREsgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgYWxsIG91dGJvdW5kIHRyYWZmaWMgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlcmUgd2lsbCBvbmx5IGJlIGEgc2luZ2xlIGVncmVzcyBydWxlIHdoaWNoIGFsbG93cyBhbGxcbiAgICogb3V0Ym91bmQgdHJhZmZpYy4gSWYgdGhpcyBpcyBzZXQgdG8gZmFsc2UsIG5vIG91dGJvdW5kIHRyYWZmaWMgd2lsbCBiZSBhbGxvd2VkIGJ5XG4gICAqIGRlZmF1bHQgYW5kIGFsbCBlZ3Jlc3MgdHJhZmZpYyBtdXN0IGJlIGV4cGxpY2l0bHkgYXV0aG9yaXplZC5cbiAgICpcbiAgICogVG8gYWxsb3cgYWxsIGlwdjYgdHJhZmZpYyB1c2UgYWxsb3dBbGxJcHY2T3V0Ym91bmRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBbGxPdXRib3VuZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgYWxsIG91dGJvdW5kIGlwdjYgdHJhZmZpYyBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGVyZSB3aWxsIG9ubHkgYmUgYSBzaW5nbGUgZWdyZXNzIHJ1bGUgd2hpY2ggYWxsb3dzIGFsbFxuICAgKiBvdXRib3VuZCBpcHY2IHRyYWZmaWMuIElmIHRoaXMgaXMgc2V0IHRvIGZhbHNlLCBubyBvdXRib3VuZCB0cmFmZmljIHdpbGwgYmUgYWxsb3dlZCBieVxuICAgKiBkZWZhdWx0IGFuZCBhbGwgZWdyZXNzIGlwdjYgdHJhZmZpYyBtdXN0IGJlIGV4cGxpY2l0bHkgYXV0aG9yaXplZC5cbiAgICpcbiAgICogVG8gYWxsb3cgYWxsIGlwdjQgdHJhZmZpYyB1c2UgYWxsb3dBbGxPdXRib3VuZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBbGxJcHY2T3V0Ym91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgaW5saW5lIGluZ3Jlc3MgYW5kIGVncmVzcyBydWxlIG9wdGltaXphdGlvbi5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzIHdpbGwgbm90IGJlIGRlY2xhcmVkIHVuZGVyIHRoZVxuICAgKiBTZWN1cml0eUdyb3VwIGluIGNsb3VkZm9ybWF0aW9uLCBidXQgd2lsbCBiZSBzZXBhcmF0ZSBlbGVtZW50cy5cbiAgICpcbiAgICogSW5saW5pbmcgcnVsZXMgaXMgYW4gb3B0aW1pemF0aW9uIGZvciBwcm9kdWNpbmcgc21hbGxlciBzdGFjayB0ZW1wbGF0ZXMuIFNvbWV0aW1lc1xuICAgKiB0aGlzIGlzIG5vdCBkZXNpcmFibGUsIGZvciBleGFtcGxlIHdoZW4gc2VjdXJpdHkgZ3JvdXAgYWNjZXNzIGlzIG1hbmFnZWQgdmlhIHRhZ3MuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGNhbiBiZSBvdmVycmlkZW4gZ2xvYmFsbHkgYnkgc2V0dGluZyB0aGUgY29udGV4dCB2YXJpYWJsZVxuICAgKiAnQGF3cy1jZGsvYXdzLWVjMi5zZWN1cml0eUdyb3VwRGlzYWJsZUlubGluZVJ1bGVzJy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVJbmxpbmVSdWxlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQWRkaXRpb25hbCBvcHRpb25zIGZvciBpbXBvcnRlZCBzZWN1cml0eSBncm91cHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUdyb3VwSW1wb3J0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXJrIHRoZSBTZWN1cml0eUdyb3VwIGFzIGhhdmluZyBiZWVuIGNyZWF0ZWQgYWxsb3dpbmcgYWxsIG91dGJvdW5kIHRyYWZmaWNcbiAgICpcbiAgICogT25seSBpZiB0aGlzIGlzIHNldCB0byBmYWxzZSB3aWxsIGVncmVzcyBydWxlcyBiZSBhZGRlZCB0byB0aGlzIHNlY3VyaXR5XG4gICAqIGdyb3VwLiBCZSBhd2FyZSwgdGhpcyB3b3VsZCB1bmRvIGFueSBwb3RlbnRpYWwgXCJhbGwgb3V0Ym91bmQgdHJhZmZpY1wiXG4gICAqIGRlZmF1bHQuXG4gICAqXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QWxsT3V0Ym91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBTZWN1cml0eUdyb3VwIGFzIGhhdmluZyBiZWVuIGNyZWF0ZWQgYWxsb3dpbmcgYWxsIG91dGJvdW5kIGlwdjYgdHJhZmZpY1xuICAgKlxuICAgKiBPbmx5IGlmIHRoaXMgaXMgc2V0IHRvIGZhbHNlIHdpbGwgZWdyZXNzIHJ1bGVzIGZvciBpcHY2IGJlIGFkZGVkIHRvIHRoaXMgc2VjdXJpdHlcbiAgICogZ3JvdXAuIEJlIGF3YXJlLCB0aGlzIHdvdWxkIHVuZG8gYW55IHBvdGVudGlhbCBcImFsbCBvdXRib3VuZCB0cmFmZmljXCJcbiAgICogZGVmYXVsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QWxsSXB2Nk91dGJvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYSBTZWN1cml0eUdyb3VwIGlzIG11dGFibGUgQ0RLIGNhbiBhZGQgcnVsZXMgdG8gZXhpc3RpbmcgZ3JvdXBzXG4gICAqXG4gICAqIEJld2FyZSB0aGF0IG1ha2luZyBhIFNlY3VyaXR5R3JvdXAgaW1tdXRhYmxlIG1pZ2h0IGxlYWQgdG8gaXNzdWVcbiAgICogZHVlIHRvIG1pc3NpbmcgaW5ncmVzcy9lZ3Jlc3MgcnVsZXMgZm9yIG5ldyByZXNvdXJjZXMuXG4gICAqXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG11dGFibGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gQW1hem9uIEVDMiBzZWN1cml0eSBncm91cCB3aXRoaW4gYSBWUEMuXG4gKlxuICogU2VjdXJpdHkgR3JvdXBzIGFjdCBsaWtlIGEgZmlyZXdhbGwgd2l0aCBhIHNldCBvZiBydWxlcywgYW5kIGFyZSBhc3NvY2lhdGVkXG4gKiB3aXRoIGFueSBBV1MgcmVzb3VyY2UgdGhhdCBoYXMgb3IgY3JlYXRlcyBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcyAoRU5JcykuXG4gKiBBIHR5cGljYWwgZXhhbXBsZSBvZiBhIHJlc291cmNlIHRoYXQgaGFzIGEgc2VjdXJpdHkgZ3JvdXAgaXMgYW4gSW5zdGFuY2UgKG9yXG4gKiBBdXRvIFNjYWxpbmcgR3JvdXAgb2YgaW5zdGFuY2VzKVxuICpcbiAqIElmIHlvdSBhcmUgZGVmaW5pbmcgbmV3IGluZnJhc3RydWN0dXJlIGluIENESywgdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB5b3VcbiAqIHdvbid0IGhhdmUgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGNsYXNzIGF0IGFsbC4gTGlrZSBJQU0gUm9sZXMsIFNlY3VyaXR5XG4gKiBHcm91cHMgbmVlZCB0byBleGlzdCB0byBjb250cm9sIGFjY2VzcyBiZXR3ZWVuIEFXUyByZXNvdXJjZXMsIGJ1dCBDREsgd2lsbFxuICogYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhbmQgcG9wdWxhdGUgdGhlbSB3aXRoIGxlYXN0LXByaXZpbGVnZSBwZXJtaXNzaW9uc1xuICogZm9yIHlvdSBzbyB5b3UgY2FuIGNvbmNlbnRyYXRlIG9uIHlvdXIgYnVzaW5lc3MgbG9naWMuXG4gKlxuICogQWxsIENvbnN0cnVjdHMgdGhhdCByZXF1aXJlIFNlY3VyaXR5IEdyb3VwcyB3aWxsIGNyZWF0ZSBvbmUgZm9yIHlvdSBpZiB5b3VcbiAqIGRvbid0IHNwZWNpZnkgb25lIGF0IGNvbnN0cnVjdGlvbi4gQWZ0ZXIgY29uc3RydWN0aW9uLCB5b3UgY2FuIHNlbGVjdGl2ZWx5XG4gKiBhbGxvdyBjb25uZWN0aW9ucyB0byBhbmQgYmV0d2VlbiBjb25zdHJ1Y3RzIHZpYS0tZm9yIGV4YW1wbGUtLSB0aGUgYGluc3RhbmNlLmNvbm5lY3Rpb25zYFxuICogb2JqZWN0LiBUaGluayBvZiBpdCBhcyBcImFsbG93aW5nIGNvbm5lY3Rpb25zIHRvIHlvdXIgaW5zdGFuY2VcIiwgcmF0aGVyIHRoYW5cbiAqIFwiYWRkaW5nIGluZ3Jlc3MgcnVsZXMgYSBzZWN1cml0eSBncm91cFwiLiBTZWUgdGhlIFtBbGxvd2luZ1xuICogQ29ubmVjdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL2xhdGVzdC9kb2NzL2F3cy1jZGstbGliLmF3c19lYzItcmVhZG1lLmh0bWwjYWxsb3dpbmctY29ubmVjdGlvbnMpXG4gKiBzZWN0aW9uIGluIHRoZSBsaWJyYXJ5IGRvY3VtZW50YXRpb24gZm9yIGV4YW1wbGVzLlxuICpcbiAqIERpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIFNlY3VyaXR5IEdyb3VwIHRocm91Z2ggYGFkZEluZ3Jlc3NSdWxlYCBhbmRcbiAqIGBhZGRFZ3Jlc3NSdWxlYCBpcyBwb3NzaWJsZSwgYnV0IG11dGF0aW9uIHRocm91Z2ggdGhlIGAuY29ubmVjdGlvbnNgIG9iamVjdFxuICogaXMgcmVjb21tZW5kZWQuIElmIHlvdSBwZWVyIHR3byBjb25zdHJ1Y3RzIHdpdGggc2VjdXJpdHkgZ3JvdXBzIHRoaXMgd2F5LFxuICogYXBwcm9wcmlhdGUgcnVsZXMgd2lsbCBiZSBjcmVhdGVkIGluIGJvdGguXG4gKlxuICogSWYgeW91IGhhdmUgYW4gZXhpc3Rpbmcgc2VjdXJpdHkgZ3JvdXAgeW91IHdhbnQgdG8gdXNlIGluIHlvdXIgQ0RLIGFwcGxpY2F0aW9uLFxuICogeW91IHdvdWxkIGltcG9ydCBpdCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHNlY3VyaXR5R3JvdXAgPSBjb21wdXRlLlNlY3VyaXR5R3JvdXAuZnJvbVNlY3VyaXR5R3JvdXBJZCh0aGlzLCAnU0cnLCAnc2ctMTIzNDUnLCB7XG4gKiAgIG11dGFibGU6IGZhbHNlXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cCBleHRlbmRzIFNlY3VyaXR5R3JvdXBCYXNlIHtcbiAgLyoqXG4gICAqIExvb2sgdXAgYSBzZWN1cml0eSBncm91cCBieSBpZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUxvb2t1cEJ5SWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHNlY3VyaXR5R3JvdXBJZDogc3RyaW5nLFxuICAgIGFsbG93QWxsT3V0Ym91bmQ/OiBib29sZWFuLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tTG9va3VwQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBJZCxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9vayB1cCBhIHNlY3VyaXR5IGdyb3VwIGJ5IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Mb29rdXBCeU5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBzdHJpbmcsXG4gICAgdnBjOiBJVnBjLFxuICAgIGFsbG93QWxsT3V0Ym91bmQ/OiBib29sZWFuLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tTG9va3VwQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lLFxuICAgICAgdnBjLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3Rpbmcgc2VjdXJpdHkgZ3JvdXAgaW50byB0aGlzIGFwcC5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBhc3N1bWUgdGhhdCB0aGUgU2VjdXJpdHkgR3JvdXAgaGFzIGEgcnVsZSBpbiBpdCB3aGljaCBhbGxvd3NcbiAgICogYWxsIG91dGJvdW5kIHRyYWZmaWMsIGFuZCBzbyB3aWxsIG5vdCBhZGQgZWdyZXNzIHJ1bGVzIHRvIHRoZSBpbXBvcnRlZCBTZWN1cml0eVxuICAgKiBHcm91cCAob25seSBpbmdyZXNzIHJ1bGVzKS5cbiAgICpcbiAgICogSWYgeW91ciBleGlzdGluZyBTZWN1cml0eSBHcm91cCBuZWVkcyB0byBoYXZlIGVncmVzcyBydWxlcyBhZGRlZCwgcGFzcyB0aGVcbiAgICogYGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlYCBvcHRpb24gb24gaW1wb3J0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU2VjdXJpdHlHcm91cElkKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzZWN1cml0eUdyb3VwSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBTZWN1cml0eUdyb3VwSW1wb3J0T3B0aW9ucyA9IHt9LFxuICApOiBJU2VjdXJpdHlHcm91cCB7XG4gICAgY2xhc3MgTXV0YWJsZUltcG9ydCBleHRlbmRzIFNlY3VyaXR5R3JvdXBCYXNlIHtcbiAgICAgIHB1YmxpYyBzZWN1cml0eUdyb3VwSWQgPSBzZWN1cml0eUdyb3VwSWQ7XG4gICAgICBwdWJsaWMgYWxsb3dBbGxPdXRib3VuZCA9IG9wdGlvbnMuYWxsb3dBbGxPdXRib3VuZCA/PyB0cnVlO1xuICAgICAgcHVibGljIGFsbG93QWxsSXB2Nk91dGJvdW5kID0gb3B0aW9ucy5hbGxvd0FsbElwdjZPdXRib3VuZCA/PyBmYWxzZTtcblxuICAgICAgcHVibGljIGFkZEVncmVzc1J1bGUoXG4gICAgICAgIHBlZXI6IElQZWVyLFxuICAgICAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICAgICAgcmVtb3RlUnVsZT86IGJvb2xlYW4sXG4gICAgICApIHtcbiAgICAgICAgLy8gT25seSBpZiBhbGxvd0FsbE91dGJvdW5kIGhhcyBiZWVuIGRpc2FibGVkXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93QWxsT3V0Ym91bmQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgc3VwZXIuYWRkRWdyZXNzUnVsZShwZWVyLCBjb25uZWN0aW9uLCBkZXNjcmlwdGlvbiwgcmVtb3RlUnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbW11dGFibGVJbXBvcnQgZXh0ZW5kcyBTZWN1cml0eUdyb3VwQmFzZSB7XG4gICAgICBwdWJsaWMgc2VjdXJpdHlHcm91cElkID0gc2VjdXJpdHlHcm91cElkO1xuICAgICAgcHVibGljIGFsbG93QWxsT3V0Ym91bmQgPSBvcHRpb25zLmFsbG93QWxsT3V0Ym91bmQgPz8gdHJ1ZTtcbiAgICAgIHB1YmxpYyBhbGxvd0FsbElwdjZPdXRib3VuZCA9IG9wdGlvbnMuYWxsb3dBbGxJcHY2T3V0Ym91bmQgPz8gZmFsc2U7XG5cbiAgICAgIHB1YmxpYyBhZGRFZ3Jlc3NSdWxlKFxuICAgICAgICBfcGVlcjogSVBlZXIsXG4gICAgICAgIF9jb25uZWN0aW9uOiBQb3J0LFxuICAgICAgICBfZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgICAgIF9yZW1vdGVSdWxlPzogYm9vbGVhbixcbiAgICAgICkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBhZGRJbmdyZXNzUnVsZShcbiAgICAgICAgX3BlZXI6IElQZWVyLFxuICAgICAgICBfY29ubmVjdGlvbjogUG9ydCxcbiAgICAgICAgX2Rlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgICAgICBfcmVtb3RlUnVsZT86IGJvb2xlYW4sXG4gICAgICApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLm11dGFibGUgIT09IGZhbHNlXG4gICAgICA/IG5ldyBNdXRhYmxlSW1wb3J0KHNjb3BlLCBpZClcbiAgICAgIDogbmV3IEltbXV0YWJsZUltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgdXAgYSBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZyb21Mb29rdXBBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBTZWN1cml0eUdyb3VwTG9va3VwT3B0aW9ucyxcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnMuc2VjdXJpdHlHcm91cElkKSB8fFxuICAgICAgVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnMuc2VjdXJpdHlHcm91cE5hbWUpXG4gICAgICAvLyBXZSBjYW4gaGF2ZSBhbiB1bnJlc29sdmVkIGlkIHdoZW4gdXNpbmcgYSBsb29rZWR1cCB2cGNcbiAgICAgIC8vIHx8IFRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zLnZwYz8udnBjSWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIkFsbCBhcmd1bWVudHMgdG8gbG9vayB1cCBhIHNlY3VyaXR5IGdyb3VwIG11c3QgYmUgY29uY3JldGUgKG5vIFRva2VucylcIixcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBHcmlkIGFzIGNvbnRleHRQcm92aWRlclxuICAgIC8vIFdhcm5pbmc6IHVzaW5nIGRhdGEgc291cmNlIHRvIGRldGVybWluZSBpZiB0aGUgc2VjdXJpdHkgZ3JvdXAgYWxsb3dzXG4gICAgLy8gYWxsIG91dGJvdW5kIHdpdGggYWxsb3dBbGxPdXRib3VuZExvY2FsKHNjb3BlLCBpZCwgZGF0YS5pZClcbiAgICAvLyB3b3VsZCBmb3JjZSBhbGwgZGVwZW5kaW5nIGNvZGUgdG8gZGVhbCB3aXRoIFRva2Vuc1xuICAgIGNvbnN0IGR1bW15VmFsdWUgPSB7XG4gICAgICBzZWN1cml0eUdyb3VwSWQ6IFwic2ctMTIzNDU2NzhcIixcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSBhcyBjeGFwaS5TZWN1cml0eUdyb3VwQ29udGV4dFJlc3BvbnNlO1xuICAgIGxldCBhdHRyaWJ1dGVzOiBjeGFwaS5TZWN1cml0eUdyb3VwQ29udGV4dFJlc3BvbnNlID1cbiAgICAgIENvbnRleHRQcm92aWRlci5nZXRWYWx1ZShzY29wZSwge1xuICAgICAgICBwcm92aWRlcjogY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLlNFQ1VSSVRZX0dST1VQX1BST1ZJREVSLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHNlY3VyaXR5R3JvdXBJZDogb3B0aW9ucy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgICAgc2VjdXJpdHlHcm91cE5hbWU6IG9wdGlvbnMuc2VjdXJpdHlHcm91cE5hbWUsXG4gICAgICAgICAgdnBjSWQ6IFRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zLnZwYz8udnBjSWQpXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBvcHRpb25zLnZwYz8udnBjSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGR1bW15VmFsdWUsXG4gICAgICB9KS52YWx1ZTtcblxuICAgIGlmIChhdHRyaWJ1dGVzID09PSBkdW1teVZhbHVlKSB7XG4gICAgICBjb25zdCBkYXRhID0gbmV3IGRhdGFBd3NTZWN1cml0eUdyb3VwLkRhdGFBd3NTZWN1cml0eUdyb3VwKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgXCJEYXRhXCIgKyBpZCxcbiAgICAgICAge1xuICAgICAgICAgIHZwY0lkOiBvcHRpb25zLnZwYz8udnBjSWQsXG4gICAgICAgICAgaWQ6IG9wdGlvbnMuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICAgIG5hbWU6IG9wdGlvbnMuc2VjdXJpdHlHcm91cE5hbWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgc2VjdXJpdHlHcm91cElkOiBkYXRhLmlkLFxuICAgICAgICBhbGxvd0FsbE91dGJvdW5kOiBvcHRpb25zLmFsbG93QWxsT3V0Ym91bmQgPz8gdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIFNlY3VyaXR5R3JvdXAuZnJvbVNlY3VyaXR5R3JvdXBJZChcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBhdHRyaWJ1dGVzLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgIHtcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogYXR0cmlidXRlcy5hbGxvd0FsbE91dGJvdW5kLFxuICAgICAgICBtdXRhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgc2VjdXJpdHkgZ3JvdXBcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIElEIHRoaXMgc2VjdXJpdHkgZ3JvdXAgaXMgcGFydCBvZi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBWcGNJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBTZWN1cml0eUdyb3VwIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWxsIG91dGJvdW5kIHRyYWZmaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhbGxvd0FsbE91dGJvdW5kOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBTZWN1cml0eUdyb3VwIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWxsIG91dGJvdW5kIGlwdjYgdHJhZmZpY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFsbG93QWxsSXB2Nk91dGJvdW5kOiBib29sZWFuO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpcmVjdEluZ3Jlc3NSdWxlczogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzc1tdID1cbiAgICBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3RFZ3Jlc3NSdWxlczogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwRWdyZXNzW10gPSBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIG9wdGltaXphdGlvbiBmb3IgaW5saW5lIHNlY3VyaXR5IGdyb3VwIHJ1bGVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlSW5saW5lUnVsZXM6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlY3VyaXR5R3JvdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9XG4gICAgICBwcm9wcy5zZWN1cml0eUdyb3VwTmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGdyb3VwRGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbiB8fCB0aGlzLm5vZGUucGF0aDtcblxuICAgIHRoaXMuYWxsb3dBbGxPdXRib3VuZCA9IHByb3BzLmFsbG93QWxsT3V0Ym91bmQgIT09IGZhbHNlO1xuICAgIHRoaXMuYWxsb3dBbGxJcHY2T3V0Ym91bmQgPSBwcm9wcy5hbGxvd0FsbElwdjZPdXRib3VuZCA/PyBmYWxzZTtcblxuICAgIHRoaXMuZGlzYWJsZUlubGluZVJ1bGVzID1cbiAgICAgIHByb3BzLmRpc2FibGVJbmxpbmVSdWxlcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gISFwcm9wcy5kaXNhYmxlSW5saW5lUnVsZXNcbiAgICAgICAgOiAhIXRoaXMubm9kZS50cnlHZXRDb250ZXh0KFxuICAgICAgICAgICAgU0VDVVJJVFlfR1JPVVBfRElTQUJMRV9JTkxJTkVfUlVMRVNfQ09OVEVYVF9LRVksXG4gICAgICAgICAgKTtcblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBzZWN1cml0eUdyb3VwLlNlY3VyaXR5R3JvdXAodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiBncm91cE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZ3JvdXBEZXNjcmlwdGlvbixcbiAgICAgIGluZ3Jlc3M6IExhenkuYW55VmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMubWFwKFxuICAgICAgICAgICAgICBzZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBJbmdyZXNzVG9UZXJyYWZvcm0sXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICApLFxuICAgICAgZWdyZXNzOiBMYXp5LmFueVZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMubWFwKFxuICAgICAgICAgICAgICBzZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBFZ3Jlc3NUb1RlcnJhZm9ybSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHsgb21pdEVtcHR5QXJyYXk6IHRydWUgfSxcbiAgICAgICksXG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwSWQgPSB0aGlzLnNlY3VyaXR5R3JvdXAuaWQ7XG4gICAgdGhpcy5zZWN1cml0eUdyb3VwVnBjSWQgPSB0aGlzLnNlY3VyaXR5R3JvdXAudnBjSWQ7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRFZ3Jlc3NSdWxlKCk7XG4gICAgdGhpcy5hZGREZWZhdWx0SXB2NkVncmVzc1J1bGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRJbmdyZXNzUnVsZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlbW90ZVJ1bGU/OiBib29sZWFuLFxuICApIHtcbiAgICBpZiAoXG4gICAgICAhcGVlci5jYW5JbmxpbmVSdWxlIHx8XG4gICAgICAhY29ubmVjdGlvbi5jYW5JbmxpbmVSdWxlIHx8XG4gICAgICB0aGlzLmRpc2FibGVJbmxpbmVSdWxlc1xuICAgICkge1xuICAgICAgc3VwZXIuYWRkSW5ncmVzc1J1bGUocGVlciwgY29ubmVjdGlvbiwgZGVzY3JpcHRpb24sIHJlbW90ZVJ1bGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXNjcmlwdGlvbiA9IGBmcm9tICR7cGVlci51bmlxdWVJZH06JHtjb25uZWN0aW9ufWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREaXJlY3RJbmdyZXNzUnVsZSh7XG4gICAgICAuLi5wZWVyLnRvSW5ncmVzc1J1bGVDb25maWcoKSxcbiAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSnNvbigpLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRWdyZXNzUnVsZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlbW90ZVJ1bGU/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCBpc0lwdjYgPSBwZWVyLnRvRWdyZXNzUnVsZUNvbmZpZygpLmhhc093blByb3BlcnR5KFwiY2lkcklwdjZcIik7XG5cbiAgICBpZiAoIWlzSXB2NiAmJiB0aGlzLmFsbG93QWxsT3V0Ym91bmQpIHtcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIFwiYWxsb3dBbGxPdXRib3VuZFwiLCB3ZSBkb24ndCBhZGQgYW55IG1vcmUgcnVsZXMuIFRoZXJlXG4gICAgICAvLyBpcyBvbmx5IG9uZSBydWxlIHdoaWNoIGFsbG93cyBhbGwgdHJhZmZpYyBhbmQgdGhhdCBzdWJzdW1lcyBhbnkgb3RoZXJcbiAgICAgIC8vIHJ1bGUuXG4gICAgICBpZiAoIXJlbW90ZVJ1bGUpIHtcbiAgICAgICAgLy8gV2FybiBvbmx5IGlmIGFkZEVncmVzc1J1bGUoKSB3YXMgZXhwbGljaXRlbHkgY2FsbGVkXG4gICAgICAgIC8vIFwiQGF3cy1jZGsvYXdzLWVjMjppcHY0SWdub3JlRWdyZXNzUnVsZVwiLFxuICAgICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICAgIFwiSWdub3JpbmcgRWdyZXNzIHJ1bGUgc2luY2UgJ2FsbG93QWxsT3V0Ym91bmQnIGlzIHNldCB0byB0cnVlOyBUbyBhZGQgY3VzdG9taXplZCBydWxlcywgc2V0IGFsbG93QWxsT3V0Ym91bmQ9ZmFsc2Ugb24gdGhlIFNlY3VyaXR5R3JvdXBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNJcHY2ICYmIHRoaXMuYWxsb3dBbGxJcHY2T3V0Ym91bmQpIHtcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIFwiYWxsb3dBbGxJcHY2T3V0Ym91bmRcIiwgd2UgZG9uJ3QgYWRkIGFueSBtb3JlIHJ1bGVzLiBUaGVyZVxuICAgICAgLy8gaXMgb25seSBvbmUgcnVsZSB3aGljaCBhbGxvd3MgYWxsIHRyYWZmaWMgYW5kIHRoYXQgc3Vic3VtZXMgYW55IG90aGVyXG4gICAgICAvLyBydWxlLlxuICAgICAgaWYgKCFyZW1vdGVSdWxlKSB7XG4gICAgICAgIC8vIFdhcm4gb25seSBpZiBhZGRFZ3Jlc3NSdWxlKCkgd2FzIGV4cGxpY2l0ZWx5IGNhbGxlZFxuICAgICAgICAvLyBcIkBhd3MtY2RrL2F3cy1lYzI6aXB2Nklnbm9yZUVncmVzc1J1bGVcIixcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgICBcIklnbm9yaW5nIEVncmVzcyBydWxlIHNpbmNlICdhbGxvd0FsbElwdjZPdXRib3VuZCcgaXMgc2V0IHRvIHRydWU7IFRvIGFkZCBjdXN0b21pemVkIHJ1bGVzLCBzZXQgYWxsb3dBbGxJcHY2T3V0Ym91bmQ9ZmFsc2Ugb24gdGhlIFNlY3VyaXR5R3JvdXBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhcGVlci5jYW5JbmxpbmVSdWxlIHx8XG4gICAgICAhY29ubmVjdGlvbi5jYW5JbmxpbmVSdWxlIHx8XG4gICAgICB0aGlzLmRpc2FibGVJbmxpbmVSdWxlc1xuICAgICkge1xuICAgICAgc3VwZXIuYWRkRWdyZXNzUnVsZShwZWVyLCBjb25uZWN0aW9uLCBkZXNjcmlwdGlvbiwgcmVtb3RlUnVsZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc2NyaXB0aW9uID0gYGZyb20gJHtwZWVyLnVuaXF1ZUlkfToke2Nvbm5lY3Rpb259YDtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgLi4ucGVlci50b0VncmVzc1J1bGVDb25maWcoKSxcbiAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSnNvbigpLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgfTtcblxuICAgIGlmIChpc0FsbFRyYWZmaWNSdWxlKHJ1bGUpKSB7XG4gICAgICAvLyBXZSBjYW5ub3QgYWxsb3cgdGhpczsgaWYgc29tZW9uZSBhZGRzIHRoZSBydWxlIGluIHRoaXMgd2F5LCBpdCB3aWxsIGJlXG4gICAgICAvLyByZW1vdmVkIGFnYWluIGlmIHRoZXkgYWRkIG90aGVyIHJ1bGVzLiBXZSBhbHNvIGNhbid0IGF1dG9tYXRpY2FsbHkgc3dpdGNoXG4gICAgICAvLyB0byBcImFsbE91dGJvdW5kPXRydWVcIiBtb2RlLCBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBlbWl0dGVkXG4gICAgICAvLyBFZ3Jlc3NSdWxlIG9iamVjdHMgKHdoaWNoIGNvdW50IGFzIHJ1bGVzIGFkZGVkIGxhdGVyKSBhbmQgdGhlcmUncyBubyB3YXlcbiAgICAgIC8vIHRvIHJlY2FsbCB0aG9zZS4gQmV0dGVyIHRvIHByZXZlbnQgdGhpcyBmb3Igbm93LlxuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBhZGQgYW4gXCJhbGwgdHJhZmZpY1wiIGVncmVzcyBydWxlIGluIHRoaXMgd2F5OyBzZXQgYWxsb3dBbGxPdXRib3VuZD10cnVlIChmb3IgaXB2Nikgb3IgYWxsb3dBbGxJcHY2T3V0Ym91bmQ9dHJ1ZSAoZm9yIGlwdjYpIG9uIHRoZSBTZWN1cml0eUdyb3VwIGluc3RlYWQuJyxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREaXJlY3RFZ3Jlc3NSdWxlKHJ1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRpcmVjdCBpbmdyZXNzIHJ1bGVcbiAgICovXG4gIHByaXZhdGUgYWRkRGlyZWN0SW5ncmVzc1J1bGUocnVsZTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzcykge1xuICAgIGNvbnN0IHIgPSBub3JtYWxpemVEaXJlY3RSdWxlKHJ1bGUpO1xuICAgIGlmICghdGhpcy5oYXNJbmdyZXNzUnVsZShyKSkge1xuICAgICAgdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMucHVzaChyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGluZ3Jlc3MgcnVsZSBleGlzdHMgb24gdGhlIGdyb3VwXG4gICAqL1xuICBwcml2YXRlIGhhc0luZ3Jlc3NSdWxlKHJ1bGU6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEluZ3Jlc3MpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMuZmluZEluZGV4KChyKSA9PiBpbmdyZXNzUnVsZXNFcXVhbChyLCBydWxlKSkgPiAtMVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGlyZWN0IGVncmVzcyBydWxlXG4gICAqL1xuICBwcml2YXRlIGFkZERpcmVjdEVncmVzc1J1bGUocnVsZTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwRWdyZXNzKSB7XG4gICAgY29uc3QgciA9IG5vcm1hbGl6ZURpcmVjdFJ1bGUocnVsZSk7XG4gICAgaWYgKCF0aGlzLmhhc0VncmVzc1J1bGUocikpIHtcbiAgICAgIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMucHVzaChyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGVncmVzcyBydWxlIGV4aXN0cyBvbiB0aGUgZ3JvdXBcbiAgICovXG4gIHByaXZhdGUgaGFzRWdyZXNzUnVsZShydWxlOiBzZWN1cml0eUdyb3VwLlNlY3VyaXR5R3JvdXBFZ3Jlc3MpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kaXJlY3RFZ3Jlc3NSdWxlcy5maW5kSW5kZXgoKHIpID0+IGVncmVzc1J1bGVzRXF1YWwociwgcnVsZSkpID4gLTFcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZGVmYXVsdCBlZ3Jlc3MgcnVsZSB0byB0aGUgc2VjdXJpdHlHcm91cFxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBBV1MgY3JlYXRlcyBhbiBgQUxMT1cgQUxMYCBlZ3Jlc3MgcnVsZSB3aGVuIGNyZWF0aW5nIGEgbmV3IFNlY3VyaXR5IEdyb3VwIGluc2lkZSBvZiBhIFZQQy5cbiAgICogV2hlbiBjcmVhdGluZyBhIG5ldyBTZWN1cml0eSBHcm91cCBpbnNpZGUgYSBWUEMsIFRlcnJhZm9ybSB3aWxsIHJlbW92ZSB0aGlzIGRlZmF1bHQgcnVsZSwgYW5kIHJlcXVpcmVcbiAgICogeW91IHNwZWNpZmljYWxseSByZS1jcmVhdGUgaXQgaWYgeW91IGRlc2lyZSB0aGF0IHJ1bGUuXG4gICAqXG4gICAqIFRoaXMgZGVwZW5kcyBvbiBhbGxvd0FsbE91dGJvdW5kXG4gICAqXG4gICAqIC0gSWYgYWxsb3dBbGxPdXRib3VuZCBpcyB0cnVlLCB3ZSB3aWxsIGFkZCBhbiBhbGxvdyBhbGwgcnVsZS5cbiAgICogLSBJZiBhbGxvd0FsbE91dGJvdW5kIGlzIGZhbHNlLCB3ZSBkb24ndCBkbyBhbnl0aGluZyBzaW5jZSBURiBkb2VzIG5vdCBhZGRcbiAgICogICBhIGRlZmF1bHQgYWxsb3cgYWxsIGlwdjQgcnVsZS5cbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEVncmVzc1J1bGUoKSB7XG4gICAgaWYgKCF0aGlzLmFsbG93QWxsT3V0Ym91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUlubGluZVJ1bGVzKSB7XG4gICAgICBzdXBlci5hZGRFZ3Jlc3NSdWxlKFxuICAgICAgICBBTExfVFJBRkZJQ19QRUVSLFxuICAgICAgICBBTExfVFJBRkZJQ19QT1JULFxuICAgICAgICBBTExPV19BTExfUlVMRS5kZXNjcmlwdGlvbixcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpcmVjdEVncmVzc1J1bGVzLnB1c2goQUxMT1dfQUxMX1JVTEUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBhbGxvdyBhbGwgaXB2NiBlZ3Jlc3MgcnVsZSB0byB0aGUgc2VjdXJpdHlHcm91cFxuICAgKlxuICAgKiBUaGlzIGRlcGVuZHMgb24gYWxsb3dBbGxJcHY2T3V0Ym91bmQ6XG4gICAqXG4gICAqIC0gSWYgYWxsb3dBbGxJcHY2T3V0Ym91bmQgaXMgdHJ1ZSwgd2Ugd2lsbCBhZGQgYW4gYWxsb3cgYWxsIHJ1bGUuXG4gICAqIC0gSWYgYWxsb3dBbGxPdXRib3VuZCBpcyBmYWxzZSwgd2UgZG9uJ3QgZG8gYW55dGhpbmcgc2luY2UgRUMyIGRvZXMgbm90IGFkZFxuICAgKiAgIGEgZGVmYXVsdCBhbGxvdyBhbGwgaXB2NiBydWxlLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGREZWZhdWx0SXB2NkVncmVzc1J1bGUoKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBcIkFsbG93IGFsbCBvdXRib3VuZCBpcHY2IHRyYWZmaWMgYnkgZGVmYXVsdFwiO1xuICAgIGNvbnN0IHBlZXIgPSBQZWVyLmFueUlwdjYoKTtcbiAgICBpZiAodGhpcy5hbGxvd0FsbElwdjZPdXRib3VuZCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZUlubGluZVJ1bGVzKSB7XG4gICAgICAgIHN1cGVyLmFkZEVncmVzc1J1bGUocGVlciwgUG9ydC5hbGxUcmFmZmljKCksIGRlc2NyaXB0aW9uLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpcmVjdEVncmVzc1J1bGVzLnB1c2goe1xuICAgICAgICAgIHByb3RvY29sOiBcIi0xXCIsXG4gICAgICAgICAgZnJvbVBvcnQ6IDAsXG4gICAgICAgICAgdG9Qb3J0OiAwLFxuICAgICAgICAgIGlwdjZDaWRyQmxvY2tzOiBbcGVlci51bmlxdWVJZF0sXG4gICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpeCB1cCBhIGRpcmVjdCBydWxlIHRvIGhhdmUgZnJvbVBvcnQvdG9Qb3J0IGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0UnVsZShcbiAgcnVsZTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwRWdyZXNzIHwgc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzcyxcbik6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEVncmVzcyB8IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEluZ3Jlc3Mge1xuICAvLyBVbmxpa2Ugc2VjdXJpdHlfZ3JvdXBfKGlufGUpZ3Jlc3NfcnVsZSwgVEYgU2VjdXJpdHkgR3JvdXAgZGlyZWN0IHJ1bGVzXG4gIC8vIGNhbid0IGhhdmUgZnJvbVBvcnQvdG9Qb3J0IHVuZGVmaW5lZC5cbiAgLy8gcmVmczpcbiAgLy8gLSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81Ljg4LjAvZG9jcy9yZXNvdXJjZXMvdnBjX3NlY3VyaXR5X2dyb3VwX2VncmVzc19ydWxlI2lwX3Byb3RvY29sLTFcbiAgLy8gICB2c1xuICAvLyAtIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuODguMC9kb2NzL3Jlc291cmNlcy9zZWN1cml0eV9ncm91cCNwcm90b2NvbC0xXG4gIHJldHVybiB7XG4gICAgLi4ucnVsZSxcbiAgICBmcm9tUG9ydDogcnVsZS5mcm9tUG9ydCA/PyAwLFxuICAgIHRvUG9ydDogcnVsZS50b1BvcnQgPz8gMCxcbiAgfTtcbn1cblxuLyoqXG4gKiBFZ3Jlc3MgcnVsZSB0aGF0IG1hdGNoZXMgYWxsIHRyYWZmaWNcbiAqL1xuY29uc3QgQUxMT1dfQUxMX1JVTEU6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEVncmVzcyA9IHtcbiAgY2lkckJsb2NrczogW1wiMC4wLjAuMC8wXCJdLFxuICBkZXNjcmlwdGlvbjogXCJBbGxvdyBhbGwgb3V0Ym91bmQgdHJhZmZpYyBieSBkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBJZiB5b3Ugc2VsZWN0IGEgcHJvdG9jb2wgb2YgLTEgKHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIGFsbCwgd2hpY2ggaXMgbm90IGEgdmFsaWQgdmFsdWUgaGVyZSksXG4gICAqIHlvdSBtdXN0IHNwZWNpZnkgYSBmcm9tX3BvcnQgYW5kIHRvX3BvcnQgZXF1YWwgdG8gMC5cbiAgICovXG4gIHByb3RvY29sOiBcIi0xXCIsXG4gIGZyb21Qb3J0OiAwLFxuICB0b1BvcnQ6IDAsXG59O1xuXG5jb25zdCBBTExfVFJBRkZJQ19QRUVSID0gUGVlci5hbnlJcHY0KCk7XG5jb25zdCBBTExfVFJBRkZJQ19QT1JUID0gUG9ydC5hbGxUcmFmZmljKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblJ1bGUge1xuICAvKipcbiAgICogVGhlIElQIHByb3RvY29sIG5hbWUgKHRjcCwgdWRwLCBpY21wKSBvciBudW1iZXIgKHNlZSBQcm90b2NvbCBOdW1iZXJzKS5cbiAgICogVXNlIC0xIHRvIHNwZWNpZnkgYWxsIHByb3RvY29scy4gSWYgeW91IHNwZWNpZnkgLTEsIG9yIGEgcHJvdG9jb2wgbnVtYmVyXG4gICAqIG90aGVyIHRoYW4gdGNwLCB1ZHAsIGljbXAsIG9yIDU4IChJQ01QdjYpLCB0cmFmZmljIG9uIGFsbCBwb3J0cyBpc1xuICAgKiBhbGxvd2VkLCByZWdhcmRsZXNzIG9mIGFueSBwb3J0cyB5b3Ugc3BlY2lmeS4gRm9yIHRjcCwgdWRwLCBhbmQgaWNtcCwgeW91XG4gICAqIG11c3Qgc3BlY2lmeSBhIHBvcnQgcmFuZ2UuIEZvciBwcm90b2NvbCA1OCAoSUNNUHY2KSwgeW91IGNhbiBvcHRpb25hbGx5XG4gICAqIHNwZWNpZnkgYSBwb3J0IHJhbmdlOyBpZiB5b3UgZG9uJ3QsIHRyYWZmaWMgZm9yIGFsbCB0eXBlcyBhbmQgY29kZXMgaXNcbiAgICogYWxsb3dlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdGNwXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IHN0cmluZztcblxuICAvKipcbiAgICogU3RhcnQgb2YgcG9ydCByYW5nZSBmb3IgdGhlIFRDUCBhbmQgVURQIHByb3RvY29scywgb3IgYW4gSUNNUCB0eXBlIG51bWJlci5cbiAgICpcbiAgICogSWYgeW91IHNwZWNpZnkgaWNtcCBmb3IgdGhlIElwUHJvdG9jb2wgcHJvcGVydHksIHlvdSBjYW4gc3BlY2lmeVxuICAgKiAtMSBhcyBhIHdpbGRjYXJkIChpLmUuLCBhbnkgSUNNUCB0eXBlIG51bWJlcikuXG4gICAqL1xuICByZWFkb25seSBmcm9tUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmQgb2YgcG9ydCByYW5nZSBmb3IgdGhlIFRDUCBhbmQgVURQIHByb3RvY29scywgb3IgYW4gSUNNUCBjb2RlLlxuICAgKlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBpY21wIGZvciB0aGUgSXBQcm90b2NvbCBwcm9wZXJ0eSwgeW91IGNhbiBzcGVjaWZ5IC0xIGFzIGFcbiAgICogd2lsZGNhcmQgKGkuZS4sIGFueSBJQ01QIGNvZGUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBJZiB0b1BvcnQgaXMgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBmcm9tUG9ydC5cbiAgICovXG4gIHJlYWRvbmx5IHRvUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhpcyBjb25uZWN0aW9uLiBJdCBpcyBhcHBsaWVkIHRvIGJvdGggdGhlIGluZ3Jlc3MgcnVsZVxuICAgKiBhbmQgdGhlIGVncmVzcyBydWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gaW5ncmVzcyBydWxlcyBmb3IgZXF1YWxpdHkgdGhlIHNhbWUgd2F5IENsb3VkRm9ybWF0aW9uIHdvdWxkIChkaXNjYXJkaW5nIGRlc2NyaXB0aW9uKVxuICovXG5mdW5jdGlvbiBpbmdyZXNzUnVsZXNFcXVhbChcbiAgYTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzcyxcbiAgYjogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzcyxcbikge1xuICByZXR1cm4gKFxuICAgIGEuY2lkckJsb2NrcyA9PT0gYi5jaWRyQmxvY2tzICYmXG4gICAgYS5pcHY2Q2lkckJsb2NrcyA9PT0gYi5pcHY2Q2lkckJsb2NrcyAmJlxuICAgIGEuZnJvbVBvcnQgPT09IGIuZnJvbVBvcnQgJiZcbiAgICBhLnRvUG9ydCA9PT0gYi50b1BvcnQgJiZcbiAgICBhLnByb3RvY29sID09PSBiLnByb3RvY29sICYmXG4gICAgYS5wcmVmaXhMaXN0SWRzID09PSBiLnByZWZpeExpc3RJZHMgJiZcbiAgICBhLnNlY3VyaXR5R3JvdXBzID09PSBiLnNlY3VyaXR5R3JvdXBzXG4gICk7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gZWdyZXNzIHJ1bGVzIGZvciBlcXVhbGl0eSB0aGUgc2FtZSB3YXkgQ2xvdWRGb3JtYXRpb24gd291bGQgKGRpc2NhcmRpbmcgZGVzY3JpcHRpb24pXG4gKi9cbmZ1bmN0aW9uIGVncmVzc1J1bGVzRXF1YWwoXG4gIGE6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEVncmVzcyxcbiAgYjogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwRWdyZXNzLFxuKSB7XG4gIHJldHVybiAoXG4gICAgYS5jaWRyQmxvY2tzID09PSBiLmNpZHJCbG9ja3MgJiZcbiAgICBhLmlwdjZDaWRyQmxvY2tzID09PSBiLmlwdjZDaWRyQmxvY2tzICYmXG4gICAgYS5mcm9tUG9ydCA9PT0gYi5mcm9tUG9ydCAmJlxuICAgIGEudG9Qb3J0ID09PSBiLnRvUG9ydCAmJlxuICAgIGEucHJvdG9jb2wgPT09IGIucHJvdG9jb2wgJiZcbiAgICBhLnByZWZpeExpc3RJZHMgPT09IGIucHJlZml4TGlzdElkcyAmJlxuICAgIGEuc2VjdXJpdHlHcm91cHMgPT09IGIuc2VjdXJpdHlHcm91cHNcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoaXMgcnVsZSByZWZlcnMgdG8gYWxsIHRyYWZmaWNcbiAqL1xuZnVuY3Rpb24gaXNBbGxUcmFmZmljUnVsZShydWxlOiBhbnkpIHtcbiAgcmV0dXJuIChcbiAgICAocnVsZS5jaWRySXB2NCA9PT0gXCIwLjAuMC4wLzBcIiB8fFxuICAgICAgKHJ1bGUuY2lkckJsb2NrcyAmJiBydWxlLmNpZHJCbG9ja3NbMF0gPT09IFwiMC4wLjAuMC8wXCIpIHx8XG4gICAgICBydWxlLmNpZHJJcHY2ID09PSBcIjo6LzBcIikgJiZcbiAgICBydWxlLmlwUHJvdG9jb2wgPT09IFwiLTFcIlxuICApO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGxvb2tpbmcgdXAgYW4gZXhpc3RpbmcgU2VjdXJpdHlHcm91cC5cbiAqXG4gKiBFaXRoZXIgYHNlY3VyaXR5R3JvdXBOYW1lYCBvciBgc2VjdXJpdHlHcm91cElkYCBoYXMgdG8gYmUgc3BlY2lmaWVkLlxuICovXG5pbnRlcmZhY2UgU2VjdXJpdHlHcm91cExvb2t1cE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlY3VyaXR5IGdyb3VwXG4gICAqXG4gICAqIElmIGdpdmVuLCB3aWxsIGltcG9ydCB0aGUgU2VjdXJpdHlHcm91cCB3aXRoIHRoaXMgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgRG9uJ3QgZmlsdGVyIG9uIHNlY3VyaXR5R3JvdXBOYW1lXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBzZWN1cml0eSBncm91cFxuICAgKlxuICAgKiBJZiBnaXZlbiwgd2lsbCBpbXBvcnQgdGhlIFNlY3VyaXR5R3JvdXAgd2l0aCB0aGlzIElELlxuICAgKlxuICAgKiBAZGVmYXVsdCBEb24ndCBmaWx0ZXIgb24gc2VjdXJpdHlHcm91cElkXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgb2YgdGhlIHNlY3VyaXR5IGdyb3VwXG4gICAqXG4gICAqIElmIGdpdmVuLCB3aWxsIGZpbHRlciB0aGUgU2VjdXJpdHlHcm91cCBiYXNlZCBvbiB0aGUgVlBDLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEb24ndCBmaWx0ZXIgb24gVlBDXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjO1xuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBTZWN1cml0eUdyb3VwIGFzIGFsbG93aW5nIGFsbCBvdXRib3VuZCB0cmFmZmljXG4gICAqXG4gICAqIE9ubHkgaWYgdGhpcyBpcyBzZXQgdG8gZmFsc2Ugd2lsbCBlZ3Jlc3MgcnVsZXMgYmUgYWRkZWQgdG8gdGhpcyBzZWN1cml0eVxuICAgKiBncm91cC4gQmUgYXdhcmUsIHRoaXMgd291bGQgdW5kbyBhbnkgcG90ZW50aWFsIFwiYWxsIG91dGJvdW5kIHRyYWZmaWNcIlxuICAgKiBkZWZhdWx0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhbGxvd0FsbE91dGJvdW5kPzogYm9vbGVhbjsgLy8gVE9ETzogVXNlIEdyaWQgYXMgY29udGV4dFByb3ZpZGVyXG59XG4iXX0=
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvc2VjdXJpdHktZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrR0FBa0c7QUFFbEcsMkRBQTJEO0FBQzNELHNEQUs2QjtBQUM3QixpQ0FBaUQ7QUFFakQsK0NBQTRDO0FBQzVDLGlDQUFxQztBQUNyQyxpQ0FBOEI7QUFFOUIseUNBQStDO0FBQy9DLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFDeEMsMERBQXNEO0FBRXRELGtFQUFrRTtBQUVsRSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQ3RDLCtDQUErQyxDQUNoRCxDQUFDO0FBRUYsTUFBTSwrQ0FBK0MsR0FDbkQsNkRBQTZELENBQUM7QUFnRWhFOztHQUVHO0FBQ0gsTUFBZSxpQkFDYixTQUFRLGdDQUFnQjtJQUd4Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBTTtRQUNsQyxPQUFPLHFCQUFxQixJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBR0QsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTztZQUNMLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBWUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF5QjtRQUNqRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQVRWLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGdCQUFXLEdBQWdCLElBQUkseUJBQVcsQ0FBQztZQUN6RCxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBR0sscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBS25DLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLG9CQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sY0FBYyxDQUNuQixJQUFXLEVBQ1gsVUFBZ0IsRUFDaEIsV0FBb0IsRUFDcEIsVUFBb0I7UUFFcEIsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsV0FBVyxHQUFHLFFBQVEsSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN0RCxDQUFDO1FBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQzNDLElBQUksRUFDSixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsQ0FDWCxDQUFDO1FBRUYsa0JBQWtCO1FBQ2xCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUMsSUFBSSwwQ0FBMkIsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNyRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3JDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM3QixHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLFdBQVc7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVNLGFBQWEsQ0FDbEIsSUFBVyxFQUNYLFVBQWdCLEVBQ2hCLFdBQW9CLEVBQ3BCLFVBQW9CO1FBRXBCLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlCLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDcEQsQ0FBQztRQUVELE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUMzQyxJQUFJLEVBQ0osVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLENBQ1gsQ0FBQztRQUVGLGtCQUFrQjtRQUNsQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzlDLElBQUkseUNBQTBCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDbkUsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNyQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDNUIsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFO2dCQUMxQixXQUFXO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsK0VBQStFO0lBQ3ZFLFlBQVk7UUFDbEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BK0NHO0lBRU8sa0JBQWtCLENBQzFCLElBQVcsRUFDWCxVQUFnQixFQUNoQixNQUFxQixFQUNyQixVQUFvQjtRQUVwQixJQUNFLFVBQVU7WUFDVixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQzNCLENBQUM7WUFDRCxXQUFXO1lBQ1gsTUFBTSxjQUFjLEdBQUcsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDekQsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsSUFBSSxjQUFjLEVBQUU7YUFDdkQsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sNEVBQTRFO1lBQzVFLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsRUFBRSxFQUFFLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsT0FBTyxDQUM1RCxHQUFHLEVBQ0gsR0FBRyxDQUNKO2FBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVc7UUFDNUIsSUFBSSxhQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3RDLGlEQUFpRDtZQUNqRCxxREFBcUQ7WUFDckQsMkRBQTJEO1lBQzNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUM1QixDQUFDLENBQUMsaUJBQWlCLElBQUksQ0FBQyxnQkFBZ0IsSUFBSTtnQkFDNUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFnQkQsU0FBUyxlQUFlLENBQUMsTUFBeUIsRUFBRSxNQUF5QjtJQUMzRSxPQUFPLG9CQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLG9CQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFvSEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBQ0gsTUFBYSxhQUFjLFNBQVEsaUJBQWlCO0lBQ2xEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FDMUIsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLGVBQXVCLEVBQ3ZCLGdCQUEwQjtRQUUxQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzFDLGVBQWU7WUFDZixnQkFBZ0I7U0FDakIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUM1QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsaUJBQXlCLEVBQ3pCLEdBQVMsRUFDVCxnQkFBMEI7UUFFMUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUMxQyxpQkFBaUI7WUFDakIsR0FBRztZQUNILGdCQUFnQjtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUMvQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsZUFBdUIsRUFDdkIsVUFBc0MsRUFBRTtRQUV4QyxNQUFNLGFBQWMsU0FBUSxpQkFBaUI7WUFBN0M7O2dCQUNTLG9CQUFlLEdBQUcsZUFBZSxDQUFDO2dCQUNsQyxxQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDO2dCQUNwRCx5QkFBb0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLElBQUksS0FBSyxDQUFDO1lBYXRFLENBQUM7WUFYUSxhQUFhLENBQ2xCLElBQVcsRUFDWCxVQUFnQixFQUNoQixXQUFvQixFQUNwQixVQUFvQjtnQkFFcEIsNkNBQTZDO2dCQUM3QyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDdkMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7U0FDRjtRQUVELE1BQU0sZUFBZ0IsU0FBUSxpQkFBaUI7WUFBL0M7O2dCQUNTLG9CQUFlLEdBQUcsZUFBZSxDQUFDO2dCQUNsQyxxQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDO2dCQUNwRCx5QkFBb0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLElBQUksS0FBSyxDQUFDO1lBbUJ0RSxDQUFDO1lBakJRLGFBQWEsQ0FDbEIsS0FBWSxFQUNaLFdBQWlCLEVBQ2pCLFlBQXFCLEVBQ3JCLFdBQXFCO2dCQUVyQixhQUFhO1lBQ2YsQ0FBQztZQUVNLGNBQWMsQ0FDbkIsS0FBWSxFQUNaLFdBQWlCLEVBQ2pCLFlBQXFCLEVBQ3JCLFdBQXFCO2dCQUVyQixhQUFhO1lBQ2YsQ0FBQztTQUNGO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUs7WUFDOUIsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDOUIsQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsb0JBQW9CLENBQ2pDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixPQUFtQztRQUVuQyxJQUNFLGFBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUMzQyxhQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUM3Qyx5REFBeUQ7UUFDekQsNENBQTRDO1VBQzVDLENBQUM7WUFDRCxNQUFNLElBQUksd0JBQWUsQ0FDdkIsd0VBQXdFLEVBQ3hFLEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQztRQUVELG9DQUFvQztRQUNwQyx1RUFBdUU7UUFDdkUsOERBQThEO1FBQzlELHFEQUFxRDtRQUNyRCxNQUFNLFVBQVUsR0FBRztZQUNqQixlQUFlLEVBQUUsYUFBYTtZQUM5QixnQkFBZ0IsRUFBRSxJQUFJO1NBQ2UsQ0FBQztRQUN4QyxJQUFJLFVBQVUsR0FDWixrQ0FBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDOUIsUUFBUSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsdUJBQXVCO1lBQzFELEtBQUssRUFBRTtnQkFDTCxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7Z0JBQ3hDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7Z0JBQzVDLEtBQUssRUFBRSxhQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDO29CQUMzQyxDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO2FBQ3ZCO1lBQ0QsVUFBVTtTQUNYLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFWCxJQUFJLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLG1DQUFvQixDQUFDLG9CQUFvQixDQUN4RCxLQUFLLEVBQ0wsTUFBTSxHQUFHLEVBQUUsRUFDWDtnQkFDRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLO2dCQUN6QixFQUFFLEVBQUUsT0FBTyxDQUFDLGVBQWU7Z0JBQzNCLElBQUksRUFBRSxPQUFPLENBQUMsaUJBQWlCO2FBQ2hDLENBQ0YsQ0FBQztZQUNGLFVBQVUsR0FBRztnQkFDWCxlQUFlLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJO2FBQ25ELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUMsbUJBQW1CLENBQ3RDLEtBQUssRUFDTCxFQUFFLEVBQ0YsVUFBVSxDQUFDLGVBQWUsRUFDMUI7WUFDRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsZ0JBQWdCO1lBQzdDLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQW9DRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBVlQsdUJBQWtCLEdBQ2pDLEVBQUUsQ0FBQztRQUNZLHNCQUFpQixHQUF3QyxFQUFFLENBQUM7UUFTM0UsTUFBTSxTQUFTLEdBQ2IsS0FBSyxDQUFDLGlCQUFpQjtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtnQkFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQ3RCLENBQUMsQ0FBQztRQUVMLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUU3RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FBQztRQUN6RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEtBQUssQ0FBQztRQUVoRSxJQUFJLENBQUMsa0JBQWtCO1lBQ3JCLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxTQUFTO2dCQUNwQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7Z0JBQzVCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQ3ZCLCtDQUErQyxDQUNoRCxDQUFDO1FBRVIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDRCQUFhLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDckUsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLE9BQU8sRUFBRSxZQUFJLENBQUMsUUFBUSxDQUNwQjtnQkFDRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ1osSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FDekIsNEJBQWEsQ0FBQywrQkFBK0IsQ0FDOUM7YUFDSixFQUNELEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUN6QjtZQUNELE1BQU0sRUFBRSxZQUFJLENBQUMsUUFBUSxDQUNuQjtnQkFDRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ1osSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FDeEIsNEJBQWEsQ0FBQyw4QkFBOEIsQ0FDN0M7YUFDSixFQUNELEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUN6QjtZQUNELEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFFbkQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVNLGNBQWMsQ0FDbkIsSUFBVyxFQUNYLFVBQWdCLEVBQ2hCLFdBQW9CLEVBQ3BCLFVBQW9CO1FBRXBCLElBQ0UsQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUNuQixDQUFDLFVBQVUsQ0FBQyxhQUFhO1lBQ3pCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsQ0FBQztZQUNELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDaEUsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixXQUFXLEdBQUcsUUFBUSxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ3RELENBQUM7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUM7WUFDeEIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsR0FBRyxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQzFCLFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sYUFBYSxDQUNsQixJQUFXLEVBQ1gsVUFBZ0IsRUFDaEIsV0FBb0IsRUFDcEIsVUFBb0I7UUFFcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckMsd0VBQXdFO1lBQ3hFLHdFQUF3RTtZQUN4RSxRQUFRO1lBQ1IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixzREFBc0Q7Z0JBQ3RELDJDQUEyQztnQkFDM0MsbUJBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUM3Qix3SUFBd0ksQ0FDekksQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ3hDLDRFQUE0RTtZQUM1RSx3RUFBd0U7WUFDeEUsUUFBUTtZQUNSLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEIsc0RBQXNEO2dCQUN0RCwyQ0FBMkM7Z0JBQzNDLG1CQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FDN0IsZ0pBQWdKLENBQ2pKLENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDbkIsQ0FBQyxVQUFVLENBQUMsYUFBYTtZQUN6QixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLENBQUM7WUFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQy9ELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsV0FBVyxHQUFHLFFBQVEsSUFBSSxDQUFDLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN0RCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUc7WUFDWCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM1QixHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDMUIsV0FBVztTQUNaLENBQUM7UUFFRixJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0IseUVBQXlFO1lBQ3pFLDRFQUE0RTtZQUM1RSxvRUFBb0U7WUFDcEUsMkVBQTJFO1lBQzNFLG1EQUFtRDtZQUNuRCxNQUFNLElBQUksd0JBQWUsQ0FDdkIsaUtBQWlLLEVBQ2pLLElBQUksQ0FDTCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0IsQ0FBQyxJQUF3QztRQUNuRSxNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWMsQ0FBQyxJQUF3QztRQUM3RCxPQUFPLENBQ0wsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUIsQ0FBQyxJQUF1QztRQUNqRSxNQUFNLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWEsQ0FBQyxJQUF1QztRQUMzRCxPQUFPLENBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3hFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLGFBQWEsQ0FDakIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixjQUFjLENBQUMsV0FBVyxFQUMxQixLQUFLLENBQ04sQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssd0JBQXdCO1FBQzlCLE1BQU0sV0FBVyxHQUFHLDRDQUE0QyxDQUFDO1FBQ2pFLE1BQU0sSUFBSSxHQUFHLFdBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzVCLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7b0JBQzFCLFFBQVEsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxDQUFDO29CQUNYLE1BQU0sRUFBRSxDQUFDO29CQUNULGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQy9CLFdBQVc7aUJBQ1osQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOztBQXJiSCxzQ0FzYkM7OztBQUVEOztHQUVHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsSUFBNEU7SUFFNUUseUVBQXlFO0lBQ3pFLHdDQUF3QztJQUN4QyxRQUFRO0lBQ1IsNkhBQTZIO0lBQzdILE9BQU87SUFDUCwwR0FBMEc7SUFDMUcsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUM7UUFDNUIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxjQUFjLEdBQXNDO0lBQ3hELFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQztJQUN6QixXQUFXLEVBQUUsdUNBQXVDO0lBQ3BEOzs7T0FHRztJQUNILFFBQVEsRUFBRSxJQUFJO0lBQ2QsUUFBUSxFQUFFLENBQUM7SUFDWCxNQUFNLEVBQUUsQ0FBQztDQUNWLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLFdBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QyxNQUFNLGdCQUFnQixHQUFHLFdBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQTJDM0M7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixDQUFxQyxFQUNyQyxDQUFxQztJQUVyQyxPQUFPLENBQ0wsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVTtRQUM3QixDQUFDLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQyxjQUFjO1FBQ3JDLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVE7UUFDekIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtRQUNyQixDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRO1FBQ3pCLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLGFBQWE7UUFDbkMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUN0QyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FDdkIsQ0FBb0MsRUFDcEMsQ0FBb0M7SUFFcEMsT0FBTyxDQUNMLENBQUMsQ0FBQyxVQUFVLEtBQUssQ0FBQyxDQUFDLFVBQVU7UUFDN0IsQ0FBQyxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUMsY0FBYztRQUNyQyxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRO1FBQ3pCLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07UUFDckIsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsUUFBUTtRQUN6QixDQUFDLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxhQUFhO1FBQ25DLENBQUMsQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FDdEMsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsSUFBUztJQUNqQyxPQUFPLENBQ0wsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFdBQVc7UUFDNUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssV0FBVyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUN6QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL3NlY3VyaXR5LWdyb3VwLnRzXG5cbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gXCJAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWFcIjtcbmltcG9ydCB7XG4gIGRhdGFBd3NTZWN1cml0eUdyb3VwLFxuICBzZWN1cml0eUdyb3VwLFxuICB2cGNTZWN1cml0eUdyb3VwRWdyZXNzUnVsZSxcbiAgdnBjU2VjdXJpdHlHcm91cEluZ3Jlc3NSdWxlLFxufSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQW5ub3RhdGlvbnMsIExhenksIFRva2VuIH0gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuaW1wb3J0IHsgSVBlZXIsIFBlZXIgfSBmcm9tIFwiLi9wZWVyXCI7XG5pbXBvcnQgeyBQb3J0IH0gZnJvbSBcIi4vcG9ydFwiO1xuaW1wb3J0IHsgSVZwYyB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuaW1wb3J0IHtcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgSUF3c0NvbnN0cnVjdCxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCB7IENvbnRleHRQcm92aWRlciB9IGZyb20gXCIuLi9jb250ZXh0LXByb3ZpZGVyXCI7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tIFwiLi4vY3gtYXBpXCI7XG4vLyBpbXBvcnQgeyBhbGxvd0FsbE91dGJvdW5kTG9jYWwgfSBmcm9tIFwiLi9wcml2YXRlL2NvbnRleHQtc3R1YlwiO1xuXG5jb25zdCBTRUNVUklUWV9HUk9VUF9TWU1CT0wgPSBTeW1ib2wuZm9yKFxuICBcInRlcnJhY29uc3RydWN0cy9saWIvYXdzL2NvbXB1dGUuU2VjdXJpdHlHcm91cFwiLFxuKTtcblxuY29uc3QgU0VDVVJJVFlfR1JPVVBfRElTQUJMRV9JTkxJTkVfUlVMRVNfQ09OVEVYVF9LRVkgPVxuICBcInRlcnJhY29uc3RydWN0cy9hd3MvY29tcHV0ZS5zZWN1cml0eUdyb3VwRGlzYWJsZUlubGluZVJ1bGVzXCI7XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUdyb3VwT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBJRCBmb3IgdGhlIGN1cnJlbnQgc2VjdXJpdHkgZ3JvdXBcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBzZWN1cml0eSBncm91cC1saWtlIG9iamVjdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2VjdXJpdHlHcm91cCBleHRlbmRzIElBd3NDb25zdHJ1Y3QsIElQZWVyIHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cE91dHB1dHM6IFNlY3VyaXR5R3JvdXBPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBJRCBmb3IgdGhlIGN1cnJlbnQgc2VjdXJpdHkgZ3JvdXBcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIFNlY3VyaXR5R3JvdXAgaGFzIGJlZW4gY29uZmlndXJlZCB0byBhbGxvdyBhbGwgb3V0Ym91bmQgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBbGxPdXRib3VuZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkIGFuIGluZ3Jlc3MgcnVsZSBmb3IgdGhlIGN1cnJlbnQgc2VjdXJpdHkgZ3JvdXBcbiAgICpcbiAgICogYHJlbW90ZVJ1bGVgIGNvbnRyb2xzIHdoZXJlIHRoZSBSdWxlIG9iamVjdCBpcyBjcmVhdGVkIGlmIHRoZSBwZWVyIGlzIGFsc28gYVxuICAgKiBzZWN1cml0eUdyb3VwIGFuZCB0aGV5IGFyZSBpbiBkaWZmZXJlbnQgc3RhY2suIElmIGZhbHNlIChkZWZhdWx0KSB0aGVcbiAgICogcnVsZSBvYmplY3QgaXMgY3JlYXRlZCB1bmRlciB0aGUgY3VycmVudCBTZWN1cml0eUdyb3VwIG9iamVjdC4gSWYgdHJ1ZSBhbmQgdGhlXG4gICAqIHBlZXIgaXMgYWxzbyBhIFNlY3VyaXR5R3JvdXAsIHRoZSBydWxlIG9iamVjdCBpcyBjcmVhdGVkIHVuZGVyIHRoZSByZW1vdGVcbiAgICogU2VjdXJpdHlHcm91cCBvYmplY3QuXG4gICAqL1xuICBhZGRJbmdyZXNzUnVsZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlbW90ZVJ1bGU/OiBib29sZWFuLFxuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGQgYW4gZWdyZXNzIHJ1bGUgZm9yIHRoZSBjdXJyZW50IHNlY3VyaXR5IGdyb3VwXG4gICAqXG4gICAqIGByZW1vdGVSdWxlYCBjb250cm9scyB3aGVyZSB0aGUgUnVsZSBvYmplY3QgaXMgY3JlYXRlZCBpZiB0aGUgcGVlciBpcyBhbHNvIGFcbiAgICogc2VjdXJpdHlHcm91cCBhbmQgdGhleSBhcmUgaW4gZGlmZmVyZW50IHN0YWNrLiBJZiBmYWxzZSAoZGVmYXVsdCkgdGhlXG4gICAqIHJ1bGUgb2JqZWN0IGlzIGNyZWF0ZWQgdW5kZXIgdGhlIGN1cnJlbnQgU2VjdXJpdHlHcm91cCBvYmplY3QuIElmIHRydWUgYW5kIHRoZVxuICAgKiBwZWVyIGlzIGFsc28gYSBTZWN1cml0eUdyb3VwLCB0aGUgcnVsZSBvYmplY3QgaXMgY3JlYXRlZCB1bmRlciB0aGUgcmVtb3RlXG4gICAqIFNlY3VyaXR5R3JvdXAgb2JqZWN0LlxuICAgKi9cbiAgYWRkRWdyZXNzUnVsZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlbW90ZVJ1bGU/OiBib29sZWFuLFxuICApOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgU2VjdXJpdHlHcm91cCB0aGF0IGlzIG5vdCBjcmVhdGVkIGluIHRoaXMgdGVtcGxhdGVcbiAqL1xuYWJzdHJhY3QgY2xhc3MgU2VjdXJpdHlHcm91cEJhc2VcbiAgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSVNlY3VyaXR5R3JvdXBcbntcbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBpbmRpY2F0ZWQgb2JqZWN0IGlzIGEgc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNTZWN1cml0eUdyb3VwKHg6IGFueSk6IHggaXMgU2VjdXJpdHlHcm91cEJhc2Uge1xuICAgIHJldHVybiBTRUNVUklUWV9HUk9VUF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzZWN1cml0eUdyb3VwSWQ6IHN0cmluZztcbiAgcHVibGljIGdldCBzZWN1cml0eUdyb3VwT3V0cHV0cygpOiBTZWN1cml0eUdyb3VwT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQsXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VjdXJpdHlHcm91cE91dHB1dHM7XG4gIH1cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGFsbG93QWxsT3V0Ym91bmQ6IGJvb2xlYW47XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBhbGxvd0FsbElwdjZPdXRib3VuZDogYm9vbGVhbjtcblxuICBwdWJsaWMgcmVhZG9ubHkgY2FuSW5saW5lUnVsZSA9IGZhbHNlO1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHtcbiAgICBzZWN1cml0eUdyb3VwczogW3RoaXNdLFxuICB9KTtcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRQb3J0PzogUG9ydDtcblxuICBwcml2YXRlIHBlZXJBc1Rva2VuQ291bnQ6IG51bWJlciA9IDA7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBBd3NDb25zdHJ1Y3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFNFQ1VSSVRZX0dST1VQX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIEF3c1N0YWNrLnVuaXF1ZUlkKHRoaXMubm9kZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkSW5ncmVzc1J1bGUoXG4gICAgcGVlcjogSVBlZXIsXG4gICAgY29ubmVjdGlvbjogUG9ydCxcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICByZW1vdGVSdWxlPzogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc2NyaXB0aW9uID0gYGZyb20gJHtwZWVyLnVuaXF1ZUlkfToke2Nvbm5lY3Rpb259YDtcbiAgICB9XG5cbiAgICBjb25zdCB7IHNjb3BlLCBpZCB9ID0gdGhpcy5kZXRlcm1pbmVSdWxlU2NvcGUoXG4gICAgICBwZWVyLFxuICAgICAgY29ubmVjdGlvbixcbiAgICAgIFwiZnJvbVwiLFxuICAgICAgcmVtb3RlUnVsZSxcbiAgICApO1xuXG4gICAgLy8gU2tpcCBkdXBsaWNhdGVzXG4gICAgaWYgKHNjb3BlLm5vZGUudHJ5RmluZENoaWxkKGlkKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXcgdnBjU2VjdXJpdHlHcm91cEluZ3Jlc3NSdWxlLlZwY1NlY3VyaXR5R3JvdXBJbmdyZXNzUnVsZShzY29wZSwgaWQsIHtcbiAgICAgICAgc2VjdXJpdHlHcm91cElkOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgLi4ucGVlci50b0luZ3Jlc3NSdWxlQ29uZmlnKCksXG4gICAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSnNvbigpLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRFZ3Jlc3NSdWxlKFxuICAgIHBlZXI6IElQZWVyLFxuICAgIGNvbm5lY3Rpb246IFBvcnQsXG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgcmVtb3RlUnVsZT86IGJvb2xlYW4sXG4gICkge1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXNjcmlwdGlvbiA9IGB0byAke3BlZXIudW5pcXVlSWR9OiR7Y29ubmVjdGlvbn1gO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2NvcGUsIGlkIH0gPSB0aGlzLmRldGVybWluZVJ1bGVTY29wZShcbiAgICAgIHBlZXIsXG4gICAgICBjb25uZWN0aW9uLFxuICAgICAgXCJ0b1wiLFxuICAgICAgcmVtb3RlUnVsZSxcbiAgICApO1xuXG4gICAgLy8gU2tpcCBkdXBsaWNhdGVzXG4gICAgaWYgKHNjb3BlLm5vZGUudHJ5RmluZENoaWxkKGlkKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXcgdnBjU2VjdXJpdHlHcm91cEVncmVzc1J1bGUuVnBjU2VjdXJpdHlHcm91cEVncmVzc1J1bGUoc2NvcGUsIGlkLCB7XG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgIC4uLnBlZXIudG9FZ3Jlc3NSdWxlQ29uZmlnKCksXG4gICAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSnNvbigpLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b0luZ3Jlc3NSdWxlQ29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudG9SdWxlQ29uZmlnKCk7XG4gIH1cblxuICBwdWJsaWMgdG9FZ3Jlc3NSdWxlQ29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudG9SdWxlQ29uZmlnKCk7XG4gIH1cblxuICAvLyBUZXJyYWZvcm0gZG9lcyBub3QgdXNlIGRpZmZlcmVudCBwcm9wZXJ0aWVzIGJldHdlZW4gaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzXG4gIHByaXZhdGUgdG9SdWxlQ29uZmlnKCk6IGFueSB7XG4gICAgcmV0dXJuIHsgcmVmZXJlbmNlZFNlY3VyaXR5R3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hlcmUgdG8gcGFyZW50IGEgbmV3IGluZ3Jlc3MvZWdyZXNzIHJ1bGVcbiAgICpcbiAgICogQSBTZWN1cml0eUdyb3VwIHJ1bGUgaXMgcGFyZW50ZWQgdW5kZXIgdGhlIGdyb3VwIGl0J3MgcmVsYXRlZCB0bywgVU5MRVNTXG4gICAqIHdlJ3JlIGluIGEgY3Jvc3Mtc3RhY2sgc2NlbmFyaW8gd2l0aCBhbm90aGVyIFNlY3VyaXR5IEdyb3VwLiBJbiB0aGF0IGNhc2UsXG4gICAqIHdlIHJlc3BlY3QgdGhlICdyZW1vdGVSdWxlJyBmbGFnIGFuZCB3aWxsIHBhcmVudCB1bmRlciB0aGUgb3RoZXIgc2VjdXJpdHlcbiAgICogZ3JvdXAuXG4gICAqXG4gICAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGN5Y2xpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdGFja3MsIHNpbmNlIGJvdGhcbiAgICogaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzIHdpbGwgcmVmZXJlbmNlIGJvdGggc2VjdXJpdHkgZ3JvdXBzLCBhbmQgYSBuYWl2ZVxuICAgKiBwYXJlbnRpbmcgd2lsbCBsZWFkIHRvIHRoZSBmb2xsb3dpbmcgc2l0dWF0aW9uOlxuICAgKlxuICAgKiAgIOKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlyAgICAgICAgIOKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVl1xuICAgKiAgIOKVkSAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICDilZEgICAgICAgICDilZEgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pWRXG4gICAqICAg4pWRICDilIIgIEdyb3VwQSAgIOKUguKXgOKUgOKUgOKUgOKUgOKVrOKUgOKUkCAgIOKUjOKUgOKUgOKUgOKVrOKUgOKUgOKUgOKWtuKUgiAgR3JvdXBCICAg4pSCICAg4pWRXG4gICAqICAg4pWRICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgIOKVkSDilIIgICDilIIgICDilZEgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAg4pWRXG4gICAqICAg4pWRICAgICAgICDilrIgICAgICAgICAgIOKVkSDilIIgICDilIIgICDilZEgICAgICAgICAg4payICAgICAgICAg4pWRXG4gICAqICAg4pWRICAgICAgICDilIIgICAgICAgICAgIOKVkSDilIIgICDilIIgICDilZEgICAgICAgICAg4pSCICAgICAgICAg4pWRXG4gICAqICAg4pWRICAgICAgICDilIIgICAgICAgICAgIOKVkSDilIIgICDilIIgICDilZEgICAgICAgICAg4pSCICAgICAgICAg4pWRXG4gICAqICAg4pWRICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgIOKVkSDilJTilIDilIDilIDilLzilIDilIDilIDilazilIDilIDilIDilIDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICDilZFcbiAgICogICDilZEgIOKUgiAgRWdyZXNzQSAg4pSC4pSA4pSA4pSA4pSA4pSA4pWs4pSA4pSA4pSA4pSA4pSA4pSYICAg4pWRICAgIOKUgiBJbmdyZXNzQiAg4pSCICAg4pWRXG4gICAqICAg4pWRICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgIOKVkSAgICAgICAgIOKVkSAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilZFcbiAgICogICDilZEgICAgICAgICAgICAgICAgICAgIOKVkSAgICAgICAgIOKVkSAgICAgICAgICAgICAgICAgICAg4pWRXG4gICAqICAg4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdICAgICAgICAg4pWa4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWdXG4gICAqXG4gICAqIEJ5IGhhdmluZyB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggdGhlIHBhcmVudCwgd2UgYXZvaWQgdGhlIGN5Y2xpYyByZWZlcmVuY2UgYnlcbiAgICoga2VlcGluZyBhbGwgcnVsZXMgaW4gYSBzaW5nbGUgc3RhY2suXG4gICAqXG4gICAqIElmIHRoaXMgaGFwcGVucywgd2UgYWxzbyBoYXZlIHRvIGNoYW5nZSB0aGUgY29uc3RydWN0IElELCBiZWNhdXNlXG4gICAqIG90aGVyd2lzZSB3ZSBtaWdodCBoYXZlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUgSUQgaWYgd2UgaGF2ZVxuICAgKiBtdWx0aXBsZSByZXZlcnNlZCBzZWN1cml0eSBncm91cCByZWxhdGlvbnNoaXBzLlxuICAgKlxuICAgKiAgIOKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVl1xuICAgKiAgIOKVkeKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgICAgICAgICAgICDilZFcbiAgICogICDilZHilIIgIEdyb3VwQiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICDilZFcbiAgICogICDilZHilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgICAgICAgICAg4pWRXG4gICAqICAg4pWRICAgICAg4payICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUgiAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUnOKUgOKUgOKUgOKUgFwiZnJvbSBBXCLilIDilIDilIIgSW5ncmVzc0IgIOKUgiDilZFcbiAgICogICDilZEgICAgICDilIIgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDilZFcbiAgICogICDilZEgICAgICDilIIgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCDilZFcbiAgICogICDilZEgICAgICDilJzilIDilIDilIDilIDilIBcInRvIEJcIuKUgOKUgOKUgOKUgiAgRWdyZXNzQSAg4pSCIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUgiAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUgiAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKVkVxuICAgKiAgIOKVkSAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgFwidG8gQlwi4pSA4pSA4pSA4pSCICBFZ3Jlc3NDICDilIIg4pWRICA8LS0gb29wc1xuICAgKiAgIOKVkSAgICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCDilZFcbiAgICogICDilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ1cbiAgICovXG5cbiAgcHJvdGVjdGVkIGRldGVybWluZVJ1bGVTY29wZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGZyb21UbzogXCJmcm9tXCIgfCBcInRvXCIsXG4gICAgcmVtb3RlUnVsZT86IGJvb2xlYW4sXG4gICk6IFJ1bGVTY29wZSB7XG4gICAgaWYgKFxuICAgICAgcmVtb3RlUnVsZSAmJlxuICAgICAgU2VjdXJpdHlHcm91cEJhc2UuaXNTZWN1cml0eUdyb3VwKHBlZXIpICYmXG4gICAgICBkaWZmZXJlbnRTdGFja3ModGhpcywgcGVlcilcbiAgICApIHtcbiAgICAgIC8vIFJldmVyc2VkXG4gICAgICBjb25zdCByZXZlcnNlZEZyb21UbyA9IGZyb21UbyA9PT0gXCJmcm9tXCIgPyBcInRvXCIgOiBcImZyb21cIjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNjb3BlOiBwZWVyLFxuICAgICAgICBpZDogYCR7dGhpcy51bmlxdWVJZH06JHtjb25uZWN0aW9ufSAke3JldmVyc2VkRnJvbVRvfWAsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWd1bGFyIChkbyBvbGQgSUQgZXNjYXBpbmcgaW4gb3JkZXIgdG8gbm90IGRpc3R1cmIgZXhpc3RpbmcgZGVwbG95bWVudHMpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgICAgaWQ6IGAke2Zyb21Ub30gJHt0aGlzLnJlbmRlclBlZXIocGVlcil9OiR7Y29ubmVjdGlvbn1gLnJlcGxhY2UoXG4gICAgICAgICAgXCIvXCIsXG4gICAgICAgICAgXCJfXCIsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUGVlcihwZWVyOiBJUGVlcikge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocGVlci51bmlxdWVJZCkpIHtcbiAgICAgIC8vIE5lZWQgdG8gcmV0dXJuIGEgdW5pcXVlIHZhbHVlIGVhY2ggdGltZSBhIHBlZXJcbiAgICAgIC8vIGlzIGFuIHVucmVzb2x2ZWQgdG9rZW4sIGVsc2UgdGhlIGR1cGxpY2F0ZSBza2lwcGVyXG4gICAgICAvLyBpbiBgc2cuYWRkWHh4UnVsZWAgY2FuIGRldGVjdCB1bmlxdWUgcnVsZXMgYXMgZHVwbGljYXRlc1xuICAgICAgcmV0dXJuIHRoaXMucGVlckFzVG9rZW5Db3VudCsrXG4gICAgICAgID8gYCd7SW5kaXJlY3RQZWVyJHt0aGlzLnBlZXJBc1Rva2VuQ291bnR9fSdgXG4gICAgICAgIDogXCJ7SW5kaXJlY3RQZWVyfVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGVlci51bmlxdWVJZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2NvcGUgYW5kIGlkIGluIHdoaWNoIGEgZ2l2ZW4gU2VjdXJpdHlHcm91cCBydWxlIHNob3VsZCBiZSBkZWZpbmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVTY29wZSB7XG4gIC8qKlxuICAgKiBUaGUgU2VjdXJpdHlHcm91cCBpbiB3aGljaCBhIHJ1bGUgc2hvdWxkIGJlIHNjb3BlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBJU2VjdXJpdHlHcm91cDtcbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3QgSUQgdG8gdXNlIGZvciB0aGUgcnVsZS5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGRpZmZlcmVudFN0YWNrcyhncm91cDE6IFNlY3VyaXR5R3JvdXBCYXNlLCBncm91cDI6IFNlY3VyaXR5R3JvdXBCYXNlKSB7XG4gIHJldHVybiBBd3NTdGFjay5vZihncm91cDEpICE9PSBBd3NTdGFjay5vZihncm91cDIpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWN1cml0eSBncm91cC4gRm9yIHZhbGlkIHZhbHVlcywgc2VlIHRoZSBHcm91cE5hbWVcbiAgICogcGFyYW1ldGVyIG9mIHRoZSBDcmVhdGVTZWN1cml0eUdyb3VwIGFjdGlvbiBpbiB0aGUgQW1hem9uIEVDMiBBUElcbiAgICogUmVmZXJlbmNlLlxuICAgKlxuICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIGFuIGV4cGxpY2l0IGdyb3VwIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgR3JvdXBOYW1lLCBBV1MgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIGFcbiAgICogdW5pcXVlIHBoeXNpY2FsIElEIGFuZCB1c2VzIHRoYXQgSUQgZm9yIHRoZSBncm91cCBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIHNlY3VyaXR5IGdyb3VwLlxuICAgKlxuICAgKiBGb3JjZXMgbmV3IHJlc291cmNlXG4gICAqXG4gICAqIFNlY3VyaXR5IGdyb3VwIGRlc2NyaXB0aW9uLiBEZWZhdWx0cyB0byBgTWFuYWdlZCBieSBUZXJyYWZvcm1gLiBDYW5ub3QgYmUgYFwiXCJgLlxuICAgKlxuICAgKiBOT1RFOiBUaGlzIGZpZWxkIG1hcHMgdG8gdGhlIEFXUyBgR3JvdXBEZXNjcmlwdGlvbmAgYXR0cmlidXRlLCBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gVXBkYXRlIEFQSS5cbiAgICogSWYgeW91J2QgbGlrZSB0byBjbGFzc2lmeSB5b3VyIHNlY3VyaXR5IGdyb3VwcyBpbiBhIHdheSB0aGF0IGNhbiBiZSB1cGRhdGVkLCB1c2UgdGFncy5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGRlZmF1bHQgbmFtZSB3aWxsIGJlIHRoZSBjb25zdHJ1Y3QncyBDREsgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgYWxsIG91dGJvdW5kIHRyYWZmaWMgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlcmUgd2lsbCBvbmx5IGJlIGEgc2luZ2xlIGVncmVzcyBydWxlIHdoaWNoIGFsbG93cyBhbGxcbiAgICogb3V0Ym91bmQgdHJhZmZpYy4gSWYgdGhpcyBpcyBzZXQgdG8gZmFsc2UsIG5vIG91dGJvdW5kIHRyYWZmaWMgd2lsbCBiZSBhbGxvd2VkIGJ5XG4gICAqIGRlZmF1bHQgYW5kIGFsbCBlZ3Jlc3MgdHJhZmZpYyBtdXN0IGJlIGV4cGxpY2l0bHkgYXV0aG9yaXplZC5cbiAgICpcbiAgICogVG8gYWxsb3cgYWxsIGlwdjYgdHJhZmZpYyB1c2UgYWxsb3dBbGxJcHY2T3V0Ym91bmRcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBbGxPdXRib3VuZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgYWxsIG91dGJvdW5kIGlwdjYgdHJhZmZpYyBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBJZiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGVyZSB3aWxsIG9ubHkgYmUgYSBzaW5nbGUgZWdyZXNzIHJ1bGUgd2hpY2ggYWxsb3dzIGFsbFxuICAgKiBvdXRib3VuZCBpcHY2IHRyYWZmaWMuIElmIHRoaXMgaXMgc2V0IHRvIGZhbHNlLCBubyBvdXRib3VuZCB0cmFmZmljIHdpbGwgYmUgYWxsb3dlZCBieVxuICAgKiBkZWZhdWx0IGFuZCBhbGwgZWdyZXNzIGlwdjYgdHJhZmZpYyBtdXN0IGJlIGV4cGxpY2l0bHkgYXV0aG9yaXplZC5cbiAgICpcbiAgICogVG8gYWxsb3cgYWxsIGlwdjQgdHJhZmZpYyB1c2UgYWxsb3dBbGxPdXRib3VuZFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBbGxJcHY2T3V0Ym91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgaW5saW5lIGluZ3Jlc3MgYW5kIGVncmVzcyBydWxlIG9wdGltaXphdGlvbi5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzIHdpbGwgbm90IGJlIGRlY2xhcmVkIHVuZGVyIHRoZVxuICAgKiBTZWN1cml0eUdyb3VwIGluIGNsb3VkZm9ybWF0aW9uLCBidXQgd2lsbCBiZSBzZXBhcmF0ZSBlbGVtZW50cy5cbiAgICpcbiAgICogSW5saW5pbmcgcnVsZXMgaXMgYW4gb3B0aW1pemF0aW9uIGZvciBwcm9kdWNpbmcgc21hbGxlciBzdGFjayB0ZW1wbGF0ZXMuIFNvbWV0aW1lc1xuICAgKiB0aGlzIGlzIG5vdCBkZXNpcmFibGUsIGZvciBleGFtcGxlIHdoZW4gc2VjdXJpdHkgZ3JvdXAgYWNjZXNzIGlzIG1hbmFnZWQgdmlhIHRhZ3MuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGNhbiBiZSBvdmVycmlkZW4gZ2xvYmFsbHkgYnkgc2V0dGluZyB0aGUgY29udGV4dCB2YXJpYWJsZVxuICAgKiAnQGF3cy1jZGsvYXdzLWVjMi5zZWN1cml0eUdyb3VwRGlzYWJsZUlubGluZVJ1bGVzJy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRpc2FibGVJbmxpbmVSdWxlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQWRkaXRpb25hbCBvcHRpb25zIGZvciBpbXBvcnRlZCBzZWN1cml0eSBncm91cHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUdyb3VwSW1wb3J0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXJrIHRoZSBTZWN1cml0eUdyb3VwIGFzIGhhdmluZyBiZWVuIGNyZWF0ZWQgYWxsb3dpbmcgYWxsIG91dGJvdW5kIHRyYWZmaWNcbiAgICpcbiAgICogT25seSBpZiB0aGlzIGlzIHNldCB0byBmYWxzZSB3aWxsIGVncmVzcyBydWxlcyBiZSBhZGRlZCB0byB0aGlzIHNlY3VyaXR5XG4gICAqIGdyb3VwLiBCZSBhd2FyZSwgdGhpcyB3b3VsZCB1bmRvIGFueSBwb3RlbnRpYWwgXCJhbGwgb3V0Ym91bmQgdHJhZmZpY1wiXG4gICAqIGRlZmF1bHQuXG4gICAqXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QWxsT3V0Ym91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBTZWN1cml0eUdyb3VwIGFzIGhhdmluZyBiZWVuIGNyZWF0ZWQgYWxsb3dpbmcgYWxsIG91dGJvdW5kIGlwdjYgdHJhZmZpY1xuICAgKlxuICAgKiBPbmx5IGlmIHRoaXMgaXMgc2V0IHRvIGZhbHNlIHdpbGwgZWdyZXNzIHJ1bGVzIGZvciBpcHY2IGJlIGFkZGVkIHRvIHRoaXMgc2VjdXJpdHlcbiAgICogZ3JvdXAuIEJlIGF3YXJlLCB0aGlzIHdvdWxkIHVuZG8gYW55IHBvdGVudGlhbCBcImFsbCBvdXRib3VuZCB0cmFmZmljXCJcbiAgICogZGVmYXVsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QWxsSXB2Nk91dGJvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYSBTZWN1cml0eUdyb3VwIGlzIG11dGFibGUgQ0RLIGNhbiBhZGQgcnVsZXMgdG8gZXhpc3RpbmcgZ3JvdXBzXG4gICAqXG4gICAqIEJld2FyZSB0aGF0IG1ha2luZyBhIFNlY3VyaXR5R3JvdXAgaW1tdXRhYmxlIG1pZ2h0IGxlYWQgdG8gaXNzdWVcbiAgICogZHVlIHRvIG1pc3NpbmcgaW5ncmVzcy9lZ3Jlc3MgcnVsZXMgZm9yIG5ldyByZXNvdXJjZXMuXG4gICAqXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG11dGFibGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gQW1hem9uIEVDMiBzZWN1cml0eSBncm91cCB3aXRoaW4gYSBWUEMuXG4gKlxuICogU2VjdXJpdHkgR3JvdXBzIGFjdCBsaWtlIGEgZmlyZXdhbGwgd2l0aCBhIHNldCBvZiBydWxlcywgYW5kIGFyZSBhc3NvY2lhdGVkXG4gKiB3aXRoIGFueSBBV1MgcmVzb3VyY2UgdGhhdCBoYXMgb3IgY3JlYXRlcyBFbGFzdGljIE5ldHdvcmsgSW50ZXJmYWNlcyAoRU5JcykuXG4gKiBBIHR5cGljYWwgZXhhbXBsZSBvZiBhIHJlc291cmNlIHRoYXQgaGFzIGEgc2VjdXJpdHkgZ3JvdXAgaXMgYW4gSW5zdGFuY2UgKG9yXG4gKiBBdXRvIFNjYWxpbmcgR3JvdXAgb2YgaW5zdGFuY2VzKVxuICpcbiAqIElmIHlvdSBhcmUgZGVmaW5pbmcgbmV3IGluZnJhc3RydWN0dXJlIGluIENESywgdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB5b3VcbiAqIHdvbid0IGhhdmUgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGNsYXNzIGF0IGFsbC4gTGlrZSBJQU0gUm9sZXMsIFNlY3VyaXR5XG4gKiBHcm91cHMgbmVlZCB0byBleGlzdCB0byBjb250cm9sIGFjY2VzcyBiZXR3ZWVuIEFXUyByZXNvdXJjZXMsIGJ1dCBDREsgd2lsbFxuICogYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhbmQgcG9wdWxhdGUgdGhlbSB3aXRoIGxlYXN0LXByaXZpbGVnZSBwZXJtaXNzaW9uc1xuICogZm9yIHlvdSBzbyB5b3UgY2FuIGNvbmNlbnRyYXRlIG9uIHlvdXIgYnVzaW5lc3MgbG9naWMuXG4gKlxuICogQWxsIENvbnN0cnVjdHMgdGhhdCByZXF1aXJlIFNlY3VyaXR5IEdyb3VwcyB3aWxsIGNyZWF0ZSBvbmUgZm9yIHlvdSBpZiB5b3VcbiAqIGRvbid0IHNwZWNpZnkgb25lIGF0IGNvbnN0cnVjdGlvbi4gQWZ0ZXIgY29uc3RydWN0aW9uLCB5b3UgY2FuIHNlbGVjdGl2ZWx5XG4gKiBhbGxvdyBjb25uZWN0aW9ucyB0byBhbmQgYmV0d2VlbiBjb25zdHJ1Y3RzIHZpYS0tZm9yIGV4YW1wbGUtLSB0aGUgYGluc3RhbmNlLmNvbm5lY3Rpb25zYFxuICogb2JqZWN0LiBUaGluayBvZiBpdCBhcyBcImFsbG93aW5nIGNvbm5lY3Rpb25zIHRvIHlvdXIgaW5zdGFuY2VcIiwgcmF0aGVyIHRoYW5cbiAqIFwiYWRkaW5nIGluZ3Jlc3MgcnVsZXMgYSBzZWN1cml0eSBncm91cFwiLiBTZWUgdGhlIFtBbGxvd2luZ1xuICogQ29ubmVjdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL2xhdGVzdC9kb2NzL2F3cy1jZGstbGliLmF3c19lYzItcmVhZG1lLmh0bWwjYWxsb3dpbmctY29ubmVjdGlvbnMpXG4gKiBzZWN0aW9uIGluIHRoZSBsaWJyYXJ5IGRvY3VtZW50YXRpb24gZm9yIGV4YW1wbGVzLlxuICpcbiAqIERpcmVjdCBtYW5pcHVsYXRpb24gb2YgdGhlIFNlY3VyaXR5IEdyb3VwIHRocm91Z2ggYGFkZEluZ3Jlc3NSdWxlYCBhbmRcbiAqIGBhZGRFZ3Jlc3NSdWxlYCBpcyBwb3NzaWJsZSwgYnV0IG11dGF0aW9uIHRocm91Z2ggdGhlIGAuY29ubmVjdGlvbnNgIG9iamVjdFxuICogaXMgcmVjb21tZW5kZWQuIElmIHlvdSBwZWVyIHR3byBjb25zdHJ1Y3RzIHdpdGggc2VjdXJpdHkgZ3JvdXBzIHRoaXMgd2F5LFxuICogYXBwcm9wcmlhdGUgcnVsZXMgd2lsbCBiZSBjcmVhdGVkIGluIGJvdGguXG4gKlxuICogSWYgeW91IGhhdmUgYW4gZXhpc3Rpbmcgc2VjdXJpdHkgZ3JvdXAgeW91IHdhbnQgdG8gdXNlIGluIHlvdXIgQ0RLIGFwcGxpY2F0aW9uLFxuICogeW91IHdvdWxkIGltcG9ydCBpdCBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHNlY3VyaXR5R3JvdXAgPSBjb21wdXRlLlNlY3VyaXR5R3JvdXAuZnJvbVNlY3VyaXR5R3JvdXBJZCh0aGlzLCAnU0cnLCAnc2ctMTIzNDUnLCB7XG4gKiAgIG11dGFibGU6IGZhbHNlXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlHcm91cCBleHRlbmRzIFNlY3VyaXR5R3JvdXBCYXNlIHtcbiAgLyoqXG4gICAqIExvb2sgdXAgYSBzZWN1cml0eSBncm91cCBieSBpZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUxvb2t1cEJ5SWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHNlY3VyaXR5R3JvdXBJZDogc3RyaW5nLFxuICAgIGFsbG93QWxsT3V0Ym91bmQ/OiBib29sZWFuLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tTG9va3VwQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBJZCxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9vayB1cCBhIHNlY3VyaXR5IGdyb3VwIGJ5IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Mb29rdXBCeU5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHNlY3VyaXR5R3JvdXBOYW1lOiBzdHJpbmcsXG4gICAgdnBjOiBJVnBjLFxuICAgIGFsbG93QWxsT3V0Ym91bmQ/OiBib29sZWFuLFxuICApIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tTG9va3VwQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBOYW1lLFxuICAgICAgdnBjLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3Rpbmcgc2VjdXJpdHkgZ3JvdXAgaW50byB0aGlzIGFwcC5cbiAgICpcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBhc3N1bWUgdGhhdCB0aGUgU2VjdXJpdHkgR3JvdXAgaGFzIGEgcnVsZSBpbiBpdCB3aGljaCBhbGxvd3NcbiAgICogYWxsIG91dGJvdW5kIHRyYWZmaWMsIGFuZCBzbyB3aWxsIG5vdCBhZGQgZWdyZXNzIHJ1bGVzIHRvIHRoZSBpbXBvcnRlZCBTZWN1cml0eVxuICAgKiBHcm91cCAob25seSBpbmdyZXNzIHJ1bGVzKS5cbiAgICpcbiAgICogSWYgeW91ciBleGlzdGluZyBTZWN1cml0eSBHcm91cCBuZWVkcyB0byBoYXZlIGVncmVzcyBydWxlcyBhZGRlZCwgcGFzcyB0aGVcbiAgICogYGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlYCBvcHRpb24gb24gaW1wb3J0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU2VjdXJpdHlHcm91cElkKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzZWN1cml0eUdyb3VwSWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBTZWN1cml0eUdyb3VwSW1wb3J0T3B0aW9ucyA9IHt9LFxuICApOiBJU2VjdXJpdHlHcm91cCB7XG4gICAgY2xhc3MgTXV0YWJsZUltcG9ydCBleHRlbmRzIFNlY3VyaXR5R3JvdXBCYXNlIHtcbiAgICAgIHB1YmxpYyBzZWN1cml0eUdyb3VwSWQgPSBzZWN1cml0eUdyb3VwSWQ7XG4gICAgICBwdWJsaWMgYWxsb3dBbGxPdXRib3VuZCA9IG9wdGlvbnMuYWxsb3dBbGxPdXRib3VuZCA/PyB0cnVlO1xuICAgICAgcHVibGljIGFsbG93QWxsSXB2Nk91dGJvdW5kID0gb3B0aW9ucy5hbGxvd0FsbElwdjZPdXRib3VuZCA/PyBmYWxzZTtcblxuICAgICAgcHVibGljIGFkZEVncmVzc1J1bGUoXG4gICAgICAgIHBlZXI6IElQZWVyLFxuICAgICAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgICAgICBkZXNjcmlwdGlvbj86IHN0cmluZyxcbiAgICAgICAgcmVtb3RlUnVsZT86IGJvb2xlYW4sXG4gICAgICApIHtcbiAgICAgICAgLy8gT25seSBpZiBhbGxvd0FsbE91dGJvdW5kIGhhcyBiZWVuIGRpc2FibGVkXG4gICAgICAgIGlmIChvcHRpb25zLmFsbG93QWxsT3V0Ym91bmQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgc3VwZXIuYWRkRWdyZXNzUnVsZShwZWVyLCBjb25uZWN0aW9uLCBkZXNjcmlwdGlvbiwgcmVtb3RlUnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbW11dGFibGVJbXBvcnQgZXh0ZW5kcyBTZWN1cml0eUdyb3VwQmFzZSB7XG4gICAgICBwdWJsaWMgc2VjdXJpdHlHcm91cElkID0gc2VjdXJpdHlHcm91cElkO1xuICAgICAgcHVibGljIGFsbG93QWxsT3V0Ym91bmQgPSBvcHRpb25zLmFsbG93QWxsT3V0Ym91bmQgPz8gdHJ1ZTtcbiAgICAgIHB1YmxpYyBhbGxvd0FsbElwdjZPdXRib3VuZCA9IG9wdGlvbnMuYWxsb3dBbGxJcHY2T3V0Ym91bmQgPz8gZmFsc2U7XG5cbiAgICAgIHB1YmxpYyBhZGRFZ3Jlc3NSdWxlKFxuICAgICAgICBfcGVlcjogSVBlZXIsXG4gICAgICAgIF9jb25uZWN0aW9uOiBQb3J0LFxuICAgICAgICBfZGVzY3JpcHRpb24/OiBzdHJpbmcsXG4gICAgICAgIF9yZW1vdGVSdWxlPzogYm9vbGVhbixcbiAgICAgICkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9XG5cbiAgICAgIHB1YmxpYyBhZGRJbmdyZXNzUnVsZShcbiAgICAgICAgX3BlZXI6IElQZWVyLFxuICAgICAgICBfY29ubmVjdGlvbjogUG9ydCxcbiAgICAgICAgX2Rlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgICAgICBfcmVtb3RlUnVsZT86IGJvb2xlYW4sXG4gICAgICApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLm11dGFibGUgIT09IGZhbHNlXG4gICAgICA/IG5ldyBNdXRhYmxlSW1wb3J0KHNjb3BlLCBpZClcbiAgICAgIDogbmV3IEltbXV0YWJsZUltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgdXAgYSBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZyb21Mb29rdXBBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBTZWN1cml0eUdyb3VwTG9va3VwT3B0aW9ucyxcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnMuc2VjdXJpdHlHcm91cElkKSB8fFxuICAgICAgVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnMuc2VjdXJpdHlHcm91cE5hbWUpXG4gICAgICAvLyBXZSBjYW4gaGF2ZSBhbiB1bnJlc29sdmVkIGlkIHdoZW4gdXNpbmcgYSBsb29rZWR1cCB2cGNcbiAgICAgIC8vIHx8IFRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zLnZwYz8udnBjSWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIkFsbCBhcmd1bWVudHMgdG8gbG9vayB1cCBhIHNlY3VyaXR5IGdyb3VwIG11c3QgYmUgY29uY3JldGUgKG5vIFRva2VucylcIixcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBHcmlkIGFzIGNvbnRleHRQcm92aWRlclxuICAgIC8vIFdhcm5pbmc6IHVzaW5nIGRhdGEgc291cmNlIHRvIGRldGVybWluZSBpZiB0aGUgc2VjdXJpdHkgZ3JvdXAgYWxsb3dzXG4gICAgLy8gYWxsIG91dGJvdW5kIHdpdGggYWxsb3dBbGxPdXRib3VuZExvY2FsKHNjb3BlLCBpZCwgZGF0YS5pZClcbiAgICAvLyB3b3VsZCBmb3JjZSBhbGwgZGVwZW5kaW5nIGNvZGUgdG8gZGVhbCB3aXRoIFRva2Vuc1xuICAgIGNvbnN0IGR1bW15VmFsdWUgPSB7XG4gICAgICBzZWN1cml0eUdyb3VwSWQ6IFwic2ctMTIzNDU2NzhcIixcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSBhcyBjeGFwaS5TZWN1cml0eUdyb3VwQ29udGV4dFJlc3BvbnNlO1xuICAgIGxldCBhdHRyaWJ1dGVzOiBjeGFwaS5TZWN1cml0eUdyb3VwQ29udGV4dFJlc3BvbnNlID1cbiAgICAgIENvbnRleHRQcm92aWRlci5nZXRWYWx1ZShzY29wZSwge1xuICAgICAgICBwcm92aWRlcjogY3hzY2hlbWEuQ29udGV4dFByb3ZpZGVyLlNFQ1VSSVRZX0dST1VQX1BST1ZJREVSLFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHNlY3VyaXR5R3JvdXBJZDogb3B0aW9ucy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgICAgc2VjdXJpdHlHcm91cE5hbWU6IG9wdGlvbnMuc2VjdXJpdHlHcm91cE5hbWUsXG4gICAgICAgICAgdnBjSWQ6IFRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zLnZwYz8udnBjSWQpXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiBvcHRpb25zLnZwYz8udnBjSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGR1bW15VmFsdWUsXG4gICAgICB9KS52YWx1ZTtcblxuICAgIGlmIChhdHRyaWJ1dGVzID09PSBkdW1teVZhbHVlKSB7XG4gICAgICBjb25zdCBkYXRhID0gbmV3IGRhdGFBd3NTZWN1cml0eUdyb3VwLkRhdGFBd3NTZWN1cml0eUdyb3VwKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgXCJEYXRhXCIgKyBpZCxcbiAgICAgICAge1xuICAgICAgICAgIHZwY0lkOiBvcHRpb25zLnZwYz8udnBjSWQsXG4gICAgICAgICAgaWQ6IG9wdGlvbnMuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICAgIG5hbWU6IG9wdGlvbnMuc2VjdXJpdHlHcm91cE5hbWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgc2VjdXJpdHlHcm91cElkOiBkYXRhLmlkLFxuICAgICAgICBhbGxvd0FsbE91dGJvdW5kOiBvcHRpb25zLmFsbG93QWxsT3V0Ym91bmQgPz8gdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIFNlY3VyaXR5R3JvdXAuZnJvbVNlY3VyaXR5R3JvdXBJZChcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBhdHRyaWJ1dGVzLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgIHtcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogYXR0cmlidXRlcy5hbGxvd0FsbE91dGJvdW5kLFxuICAgICAgICBtdXRhYmxlOiB0cnVlLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgc2VjdXJpdHkgZ3JvdXBcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIElEIHRoaXMgc2VjdXJpdHkgZ3JvdXAgaXMgcGFydCBvZi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBWcGNJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBTZWN1cml0eUdyb3VwIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWxsIG91dGJvdW5kIHRyYWZmaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhbGxvd0FsbE91dGJvdW5kOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBTZWN1cml0eUdyb3VwIGhhcyBiZWVuIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWxsIG91dGJvdW5kIGlwdjYgdHJhZmZpY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFsbG93QWxsSXB2Nk91dGJvdW5kOiBib29sZWFuO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpcmVjdEluZ3Jlc3NSdWxlczogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzc1tdID1cbiAgICBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3RFZ3Jlc3NSdWxlczogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwRWdyZXNzW10gPSBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIG9wdGltaXphdGlvbiBmb3IgaW5saW5lIHNlY3VyaXR5IGdyb3VwIHJ1bGVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkaXNhYmxlSW5saW5lUnVsZXM6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlY3VyaXR5R3JvdXBQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9XG4gICAgICBwcm9wcy5zZWN1cml0eUdyb3VwTmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGdyb3VwRGVzY3JpcHRpb24gPSBwcm9wcy5kZXNjcmlwdGlvbiB8fCB0aGlzLm5vZGUucGF0aDtcblxuICAgIHRoaXMuYWxsb3dBbGxPdXRib3VuZCA9IHByb3BzLmFsbG93QWxsT3V0Ym91bmQgIT09IGZhbHNlO1xuICAgIHRoaXMuYWxsb3dBbGxJcHY2T3V0Ym91bmQgPSBwcm9wcy5hbGxvd0FsbElwdjZPdXRib3VuZCA/PyBmYWxzZTtcblxuICAgIHRoaXMuZGlzYWJsZUlubGluZVJ1bGVzID1cbiAgICAgIHByb3BzLmRpc2FibGVJbmxpbmVSdWxlcyAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gISFwcm9wcy5kaXNhYmxlSW5saW5lUnVsZXNcbiAgICAgICAgOiAhIXRoaXMubm9kZS50cnlHZXRDb250ZXh0KFxuICAgICAgICAgICAgU0VDVVJJVFlfR1JPVVBfRElTQUJMRV9JTkxJTkVfUlVMRVNfQ09OVEVYVF9LRVksXG4gICAgICAgICAgKTtcblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cCA9IG5ldyBzZWN1cml0eUdyb3VwLlNlY3VyaXR5R3JvdXAodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lOiBncm91cE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZ3JvdXBEZXNjcmlwdGlvbixcbiAgICAgIGluZ3Jlc3M6IExhenkuYW55VmFsdWUoXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMubWFwKFxuICAgICAgICAgICAgICBzZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBJbmdyZXNzVG9UZXJyYWZvcm0sXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICApLFxuICAgICAgZWdyZXNzOiBMYXp5LmFueVZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMubWFwKFxuICAgICAgICAgICAgICBzZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBFZ3Jlc3NUb1RlcnJhZm9ybSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHsgb21pdEVtcHR5QXJyYXk6IHRydWUgfSxcbiAgICAgICksXG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwSWQgPSB0aGlzLnNlY3VyaXR5R3JvdXAuaWQ7XG4gICAgdGhpcy5zZWN1cml0eUdyb3VwVnBjSWQgPSB0aGlzLnNlY3VyaXR5R3JvdXAudnBjSWQ7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRFZ3Jlc3NSdWxlKCk7XG4gICAgdGhpcy5hZGREZWZhdWx0SXB2NkVncmVzc1J1bGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRJbmdyZXNzUnVsZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlbW90ZVJ1bGU/OiBib29sZWFuLFxuICApIHtcbiAgICBpZiAoXG4gICAgICAhcGVlci5jYW5JbmxpbmVSdWxlIHx8XG4gICAgICAhY29ubmVjdGlvbi5jYW5JbmxpbmVSdWxlIHx8XG4gICAgICB0aGlzLmRpc2FibGVJbmxpbmVSdWxlc1xuICAgICkge1xuICAgICAgc3VwZXIuYWRkSW5ncmVzc1J1bGUocGVlciwgY29ubmVjdGlvbiwgZGVzY3JpcHRpb24sIHJlbW90ZVJ1bGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZXNjcmlwdGlvbiA9IGBmcm9tICR7cGVlci51bmlxdWVJZH06JHtjb25uZWN0aW9ufWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREaXJlY3RJbmdyZXNzUnVsZSh7XG4gICAgICAuLi5wZWVyLnRvSW5ncmVzc1J1bGVDb25maWcoKSxcbiAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSnNvbigpLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRWdyZXNzUnVsZShcbiAgICBwZWVyOiBJUGVlcixcbiAgICBjb25uZWN0aW9uOiBQb3J0LFxuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlbW90ZVJ1bGU/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCBpc0lwdjYgPSBwZWVyLnRvRWdyZXNzUnVsZUNvbmZpZygpLmhhc093blByb3BlcnR5KFwiY2lkcklwdjZcIik7XG5cbiAgICBpZiAoIWlzSXB2NiAmJiB0aGlzLmFsbG93QWxsT3V0Ym91bmQpIHtcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIFwiYWxsb3dBbGxPdXRib3VuZFwiLCB3ZSBkb24ndCBhZGQgYW55IG1vcmUgcnVsZXMuIFRoZXJlXG4gICAgICAvLyBpcyBvbmx5IG9uZSBydWxlIHdoaWNoIGFsbG93cyBhbGwgdHJhZmZpYyBhbmQgdGhhdCBzdWJzdW1lcyBhbnkgb3RoZXJcbiAgICAgIC8vIHJ1bGUuXG4gICAgICBpZiAoIXJlbW90ZVJ1bGUpIHtcbiAgICAgICAgLy8gV2FybiBvbmx5IGlmIGFkZEVncmVzc1J1bGUoKSB3YXMgZXhwbGljaXRlbHkgY2FsbGVkXG4gICAgICAgIC8vIFwiQGF3cy1jZGsvYXdzLWVjMjppcHY0SWdub3JlRWdyZXNzUnVsZVwiLFxuICAgICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nKFxuICAgICAgICAgIFwiSWdub3JpbmcgRWdyZXNzIHJ1bGUgc2luY2UgJ2FsbG93QWxsT3V0Ym91bmQnIGlzIHNldCB0byB0cnVlOyBUbyBhZGQgY3VzdG9taXplZCBydWxlcywgc2V0IGFsbG93QWxsT3V0Ym91bmQ9ZmFsc2Ugb24gdGhlIFNlY3VyaXR5R3JvdXBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNJcHY2ICYmIHRoaXMuYWxsb3dBbGxJcHY2T3V0Ym91bmQpIHtcbiAgICAgIC8vIEluIHRoZSBjYXNlIG9mIFwiYWxsb3dBbGxJcHY2T3V0Ym91bmRcIiwgd2UgZG9uJ3QgYWRkIGFueSBtb3JlIHJ1bGVzLiBUaGVyZVxuICAgICAgLy8gaXMgb25seSBvbmUgcnVsZSB3aGljaCBhbGxvd3MgYWxsIHRyYWZmaWMgYW5kIHRoYXQgc3Vic3VtZXMgYW55IG90aGVyXG4gICAgICAvLyBydWxlLlxuICAgICAgaWYgKCFyZW1vdGVSdWxlKSB7XG4gICAgICAgIC8vIFdhcm4gb25seSBpZiBhZGRFZ3Jlc3NSdWxlKCkgd2FzIGV4cGxpY2l0ZWx5IGNhbGxlZFxuICAgICAgICAvLyBcIkBhd3MtY2RrL2F3cy1lYzI6aXB2Nklnbm9yZUVncmVzc1J1bGVcIixcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgICBcIklnbm9yaW5nIEVncmVzcyBydWxlIHNpbmNlICdhbGxvd0FsbElwdjZPdXRib3VuZCcgaXMgc2V0IHRvIHRydWU7IFRvIGFkZCBjdXN0b21pemVkIHJ1bGVzLCBzZXQgYWxsb3dBbGxJcHY2T3V0Ym91bmQ9ZmFsc2Ugb24gdGhlIFNlY3VyaXR5R3JvdXBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhcGVlci5jYW5JbmxpbmVSdWxlIHx8XG4gICAgICAhY29ubmVjdGlvbi5jYW5JbmxpbmVSdWxlIHx8XG4gICAgICB0aGlzLmRpc2FibGVJbmxpbmVSdWxlc1xuICAgICkge1xuICAgICAgc3VwZXIuYWRkRWdyZXNzUnVsZShwZWVyLCBjb25uZWN0aW9uLCBkZXNjcmlwdGlvbiwgcmVtb3RlUnVsZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc2NyaXB0aW9uID0gYGZyb20gJHtwZWVyLnVuaXF1ZUlkfToke2Nvbm5lY3Rpb259YDtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0ge1xuICAgICAgLi4ucGVlci50b0VncmVzc1J1bGVDb25maWcoKSxcbiAgICAgIC4uLmNvbm5lY3Rpb24udG9SdWxlSnNvbigpLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgfTtcblxuICAgIGlmIChpc0FsbFRyYWZmaWNSdWxlKHJ1bGUpKSB7XG4gICAgICAvLyBXZSBjYW5ub3QgYWxsb3cgdGhpczsgaWYgc29tZW9uZSBhZGRzIHRoZSBydWxlIGluIHRoaXMgd2F5LCBpdCB3aWxsIGJlXG4gICAgICAvLyByZW1vdmVkIGFnYWluIGlmIHRoZXkgYWRkIG90aGVyIHJ1bGVzLiBXZSBhbHNvIGNhbid0IGF1dG9tYXRpY2FsbHkgc3dpdGNoXG4gICAgICAvLyB0byBcImFsbE91dGJvdW5kPXRydWVcIiBtb2RlLCBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBlbWl0dGVkXG4gICAgICAvLyBFZ3Jlc3NSdWxlIG9iamVjdHMgKHdoaWNoIGNvdW50IGFzIHJ1bGVzIGFkZGVkIGxhdGVyKSBhbmQgdGhlcmUncyBubyB3YXlcbiAgICAgIC8vIHRvIHJlY2FsbCB0aG9zZS4gQmV0dGVyIHRvIHByZXZlbnQgdGhpcyBmb3Igbm93LlxuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBhZGQgYW4gXCJhbGwgdHJhZmZpY1wiIGVncmVzcyBydWxlIGluIHRoaXMgd2F5OyBzZXQgYWxsb3dBbGxPdXRib3VuZD10cnVlIChmb3IgaXB2Nikgb3IgYWxsb3dBbGxJcHY2T3V0Ym91bmQ9dHJ1ZSAoZm9yIGlwdjYpIG9uIHRoZSBTZWN1cml0eUdyb3VwIGluc3RlYWQuJyxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREaXJlY3RFZ3Jlc3NSdWxlKHJ1bGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRpcmVjdCBpbmdyZXNzIHJ1bGVcbiAgICovXG4gIHByaXZhdGUgYWRkRGlyZWN0SW5ncmVzc1J1bGUocnVsZTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzcykge1xuICAgIGNvbnN0IHIgPSBub3JtYWxpemVEaXJlY3RSdWxlKHJ1bGUpO1xuICAgIGlmICghdGhpcy5oYXNJbmdyZXNzUnVsZShyKSkge1xuICAgICAgdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMucHVzaChyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGluZ3Jlc3MgcnVsZSBleGlzdHMgb24gdGhlIGdyb3VwXG4gICAqL1xuICBwcml2YXRlIGhhc0luZ3Jlc3NSdWxlKHJ1bGU6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEluZ3Jlc3MpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMuZmluZEluZGV4KChyKSA9PiBpbmdyZXNzUnVsZXNFcXVhbChyLCBydWxlKSkgPiAtMVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGlyZWN0IGVncmVzcyBydWxlXG4gICAqL1xuICBwcml2YXRlIGFkZERpcmVjdEVncmVzc1J1bGUocnVsZTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwRWdyZXNzKSB7XG4gICAgY29uc3QgciA9IG5vcm1hbGl6ZURpcmVjdFJ1bGUocnVsZSk7XG4gICAgaWYgKCF0aGlzLmhhc0VncmVzc1J1bGUocikpIHtcbiAgICAgIHRoaXMuZGlyZWN0RWdyZXNzUnVsZXMucHVzaChyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGVncmVzcyBydWxlIGV4aXN0cyBvbiB0aGUgZ3JvdXBcbiAgICovXG4gIHByaXZhdGUgaGFzRWdyZXNzUnVsZShydWxlOiBzZWN1cml0eUdyb3VwLlNlY3VyaXR5R3JvdXBFZ3Jlc3MpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kaXJlY3RFZ3Jlc3NSdWxlcy5maW5kSW5kZXgoKHIpID0+IGVncmVzc1J1bGVzRXF1YWwociwgcnVsZSkpID4gLTFcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZGVmYXVsdCBlZ3Jlc3MgcnVsZSB0byB0aGUgc2VjdXJpdHlHcm91cFxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBBV1MgY3JlYXRlcyBhbiBgQUxMT1cgQUxMYCBlZ3Jlc3MgcnVsZSB3aGVuIGNyZWF0aW5nIGEgbmV3IFNlY3VyaXR5IEdyb3VwIGluc2lkZSBvZiBhIFZQQy5cbiAgICogV2hlbiBjcmVhdGluZyBhIG5ldyBTZWN1cml0eSBHcm91cCBpbnNpZGUgYSBWUEMsIFRlcnJhZm9ybSB3aWxsIHJlbW92ZSB0aGlzIGRlZmF1bHQgcnVsZSwgYW5kIHJlcXVpcmVcbiAgICogeW91IHNwZWNpZmljYWxseSByZS1jcmVhdGUgaXQgaWYgeW91IGRlc2lyZSB0aGF0IHJ1bGUuXG4gICAqXG4gICAqIFRoaXMgZGVwZW5kcyBvbiBhbGxvd0FsbE91dGJvdW5kXG4gICAqXG4gICAqIC0gSWYgYWxsb3dBbGxPdXRib3VuZCBpcyB0cnVlLCB3ZSB3aWxsIGFkZCBhbiBhbGxvdyBhbGwgcnVsZS5cbiAgICogLSBJZiBhbGxvd0FsbE91dGJvdW5kIGlzIGZhbHNlLCB3ZSBkb24ndCBkbyBhbnl0aGluZyBzaW5jZSBURiBkb2VzIG5vdCBhZGRcbiAgICogICBhIGRlZmF1bHQgYWxsb3cgYWxsIGlwdjQgcnVsZS5cbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEVncmVzc1J1bGUoKSB7XG4gICAgaWYgKCF0aGlzLmFsbG93QWxsT3V0Ym91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUlubGluZVJ1bGVzKSB7XG4gICAgICBzdXBlci5hZGRFZ3Jlc3NSdWxlKFxuICAgICAgICBBTExfVFJBRkZJQ19QRUVSLFxuICAgICAgICBBTExfVFJBRkZJQ19QT1JULFxuICAgICAgICBBTExPV19BTExfUlVMRS5kZXNjcmlwdGlvbixcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpcmVjdEVncmVzc1J1bGVzLnB1c2goQUxMT1dfQUxMX1JVTEUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBhbGxvdyBhbGwgaXB2NiBlZ3Jlc3MgcnVsZSB0byB0aGUgc2VjdXJpdHlHcm91cFxuICAgKlxuICAgKiBUaGlzIGRlcGVuZHMgb24gYWxsb3dBbGxJcHY2T3V0Ym91bmQ6XG4gICAqXG4gICAqIC0gSWYgYWxsb3dBbGxJcHY2T3V0Ym91bmQgaXMgdHJ1ZSwgd2Ugd2lsbCBhZGQgYW4gYWxsb3cgYWxsIHJ1bGUuXG4gICAqIC0gSWYgYWxsb3dBbGxPdXRib3VuZCBpcyBmYWxzZSwgd2UgZG9uJ3QgZG8gYW55dGhpbmcgc2luY2UgRUMyIGRvZXMgbm90IGFkZFxuICAgKiAgIGEgZGVmYXVsdCBhbGxvdyBhbGwgaXB2NiBydWxlLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGREZWZhdWx0SXB2NkVncmVzc1J1bGUoKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBcIkFsbG93IGFsbCBvdXRib3VuZCBpcHY2IHRyYWZmaWMgYnkgZGVmYXVsdFwiO1xuICAgIGNvbnN0IHBlZXIgPSBQZWVyLmFueUlwdjYoKTtcbiAgICBpZiAodGhpcy5hbGxvd0FsbElwdjZPdXRib3VuZCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZUlubGluZVJ1bGVzKSB7XG4gICAgICAgIHN1cGVyLmFkZEVncmVzc1J1bGUocGVlciwgUG9ydC5hbGxUcmFmZmljKCksIGRlc2NyaXB0aW9uLCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpcmVjdEVncmVzc1J1bGVzLnB1c2goe1xuICAgICAgICAgIHByb3RvY29sOiBcIi0xXCIsXG4gICAgICAgICAgZnJvbVBvcnQ6IDAsXG4gICAgICAgICAgdG9Qb3J0OiAwLFxuICAgICAgICAgIGlwdjZDaWRyQmxvY2tzOiBbcGVlci51bmlxdWVJZF0sXG4gICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpeCB1cCBhIGRpcmVjdCBydWxlIHRvIGhhdmUgZnJvbVBvcnQvdG9Qb3J0IGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0UnVsZShcbiAgcnVsZTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwRWdyZXNzIHwgc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzcyxcbik6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEVncmVzcyB8IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEluZ3Jlc3Mge1xuICAvLyBVbmxpa2Ugc2VjdXJpdHlfZ3JvdXBfKGlufGUpZ3Jlc3NfcnVsZSwgVEYgU2VjdXJpdHkgR3JvdXAgZGlyZWN0IHJ1bGVzXG4gIC8vIGNhbid0IGhhdmUgZnJvbVBvcnQvdG9Qb3J0IHVuZGVmaW5lZC5cbiAgLy8gcmVmczpcbiAgLy8gLSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81Ljg4LjAvZG9jcy9yZXNvdXJjZXMvdnBjX3NlY3VyaXR5X2dyb3VwX2VncmVzc19ydWxlI2lwX3Byb3RvY29sLTFcbiAgLy8gICB2c1xuICAvLyAtIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuODguMC9kb2NzL3Jlc291cmNlcy9zZWN1cml0eV9ncm91cCNwcm90b2NvbC0xXG4gIHJldHVybiB7XG4gICAgLi4ucnVsZSxcbiAgICBmcm9tUG9ydDogcnVsZS5mcm9tUG9ydCA/PyAwLFxuICAgIHRvUG9ydDogcnVsZS50b1BvcnQgPz8gMCxcbiAgfTtcbn1cblxuLyoqXG4gKiBFZ3Jlc3MgcnVsZSB0aGF0IG1hdGNoZXMgYWxsIHRyYWZmaWNcbiAqL1xuY29uc3QgQUxMT1dfQUxMX1JVTEU6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEVncmVzcyA9IHtcbiAgY2lkckJsb2NrczogW1wiMC4wLjAuMC8wXCJdLFxuICBkZXNjcmlwdGlvbjogXCJBbGxvdyBhbGwgb3V0Ym91bmQgdHJhZmZpYyBieSBkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBJZiB5b3Ugc2VsZWN0IGEgcHJvdG9jb2wgb2YgLTEgKHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIGFsbCwgd2hpY2ggaXMgbm90IGEgdmFsaWQgdmFsdWUgaGVyZSksXG4gICAqIHlvdSBtdXN0IHNwZWNpZnkgYSBmcm9tX3BvcnQgYW5kIHRvX3BvcnQgZXF1YWwgdG8gMC5cbiAgICovXG4gIHByb3RvY29sOiBcIi0xXCIsXG4gIGZyb21Qb3J0OiAwLFxuICB0b1BvcnQ6IDAsXG59O1xuXG5jb25zdCBBTExfVFJBRkZJQ19QRUVSID0gUGVlci5hbnlJcHY0KCk7XG5jb25zdCBBTExfVFJBRkZJQ19QT1JUID0gUG9ydC5hbGxUcmFmZmljKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblJ1bGUge1xuICAvKipcbiAgICogVGhlIElQIHByb3RvY29sIG5hbWUgKHRjcCwgdWRwLCBpY21wKSBvciBudW1iZXIgKHNlZSBQcm90b2NvbCBOdW1iZXJzKS5cbiAgICogVXNlIC0xIHRvIHNwZWNpZnkgYWxsIHByb3RvY29scy4gSWYgeW91IHNwZWNpZnkgLTEsIG9yIGEgcHJvdG9jb2wgbnVtYmVyXG4gICAqIG90aGVyIHRoYW4gdGNwLCB1ZHAsIGljbXAsIG9yIDU4IChJQ01QdjYpLCB0cmFmZmljIG9uIGFsbCBwb3J0cyBpc1xuICAgKiBhbGxvd2VkLCByZWdhcmRsZXNzIG9mIGFueSBwb3J0cyB5b3Ugc3BlY2lmeS4gRm9yIHRjcCwgdWRwLCBhbmQgaWNtcCwgeW91XG4gICAqIG11c3Qgc3BlY2lmeSBhIHBvcnQgcmFuZ2UuIEZvciBwcm90b2NvbCA1OCAoSUNNUHY2KSwgeW91IGNhbiBvcHRpb25hbGx5XG4gICAqIHNwZWNpZnkgYSBwb3J0IHJhbmdlOyBpZiB5b3UgZG9uJ3QsIHRyYWZmaWMgZm9yIGFsbCB0eXBlcyBhbmQgY29kZXMgaXNcbiAgICogYWxsb3dlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdGNwXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IHN0cmluZztcblxuICAvKipcbiAgICogU3RhcnQgb2YgcG9ydCByYW5nZSBmb3IgdGhlIFRDUCBhbmQgVURQIHByb3RvY29scywgb3IgYW4gSUNNUCB0eXBlIG51bWJlci5cbiAgICpcbiAgICogSWYgeW91IHNwZWNpZnkgaWNtcCBmb3IgdGhlIElwUHJvdG9jb2wgcHJvcGVydHksIHlvdSBjYW4gc3BlY2lmeVxuICAgKiAtMSBhcyBhIHdpbGRjYXJkIChpLmUuLCBhbnkgSUNNUCB0eXBlIG51bWJlcikuXG4gICAqL1xuICByZWFkb25seSBmcm9tUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmQgb2YgcG9ydCByYW5nZSBmb3IgdGhlIFRDUCBhbmQgVURQIHByb3RvY29scywgb3IgYW4gSUNNUCBjb2RlLlxuICAgKlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBpY21wIGZvciB0aGUgSXBQcm90b2NvbCBwcm9wZXJ0eSwgeW91IGNhbiBzcGVjaWZ5IC0xIGFzIGFcbiAgICogd2lsZGNhcmQgKGkuZS4sIGFueSBJQ01QIGNvZGUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBJZiB0b1BvcnQgaXMgbm90IHNwZWNpZmllZCwgaXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBmcm9tUG9ydC5cbiAgICovXG4gIHJlYWRvbmx5IHRvUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2YgdGhpcyBjb25uZWN0aW9uLiBJdCBpcyBhcHBsaWVkIHRvIGJvdGggdGhlIGluZ3Jlc3MgcnVsZVxuICAgKiBhbmQgdGhlIGVncmVzcyBydWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gaW5ncmVzcyBydWxlcyBmb3IgZXF1YWxpdHkgdGhlIHNhbWUgd2F5IENsb3VkRm9ybWF0aW9uIHdvdWxkIChkaXNjYXJkaW5nIGRlc2NyaXB0aW9uKVxuICovXG5mdW5jdGlvbiBpbmdyZXNzUnVsZXNFcXVhbChcbiAgYTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzcyxcbiAgYjogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwSW5ncmVzcyxcbikge1xuICByZXR1cm4gKFxuICAgIGEuY2lkckJsb2NrcyA9PT0gYi5jaWRyQmxvY2tzICYmXG4gICAgYS5pcHY2Q2lkckJsb2NrcyA9PT0gYi5pcHY2Q2lkckJsb2NrcyAmJlxuICAgIGEuZnJvbVBvcnQgPT09IGIuZnJvbVBvcnQgJiZcbiAgICBhLnRvUG9ydCA9PT0gYi50b1BvcnQgJiZcbiAgICBhLnByb3RvY29sID09PSBiLnByb3RvY29sICYmXG4gICAgYS5wcmVmaXhMaXN0SWRzID09PSBiLnByZWZpeExpc3RJZHMgJiZcbiAgICBhLnNlY3VyaXR5R3JvdXBzID09PSBiLnNlY3VyaXR5R3JvdXBzXG4gICk7XG59XG5cbi8qKlxuICogQ29tcGFyZSB0d28gZWdyZXNzIHJ1bGVzIGZvciBlcXVhbGl0eSB0aGUgc2FtZSB3YXkgQ2xvdWRGb3JtYXRpb24gd291bGQgKGRpc2NhcmRpbmcgZGVzY3JpcHRpb24pXG4gKi9cbmZ1bmN0aW9uIGVncmVzc1J1bGVzRXF1YWwoXG4gIGE6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cEVncmVzcyxcbiAgYjogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwRWdyZXNzLFxuKSB7XG4gIHJldHVybiAoXG4gICAgYS5jaWRyQmxvY2tzID09PSBiLmNpZHJCbG9ja3MgJiZcbiAgICBhLmlwdjZDaWRyQmxvY2tzID09PSBiLmlwdjZDaWRyQmxvY2tzICYmXG4gICAgYS5mcm9tUG9ydCA9PT0gYi5mcm9tUG9ydCAmJlxuICAgIGEudG9Qb3J0ID09PSBiLnRvUG9ydCAmJlxuICAgIGEucHJvdG9jb2wgPT09IGIucHJvdG9jb2wgJiZcbiAgICBhLnByZWZpeExpc3RJZHMgPT09IGIucHJlZml4TGlzdElkcyAmJlxuICAgIGEuc2VjdXJpdHlHcm91cHMgPT09IGIuc2VjdXJpdHlHcm91cHNcbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoaXMgcnVsZSByZWZlcnMgdG8gYWxsIHRyYWZmaWNcbiAqL1xuZnVuY3Rpb24gaXNBbGxUcmFmZmljUnVsZShydWxlOiBhbnkpIHtcbiAgcmV0dXJuIChcbiAgICAocnVsZS5jaWRySXB2NCA9PT0gXCIwLjAuMC4wLzBcIiB8fFxuICAgICAgKHJ1bGUuY2lkckJsb2NrcyAmJiBydWxlLmNpZHJCbG9ja3NbMF0gPT09IFwiMC4wLjAuMC8wXCIpIHx8XG4gICAgICBydWxlLmNpZHJJcHY2ID09PSBcIjo6LzBcIikgJiZcbiAgICBydWxlLmlwUHJvdG9jb2wgPT09IFwiLTFcIlxuICApO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGxvb2tpbmcgdXAgYW4gZXhpc3RpbmcgU2VjdXJpdHlHcm91cC5cbiAqXG4gKiBFaXRoZXIgYHNlY3VyaXR5R3JvdXBOYW1lYCBvciBgc2VjdXJpdHlHcm91cElkYCBoYXMgdG8gYmUgc3BlY2lmaWVkLlxuICovXG5pbnRlcmZhY2UgU2VjdXJpdHlHcm91cExvb2t1cE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlY3VyaXR5IGdyb3VwXG4gICAqXG4gICAqIElmIGdpdmVuLCB3aWxsIGltcG9ydCB0aGUgU2VjdXJpdHlHcm91cCB3aXRoIHRoaXMgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgRG9uJ3QgZmlsdGVyIG9uIHNlY3VyaXR5R3JvdXBOYW1lXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBzZWN1cml0eSBncm91cFxuICAgKlxuICAgKiBJZiBnaXZlbiwgd2lsbCBpbXBvcnQgdGhlIFNlY3VyaXR5R3JvdXAgd2l0aCB0aGlzIElELlxuICAgKlxuICAgKiBAZGVmYXVsdCBEb24ndCBmaWx0ZXIgb24gc2VjdXJpdHlHcm91cElkXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgb2YgdGhlIHNlY3VyaXR5IGdyb3VwXG4gICAqXG4gICAqIElmIGdpdmVuLCB3aWxsIGZpbHRlciB0aGUgU2VjdXJpdHlHcm91cCBiYXNlZCBvbiB0aGUgVlBDLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEb24ndCBmaWx0ZXIgb24gVlBDXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjO1xuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBTZWN1cml0eUdyb3VwIGFzIGFsbG93aW5nIGFsbCBvdXRib3VuZCB0cmFmZmljXG4gICAqXG4gICAqIE9ubHkgaWYgdGhpcyBpcyBzZXQgdG8gZmFsc2Ugd2lsbCBlZ3Jlc3MgcnVsZXMgYmUgYWRkZWQgdG8gdGhpcyBzZWN1cml0eVxuICAgKiBncm91cC4gQmUgYXdhcmUsIHRoaXMgd291bGQgdW5kbyBhbnkgcG90ZW50aWFsIFwiYWxsIG91dGJvdW5kIHRyYWZmaWNcIlxuICAgKiBkZWZhdWx0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhbGxvd0FsbE91dGJvdW5kPzogYm9vbGVhbjsgLy8gVE9ETzogVXNlIEdyaWQgYXMgY29udGV4dFByb3ZpZGVyXG59XG4iXX0=
|