@aws-amplify/graphql-api-construct 1.18.7 → 1.18.8
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 +83 -43
- package/CHANGELOG.md +6 -0
- package/lib/amplify-dynamodb-table-wrapper.js +1 -1
- package/lib/amplify-graphql-api.js +4 -2
- package/lib/amplify-graphql-definition.js +1 -1
- package/lib/sql-model-datasource-strategy.js +1 -1
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/conversation_handler_construct.d.ts +13 -0
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/conversation_handler_construct.js +17 -4
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/bedrock_converse_adapter.js +89 -71
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/types.d.ts +1 -0
- package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/types.js +1 -1
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/README.md +9 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/backend_entry_point_locator.d.ts +14 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/backend_entry_point_locator.js +37 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/backend_identifier_conversions.d.ts +22 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/backend_identifier_conversions.js +90 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/caller_directory_extractor.d.ts +14 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/caller_directory_extractor.js +70 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk/enum_converters.d.ts +18 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk/enum_converters.js +116 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk/index.d.ts +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk/index.js +7 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk_context_key.d.ts +12 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk_context_key.js +16 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/config/local_configuration_controller.d.ts +45 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/config/local_configuration_controller.js +125 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/config/local_configuration_controller_factory.d.ts +23 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/config/local_configuration_controller_factory.js +29 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_error.d.ts +64 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_error.js +267 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_library_fault.d.ts +21 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_library_fault.js +27 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_user_error.d.ts +21 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_user_error.js +27 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/index.d.ts +4 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/index.js +20 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/extract_file_path_from_stack_trace_line.d.ts +13 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/extract_file_path_from_stack_trace_line.js +61 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/index.d.ts +15 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/index.internal.d.ts +4 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/index.internal.js +35 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/index.js +35 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/naming_convention_conversions.d.ts +13 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/naming_convention_conversions.js +23 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/object_accumulator.d.ts +45 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/object_accumulator.js +99 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/package_json_reader.d.ts +33 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/package_json_reader.js +56 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/parameter_path_conversions.d.ts +19 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/parameter_path_conversions.js +79 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/tag_name.d.ts +4 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/tag_name.js +8 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/account_id_fetcher.d.ts +14 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/account_id_fetcher.js +38 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/constants.d.ts +13 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/constants.js +16 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/get_installation_id.d.ts +5 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/get_installation_id.js +15 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/get_usage_data_url.d.ts +6 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/get_usage_data_url.js +24 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/noop_usage_data_emitter.d.ts +15 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/noop_usage_data_emitter.js +24 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/serializable_error.d.ts +27 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/serializable_error.js +70 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data.d.ts +29 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data_emitter.d.ts +27 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data_emitter.js +146 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data_emitter_factory.d.ts +16 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data_emitter_factory.js +27 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/package.json +45 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/README.md +9 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/amplify_function.d.ts +4 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/amplify_function.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/amplify_resource_group_name.d.ts +7 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/amplify_resource_group_name.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/auth_resources.d.ts +106 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/auth_resources.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/aws_client_provider.d.ts +5 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/aws_client_provider.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_identifier.d.ts +56 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_identifier.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_output.d.ts +6 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_output.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_secret_resolver.d.ts +22 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_secret_resolver.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_stack_creator.d.ts +8 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_stack_creator.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_stack_resolver.d.ts +7 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_stack_resolver.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/construct_container.d.ts +35 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/construct_container.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/construct_factory.d.ts +24 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/construct_factory.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/deep_partial.d.ts +17 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/deep_partial.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/deployment_type.d.ts +8 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/deployment_type.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/function_resources.d.ts +8 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/function_resources.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/import_path_verifier.d.ts +14 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/import_path_verifier.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/index.d.ts +27 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/index.js +43 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/log_level.d.ts +2 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/log_level.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/log_retention.d.ts +2 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/log_retention.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/output_retrieval_strategy.d.ts +11 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/output_retrieval_strategy.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/output_storage_strategy.d.ts +10 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/output_storage_strategy.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/package_manager_controller.d.ts +30 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/package_manager_controller.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_access_acceptor.d.ts +27 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_access_acceptor.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_name_validator.d.ts +10 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_name_validator.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_provider.d.ts +10 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_provider.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/ssm_environment_entries_generator.d.ts +5 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/ssm_environment_entries_generator.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/stable_backend_identifiers.d.ts +4 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/stable_backend_identifiers.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/stack_provider.d.ts +5 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/stack_provider.js +3 -0
- package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/package.json +21 -0
- package/node_modules/@aws-amplify/ai-constructs/package.json +5 -5
- package/node_modules/@aws-amplify/graphql-auth-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-auth-transformer/package.json +12 -12
- package/node_modules/@aws-amplify/graphql-conversation-transformer/CHANGELOG.md +6 -0
- package/node_modules/@aws-amplify/graphql-conversation-transformer/package.json +10 -10
- package/node_modules/@aws-amplify/graphql-default-value-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-default-value-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-function-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-function-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-generation-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-generation-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-http-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-http-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-index-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-index-transformer/package.json +7 -7
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/assets/mapping-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-maps-to-transformer/package.json +10 -10
- package/node_modules/@aws-amplify/graphql-model-transformer/CHANGELOG.md +7 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-notification-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-patching-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/import-table.d.ts +1 -0
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/import-table.d.ts.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/import-table.js +24 -4
- package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-table-manager-lambda/import-table.js.map +1 -1
- package/node_modules/@aws-amplify/graphql-model-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-predictions-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-predictions-transformer/lib/predictionsLambdaFunction.zip +0 -0
- package/node_modules/@aws-amplify/graphql-predictions-transformer/package.json +6 -6
- package/node_modules/@aws-amplify/graphql-relational-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-relational-transformer/package.json +8 -8
- package/node_modules/@aws-amplify/graphql-searchable-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-searchable-transformer/lib/streaming-lambda.zip +0 -0
- package/node_modules/@aws-amplify/graphql-searchable-transformer/package.json +7 -7
- package/node_modules/@aws-amplify/graphql-sql-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-sql-transformer/package.json +7 -7
- package/node_modules/@aws-amplify/graphql-transformer/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-transformer/package.json +19 -19
- package/node_modules/@aws-amplify/graphql-transformer-core/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-transformer-core/package.json +4 -4
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/CHANGELOG.md +4 -0
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/package.json +3 -3
- package/node_modules/@aws-amplify/graphql-transformer-interfaces/tsconfig.tsbuildinfo +1 -1
- package/node_modules/lodash.snakecase/LICENSE +47 -0
- package/node_modules/lodash.snakecase/README.md +18 -0
- package/node_modules/lodash.snakecase/index.js +435 -0
- package/node_modules/lodash.snakecase/package.json +17 -0
- package/package.json +24 -22
- package/src/amplify-graphql-api.ts +7 -1
package/node_modules/@aws-amplify/ai-constructs/lib/conversation/conversation_handler_construct.js
CHANGED
@@ -30,7 +30,7 @@ class ConversationHandlerFunction extends constructs_1.Construct {
|
|
30
30
|
* Creates Conversation Handler Function CDK construct.
|
31
31
|
*/
|
32
32
|
constructor(scope, id, props) {
|
33
|
-
var _a;
|
33
|
+
var _a, _b, _c, _d;
|
34
34
|
super(scope, id);
|
35
35
|
this.props = props;
|
36
36
|
/**
|
@@ -56,13 +56,25 @@ class ConversationHandlerFunction extends constructs_1.Construct {
|
|
56
56
|
}
|
57
57
|
return this.props.memoryMB;
|
58
58
|
};
|
59
|
+
this.resolveTimeout = () => {
|
60
|
+
const timeoutMin = 1;
|
61
|
+
const timeoutMax = 60 * 15; // 15 minutes in seconds
|
62
|
+
const timeoutDefault = 60;
|
63
|
+
if (this.props.timeoutSeconds === undefined) {
|
64
|
+
return timeoutDefault;
|
65
|
+
}
|
66
|
+
if (!isWholeNumberBetweenInclusive(this.props.timeoutSeconds, timeoutMin, timeoutMax)) {
|
67
|
+
throw new Error(`timeoutSeconds must be a whole number between ${timeoutMin} and ${timeoutMax} inclusive`);
|
68
|
+
}
|
69
|
+
return this.props.timeoutSeconds;
|
70
|
+
};
|
59
71
|
if (this.props.entry && !path_1.default.isAbsolute(this.props.entry)) {
|
60
72
|
throw new Error('Entry must be absolute path');
|
61
73
|
}
|
62
74
|
aws_cdk_lib_1.Tags.of(this).add(platform_core_1.TagName.FRIENDLY_NAME, id);
|
63
75
|
const conversationHandler = new aws_lambda_nodejs_1.NodejsFunction(this, `conversationHandlerFunction`, {
|
64
76
|
runtime: aws_lambda_1.Runtime.NODEJS_18_X,
|
65
|
-
timeout: aws_cdk_lib_1.Duration.seconds(
|
77
|
+
timeout: aws_cdk_lib_1.Duration.seconds(this.resolveTimeout()),
|
66
78
|
entry: (_a = this.props.entry) !== null && _a !== void 0 ? _a : defaultHandlerFilePath,
|
67
79
|
handler: 'handler',
|
68
80
|
memorySize: this.resolveMemory(),
|
@@ -73,8 +85,9 @@ class ConversationHandlerFunction extends constructs_1.Construct {
|
|
73
85
|
bundleAwsSDK: !!this.props.entry,
|
74
86
|
},
|
75
87
|
loggingFormat: aws_lambda_1.LoggingFormat.JSON,
|
88
|
+
applicationLogLevelV2: (_b = this.props.logging) === null || _b === void 0 ? void 0 : _b.level,
|
76
89
|
logGroup: new aws_logs_1.LogGroup(this, 'conversationHandlerFunctionLogGroup', {
|
77
|
-
retention: aws_logs_1.RetentionDays.INFINITE,
|
90
|
+
retention: (_d = (_c = this.props.logging) === null || _c === void 0 ? void 0 : _c.retention) !== null && _d !== void 0 ? _d : aws_logs_1.RetentionDays.INFINITE,
|
78
91
|
dataProtectionPolicy: new aws_logs_1.DataProtectionPolicy({
|
79
92
|
identifiers: [
|
80
93
|
new aws_logs_1.CustomDataIdentifier('JWTToken', 'ey[A-Za-z0-9-_=]+\\.[A-Za-z0-9-_=]+\\.?[A-Za-z0-9-_.+/=]*'),
|
@@ -108,4 +121,4 @@ class ConversationHandlerFunction extends constructs_1.Construct {
|
|
108
121
|
exports.ConversationHandlerFunction = ConversationHandlerFunction;
|
109
122
|
ConversationHandlerFunction.eventVersion = '1.0';
|
110
123
|
const isWholeNumberBetweenInclusive = (test, min, max) => min <= test && test <= max && test % 1 === 0;
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX2hhbmRsZXJfY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9jb252ZXJzYXRpb25faGFuZGxlcl9jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsNkNBQW9EO0FBQ3BELGlEQUE4RDtBQUM5RCx1REFJZ0M7QUFDaEMscUVBQStEO0FBQy9ELG1EQUs4QjtBQUM5QiwyQ0FBdUM7QUFDdkMsZ0RBQXdCO0FBQ3hCLDhEQUFxRDtBQUNyRCxnRkFHNkM7QUFFN0MsTUFBTSxhQUFhLEdBQUcsY0FBSSxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sc0JBQXNCLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQXlCOUU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSwyQkFDWCxTQUFRLHNCQUFTO0lBTWpCOztPQUVHO0lBQ0gsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ08sS0FBdUM7O1FBRXhELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFGQSxVQUFLLEdBQUwsS0FBSyxDQUFrQztRQXVFMUQ7O1dBRUc7UUFDSyxnQkFBVyxHQUFHLENBQ3BCLHFCQUVhLEVBQ1AsRUFBRTtZQUNSLHFCQUFxQixhQUFyQixxQkFBcUIsdUJBQXJCLHFCQUFxQixDQUFFLHlCQUF5QixDQUFDLGdEQUF1QixFQUFFO2dCQUN4RSxPQUFPLEVBQUUsR0FBRztnQkFDWixPQUFPLEVBQUU7b0JBQ1AsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWTtpQkFDaEU7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFTSxrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUMzQixNQUFNLFNB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SSxDQUFDLFNBQVMsQ0FDN0MsVUFBVSxDQUNJO2FBQ2pCO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3JELENBQUM7O0FBbEZILGtFQW9IQztBQWhIaUIsd0NBQVksR0FBaUMsS0FBSyxBQUF0QyxDQUF1QztBQWtIckUsTUFBTSw2QkFBNkIsR0FBRyxDQUNwQyxJQUFZLEVBQ1osR0FBVyxFQUNYLEdBQVcsRUFDWCxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmFja2VuZE91dHB1dFN0b3JhZ2VTdHJhdGVneSxcbiAgRnVuY3Rpb25SZXNvdXJjZXMsXG4gIFJlc291cmNlUHJvdmlkZXIsXG59IGZyb20gJ0Bhd3MtYW1wbGlmeS9wbHVnaW4tdHlwZXMnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7XG4gIENmbkZ1bmN0aW9uLFxuICBSdW50aW1lIGFzIExhbWJkYVJ1bnRpbWUsXG4gIExvZ2dpbmdGb3JtYXQsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQge1xuICBDdXN0b21EYXRhSWRlbnRpZmllcixcbiAgRGF0YVByb3RlY3Rpb25Qb2xpY3ksXG4gIExvZ0dyb3VwLFxuICBSZXRlbnRpb25EYXlzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgVGFnTmFtZSB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9wbGF0Zm9ybS1jb3JlJztcbmltcG9ydCB7XG4gIEFJQ29udmVyc2F0aW9uT3V0cHV0LFxuICBhaUNvbnZlcnNhdGlvbk91dHB1dEtleSxcbn0gZnJvbSAnQGF3cy1hbXBsaWZ5L2JhY2tlbmQtb3V0cHV0LXNjaGVtYXMnO1xuXG5jb25zdCByZXNvdXJjZXNSb290ID0gcGF0aC5ub3JtYWxpemUocGF0aC5qb2luKF9fZGlybmFtZSwgJ3J1bnRpbWUnKSk7XG5jb25zdCBkZWZhdWx0SGFuZGxlckZpbGVQYXRoID0gcGF0aC5qb2luKHJlc291cmNlc1Jvb3QsICdkZWZhdWx0X2hhbmRsZXIuanMnKTtcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uSGFuZGxlckZ1bmN0aW9uUHJvcHMgPSB7XG4gIGVudHJ5Pzogc3RyaW5nO1xuICBtb2RlbHM6IEFycmF5PHtcbiAgICBtb2RlbElkOiBzdHJpbmc7XG4gICAgcmVnaW9uPzogc3RyaW5nO1xuICB9PjtcbiAgLyoqXG4gICAqIEFuIGFtb3VudCBvZiBtZW1vcnkgKFJBTSkgdG8gYWxsb2NhdGUgdG8gdGhlIGZ1bmN0aW9uIGJldHdlZW4gMTI4IGFuZCAxMDI0MCBNQi5cbiAgICogTXVzdCBiZSBhIHdob2xlIG51bWJlci5cbiAgICogRGVmYXVsdCBpcyA1MTJNQi5cbiAgICovXG4gIG1lbW9yeU1CPzogbnVtYmVyO1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvdXRwdXRTdG9yYWdlU3RyYXRlZ3k/OiBCYWNrZW5kT3V0cHV0U3RvcmFnZVN0cmF0ZWd5PEFJQ29udmVyc2F0aW9uT3V0cHV0Pjtcbn07XG5cbi8vIEV2ZW50IGlzIGEgcHJvdG9jb2wgYmV0d2VlbiBBcHBTeW5jIGFuZCBMYW1iZGEgaGFuZGxlci4gVGhlcmVmb3JlLCBYLlkgc3Vic2V0IG9mIHNlbXZlciBpcyBlbm91Z2guXG4vLyBUeXBpbmcgdGhpcyBhcyAxLlggc28gdGhhdCBtYWpvciB2ZXJzaW9uIGNoYW5nZXMgYXJlIGNhdWdodCBieSBjb21waWxlciBpZiBjb25zdW1lciBvZiB0aGlzIGNvbnN0cnVjdCBpbnNwZWN0c1xuLy8gZXZlbnQgdmVyc2lvbi5cbmV4cG9ydCB0eXBlIENvbnZlcnNhdGlvblR1cm5FdmVudFZlcnNpb24gPSBgMS4ke251bWJlcn1gO1xuXG4vKipcbiAqIENvbnZlcnNhdGlvbiBIYW5kbGVyIEZ1bmN0aW9uIENESyBjb25zdHJ1Y3QuXG4gKiBUaGlzIGNvbnN0cnVjdCBkZXBsb3lzIHJlc291cmNlcyB0aGF0IGludGVncmF0ZSBjb252ZXJzYXRpb24gcm91dGVzXG4gKiBkZWZpbmVkIGluIGRhdGEgc2NoZW1hIHdpdGggQUkgbW9kZWxzIGF2YWlsYWJsZSBpbiBBV1MgQmVkcm9jay4gSS5lLlxuICogMS4gQVdTIExhbWJkYSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgY29udmVyc2F0aW9uIHR1cm4gZXZlbnRzLlxuICogICAgV2l0aCBBbXBsaWZ5IHByb3ZpZGVkIGltcGxlbWVudGF0aW9uIGJ5IGRlZmF1bHQgYW5kIG9wdGlvbiB0byBzcGVjaWZ5XG4gKiAgICBjdXN0b20gaGFuZGxlci5cbiAqIDIuIEFXUyBDbG91ZFdhdGNoIGxvZyBncm91cCBwb2xpY3kgd2l0aCBhcHByb3ByaWF0ZSBkYXRhIHByb3RlY3Rpb24gcG9saWNpZXMuXG4gKiAzLiBBV1MgSUFNIHBvbGljeSB0aGF0IGdyYW50cyBhY2Nlc3MgdG8gc2VsZWN0ZWQgQVdTIEJlZHJvY2sgbW9kZWxzLlxuICovXG5leHBvcnQgY2xhc3MgQ29udmVyc2F0aW9uSGFuZGxlckZ1bmN0aW9uXG4gIGV4dGVuZHMgQ29uc3RydWN0XG4gIGltcGxlbWVudHMgUmVzb3VyY2VQcm92aWRlcjxGdW5jdGlvblJlc291cmNlcz5cbntcbiAgc3RhdGljIHJlYWRvbmx5IGV2ZW50VmVyc2lvbjogQ29udmVyc2F0aW9uVHVybkV2ZW50VmVyc2lvbiA9ICcxLjAnO1xuICByZXNvdXJjZXM6IEZ1bmN0aW9uUmVzb3VyY2VzO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIENvbnZlcnNhdGlvbiBIYW5kbGVyIEZ1bmN0aW9uIENESyBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQ29udmVyc2F0aW9uSGFuZGxlckZ1bmN0aW9uUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmICh0aGlzLnByb3BzLmVudHJ5ICYmICFwYXRoLmlzQWJzb2x1dGUodGhpcy5wcm9wcy5lbnRyeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW50cnkgbXVzdCBiZSBhYnNvbHV0ZSBwYXRoJyk7XG4gICAgfVxuXG4gICAgVGFncy5vZih0aGlzKS5hZGQoVGFnTmFtZS5GUklFTkRMWV9OQU1FLCBpZCk7XG5cbiAgICBjb25zdCBjb252ZXJzYXRpb25IYW5kbGVyID0gbmV3IE5vZGVqc0Z1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGBjb252ZXJzYXRpb25IYW5kbGVyRnVuY3Rpb25gLFxuICAgICAge1xuICAgICAgICBydW50aW1lOiBMYW1iZGFSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgICAgZW50cnk6IHRoaXMucHJvcHMuZW50cnkgPz8gZGVmYXVsdEhhbmRsZXJGaWxlUGF0aCxcbiAgICAgICAgaGFuZGxlcjogJ2hhbmRsZXInLFxuICAgICAgICBtZW1vcnlTaXplOiB0aGlzLnJlc29sdmVNZW1vcnkoKSxcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAvLyBEbyBub3QgYnVuZGxlIFNESyBpZiBjb252ZXJzYXRpb24gaGFuZGxlciBpcyB1c2luZyBvdXIgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBpc1xuICAgICAgICAgIC8vIGNvbXBhdGlibGUgd2l0aCBMYW1iZGEgcHJvdmlkZWQgU0RLLlxuICAgICAgICAgIC8vIEZvciBjdXN0b20gZW50cnkgd2UgZG8gYnVuZGxlIFNESyBhcyB3ZSBjYW4ndCBjb250cm9sIHZlcnNpb24gY3VzdG9tZXIgaXMgY29kaW5nIGFnYWluc3QuXG4gICAgICAgICAgYnVuZGxlQXdzU0RLOiAhIXRoaXMucHJvcHMuZW50cnksXG4gICAgICAgIH0sXG4gICAgICAgIGxvZ2dpbmdGb3JtYXQ6IExvZ2dpbmdGb3JtYXQuSlNPTixcbiAgICAgICAgbG9nR3JvdXA6IG5ldyBMb2dHcm91cCh0aGlzLCAnY29udmVyc2F0aW9uSGFuZGxlckZ1bmN0aW9uTG9nR3JvdXAnLCB7XG4gICAgICAgICAgcmV0ZW50aW9uOiBSZXRlbnRpb25EYXlzLklORklOSVRFLFxuICAgICAgICAgIGRhdGFQcm90ZWN0aW9uUG9saWN5OiBuZXcgRGF0YVByb3RlY3Rpb25Qb2xpY3koe1xuICAgICAgICAgICAgaWRlbnRpZmllcnM6IFtcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbURhdGFJZGVudGlmaWVyKFxuICAgICAgICAgICAgICAgICdKV1RUb2tlbicsXG4gICAgICAgICAgICAgICAgJ2V5W0EtWmEtejAtOS1fPV0rXFxcXC5bQS1aYS16MC05LV89XStcXFxcLj9bQS1aYS16MC05LV8uKy89XSonXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKHRoaXMucHJvcHMubW9kZWxzICYmIHRoaXMucHJvcHMubW9kZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMucHJvcHMubW9kZWxzLm1hcChcbiAgICAgICAgKG1vZGVsKSA9PlxuICAgICAgICAgIGBhcm46YXdzOmJlZHJvY2s6JHtcbiAgICAgICAgICAgIG1vZGVsLnJlZ2lvbiA/PyBTdGFjay5vZih0aGlzKS5yZWdpb25cbiAgICAgICAgICB9Ojpmb3VuZGF0aW9uLW1vZGVsLyR7bW9kZWwubW9kZWxJZH1gXG4gICAgICApO1xuICAgICAgY29udmVyc2F0aW9uSGFuZGxlci5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdiZWRyb2NrOkludm9rZU1vZGVsJyxcbiAgICAgICAgICAgICdiZWRyb2NrOkludm9rZU1vZGVsV2l0aFJlc3BvbnNlU3RyZWFtJyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7XG4gICAgICBsYW1iZGE6IGNvbnZlcnNhdGlvbkhhbmRsZXIsXG4gICAgICBjZm5SZXNvdXJjZXM6IHtcbiAgICAgICAgY2ZuRnVuY3Rpb246IGNvbnZlcnNhdGlvbkhhbmRsZXIubm9kZS5maW5kQ2hpbGQoXG4gICAgICAgICAgJ1Jlc291cmNlJ1xuICAgICAgICApIGFzIENmbkZ1bmN0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgdGhpcy5zdG9yZU91dHB1dCh0aGlzLnByb3BzLm91dHB1dFN0b3JhZ2VTdHJhdGVneSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIGNvbnZlcnNhdGlvbiBoYW5kbGVyIHRvIGRlZmluZWQgZnVuY3Rpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBzdG9yZU91dHB1dCA9IChcbiAgICBvdXRwdXRTdG9yYWdlU3RyYXRlZ3k6XG4gICAgICB8IEJhY2tlbmRPdXRwdXRTdG9yYWdlU3RyYXRlZ3k8QUlDb252ZXJzYXRpb25PdXRwdXQ+XG4gICAgICB8IHVuZGVmaW5lZFxuICApOiB2b2lkID0+IHtcbiAgICBvdXRwdXRTdG9yYWdlU3RyYXRlZ3k/LmFwcGVuZFRvQmFja2VuZE91dHB1dExpc3QoYWlDb252ZXJzYXRpb25PdXRwdXRLZXksIHtcbiAgICAgIHZlcnNpb246ICcxJyxcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgZGVmaW5lZENvbnZlcnNhdGlvbkhhbmRsZXJzOiB0aGlzLnJlc291cmNlcy5sYW1iZGEuZnVuY3Rpb25OYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlc29sdmVNZW1vcnkgPSAoKSA9PiB7XG4gICAgY29uc3QgbWVtb3J5TWluID0gMTI4O1xuICAgIGNvbnN0IG1lbW9yeU1heCA9IDEwMjQwO1xuICAgIGNvbnN0IG1lbW9yeURlZmF1bHQgPSA1MTI7XG4gICAgaWYgKHRoaXMucHJvcHMubWVtb3J5TUIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG1lbW9yeURlZmF1bHQ7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICFpc1dob2xlTnVtYmVyQmV0d2VlbkluY2x1c2l2ZSh0aGlzLnByb3BzLm1lbW9yeU1CLCBtZW1vcnlNaW4sIG1lbW9yeU1heClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1lbW9yeU1CIG11c3QgYmUgYSB3aG9sZSBudW1iZXIgYmV0d2VlbiAke21lbW9yeU1pbn0gYW5kICR7bWVtb3J5TWF4fSBpbmNsdXNpdmVgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5tZW1vcnlNQjtcbiAgfTtcbn1cblxuY29uc3QgaXNXaG9sZU51bWJlckJldHdlZW5JbmNsdXNpdmUgPSAoXG4gIHRlc3Q6IG51bWJlcixcbiAgbWluOiBudW1iZXIsXG4gIG1heDogbnVtYmVyXG4pID0+IG1pbiA8PSB0ZXN0ICYmIHRlc3QgPD0gbWF4ICYmIHRlc3QgJSAxID09PSAwO1xuIl19
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uX2hhbmRsZXJfY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9jb252ZXJzYXRpb25faGFuZGxlcl9jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsNkNBQW9EO0FBQ3BELGlEQUE4RDtBQUM5RCx1REFLZ0M7QUFDaEMscUVBQStEO0FBQy9ELG1EQUs4QjtBQUM5QiwyQ0FBdUM7QUFDdkMsZ0RBQXdCO0FBQ3hCLDhEQUFxRDtBQUNyRCxnRkFHNkM7QUFFN0MsTUFBTSxhQUFhLEdBQUcsY0FBSSxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sc0JBQXNCLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQXNDOUU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSwyQkFDWCxTQUFRLHNCQUFTO0lBTWpCOztPQUVHO0lBQ0gsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ08sS0FBdUM7O1FBRXhELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFGQSxVQUFLLEdBQUwsS0FBSyxDQUFrQztRQXdFMUQ7O1dBRUc7UUFDSyxnQkFBVyxHQUFHLENBQ3BCLHFCQUVhLEVBQ1AsRUFBRTtZQUNSLHFCQUFxQixhQUFyQixxQkFBcUIsdUJBQXJCLHFCQUFxQixDQUFFLHlCQUF5QixDQUFDLGdEQUF1QixFQUFFO2dCQUN4RSxPQUFPLEVBQUUsR0FBRztnQkFDWixPQUFPLEVBQUU7b0JBQ1AsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWTtpQkFDaEU7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFTSxrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUMzQixNQUFNLFNB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ZE91dHB1dFN0b3JhZ2VTdHJhdGVneSxcbiAgRnVuY3Rpb25SZXNvdXJjZXMsXG4gIFJlc291cmNlUHJvdmlkZXIsXG59IGZyb20gJ0Bhd3MtYW1wbGlmeS9wbHVnaW4tdHlwZXMnO1xuaW1wb3J0IHsgRHVyYXRpb24sIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRWZmZWN0LCBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uTG9nTGV2ZWwsXG4gIENmbkZ1bmN0aW9uLFxuICBSdW50aW1lIGFzIExhbWJkYVJ1bnRpbWUsXG4gIExvZ2dpbmdGb3JtYXQsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQge1xuICBDdXN0b21EYXRhSWRlbnRpZmllcixcbiAgRGF0YVByb3RlY3Rpb25Qb2xpY3ksXG4gIExvZ0dyb3VwLFxuICBSZXRlbnRpb25EYXlzLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgVGFnTmFtZSB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9wbGF0Zm9ybS1jb3JlJztcbmltcG9ydCB7XG4gIEFJQ29udmVyc2F0aW9uT3V0cHV0LFxuICBhaUNvbnZlcnNhdGlvbk91dHB1dEtleSxcbn0gZnJvbSAnQGF3cy1hbXBsaWZ5L2JhY2tlbmQtb3V0cHV0LXNjaGVtYXMnO1xuXG5jb25zdCByZXNvdXJjZXNSb290ID0gcGF0aC5ub3JtYWxpemUocGF0aC5qb2luKF9fZGlybmFtZSwgJ3J1bnRpbWUnKSk7XG5jb25zdCBkZWZhdWx0SGFuZGxlckZpbGVQYXRoID0gcGF0aC5qb2luKHJlc291cmNlc1Jvb3QsICdkZWZhdWx0X2hhbmRsZXIuanMnKTtcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uSGFuZGxlckZ1bmN0aW9uUHJvcHMgPSB7XG4gIGVudHJ5Pzogc3RyaW5nO1xuICBtb2RlbHM6IEFycmF5PHtcbiAgICBtb2RlbElkOiBzdHJpbmc7XG4gICAgcmVnaW9uPzogc3RyaW5nO1xuICB9PjtcbiAgLyoqXG4gICAqIEFuIGFtb3VudCBvZiBtZW1vcnkgKFJBTSkgdG8gYWxsb2NhdGUgdG8gdGhlIGZ1bmN0aW9uIGJldHdlZW4gMTI4IGFuZCAxMDI0MCBNQi5cbiAgICogTXVzdCBiZSBhIHdob2xlIG51bWJlci5cbiAgICogRGVmYXVsdCBpcyA1MTJNQi5cbiAgICovXG4gIG1lbW9yeU1CPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiBhbW91bnQgb2YgdGltZSBpbiBzZWNvbmRzIGJldHdlZW4gMSBzZWNvbmQgYW5kIDE1IG1pbnV0ZXMuXG4gICAqIE11c3QgYmUgYSB3aG9sZSBudW1iZXIuXG4gICAqIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cbiAgICovXG4gIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuXG4gIGxvZ2dpbmc/OiB7XG4gICAgbGV2ZWw/OiBBcHBsaWNhdGlvbkxvZ0xldmVsO1xuICAgIHJldGVudGlvbj86IFJldGVudGlvbkRheXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb3V0cHV0U3RvcmFnZVN0cmF0ZWd5PzogQmFja2VuZE91dHB1dFN0b3JhZ2VTdHJhdGVneTxBSUNvbnZlcnNhdGlvbk91dHB1dD47XG59O1xuXG4vLyBFdmVudCBpcyBhIHByb3RvY29sIGJldHdlZW4gQXBwU3luYyBhbmQgTGFtYmRhIGhhbmRsZXIuIFRoZXJlZm9yZSwgWC5ZIHN1YnNldCBvZiBzZW12ZXIgaXMgZW5vdWdoLlxuLy8gVHlwaW5nIHRoaXMgYXMgMS5YIHNvIHRoYXQgbWFqb3IgdmVyc2lvbiBjaGFuZ2VzIGFyZSBjYXVnaHQgYnkgY29tcGlsZXIgaWYgY29uc3VtZXIgb2YgdGhpcyBjb25zdHJ1Y3QgaW5zcGVjdHNcbi8vIGV2ZW50IHZlcnNpb24uXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25UdXJuRXZlbnRWZXJzaW9uID0gYDEuJHtudW1iZXJ9YDtcblxuLyoqXG4gKiBDb252ZXJzYXRpb24gSGFuZGxlciBGdW5jdGlvbiBDREsgY29uc3RydWN0LlxuICogVGhpcyBjb25zdHJ1Y3QgZGVwbG95cyByZXNvdXJjZXMgdGhhdCBpbnRlZ3JhdGUgY29udmVyc2F0aW9uIHJvdXRlc1xuICogZGVmaW5lZCBpbiBkYXRhIHNjaGVtYSB3aXRoIEFJIG1vZGVscyBhdmFpbGFibGUgaW4gQVdTIEJlZHJvY2suIEkuZS5cbiAqIDEuIEFXUyBMYW1iZGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIGNvbnZlcnNhdGlvbiB0dXJuIGV2ZW50cy5cbiAqICAgIFdpdGggQW1wbGlmeSBwcm92aWRlZCBpbXBsZW1lbnRhdGlvbiBieSBkZWZhdWx0IGFuZCBvcHRpb24gdG8gc3BlY2lmeVxuICogICAgY3VzdG9tIGhhbmRsZXIuXG4gKiAyLiBBV1MgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgcG9saWN5IHdpdGggYXBwcm9wcmlhdGUgZGF0YSBwcm90ZWN0aW9uIHBvbGljaWVzLlxuICogMy4gQVdTIElBTSBwb2xpY3kgdGhhdCBncmFudHMgYWNjZXNzIHRvIHNlbGVjdGVkIEFXUyBCZWRyb2NrIG1vZGVscy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvbkhhbmRsZXJGdW5jdGlvblxuICBleHRlbmRzIENvbnN0cnVjdFxuICBpbXBsZW1lbnRzIFJlc291cmNlUHJvdmlkZXI8RnVuY3Rpb25SZXNvdXJjZXM+XG57XG4gIHN0YXRpYyByZWFkb25seSBldmVudFZlcnNpb246IENvbnZlcnNhdGlvblR1cm5FdmVudFZlcnNpb24gPSAnMS4wJztcbiAgcmVzb3VyY2VzOiBGdW5jdGlvblJlc291cmNlcztcblxuICAvKipcbiAgICogQ3JlYXRlcyBDb252ZXJzYXRpb24gSGFuZGxlciBGdW5jdGlvbiBDREsgY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IENvbnZlcnNhdGlvbkhhbmRsZXJGdW5jdGlvblByb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5lbnRyeSAmJiAhcGF0aC5pc0Fic29sdXRlKHRoaXMucHJvcHMuZW50cnkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VudHJ5IG11c3QgYmUgYWJzb2x1dGUgcGF0aCcpO1xuICAgIH1cblxuICAgIFRhZ3Mub2YodGhpcykuYWRkKFRhZ05hbWUuRlJJRU5ETFlfTkFNRSwgaWQpO1xuXG4gICAgY29uc3QgY29udmVyc2F0aW9uSGFuZGxlciA9IG5ldyBOb2RlanNGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBgY29udmVyc2F0aW9uSGFuZGxlckZ1bmN0aW9uYCxcbiAgICAgIHtcbiAgICAgICAgcnVudGltZTogTGFtYmRhUnVudGltZS5OT0RFSlNfMThfWCxcbiAgICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyh0aGlzLnJlc29sdmVUaW1lb3V0KCkpLFxuICAgICAgICBlbnRyeTogdGhpcy5wcm9wcy5lbnRyeSA/PyBkZWZhdWx0SGFuZGxlckZpbGVQYXRoLFxuICAgICAgICBoYW5kbGVyOiAnaGFuZGxlcicsXG4gICAgICAgIG1lbW9yeVNpemU6IHRoaXMucmVzb2x2ZU1lbW9yeSgpLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIC8vIERvIG5vdCBidW5kbGUgU0RLIGlmIGNvbnZlcnNhdGlvbiBoYW5kbGVyIGlzIHVzaW5nIG91ciBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIGlzXG4gICAgICAgICAgLy8gY29tcGF0aWJsZSB3aXRoIExhbWJkYSBwcm92aWRlZCBTREsuXG4gICAgICAgICAgLy8gRm9yIGN1c3RvbSBlbnRyeSB3ZSBkbyBidW5kbGUgU0RLIGFzIHdlIGNhbid0IGNvbnRyb2wgdmVyc2lvbiBjdXN0b21lciBpcyBjb2RpbmcgYWdhaW5zdC5cbiAgICAgICAgICBidW5kbGVBd3NTREs6ICEhdGhpcy5wcm9wcy5lbnRyeSxcbiAgICAgICAgfSxcbiAgICAgICAgbG9nZ2luZ0Zvcm1hdDogTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgICBhcHBsaWNhdGlvbkxvZ0xldmVsVjI6IHRoaXMucHJvcHMubG9nZ2luZz8ubGV2ZWwsXG4gICAgICAgIGxvZ0dyb3VwOiBuZXcgTG9nR3JvdXAodGhpcywgJ2NvbnZlcnNhdGlvbkhhbmRsZXJGdW5jdGlvbkxvZ0dyb3VwJywge1xuICAgICAgICAgIHJldGVudGlvbjogdGhpcy5wcm9wcy5sb2dnaW5nPy5yZXRlbnRpb24gPz8gUmV0ZW50aW9uRGF5cy5JTkZJTklURSxcbiAgICAgICAgICBkYXRhUHJvdGVjdGlvblBvbGljeTogbmV3IERhdGFQcm90ZWN0aW9uUG9saWN5KHtcbiAgICAgICAgICAgIGlkZW50aWZpZXJzOiBbXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21EYXRhSWRlbnRpZmllcihcbiAgICAgICAgICAgICAgICAnSldUVG9rZW4nLFxuICAgICAgICAgICAgICAgICdleVtBLVphLXowLTktXz1dK1xcXFwuW0EtWmEtejAtOS1fPV0rXFxcXC4/W0EtWmEtejAtOS1fLisvPV0qJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSksXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmICh0aGlzLnByb3BzLm1vZGVscyAmJiB0aGlzLnByb3BzLm1vZGVscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLnByb3BzLm1vZGVscy5tYXAoXG4gICAgICAgIChtb2RlbCkgPT5cbiAgICAgICAgICBgYXJuOmF3czpiZWRyb2NrOiR7XG4gICAgICAgICAgICBtb2RlbC5yZWdpb24gPz8gU3RhY2sub2YodGhpcykucmVnaW9uXG4gICAgICAgICAgfTo6Zm91bmRhdGlvbi1tb2RlbC8ke21vZGVsLm1vZGVsSWR9YFxuICAgICAgKTtcbiAgICAgIGNvbnZlcnNhdGlvbkhhbmRsZXIuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAnYmVkcm9jazpJbnZva2VNb2RlbCcsXG4gICAgICAgICAgICAnYmVkcm9jazpJbnZva2VNb2RlbFdpdGhSZXNwb25zZVN0cmVhbScsXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucmVzb3VyY2VzID0ge1xuICAgICAgbGFtYmRhOiBjb252ZXJzYXRpb25IYW5kbGVyLFxuICAgICAgY2ZuUmVzb3VyY2VzOiB7XG4gICAgICAgIGNmbkZ1bmN0aW9uOiBjb252ZXJzYXRpb25IYW5kbGVyLm5vZGUuZmluZENoaWxkKFxuICAgICAgICAgICdSZXNvdXJjZSdcbiAgICAgICAgKSBhcyBDZm5GdW5jdGlvbixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuc3RvcmVPdXRwdXQodGhpcy5wcm9wcy5vdXRwdXRTdG9yYWdlU3RyYXRlZ3kpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZCBjb252ZXJzYXRpb24gaGFuZGxlciB0byBkZWZpbmVkIGZ1bmN0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgc3RvcmVPdXRwdXQgPSAoXG4gICAgb3V0cHV0U3RvcmFnZVN0cmF0ZWd5OlxuICAgICAgfCBCYWNrZW5kT3V0cHV0U3RvcmFnZVN0cmF0ZWd5PEFJQ29udmVyc2F0aW9uT3V0cHV0PlxuICAgICAgfCB1bmRlZmluZWRcbiAgKTogdm9pZCA9PiB7XG4gICAgb3V0cHV0U3RvcmFnZVN0cmF0ZWd5Py5hcHBlbmRUb0JhY2tlbmRPdXRwdXRMaXN0KGFpQ29udmVyc2F0aW9uT3V0cHV0S2V5LCB7XG4gICAgICB2ZXJzaW9uOiAnMScsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGRlZmluZWRDb252ZXJzYXRpb25IYW5kbGVyczogdGhpcy5yZXNvdXJjZXMubGFtYmRhLmZ1bmN0aW9uTmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZXNvbHZlTWVtb3J5ID0gKCkgPT4ge1xuICAgIGNvbnN0IG1lbW9yeU1pbiA9IDEyODtcbiAgICBjb25zdCBtZW1vcnlNYXggPSAxMDI0MDtcbiAgICBjb25zdCBtZW1vcnlEZWZhdWx0ID0gNTEyO1xuICAgIGlmICh0aGlzLnByb3BzLm1lbW9yeU1CID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBtZW1vcnlEZWZhdWx0O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhaXNXaG9sZU51bWJlckJldHdlZW5JbmNsdXNpdmUodGhpcy5wcm9wcy5tZW1vcnlNQiwgbWVtb3J5TWluLCBtZW1vcnlNYXgpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtZW1vcnlNQiBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyIGJldHdlZW4gJHttZW1vcnlNaW59IGFuZCAke21lbW9yeU1heH0gaW5jbHVzaXZlYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubWVtb3J5TUI7XG4gIH07XG5cbiAgcHJpdmF0ZSByZXNvbHZlVGltZW91dCA9ICgpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0TWluID0gMTtcbiAgICBjb25zdCB0aW1lb3V0TWF4ID0gNjAgKiAxNTsgLy8gMTUgbWludXRlcyBpbiBzZWNvbmRzXG4gICAgY29uc3QgdGltZW91dERlZmF1bHQgPSA2MDtcbiAgICBpZiAodGhpcy5wcm9wcy50aW1lb3V0U2Vjb25kcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGltZW91dERlZmF1bHQ7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzV2hvbGVOdW1iZXJCZXR3ZWVuSW5jbHVzaXZlKFxuICAgICAgICB0aGlzLnByb3BzLnRpbWVvdXRTZWNvbmRzLFxuICAgICAgICB0aW1lb3V0TWluLFxuICAgICAgICB0aW1lb3V0TWF4XG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB0aW1lb3V0U2Vjb25kcyBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyIGJldHdlZW4gJHt0aW1lb3V0TWlufSBhbmQgJHt0aW1lb3V0TWF4fSBpbmNsdXNpdmVgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy50aW1lb3V0U2Vjb25kcztcbiAgfTtcbn1cblxuY29uc3QgaXNXaG9sZU51bWJlckJldHdlZW5JbmNsdXNpdmUgPSAoXG4gIHRlc3Q6IG51bWJlcixcbiAgbWluOiBudW1iZXIsXG4gIG1heDogbnVtYmVyXG4pID0+IG1pbiA8PSB0ZXN0ICYmIHRlc3QgPD0gbWF4ICYmIHRlc3QgJSAxID09PSAwO1xuIl19
|
package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/bedrock_converse_adapter.js
CHANGED
@@ -245,94 +245,112 @@ class BedrockConverseAdapter {
|
|
245
245
|
role: undefined,
|
246
246
|
content: [],
|
247
247
|
};
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
blockDeltaIndex = 0;
|
255
|
-
lastBlockDeltaIndex = 0;
|
256
|
-
if ((_a = chunk.contentBlockStart.start) === null || _a === void 0 ? void 0 : _a.toolUse) {
|
257
|
-
toolUseBlock = {
|
258
|
-
toolUse: {
|
259
|
-
...(_b = chunk.contentBlockStart.start) === null || _b === void 0 ? void 0 : _b.toolUse,
|
260
|
-
input: undefined,
|
261
|
-
},
|
262
|
-
};
|
248
|
+
let processedBedrockChunks = 0;
|
249
|
+
try {
|
250
|
+
for await (const chunk of bedrockResponse.stream) {
|
251
|
+
this.logger.debug('Bedrock Converse Stream response chunk:', chunk);
|
252
|
+
if (chunk.messageStart) {
|
253
|
+
accumulatedAssistantMessage.role = chunk.messageStart.role;
|
263
254
|
}
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
if (
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
255
|
+
else if (chunk.contentBlockStart) {
|
256
|
+
blockDeltaIndex = 0;
|
257
|
+
lastBlockDeltaIndex = 0;
|
258
|
+
if ((_a = chunk.contentBlockStart.start) === null || _a === void 0 ? void 0 : _a.toolUse) {
|
259
|
+
toolUseBlock = {
|
260
|
+
toolUse: {
|
261
|
+
...(_b = chunk.contentBlockStart.start) === null || _b === void 0 ? void 0 : _b.toolUse,
|
262
|
+
input: undefined,
|
263
|
+
},
|
264
|
+
};
|
272
265
|
}
|
273
266
|
}
|
274
|
-
else if (
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
267
|
+
else if (chunk.contentBlockDelta) {
|
268
|
+
if ((_c = chunk.contentBlockDelta.delta) === null || _c === void 0 ? void 0 : _c.toolUse) {
|
269
|
+
if (!chunk.contentBlockDelta.delta.toolUse.input) {
|
270
|
+
toolUseInput = '';
|
271
|
+
}
|
272
|
+
else {
|
273
|
+
toolUseInput += chunk.contentBlockDelta.delta.toolUse.input;
|
274
|
+
}
|
275
|
+
}
|
276
|
+
else if ((_d = chunk.contentBlockDelta.delta) === null || _d === void 0 ? void 0 : _d.text) {
|
277
|
+
text += chunk.contentBlockDelta.delta.text;
|
278
|
+
const amplifyChunk = {
|
279
|
+
accumulatedTurnContent: [...accumulatedTurnContent, { text }],
|
280
|
+
conversationId: this.event.conversationId,
|
281
|
+
associatedUserMessageId: this.event.currentMessageId,
|
282
|
+
contentBlockText: chunk.contentBlockDelta.delta.text,
|
283
|
+
contentBlockIndex: blockIndex,
|
284
|
+
contentBlockDeltaIndex: blockDeltaIndex,
|
285
|
+
};
|
286
|
+
// padding is sent from Bedrock but not included in the API.
|
287
|
+
if ('p' in chunk.contentBlockDelta) {
|
288
|
+
const bedrockPadding = chunk.contentBlockDelta.p;
|
289
|
+
if (typeof bedrockPadding === 'string') {
|
290
|
+
amplifyChunk.p = bedrockPadding;
|
291
|
+
}
|
292
|
+
}
|
293
|
+
yield amplifyChunk;
|
294
|
+
lastBlockDeltaIndex = blockDeltaIndex;
|
295
|
+
blockDeltaIndex++;
|
296
|
+
}
|
286
297
|
}
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
298
|
+
else if (chunk.contentBlockStop) {
|
299
|
+
if (toolUseBlock) {
|
300
|
+
if (toolUseInput) {
|
301
|
+
toolUseBlock.toolUse.input = JSON.parse(toolUseInput);
|
302
|
+
}
|
303
|
+
else {
|
304
|
+
// Bedrock API requires tool input to be non-null in message history.
|
305
|
+
// Therefore, falling back to empty object.
|
306
|
+
toolUseBlock.toolUse.input = {};
|
307
|
+
}
|
308
|
+
(_e = accumulatedAssistantMessage.content) === null || _e === void 0 ? void 0 : _e.push(toolUseBlock);
|
309
|
+
if (toolUseBlock.toolUse.name &&
|
310
|
+
this.clientToolByName.has(toolUseBlock.toolUse.name)) {
|
311
|
+
clientToolsRequested = true;
|
312
|
+
accumulatedTurnContent.push(toolUseBlock);
|
313
|
+
yield {
|
314
|
+
accumulatedTurnContent: [...accumulatedTurnContent],
|
315
|
+
conversationId: this.event.conversationId,
|
316
|
+
associatedUserMessageId: this.event.currentMessageId,
|
317
|
+
contentBlockIndex: blockIndex,
|
318
|
+
contentBlockToolUse: JSON.stringify(toolUseBlock),
|
319
|
+
};
|
320
|
+
lastBlockIndex = blockIndex;
|
321
|
+
blockIndex++;
|
322
|
+
}
|
323
|
+
toolUseBlock = undefined;
|
324
|
+
toolUseInput = '';
|
292
325
|
}
|
293
326
|
else {
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
(_e = accumulatedAssistantMessage.content) === null || _e === void 0 ? void 0 : _e.push(toolUseBlock);
|
299
|
-
if (toolUseBlock.toolUse.name &&
|
300
|
-
this.clientToolByName.has(toolUseBlock.toolUse.name)) {
|
301
|
-
clientToolsRequested = true;
|
302
|
-
accumulatedTurnContent.push(toolUseBlock);
|
327
|
+
(_f = accumulatedAssistantMessage.content) === null || _f === void 0 ? void 0 : _f.push({
|
328
|
+
text,
|
329
|
+
});
|
330
|
+
accumulatedTurnContent.push({ text });
|
303
331
|
yield {
|
304
332
|
accumulatedTurnContent: [...accumulatedTurnContent],
|
305
333
|
conversationId: this.event.conversationId,
|
306
334
|
associatedUserMessageId: this.event.currentMessageId,
|
307
335
|
contentBlockIndex: blockIndex,
|
308
|
-
|
336
|
+
contentBlockDoneAtIndex: lastBlockDeltaIndex,
|
309
337
|
};
|
338
|
+
text = '';
|
310
339
|
lastBlockIndex = blockIndex;
|
311
340
|
blockIndex++;
|
312
341
|
}
|
313
|
-
toolUseBlock = undefined;
|
314
|
-
toolUseInput = '';
|
315
342
|
}
|
316
|
-
else {
|
317
|
-
(
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
accumulatedTurnContent: [...accumulatedTurnContent],
|
323
|
-
conversationId: this.event.conversationId,
|
324
|
-
associatedUserMessageId: this.event.currentMessageId,
|
325
|
-
contentBlockIndex: blockIndex,
|
326
|
-
contentBlockDoneAtIndex: lastBlockDeltaIndex,
|
327
|
-
};
|
328
|
-
text = '';
|
329
|
-
lastBlockIndex = blockIndex;
|
330
|
-
blockIndex++;
|
343
|
+
else if (chunk.messageStop) {
|
344
|
+
stopReason = (_g = chunk.messageStop.stopReason) !== null && _g !== void 0 ? _g : '';
|
345
|
+
}
|
346
|
+
processedBedrockChunks++;
|
347
|
+
if (processedBedrockChunks % 1000 === 0) {
|
348
|
+
this.logger.info(`Processed ${processedBedrockChunks} chunks from Bedrock Converse Stream response, requestId=${bedrockResponse.$metadata.requestId}`);
|
331
349
|
}
|
332
350
|
}
|
333
|
-
|
334
|
-
|
335
|
-
}
|
351
|
+
}
|
352
|
+
finally {
|
353
|
+
this.logger.info(`Completed processing ${processedBedrockChunks} chunks from Bedrock Converse Stream response, requestId=${bedrockResponse.$metadata.requestId}`);
|
336
354
|
}
|
337
355
|
this.logger.debug('Accumulated Bedrock Converse Stream response:', accumulatedAssistantMessage);
|
338
356
|
if (clientToolsRequested) {
|
@@ -373,4 +391,4 @@ class BedrockConverseAdapter {
|
|
373
391
|
}
|
374
392
|
}
|
375
393
|
exports.BedrockConverseAdapter = BedrockConverseAdapter;
|
376
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9ja19jb252ZXJzZV9hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2JlZHJvY2tfY29udmVyc2VfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFheUM7QUFPekMsaUVBQTRFO0FBQzVFLHFHQUErRjtBQUUvRixxQ0FBMkM7QUFDM0MsK0RBQTBEO0FBRTFEOzs7R0FHRztBQUNILE1BQWEsc0JBQXNCO0lBUWpDOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDN0MsZUFBc0MsRUFDckIsZ0JBQXNDLElBQUksNkNBQW9CLENBQzdFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FDNUMsRUFDRCxrQkFBa0IsR0FBRyxJQUFJLHlEQUFrQyxDQUFDLEtBQUssQ0FBQyxFQUNqRCwwQkFBMEIsSUFBSSw0RUFBbUMsQ0FDaEYsS0FBSyxDQUNOLEVBQ0QsaUJBQWlCLEdBQUcsSUFBSSx1Q0FBaUIsQ0FBQyxLQUFLLENBQUMsRUFDL0IsU0FBUyxPQUFPOztRQVZoQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUU1QixrQkFBYSxHQUFiLGFBQWEsQ0FFN0I7UUFFZ0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUV2QztRQUVnQixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBbEJsQix5QkFBb0IsR0FDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNLLHFCQUFnQixHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBOEQzRSxlQUFVLEdBQUcsS0FBSyxJQUE2QixFQUFFOztZQUMvQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxHQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1lBRWhDLE1BQU0sUUFBUSxHQUNaLE1BQU0sSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFFakQsSUFBSSxlQUFzQyxDQUFDO1lBQzNDLEdBQUc7Z0JBQ0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ2xELE1BQU0sb0JBQW9CLEdBQXlCO29CQUNqRCxPQUFPO29CQUNQLFFBQVEsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO29CQUN2QixNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQztvQkFDaEMsZUFBZSxFQUFFLHNCQUFzQjtvQkFDdkMsVUFBVTtpQkFDWCxDQUFDO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3JFLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxJQUFJLHdDQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FDMUMsQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxpREFBaUQsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFDdEYsZUFBZSxDQUFDLEtBQUssQ0FDdEIsQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDakUsSUFBSSxNQUFBLGVBQWUsQ0FBQyxNQUFNLDBDQUFFLE9BQU8sRUFBRTtvQkFDbkMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFBLGVBQWUsQ0FBQyxNQUFNLDBDQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNoRDtnQkFDRCxJQUFJLGVBQWUsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO29CQUM3QyxNQUFNLHFCQUFxQixHQUN6QixNQUFBLE1BQUEsTUFBQSxlQUFlLENBQUMsTUFBTSwwQ0FBRSxPQUFPLDBDQUFFLE9BQU8sbUNBQUksRUFBRSxDQUFDO29CQUNqRCxNQUFNLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQ2hELENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUNPLENBQUM7b0JBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUN0RCxDQUFDLEtBQUssRUFBRSxFQUFFOzt3QkFDUixPQUFBLENBQUEsTUFBQSxLQUFLLENBQUMsT0FBTywwQ0FBRSxJQUFJOzRCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUUsSUFBSSxDQUFDLENBQUE7cUJBQUEsQ0FDakQsQ0FBQztvQkFDRixJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2xDLG9FQUFvRTt3QkFDcEUsdUNBQXVDO3dCQUN2QyxPQUFPLG1CQUFtQixDQUFDO3FCQUM1QjtvQkFDRCxNQUFNLHlCQUF5QixHQUF3QixFQUFFLENBQUM7b0JBQzFELEtBQUssTUFBTSxvQkFBb0IsSUFBSSxhQUFhLEVBQUU7d0JBQ2hELE1BQU0sWUFBWSxHQUNoQixvQkFBa0QsQ0FBQzt3QkFDckQsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3BFLHlCQUF5QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO3FCQUN4RDtvQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLElBQUksRUFBRSxNQUFNO3dCQUNaLE9BQU8sRUFBRSx5QkFBeUI7cUJBQ25DLENBQUMsQ0FBQztpQkFDSjthQUNGLFFBQVEsZUFBZSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7WUFFcEQsT0FBTyxNQUFBLE1BQUEsTUFBQSxlQUFlLENBQUMsTUFBTSwwQ0FBRSxPQUFPLDBDQUFFLE9BQU8sbUNBQUksRUFBRSxDQUFDO1FBQ3hELENBQUMsQ0FBQztRQXdMRjs7OztXQUlHO1FBQ0ssc0NBQWlDLEdBQUcsS0FBSyxJQUUvQyxFQUFFOztZQUNGLE1BQU0sUUFBUSxHQUFtQixFQUFFLENBQUM7WUFDcEMsTUFBTSxhQUFhLEdBQ2pCLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekQsS0FBSyxNQUFNLE9BQU8sSUFBSSxhQUFhLEVBQUU7Z0JBQ25DLE1BQU0sY0FBYyxHQUF3QixFQUFFLENBQUM7Z0JBQy9DLEtBQUssTUFBTSxjQUFjLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtvQkFDNUMsSUFBSSxPQUFPLENBQUEsTUFBQSxNQUFBLGNBQWMsQ0FBQyxLQUFLLDBDQUFFLE1BQU0sMENBQUUsS0FBSyxDQUFBLEtBQUssUUFBUSxFQUFFO3dCQUMzRCxjQUFjLENBQUMsSUFBSSxDQUFDOzRCQUNsQixLQUFLLEVBQUU7Z0NBQ0wsTUFBTSxFQUFFLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQ0FDbkMsTUFBTSxFQUFFO29DQUNOLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7aUNBQ2hFOzZCQUNGO3lCQUNGLENBQUMsQ0FBQztxQkFDSjt5QkFBTTt3QkFDTCxtRUFBbUU7d0JBQ25FLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBOEIsQ0FBQyxDQUFDO3FCQUNyRDtpQkFDRjtnQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsT0FBTyxFQUFFLGNBQWM7aUJBQ3hCLENBQUMsQ0FBQzthQUNKO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBRU0sNEJBQXVCLEdBQUcsR0FBa0MsRUFBRTtZQUNwRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxTQUFTLENBQUM7YUFDbEI7WUFFRCxPQUFPO2dCQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBUSxFQUFFO29CQUNuQyxPQUFPO3dCQUNMLFFBQVEsRUFBRTs0QkFDUixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7NEJBQ1osV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXOzRCQUMxQixxR0FBcUc7NEJBQ3JHLHNDQUFzQzs0QkFDdEMsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUE4Qjt5QkFDOUM7cUJBQ0YsQ0FBQztnQkFDSixDQUFDLENBQUM7YUFDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRU0sZ0JBQVcsR0FBRyxLQUFLLEVBQ3pCLFlBQXdDLEVBQ2pCLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUM5QixNQUFNLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2FBQ2pFO1lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsTUFBTSxLQUFLLENBQ1Qsb0RBQW9ELFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQ2pGLENBQUM7YUFDSDtZQUNELElBQUk7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBCQUEwQixJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hDLE9BQU87b0JBQ0wsVUFBVSxFQUFFO3dCQUNWLFNBQVMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVM7d0JBQ3pDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQzt3QkFDdkIsTUFBTSxFQUFFLFNBQVM7cUJBQ2xCO2lCQUNGLENBQUM7YUFDSDtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRTtvQkFDdEIsT0FBTzt3QkFDTCxVQUFVLEVBQUU7NEJBQ1YsU0FBUyxFQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUzs0QkFDekMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7NEJBQ2pDLE1BQU0sRUFBRSxPQUFPO3lCQUNoQjtxQkFDRixDQUFDO2lCQUNIO2dCQUNELE9BQU87b0JBQ0wsVUFBVSxFQUFFO3dCQUNWLFNBQVMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVM7d0JBQ3pDLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLENBQUM7d0JBQzdDLE1BQU0sRUFBRSxPQUFPO3FCQUNoQjtpQkFDRixDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUM7UUFwWUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUNwQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQixnREFBZ0Q7WUFDaEQsNkdBQTZHO1lBQzdHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO2dCQUN0QyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixDQUFDLEVBQ0Q7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSw2QkFBNkI7U0FDcEMsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixHQUFHLGtCQUFrQixDQUFDLGFBQWEsRUFBRTtZQUNyQyxHQUFHLGVBQWU7U0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLDBDQUFFLFdBQVcsbUNBQUksRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN6QyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtZQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxjQUFjLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUMzQixNQUFNLElBQUksd0JBQWUsQ0FDdkIsa0RBQWtEO2dCQUNoRCxHQUFHLGNBQWM7YUFDbEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDaEIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQWlFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxDQUFDLG1CQUFtQjs7UUFDeEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsR0FDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUVoQyxNQUFNLFFBQVEsR0FDWixNQUFNLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBRWpELElBQUksZUFBNEMsQ0FBQztRQUNqRCxzRUFBc0U7UUFDdEUsNENBQTRDO1FBQzVDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLDhDQUE4QztRQUM5Qyx5RUFBeUU7UUFDekUsTUFBTSxzQkFBc0IsR0FBZ0MsRUFBRSxDQUFDO1FBQy9ELEdBQUc7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNsRCxNQUFNLG9CQUFvQixHQUErQjtnQkFDdkQsT0FBTztnQkFDUCxRQUFRLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLGVBQWUsRUFBRSxzQkFBc0I7Z0JBQ3ZDLFVBQVU7YUFDWCxDQUFDO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixrQ0FBa0MsRUFDbEMsb0JBQW9CLENBQ3JCLENBQUM7WUFDRixlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsSUFBSSw4Q0FBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUNoRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsd0RBQXdELGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQzlGLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxZQUFvRCxDQUFDO1lBQ3pELElBQUksb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksSUFBSSxHQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLFlBQVksR0FBVyxFQUFFLENBQUM7WUFDOUIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLDREQUE0RDtZQUM1RCxNQUFNLDJCQUEyQixHQUFZO2dCQUMzQyxJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsRUFBRTthQUNaLENBQUM7WUFFRixJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO29CQUN0QiwyQkFBMkIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7aUJBQzVEO3FCQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO29CQUNsQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO29CQUNwQixtQkFBbUIsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksTUFBQSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSywwQ0FBRSxPQUFPLEVBQUU7d0JBQzFDLFlBQVksR0FBRzs0QkFDYixPQUFPLEVBQUU7Z0NBQ1AsR0FBRyxNQUFBLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLDBDQUFFLE9BQU87Z0NBQ3pDLEtBQUssRUFBRSxTQUFTOzZCQUNqQjt5QkFDRixDQUFDO3FCQUNIO2lCQUNGO3FCQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO29CQUNsQyxJQUFJLE1BQUEsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssMENBQUUsT0FBTyxFQUFFO3dCQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFOzRCQUNoRCxZQUFZLEdBQUcsRUFBRSxDQUFDO3lCQUNuQjs2QkFBTTs0QkFDTCxZQUFZLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO3lCQUM3RDtxQkFDRjt5QkFBTSxJQUFJLE1BQUEsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssMENBQUUsSUFBSSxFQUFFO3dCQUM5QyxJQUFJLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQzNDLE1BQU07NEJBQ0osc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7NEJBQzdELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7NEJBQ3pDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCOzRCQUNwRCxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUk7NEJBQ3BELGlCQUFpQixFQUFFLFVBQVU7NEJBQzdCLHNCQUFzQixFQUFFLGVBQWU7eUJBQ3hDLENBQUM7d0JBQ0YsbUJBQW1CLEdBQUcsZUFBZSxDQUFDO3dCQUN0QyxlQUFlLEVBQUUsQ0FBQztxQkFDbkI7aUJBQ0Y7cUJBQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2pDLElBQUksWUFBWSxFQUFFO3dCQUNoQixJQUFJLFlBQVksRUFBRTs0QkFDaEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQzt5QkFDdkQ7NkJBQU07NEJBQ0wscUVBQXFFOzRCQUNyRSwyQ0FBMkM7NEJBQzNDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzt5QkFDakM7d0JBQ0QsTUFBQSwyQkFBMkIsQ0FBQyxPQUFPLDBDQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDeEQsSUFDRSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUk7NEJBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDcEQ7NEJBQ0Esb0JBQW9CLEdBQUcsSUFBSSxDQUFDOzRCQUM1QixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7NEJBQzFDLE1BQU07Z0NBQ0osc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO2dDQUNuRCxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjO2dDQUN6Qyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtnQ0FDcEQsaUJBQWlCLEVBQUUsVUFBVTtnQ0FDN0IsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7NkJBQ2xELENBQUM7NEJBQ0YsY0FBYyxHQUFHLFVBQVUsQ0FBQzs0QkFDNUIsVUFBVSxFQUFFLENBQUM7eUJBQ2Q7d0JBQ0QsWUFBWSxHQUFHLFNBQVMsQ0FBQzt3QkFDekIsWUFBWSxHQUFHLEVBQUUsQ0FBQztxQkFDbkI7eUJBQU07d0JBQ0wsTUFBQSwyQkFBMkIsQ0FBQyxPQUFPLDBDQUFFLElBQUksQ0FBQzs0QkFDeEMsSUFBSTt5QkFDTCxDQUFDLENBQUM7d0JBQ0gsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDdEMsTUFBTTs0QkFDSixzQkFBc0IsRUFBRSxDQUFDLEdBQUcsc0JBQXNCLENBQUM7NEJBQ25ELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7NEJBQ3pDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCOzRCQUNwRCxpQkFBaUIsRUFBRSxVQUFVOzRCQUM3Qix1QkFBdUIsRUFBRSxtQkFBbUI7eUJBQzdDLENBQUM7d0JBQ0YsSUFBSSxHQUFHLEVBQUUsQ0FBQzt3QkFDVixjQUFjLEdBQUcsVUFBVSxDQUFDO3dCQUM1QixVQUFVLEVBQUUsQ0FBQztxQkFDZDtpQkFDRjtxQkFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7b0JBQzVCLFVBQVUsR0FBRyxNQUFBLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxtQ0FBSSxFQUFFLENBQUM7aUJBQ2pEO2FBQ0Y7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZiwrQ0FBK0MsRUFDL0MsMkJBQTJCLENBQzVCLENBQUM7WUFDRixJQUFJLG9CQUFvQixFQUFFO2dCQUN4QixvRUFBb0U7Z0JBQ3BFLHVDQUF1QztnQkFDdkMsTUFBTTtvQkFDSixzQkFBc0IsRUFBRSxDQUFDLEdBQUcsc0JBQXNCLENBQUM7b0JBQ25ELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7b0JBQ3pDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO29CQUNwRCxpQkFBaUIsRUFBRSxjQUFjO29CQUNqQyxVQUFVLEVBQUUsVUFBVTtpQkFDdkIsQ0FBQztnQkFDRixPQUFPO2FBQ1I7WUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDM0MsSUFBSSxVQUFVLEtBQUssVUFBVSxFQUFFO2dCQUM3QixNQUFNLHFCQUFxQixHQUFHLE1BQUEsMkJBQTJCLENBQUMsT0FBTyxtQ0FBSSxFQUFFLENBQUM7Z0JBQ3hFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FDaEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQ08sQ0FBQztnQkFDdkMsTUFBTSx5QkFBeUIsR0FBd0IsRUFBRSxDQUFDO2dCQUMxRCxLQUFLLE1BQU0sb0JBQW9CLElBQUksYUFBYSxFQUFFO29CQUNoRCxNQUFNLFlBQVksR0FDaEIsb0JBQWtELENBQUM7b0JBQ3JELE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNwRSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztpQkFDeEQ7Z0JBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDWixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUseUJBQXlCO2lCQUNuQyxDQUFDLENBQUM7YUFDSjtTQUNGLFFBQVEsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUVwQyxNQUFNO1lBQ0osc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO1lBQ25ELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7WUFDekMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7WUFDcEQsaUJBQWlCLEVBQUUsY0FBYztZQUNqQyxVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDO0lBQ0osQ0FBQztDQXNHRjtBQTdaRCx3REE2WkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCZWRyb2NrUnVudGltZUNsaWVudCxcbiAgQ29udGVudEJsb2NrLFxuICBDb252ZXJzZUNvbW1hbmQsXG4gIENvbnZlcnNlQ29tbWFuZElucHV0LFxuICBDb252ZXJzZUNvbW1hbmRPdXRwdXQsXG4gIENvbnZlcnNlU3RyZWFtQ29tbWFuZCxcbiAgQ29udmVyc2VTdHJlYW1Db21tYW5kSW5wdXQsXG4gIENvbnZlcnNlU3RyZWFtQ29tbWFuZE91dHB1dCxcbiAgTWVzc2FnZSxcbiAgVG9vbCxcbiAgVG9vbENvbmZpZ3VyYXRpb24sXG4gIFRvb2xJbnB1dFNjaGVtYSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQge1xuICBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gIEV4ZWN1dGFibGVUb29sLFxuICBTdHJlYW1pbmdSZXNwb25zZUNodW5rLFxuICBUb29sRGVmaW5pdGlvbixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyIH0gZnJvbSAnLi9ldmVudC10b29scy1wcm92aWRlcic7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25NZXNzYWdlSGlzdG9yeVJldHJpZXZlciB9IGZyb20gJy4vY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXInO1xuaW1wb3J0ICogYXMgYmVkcm9jayBmcm9tICdAYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IFVzZXJBZ2VudFByb3ZpZGVyIH0gZnJvbSAnLi91c2VyX2FnZW50X3Byb3ZpZGVyJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpbnRlcmFjdGluZyB3aXRoIEJlZHJvY2sgQ29udmVyc2UgQVBJXG4gKiBpbiBvcmRlciB0byBwcm9kdWNlIGZpbmFsIHJlc3BvbnNlIHRoYXQgY2FuIGJlIHNlbnQgYmFjayB0byBjYWxsZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZWRyb2NrQ29udmVyc2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxUb29sczogQXJyYXk8VG9vbERlZmluaXRpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGFibGVUb29sczogQXJyYXk8RXhlY3V0YWJsZVRvb2w+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRvb2xzOiBBcnJheTxUb29sRGVmaW5pdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0YWJsZVRvb2xCeU5hbWU6IE1hcDxzdHJpbmcsIEV4ZWN1dGFibGVUb29sPiA9XG4gICAgbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRvb2xCeU5hbWU6IE1hcDxzdHJpbmcsIFRvb2xEZWZpbml0aW9uPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBCZWRyb2NrIENvbnZlcnNlIEFkYXB0ZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgYWRkaXRpb25hbFRvb2xzOiBBcnJheTxFeGVjdXRhYmxlVG9vbD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBiZWRyb2NrQ2xpZW50OiBCZWRyb2NrUnVudGltZUNsaWVudCA9IG5ldyBCZWRyb2NrUnVudGltZUNsaWVudChcbiAgICAgIHsgcmVnaW9uOiBldmVudC5tb2RlbENvbmZpZ3VyYXRpb24ucmVnaW9uIH1cbiAgICApLFxuICAgIGV2ZW50VG9vbHNQcm92aWRlciA9IG5ldyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyKGV2ZW50KSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyID0gbmV3IENvbnZlcnNhdGlvbk1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyKFxuICAgICAgZXZlbnRcbiAgICApLFxuICAgIHVzZXJBZ2VudFByb3ZpZGVyID0gbmV3IFVzZXJBZ2VudFByb3ZpZGVyKGV2ZW50KSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7XG4gICAgdGhpcy5iZWRyb2NrQ2xpZW50Lm1pZGRsZXdhcmVTdGFjay5hZGQoXG4gICAgICAobmV4dCkgPT4gKGFyZ3MpID0+IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZXF1ZXN0IGlzIHR5cGVkIGFzIHVua25vd24uXG4gICAgICAgIC8vIEJ1dCB0aGlzIGlzIHJlY29tbWVuZGVkIHdheSB0byBhbHRlciBoZWFkZXJzIHBlciBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMvYmxvYi9tYWluL1JFQURNRS5tZC5cbiAgICAgICAgYXJncy5yZXF1ZXN0LmhlYWRlcnNbJ3gtYW16LXVzZXItYWdlbnQnXSA9XG4gICAgICAgICAgdXNlckFnZW50UHJvdmlkZXIuZ2V0VXNlckFnZW50KCk7XG4gICAgICAgIHJldHVybiBuZXh0KGFyZ3MpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3RlcDogJ2J1aWxkJyxcbiAgICAgICAgbmFtZTogJ2FtcGxpZnktdXNlci1hZ2VudC1pbmplY3RvcicsXG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmV4ZWN1dGFibGVUb29scyA9IFtcbiAgICAgIC4uLmV2ZW50VG9vbHNQcm92aWRlci5nZXRFdmVudFRvb2xzKCksXG4gICAgICAuLi5hZGRpdGlvbmFsVG9vbHMsXG4gICAgXTtcbiAgICB0aGlzLmNsaWVudFRvb2xzID0gdGhpcy5ldmVudC50b29sc0NvbmZpZ3VyYXRpb24/LmNsaWVudFRvb2xzID8/IFtdO1xuICAgIHRoaXMuYWxsVG9vbHMgPSBbLi4udGhpcy5leGVjdXRhYmxlVG9vbHMsIC4uLnRoaXMuY2xpZW50VG9vbHNdO1xuICAgIGNvbnN0IGR1cGxpY2F0ZVRvb2xzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgdGhpcy5leGVjdXRhYmxlVG9vbHMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4ZWN1dGFibGVUb29sQnlOYW1lLnNldCh0Lm5hbWUsIHQpO1xuICAgIH0pO1xuICAgIHRoaXMuY2xpZW50VG9vbHMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jbGllbnRUb29sQnlOYW1lLmhhcyh0Lm5hbWUpKSB7XG4gICAgICAgIGR1cGxpY2F0ZVRvb2xzLmFkZCh0Lm5hbWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jbGllbnRUb29sQnlOYW1lLnNldCh0Lm5hbWUsIHQpO1xuICAgIH0pO1xuICAgIGlmIChkdXBsaWNhdGVUb29scy5zaXplID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYFRvb2xzIG11c3QgaGF2ZSB1bmlxdWUgbmFtZXMuIER1cGxpY2F0ZSB0b29sczogJHtbXG4gICAgICAgICAgLi4uZHVwbGljYXRlVG9vbHMsXG4gICAgICAgIF0uam9pbignLCAnKX0uYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc2tCZWRyb2NrID0gYXN5bmMgKCk6IFByb21pc2U8Q29udGVudEJsb2NrW10+ID0+IHtcbiAgICBjb25zdCB7IG1vZGVsSWQsIHN5c3RlbVByb21wdCwgaW5mZXJlbmNlQ29uZmlndXJhdGlvbiB9ID1cbiAgICAgIHRoaXMuZXZlbnQubW9kZWxDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3QgbWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0RXZlbnRNZXNzYWdlc0FzQmVkcm9ja01lc3NhZ2VzKCk7XG5cbiAgICBsZXQgYmVkcm9ja1Jlc3BvbnNlOiBDb252ZXJzZUNvbW1hbmRPdXRwdXQ7XG4gICAgZG8ge1xuICAgICAgY29uc3QgdG9vbENvbmZpZyA9IHRoaXMuY3JlYXRlVG9vbENvbmZpZ3VyYXRpb24oKTtcbiAgICAgIGNvbnN0IGNvbnZlcnNlQ29tbWFuZElucHV0OiBDb252ZXJzZUNvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgbW9kZWxJZCxcbiAgICAgICAgbWVzc2FnZXM6IFsuLi5tZXNzYWdlc10sXG4gICAgICAgIHN5c3RlbTogW3sgdGV4dDogc3lzdGVtUHJvbXB0IH1dLFxuICAgICAgICBpbmZlcmVuY2VDb25maWc6IGluZmVyZW5jZUNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHRvb2xDb25maWcsXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbygnU2VuZGluZyBCZWRyb2NrIENvbnZlcnNlIHJlcXVlc3QnKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIHJlcXVlc3Q6JywgY29udmVyc2VDb21tYW5kSW5wdXQpO1xuICAgICAgYmVkcm9ja1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5iZWRyb2NrQ2xpZW50LnNlbmQoXG4gICAgICAgIG5ldyBDb252ZXJzZUNvbW1hbmQoY29udmVyc2VDb21tYW5kSW5wdXQpXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYFJlY2VpdmVkIEJlZHJvY2sgQ29udmVyc2UgcmVzcG9uc2UsIHJlcXVlc3RJZD0ke2JlZHJvY2tSZXNwb25zZS4kbWV0YWRhdGEucmVxdWVzdElkfWAsXG4gICAgICAgIGJlZHJvY2tSZXNwb25zZS51c2FnZVxuICAgICAgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIHJlc3BvbnNlOicsIGJlZHJvY2tSZXNwb25zZSk7XG4gICAgICBpZiAoYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlcy5wdXNoKGJlZHJvY2tSZXNwb25zZS5vdXRwdXQ/Lm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKGJlZHJvY2tSZXNwb25zZS5zdG9wUmVhc29uID09PSAndG9vbF91c2UnKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrcyA9XG4gICAgICAgICAgYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZT8uY29udGVudCA/PyBbXTtcbiAgICAgICAgY29uc3QgdG9vbFVzZUJsb2NrcyA9IHJlc3BvbnNlQ29udGVudEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgKGJsb2NrKSA9PiAndG9vbFVzZScgaW4gYmxvY2tcbiAgICAgICAgKSBhcyBBcnJheTxDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlcj47XG4gICAgICAgIGNvbnN0IGNsaWVudFRvb2xVc2VCbG9ja3MgPSByZXNwb25zZUNvbnRlbnRCbG9ja3MuZmlsdGVyKFxuICAgICAgICAgIChibG9jaykgPT5cbiAgICAgICAgICAgIGJsb2NrLnRvb2xVc2U/Lm5hbWUgJiZcbiAgICAgICAgICAgIHRoaXMuY2xpZW50VG9vbEJ5TmFtZS5oYXMoYmxvY2sudG9vbFVzZT8ubmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNsaWVudFRvb2xVc2VCbG9ja3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEZvciBub3cgaWYgYW55IG9mIGNsaWVudCB0b29scyBpcyB1c2VkIHdlIGlnbm9yZSBleGVjdXRhYmxlIHRvb2xzXG4gICAgICAgICAgLy8gYW5kIHByb3BhZ2F0ZSByZXN1bHQgYmFjayB0byBjbGllbnQuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFRvb2xVc2VCbG9ja3M7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9vbFJlc3BvbnNlQ29udGVudEJsb2NrczogQXJyYXk8Q29udGVudEJsb2NrPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrIG9mIHRvb2xVc2VCbG9ja3MpIHtcbiAgICAgICAgICBjb25zdCB0b29sVXNlQmxvY2sgPVxuICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50QmxvY2sgYXMgQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXI7XG4gICAgICAgICAgY29uc3QgdG9vbFJlc3VsdENvbnRlbnRCbG9jayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRvb2wodG9vbFVzZUJsb2NrKTtcbiAgICAgICAgICB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzLnB1c2godG9vbFJlc3VsdENvbnRlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGJlZHJvY2tSZXNwb25zZS5zdG9wUmVhc29uID09PSAndG9vbF91c2UnKTtcblxuICAgIHJldHVybiBiZWRyb2NrUmVzcG9uc2Uub3V0cHV0Py5tZXNzYWdlPy5jb250ZW50ID8/IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBc2tzIEJlZHJvY2sgZm9yIHJlc3BvbnNlIHVzaW5nIHN0cmVhbWluZyB2ZXJzaW9uIG9mIENvbnZlcnNlIEFQSS5cbiAgICovXG4gIGFzeW5jICphc2tCZWRyb2NrU3RyZWFtaW5nKCk6IEFzeW5jR2VuZXJhdG9yPFN0cmVhbWluZ1Jlc3BvbnNlQ2h1bms+IHtcbiAgICBjb25zdCB7IG1vZGVsSWQsIHN5c3RlbVByb21wdCwgaW5mZXJlbmNlQ29uZmlndXJhdGlvbiB9ID1cbiAgICAgIHRoaXMuZXZlbnQubW9kZWxDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3QgbWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0RXZlbnRNZXNzYWdlc0FzQmVkcm9ja01lc3NhZ2VzKCk7XG5cbiAgICBsZXQgYmVkcm9ja1Jlc3BvbnNlOiBDb252ZXJzZVN0cmVhbUNvbW1hbmRPdXRwdXQ7XG4gICAgLy8ga2VlcCBvdXIgb3duIGluZGV4aW5nIGZvciBibG9ja3MgaW5zdGVhZCBvZiB1c2luZyBCZWRyb2NrJ3MgaW5kZXhlc1xuICAgIC8vIHNpbmNlIHdlIHN0cmVhbSBzdWJzZXQgb2YgdGhlc2UgdXBzdHJlYW0uXG4gICAgbGV0IGJsb2NrSW5kZXggPSAwO1xuICAgIGxldCBsYXN0QmxvY2tJbmRleCA9IDA7XG4gICAgbGV0IHN0b3BSZWFzb24gPSAnJztcbiAgICAvLyBBY2N1bXVsYXRlcyBjbGllbnQgZmFjaW5nIGNvbnRlbnQgcGVyIHR1cm4uXG4gICAgLy8gU28gdGhhdCB1cHN0cmVhbSBjYW4gcGVyc2lzdCBmdWxsIG1lc3NhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtaW5nLlxuICAgIGNvbnN0IGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IEFycmF5PGJlZHJvY2suQ29udGVudEJsb2NrPiA9IFtdO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRvb2xDb25maWcgPSB0aGlzLmNyZWF0ZVRvb2xDb25maWd1cmF0aW9uKCk7XG4gICAgICBjb25zdCBjb252ZXJzZUNvbW1hbmRJbnB1dDogQ29udmVyc2VTdHJlYW1Db21tYW5kSW5wdXQgPSB7XG4gICAgICAgIG1vZGVsSWQsXG4gICAgICAgIG1lc3NhZ2VzOiBbLi4ubWVzc2FnZXNdLFxuICAgICAgICBzeXN0ZW06IFt7IHRleHQ6IHN5c3RlbVByb21wdCB9XSxcbiAgICAgICAgaW5mZXJlbmNlQ29uZmlnOiBpbmZlcmVuY2VDb25maWd1cmF0aW9uLFxuICAgICAgICB0b29sQ29uZmlnLFxuICAgICAgfTtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ1NlbmRpbmcgQmVkcm9jayBDb252ZXJzZSBTdHJlYW0gcmVxdWVzdCcpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdCZWRyb2NrIENvbnZlcnNlIFN0cmVhbSByZXF1ZXN0OicsXG4gICAgICAgIGNvbnZlcnNlQ29tbWFuZElucHV0XG4gICAgICApO1xuICAgICAgYmVkcm9ja1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5iZWRyb2NrQ2xpZW50LnNlbmQoXG4gICAgICAgIG5ldyBDb252ZXJzZVN0cmVhbUNvbW1hbmQoY29udmVyc2VDb21tYW5kSW5wdXQpXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYFJlY2VpdmVkIEJlZHJvY2sgQ29udmVyc2UgU3RyZWFtIHJlc3BvbnNlLCByZXF1ZXN0SWQ9JHtiZWRyb2NrUmVzcG9uc2UuJG1ldGFkYXRhLnJlcXVlc3RJZH1gXG4gICAgICApO1xuICAgICAgaWYgKCFiZWRyb2NrUmVzcG9uc2Uuc3RyZWFtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQmVkcm9jayByZXNwb25zZSBpcyBtaXNzaW5nIHN0cmVhbScpO1xuICAgICAgfVxuICAgICAgbGV0IHRvb2xVc2VCbG9jazogQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgY2xpZW50VG9vbHNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgIGxldCB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgICAgIGxldCB0b29sVXNlSW5wdXQ6IHN0cmluZyA9ICcnO1xuICAgICAgbGV0IGJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICBsZXQgbGFzdEJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICAvLyBBY2N1bXVsYXRlIGN1cnJlbnQgbWVzc2FnZSBmb3IgdGhlIHRvb2wgdXNlIGxvb3AgcHVycG9zZS5cbiAgICAgIGNvbnN0IGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgcm9sZTogdW5kZWZpbmVkLFxuICAgICAgICBjb250ZW50OiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYmVkcm9ja1Jlc3BvbnNlLnN0cmVhbSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQmVkcm9jayBDb252ZXJzZSBTdHJlYW0gcmVzcG9uc2UgY2h1bms6JywgY2h1bmspO1xuICAgICAgICBpZiAoY2h1bmsubWVzc2FnZVN0YXJ0KSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlLnJvbGUgPSBjaHVuay5tZXNzYWdlU3RhcnQucm9sZTtcbiAgICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tTdGFydCkge1xuICAgICAgICAgIGJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICAgICAgbGFzdEJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICAgICAgaWYgKGNodW5rLmNvbnRlbnRCbG9ja1N0YXJ0LnN0YXJ0Py50b29sVXNlKSB7XG4gICAgICAgICAgICB0b29sVXNlQmxvY2sgPSB7XG4gICAgICAgICAgICAgIHRvb2xVc2U6IHtcbiAgICAgICAgICAgICAgICAuLi5jaHVuay5jb250ZW50QmxvY2tTdGFydC5zdGFydD8udG9vbFVzZSxcbiAgICAgICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2h1bmsuY29udGVudEJsb2NrRGVsdGEpIHtcbiAgICAgICAgICBpZiAoY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGE/LnRvb2xVc2UpIHtcbiAgICAgICAgICAgIGlmICghY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudG9vbFVzZS5pbnB1dCkge1xuICAgICAgICAgICAgICB0b29sVXNlSW5wdXQgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvb2xVc2VJbnB1dCArPSBjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YS50b29sVXNlLmlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGE/LnRleHQpIHtcbiAgICAgICAgICAgIHRleHQgKz0gY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudGV4dDtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogWy4uLmFjY3VtdWxhdGVkVHVybkNvbnRlbnQsIHsgdGV4dCB9XSxcbiAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgIGNvbnRlbnRCbG9ja1RleHQ6IGNodW5rLmNvbnRlbnRCbG9ja0RlbHRhLmRlbHRhLnRleHQsXG4gICAgICAgICAgICAgIGNvbnRlbnRCbG9ja0luZGV4OiBibG9ja0luZGV4LFxuICAgICAgICAgICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4OiBibG9ja0RlbHRhSW5kZXgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGFzdEJsb2NrRGVsdGFJbmRleCA9IGJsb2NrRGVsdGFJbmRleDtcbiAgICAgICAgICAgIGJsb2NrRGVsdGFJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tTdG9wKSB7XG4gICAgICAgICAgaWYgKHRvb2xVc2VCbG9jaykge1xuICAgICAgICAgICAgaWYgKHRvb2xVc2VJbnB1dCkge1xuICAgICAgICAgICAgICB0b29sVXNlQmxvY2sudG9vbFVzZS5pbnB1dCA9IEpTT04ucGFyc2UodG9vbFVzZUlucHV0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEJlZHJvY2sgQVBJIHJlcXVpcmVzIHRvb2wgaW5wdXQgdG8gYmUgbm9uLW51bGwgaW4gbWVzc2FnZSBoaXN0b3J5LlxuICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBvYmplY3QuXG4gICAgICAgICAgICAgIHRvb2xVc2VCbG9jay50b29sVXNlLmlucHV0ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2UuY29udGVudD8ucHVzaCh0b29sVXNlQmxvY2spO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lICYmXG4gICAgICAgICAgICAgIHRoaXMuY2xpZW50VG9vbEJ5TmFtZS5oYXModG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjbGllbnRUb29sc1JlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQucHVzaCh0b29sVXNlQmxvY2spO1xuICAgICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogWy4uLmFjY3VtdWxhdGVkVHVybkNvbnRlbnRdLFxuICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgY29udGVudEJsb2NrSW5kZXg6IGJsb2NrSW5kZXgsXG4gICAgICAgICAgICAgICAgY29udGVudEJsb2NrVG9vbFVzZTogSlNPTi5zdHJpbmdpZnkodG9vbFVzZUJsb2NrKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbGFzdEJsb2NrSW5kZXggPSBibG9ja0luZGV4O1xuICAgICAgICAgICAgICBibG9ja0luZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b29sVXNlQmxvY2sgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0b29sVXNlSW5wdXQgPSAnJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlLmNvbnRlbnQ/LnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50LnB1c2goeyB0ZXh0IH0pO1xuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudF0sXG4gICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgICAgICAgICBjb250ZW50QmxvY2tJbmRleDogYmxvY2tJbmRleCxcbiAgICAgICAgICAgICAgY29udGVudEJsb2NrRG9uZUF0SW5kZXg6IGxhc3RCbG9ja0RlbHRhSW5kZXgsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgICAgICAgbGFzdEJsb2NrSW5kZXggPSBibG9ja0luZGV4O1xuICAgICAgICAgICAgYmxvY2tJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjaHVuay5tZXNzYWdlU3RvcCkge1xuICAgICAgICAgIHN0b3BSZWFzb24gPSBjaHVuay5tZXNzYWdlU3RvcC5zdG9wUmVhc29uID8/ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ0FjY3VtdWxhdGVkIEJlZHJvY2sgQ29udmVyc2UgU3RyZWFtIHJlc3BvbnNlOicsXG4gICAgICAgIGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZVxuICAgICAgKTtcbiAgICAgIGlmIChjbGllbnRUb29sc1JlcXVlc3RlZCkge1xuICAgICAgICAvLyBGb3Igbm93IGlmIGFueSBvZiBjbGllbnQgdG9vbHMgaXMgdXNlZCB3ZSBpZ25vcmUgZXhlY3V0YWJsZSB0b29sc1xuICAgICAgICAvLyBhbmQgcHJvcGFnYXRlIHJlc3VsdCBiYWNrIHRvIGNsaWVudC5cbiAgICAgICAgeWllbGQge1xuICAgICAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IFsuLi5hY2N1bXVsYXRlZFR1cm5Db250ZW50XSxcbiAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgICBhc3NvY2lhdGVkVXNlck1lc3NhZ2VJZDogdGhpcy5ldmVudC5jdXJyZW50TWVzc2FnZUlkLFxuICAgICAgICAgIGNvbnRlbnRCbG9ja0luZGV4OiBsYXN0QmxvY2tJbmRleCxcbiAgICAgICAgICBzdG9wUmVhc29uOiBzdG9wUmVhc29uLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZXNzYWdlcy5wdXNoKGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZSk7XG4gICAgICBpZiAoc3RvcFJlYXNvbiA9PT0gJ3Rvb2xfdXNlJykge1xuICAgICAgICBjb25zdCByZXNwb25zZUNvbnRlbnRCbG9ja3MgPSBhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2UuY29udGVudCA/PyBbXTtcbiAgICAgICAgY29uc3QgdG9vbFVzZUJsb2NrcyA9IHJlc3BvbnNlQ29udGVudEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgKGJsb2NrKSA9PiAndG9vbFVzZScgaW4gYmxvY2tcbiAgICAgICAgKSBhcyBBcnJheTxDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlcj47XG4gICAgICAgIGNvbnN0IHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3M6IEFycmF5PENvbnRlbnRCbG9jaz4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByZXNwb25zZUNvbnRlbnRCbG9jayBvZiB0b29sVXNlQmxvY2tzKSB7XG4gICAgICAgICAgY29uc3QgdG9vbFVzZUJsb2NrID1cbiAgICAgICAgICAgIHJlc3BvbnNlQ29udGVudEJsb2NrIGFzIENvbnRlbnRCbG9jay5Ub29sVXNlTWVtYmVyO1xuICAgICAgICAgIGNvbnN0IHRvb2xSZXN1bHRDb250ZW50QmxvY2sgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUb29sKHRvb2xVc2VCbG9jayk7XG4gICAgICAgICAgdG9vbFJlc3BvbnNlQ29udGVudEJsb2Nrcy5wdXNoKHRvb2xSZXN1bHRDb250ZW50QmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgIHJvbGU6ICd1c2VyJyxcbiAgICAgICAgICBjb250ZW50OiB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChzdG9wUmVhc29uID09PSAndG9vbF91c2UnKTtcblxuICAgIHlpZWxkIHtcbiAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IFsuLi5hY2N1bXVsYXRlZFR1cm5Db250ZW50XSxcbiAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgIGNvbnRlbnRCbG9ja0luZGV4OiBsYXN0QmxvY2tJbmRleCxcbiAgICAgIHN0b3BSZWFzb246IHN0b3BSZWFzb24sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGV2ZW50IG1lc3NhZ2VzIHRvIEJlZHJvY2sgdHlwZXMuXG4gICAqIDEuIE1ha2VzIGEgY29weSBzbyB0aGF0IHdlIGRvbid0IG11dGF0ZSBldmVudC5cbiAgICogMi4gRGVjb2RlcyBCYXNlNjQgZW5jb2RlZCBpbWFnZXMuXG4gICAqL1xuICBwcml2YXRlIGdldEV2ZW50TWVzc2FnZXNBc0JlZHJvY2tNZXNzYWdlcyA9IGFzeW5jICgpOiBQcm9taXNlPFxuICAgIEFycmF5PE1lc3NhZ2U+XG4gID4gPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VzOiBBcnJheTxNZXNzYWdlPiA9IFtdO1xuICAgIGNvbnN0IGV2ZW50TWVzc2FnZXMgPVxuICAgICAgYXdhaXQgdGhpcy5tZXNzYWdlSGlzdG9yeVJldHJpZXZlci5nZXRNZXNzYWdlSGlzdG9yeSgpO1xuICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBldmVudE1lc3NhZ2VzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlQ29udGVudDogQXJyYXk8Q29udGVudEJsb2NrPiA9IFtdO1xuICAgICAgZm9yIChjb25zdCBjb250ZW50RWxlbWVudCBvZiBtZXNzYWdlLmNvbnRlbnQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50RWxlbWVudC5pbWFnZT8uc291cmNlPy5ieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBtZXNzYWdlQ29udGVudC5wdXNoKHtcbiAgICAgICAgICAgIGltYWdlOiB7XG4gICAgICAgICAgICAgIGZvcm1hdDogY29udGVudEVsZW1lbnQuaW1hZ2UuZm9ybWF0LFxuICAgICAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBieXRlczogQnVmZmVyLmZyb20oY29udGVudEVsZW1lbnQuaW1hZ2Uuc291cmNlLmJ5dGVzLCAnYmFzZTY0JyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSB0eXBlIGNvbmZvcm1zIHRvIEJlZHJvY2sncyB0eXBlIGFuZCBpdCdzIHNhZmUgdG8gY2FzdC5cbiAgICAgICAgICBtZXNzYWdlQ29udGVudC5wdXNoKGNvbnRlbnRFbGVtZW50IGFzIENvbnRlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG1lc3NhZ2VzLnB1c2goe1xuICAgICAgICByb2xlOiBtZXNzYWdlLnJvbGUsXG4gICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2VDb250ZW50LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlcztcbiAgfTtcblxuICBwcml2YXRlIGNyZWF0ZVRvb2xDb25maWd1cmF0aW9uID0gKCk6IFRvb2xDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAodGhpcy5hbGxUb29scy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvb2xzOiB0aGlzLmFsbFRvb2xzLm1hcCgodCk6IFRvb2wgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRvb2xTcGVjOiB7XG4gICAgICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2FzdCB0byBiZWRyb2NrIHR5cGUgYXMgd2UncmUgdXNpbmcgZGlmZmVyZW50IHR5cGVzIHRvIGRlc2NyaWJlIEpTT04gc2NoZW1hIGluIG91ciBBUEkuXG4gICAgICAgICAgICAvLyBUaGVzZSB0eXBlcyBhcmUgcnVudGltZSBjb21wYXRpYmxlLlxuICAgICAgICAgICAgaW5wdXRTY2hlbWE6IHQuaW5wdXRTY2hlbWEgYXMgVG9vbElucHV0U2NoZW1hLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgZXhlY3V0ZVRvb2wgPSBhc3luYyAoXG4gICAgdG9vbFVzZUJsb2NrOiBDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlclxuICApOiBQcm9taXNlPENvbnRlbnRCbG9jaz4gPT4ge1xuICAgIGlmICghdG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0JlZHJvY2sgdG9vbCB1c2UgcmVzcG9uc2UgaXMgbWlzc2luZyBhIHRvb2wgbmFtZScpO1xuICAgIH1cbiAgICBjb25zdCB0b29sID0gdGhpcy5leGVjdXRhYmxlVG9vbEJ5TmFtZS5nZXQodG9vbFVzZUJsb2NrLnRvb2xVc2UubmFtZSk7XG4gICAgaWYgKCF0b29sKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYEJlZHJvY2sgdG9vbCB1c2UgcmVzcG9uc2UgY29udGFpbnMgdW5rbm93biB0b29sICcke3Rvb2xVc2VCbG9jay50b29sVXNlLm5hbWV9J2BcbiAgICAgICk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbnZva2luZyB0b29sICR7dG9vbC5uYW1lfWApO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ1Rvb2wgaW5wdXQ6JywgdG9vbFVzZUJsb2NrLnRvb2xVc2UuaW5wdXQpO1xuICAgICAgY29uc3QgdG9vbFJlc3BvbnNlID0gYXdhaXQgdG9vbC5leGVjdXRlKHRvb2xVc2VCbG9jay50b29sVXNlLmlucHV0KTtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oYFJlY2VpdmVkIHJlc3BvbnNlIGZyb20gJHt0b29sLm5hbWV9IHRvb2xgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKHRvb2xSZXNwb25zZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b29sUmVzdWx0OiB7XG4gICAgICAgICAgdG9vbFVzZUlkOiB0b29sVXNlQmxvY2sudG9vbFVzZS50b29sVXNlSWQsXG4gICAgICAgICAgY29udGVudDogW3Rvb2xSZXNwb25zZV0sXG4gICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b29sUmVzdWx0OiB7XG4gICAgICAgICAgICB0b29sVXNlSWQ6IHRvb2xVc2VCbG9jay50b29sVXNlLnRvb2xVc2VJZCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt7IHRleHQ6IGUudG9TdHJpbmcoKSB9XSxcbiAgICAgICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9vbFJlc3VsdDoge1xuICAgICAgICAgIHRvb2xVc2VJZDogdG9vbFVzZUJsb2NrLnRvb2xVc2UudG9vbFVzZUlkLFxuICAgICAgICAgIGNvbnRlbnQ6IFt7IHRleHQ6ICd1bmtub3duIGVycm9yIG9jY3VycmVkJyB9XSxcbiAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9ja19jb252ZXJzZV9hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2JlZHJvY2tfY29udmVyc2VfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFheUM7QUFPekMsaUVBQTRFO0FBQzVFLHFHQUErRjtBQUUvRixxQ0FBMkM7QUFDM0MsK0RBQTBEO0FBRTFEOzs7R0FHRztBQUNILE1BQWEsc0JBQXNCO0lBUWpDOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDN0MsZUFBc0MsRUFDckIsZ0JBQXNDLElBQUksNkNBQW9CLENBQzdFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FDNUMsRUFDRCxrQkFBa0IsR0FBRyxJQUFJLHlEQUFrQyxDQUFDLEtBQUssQ0FBQyxFQUNqRCwwQkFBMEIsSUFBSSw0RUFBbUMsQ0FDaEYsS0FBSyxDQUNOLEVBQ0QsaUJBQWlCLEdBQUcsSUFBSSx1Q0FBaUIsQ0FBQyxLQUFLLENBQUMsRUFDL0IsU0FBUyxPQUFPOztRQVZoQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUU1QixrQkFBYSxHQUFiLGFBQWEsQ0FFN0I7UUFFZ0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUV2QztRQUVnQixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBbEJsQix5QkFBb0IsR0FDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNLLHFCQUFnQixHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBOEQzRSxlQUFVLEdBQUcsS0FBSyxJQUE2QixFQUFFOztZQUMvQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxHQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1lBRWhDLE1BQU0sUUFBUSxHQUNaLE1BQU0sSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFF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LENBQUMsQ0FBQztpQkFDeEQ7Z0JBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDWixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUseUJBQXlCO2lCQUNuQyxDQUFDLENBQUM7YUFDSjtTQUNGLFFBQVEsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUVwQyxNQUFNO1lBQ0osc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO1lBQ25ELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7WUFDekMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7WUFDcEQsaUJBQWlCLEVBQUUsY0FBYztZQUNqQyxVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDO0lBQ0osQ0FBQztDQXNHRjtBQWxiRCx3REFrYkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCZWRyb2NrUnVudGltZUNsaWVudCxcbiAgQ29udGVudEJsb2NrLFxuICBDb252ZXJzZUNvbW1hbmQsXG4gIENvbnZlcnNlQ29tbWFuZElucHV0LFxuICBDb252ZXJzZUNvbW1hbmRPdXRwdXQsXG4gIENvbnZlcnNlU3RyZWFtQ29tbWFuZCxcbiAgQ29udmVyc2VTdHJlYW1Db21tYW5kSW5wdXQsXG4gIENvbnZlcnNlU3RyZWFtQ29tbWFuZE91dHB1dCxcbiAgTWVzc2FnZSxcbiAgVG9vbCxcbiAgVG9vbENvbmZpZ3VyYXRpb24sXG4gIFRvb2xJbnB1dFNjaGVtYSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQge1xuICBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gIEV4ZWN1dGFibGVUb29sLFxuICBTdHJlYW1pbmdSZXNwb25zZUNodW5rLFxuICBUb29sRGVmaW5pdGlvbixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyIH0gZnJvbSAnLi9ldmVudC10b29scy1wcm92aWRlcic7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25NZXNzYWdlSGlzdG9yeVJldHJpZXZlciB9IGZyb20gJy4vY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXInO1xuaW1wb3J0ICogYXMgYmVkcm9jayBmcm9tICdAYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IFVzZXJBZ2VudFByb3ZpZGVyIH0gZnJvbSAnLi91c2VyX2FnZW50X3Byb3ZpZGVyJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpbnRlcmFjdGluZyB3aXRoIEJlZHJvY2sgQ29udmVyc2UgQVBJXG4gKiBpbiBvcmRlciB0byBwcm9kdWNlIGZpbmFsIHJlc3BvbnNlIHRoYXQgY2FuIGJlIHNlbnQgYmFjayB0byBjYWxsZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZWRyb2NrQ29udmVyc2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxUb29sczogQXJyYXk8VG9vbERlZmluaXRpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGFibGVUb29sczogQXJyYXk8RXhlY3V0YWJsZVRvb2w+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRvb2xzOiBBcnJheTxUb29sRGVmaW5pdGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0YWJsZVRvb2xCeU5hbWU6IE1hcDxzdHJpbmcsIEV4ZWN1dGFibGVUb29sPiA9XG4gICAgbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudFRvb2xCeU5hbWU6IE1hcDxzdHJpbmcsIFRvb2xEZWZpbml0aW9uPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBCZWRyb2NrIENvbnZlcnNlIEFkYXB0ZXIuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50OiBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gICAgYWRkaXRpb25hbFRvb2xzOiBBcnJheTxFeGVjdXRhYmxlVG9vbD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBiZWRyb2NrQ2xpZW50OiBCZWRyb2NrUnVudGltZUNsaWVudCA9IG5ldyBCZWRyb2NrUnVudGltZUNsaWVudChcbiAgICAgIHsgcmVnaW9uOiBldmVudC5tb2RlbENvbmZpZ3VyYXRpb24ucmVnaW9uIH1cbiAgICApLFxuICAgIGV2ZW50VG9vbHNQcm92aWRlciA9IG5ldyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyKGV2ZW50KSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyID0gbmV3IENvbnZlcnNhdGlvbk1lc3NhZ2VIaXN0b3J5UmV0cmlldmVyKFxuICAgICAgZXZlbnRcbiAgICApLFxuICAgIHVzZXJBZ2VudFByb3ZpZGVyID0gbmV3IFVzZXJBZ2VudFByb3ZpZGVyKGV2ZW50KSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7XG4gICAgdGhpcy5iZWRyb2NrQ2xpZW50Lm1pZGRsZXdhcmVTdGFjay5hZGQoXG4gICAgICAobmV4dCkgPT4gKGFyZ3MpID0+IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZXF1ZXN0IGlzIHR5cGVkIGFzIHVua25vd24uXG4gICAgICAgIC8vIEJ1dCB0aGlzIGlzIHJlY29tbWVuZGVkIHdheSB0byBhbHRlciBoZWFkZXJzIHBlciBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMtdjMvYmxvYi9tYWluL1JFQURNRS5tZC5cbiAgICAgICAgYXJncy5yZXF1ZXN0LmhlYWRlcnNbJ3gtYW16LXVzZXItYWdlbnQnXSA9XG4gICAgICAgICAgdXNlckFnZW50UHJvdmlkZXIuZ2V0VXNlckFnZW50KCk7XG4gICAgICAgIHJldHVybiBuZXh0KGFyZ3MpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3RlcDogJ2J1aWxkJyxcbiAgICAgICAgbmFtZTogJ2FtcGxpZnktdXNlci1hZ2VudC1pbmplY3RvcicsXG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmV4ZWN1dGFibGVUb29scyA9IFtcbiAgICAgIC4uLmV2ZW50VG9vbHNQcm92aWRlci5nZXRFdmVudFRvb2xzKCksXG4gICAgICAuLi5hZGRpdGlvbmFsVG9vbHMsXG4gICAgXTtcbiAgICB0aGlzLmNsaWVudFRvb2xzID0gdGhpcy5ldmVudC50b29sc0NvbmZpZ3VyYXRpb24/LmNsaWVudFRvb2xzID8/IFtdO1xuICAgIHRoaXMuYWxsVG9vbHMgPSBbLi4udGhpcy5leGVjdXRhYmxlVG9vbHMsIC4uLnRoaXMuY2xpZW50VG9vbHNdO1xuICAgIGNvbnN0IGR1cGxpY2F0ZVRvb2xzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgdGhpcy5leGVjdXRhYmxlVG9vbHMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4ZWN1dGFibGVUb29sQnlOYW1lLnNldCh0Lm5hbWUsIHQpO1xuICAgIH0pO1xuICAgIHRoaXMuY2xpZW50VG9vbHMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuaGFzKHQubmFtZSkpIHtcbiAgICAgICAgZHVwbGljYXRlVG9vbHMuYWRkKHQubmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jbGllbnRUb29sQnlOYW1lLmhhcyh0Lm5hbWUpKSB7XG4gICAgICAgIGR1cGxpY2F0ZVRvb2xzLmFkZCh0Lm5hbWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5jbGllbnRUb29sQnlOYW1lLnNldCh0Lm5hbWUsIHQpO1xuICAgIH0pO1xuICAgIGlmIChkdXBsaWNhdGVUb29scy5zaXplID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYFRvb2xzIG11c3QgaGF2ZSB1bmlxdWUgbmFtZXMuIER1cGxpY2F0ZSB0b29sczogJHtbXG4gICAgICAgICAgLi4uZHVwbGljYXRlVG9vbHMsXG4gICAgICAgIF0uam9pbignLCAnKX0uYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc2tCZWRyb2NrID0gYXN5bmMgKCk6IFByb21pc2U8Q29udGVudEJsb2NrW10+ID0+IHtcbiAgICBjb25zdCB7IG1vZGVsSWQsIHN5c3RlbVByb21wdCwgaW5mZXJlbmNlQ29uZmlndXJhdGlvbiB9ID1cbiAgICAgIHRoaXMuZXZlbnQubW9kZWxDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3QgbWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0RXZlbnRNZXNzYWdlc0FzQmVkcm9ja01lc3NhZ2VzKCk7XG5cbiAgICBsZXQgYmVkcm9ja1Jlc3BvbnNlOiBDb252ZXJzZUNvbW1hbmRPdXRwdXQ7XG4gICAgZG8ge1xuICAgICAgY29uc3QgdG9vbENvbmZpZyA9IHRoaXMuY3JlYXRlVG9vbENvbmZpZ3VyYXRpb24oKTtcbiAgICAgIGNvbnN0IGNvbnZlcnNlQ29tbWFuZElucHV0OiBDb252ZXJzZUNvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgbW9kZWxJZCxcbiAgICAgICAgbWVzc2FnZXM6IFsuLi5tZXNzYWdlc10sXG4gICAgICAgIHN5c3RlbTogW3sgdGV4dDogc3lzdGVtUHJvbXB0IH1dLFxuICAgICAgICBpbmZlcmVuY2VDb25maWc6IGluZmVyZW5jZUNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHRvb2xDb25maWcsXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbygnU2VuZGluZyBCZWRyb2NrIENvbnZlcnNlIHJlcXVlc3QnKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIHJlcXVlc3Q6JywgY29udmVyc2VDb21tYW5kSW5wdXQpO1xuICAgICAgYmVkcm9ja1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5iZWRyb2NrQ2xpZW50LnNlbmQoXG4gICAgICAgIG5ldyBDb252ZXJzZUNvbW1hbmQoY29udmVyc2VDb21tYW5kSW5wdXQpXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYFJlY2VpdmVkIEJlZHJvY2sgQ29udmVyc2UgcmVzcG9uc2UsIHJlcXVlc3RJZD0ke2JlZHJvY2tSZXNwb25zZS4kbWV0YWRhdGEucmVxdWVzdElkfWAsXG4gICAgICAgIGJlZHJvY2tSZXNwb25zZS51c2FnZVxuICAgICAgKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIHJlc3BvbnNlOicsIGJlZHJvY2tSZXNwb25zZSk7XG4gICAgICBpZiAoYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlcy5wdXNoKGJlZHJvY2tSZXNwb25zZS5vdXRwdXQ/Lm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgaWYgKGJlZHJvY2tSZXNwb25zZS5zdG9wUmVhc29uID09PSAndG9vbF91c2UnKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrcyA9XG4gICAgICAgICAgYmVkcm9ja1Jlc3BvbnNlLm91dHB1dD8ubWVzc2FnZT8uY29udGVudCA/PyBbXTtcbiAgICAgICAgY29uc3QgdG9vbFVzZUJsb2NrcyA9IHJlc3BvbnNlQ29udGVudEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgKGJsb2NrKSA9PiAndG9vbFVzZScgaW4gYmxvY2tcbiAgICAgICAgKSBhcyBBcnJheTxDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlcj47XG4gICAgICAgIGNvbnN0IGNsaWVudFRvb2xVc2VCbG9ja3MgPSByZXNwb25zZUNvbnRlbnRCbG9ja3MuZmlsdGVyKFxuICAgICAgICAgIChibG9jaykgPT5cbiAgICAgICAgICAgIGJsb2NrLnRvb2xVc2U/Lm5hbWUgJiZcbiAgICAgICAgICAgIHRoaXMuY2xpZW50VG9vbEJ5TmFtZS5oYXMoYmxvY2sudG9vbFVzZT8ubmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNsaWVudFRvb2xVc2VCbG9ja3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEZvciBub3cgaWYgYW55IG9mIGNsaWVudCB0b29scyBpcyB1c2VkIHdlIGlnbm9yZSBleGVjdXRhYmxlIHRvb2xzXG4gICAgICAgICAgLy8gYW5kIHByb3BhZ2F0ZSByZXN1bHQgYmFjayB0byBjbGllbnQuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFRvb2xVc2VCbG9ja3M7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9vbFJlc3BvbnNlQ29udGVudEJsb2NrczogQXJyYXk8Q29udGVudEJsb2NrPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlQ29udGVudEJsb2NrIG9mIHRvb2xVc2VCbG9ja3MpIHtcbiAgICAgICAgICBjb25zdCB0b29sVXNlQmxvY2sgPVxuICAgICAgICAgICAgcmVzcG9uc2VDb250ZW50QmxvY2sgYXMgQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXI7XG4gICAgICAgICAgY29uc3QgdG9vbFJlc3VsdENvbnRlbnRCbG9jayA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRvb2wodG9vbFVzZUJsb2NrKTtcbiAgICAgICAgICB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzLnB1c2godG9vbFJlc3VsdENvbnRlbnRCbG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgcm9sZTogJ3VzZXInLFxuICAgICAgICAgIGNvbnRlbnQ6IHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3MsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKGJlZHJvY2tSZXNwb25zZS5zdG9wUmVhc29uID09PSAndG9vbF91c2UnKTtcblxuICAgIHJldHVybiBiZWRyb2NrUmVzcG9uc2Uub3V0cHV0Py5tZXNzYWdlPy5jb250ZW50ID8/IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBc2tzIEJlZHJvY2sgZm9yIHJlc3BvbnNlIHVzaW5nIHN0cmVhbWluZyB2ZXJzaW9uIG9mIENvbnZlcnNlIEFQSS5cbiAgICovXG4gIGFzeW5jICphc2tCZWRyb2NrU3RyZWFtaW5nKCk6IEFzeW5jR2VuZXJhdG9yPFN0cmVhbWluZ1Jlc3BvbnNlQ2h1bms+IHtcbiAgICBjb25zdCB7IG1vZGVsSWQsIHN5c3RlbVByb21wdCwgaW5mZXJlbmNlQ29uZmlndXJhdGlvbiB9ID1cbiAgICAgIHRoaXMuZXZlbnQubW9kZWxDb25maWd1cmF0aW9uO1xuXG4gICAgY29uc3QgbWVzc2FnZXM6IEFycmF5PE1lc3NhZ2U+ID1cbiAgICAgIGF3YWl0IHRoaXMuZ2V0RXZlbnRNZXNzYWdlc0FzQmVkcm9ja01lc3NhZ2VzKCk7XG5cbiAgICBsZXQgYmVkcm9ja1Jlc3BvbnNlOiBDb252ZXJzZVN0cmVhbUNvbW1hbmRPdXRwdXQ7XG4gICAgLy8ga2VlcCBvdXIgb3duIGluZGV4aW5nIGZvciBibG9ja3MgaW5zdGVhZCBvZiB1c2luZyBCZWRyb2NrJ3MgaW5kZXhlc1xuICAgIC8vIHNpbmNlIHdlIHN0cmVhbSBzdWJzZXQgb2YgdGhlc2UgdXBzdHJlYW0uXG4gICAgbGV0IGJsb2NrSW5kZXggPSAwO1xuICAgIGxldCBsYXN0QmxvY2tJbmRleCA9IDA7XG4gICAgbGV0IHN0b3BSZWFzb24gPSAnJztcbiAgICAvLyBBY2N1bXVsYXRlcyBjbGllbnQgZmFjaW5nIGNvbnRlbnQgcGVyIHR1cm4uXG4gICAgLy8gU28gdGhhdCB1cHN0cmVhbSBjYW4gcGVyc2lzdCBmdWxsIG1lc3NhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtaW5nLlxuICAgIGNvbnN0IGFjY3VtdWxhdGVkVHVybkNvbnRlbnQ6IEFycmF5PGJlZHJvY2suQ29udGVudEJsb2NrPiA9IFtdO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHRvb2xDb25maWcgPSB0aGlzLmNyZWF0ZVRvb2xDb25maWd1cmF0aW9uKCk7XG4gICAgICBjb25zdCBjb252ZXJzZUNvbW1hbmRJbnB1dDogQ29udmVyc2VTdHJlYW1Db21tYW5kSW5wdXQgPSB7XG4gICAgICAgIG1vZGVsSWQsXG4gICAgICAgIG1lc3NhZ2VzOiBbLi4ubWVzc2FnZXNdLFxuICAgICAgICBzeXN0ZW06IFt7IHRleHQ6IHN5c3RlbVByb21wdCB9XSxcbiAgICAgICAgaW5mZXJlbmNlQ29uZmlnOiBpbmZlcmVuY2VDb25maWd1cmF0aW9uLFxuICAgICAgICB0b29sQ29uZmlnLFxuICAgICAgfTtcbiAgICAgIHRoaXMubG9nZ2VyLmluZm8oJ1NlbmRpbmcgQmVkcm9jayBDb252ZXJzZSBTdHJlYW0gcmVxdWVzdCcpO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdCZWRyb2NrIENvbnZlcnNlIFN0cmVhbSByZXF1ZXN0OicsXG4gICAgICAgIGNvbnZlcnNlQ29tbWFuZElucHV0XG4gICAgICApO1xuICAgICAgYmVkcm9ja1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5iZWRyb2NrQ2xpZW50LnNlbmQoXG4gICAgICAgIG5ldyBDb252ZXJzZVN0cmVhbUNvbW1hbmQoY29udmVyc2VDb21tYW5kSW5wdXQpXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYFJlY2VpdmVkIEJlZHJvY2sgQ29udmVyc2UgU3RyZWFtIHJlc3BvbnNlLCByZXF1ZXN0SWQ9JHtiZWRyb2NrUmVzcG9uc2UuJG1ldGFkYXRhLnJlcXVlc3RJZH1gXG4gICAgICApO1xuICAgICAgaWYgKCFiZWRyb2NrUmVzcG9uc2Uuc3RyZWFtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQmVkcm9jayByZXNwb25zZSBpcyBtaXNzaW5nIHN0cmVhbScpO1xuICAgICAgfVxuICAgICAgbGV0IHRvb2xVc2VCbG9jazogQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgY2xpZW50VG9vbHNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgIGxldCB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgICAgIGxldCB0b29sVXNlSW5wdXQ6IHN0cmluZyA9ICcnO1xuICAgICAgbGV0IGJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICBsZXQgbGFzdEJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICAvLyBBY2N1bXVsYXRlIGN1cnJlbnQgbWVzc2FnZSBmb3IgdGhlIHRvb2wgdXNlIGxvb3AgcHVycG9zZS5cbiAgICAgIGNvbnN0IGFjY3VtdWxhdGVkQXNzaXN0YW50TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgcm9sZTogdW5kZWZpbmVkLFxuICAgICAgICBjb250ZW50OiBbXSxcbiAgICAgIH07XG5cbiAgICAgIGxldCBwcm9jZXNzZWRCZWRyb2NrQ2h1bmtzID0gMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYmVkcm9ja1Jlc3BvbnNlLnN0cmVhbSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdCZWRyb2NrIENvbnZlcnNlIFN0cmVhbSByZXNwb25zZSBjaHVuazonLCBjaHVuayk7XG4gICAgICAgICAgaWYgKGNodW5rLm1lc3NhZ2VTdGFydCkge1xuICAgICAgICAgICAgYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlLnJvbGUgPSBjaHVuay5tZXNzYWdlU3RhcnQucm9sZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNodW5rLmNvbnRlbnRCbG9ja1N0YXJ0KSB7XG4gICAgICAgICAgICBibG9ja0RlbHRhSW5kZXggPSAwO1xuICAgICAgICAgICAgbGFzdEJsb2NrRGVsdGFJbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAoY2h1bmsuY29udGVudEJsb2NrU3RhcnQuc3RhcnQ/LnRvb2xVc2UpIHtcbiAgICAgICAgICAgICAgdG9vbFVzZUJsb2NrID0ge1xuICAgICAgICAgICAgICAgIHRvb2xVc2U6IHtcbiAgICAgICAgICAgICAgICAgIC4uLmNodW5rLmNvbnRlbnRCbG9ja1N0YXJ0LnN0YXJ0Py50b29sVXNlLFxuICAgICAgICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY2h1bmsuY29udGVudEJsb2NrRGVsdGEpIHtcbiAgICAgICAgICAgIGlmIChjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YT8udG9vbFVzZSkge1xuICAgICAgICAgICAgICBpZiAoIWNodW5rLmNvbnRlbnRCbG9ja0RlbHRhLmRlbHRhLnRvb2xVc2UuaW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0b29sVXNlSW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0b29sVXNlSW5wdXQgKz0gY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudG9vbFVzZS5pbnB1dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjaHVuay5jb250ZW50QmxvY2tEZWx0YS5kZWx0YT8udGV4dCkge1xuICAgICAgICAgICAgICB0ZXh0ICs9IGNodW5rLmNvbnRlbnRCbG9ja0RlbHRhLmRlbHRhLnRleHQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFtcGxpZnlDaHVuazogU3RyZWFtaW5nUmVzcG9uc2VDaHVuayA9IHtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudCwgeyB0ZXh0IH1dLFxuICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmV2ZW50LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgY29udGVudEJsb2NrVGV4dDogY2h1bmsuY29udGVudEJsb2NrRGVsdGEuZGVsdGEudGV4dCxcbiAgICAgICAgICAgICAgICBjb250ZW50QmxvY2tJbmRleDogYmxvY2tJbmRleCxcbiAgICAgICAgICAgICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4OiBibG9ja0RlbHRhSW5kZXgsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIC8vIHBhZGRpbmcgaXMgc2VudCBmcm9tIEJlZHJvY2sgYnV0IG5vdCBpbmNsdWRlZCBpbiB0aGUgQVBJLlxuICAgICAgICAgICAgICBpZiAoJ3AnIGluIGNodW5rLmNvbnRlbnRCbG9ja0RlbHRhKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVkcm9ja1BhZGRpbmcgPSBjaHVuay5jb250ZW50QmxvY2tEZWx0YS5wO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYmVkcm9ja1BhZGRpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICBhbXBsaWZ5Q2h1bmsucCA9IGJlZHJvY2tQYWRkaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB5aWVsZCBhbXBsaWZ5Q2h1bms7XG4gICAgICAgICAgICAgIGxhc3RCbG9ja0RlbHRhSW5kZXggPSBibG9ja0RlbHRhSW5kZXg7XG4gICAgICAgICAgICAgIGJsb2NrRGVsdGFJbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY2h1bmsuY29udGVudEJsb2NrU3RvcCkge1xuICAgICAgICAgICAgaWYgKHRvb2xVc2VCbG9jaykge1xuICAgICAgICAgICAgICBpZiAodG9vbFVzZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgdG9vbFVzZUJsb2NrLnRvb2xVc2UuaW5wdXQgPSBKU09OLnBhcnNlKHRvb2xVc2VJbnB1dCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQmVkcm9jayBBUEkgcmVxdWlyZXMgdG9vbCBpbnB1dCB0byBiZSBub24tbnVsbCBpbiBtZXNzYWdlIGhpc3RvcnkuXG4gICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCBmYWxsaW5nIGJhY2sgdG8gZW1wdHkgb2JqZWN0LlxuICAgICAgICAgICAgICAgIHRvb2xVc2VCbG9jay50b29sVXNlLmlucHV0ID0ge307XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlLmNvbnRlbnQ/LnB1c2godG9vbFVzZUJsb2NrKTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRvb2xVc2VCbG9jay50b29sVXNlLm5hbWUgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWVudFRvb2xCeU5hbWUuaGFzKHRvb2xVc2VCbG9jay50b29sVXNlLm5hbWUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNsaWVudFRvb2xzUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50LnB1c2godG9vbFVzZUJsb2NrKTtcbiAgICAgICAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudF0sXG4gICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICAgICAgICBjb250ZW50QmxvY2tJbmRleDogYmxvY2tJbmRleCxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRCbG9ja1Rvb2xVc2U6IEpTT04uc3RyaW5naWZ5KHRvb2xVc2VCbG9jayksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBsYXN0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXg7XG4gICAgICAgICAgICAgICAgYmxvY2tJbmRleCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRvb2xVc2VCbG9jayA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgdG9vbFVzZUlucHV0ID0gJyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2UuY29udGVudD8ucHVzaCh7XG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGFjY3VtdWxhdGVkVHVybkNvbnRlbnQucHVzaCh7IHRleHQgfSk7XG4gICAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudF0sXG4gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgICAgICAgICAgICBjb250ZW50QmxvY2tJbmRleDogYmxvY2tJbmRleCxcbiAgICAgICAgICAgICAgICBjb250ZW50QmxvY2tEb25lQXRJbmRleDogbGFzdEJsb2NrRGVsdGFJbmRleCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdGV4dCA9ICcnO1xuICAgICAgICAgICAgICBsYXN0QmxvY2tJbmRleCA9IGJsb2NrSW5kZXg7XG4gICAgICAgICAgICAgIGJsb2NrSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGNodW5rLm1lc3NhZ2VTdG9wKSB7XG4gICAgICAgICAgICBzdG9wUmVhc29uID0gY2h1bmsubWVzc2FnZVN0b3Auc3RvcFJlYXNvbiA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc2VkQmVkcm9ja0NodW5rcysrO1xuICAgICAgICAgIGlmIChwcm9jZXNzZWRCZWRyb2NrQ2h1bmtzICUgMTAwMCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgYFByb2Nlc3NlZCAke3Byb2Nlc3NlZEJlZHJvY2tDaHVua3N9IGNodW5rcyBmcm9tIEJlZHJvY2sgQ29udmVyc2UgU3RyZWFtIHJlc3BvbnNlLCByZXF1ZXN0SWQ9JHtiZWRyb2NrUmVzcG9uc2UuJG1ldGFkYXRhLnJlcXVlc3RJZH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICBgQ29tcGxldGVkIHByb2Nlc3NpbmcgJHtwcm9jZXNzZWRCZWRyb2NrQ2h1bmtzfSBjaHVua3MgZnJvbSBCZWRyb2NrIENvbnZlcnNlIFN0cmVhbSByZXNwb25zZSwgcmVxdWVzdElkPSR7YmVkcm9ja1Jlc3BvbnNlLiRtZXRhZGF0YS5yZXF1ZXN0SWR9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICdBY2N1bXVsYXRlZCBCZWRyb2NrIENvbnZlcnNlIFN0cmVhbSByZXNwb25zZTonLFxuICAgICAgICBhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2VcbiAgICAgICk7XG4gICAgICBpZiAoY2xpZW50VG9vbHNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgLy8gRm9yIG5vdyBpZiBhbnkgb2YgY2xpZW50IHRvb2xzIGlzIHVzZWQgd2UgaWdub3JlIGV4ZWN1dGFibGUgdG9vbHNcbiAgICAgICAgLy8gYW5kIHByb3BhZ2F0ZSByZXN1bHQgYmFjayB0byBjbGllbnQuXG4gICAgICAgIHlpZWxkIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudF0sXG4gICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuZXZlbnQuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHRoaXMuZXZlbnQuY3VycmVudE1lc3NhZ2VJZCxcbiAgICAgICAgICBjb250ZW50QmxvY2tJbmRleDogbGFzdEJsb2NrSW5kZXgsXG4gICAgICAgICAgc3RvcFJlYXNvbjogc3RvcFJlYXNvbixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbWVzc2FnZXMucHVzaChhY2N1bXVsYXRlZEFzc2lzdGFudE1lc3NhZ2UpO1xuICAgICAgaWYgKHN0b3BSZWFzb24gPT09ICd0b29sX3VzZScpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50QmxvY2tzID0gYWNjdW11bGF0ZWRBc3Npc3RhbnRNZXNzYWdlLmNvbnRlbnQgPz8gW107XG4gICAgICAgIGNvbnN0IHRvb2xVc2VCbG9ja3MgPSByZXNwb25zZUNvbnRlbnRCbG9ja3MuZmlsdGVyKFxuICAgICAgICAgIChibG9jaykgPT4gJ3Rvb2xVc2UnIGluIGJsb2NrXG4gICAgICAgICkgYXMgQXJyYXk8Q29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXI+O1xuICAgICAgICBjb25zdCB0b29sUmVzcG9uc2VDb250ZW50QmxvY2tzOiBBcnJheTxDb250ZW50QmxvY2s+ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcmVzcG9uc2VDb250ZW50QmxvY2sgb2YgdG9vbFVzZUJsb2Nrcykge1xuICAgICAgICAgIGNvbnN0IHRvb2xVc2VCbG9jayA9XG4gICAgICAgICAgICByZXNwb25zZUNvbnRlbnRCbG9jayBhcyBDb250ZW50QmxvY2suVG9vbFVzZU1lbWJlcjtcbiAgICAgICAgICBjb25zdCB0b29sUmVzdWx0Q29udGVudEJsb2NrID0gYXdhaXQgdGhpcy5leGVjdXRlVG9vbCh0b29sVXNlQmxvY2spO1xuICAgICAgICAgIHRvb2xSZXNwb25zZUNvbnRlbnRCbG9ja3MucHVzaCh0b29sUmVzdWx0Q29udGVudEJsb2NrKTtcbiAgICAgICAgfVxuICAgICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICByb2xlOiAndXNlcicsXG4gICAgICAgICAgY29udGVudDogdG9vbFJlc3BvbnNlQ29udGVudEJsb2NrcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoc3RvcFJlYXNvbiA9PT0gJ3Rvb2xfdXNlJyk7XG5cbiAgICB5aWVsZCB7XG4gICAgICBhY2N1bXVsYXRlZFR1cm5Db250ZW50OiBbLi4uYWNjdW11bGF0ZWRUdXJuQ29udGVudF0sXG4gICAgICBjb252ZXJzYXRpb25JZDogdGhpcy5ldmVudC5jb252ZXJzYXRpb25JZCxcbiAgICAgIGFzc29jaWF0ZWRVc2VyTWVzc2FnZUlkOiB0aGlzLmV2ZW50LmN1cnJlbnRNZXNzYWdlSWQsXG4gICAgICBjb250ZW50QmxvY2tJbmRleDogbGFzdEJsb2NrSW5kZXgsXG4gICAgICBzdG9wUmVhc29uOiBzdG9wUmVhc29uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBldmVudCBtZXNzYWdlcyB0byBCZWRyb2NrIHR5cGVzLlxuICAgKiAxLiBNYWtlcyBhIGNvcHkgc28gdGhhdCB3ZSBkb24ndCBtdXRhdGUgZXZlbnQuXG4gICAqIDIuIERlY29kZXMgQmFzZTY0IGVuY29kZWQgaW1hZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFdmVudE1lc3NhZ2VzQXNCZWRyb2NrTWVzc2FnZXMgPSBhc3luYyAoKTogUHJvbWlzZTxcbiAgICBBcnJheTxNZXNzYWdlPlxuICA+ID0+IHtcbiAgICBjb25zdCBtZXNzYWdlczogQXJyYXk8TWVzc2FnZT4gPSBbXTtcbiAgICBjb25zdCBldmVudE1lc3NhZ2VzID1cbiAgICAgIGF3YWl0IHRoaXMubWVzc2FnZUhpc3RvcnlSZXRyaWV2ZXIuZ2V0TWVzc2FnZUhpc3RvcnkoKTtcbiAgICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgZXZlbnRNZXNzYWdlcykge1xuICAgICAgY29uc3QgbWVzc2FnZUNvbnRlbnQ6IEFycmF5PENvbnRlbnRCbG9jaz4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY29udGVudEVsZW1lbnQgb2YgbWVzc2FnZS5jb250ZW50KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudEVsZW1lbnQuaW1hZ2U/LnNvdXJjZT8uYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQucHVzaCh7XG4gICAgICAgICAgICBpbWFnZToge1xuICAgICAgICAgICAgICBmb3JtYXQ6IGNvbnRlbnRFbGVtZW50LmltYWdlLmZvcm1hdCxcbiAgICAgICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICAgICAgYnl0ZXM6IEJ1ZmZlci5mcm9tKGNvbnRlbnRFbGVtZW50LmltYWdlLnNvdXJjZS5ieXRlcywgJ2Jhc2U2NCcpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2UgdHlwZSBjb25mb3JtcyB0byBCZWRyb2NrJ3MgdHlwZSBhbmQgaXQncyBzYWZlIHRvIGNhc3QuXG4gICAgICAgICAgbWVzc2FnZUNvbnRlbnQucHVzaChjb250ZW50RWxlbWVudCBhcyBDb250ZW50QmxvY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgcm9sZTogbWVzc2FnZS5yb2xlLFxuICAgICAgICBjb250ZW50OiBtZXNzYWdlQ29udGVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZXM7XG4gIH07XG5cbiAgcHJpdmF0ZSBjcmVhdGVUb29sQ29uZmlndXJhdGlvbiA9ICgpOiBUb29sQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHRoaXMuYWxsVG9vbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b29sczogdGhpcy5hbGxUb29scy5tYXAoKHQpOiBUb29sID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b29sU3BlYzoge1xuICAgICAgICAgICAgbmFtZTogdC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGNhc3QgdG8gYmVkcm9jayB0eXBlIGFzIHdlJ3JlIHVzaW5nIGRpZmZlcmVudCB0eXBlcyB0byBkZXNjcmliZSBKU09OIHNjaGVtYSBpbiBvdXIgQVBJLlxuICAgICAgICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIHJ1bnRpbWUgY29tcGF0aWJsZS5cbiAgICAgICAgICAgIGlucHV0U2NoZW1hOiB0LmlucHV0U2NoZW1hIGFzIFRvb2xJbnB1dFNjaGVtYSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcbiAgfTtcblxuICBwcml2YXRlIGV4ZWN1dGVUb29sID0gYXN5bmMgKFxuICAgIHRvb2xVc2VCbG9jazogQ29udGVudEJsb2NrLlRvb2xVc2VNZW1iZXJcbiAgKTogUHJvbWlzZTxDb250ZW50QmxvY2s+ID0+IHtcbiAgICBpZiAoIXRvb2xVc2VCbG9jay50b29sVXNlLm5hbWUpIHtcbiAgICAgIHRocm93IEVycm9yKCdCZWRyb2NrIHRvb2wgdXNlIHJlc3BvbnNlIGlzIG1pc3NpbmcgYSB0b29sIG5hbWUnKTtcbiAgICB9XG4gICAgY29uc3QgdG9vbCA9IHRoaXMuZXhlY3V0YWJsZVRvb2xCeU5hbWUuZ2V0KHRvb2xVc2VCbG9jay50b29sVXNlLm5hbWUpO1xuICAgIGlmICghdG9vbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBCZWRyb2NrIHRvb2wgdXNlIHJlc3BvbnNlIGNvbnRhaW5zIHVua25vd24gdG9vbCAnJHt0b29sVXNlQmxvY2sudG9vbFVzZS5uYW1lfSdgXG4gICAgICApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgSW52b2tpbmcgdG9vbCAke3Rvb2wubmFtZX1gKTtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdUb29sIGlucHV0OicsIHRvb2xVc2VCbG9jay50b29sVXNlLmlucHV0KTtcbiAgICAgIGNvbnN0IHRvb2xSZXNwb25zZSA9IGF3YWl0IHRvb2wuZXhlY3V0ZSh0b29sVXNlQmxvY2sudG9vbFVzZS5pbnB1dCk7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBSZWNlaXZlZCByZXNwb25zZSBmcm9tICR7dG9vbC5uYW1lfSB0b29sYCk7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1Zyh0b29sUmVzcG9uc2UpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9vbFJlc3VsdDoge1xuICAgICAgICAgIHRvb2xVc2VJZDogdG9vbFVzZUJsb2NrLnRvb2xVc2UudG9vbFVzZUlkLFxuICAgICAgICAgIGNvbnRlbnQ6IFt0b29sUmVzcG9uc2VdLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9vbFJlc3VsdDoge1xuICAgICAgICAgICAgdG9vbFVzZUlkOiB0b29sVXNlQmxvY2sudG9vbFVzZS50b29sVXNlSWQsXG4gICAgICAgICAgICBjb250ZW50OiBbeyB0ZXh0OiBlLnRvU3RyaW5nKCkgfV0sXG4gICAgICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2xSZXN1bHQ6IHtcbiAgICAgICAgICB0b29sVXNlSWQ6IHRvb2xVc2VCbG9jay50b29sVXNlLnRvb2xVc2VJZCxcbiAgICAgICAgICBjb250ZW50OiBbeyB0ZXh0OiAndW5rbm93biBlcnJvciBvY2N1cnJlZCcgfV0sXG4gICAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG4iXX0=
|
@@ -1,3 +1,3 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJlZHJvY2sgZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQgKiBhcyBqc29uU2NoZW1hVG9UeXBlU2NyaXB0IGZyb20gJ2pzb24tc2NoZW1hLXRvLXRzJztcblxuLypcbiAgTm90aWNlOiBUaGlzIGZpbGUgY29udGFpbnMgdHlwZXMgdGhhdCBhcmUgZXhwb3NlZCBwdWJsaWNseS5cbiAgVGhlcmVmb3JlLCB3ZSBhdm9pZCBlYWdlciBpbnRyb2R1Y3Rpb24gb2YgdHlwZXMgdGhhdCB3b3VsZG4ndCBiZSB1c2VmdWwgZm9yXG4gIHB1YmxpYyBBUEkgY29uc3VtZXIgYW5kIHBvdGVudGlhbGx5IHBvbGx1dGUgc3ludGF4IGFzc2lzdCBpbiBJREVzLlxuICovXG5leHBvcnQgdHlwZSBKU09OU2NoZW1hID0ganNvblNjaGVtYVRvVHlwZVNjcmlwdC5KU09OU2NoZW1hO1xuZXhwb3J0IHR5cGUgRnJvbUpTT05TY2hlbWE8VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hPiA9XG4gIGpzb25TY2hlbWFUb1R5cGVTY3JpcHQuRnJvbVNjaGVtYTxUSlNPTlNjaGVtYT47XG5leHBvcnQgdHlwZSBUb29sSW5wdXRTY2hlbWE8VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hPiA9IHtcbiAganNvbjogVEpTT05TY2hlbWE7XG59O1xuZXhwb3J0IHR5cGUgVG9vbFJlc3VsdENvbnRlbnRCbG9jayA9IGJlZHJvY2suVG9vbFJlc3VsdENvbnRlbnRCbG9jaztcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uTWVzc2FnZSA9IHtcbiAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCc7XG4gIGNvbnRlbnQ6IEFycmF5PENvbnZlcnNhdGlvbk1lc3NhZ2VDb250ZW50QmxvY2s+O1xufTtcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uTWVzc2FnZUNvbnRlbnRCbG9jayA9XG4gIHwgYmVkcm9jay5Db250ZW50QmxvY2tcbiAgfCB7XG4gICAgICBpbWFnZTogT21pdDxiZWRyb2NrLkltYWdlQmxvY2ssICdzb3VyY2UnPiAmIHtcbiAgICAgICAgLy8gVXBzdHJlYW0gKEFwcHN5bmMpIG1heSBzZW5kIGltYWdlcyBpbiBhIGZvcm0gb2YgQmFzZTY0IGVuY29kZWQgc3RyaW5nc1xuICAgICAgICBzb3VyY2U6IHsgYnl0ZXM6IHN0cmluZyB9O1xuICAgICAgfTtcbiAgICAgIC8vIFRoZXNlIGFyZSBuZWVkZWQgc28gdGhhdCB1bmlvbiB3aXRoIG90aGVyIGNvbnRlbnQgYmxvY2sgdHlwZXMgd29ya3MuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L1BhY2thZ2UvLWF3cy1zZGstY2xpZW50LWJlZHJvY2stcnVudGltZS9UeXBlQWxpYXMvQ29udGVudEJsb2NrLy5cbiAgICAgIHRleHQ/OiBuZXZlcjtcbiAgICAgIGRvY3VtZW50PzogbmV2ZXI7XG4gICAgICB0b29sVXNlPzogbmV2ZXI7XG4gICAgICB0b29sUmVzdWx0PzogbmV2ZXI7XG4gICAgICBndWFyZENvbnRlbnQ/OiBuZXZlcjtcbiAgICAgICR1bmtub3duPzogbmV2ZXI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgVG9vbERlZmluaXRpb248VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hID0gSlNPTlNjaGVtYT4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaW5wdXRTY2hlbWE6IFRvb2xJbnB1dFNjaGVtYTxUSlNPTlNjaGVtYT47XG59O1xuXG4vLyBDdXN0b21lcnMgYXJlIG5vdCBleHBlY3RlZCB0byBjcmVhdGUgZXZlbnRzIHRoZW1zZWx2ZXMsIHRoZXJlZm9yZVxuLy8gZGVmaW5pdGlvbiBvZiBuZXN0ZWQgcHJvcGVydGllcyBpcyBpbmxpbmUuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25UdXJuRXZlbnQgPSB7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIGN1cnJlbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgc3RyZWFtUmVzcG9uc2U/OiBib29sZWFuO1xuICByZXNwb25zZU11dGF0aW9uOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0VHlwZU5hbWU6IHN0cmluZztcbiAgICBzZWxlY3Rpb25TZXQ6IHN0cmluZztcbiAgfTtcbiAgZ3JhcGhxbEFwaUVuZHBvaW50OiBzdHJpbmc7XG4gIG1vZGVsQ29uZmlndXJhdGlvbjoge1xuICAgIG1vZGVsSWQ6IHN0cmluZztcbiAgICBzeXN0ZW1Qcm9tcHQ6IHN0cmluZztcbiAgICByZWdpb24/OiBzdHJpbmc7XG4gICAgaW5mZXJlbmNlQ29uZmlndXJhdGlvbj86IHtcbiAgICAgIG1heFRva2Vucz86IG51bWJlcjtcbiAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICAgICAgdG9wUD86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICByZXF1ZXN0OiB7XG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfTtcbiAgbWVzc2FnZUhpc3RvcnlRdWVyeToge1xuICAgIGdldFF1ZXJ5TmFtZTogc3RyaW5nO1xuICAgIGdldFF1ZXJ5SW5wdXRUeXBlTmFtZTogc3RyaW5nO1xuICAgIGxpc3RRdWVyeU5hbWU6IHN0cmluZztcbiAgICBsaXN0UXVlcnlJbnB1dFR5cGVOYW1lOiBzdHJpbmc7XG4gICAgbGlzdFF1ZXJ5TGltaXQ/OiBudW1iZXI7XG4gIH07XG4gIHRvb2xzQ29uZmlndXJhdGlvbj86IHtcbiAgICBkYXRhVG9vbHM/OiBBcnJheTxcbiAgICAgIFRvb2xEZWZpbml0aW9uICYge1xuICAgICAgICBncmFwaHFsUmVxdWVzdElucHV0RGVzY3JpcHRvcjoge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogc3RyaW5nO1xuICAgICAgICAgIHNlbGVjdGlvblNldDogc3RyaW5nO1xuICAgICAgICAgIHByb3BlcnR5VHlwZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgPjtcbiAgICBjbGllbnRUb29scz86IEFycmF5PFRvb2xEZWZpbml0aW9uPjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGFibGVUb29sPFxuICBUSlNPTlNjaGVtYSBleHRlbmRzIEpTT05TY2hlbWEgPSBKU09OU2NoZW1hLFxuICBUVG9vbElucHV0ID0gRnJvbUpTT05TY2hlbWE8VEpTT05TY2hlbWE+XG4+ID0gVG9vbERlZmluaXRpb248VEpTT05TY2hlbWE+ICYge1xuICBleGVjdXRlOiAoaW5wdXQ6IFRUb29sSW5wdXQpID0+IFByb21pc2U8VG9vbFJlc3VsdENvbnRlbnRCbG9jaz47XG59O1xuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25UdXJuRXJyb3IgPSB7XG4gIGVycm9yVHlwZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdHJlYW1pbmdSZXNwb25zZUNodW5rID0ge1xuICAvLyBhbHdheXMgcmVxdWlyZWRcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHN0cmluZztcbiAgY29udGVudEJsb2NrSW5kZXg6IG51bWJlcjtcbiAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogQXJyYXk8YmVkcm9jay5Db250ZW50QmxvY2s+
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJlZHJvY2sgZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQgKiBhcyBqc29uU2NoZW1hVG9UeXBlU2NyaXB0IGZyb20gJ2pzb24tc2NoZW1hLXRvLXRzJztcblxuLypcbiAgTm90aWNlOiBUaGlzIGZpbGUgY29udGFpbnMgdHlwZXMgdGhhdCBhcmUgZXhwb3NlZCBwdWJsaWNseS5cbiAgVGhlcmVmb3JlLCB3ZSBhdm9pZCBlYWdlciBpbnRyb2R1Y3Rpb24gb2YgdHlwZXMgdGhhdCB3b3VsZG4ndCBiZSB1c2VmdWwgZm9yXG4gIHB1YmxpYyBBUEkgY29uc3VtZXIgYW5kIHBvdGVudGlhbGx5IHBvbGx1dGUgc3ludGF4IGFzc2lzdCBpbiBJREVzLlxuICovXG5leHBvcnQgdHlwZSBKU09OU2NoZW1hID0ganNvblNjaGVtYVRvVHlwZVNjcmlwdC5KU09OU2NoZW1hO1xuZXhwb3J0IHR5cGUgRnJvbUpTT05TY2hlbWE8VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hPiA9XG4gIGpzb25TY2hlbWFUb1R5cGVTY3JpcHQuRnJvbVNjaGVtYTxUSlNPTlNjaGVtYT47XG5leHBvcnQgdHlwZSBUb29sSW5wdXRTY2hlbWE8VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hPiA9IHtcbiAganNvbjogVEpTT05TY2hlbWE7XG59O1xuZXhwb3J0IHR5cGUgVG9vbFJlc3VsdENvbnRlbnRCbG9jayA9IGJlZHJvY2suVG9vbFJlc3VsdENvbnRlbnRCbG9jaztcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uTWVzc2FnZSA9IHtcbiAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCc7XG4gIGNvbnRlbnQ6IEFycmF5PENvbnZlcnNhdGlvbk1lc3NhZ2VDb250ZW50QmxvY2s+O1xufTtcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uTWVzc2FnZUNvbnRlbnRCbG9jayA9XG4gIHwgYmVkcm9jay5Db250ZW50QmxvY2tcbiAgfCB7XG4gICAgICBpbWFnZTogT21pdDxiZWRyb2NrLkltYWdlQmxvY2ssICdzb3VyY2UnPiAmIHtcbiAgICAgICAgLy8gVXBzdHJlYW0gKEFwcHN5bmMpIG1heSBzZW5kIGltYWdlcyBpbiBhIGZvcm0gb2YgQmFzZTY0IGVuY29kZWQgc3RyaW5nc1xuICAgICAgICBzb3VyY2U6IHsgYnl0ZXM6IHN0cmluZyB9O1xuICAgICAgfTtcbiAgICAgIC8vIFRoZXNlIGFyZSBuZWVkZWQgc28gdGhhdCB1bmlvbiB3aXRoIG90aGVyIGNvbnRlbnQgYmxvY2sgdHlwZXMgd29ya3MuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L1BhY2thZ2UvLWF3cy1zZGstY2xpZW50LWJlZHJvY2stcnVudGltZS9UeXBlQWxpYXMvQ29udGVudEJsb2NrLy5cbiAgICAgIHRleHQ/OiBuZXZlcjtcbiAgICAgIGRvY3VtZW50PzogbmV2ZXI7XG4gICAgICB0b29sVXNlPzogbmV2ZXI7XG4gICAgICB0b29sUmVzdWx0PzogbmV2ZXI7XG4gICAgICBndWFyZENvbnRlbnQ/OiBuZXZlcjtcbiAgICAgICR1bmtub3duPzogbmV2ZXI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgVG9vbERlZmluaXRpb248VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hID0gSlNPTlNjaGVtYT4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaW5wdXRTY2hlbWE6IFRvb2xJbnB1dFNjaGVtYTxUSlNPTlNjaGVtYT47XG59O1xuXG4vLyBDdXN0b21lcnMgYXJlIG5vdCBleHBlY3RlZCB0byBjcmVhdGUgZXZlbnRzIHRoZW1zZWx2ZXMsIHRoZXJlZm9yZVxuLy8gZGVmaW5pdGlvbiBvZiBuZXN0ZWQgcHJvcGVydGllcyBpcyBpbmxpbmUuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25UdXJuRXZlbnQgPSB7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIGN1cnJlbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgc3RyZWFtUmVzcG9uc2U/OiBib29sZWFuO1xuICByZXNwb25zZU11dGF0aW9uOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0VHlwZU5hbWU6IHN0cmluZztcbiAgICBzZWxlY3Rpb25TZXQ6IHN0cmluZztcbiAgfTtcbiAgZ3JhcGhxbEFwaUVuZHBvaW50OiBzdHJpbmc7XG4gIG1vZGVsQ29uZmlndXJhdGlvbjoge1xuICAgIG1vZGVsSWQ6IHN0cmluZztcbiAgICBzeXN0ZW1Qcm9tcHQ6IHN0cmluZztcbiAgICByZWdpb24/OiBzdHJpbmc7XG4gICAgaW5mZXJlbmNlQ29uZmlndXJhdGlvbj86IHtcbiAgICAgIG1heFRva2Vucz86IG51bWJlcjtcbiAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICAgICAgdG9wUD86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICByZXF1ZXN0OiB7XG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfTtcbiAgbWVzc2FnZUhpc3RvcnlRdWVyeToge1xuICAgIGdldFF1ZXJ5TmFtZTogc3RyaW5nO1xuICAgIGdldFF1ZXJ5SW5wdXRUeXBlTmFtZTogc3RyaW5nO1xuICAgIGxpc3RRdWVyeU5hbWU6IHN0cmluZztcbiAgICBsaXN0UXVlcnlJbnB1dFR5cGVOYW1lOiBzdHJpbmc7XG4gICAgbGlzdFF1ZXJ5TGltaXQ/OiBudW1iZXI7XG4gIH07XG4gIHRvb2xzQ29uZmlndXJhdGlvbj86IHtcbiAgICBkYXRhVG9vbHM/OiBBcnJheTxcbiAgICAgIFRvb2xEZWZpbml0aW9uICYge1xuICAgICAgICBncmFwaHFsUmVxdWVzdElucHV0RGVzY3JpcHRvcjoge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogc3RyaW5nO1xuICAgICAgICAgIHNlbGVjdGlvblNldDogc3RyaW5nO1xuICAgICAgICAgIHByb3BlcnR5VHlwZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgPjtcbiAgICBjbGllbnRUb29scz86IEFycmF5PFRvb2xEZWZpbml0aW9uPjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGFibGVUb29sPFxuICBUSlNPTlNjaGVtYSBleHRlbmRzIEpTT05TY2hlbWEgPSBKU09OU2NoZW1hLFxuICBUVG9vbElucHV0ID0gRnJvbUpTT05TY2hlbWE8VEpTT05TY2hlbWE+XG4+ID0gVG9vbERlZmluaXRpb248VEpTT05TY2hlbWE+ICYge1xuICBleGVjdXRlOiAoaW5wdXQ6IFRUb29sSW5wdXQpID0+IFByb21pc2U8VG9vbFJlc3VsdENvbnRlbnRCbG9jaz47XG59O1xuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25UdXJuRXJyb3IgPSB7XG4gIGVycm9yVHlwZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdHJlYW1pbmdSZXNwb25zZUNodW5rID0ge1xuICAvLyBhbHdheXMgcmVxdWlyZWRcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHN0cmluZztcbiAgY29udGVudEJsb2NrSW5kZXg6IG51bWJlcjtcbiAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogQXJyYXk8YmVkcm9jay5Db250ZW50QmxvY2s+O1xuXG4gIC8vIG9wdGlvbmFsIHBhZGRpbmdcbiAgLy8gaXQgaXMgYSByYW5kb20gc3RyaW5nIGluY2x1ZGVkIGluIHRleHQgY2h1bmtzLFxuICAvLyB0aGUgdmFsdWUgZG9lcyBub3QgbWF0dGVyLCBidXQgd2UgbmVlZCB0byBwYXNzIGl0IHRocm91Z2ggdG8gQXBwU3luY1xuICBwPzogc3RyaW5nO1xufSAmIChcbiAgfCB7XG4gICAgICAvLyB0ZXh0IGNodW5rXG4gICAgICBjb250ZW50QmxvY2tUZXh0OiBzdHJpbmc7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4OiBudW1iZXI7XG4gICAgICBjb250ZW50QmxvY2tEb25lQXRJbmRleD86IG5ldmVyO1xuICAgICAgY29udGVudEJsb2NrVG9vbFVzZT86IG5ldmVyO1xuICAgICAgc3RvcFJlYXNvbj86IG5ldmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICAvLyBlbmQgb2YgYmxvY2suIGFwcGxpY2FibGUgdG8gdGV4dCBibG9ja3NcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4OiBudW1iZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlPzogbmV2ZXI7XG4gICAgICBzdG9wUmVhc29uPzogbmV2ZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIC8vIHRvb2wgdXNlXG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlOiBzdHJpbmc7IC8vIHNlcmlhbGl6ZWQganNvbiB3aXRoIGZ1bGwgdG9vbCB1c2UgYmxvY2tcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBzdG9wUmVhc29uPzogbmV2ZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIC8vIHR1cm4gY29tcGxldGVcbiAgICAgIHN0b3BSZWFzb246IHN0cmluZztcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlPzogbmV2ZXI7XG4gICAgfVxuKTtcbiJdfQ==
|
package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/README.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# Description
|
2
|
+
|
3
|
+
Contains core logic that needs to be normalized across many packages in the repo.
|
4
|
+
This includes things like error classes, parsing stack name and BackendIdentifiers, and other cross-cutting concerns.
|
5
|
+
Over time, this package will probably have a tendency to turn into a "kitchen sink" utility package.
|
6
|
+
We should take steps to mitigate that by:
|
7
|
+
|
8
|
+
1. Be very careful about what gets added to this package. Consider if the thing you are adding can go in some other shared package.
|
9
|
+
2. Be open to splitting this package into multiple "core" packages when logical groupings emerge.
|
@@ -0,0 +1,14 @@
|
|
1
|
+
/**
|
2
|
+
* Find the backend definition file in the customer app that represents a CDK app.
|
3
|
+
*/
|
4
|
+
export declare class BackendLocator {
|
5
|
+
private readonly rootDir;
|
6
|
+
private relativePath;
|
7
|
+
private supportedFileExtensions;
|
8
|
+
/**
|
9
|
+
* Constructor for BackendLocator
|
10
|
+
*/
|
11
|
+
constructor(rootDir?: string);
|
12
|
+
locate: () => string;
|
13
|
+
}
|
14
|
+
//# sourceMappingURL=backend_entry_point_locator.d.ts.map
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.BackendLocator = void 0;
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
8
|
+
const path_1 = __importDefault(require("path"));
|
9
|
+
const errors_1 = require("./errors");
|
10
|
+
/**
|
11
|
+
* Find the backend definition file in the customer app that represents a CDK app.
|
12
|
+
*/
|
13
|
+
class BackendLocator {
|
14
|
+
rootDir;
|
15
|
+
relativePath = path_1.default.join('amplify', 'backend');
|
16
|
+
// Give preference to JS if that exists over TS in case customers have their own compilation process.
|
17
|
+
supportedFileExtensions = ['.js', '.mjs', '.cjs', '.ts'];
|
18
|
+
/**
|
19
|
+
* Constructor for BackendLocator
|
20
|
+
*/
|
21
|
+
constructor(rootDir = process.cwd()) {
|
22
|
+
this.rootDir = rootDir;
|
23
|
+
}
|
24
|
+
locate = () => {
|
25
|
+
for (const fileExtension of this.supportedFileExtensions) {
|
26
|
+
if (fs_1.default.existsSync(path_1.default.resolve(this.rootDir, this.relativePath + fileExtension))) {
|
27
|
+
return this.relativePath + fileExtension;
|
28
|
+
}
|
29
|
+
}
|
30
|
+
throw new errors_1.AmplifyUserError('FileConventionError', {
|
31
|
+
message: `Amplify Backend not found in ${this.rootDir}.`,
|
32
|
+
resolution: 'Amplify Backend must be defined in amplify/backend.(ts|js|cjs|mjs)',
|
33
|
+
});
|
34
|
+
};
|
35
|
+
}
|
36
|
+
exports.BackendLocator = BackendLocator;
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZF9lbnRyeV9wb2ludF9sb2NhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2JhY2tlbmRfZW50cnlfcG9pbnRfbG9jYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLHFDQUE0QztBQUU1Qzs7R0FFRztBQUNILE1BQWEsY0FBYztJQVFJO0lBUHJCLFlBQVksR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV2RCxxR0FBcUc7SUFDN0YsdUJBQXVCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRTs7T0FFRztJQUNILFlBQTZCLFVBQWtCLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFBL0IsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7SUFBRyxDQUFDO0lBRWhFLE1BQU0sR0FBRyxHQUFHLEVBQUU7UUFDWixLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUN4RCxJQUNFLFlBQUUsQ0FBQyxVQUFVLENBQ1gsY0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLENBQzlELEVBQ0Q7Z0JBQ0EsT0FBTyxJQUFJLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQzthQUMxQztTQUNGO1FBRUQsTUFBTSxJQUFJLHlCQUFnQixDQUFDLHFCQUFxQixFQUFFO1lBQ2hELE9BQU8sRUFBRSxnQ0FBZ0MsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUN4RCxVQUFVLEVBQ1Isb0VBQW9FO1NBQ3ZFLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztDQUNIO0FBM0JELHdDQTJCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFtcGxpZnlVc2VyRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbi8qKlxuICogRmluZCB0aGUgYmFja2VuZCBkZWZpbml0aW9uIGZpbGUgaW4gdGhlIGN1c3RvbWVyIGFwcCB0aGF0IHJlcHJlc2VudHMgYSBDREsgYXBwLlxuICovXG5leHBvcnQgY2xhc3MgQmFja2VuZExvY2F0b3Ige1xuICBwcml2YXRlIHJlbGF0aXZlUGF0aCA9IHBhdGguam9pbignYW1wbGlmeScsICdiYWNrZW5kJyk7XG5cbiAgLy8gR2l2ZSBwcmVmZXJlbmNlIHRvIEpTIGlmIHRoYXQgZXhpc3RzIG92ZXIgVFMgaW4gY2FzZSBjdXN0b21lcnMgaGF2ZSB0aGVpciBvd24gY29tcGlsYXRpb24gcHJvY2Vzcy5cbiAgcHJpdmF0ZSBzdXBwb3J0ZWRGaWxlRXh0ZW5zaW9ucyA9IFsnLmpzJywgJy5tanMnLCAnLmNqcycsICcudHMnXTtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIGZvciBCYWNrZW5kTG9jYXRvclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb290RGlyOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpKSB7fVxuXG4gIGxvY2F0ZSA9ICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGZpbGVFeHRlbnNpb24gb2YgdGhpcy5zdXBwb3J0ZWRGaWxlRXh0ZW5zaW9ucykge1xuICAgICAgaWYgKFxuICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgIHBhdGgucmVzb2x2ZSh0aGlzLnJvb3REaXIsIHRoaXMucmVsYXRpdmVQYXRoICsgZmlsZUV4dGVuc2lvbilcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbGF0aXZlUGF0aCArIGZpbGVFeHRlbnNpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEFtcGxpZnlVc2VyRXJyb3IoJ0ZpbGVDb252ZW50aW9uRXJyb3InLCB7XG4gICAgICBtZXNzYWdlOiBgQW1wbGlmeSBCYWNrZW5kIG5vdCBmb3VuZCBpbiAke3RoaXMucm9vdERpcn0uYCxcbiAgICAgIHJlc29sdXRpb246XG4gICAgICAgICdBbXBsaWZ5IEJhY2tlbmQgbXVzdCBiZSBkZWZpbmVkIGluIGFtcGxpZnkvYmFja2VuZC4odHN8anN8Y2pzfG1qcyknLFxuICAgIH0pO1xuICB9O1xufVxuIl19
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { BackendIdentifier } from '@aws-amplify/plugin-types';
|
2
|
+
/**
|
3
|
+
* Provides static methods for converting BackendIdentifier to/from a stack name string
|
4
|
+
*/
|
5
|
+
export declare class BackendIdentifierConversions {
|
6
|
+
/**
|
7
|
+
* Convert a stack name to a BackendIdentifier
|
8
|
+
*
|
9
|
+
* If the stack name is ambiguous, undefined is returned
|
10
|
+
*/
|
11
|
+
static fromStackName(stackName?: string): BackendIdentifier | undefined;
|
12
|
+
/**
|
13
|
+
* Convert a BackendIdentifier to a stack name.
|
14
|
+
*
|
15
|
+
* !!!DANGER!!!
|
16
|
+
* !!!DO NOT CHANGE THIS UNLESS YOU ARE 100% SURE YOU UNDERSTAND THE CONSEQUENCES!!!
|
17
|
+
*
|
18
|
+
* Changing this method will change how stack names are generated which could be a massive breaking change for existing Amplify stacks.
|
19
|
+
*/
|
20
|
+
static toStackName(backendId: BackendIdentifier): string;
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=backend_identifier_conversions.d.ts.map
|