aws-cdk 2.1021.0 → 2.1023.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +60 -20
  2. package/THIRD_PARTY_LICENSES +38 -38
  3. package/build-info.json +2 -2
  4. package/db.json.gz +0 -0
  5. package/lib/api-private.js +1 -1
  6. package/lib/cli/cdk-toolkit.d.ts +1 -0
  7. package/lib/cli/cdk-toolkit.js +25 -2
  8. package/lib/cli/cli-config.js +17 -2
  9. package/lib/cli/cli-type-registry.json +36 -2
  10. package/lib/cli/cli.js +41 -8
  11. package/lib/cli/convert-to-user-input.js +16 -3
  12. package/lib/cli/io-host/cli-io-host.d.ts +10 -5
  13. package/lib/cli/io-host/cli-io-host.js +70 -11
  14. package/lib/cli/parse-command-line-arguments.js +33 -3
  15. package/lib/cli/telemetry/collect-telemetry.d.ts +5 -0
  16. package/lib/cli/telemetry/collect-telemetry.js +15 -0
  17. package/lib/cli/telemetry/error.d.ts +2 -0
  18. package/lib/cli/telemetry/error.js +16 -0
  19. package/lib/cli/telemetry/feature-flags.d.ts +96 -0
  20. package/lib/cli/telemetry/feature-flags.js +103 -0
  21. package/lib/cli/telemetry/installation-id.d.ts +5 -0
  22. package/lib/cli/telemetry/installation-id.js +47 -0
  23. package/lib/cli/telemetry/library-version.d.ts +2 -0
  24. package/lib/cli/telemetry/library-version.js +30 -0
  25. package/lib/cli/telemetry/messages.d.ts +40 -0
  26. package/lib/cli/telemetry/messages.js +65 -0
  27. package/lib/cli/telemetry/sanitation.d.ts +100 -0
  28. package/lib/cli/telemetry/sanitation.js +79 -0
  29. package/lib/cli/telemetry/schema.d.ts +47 -19
  30. package/lib/cli/telemetry/schema.js +10 -1
  31. package/lib/cli/telemetry/session.d.ts +33 -0
  32. package/lib/cli/telemetry/session.js +130 -0
  33. package/lib/cli/user-input.d.ts +43 -2
  34. package/lib/cli/user-input.js +1 -1
  35. package/lib/cli/util/ci.d.ts +5 -0
  36. package/lib/cli/util/ci.js +11 -0
  37. package/lib/cli/util/yargs-helpers.d.ts +1 -1
  38. package/lib/cli/util/yargs-helpers.js +5 -5
  39. package/lib/cli/version.js +1 -2
  40. package/lib/commands/flag-operations.d.ts +5 -0
  41. package/lib/commands/flag-operations.js +210 -0
  42. package/lib/cxapp/cloud-executable.js +41 -26
  43. package/lib/index.js +4196 -2220
  44. package/lib/init-templates/.init-version.json +1 -1
  45. package/package.json +10 -10
  46. package/lib/commands/flags.d.ts +0 -3
  47. package/lib/commands/flags.js +0 -43
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeatureFlag = void 0;
4
+ // TODO: implement this by bundling the source of truth with the CDK CLI
5
+ // We are currently hardcoding these values to facilitate a quicker release.
6
+ /**
7
+ * Enum of all valid CDK feature flag names.
8
+ *
9
+ * These flags are used to control behavior changes in the CDK.
10
+ * For more information, see: https://github.com/aws/aws-cdk/blob/main/packages/aws-cdk-lib/cx-api/FEATURE_FLAGS.md
11
+ */
12
+ var FeatureFlag;
13
+ (function (FeatureFlag) {
14
+ FeatureFlag["CORE_NEW_STYLE_STACK_SYNTHESIS"] = "@aws-cdk/core:newStyleStackSynthesis";
15
+ FeatureFlag["CORE_STACK_RELATIVE_EXPORTS"] = "@aws-cdk/core:stackRelativeExports";
16
+ FeatureFlag["RDS_LOWERCASE_DB_IDENTIFIER"] = "@aws-cdk/aws-rds:lowercaseDbIdentifier";
17
+ FeatureFlag["APIGATEWAY_USAGE_PLAN_KEY_ORDER_INSENSITIVE_ID"] = "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId";
18
+ FeatureFlag["LAMBDA_RECOGNIZE_VERSION_PROPS"] = "@aws-cdk/aws-lambda:recognizeVersionProps";
19
+ FeatureFlag["CLOUDFRONT_DEFAULT_SECURITY_POLICY_TLS_V1_2_2021"] = "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021";
20
+ FeatureFlag["CORE_TARGET_PARTITIONS"] = "@aws-cdk/core:target-partitions";
21
+ FeatureFlag["ECS_SERVICE_EXTENSIONS_ENABLE_DEFAULT_LOG_DRIVER"] = "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver";
22
+ FeatureFlag["EC2_UNIQUE_IMDSV2_TEMPLATE_NAME"] = "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName";
23
+ FeatureFlag["IAM_MINIMIZE_POLICIES"] = "@aws-cdk/aws-iam:minimizePolicies";
24
+ FeatureFlag["CORE_CHECK_SECRET_USAGE"] = "@aws-cdk/core:checkSecretUsage";
25
+ FeatureFlag["LAMBDA_RECOGNIZE_LAYER_VERSION"] = "@aws-cdk/aws-lambda:recognizeLayerVersion";
26
+ FeatureFlag["CORE_VALIDATE_SNAPSHOT_REMOVAL_POLICY"] = "@aws-cdk/core:validateSnapshotRemovalPolicy";
27
+ FeatureFlag["CODEPIPELINE_CROSS_ACCOUNT_KEY_ALIAS_STACK_SAFE_RESOURCE_NAME"] = "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName";
28
+ FeatureFlag["S3_CREATE_DEFAULT_LOGGING_POLICY"] = "@aws-cdk/aws-s3:createDefaultLoggingPolicy";
29
+ FeatureFlag["SNS_SUBSCRIPTIONS_RESTRICT_SQS_DECRYPTION"] = "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption";
30
+ FeatureFlag["ECS_ARN_FORMAT_INCLUDES_CLUSTER_NAME"] = "@aws-cdk/aws-ecs:arnFormatIncludesClusterName";
31
+ FeatureFlag["APIGATEWAY_DISABLE_CLOUD_WATCH_ROLE"] = "@aws-cdk/aws-apigateway:disableCloudWatchRole";
32
+ FeatureFlag["CORE_ENABLE_PARTITION_LITERALS"] = "@aws-cdk/core:enablePartitionLiterals";
33
+ FeatureFlag["ECS_DISABLE_EXPLICIT_DEPLOYMENT_CONTROLLER_FOR_CIRCUIT_BREAKER"] = "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker";
34
+ FeatureFlag["EVENTS_EVENTS_TARGET_QUEUE_SAME_ACCOUNT"] = "@aws-cdk/aws-events:eventsTargetQueueSameAccount";
35
+ FeatureFlag["IAM_IMPORTED_ROLE_STACK_SAFE_DEFAULT_POLICY_NAME"] = "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName";
36
+ FeatureFlag["S3_SERVER_ACCESS_LOGS_USE_BUCKET_POLICY"] = "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy";
37
+ FeatureFlag["CUSTOMRESOURCES_INSTALL_LATEST_AWS_SDK_DEFAULT"] = "@aws-cdk/customresources:installLatestAwsSdkDefault";
38
+ FeatureFlag["ROUTE53_PATTERNS_USE_CERTIFICATE"] = "@aws-cdk/aws-route53-patterns:useCertificate";
39
+ FeatureFlag["CODEDEPLOY_REMOVE_ALARMS_FROM_DEPLOYMENT_GROUP"] = "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup";
40
+ FeatureFlag["RDS_DATABASE_PROXY_UNIQUE_RESOURCE_NAME"] = "@aws-cdk/aws-rds:databaseProxyUniqueResourceName";
41
+ FeatureFlag["APIGATEWAY_AUTHORIZER_CHANGE_DEPLOYMENT_LOGICAL_ID"] = "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId";
42
+ FeatureFlag["EC2_LAUNCH_TEMPLATE_DEFAULT_USER_DATA"] = "@aws-cdk/aws-ec2:launchTemplateDefaultUserData";
43
+ FeatureFlag["SECRETSMANAGER_USE_ATTACHED_SECRET_RESOURCE_POLICY_FOR_SECRET_TARGET_ATTACHMENTS"] = "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments";
44
+ FeatureFlag["REDSHIFT_COLUMN_ID"] = "@aws-cdk/aws-redshift:columnId";
45
+ FeatureFlag["STEPFUNCTIONS_TASKS_ENABLE_EMR_SERVICE_POLICY_V2"] = "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2";
46
+ FeatureFlag["APIGATEWAY_REQUEST_VALIDATOR_UNIQUE_ID"] = "@aws-cdk/aws-apigateway:requestValidatorUniqueId";
47
+ FeatureFlag["EC2_RESTRICT_DEFAULT_SECURITY_GROUP"] = "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup";
48
+ FeatureFlag["KMS_ALIAS_NAME_REF"] = "@aws-cdk/aws-kms:aliasNameRef";
49
+ FeatureFlag["CORE_INCLUDE_PREFIX_IN_UNIQUE_NAME_GENERATION"] = "@aws-cdk/core:includePrefixInUniqueNameGeneration";
50
+ FeatureFlag["AUTOSCALING_GENERATE_LAUNCH_TEMPLATE_INSTEAD_OF_LAUNCH_CONFIG"] = "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig";
51
+ FeatureFlag["OPENSEARCHSERVICE_ENABLE_OPENSEARCH_MULTI_AZ_WITH_STANDBY"] = "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby";
52
+ FeatureFlag["EFS_DENY_ANONYMOUS_ACCESS"] = "@aws-cdk/aws-efs:denyAnonymousAccess";
53
+ FeatureFlag["EFS_MOUNT_TARGET_ORDER_INSENSITIVE_LOGICAL_ID"] = "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId";
54
+ FeatureFlag["LAMBDA_NODEJS_USE_LATEST_RUNTIME_VERSION"] = "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion";
55
+ FeatureFlag["APPSYNC_USE_ARN_FOR_SOURCE_API_ASSOCIATION_IDENTIFIER"] = "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier";
56
+ FeatureFlag["RDS_AURORA_CLUSTER_CHANGE_SCOPE_OF_INSTANCE_PARAMETER_GROUP_WITH_EACH_PARAMETERS"] = "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters";
57
+ FeatureFlag["RDS_PREVENT_RENDERING_DEPRECATED_CREDENTIALS"] = "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials";
58
+ FeatureFlag["CODEPIPELINE_ACTIONS_USE_NEW_DEFAULT_BRANCH_FOR_CODE_COMMIT_SOURCE"] = "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource";
59
+ FeatureFlag["CLOUDWATCH_ACTIONS_CHANGE_LAMBDA_PERMISSION_LOGICAL_ID_FOR_LAMBDA_ACTION"] = "@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction";
60
+ FeatureFlag["CODEPIPELINE_CROSS_ACCOUNT_KEYS_DEFAULT_VALUE_TO_FALSE"] = "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse";
61
+ FeatureFlag["CODEPIPELINE_DEFAULT_PIPELINE_TYPE_TO_V2"] = "@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2";
62
+ FeatureFlag["KMS_REDUCE_CROSS_ACCOUNT_REGION_POLICY_SCOPE"] = "@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope";
63
+ FeatureFlag["EKS_NODEGROUP_NAME_ATTRIBUTE"] = "@aws-cdk/aws-eks:nodegroupNameAttribute";
64
+ FeatureFlag["EC2_EBS_DEFAULT_GP3_VOLUME"] = "@aws-cdk/aws-ec2:ebsDefaultGp3Volume";
65
+ FeatureFlag["PIPELINES_REDUCE_ASSET_ROLE_TRUST_SCOPE"] = "@aws-cdk/pipelines:reduceAssetRoleTrustScope";
66
+ FeatureFlag["ECS_REMOVE_DEFAULT_DEPLOYMENT_ALARM"] = "@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm";
67
+ FeatureFlag["CUSTOM_RESOURCES_LOG_API_RESPONSE_DATA_PROPERTY_TRUE_DEFAULT"] = "@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault";
68
+ FeatureFlag["S3_KEEP_NOTIFICATION_IN_IMPORTED_BUCKET"] = "@aws-cdk/aws-s3:keepNotificationInImportedBucket";
69
+ FeatureFlag["STEPFUNCTIONS_TASKS_USE_NEW_S3_URI_PARAMETERS_FOR_BEDROCK_INVOKE_MODEL_TASK"] = "@aws-cdk/aws-stepfunctions-tasks:useNewS3UriParametersForBedrockInvokeModelTask";
70
+ FeatureFlag["ECS_REDUCE_EC2_FARGATE_CLOUD_WATCH_PERMISSIONS"] = "@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions";
71
+ FeatureFlag["EC2_EC2_SUM_TIMEOUT_ENABLED"] = "@aws-cdk/aws-ec2:ec2SumTimeoutEnabled";
72
+ FeatureFlag["APPSYNC_APP_SYNC_GRAPHQL_API_SCOPE_LAMBDA_PERMISSION"] = "@aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission";
73
+ FeatureFlag["LAMBDA_NODEJS_SDK_V3_EXCLUDE_SMITHY_PACKAGES"] = "@aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages";
74
+ FeatureFlag["RDS_SET_CORRECT_VALUE_FOR_DATABASE_INSTANCE_READ_REPLICA_INSTANCE_RESOURCE_ID"] = "@aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId";
75
+ FeatureFlag["CORE_CFN_INCLUDE_REJECT_COMPLEX_RESOURCE_UPDATE_CREATE_POLICY_INTRINSICS"] = "@aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics";
76
+ FeatureFlag["STEPFUNCTIONS_TASKS_FIX_RUN_ECS_TASK_POLICY"] = "@aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy";
77
+ FeatureFlag["DYNAMODB_RESOURCE_POLICY_PER_REPLICA"] = "@aws-cdk/aws-dynamodb:resourcePolicyPerReplica";
78
+ FeatureFlag["EC2_BASTION_HOST_USE_AMAZON_LINUX_2023_BY_DEFAULT"] = "@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault";
79
+ FeatureFlag["CORE_ASPECT_STABILIZATION"] = "@aws-cdk/core:aspectStabilization";
80
+ FeatureFlag["ROUTE53_TARGETS_USER_POOL_DOMAIN_NAME_METHOD_WITHOUT_CUSTOM_RESOURCE"] = "@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource";
81
+ FeatureFlag["ECS_DISABLE_ECS_IMDS_BLOCKING"] = "@aws-cdk/aws-ecs:disableEcsImdsBlocking";
82
+ FeatureFlag["ECS_ENABLE_IMDS_BLOCKING_DEPRECATED_FEATURE"] = "@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature";
83
+ FeatureFlag["ELASTICLOADBALANCINGV2_ALB_DUALSTACK_WITHOUT_PUBLIC_IPV4_SECURITY_GROUP_RULES_DEFAULT"] = "@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault";
84
+ FeatureFlag["IAM_OIDC_REJECT_UNAUTHORIZED_CONNECTIONS"] = "@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections";
85
+ FeatureFlag["CORE_ENABLE_ADDITIONAL_METADATA_COLLECTION"] = "@aws-cdk/core:enableAdditionalMetadataCollection";
86
+ FeatureFlag["LAMBDA_CREATE_NEW_POLICIES_WITH_ADD_TO_ROLE_POLICY"] = "@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy";
87
+ FeatureFlag["S3_SET_UNIQUE_REPLICATION_ROLE_NAME"] = "@aws-cdk/aws-s3:setUniqueReplicationRoleName";
88
+ FeatureFlag["PIPELINES_REDUCE_STAGE_ROLE_TRUST_SCOPE"] = "@aws-cdk/pipelines:reduceStageRoleTrustScope";
89
+ FeatureFlag["EVENTS_REQUIRE_EVENT_BUS_POLICY_SID"] = "@aws-cdk/aws-events:requireEventBusPolicySid";
90
+ FeatureFlag["DYNAMODB_RETAIN_TABLE_REPLICA"] = "@aws-cdk/aws-dynamodb:retainTableReplica";
91
+ FeatureFlag["COGNITO_LOG_USER_POOL_CLIENT_SECRET_VALUE"] = "@aws-cdk/cognito:logUserPoolClientSecretValue";
92
+ FeatureFlag["STEPFUNCTIONS_USE_DISTRIBUTED_MAP_RESULT_WRITER_V2"] = "@aws-cdk/aws-stepfunctions:useDistributedMapResultWriterV2";
93
+ FeatureFlag["PIPELINES_REDUCE_CROSS_ACCOUNT_ACTION_ROLE_TRUST_SCOPE"] = "@aws-cdk/pipelines:reduceCrossAccountActionRoleTrustScope";
94
+ FeatureFlag["CORE_ASPECT_PRIORITIES_MUTATING"] = "@aws-cdk/core:aspectPrioritiesMutating";
95
+ FeatureFlag["S3_NOTIFICATIONS_ADD_S3_TRUST_KEY_POLICY_FOR_SNS_SUBSCRIPTIONS"] = "@aws-cdk/s3-notifications:addS3TrustKeyPolicyForSnsSubscriptions";
96
+ FeatureFlag["EC2_ALPHA_USE_RESOURCE_ID_FOR_VPC_V2_MIGRATION"] = "@aws-cdk/aws-ec2-alpha:useResourceIdForVpcV2Migration";
97
+ FeatureFlag["EC2_REQUIRE_PRIVATE_SUBNETS_FOR_EGRESS_ONLY_INTERNET_GATEWAY"] = "@aws-cdk/aws-ec2:requirePrivateSubnetsForEgressOnlyInternetGateway";
98
+ FeatureFlag["S3_PUBLIC_ACCESS_BLOCKED_BY_DEFAULT"] = "@aws-cdk/aws-s3:publicAccessBlockedByDefault";
99
+ FeatureFlag["LAMBDA_USE_CDK_MANAGED_LOG_GROUP"] = "@aws-cdk/aws-lambda:useCdkManagedLogGroup";
100
+ FeatureFlag["KMS_APPLY_IMPORTED_ALIAS_PERMISSIONS_TO_PRINCIPAL"] = "@aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal";
101
+ FeatureFlag["CORE_EXPLICIT_STACK_TAGS"] = "@aws-cdk/core:explicitStackTags";
102
+ })(FeatureFlag || (exports.FeatureFlag = FeatureFlag = {}));
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1mbGFncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImZlYXR1cmUtZmxhZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsd0VBQXdFO0FBQ3hFLDRFQUE0RTtBQUM1RTs7Ozs7R0FLRztBQUNILElBQVksV0F5Rlg7QUF6RkQsV0FBWSxXQUFXO0lBQ3JCLHNGQUF1RSxDQUFBO0lBQ3ZFLGlGQUFrRSxDQUFBO0lBQ2xFLHFGQUFzRSxDQUFBO0lBQ3RFLHdIQUF5RyxDQUFBO0lBQ3pHLDJGQUE0RSxDQUFBO0lBQzVFLDZIQUE4RyxDQUFBO0lBQzlHLHlFQUEwRCxDQUFBO0lBQzFELHFJQUFzSCxDQUFBO0lBQ3RILDRGQUE2RSxDQUFBO0lBQzdFLDBFQUEyRCxDQUFBO0lBQzNELHlFQUEwRCxDQUFBO0lBQzFELDJGQUE0RSxDQUFBO0lBQzVFLG9HQUFxRixDQUFBO0lBQ3JGLG9KQUFxSSxDQUFBO0lBQ3JJLDhGQUErRSxDQUFBO0lBQy9FLGtIQUFtRyxDQUFBO0lBQ25HLHFHQUFzRixDQUFBO0lBQ3RGLG9HQUFxRixDQUFBO0lBQ3JGLHVGQUF3RSxDQUFBO0lBQ3hFLHVKQUF3SSxDQUFBO0lBQ3hJLDJHQUE0RixDQUFBO0lBQzVGLDJIQUE0RyxDQUFBO0lBQzVHLDBHQUEyRixDQUFBO0lBQzNGLHFIQUFzRyxDQUFBO0lBQ3RHLGdHQUFpRixDQUFBO0lBQ2pGLHlIQUEwRyxDQUFBO0lBQzFHLDJHQUE0RixDQUFBO0lBQzVGLGlJQUFrSCxDQUFBO0lBQ2xILHVHQUF3RixDQUFBO0lBQ3hGLHlMQUEwSyxDQUFBO0lBQzFLLG9FQUFxRCxDQUFBO0lBQ3JELDZIQUE4RyxDQUFBO0lBQzlHLDBHQUEyRixDQUFBO0lBQzNGLG9HQUFxRixDQUFBO0lBQ3JGLG1FQUFvRCxDQUFBO0lBQ3BELGtIQUFtRyxDQUFBO0lBQ25HLHFKQUFzSSxDQUFBO0lBQ3RJLDhJQUErSCxDQUFBO0lBQy9ILGlGQUFrRSxDQUFBO0lBQ2xFLHNIQUF1RyxDQUFBO0lBQ3ZHLDhHQUErRixDQUFBO0lBQy9GLHFJQUFzSCxDQUFBO0lBQ3RILHVMQUF3SyxDQUFBO0lBQ3hLLHNIQUF1RyxDQUFBO0lBQ3ZHLDhKQUErSSxDQUFBO0lBQy9JLDBLQUEySixDQUFBO0lBQzNKLHVJQUF3SCxDQUFBO0lBQ3hILDZHQUE4RixDQUFBO0lBQzlGLG9IQUFxRyxDQUFBO0lBQ3JHLHVGQUF3RSxDQUFBO0lBQ3hFLGtGQUFtRSxDQUFBO0lBQ25FLHVHQUF3RixDQUFBO0lBQ3hGLG9HQUFxRixDQUFBO0lBQ3JGLCtJQUFnSSxDQUFBO0lBQ2hJLDJHQUE0RixDQUFBO0lBQzVGLDhLQUErSixDQUFBO0lBQy9KLHdIQUF5RyxDQUFBO0lBQ3pHLG9GQUFxRSxDQUFBO0lBQ3JFLG1JQUFvSCxDQUFBO0lBQ3BILHFIQUFzRyxDQUFBO0lBQ3RHLGlMQUFrSyxDQUFBO0lBQ2xLLHFLQUFzSixDQUFBO0lBQ3RKLG1IQUFvRyxDQUFBO0lBQ3BHLHNHQUF1RixDQUFBO0lBQ3ZGLDRIQUE2RyxDQUFBO0lBQzdHLDhFQUErRCxDQUFBO0lBQy9ELGtLQUFtSixDQUFBO0lBQ25KLHdGQUF5RSxDQUFBO0lBQ3pFLG1IQUFvRyxDQUFBO0lBQ3BHLG1NQUFvTCxDQUFBO0lBQ3BMLDhHQUErRixDQUFBO0lBQy9GLDhHQUErRixDQUFBO0lBQy9GLDhIQUErRyxDQUFBO0lBQy9HLG1HQUFvRixDQUFBO0lBQ3BGLHVHQUF3RixDQUFBO0lBQ3hGLG1HQUFvRixDQUFBO0lBQ3BGLHlGQUEwRSxDQUFBO0lBQzFFLDBHQUEyRixDQUFBO0lBQzNGLGdJQUFpSCxDQUFBO0lBQ2pILG1JQUFvSCxDQUFBO0lBQ3BILHlGQUEwRSxDQUFBO0lBQzFFLGtKQUFtSSxDQUFBO0lBQ25JLHVIQUF3RyxDQUFBO0lBQ3hHLGtKQUFtSSxDQUFBO0lBQ25JLG1HQUFvRixDQUFBO0lBQ3BGLDZGQUE4RSxDQUFBO0lBQzlFLDhIQUErRyxDQUFBO0lBQy9HLDJFQUE0RCxDQUFBO0FBQzlELENBQUMsRUF6RlcsV0FBVywyQkFBWCxXQUFXLFFBeUZ0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IGltcGxlbWVudCB0aGlzIGJ5IGJ1bmRsaW5nIHRoZSBzb3VyY2Ugb2YgdHJ1dGggd2l0aCB0aGUgQ0RLIENMSVxuLy8gV2UgYXJlIGN1cnJlbnRseSBoYXJkY29kaW5nIHRoZXNlIHZhbHVlcyB0byBmYWNpbGl0YXRlIGEgcXVpY2tlciByZWxlYXNlLlxuLyoqXG4gKiBFbnVtIG9mIGFsbCB2YWxpZCBDREsgZmVhdHVyZSBmbGFnIG5hbWVzLlxuICpcbiAqIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGNvbnRyb2wgYmVoYXZpb3IgY2hhbmdlcyBpbiB0aGUgQ0RLLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvbWFpbi9wYWNrYWdlcy9hd3MtY2RrLWxpYi9jeC1hcGkvRkVBVFVSRV9GTEFHUy5tZFxuICovXG5leHBvcnQgZW51bSBGZWF0dXJlRmxhZyB7XG4gIENPUkVfTkVXX1NUWUxFX1NUQUNLX1NZTlRIRVNJUyA9ICdAYXdzLWNkay9jb3JlOm5ld1N0eWxlU3RhY2tTeW50aGVzaXMnLFxuICBDT1JFX1NUQUNLX1JFTEFUSVZFX0VYUE9SVFMgPSAnQGF3cy1jZGsvY29yZTpzdGFja1JlbGF0aXZlRXhwb3J0cycsXG4gIFJEU19MT1dFUkNBU0VfREJfSURFTlRJRklFUiA9ICdAYXdzLWNkay9hd3MtcmRzOmxvd2VyY2FzZURiSWRlbnRpZmllcicsXG4gIEFQSUdBVEVXQVlfVVNBR0VfUExBTl9LRVlfT1JERVJfSU5TRU5TSVRJVkVfSUQgPSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXk6dXNhZ2VQbGFuS2V5T3JkZXJJbnNlbnNpdGl2ZUlkJyxcbiAgTEFNQkRBX1JFQ09HTklaRV9WRVJTSU9OX1BST1BTID0gJ0Bhd3MtY2RrL2F3cy1sYW1iZGE6cmVjb2duaXplVmVyc2lvblByb3BzJyxcbiAgQ0xPVURGUk9OVF9ERUZBVUxUX1NFQ1VSSVRZX1BPTElDWV9UTFNfVjFfMl8yMDIxID0gJ0Bhd3MtY2RrL2F3cy1jbG91ZGZyb250OmRlZmF1bHRTZWN1cml0eVBvbGljeVRMU3YxLjJfMjAyMScsXG4gIENPUkVfVEFSR0VUX1BBUlRJVElPTlMgPSAnQGF3cy1jZGsvY29yZTp0YXJnZXQtcGFydGl0aW9ucycsXG4gIEVDU19TRVJWSUNFX0VYVEVOU0lPTlNfRU5BQkxFX0RFRkFVTFRfTE9HX0RSSVZFUiA9ICdAYXdzLWNkay1jb250YWluZXJzL2Vjcy1zZXJ2aWNlLWV4dGVuc2lvbnM6ZW5hYmxlRGVmYXVsdExvZ0RyaXZlcicsXG4gIEVDMl9VTklRVUVfSU1EU1YyX1RFTVBMQVRFX05BTUUgPSAnQGF3cy1jZGsvYXdzLWVjMjp1bmlxdWVJbWRzdjJUZW1wbGF0ZU5hbWUnLFxuICBJQU1fTUlOSU1JWkVfUE9MSUNJRVMgPSAnQGF3cy1jZGsvYXdzLWlhbTptaW5pbWl6ZVBvbGljaWVzJyxcbiAgQ09SRV9DSEVDS19TRUNSRVRfVVNBR0UgPSAnQGF3cy1jZGsvY29yZTpjaGVja1NlY3JldFVzYWdlJyxcbiAgTEFNQkRBX1JFQ09HTklaRV9MQVlFUl9WRVJTSU9OID0gJ0Bhd3MtY2RrL2F3cy1sYW1iZGE6cmVjb2duaXplTGF5ZXJWZXJzaW9uJyxcbiAgQ09SRV9WQUxJREFURV9TTkFQU0hPVF9SRU1PVkFMX1BPTElDWSA9ICdAYXdzLWNkay9jb3JlOnZhbGlkYXRlU25hcHNob3RSZW1vdmFsUG9saWN5JyxcbiAgQ09ERVBJUEVMSU5FX0NST1NTX0FDQ09VTlRfS0VZX0FMSUFTX1NUQUNLX1NBRkVfUkVTT1VSQ0VfTkFNRSA9ICdAYXdzLWNkay9hd3MtY29kZXBpcGVsaW5lOmNyb3NzQWNjb3VudEtleUFsaWFzU3RhY2tTYWZlUmVzb3VyY2VOYW1lJyxcbiAgUzNfQ1JFQVRFX0RFRkFVTFRfTE9HR0lOR19QT0xJQ1kgPSAnQGF3cy1jZGsvYXdzLXMzOmNyZWF0ZURlZmF1bHRMb2dnaW5nUG9saWN5JyxcbiAgU05TX1NVQlNDUklQVElPTlNfUkVTVFJJQ1RfU1FTX0RFQ1JZUFRJT04gPSAnQGF3cy1jZGsvYXdzLXNucy1zdWJzY3JpcHRpb25zOnJlc3RyaWN0U3FzRGVzY3J5cHRpb24nLFxuICBFQ1NfQVJOX0ZPUk1BVF9JTkNMVURFU19DTFVTVEVSX05BTUUgPSAnQGF3cy1jZGsvYXdzLWVjczphcm5Gb3JtYXRJbmNsdWRlc0NsdXN0ZXJOYW1lJyxcbiAgQVBJR0FURVdBWV9ESVNBQkxFX0NMT1VEX1dBVENIX1JPTEUgPSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXk6ZGlzYWJsZUNsb3VkV2F0Y2hSb2xlJyxcbiAgQ09SRV9FTkFCTEVfUEFSVElUSU9OX0xJVEVSQUxTID0gJ0Bhd3MtY2RrL2NvcmU6ZW5hYmxlUGFydGl0aW9uTGl0ZXJhbHMnLFxuICBFQ1NfRElTQUJMRV9FWFBMSUNJVF9ERVBMT1lNRU5UX0NPTlRST0xMRVJfRk9SX0NJUkNVSVRfQlJFQUtFUiA9ICdAYXdzLWNkay9hd3MtZWNzOmRpc2FibGVFeHBsaWNpdERlcGxveW1lbnRDb250cm9sbGVyRm9yQ2lyY3VpdEJyZWFrZXInLFxuICBFVkVOVFNfRVZFTlRTX1RBUkdFVF9RVUVVRV9TQU1FX0FDQ09VTlQgPSAnQGF3cy1jZGsvYXdzLWV2ZW50czpldmVudHNUYXJnZXRRdWV1ZVNhbWVBY2NvdW50JyxcbiAgSUFNX0lNUE9SVEVEX1JPTEVfU1RBQ0tfU0FGRV9ERUZBVUxUX1BPTElDWV9OQU1FID0gJ0Bhd3MtY2RrL2F3cy1pYW06aW1wb3J0ZWRSb2xlU3RhY2tTYWZlRGVmYXVsdFBvbGljeU5hbWUnLFxuICBTM19TRVJWRVJfQUNDRVNTX0xPR1NfVVNFX0JVQ0tFVF9QT0xJQ1kgPSAnQGF3cy1jZGsvYXdzLXMzOnNlcnZlckFjY2Vzc0xvZ3NVc2VCdWNrZXRQb2xpY3knLFxuICBDVVNUT01SRVNPVVJDRVNfSU5TVEFMTF9MQVRFU1RfQVdTX1NES19ERUZBVUxUID0gJ0Bhd3MtY2RrL2N1c3RvbXJlc291cmNlczppbnN0YWxsTGF0ZXN0QXdzU2RrRGVmYXVsdCcsXG4gIFJPVVRFNTNfUEFUVEVSTlNfVVNFX0NFUlRJRklDQVRFID0gJ0Bhd3MtY2RrL2F3cy1yb3V0ZTUzLXBhdHRlcm5zOnVzZUNlcnRpZmljYXRlJyxcbiAgQ09ERURFUExPWV9SRU1PVkVfQUxBUk1TX0ZST01fREVQTE9ZTUVOVF9HUk9VUCA9ICdAYXdzLWNkay9hd3MtY29kZWRlcGxveTpyZW1vdmVBbGFybXNGcm9tRGVwbG95bWVudEdyb3VwJyxcbiAgUkRTX0RBVEFCQVNFX1BST1hZX1VOSVFVRV9SRVNPVVJDRV9OQU1FID0gJ0Bhd3MtY2RrL2F3cy1yZHM6ZGF0YWJhc2VQcm94eVVuaXF1ZVJlc291cmNlTmFtZScsXG4gIEFQSUdBVEVXQVlfQVVUSE9SSVpFUl9DSEFOR0VfREVQTE9ZTUVOVF9MT0dJQ0FMX0lEID0gJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5OmF1dGhvcml6ZXJDaGFuZ2VEZXBsb3ltZW50TG9naWNhbElkJyxcbiAgRUMyX0xBVU5DSF9URU1QTEFURV9ERUZBVUxUX1VTRVJfREFUQSA9ICdAYXdzLWNkay9hd3MtZWMyOmxhdW5jaFRlbXBsYXRlRGVmYXVsdFVzZXJEYXRhJyxcbiAgU0VDUkVUU01BTkFHRVJfVVNFX0FUVEFDSEVEX1NFQ1JFVF9SRVNPVVJDRV9QT0xJQ1lfRk9SX1NFQ1JFVF9UQVJHRVRfQVRUQUNITUVOVFMgPSAnQGF3cy1jZGsvYXdzLXNlY3JldHNtYW5hZ2VyOnVzZUF0dGFjaGVkU2VjcmV0UmVzb3VyY2VQb2xpY3lGb3JTZWNyZXRUYXJnZXRBdHRhY2htZW50cycsXG4gIFJFRFNISUZUX0NPTFVNTl9JRCA9ICdAYXdzLWNkay9hd3MtcmVkc2hpZnQ6Y29sdW1uSWQnLFxuICBTVEVQRlVOQ1RJT05TX1RBU0tTX0VOQUJMRV9FTVJfU0VSVklDRV9QT0xJQ1lfVjIgPSAnQGF3cy1jZGsvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3M6ZW5hYmxlRW1yU2VydmljZVBvbGljeVYyJyxcbiAgQVBJR0FURVdBWV9SRVFVRVNUX1ZBTElEQVRPUl9VTklRVUVfSUQgPSAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXk6cmVxdWVzdFZhbGlkYXRvclVuaXF1ZUlkJyxcbiAgRUMyX1JFU1RSSUNUX0RFRkFVTFRfU0VDVVJJVFlfR1JPVVAgPSAnQGF3cy1jZGsvYXdzLWVjMjpyZXN0cmljdERlZmF1bHRTZWN1cml0eUdyb3VwJyxcbiAgS01TX0FMSUFTX05BTUVfUkVGID0gJ0Bhd3MtY2RrL2F3cy1rbXM6YWxpYXNOYW1lUmVmJyxcbiAgQ09SRV9JTkNMVURFX1BSRUZJWF9JTl9VTklRVUVfTkFNRV9HRU5FUkFUSU9OID0gJ0Bhd3MtY2RrL2NvcmU6aW5jbHVkZVByZWZpeEluVW5pcXVlTmFtZUdlbmVyYXRpb24nLFxuICBBVVRPU0NBTElOR19HRU5FUkFURV9MQVVOQ0hfVEVNUExBVEVfSU5TVEVBRF9PRl9MQVVOQ0hfQ09ORklHID0gJ0Bhd3MtY2RrL2F3cy1hdXRvc2NhbGluZzpnZW5lcmF0ZUxhdW5jaFRlbXBsYXRlSW5zdGVhZE9mTGF1bmNoQ29uZmlnJyxcbiAgT1BFTlNFQVJDSFNFUlZJQ0VfRU5BQkxFX09QRU5TRUFSQ0hfTVVMVElfQVpfV0lUSF9TVEFOREJZID0gJ0Bhd3MtY2RrL2F3cy1vcGVuc2VhcmNoc2VydmljZTplbmFibGVPcGVuc2VhcmNoTXVsdGlBeldpdGhTdGFuZGJ5JyxcbiAgRUZTX0RFTllfQU5PTllNT1VTX0FDQ0VTUyA9ICdAYXdzLWNkay9hd3MtZWZzOmRlbnlBbm9ueW1vdXNBY2Nlc3MnLFxuICBFRlNfTU9VTlRfVEFSR0VUX09SREVSX0lOU0VOU0lUSVZFX0xPR0lDQUxfSUQgPSAnQGF3cy1jZGsvYXdzLWVmczptb3VudFRhcmdldE9yZGVySW5zZW5zaXRpdmVMb2dpY2FsSWQnLFxuICBMQU1CREFfTk9ERUpTX1VTRV9MQVRFU1RfUlVOVElNRV9WRVJTSU9OID0gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtbm9kZWpzOnVzZUxhdGVzdFJ1bnRpbWVWZXJzaW9uJyxcbiAgQVBQU1lOQ19VU0VfQVJOX0ZPUl9TT1VSQ0VfQVBJX0FTU09DSUFUSU9OX0lERU5USUZJRVIgPSAnQGF3cy1jZGsvYXdzLWFwcHN5bmM6dXNlQXJuRm9yU291cmNlQXBpQXNzb2NpYXRpb25JZGVudGlmaWVyJyxcbiAgUkRTX0FVUk9SQV9DTFVTVEVSX0NIQU5HRV9TQ09QRV9PRl9JTlNUQU5DRV9QQVJBTUVURVJfR1JPVVBfV0lUSF9FQUNIX1BBUkFNRVRFUlMgPSAnQGF3cy1jZGsvYXdzLXJkczphdXJvcmFDbHVzdGVyQ2hhbmdlU2NvcGVPZkluc3RhbmNlUGFyYW1ldGVyR3JvdXBXaXRoRWFjaFBhcmFtZXRlcnMnLFxuICBSRFNfUFJFVkVOVF9SRU5ERVJJTkdfREVQUkVDQVRFRF9DUkVERU5USUFMUyA9ICdAYXdzLWNkay9hd3MtcmRzOnByZXZlbnRSZW5kZXJpbmdEZXByZWNhdGVkQ3JlZGVudGlhbHMnLFxuICBDT0RFUElQRUxJTkVfQUNUSU9OU19VU0VfTkVXX0RFRkFVTFRfQlJBTkNIX0ZPUl9DT0RFX0NPTU1JVF9TT1VSQ0UgPSAnQGF3cy1jZGsvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zOnVzZU5ld0RlZmF1bHRCcmFuY2hGb3JDb2RlQ29tbWl0U291cmNlJyxcbiAgQ0xPVURXQVRDSF9BQ1RJT05TX0NIQU5HRV9MQU1CREFfUEVSTUlTU0lPTl9MT0dJQ0FMX0lEX0ZPUl9MQU1CREFfQUNUSU9OID0gJ0Bhd3MtY2RrL2F3cy1jbG91ZHdhdGNoLWFjdGlvbnM6Y2hhbmdlTGFtYmRhUGVybWlzc2lvbkxvZ2ljYWxJZEZvckxhbWJkYUFjdGlvbicsXG4gIENPREVQSVBFTElORV9DUk9TU19BQ0NPVU5UX0tFWVNfREVGQVVMVF9WQUxVRV9UT19GQUxTRSA9ICdAYXdzLWNkay9hd3MtY29kZXBpcGVsaW5lOmNyb3NzQWNjb3VudEtleXNEZWZhdWx0VmFsdWVUb0ZhbHNlJyxcbiAgQ09ERVBJUEVMSU5FX0RFRkFVTFRfUElQRUxJTkVfVFlQRV9UT19WMiA9ICdAYXdzLWNkay9hd3MtY29kZXBpcGVsaW5lOmRlZmF1bHRQaXBlbGluZVR5cGVUb1YyJyxcbiAgS01TX1JFRFVDRV9DUk9TU19BQ0NPVU5UX1JFR0lPTl9QT0xJQ1lfU0NPUEUgPSAnQGF3cy1jZGsvYXdzLWttczpyZWR1Y2VDcm9zc0FjY291bnRSZWdpb25Qb2xpY3lTY29wZScsXG4gIEVLU19OT0RFR1JPVVBfTkFNRV9BVFRSSUJVVEUgPSAnQGF3cy1jZGsvYXdzLWVrczpub2RlZ3JvdXBOYW1lQXR0cmlidXRlJyxcbiAgRUMyX0VCU19ERUZBVUxUX0dQM19WT0xVTUUgPSAnQGF3cy1jZGsvYXdzLWVjMjplYnNEZWZhdWx0R3AzVm9sdW1lJyxcbiAgUElQRUxJTkVTX1JFRFVDRV9BU1NFVF9ST0xFX1RSVVNUX1NDT1BFID0gJ0Bhd3MtY2RrL3BpcGVsaW5lczpyZWR1Y2VBc3NldFJvbGVUcnVzdFNjb3BlJyxcbiAgRUNTX1JFTU9WRV9ERUZBVUxUX0RFUExPWU1FTlRfQUxBUk0gPSAnQGF3cy1jZGsvYXdzLWVjczpyZW1vdmVEZWZhdWx0RGVwbG95bWVudEFsYXJtJyxcbiAgQ1VTVE9NX1JFU09VUkNFU19MT0dfQVBJX1JFU1BPTlNFX0RBVEFfUFJPUEVSVFlfVFJVRV9ERUZBVUxUID0gJ0Bhd3MtY2RrL2N1c3RvbS1yZXNvdXJjZXM6bG9nQXBpUmVzcG9uc2VEYXRhUHJvcGVydHlUcnVlRGVmYXVsdCcsXG4gIFMzX0tFRVBfTk9USUZJQ0FUSU9OX0lOX0lNUE9SVEVEX0JVQ0tFVCA9ICdAYXdzLWNkay9hd3MtczM6a2VlcE5vdGlmaWNhdGlvbkluSW1wb3J0ZWRCdWNrZXQnLFxuICBTVEVQRlVOQ1RJT05TX1RBU0tTX1VTRV9ORVdfUzNfVVJJX1BBUkFNRVRFUlNfRk9SX0JFRFJPQ0tfSU5WT0tFX01PREVMX1RBU0sgPSAnQGF3cy1jZGsvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3M6dXNlTmV3UzNVcmlQYXJhbWV0ZXJzRm9yQmVkcm9ja0ludm9rZU1vZGVsVGFzaycsXG4gIEVDU19SRURVQ0VfRUMyX0ZBUkdBVEVfQ0xPVURfV0FUQ0hfUEVSTUlTU0lPTlMgPSAnQGF3cy1jZGsvYXdzLWVjczpyZWR1Y2VFYzJGYXJnYXRlQ2xvdWRXYXRjaFBlcm1pc3Npb25zJyxcbiAgRUMyX0VDMl9TVU1fVElNRU9VVF9FTkFCTEVEID0gJ0Bhd3MtY2RrL2F3cy1lYzI6ZWMyU3VtVGltZW91dEVuYWJsZWQnLFxuICBBUFBTWU5DX0FQUF9TWU5DX0dSQVBIUUxfQVBJX1NDT1BFX0xBTUJEQV9QRVJNSVNTSU9OID0gJ0Bhd3MtY2RrL2F3cy1hcHBzeW5jOmFwcFN5bmNHcmFwaFFMQVBJU2NvcGVMYW1iZGFQZXJtaXNzaW9uJyxcbiAgTEFNQkRBX05PREVKU19TREtfVjNfRVhDTFVERV9TTUlUSFlfUEFDS0FHRVMgPSAnQGF3cy1jZGsvYXdzLWxhbWJkYS1ub2RlanM6c2RrVjNFeGNsdWRlU21pdGh5UGFja2FnZXMnLFxuICBSRFNfU0VUX0NPUlJFQ1RfVkFMVUVfRk9SX0RBVEFCQVNFX0lOU1RBTkNFX1JFQURfUkVQTElDQV9JTlNUQU5DRV9SRVNPVVJDRV9JRCA9ICdAYXdzLWNkay9hd3MtcmRzOnNldENvcnJlY3RWYWx1ZUZvckRhdGFiYXNlSW5zdGFuY2VSZWFkUmVwbGljYUluc3RhbmNlUmVzb3VyY2VJZCcsXG4gIENPUkVfQ0ZOX0lOQ0xVREVfUkVKRUNUX0NPTVBMRVhfUkVTT1VSQ0VfVVBEQVRFX0NSRUFURV9QT0xJQ1lfSU5UUklOU0lDUyA9ICdAYXdzLWNkay9jb3JlOmNmbkluY2x1ZGVSZWplY3RDb21wbGV4UmVzb3VyY2VVcGRhdGVDcmVhdGVQb2xpY3lJbnRyaW5zaWNzJyxcbiAgU1RFUEZVTkNUSU9OU19UQVNLU19GSVhfUlVOX0VDU19UQVNLX1BPTElDWSA9ICdAYXdzLWNkay9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrczpmaXhSdW5FY3NUYXNrUG9saWN5JyxcbiAgRFlOQU1PREJfUkVTT1VSQ0VfUE9MSUNZX1BFUl9SRVBMSUNBID0gJ0Bhd3MtY2RrL2F3cy1keW5hbW9kYjpyZXNvdXJjZVBvbGljeVBlclJlcGxpY2EnLFxuICBFQzJfQkFTVElPTl9IT1NUX1VTRV9BTUFaT05fTElOVVhfMjAyM19CWV9ERUZBVUxUID0gJ0Bhd3MtY2RrL2F3cy1lYzI6YmFzdGlvbkhvc3RVc2VBbWF6b25MaW51eDIwMjNCeURlZmF1bHQnLFxuICBDT1JFX0FTUEVDVF9TVEFCSUxJWkFUSU9OID0gJ0Bhd3MtY2RrL2NvcmU6YXNwZWN0U3RhYmlsaXphdGlvbicsXG4gIFJPVVRFNTNfVEFSR0VUU19VU0VSX1BPT0xfRE9NQUlOX05BTUVfTUVUSE9EX1dJVEhPVVRfQ1VTVE9NX1JFU09VUkNFID0gJ0Bhd3MtY2RrL2F3cy1yb3V0ZTUzLXRhcmdldHM6dXNlclBvb2xEb21haW5OYW1lTWV0aG9kV2l0aG91dEN1c3RvbVJlc291cmNlJyxcbiAgRUNTX0RJU0FCTEVfRUNTX0lNRFNfQkxPQ0tJTkcgPSAnQGF3cy1jZGsvYXdzLWVjczpkaXNhYmxlRWNzSW1kc0Jsb2NraW5nJyxcbiAgRUNTX0VOQUJMRV9JTURTX0JMT0NLSU5HX0RFUFJFQ0FURURfRkVBVFVSRSA9ICdAYXdzLWNkay9hd3MtZWNzOmVuYWJsZUltZHNCbG9ja2luZ0RlcHJlY2F0ZWRGZWF0dXJlJyxcbiAgRUxBU1RJQ0xPQURCQUxBTkNJTkdWMl9BTEJfRFVBTFNUQUNLX1dJVEhPVVRfUFVCTElDX0lQVjRfU0VDVVJJVFlfR1JPVVBfUlVMRVNfREVGQVVMVCA9ICdAYXdzLWNkay9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmdWMjphbGJEdWFsc3RhY2tXaXRob3V0UHVibGljSXB2NFNlY3VyaXR5R3JvdXBSdWxlc0RlZmF1bHQnLFxuICBJQU1fT0lEQ19SRUpFQ1RfVU5BVVRIT1JJWkVEX0NPTk5FQ1RJT05TID0gJ0Bhd3MtY2RrL2F3cy1pYW06b2lkY1JlamVjdFVuYXV0aG9yaXplZENvbm5lY3Rpb25zJyxcbiAgQ09SRV9FTkFCTEVfQURESVRJT05BTF9NRVRBREFUQV9DT0xMRUNUSU9OID0gJ0Bhd3MtY2RrL2NvcmU6ZW5hYmxlQWRkaXRpb25hbE1ldGFkYXRhQ29sbGVjdGlvbicsXG4gIExBTUJEQV9DUkVBVEVfTkVXX1BPTElDSUVTX1dJVEhfQUREX1RPX1JPTEVfUE9MSUNZID0gJ0Bhd3MtY2RrL2F3cy1sYW1iZGE6Y3JlYXRlTmV3UG9saWNpZXNXaXRoQWRkVG9Sb2xlUG9saWN5JyxcbiAgUzNfU0VUX1VOSVFVRV9SRVBMSUNBVElPTl9ST0xFX05BTUUgPSAnQGF3cy1jZGsvYXdzLXMzOnNldFVuaXF1ZVJlcGxpY2F0aW9uUm9sZU5hbWUnLFxuICBQSVBFTElORVNfUkVEVUNFX1NUQUdFX1JPTEVfVFJVU1RfU0NPUEUgPSAnQGF3cy1jZGsvcGlwZWxpbmVzOnJlZHVjZVN0YWdlUm9sZVRydXN0U2NvcGUnLFxuICBFVkVOVFNfUkVRVUlSRV9FVkVOVF9CVVNfUE9MSUNZX1NJRCA9ICdAYXdzLWNkay9hd3MtZXZlbnRzOnJlcXVpcmVFdmVudEJ1c1BvbGljeVNpZCcsXG4gIERZTkFNT0RCX1JFVEFJTl9UQUJMRV9SRVBMSUNBID0gJ0Bhd3MtY2RrL2F3cy1keW5hbW9kYjpyZXRhaW5UYWJsZVJlcGxpY2EnLFxuICBDT0dOSVRPX0xPR19VU0VSX1BPT0xfQ0xJRU5UX1NFQ1JFVF9WQUxVRSA9ICdAYXdzLWNkay9jb2duaXRvOmxvZ1VzZXJQb29sQ2xpZW50U2VjcmV0VmFsdWUnLFxuICBTVEVQRlVOQ1RJT05TX1VTRV9ESVNUUklCVVRFRF9NQVBfUkVTVUxUX1dSSVRFUl9WMiA9ICdAYXdzLWNkay9hd3Mtc3RlcGZ1bmN0aW9uczp1c2VEaXN0cmlidXRlZE1hcFJlc3VsdFdyaXRlclYyJyxcbiAgUElQRUxJTkVTX1JFRFVDRV9DUk9TU19BQ0NPVU5UX0FDVElPTl9ST0xFX1RSVVNUX1NDT1BFID0gJ0Bhd3MtY2RrL3BpcGVsaW5lczpyZWR1Y2VDcm9zc0FjY291bnRBY3Rpb25Sb2xlVHJ1c3RTY29wZScsXG4gIENPUkVfQVNQRUNUX1BSSU9SSVRJRVNfTVVUQVRJTkcgPSAnQGF3cy1jZGsvY29yZTphc3BlY3RQcmlvcml0aWVzTXV0YXRpbmcnLFxuICBTM19OT1RJRklDQVRJT05TX0FERF9TM19UUlVTVF9LRVlfUE9MSUNZX0ZPUl9TTlNfU1VCU0NSSVBUSU9OUyA9ICdAYXdzLWNkay9zMy1ub3RpZmljYXRpb25zOmFkZFMzVHJ1c3RLZXlQb2xpY3lGb3JTbnNTdWJzY3JpcHRpb25zJyxcbiAgRUMyX0FMUEhBX1VTRV9SRVNPVVJDRV9JRF9GT1JfVlBDX1YyX01JR1JBVElPTiA9ICdAYXdzLWNkay9hd3MtZWMyLWFscGhhOnVzZVJlc291cmNlSWRGb3JWcGNWMk1pZ3JhdGlvbicsXG4gIEVDMl9SRVFVSVJFX1BSSVZBVEVfU1VCTkVUU19GT1JfRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWSA9ICdAYXdzLWNkay9hd3MtZWMyOnJlcXVpcmVQcml2YXRlU3VibmV0c0ZvckVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXknLFxuICBTM19QVUJMSUNfQUNDRVNTX0JMT0NLRURfQllfREVGQVVMVCA9ICdAYXdzLWNkay9hd3MtczM6cHVibGljQWNjZXNzQmxvY2tlZEJ5RGVmYXVsdCcsXG4gIExBTUJEQV9VU0VfQ0RLX01BTkFHRURfTE9HX0dST1VQID0gJ0Bhd3MtY2RrL2F3cy1sYW1iZGE6dXNlQ2RrTWFuYWdlZExvZ0dyb3VwJyxcbiAgS01TX0FQUExZX0lNUE9SVEVEX0FMSUFTX1BFUk1JU1NJT05TX1RPX1BSSU5DSVBBTCA9ICdAYXdzLWNkay9hd3Mta21zOmFwcGx5SW1wb3J0ZWRBbGlhc1Blcm1pc3Npb25zVG9QcmluY2lwYWwnLFxuICBDT1JFX0VYUExJQ0lUX1NUQUNLX1RBR1MgPSAnQGF3cy1jZGsvY29yZTpleHBsaWNpdFN0YWNrVGFncycsXG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import type { IoHelper } from '../../api-private';
2
+ /**
3
+ * Get or create installation id
4
+ */
5
+ export declare function getOrCreateInstallationId(ioHelper: IoHelper): Promise<string>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOrCreateInstallationId = getOrCreateInstallationId;
4
+ const crypto_1 = require("crypto");
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+ const util_1 = require("../../util");
8
+ const INSTALLATION_ID_PATH = path.join((0, util_1.cdkCacheDir)(), 'installation-id.json');
9
+ /**
10
+ * Get or create installation id
11
+ */
12
+ async function getOrCreateInstallationId(ioHelper) {
13
+ try {
14
+ // Create the cache directory if it doesn't exist
15
+ if (!fs.existsSync(path.dirname(INSTALLATION_ID_PATH))) {
16
+ fs.mkdirSync(path.dirname(INSTALLATION_ID_PATH), { recursive: true });
17
+ }
18
+ // Check if the installation ID file exists
19
+ if (fs.existsSync(INSTALLATION_ID_PATH)) {
20
+ const cachedId = fs.readFileSync(INSTALLATION_ID_PATH, 'utf-8').trim();
21
+ // Validate that the cached ID is a valid UUID
22
+ const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
23
+ if (UUID_REGEX.test(cachedId)) {
24
+ return cachedId;
25
+ }
26
+ // If invalid, fall through to create a new one
27
+ }
28
+ // Create a new installation ID
29
+ const newId = (0, crypto_1.randomUUID)();
30
+ try {
31
+ fs.writeFileSync(INSTALLATION_ID_PATH, newId);
32
+ }
33
+ catch (e) {
34
+ // If we can't write the file, still return the generated ID
35
+ // but log a trace message about the failure
36
+ await ioHelper.defaults.trace(`Failed to write installation ID to ${INSTALLATION_ID_PATH}: ${e}`);
37
+ }
38
+ return newId;
39
+ }
40
+ catch (e) {
41
+ // If anything goes wrong, generate a temporary ID for this session
42
+ // and log a trace message about the failure
43
+ await ioHelper.defaults.trace(`Error getting installation ID: ${e}`);
44
+ return (0, crypto_1.randomUUID)();
45
+ }
46
+ }
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGF0aW9uLWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5zdGFsbGF0aW9uLWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBV0EsOERBbUNDO0FBOUNELG1DQUFvQztBQUNwQyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBRTdCLHFDQUF5QztBQUV6QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSxrQkFBVyxHQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUU5RTs7R0FFRztBQUNJLEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxRQUFrQjtJQUNoRSxJQUFJLENBQUM7UUFDSCxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXZFLDhDQUE4QztZQUM5QyxNQUFNLFVBQVUsR0FBRyxpRUFBaUUsQ0FBQztZQUNyRixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUNELCtDQUErQztRQUNqRCxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUEsbUJBQVUsR0FBRSxDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILEVBQUUsQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsNERBQTREO1lBQzVELDRDQUE0QztZQUM1QyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxvQkFBb0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1FBQ2hCLG1FQUFtRTtRQUNuRSw0Q0FBNEM7UUFDNUMsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUEsbUJBQVUsR0FBRSxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uL2FwaS1wcml2YXRlJztcbmltcG9ydCB7IGNka0NhY2hlRGlyIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbmNvbnN0IElOU1RBTExBVElPTl9JRF9QQVRIID0gcGF0aC5qb2luKGNka0NhY2hlRGlyKCksICdpbnN0YWxsYXRpb24taWQuanNvbicpO1xuXG4vKipcbiAqIEdldCBvciBjcmVhdGUgaW5zdGFsbGF0aW9uIGlkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUluc3RhbGxhdGlvbklkKGlvSGVscGVyOiBJb0hlbHBlcikge1xuICB0cnkge1xuICAgIC8vIENyZWF0ZSB0aGUgY2FjaGUgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5kaXJuYW1lKElOU1RBTExBVElPTl9JRF9QQVRIKSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUoSU5TVEFMTEFUSU9OX0lEX1BBVEgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgaW5zdGFsbGF0aW9uIElEIGZpbGUgZXhpc3RzXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoSU5TVEFMTEFUSU9OX0lEX1BBVEgpKSB7XG4gICAgICBjb25zdCBjYWNoZWRJZCA9IGZzLnJlYWRGaWxlU3luYyhJTlNUQUxMQVRJT05fSURfUEFUSCwgJ3V0Zi04JykudHJpbSgpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBjYWNoZWQgSUQgaXMgYSB2YWxpZCBVVUlEXG4gICAgICBjb25zdCBVVUlEX1JFR0VYID0gL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2k7XG4gICAgICBpZiAoVVVJRF9SRUdFWC50ZXN0KGNhY2hlZElkKSkge1xuICAgICAgICByZXR1cm4gY2FjaGVkSWQ7XG4gICAgICB9XG4gICAgICAvLyBJZiBpbnZhbGlkLCBmYWxsIHRocm91Z2ggdG8gY3JlYXRlIGEgbmV3IG9uZVxuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyBpbnN0YWxsYXRpb24gSURcbiAgICBjb25zdCBuZXdJZCA9IHJhbmRvbVVVSUQoKTtcbiAgICB0cnkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhJTlNUQUxMQVRJT05fSURfUEFUSCwgbmV3SWQpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgLy8gSWYgd2UgY2FuJ3Qgd3JpdGUgdGhlIGZpbGUsIHN0aWxsIHJldHVybiB0aGUgZ2VuZXJhdGVkIElEXG4gICAgICAvLyBidXQgbG9nIGEgdHJhY2UgbWVzc2FnZSBhYm91dCB0aGUgZmFpbHVyZVxuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoYEZhaWxlZCB0byB3cml0ZSBpbnN0YWxsYXRpb24gSUQgdG8gJHtJTlNUQUxMQVRJT05fSURfUEFUSH06ICR7ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0lkO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAvLyBJZiBhbnl0aGluZyBnb2VzIHdyb25nLCBnZW5lcmF0ZSBhIHRlbXBvcmFyeSBJRCBmb3IgdGhpcyBzZXNzaW9uXG4gICAgLy8gYW5kIGxvZyBhIHRyYWNlIG1lc3NhZ2UgYWJvdXQgdGhlIGZhaWx1cmVcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZShgRXJyb3IgZ2V0dGluZyBpbnN0YWxsYXRpb24gSUQ6ICR7ZX1gKTtcbiAgICByZXR1cm4gcmFuZG9tVVVJRCgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import type { IoHelper } from '../../api-private';
2
+ export declare function getLibraryVersion(ioHelper: IoHelper): Promise<string | undefined>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLibraryVersion = getLibraryVersion;
4
+ const child_process_1 = require("child_process");
5
+ const path = require("path");
6
+ const util_1 = require("util");
7
+ const fs = require("fs-extra");
8
+ async function getLibraryVersion(ioHelper) {
9
+ try {
10
+ const command = "node -e 'process.stdout.write(require.resolve(\"aws-cdk-lib\"))'";
11
+ const { stdout } = await (0, util_1.promisify)(child_process_1.exec)(command);
12
+ // stdout should be a file path but lets double check
13
+ if (!fs.existsSync(stdout)) {
14
+ await ioHelper.defaults.trace('Could not get CDK Library Version: require.resolve("aws-cdk-lib") did not return a file path');
15
+ return;
16
+ }
17
+ const pathToPackageJson = path.join(path.dirname(stdout), 'package.json');
18
+ const packageJson = fs.readJSONSync(pathToPackageJson);
19
+ if (!packageJson.version) {
20
+ await ioHelper.defaults.trace('Could not get CDK Library Version: package.json does not have version field');
21
+ return;
22
+ }
23
+ return packageJson.version;
24
+ }
25
+ catch (e) {
26
+ await ioHelper.defaults.trace(`Could not get CDK Library Version: ${e}`);
27
+ return;
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS12ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibGlicmFyeS12ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsOENBdUJDO0FBN0JELGlEQUFxQztBQUNyQyw2QkFBNkI7QUFDN0IsK0JBQWlDO0FBQ2pDLCtCQUErQjtBQUd4QixLQUFLLFVBQVUsaUJBQWlCLENBQUMsUUFBa0I7SUFDeEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsa0VBQWtFLENBQUM7UUFDbkYsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSxnQkFBUyxFQUFDLG9CQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVsRCxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDhGQUE4RixDQUFDLENBQUM7WUFDOUgsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMxRSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7WUFDN0csT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7UUFDaEIsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxPQUFPO0lBQ1QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IElvSGVscGVyIH0gZnJvbSAnLi4vLi4vYXBpLXByaXZhdGUnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TGlicmFyeVZlcnNpb24oaW9IZWxwZXI6IElvSGVscGVyKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb21tYW5kID0gXCJub2RlIC1lICdwcm9jZXNzLnN0ZG91dC53cml0ZShyZXF1aXJlLnJlc29sdmUoXFxcImF3cy1jZGstbGliXFxcIikpJ1wiO1xuICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBwcm9taXNpZnkoZXhlYykoY29tbWFuZCk7XG5cbiAgICAvLyBzdGRvdXQgc2hvdWxkIGJlIGEgZmlsZSBwYXRoIGJ1dCBsZXRzIGRvdWJsZSBjaGVja1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhzdGRvdXQpKSB7XG4gICAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZSgnQ291bGQgbm90IGdldCBDREsgTGlicmFyeSBWZXJzaW9uOiByZXF1aXJlLnJlc29sdmUoXCJhd3MtY2RrLWxpYlwiKSBkaWQgbm90IHJldHVybiBhIGZpbGUgcGF0aCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGhUb1BhY2thZ2VKc29uID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShzdGRvdXQpLCAncGFja2FnZS5qc29uJyk7XG4gICAgY29uc3QgcGFja2FnZUpzb24gPSBmcy5yZWFkSlNPTlN5bmMocGF0aFRvUGFja2FnZUpzb24pO1xuICAgIGlmICghcGFja2FnZUpzb24udmVyc2lvbikge1xuICAgICAgYXdhaXQgaW9IZWxwZXIuZGVmYXVsdHMudHJhY2UoJ0NvdWxkIG5vdCBnZXQgQ0RLIExpYnJhcnkgVmVyc2lvbjogcGFja2FnZS5qc29uIGRvZXMgbm90IGhhdmUgdmVyc2lvbiBmaWVsZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlSnNvbi52ZXJzaW9uO1xuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICBhd2FpdCBpb0hlbHBlci5kZWZhdWx0cy50cmFjZShgQ291bGQgbm90IGdldCBDREsgTGlicmFyeSBWZXJzaW9uOiAke2V9YCk7XG4gICAgcmV0dXJuO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,40 @@
1
+ import type { Duration } from '@aws-cdk/toolkit-lib';
2
+ import type { ErrorDetails } from './schema';
3
+ import * as make from '../../api-private';
4
+ export interface EventResult extends Duration {
5
+ error?: ErrorDetails;
6
+ }
7
+ export interface EventStart {
8
+ }
9
+ /**
10
+ * Private message types specific to the CLI
11
+ */
12
+ export declare const CLI_PRIVATE_IO: {
13
+ CDK_CLI_I1000: make.IoMessageMaker<EventStart>;
14
+ CDK_CLI_I1001: make.IoMessageMaker<EventResult>;
15
+ CDK_CLI_I2000: make.IoMessageMaker<EventStart>;
16
+ CDK_CLI_I2001: make.IoMessageMaker<EventResult>;
17
+ CDK_CLI_I3000: make.IoMessageMaker<EventStart>;
18
+ CDK_CLI_I3001: make.IoMessageMaker<EventResult>;
19
+ };
20
+ /**
21
+ * Payload type of the end message must extend Duration
22
+ */
23
+ export declare const CLI_PRIVATE_SPAN: {
24
+ SYNTH_ASSEMBLY: {
25
+ name: string;
26
+ start: make.IoMessageMaker<EventStart>;
27
+ end: make.IoMessageMaker<EventResult>;
28
+ };
29
+ COMMAND: {
30
+ name: string;
31
+ start: make.IoMessageMaker<EventStart>;
32
+ end: make.IoMessageMaker<EventResult>;
33
+ };
34
+ DEPLOY: {
35
+ name: string;
36
+ start: make.IoMessageMaker<EventStart>;
37
+ end: make.IoMessageMaker<EventResult>;
38
+ };
39
+ };
40
+ export declare const CLI_TELEMETRY_CODES: make.IoMessageMaker<EventResult>[];
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLI_TELEMETRY_CODES = exports.CLI_PRIVATE_SPAN = exports.CLI_PRIVATE_IO = void 0;
4
+ const make = require("../../api-private");
5
+ /**
6
+ * Private message types specific to the CLI
7
+ */
8
+ exports.CLI_PRIVATE_IO = {
9
+ CDK_CLI_I1000: make.trace({
10
+ code: 'CDK_CLI_I1000',
11
+ description: 'Cloud Execution is starting',
12
+ interface: 'EventStart',
13
+ }),
14
+ CDK_CLI_I1001: make.trace({
15
+ code: 'CDK_CLI_I1001',
16
+ description: 'Cloud Executable Result',
17
+ interface: 'EventResult',
18
+ }),
19
+ CDK_CLI_I2000: make.trace({
20
+ code: 'CDK_CLI_I2000',
21
+ description: 'Command has started',
22
+ interface: 'EventStart',
23
+ }),
24
+ CDK_CLI_I2001: make.trace({
25
+ code: 'CDK_CLI_I2001',
26
+ description: 'Command has finished executing',
27
+ interface: 'EventResult',
28
+ }),
29
+ CDK_CLI_I3000: make.trace({
30
+ code: 'CDK_CLI_I3000',
31
+ description: 'Deploy has started',
32
+ interface: 'EventStart',
33
+ }),
34
+ CDK_CLI_I3001: make.trace({
35
+ code: 'CDK_CLI_I3001',
36
+ description: 'Deploy has finished',
37
+ interface: 'EventResult',
38
+ }),
39
+ };
40
+ /**
41
+ * Payload type of the end message must extend Duration
42
+ */
43
+ exports.CLI_PRIVATE_SPAN = {
44
+ SYNTH_ASSEMBLY: {
45
+ name: 'Synthesis',
46
+ start: exports.CLI_PRIVATE_IO.CDK_CLI_I1000,
47
+ end: exports.CLI_PRIVATE_IO.CDK_CLI_I1001,
48
+ },
49
+ COMMAND: {
50
+ name: 'Command',
51
+ start: exports.CLI_PRIVATE_IO.CDK_CLI_I2000,
52
+ end: exports.CLI_PRIVATE_IO.CDK_CLI_I2001,
53
+ },
54
+ DEPLOY: {
55
+ name: 'Deploy',
56
+ start: exports.CLI_PRIVATE_IO.CDK_CLI_I3000,
57
+ end: exports.CLI_PRIVATE_IO.CDK_CLI_I3001,
58
+ },
59
+ };
60
+ exports.CLI_TELEMETRY_CODES = [
61
+ exports.CLI_PRIVATE_IO.CDK_CLI_I1001,
62
+ exports.CLI_PRIVATE_IO.CDK_CLI_I2001,
63
+ exports.CLI_PRIVATE_IO.CDK_CLI_I3001,
64
+ ];
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtZXNzYWdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwwQ0FBMEM7QUFVMUM7O0dBRUc7QUFDVSxRQUFBLGNBQWMsR0FBRztJQUM1QixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBYTtRQUNwQyxJQUFJLEVBQUUsZUFBZTtRQUNyQixXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLFNBQVMsRUFBRSxZQUFZO0tBQ3hCLENBQUM7SUFDRixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBYztRQUNyQyxJQUFJLEVBQUUsZUFBZTtRQUNyQixXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLFNBQVMsRUFBRSxhQUFhO0tBQ3pCLENBQUM7SUFDRixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBYTtRQUNwQyxJQUFJLEVBQUUsZUFBZTtRQUNyQixXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLFNBQVMsRUFBRSxZQUFZO0tBQ3hCLENBQUM7SUFDRixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBYztRQUNyQyxJQUFJLEVBQUUsZUFBZTtRQUNyQixXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLFNBQVMsRUFBRSxhQUFhO0tBQ3pCLENBQUM7SUFDRixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBYTtRQUNwQyxJQUFJLEVBQUUsZUFBZTtRQUNyQixXQUFXLEVBQUUsb0JBQW9CO1FBQ2pDLFNBQVMsRUFBRSxZQUFZO0tBQ3hCLENBQUM7SUFDRixhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBYztRQUNyQyxJQUFJLEVBQUUsZUFBZTtRQUNyQixXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLFNBQVMsRUFBRSxhQUFhO0tBQ3pCLENBQUM7Q0FDSCxDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHO0lBQzlCLGNBQWMsRUFBRTtRQUNkLElBQUksRUFBRSxXQUFXO1FBQ2pCLEtBQUssRUFBRSxzQkFBYyxDQUFDLGFBQWE7UUFDbkMsR0FBRyxFQUFFLHNCQUFjLENBQUMsYUFBYTtLQUNsQztJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTO1FBQ2YsS0FBSyxFQUFFLHNCQUFjLENBQUMsYUFBYTtRQUNuQyxHQUFHLEVBQUUsc0JBQWMsQ0FBQyxhQUFhO0tBQ2xDO0lBQ0QsTUFBTSxFQUFFO1FBQ04sSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsc0JBQWMsQ0FBQyxhQUFhO1FBQ25DLEdBQUcsRUFBRSxzQkFBYyxDQUFDLGFBQWE7S0FDbEM7Q0FDaUQsQ0FBQztBQUV4QyxRQUFBLG1CQUFtQixHQUFHO0lBQ2pDLHNCQUFjLENBQUMsYUFBYTtJQUM1QixzQkFBYyxDQUFDLGFBQWE7SUFDNUIsc0JBQWMsQ0FBQyxhQUFhO0NBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IER1cmF0aW9uIH0gZnJvbSAnQGF3cy1jZGsvdG9vbGtpdC1saWInO1xuaW1wb3J0IHR5cGUgeyBFcnJvckRldGFpbHMgfSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgKiBhcyBtYWtlIGZyb20gJy4uLy4uL2FwaS1wcml2YXRlJztcbmltcG9ydCB0eXBlIHsgU3BhbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi9hcGktcHJpdmF0ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRSZXN1bHQgZXh0ZW5kcyBEdXJhdGlvbiB7XG4gIGVycm9yPzogRXJyb3JEZXRhaWxzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50U3RhcnQge1xufVxuXG4vKipcbiAqIFByaXZhdGUgbWVzc2FnZSB0eXBlcyBzcGVjaWZpYyB0byB0aGUgQ0xJXG4gKi9cbmV4cG9ydCBjb25zdCBDTElfUFJJVkFURV9JTyA9IHtcbiAgQ0RLX0NMSV9JMTAwMDogbWFrZS50cmFjZTxFdmVudFN0YXJ0Pih7XG4gICAgY29kZTogJ0NES19DTElfSTEwMDAnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ2xvdWQgRXhlY3V0aW9uIGlzIHN0YXJ0aW5nJyxcbiAgICBpbnRlcmZhY2U6ICdFdmVudFN0YXJ0JyxcbiAgfSksXG4gIENES19DTElfSTEwMDE6IG1ha2UudHJhY2U8RXZlbnRSZXN1bHQ+KHtcbiAgICBjb2RlOiAnQ0RLX0NMSV9JMTAwMScsXG4gICAgZGVzY3JpcHRpb246ICdDbG91ZCBFeGVjdXRhYmxlIFJlc3VsdCcsXG4gICAgaW50ZXJmYWNlOiAnRXZlbnRSZXN1bHQnLFxuICB9KSxcbiAgQ0RLX0NMSV9JMjAwMDogbWFrZS50cmFjZTxFdmVudFN0YXJ0Pih7XG4gICAgY29kZTogJ0NES19DTElfSTIwMDAnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29tbWFuZCBoYXMgc3RhcnRlZCcsXG4gICAgaW50ZXJmYWNlOiAnRXZlbnRTdGFydCcsXG4gIH0pLFxuICBDREtfQ0xJX0kyMDAxOiBtYWtlLnRyYWNlPEV2ZW50UmVzdWx0Pih7XG4gICAgY29kZTogJ0NES19DTElfSTIwMDEnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29tbWFuZCBoYXMgZmluaXNoZWQgZXhlY3V0aW5nJyxcbiAgICBpbnRlcmZhY2U6ICdFdmVudFJlc3VsdCcsXG4gIH0pLFxuICBDREtfQ0xJX0kzMDAwOiBtYWtlLnRyYWNlPEV2ZW50U3RhcnQ+KHtcbiAgICBjb2RlOiAnQ0RLX0NMSV9JMzAwMCcsXG4gICAgZGVzY3JpcHRpb246ICdEZXBsb3kgaGFzIHN0YXJ0ZWQnLFxuICAgIGludGVyZmFjZTogJ0V2ZW50U3RhcnQnLFxuICB9KSxcbiAgQ0RLX0NMSV9JMzAwMTogbWFrZS50cmFjZTxFdmVudFJlc3VsdD4oe1xuICAgIGNvZGU6ICdDREtfQ0xJX0kzMDAxJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RlcGxveSBoYXMgZmluaXNoZWQnLFxuICAgIGludGVyZmFjZTogJ0V2ZW50UmVzdWx0JyxcbiAgfSksXG59O1xuXG4vKipcbiAqIFBheWxvYWQgdHlwZSBvZiB0aGUgZW5kIG1lc3NhZ2UgbXVzdCBleHRlbmQgRHVyYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IENMSV9QUklWQVRFX1NQQU4gPSB7XG4gIFNZTlRIX0FTU0VNQkxZOiB7XG4gICAgbmFtZTogJ1N5bnRoZXNpcycsXG4gICAgc3RhcnQ6IENMSV9QUklWQVRFX0lPLkNES19DTElfSTEwMDAsXG4gICAgZW5kOiBDTElfUFJJVkFURV9JTy5DREtfQ0xJX0kxMDAxLFxuICB9LFxuICBDT01NQU5EOiB7XG4gICAgbmFtZTogJ0NvbW1hbmQnLFxuICAgIHN0YXJ0OiBDTElfUFJJVkFURV9JTy5DREtfQ0xJX0kyMDAwLFxuICAgIGVuZDogQ0xJX1BSSVZBVEVfSU8uQ0RLX0NMSV9JMjAwMSxcbiAgfSxcbiAgREVQTE9ZOiB7XG4gICAgbmFtZTogJ0RlcGxveScsXG4gICAgc3RhcnQ6IENMSV9QUklWQVRFX0lPLkNES19DTElfSTMwMDAsXG4gICAgZW5kOiBDTElfUFJJVkFURV9JTy5DREtfQ0xJX0kzMDAxLFxuICB9LFxufSBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgU3BhbkRlZmluaXRpb248YW55LCBhbnk+PjtcblxuZXhwb3J0IGNvbnN0IENMSV9URUxFTUVUUllfQ09ERVMgPSBbXG4gIENMSV9QUklWQVRFX0lPLkNES19DTElfSTEwMDEsXG4gIENMSV9QUklWQVRFX0lPLkNES19DTElfSTIwMDEsXG4gIENMSV9QUklWQVRFX0lPLkNES19DTElfSTMwMDEsXG5dO1xuIl19
@@ -0,0 +1,100 @@
1
+ import type { Context } from '../../api/context';
2
+ /**
3
+ * argv is the output of yargs
4
+ */
5
+ export declare function sanitizeCommandLineArguments(argv: any): {
6
+ path: string[];
7
+ parameters: {
8
+ [key: string]: string;
9
+ };
10
+ };
11
+ export declare function sanitizeContext(context: Context): {
12
+ "@aws-cdk/core:newStyleStackSynthesis": boolean;
13
+ "@aws-cdk/core:stackRelativeExports": boolean;
14
+ "@aws-cdk/aws-rds:lowercaseDbIdentifier": boolean;
15
+ "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": boolean;
16
+ "@aws-cdk/aws-lambda:recognizeVersionProps": boolean;
17
+ "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": boolean;
18
+ "@aws-cdk/core:target-partitions": boolean;
19
+ "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": boolean;
20
+ "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": boolean;
21
+ "@aws-cdk/aws-iam:minimizePolicies": boolean;
22
+ "@aws-cdk/core:checkSecretUsage": boolean;
23
+ "@aws-cdk/aws-lambda:recognizeLayerVersion": boolean;
24
+ "@aws-cdk/core:validateSnapshotRemovalPolicy": boolean;
25
+ "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": boolean;
26
+ "@aws-cdk/aws-s3:createDefaultLoggingPolicy": boolean;
27
+ "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": boolean;
28
+ "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": boolean;
29
+ "@aws-cdk/aws-apigateway:disableCloudWatchRole": boolean;
30
+ "@aws-cdk/core:enablePartitionLiterals": boolean;
31
+ "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": boolean;
32
+ "@aws-cdk/aws-events:eventsTargetQueueSameAccount": boolean;
33
+ "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": boolean;
34
+ "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": boolean;
35
+ "@aws-cdk/customresources:installLatestAwsSdkDefault": boolean;
36
+ "@aws-cdk/aws-route53-patterns:useCertificate": boolean;
37
+ "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": boolean;
38
+ "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": boolean;
39
+ "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": boolean;
40
+ "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": boolean;
41
+ "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": boolean;
42
+ "@aws-cdk/aws-redshift:columnId": boolean;
43
+ "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": boolean;
44
+ "@aws-cdk/aws-apigateway:requestValidatorUniqueId": boolean;
45
+ "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": boolean;
46
+ "@aws-cdk/aws-kms:aliasNameRef": boolean;
47
+ "@aws-cdk/core:includePrefixInUniqueNameGeneration": boolean;
48
+ "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": boolean;
49
+ "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": boolean;
50
+ "@aws-cdk/aws-efs:denyAnonymousAccess": boolean;
51
+ "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": boolean;
52
+ "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": boolean;
53
+ "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": boolean;
54
+ "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": boolean;
55
+ "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": boolean;
56
+ "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": boolean;
57
+ "@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": boolean;
58
+ "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": boolean;
59
+ "@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": boolean;
60
+ "@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": boolean;
61
+ "@aws-cdk/aws-eks:nodegroupNameAttribute": boolean;
62
+ "@aws-cdk/aws-ec2:ebsDefaultGp3Volume": boolean;
63
+ "@aws-cdk/pipelines:reduceAssetRoleTrustScope": boolean;
64
+ "@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": boolean;
65
+ "@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": boolean;
66
+ "@aws-cdk/aws-s3:keepNotificationInImportedBucket": boolean;
67
+ "@aws-cdk/aws-stepfunctions-tasks:useNewS3UriParametersForBedrockInvokeModelTask": boolean;
68
+ "@aws-cdk/aws-ecs:reduceEc2FargateCloudWatchPermissions": boolean;
69
+ "@aws-cdk/aws-ec2:ec2SumTimeoutEnabled": boolean;
70
+ "@aws-cdk/aws-appsync:appSyncGraphQLAPIScopeLambdaPermission": boolean;
71
+ "@aws-cdk/aws-lambda-nodejs:sdkV3ExcludeSmithyPackages": boolean;
72
+ "@aws-cdk/aws-rds:setCorrectValueForDatabaseInstanceReadReplicaInstanceResourceId": boolean;
73
+ "@aws-cdk/core:cfnIncludeRejectComplexResourceUpdateCreatePolicyIntrinsics": boolean;
74
+ "@aws-cdk/aws-stepfunctions-tasks:fixRunEcsTaskPolicy": boolean;
75
+ "@aws-cdk/aws-dynamodb:resourcePolicyPerReplica": boolean;
76
+ "@aws-cdk/aws-ec2:bastionHostUseAmazonLinux2023ByDefault": boolean;
77
+ "@aws-cdk/core:aspectStabilization": boolean;
78
+ "@aws-cdk/aws-route53-targets:userPoolDomainNameMethodWithoutCustomResource": boolean;
79
+ "@aws-cdk/aws-ecs:disableEcsImdsBlocking": boolean;
80
+ "@aws-cdk/aws-ecs:enableImdsBlockingDeprecatedFeature": boolean;
81
+ "@aws-cdk/aws-elasticloadbalancingV2:albDualstackWithoutPublicIpv4SecurityGroupRulesDefault": boolean;
82
+ "@aws-cdk/aws-iam:oidcRejectUnauthorizedConnections": boolean;
83
+ "@aws-cdk/core:enableAdditionalMetadataCollection": boolean;
84
+ "@aws-cdk/aws-lambda:createNewPoliciesWithAddToRolePolicy": boolean;
85
+ "@aws-cdk/aws-s3:setUniqueReplicationRoleName": boolean;
86
+ "@aws-cdk/pipelines:reduceStageRoleTrustScope": boolean;
87
+ "@aws-cdk/aws-events:requireEventBusPolicySid": boolean;
88
+ "@aws-cdk/aws-dynamodb:retainTableReplica": boolean;
89
+ "@aws-cdk/cognito:logUserPoolClientSecretValue": boolean;
90
+ "@aws-cdk/aws-stepfunctions:useDistributedMapResultWriterV2": boolean;
91
+ "@aws-cdk/pipelines:reduceCrossAccountActionRoleTrustScope": boolean;
92
+ "@aws-cdk/core:aspectPrioritiesMutating": boolean;
93
+ "@aws-cdk/s3-notifications:addS3TrustKeyPolicyForSnsSubscriptions": boolean;
94
+ "@aws-cdk/aws-ec2-alpha:useResourceIdForVpcV2Migration": boolean;
95
+ "@aws-cdk/aws-ec2:requirePrivateSubnetsForEgressOnlyInternetGateway": boolean;
96
+ "@aws-cdk/aws-s3:publicAccessBlockedByDefault": boolean;
97
+ "@aws-cdk/aws-lambda:useCdkManagedLogGroup": boolean;
98
+ "@aws-cdk/aws-kms:applyImportedAliasPermissionsToPrincipal": boolean;
99
+ "@aws-cdk/core:explicitStackTags": boolean;
100
+ };
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeCommandLineArguments = sanitizeCommandLineArguments;
4
+ exports.sanitizeContext = sanitizeContext;
5
+ const feature_flags_1 = require("./feature-flags");
6
+ /**
7
+ * argv is the output of yargs
8
+ */
9
+ function sanitizeCommandLineArguments(argv) {
10
+ // Get the configuration of the arguments
11
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
12
+ const config = require('../cli-type-registry.json');
13
+ const command = argv._[0];
14
+ const path = [command];
15
+ const parameters = {};
16
+ const globalOptions = Object.keys(config.globalOptions);
17
+ const commandOptions = Object.keys(config.commands[command]?.options ?? {});
18
+ const commandArg = config.commands[command]?.arg;
19
+ for (const argName of Object.keys(argv)) {
20
+ if (argName === commandArg?.name) {
21
+ if (commandArg.variadic) {
22
+ for (let i = 0; i < argv[argName].length; i++) {
23
+ path.push(`$${argName}_${i + 1}`);
24
+ }
25
+ }
26
+ else {
27
+ path.push(`$${argName}`);
28
+ }
29
+ }
30
+ // Continue if the arg name is not a global option or command option
31
+ // arg name comes from yargs and could be an alias; we trust that the "normal"
32
+ // name has the same information and that is what we want to record
33
+ if (argv[argName] === undefined || (!globalOptions.includes(argName) && !commandOptions.includes(argName))) {
34
+ continue;
35
+ }
36
+ if (isNumberOrBoolean(argv[argName]) || isKnownEnumValue(argName, argv[argName], command, config)) {
37
+ parameters[argName] = argv[argName];
38
+ }
39
+ else {
40
+ parameters[argName] = '<redacted>';
41
+ }
42
+ }
43
+ return {
44
+ path,
45
+ parameters,
46
+ };
47
+ }
48
+ function sanitizeContext(context) {
49
+ const sanitizedContext = {};
50
+ for (const [flag, value] of Object.entries(context.all)) {
51
+ // Skip if flag is not in the FeatureFlags enum
52
+ if (!isFeatureFlag(flag)) {
53
+ continue;
54
+ }
55
+ // Falsy options include boolean false, string 'false'
56
+ // All other inputs evaluate to true
57
+ const sanitizedValue = isBoolean(value) ? value : (value !== 'false');
58
+ sanitizedContext[flag] = sanitizedValue;
59
+ }
60
+ return sanitizedContext;
61
+ }
62
+ function isBoolean(value) {
63
+ return typeof value === 'boolean';
64
+ }
65
+ function isNumberOrBoolean(value) {
66
+ return typeof value === 'number' || isBoolean(value);
67
+ }
68
+ function isKnownEnumValue(name, value, command, config) {
69
+ const propertyDefiniton = config.globalOptions[name] ?? config.commands[command]?.options[name];
70
+ if (propertyDefiniton.type === 'string') {
71
+ // Even if the property has choices, only record if the value is a valid choice
72
+ return propertyDefiniton.choices?.includes(value);
73
+ }
74
+ return false;
75
+ }
76
+ function isFeatureFlag(flag) {
77
+ return Object.values(feature_flags_1.FeatureFlag).includes(flag);
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNhbml0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxvRUF5Q0M7QUFFRCwwQ0FjQztBQS9ERCxtREFBOEM7QUFHOUM7O0dBRUc7QUFDSCxTQUFnQiw0QkFBNEIsQ0FBQyxJQUFTO0lBQ3BELHlDQUF5QztJQUV6QyxpRUFBaUU7SUFDakUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixNQUFNLElBQUksR0FBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sVUFBVSxHQUE4QixFQUFFLENBQUM7SUFFakQsTUFBTSxhQUFhLEdBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0QsTUFBTSxjQUFjLEdBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRixNQUFNLFVBQVUsR0FBbUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUM7SUFFakcsS0FBSyxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEMsSUFBSSxPQUFPLEtBQUssVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBRUQsb0VBQW9FO1FBQ3BFLDhFQUE4RTtRQUM5RSxtRUFBbUU7UUFDbkUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDM0csU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSTtRQUNKLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxPQUFnQjtJQUM5QyxNQUFNLGdCQUFnQixHQUFvQyxFQUFxQyxDQUFDO0lBQ2hHLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3hELCtDQUErQztRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsU0FBUztRQUNYLENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsb0NBQW9DO1FBQ3BDLE1BQU0sY0FBYyxHQUFZLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQztRQUMvRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDMUMsQ0FBQztJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQVU7SUFDM0IsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDcEMsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBVTtJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLEtBQVUsRUFBRSxPQUFlLEVBQUUsTUFBVztJQUM5RSxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsK0VBQStFO1FBQy9FLE9BQU8saUJBQWlCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsSUFBWTtJQUNqQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsMkJBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFtQixDQUFDLENBQUM7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZlYXR1cmVGbGFnIH0gZnJvbSAnLi9mZWF0dXJlLWZsYWdzJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gJy4uLy4uL2FwaS9jb250ZXh0JztcblxuLyoqXG4gKiBhcmd2IGlzIHRoZSBvdXRwdXQgb2YgeWFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplQ29tbWFuZExpbmVBcmd1bWVudHMoYXJndjogYW55KTogeyBwYXRoOiBzdHJpbmdbXTsgcGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9IHtcbiAgLy8gR2V0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhcmd1bWVudHNcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICBjb25zdCBjb25maWcgPSByZXF1aXJlKCcuLi9jbGktdHlwZS1yZWdpc3RyeS5qc29uJyk7XG4gIGNvbnN0IGNvbW1hbmQgPSBhcmd2Ll9bMF07XG4gIGNvbnN0IHBhdGg6IHN0cmluZ1tdID0gW2NvbW1hbmRdO1xuICBjb25zdCBwYXJhbWV0ZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgY29uc3QgZ2xvYmFsT3B0aW9uczogYW55W10gPSBPYmplY3Qua2V5cyhjb25maWcuZ2xvYmFsT3B0aW9ucyk7XG4gIGNvbnN0IGNvbW1hbmRPcHRpb25zOiBhbnlbXSA9IE9iamVjdC5rZXlzKGNvbmZpZy5jb21tYW5kc1tjb21tYW5kXT8ub3B0aW9ucyA/PyB7fSk7XG4gIGNvbnN0IGNvbW1hbmRBcmc6IHsgbmFtZTogc3RyaW5nOyB2YXJpYWRpYzogc3RyaW5nIH0gfCB1bmRlZmluZWQgPSBjb25maWcuY29tbWFuZHNbY29tbWFuZF0/LmFyZztcblxuICBmb3IgKGNvbnN0IGFyZ05hbWUgb2YgT2JqZWN0LmtleXMoYXJndikpIHtcbiAgICBpZiAoYXJnTmFtZSA9PT0gY29tbWFuZEFyZz8ubmFtZSkge1xuICAgICAgaWYgKGNvbW1hbmRBcmcudmFyaWFkaWMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd2W2FyZ05hbWVdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcGF0aC5wdXNoKGAkJHthcmdOYW1lfV8ke2krMX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aC5wdXNoKGAkJHthcmdOYW1lfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnRpbnVlIGlmIHRoZSBhcmcgbmFtZSBpcyBub3QgYSBnbG9iYWwgb3B0aW9uIG9yIGNvbW1hbmQgb3B0aW9uXG4gICAgLy8gYXJnIG5hbWUgY29tZXMgZnJvbSB5YXJncyBhbmQgY291bGQgYmUgYW4gYWxpYXM7IHdlIHRydXN0IHRoYXQgdGhlIFwibm9ybWFsXCJcbiAgICAvLyBuYW1lIGhhcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhbmQgdGhhdCBpcyB3aGF0IHdlIHdhbnQgdG8gcmVjb3JkXG4gICAgaWYgKGFyZ3ZbYXJnTmFtZV0gPT09IHVuZGVmaW5lZCB8fCAoIWdsb2JhbE9wdGlvbnMuaW5jbHVkZXMoYXJnTmFtZSkgJiYgIWNvbW1hbmRPcHRpb25zLmluY2x1ZGVzKGFyZ05hbWUpKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpc051bWJlck9yQm9vbGVhbihhcmd2W2FyZ05hbWVdKSB8fCBpc0tub3duRW51bVZhbHVlKGFyZ05hbWUsIGFyZ3ZbYXJnTmFtZV0sIGNvbW1hbmQsIGNvbmZpZykpIHtcbiAgICAgIHBhcmFtZXRlcnNbYXJnTmFtZV0gPSBhcmd2W2FyZ05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbWV0ZXJzW2FyZ05hbWVdID0gJzxyZWRhY3RlZD4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aCxcbiAgICBwYXJhbWV0ZXJzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVDb250ZXh0KGNvbnRleHQ6IENvbnRleHQpIHtcbiAgY29uc3Qgc2FuaXRpemVkQ29udGV4dDogeyBbSyBpbiBGZWF0dXJlRmxhZ106IGJvb2xlYW4gfSA9IHt9IGFzIHsgW0sgaW4gRmVhdHVyZUZsYWddOiBib29sZWFuIH07XG4gIGZvciAoY29uc3QgW2ZsYWcsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjb250ZXh0LmFsbCkpIHtcbiAgICAvLyBTa2lwIGlmIGZsYWcgaXMgbm90IGluIHRoZSBGZWF0dXJlRmxhZ3MgZW51bVxuICAgIGlmICghaXNGZWF0dXJlRmxhZyhmbGFnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRmFsc3kgb3B0aW9ucyBpbmNsdWRlIGJvb2xlYW4gZmFsc2UsIHN0cmluZyAnZmFsc2UnXG4gICAgLy8gQWxsIG90aGVyIGlucHV0cyBldmFsdWF0ZSB0byB0cnVlXG4gICAgY29uc3Qgc2FuaXRpemVkVmFsdWU6IGJvb2xlYW4gPSBpc0Jvb2xlYW4odmFsdWUpID8gdmFsdWUgOiAodmFsdWUgIT09ICdmYWxzZScpO1xuICAgIHNhbml0aXplZENvbnRleHRbZmxhZ10gPSBzYW5pdGl6ZWRWYWx1ZTtcbiAgfVxuICByZXR1cm4gc2FuaXRpemVkQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlck9yQm9vbGVhbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IGlzQm9vbGVhbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzS25vd25FbnVtVmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBjb21tYW5kOiBzdHJpbmcsIGNvbmZpZzogYW55KTogYm9vbGVhbiB7XG4gIGNvbnN0IHByb3BlcnR5RGVmaW5pdG9uID0gY29uZmlnLmdsb2JhbE9wdGlvbnNbbmFtZV0gPz8gY29uZmlnLmNvbW1hbmRzW2NvbW1hbmRdPy5vcHRpb25zW25hbWVdO1xuICBpZiAocHJvcGVydHlEZWZpbml0b24udHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBFdmVuIGlmIHRoZSBwcm9wZXJ0eSBoYXMgY2hvaWNlcywgb25seSByZWNvcmQgaWYgdGhlIHZhbHVlIGlzIGEgdmFsaWQgY2hvaWNlXG4gICAgcmV0dXJuIHByb3BlcnR5RGVmaW5pdG9uLmNob2ljZXM/LmluY2x1ZGVzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRmVhdHVyZUZsYWcoZmxhZzogc3RyaW5nKTogZmxhZyBpcyBGZWF0dXJlRmxhZyB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKEZlYXR1cmVGbGFnKS5pbmNsdWRlcyhmbGFnIGFzIEZlYXR1cmVGbGFnKTtcbn1cbiJdfQ==