@aws-amplify/graphql-api-construct 1.18.8-gen2-migration-0205.0 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/.jsii +85 -44
  2. package/API.md +1 -1
  3. package/CHANGELOG.md +10 -2
  4. package/lib/amplify-dynamodb-table-wrapper.js +1 -1
  5. package/lib/amplify-graphql-api.js +4 -2
  6. package/lib/amplify-graphql-definition.js +1 -1
  7. package/lib/sql-model-datasource-strategy.js +1 -1
  8. package/lib/types.d.ts +1 -1
  9. package/lib/types.js +1 -1
  10. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/conversation_handler_construct.d.ts +13 -0
  11. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/conversation_handler_construct.js +17 -4
  12. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/bedrock_converse_adapter.js +89 -71
  13. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/types.d.ts +1 -0
  14. package/node_modules/@aws-amplify/ai-constructs/lib/conversation/runtime/types.js +1 -1
  15. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/README.md +9 -0
  16. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/backend_entry_point_locator.d.ts +14 -0
  17. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/backend_entry_point_locator.js +37 -0
  18. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/backend_identifier_conversions.d.ts +22 -0
  19. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/backend_identifier_conversions.js +90 -0
  20. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/caller_directory_extractor.d.ts +14 -0
  21. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/caller_directory_extractor.js +70 -0
  22. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk/enum_converters.d.ts +18 -0
  23. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk/enum_converters.js +116 -0
  24. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk/index.d.ts +3 -0
  25. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk/index.js +7 -0
  26. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk_context_key.d.ts +12 -0
  27. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/cdk_context_key.js +16 -0
  28. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/config/local_configuration_controller.d.ts +45 -0
  29. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/config/local_configuration_controller.js +125 -0
  30. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/config/local_configuration_controller_factory.d.ts +23 -0
  31. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/config/local_configuration_controller_factory.js +29 -0
  32. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_error.d.ts +64 -0
  33. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_error.js +267 -0
  34. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_library_fault.d.ts +21 -0
  35. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_library_fault.js +27 -0
  36. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_user_error.d.ts +21 -0
  37. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/amplify_user_error.js +27 -0
  38. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/index.d.ts +4 -0
  39. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/errors/index.js +20 -0
  40. 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
  41. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/extract_file_path_from_stack_trace_line.js +61 -0
  42. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/index.d.ts +15 -0
  43. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/index.internal.d.ts +4 -0
  44. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/index.internal.js +35 -0
  45. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/index.js +35 -0
  46. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/naming_convention_conversions.d.ts +13 -0
  47. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/naming_convention_conversions.js +23 -0
  48. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/object_accumulator.d.ts +45 -0
  49. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/object_accumulator.js +99 -0
  50. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/package_json_reader.d.ts +33 -0
  51. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/package_json_reader.js +56 -0
  52. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/parameter_path_conversions.d.ts +19 -0
  53. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/parameter_path_conversions.js +79 -0
  54. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/tag_name.d.ts +4 -0
  55. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/tag_name.js +8 -0
  56. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/account_id_fetcher.d.ts +14 -0
  57. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/account_id_fetcher.js +38 -0
  58. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/constants.d.ts +13 -0
  59. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/constants.js +16 -0
  60. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/get_installation_id.d.ts +5 -0
  61. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/get_installation_id.js +15 -0
  62. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/get_usage_data_url.d.ts +6 -0
  63. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/get_usage_data_url.js +24 -0
  64. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/noop_usage_data_emitter.d.ts +15 -0
  65. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/noop_usage_data_emitter.js +24 -0
  66. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/serializable_error.d.ts +27 -0
  67. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/serializable_error.js +70 -0
  68. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data.d.ts +29 -0
  69. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data.js +3 -0
  70. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data_emitter.d.ts +27 -0
  71. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data_emitter.js +146 -0
  72. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data_emitter_factory.d.ts +16 -0
  73. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/lib/usage-data/usage_data_emitter_factory.js +27 -0
  74. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/platform-core/package.json +45 -0
  75. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/README.md +9 -0
  76. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/amplify_function.d.ts +4 -0
  77. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/amplify_function.js +3 -0
  78. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/amplify_resource_group_name.d.ts +7 -0
  79. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/amplify_resource_group_name.js +3 -0
  80. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/auth_resources.d.ts +106 -0
  81. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/auth_resources.js +3 -0
  82. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/aws_client_provider.d.ts +5 -0
  83. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/aws_client_provider.js +3 -0
  84. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_identifier.d.ts +56 -0
  85. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_identifier.js +3 -0
  86. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_output.d.ts +6 -0
  87. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_output.js +3 -0
  88. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_secret_resolver.d.ts +22 -0
  89. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_secret_resolver.js +3 -0
  90. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_stack_creator.d.ts +8 -0
  91. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_stack_creator.js +3 -0
  92. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_stack_resolver.d.ts +7 -0
  93. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/backend_stack_resolver.js +3 -0
  94. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/construct_container.d.ts +35 -0
  95. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/construct_container.js +3 -0
  96. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/construct_factory.d.ts +24 -0
  97. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/construct_factory.js +3 -0
  98. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/deep_partial.d.ts +17 -0
  99. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/deep_partial.js +3 -0
  100. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/deployment_type.d.ts +8 -0
  101. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/deployment_type.js +3 -0
  102. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/function_resources.d.ts +8 -0
  103. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/function_resources.js +3 -0
  104. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/import_path_verifier.d.ts +14 -0
  105. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/import_path_verifier.js +3 -0
  106. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/index.d.ts +27 -0
  107. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/index.js +43 -0
  108. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/log_level.d.ts +2 -0
  109. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/log_level.js +3 -0
  110. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/log_retention.d.ts +2 -0
  111. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/log_retention.js +3 -0
  112. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/output_retrieval_strategy.d.ts +11 -0
  113. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/output_retrieval_strategy.js +3 -0
  114. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/output_storage_strategy.d.ts +10 -0
  115. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/output_storage_strategy.js +3 -0
  116. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/package_manager_controller.d.ts +30 -0
  117. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/package_manager_controller.js +3 -0
  118. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_access_acceptor.d.ts +27 -0
  119. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_access_acceptor.js +3 -0
  120. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_name_validator.d.ts +10 -0
  121. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_name_validator.js +3 -0
  122. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_provider.d.ts +10 -0
  123. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/resource_provider.js +3 -0
  124. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/ssm_environment_entries_generator.d.ts +5 -0
  125. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/ssm_environment_entries_generator.js +3 -0
  126. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/stable_backend_identifiers.d.ts +4 -0
  127. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/stable_backend_identifiers.js +3 -0
  128. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/stack_provider.d.ts +5 -0
  129. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/lib/stack_provider.js +3 -0
  130. package/node_modules/@aws-amplify/ai-constructs/node_modules/@aws-amplify/plugin-types/package.json +21 -0
  131. package/node_modules/@aws-amplify/ai-constructs/package.json +5 -5
  132. package/node_modules/@aws-amplify/graphql-auth-transformer/CHANGELOG.md +7 -1
  133. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/graphql-auth-transformer.js +2 -2
  134. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/graphql-auth-transformer.js.map +1 -1
  135. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/utils/iam.js +2 -2
  136. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/utils/iam.js.map +1 -1
  137. package/node_modules/@aws-amplify/graphql-auth-transformer/package.json +13 -13
  138. package/node_modules/@aws-amplify/graphql-conversation-transformer/CHANGELOG.md +7 -1
  139. package/node_modules/@aws-amplify/graphql-conversation-transformer/package.json +12 -12
  140. package/node_modules/@aws-amplify/graphql-default-value-transformer/CHANGELOG.md +5 -1
  141. package/node_modules/@aws-amplify/graphql-default-value-transformer/package.json +7 -7
  142. package/node_modules/@aws-amplify/graphql-directives/API.md +3 -0
  143. package/node_modules/@aws-amplify/graphql-directives/CHANGELOG.md +6 -0
  144. package/node_modules/@aws-amplify/graphql-directives/LICENSE +201 -0
  145. package/node_modules/@aws-amplify/graphql-directives/lib/directives/index.d.ts +1 -0
  146. package/node_modules/@aws-amplify/graphql-directives/lib/directives/index.d.ts.map +1 -1
  147. package/node_modules/@aws-amplify/graphql-directives/lib/directives/index.js +3 -1
  148. package/node_modules/@aws-amplify/graphql-directives/lib/directives/index.js.map +1 -1
  149. package/node_modules/@aws-amplify/graphql-directives/lib/directives/validate.d.ts +3 -0
  150. package/node_modules/@aws-amplify/graphql-directives/lib/directives/validate.d.ts.map +1 -0
  151. package/node_modules/@aws-amplify/graphql-directives/lib/directives/validate.js +30 -0
  152. package/node_modules/@aws-amplify/graphql-directives/lib/directives/validate.js.map +1 -0
  153. package/node_modules/@aws-amplify/graphql-directives/lib/index.d.ts.map +1 -1
  154. package/node_modules/@aws-amplify/graphql-directives/lib/index.js +1 -0
  155. package/node_modules/@aws-amplify/graphql-directives/lib/index.js.map +1 -1
  156. package/node_modules/@aws-amplify/graphql-directives/package.json +3 -2
  157. package/node_modules/@aws-amplify/graphql-function-transformer/CHANGELOG.md +8 -0
  158. package/node_modules/@aws-amplify/graphql-function-transformer/LICENSE +201 -0
  159. package/node_modules/@aws-amplify/graphql-function-transformer/package.json +8 -7
  160. package/node_modules/@aws-amplify/graphql-generation-transformer/CHANGELOG.md +10 -0
  161. package/node_modules/@aws-amplify/graphql-generation-transformer/LICENSE +201 -0
  162. package/node_modules/@aws-amplify/graphql-generation-transformer/lib/grapqhl-generation-transformer.js +2 -1
  163. package/node_modules/@aws-amplify/graphql-generation-transformer/lib/grapqhl-generation-transformer.js.map +1 -1
  164. package/node_modules/@aws-amplify/graphql-generation-transformer/package.json +8 -7
  165. package/node_modules/@aws-amplify/graphql-http-transformer/CHANGELOG.md +8 -0
  166. package/node_modules/@aws-amplify/graphql-http-transformer/LICENSE +201 -0
  167. package/node_modules/@aws-amplify/graphql-http-transformer/package.json +8 -7
  168. package/node_modules/@aws-amplify/graphql-index-transformer/CHANGELOG.md +5 -1
  169. package/node_modules/@aws-amplify/graphql-index-transformer/package.json +8 -8
  170. package/node_modules/@aws-amplify/graphql-maps-to-transformer/CHANGELOG.md +5 -1
  171. package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/assets/mapping-lambda.zip +0 -0
  172. package/node_modules/@aws-amplify/graphql-maps-to-transformer/package.json +11 -11
  173. package/node_modules/@aws-amplify/graphql-model-transformer/CHANGELOG.md +8 -1
  174. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-lambda.zip +0 -0
  175. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-notification-lambda.zip +0 -0
  176. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-patching-lambda.zip +0 -0
  177. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.d.ts.map +1 -1
  178. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.js +4 -3
  179. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/amplify-dynamodb-table/amplify-dynamo-model-resource-generator.js.map +1 -1
  180. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/dynamo-model-resource-generator.js +4 -4
  181. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/dynamo-model-resource-generator.js.map +1 -1
  182. package/node_modules/@aws-amplify/graphql-model-transformer/package.json +7 -7
  183. package/node_modules/@aws-amplify/graphql-predictions-transformer/CHANGELOG.md +8 -0
  184. package/node_modules/@aws-amplify/graphql-predictions-transformer/LICENSE +201 -0
  185. package/node_modules/@aws-amplify/graphql-predictions-transformer/lib/predictionsLambdaFunction.zip +0 -0
  186. package/node_modules/@aws-amplify/graphql-predictions-transformer/package.json +8 -7
  187. package/node_modules/@aws-amplify/graphql-relational-transformer/CHANGELOG.md +5 -1
  188. package/node_modules/@aws-amplify/graphql-relational-transformer/package.json +9 -9
  189. package/node_modules/@aws-amplify/graphql-searchable-transformer/CHANGELOG.md +5 -1
  190. package/node_modules/@aws-amplify/graphql-searchable-transformer/lib/streaming-lambda.zip +0 -0
  191. package/node_modules/@aws-amplify/graphql-searchable-transformer/package.json +8 -8
  192. package/node_modules/@aws-amplify/graphql-sql-transformer/CHANGELOG.md +5 -1
  193. package/node_modules/@aws-amplify/graphql-sql-transformer/package.json +8 -8
  194. package/node_modules/@aws-amplify/graphql-transformer/CHANGELOG.md +7 -1
  195. package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.d.ts.map +1 -1
  196. package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.js +2 -0
  197. package/node_modules/@aws-amplify/graphql-transformer/lib/graphql-transformer.js.map +1 -1
  198. package/node_modules/@aws-amplify/graphql-transformer/package.json +20 -19
  199. package/node_modules/@aws-amplify/graphql-transformer/src/graphql-transformer.ts +3 -0
  200. package/node_modules/@aws-amplify/graphql-transformer-core/CHANGELOG.md +11 -0
  201. package/node_modules/@aws-amplify/graphql-transformer-core/LICENSE +201 -0
  202. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/sync-utils.js +4 -4
  203. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/sync-utils.js.map +1 -1
  204. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/resolver.d.ts.map +1 -1
  205. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/resolver.js +4 -3
  206. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/resolver.js.map +1 -1
  207. package/node_modules/@aws-amplify/graphql-transformer-core/package.json +6 -5
  208. package/node_modules/@aws-amplify/graphql-transformer-interfaces/CHANGELOG.md +4 -0
  209. package/node_modules/@aws-amplify/graphql-transformer-interfaces/package.json +2 -2
  210. package/node_modules/@aws-amplify/graphql-transformer-interfaces/tsconfig.tsbuildinfo +1 -1
  211. package/node_modules/@aws-amplify/graphql-validate-transformer/API.md +27 -0
  212. package/node_modules/@aws-amplify/graphql-validate-transformer/CHANGELOG.md +10 -0
  213. package/node_modules/@aws-amplify/graphql-validate-transformer/LICENSE +201 -0
  214. package/node_modules/@aws-amplify/graphql-validate-transformer/jest.config.js +5 -0
  215. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/graphql-validate-transformer.d.ts +11 -0
  216. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/graphql-validate-transformer.d.ts.map +1 -0
  217. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/graphql-validate-transformer.js +96 -0
  218. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/graphql-validate-transformer.js.map +1 -0
  219. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/index.d.ts +2 -0
  220. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/index.d.ts.map +1 -0
  221. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/index.js +6 -0
  222. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/index.js.map +1 -0
  223. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/types.d.ts +25 -0
  224. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/types.d.ts.map +1 -0
  225. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/types.js +7 -0
  226. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/types.js.map +1 -0
  227. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/validators.d.ts +4 -0
  228. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/validators.d.ts.map +1 -0
  229. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/validators.js +83 -0
  230. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/validators.js.map +1 -0
  231. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/vtl-generator.d.ts +4 -0
  232. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/vtl-generator.d.ts.map +1 -0
  233. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/vtl-generator.js +57 -0
  234. package/node_modules/@aws-amplify/graphql-validate-transformer/lib/vtl-generator.js.map +1 -0
  235. package/node_modules/@aws-amplify/graphql-validate-transformer/package.json +46 -0
  236. package/node_modules/lodash.snakecase/LICENSE +47 -0
  237. package/node_modules/lodash.snakecase/README.md +18 -0
  238. package/node_modules/lodash.snakecase/index.js +435 -0
  239. package/node_modules/lodash.snakecase/package.json +17 -0
  240. package/package.json +27 -23
  241. package/src/amplify-graphql-api.ts +7 -1
  242. package/src/types.ts +1 -1
@@ -245,94 +245,112 @@ class BedrockConverseAdapter {
245
245
  role: undefined,
246
246
  content: [],
247
247
  };
248
- for await (const chunk of bedrockResponse.stream) {
249
- this.logger.debug('Bedrock Converse Stream response chunk:', chunk);
250
- if (chunk.messageStart) {
251
- accumulatedAssistantMessage.role = chunk.messageStart.role;
252
- }
253
- else if (chunk.contentBlockStart) {
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
- else if (chunk.contentBlockDelta) {
266
- if ((_c = chunk.contentBlockDelta.delta) === null || _c === void 0 ? void 0 : _c.toolUse) {
267
- if (!chunk.contentBlockDelta.delta.toolUse.input) {
268
- toolUseInput = '';
269
- }
270
- else {
271
- toolUseInput += chunk.contentBlockDelta.delta.toolUse.input;
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 ((_d = chunk.contentBlockDelta.delta) === null || _d === void 0 ? void 0 : _d.text) {
275
- text += chunk.contentBlockDelta.delta.text;
276
- yield {
277
- accumulatedTurnContent: [...accumulatedTurnContent, { text }],
278
- conversationId: this.event.conversationId,
279
- associatedUserMessageId: this.event.currentMessageId,
280
- contentBlockText: chunk.contentBlockDelta.delta.text,
281
- contentBlockIndex: blockIndex,
282
- contentBlockDeltaIndex: blockDeltaIndex,
283
- };
284
- lastBlockDeltaIndex = blockDeltaIndex;
285
- blockDeltaIndex++;
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
- else if (chunk.contentBlockStop) {
289
- if (toolUseBlock) {
290
- if (toolUseInput) {
291
- toolUseBlock.toolUse.input = JSON.parse(toolUseInput);
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
- // Bedrock API requires tool input to be non-null in message history.
295
- // Therefore, falling back to empty object.
296
- toolUseBlock.toolUse.input = {};
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
- contentBlockToolUse: JSON.stringify(toolUseBlock),
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
- (_f = accumulatedAssistantMessage.content) === null || _f === void 0 ? void 0 : _f.push({
318
- text,
319
- });
320
- accumulatedTurnContent.push({ text });
321
- yield {
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
- else if (chunk.messageStop) {
334
- stopReason = (_g = chunk.messageStop.stopReason) !== null && _g !== void 0 ? _g : '';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9ja19jb252ZXJzZV9hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi9ydW50aW1lL2JlZHJvY2tfY29udmVyc2VfYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0RUFheUM7QUFPekMsaUVBQTRFO0FBQzVFLHFHQUErRjtBQUUvRixxQ0FBMkM7QUFDM0MsK0RBQTBEO0FBRTFEOzs7R0FHRztBQUNILE1BQWEsc0JBQXNCO0lBUWpDOztPQUVHO0lBQ0gsWUFDbUIsS0FBNEIsRUFDN0MsZUFBc0MsRUFDckIsZ0JBQXNDLElBQUksNkNBQW9CLENBQzdFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FDNUMsRUFDRCxrQkFBa0IsR0FBRyxJQUFJLHlEQUFrQyxDQUFDLEtBQUssQ0FBQyxFQUNqRCwwQkFBMEIsSUFBSSw0RUFBbUMsQ0FDaEYsS0FBSyxDQUNOLEVBQ0QsaUJBQWlCLEdBQUcsSUFBSSx1Q0FBaUIsQ0FBQyxLQUFLLENBQUMsRUFDL0IsU0FBUyxPQUFPOztRQVZoQixVQUFLLEdBQUwsS0FBSyxDQUF1QjtRQUU1QixrQkFBYSxHQUFiLGFBQWEsQ0FFN0I7UUFFZ0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUV2QztRQUVnQixXQUFNLEdBQU4sTUFBTSxDQUFVO1FBbEJsQix5QkFBb0IsR0FDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNLLHFCQUFnQixHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBOEQzRSxlQUFVLEdBQUcsS0FBSyxJQUE2QixFQUFFOztZQUMvQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxHQUNyRCxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1lBRWhDLE1BQU0sUUFBUSxHQUNaLE1BQU0sSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7WUFF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QUEsMkJBQTJCLENBQUMsT0FBTyxtQ0FBSSxFQUFFLENBQUM7Z0JBQ3hFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FDaEQsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQ08sQ0FBQztnQkFDdkMsTUFBTSx5QkFBeUIsR0FBd0IsRUFBRSxDQUFDO2dCQUMxRCxLQUFLLE1BQU0sb0JBQW9CLElBQUksYUFBYSxFQUFFO29CQUNoRCxNQUFNLFlBQVksR0FDaEIsb0JBQWtELENBQUM7b0JBQ3JELE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUNwRSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztpQkFDeEQ7Z0JBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQztvQkFDWixJQUFJLEVBQUUsTUFBTTtvQkFDWixPQUFPLEVBQUUseUJBQXlCO2lCQUNuQyxDQUFDLENBQUM7YUFDSjtTQUNGLFFBQVEsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUVwQyxNQUFNO1lBQ0osc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO1lBQ25ELGNBQWMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWM7WUFDekMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7WUFDcEQsaUJBQWlCLEVBQUUsY0FBYztZQUNqQyxVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDO0lBQ0osQ0FBQztDQXNHRjtBQTdaRCx3REE2WkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCZWRyb2NrUnVudGltZUNsaWVudCxcbiAgQ29udGVudEJsb2NrLFxuICBDb252ZXJzZUNvbW1hbmQsXG4gIENvbnZlcnNlQ29tbWFuZElucHV0LFxuICBDb252ZXJzZUNvbW1hbmRPdXRwdXQsXG4gIENvbnZlcnNlU3RyZWFtQ29tbWFuZCxcbiAgQ29udmVyc2VTdHJlYW1Db21tYW5kSW5wdXQsXG4gIENvbnZlcnNlU3RyZWFtQ29tbWFuZE91dHB1dCxcbiAgTWVzc2FnZSxcbiAgVG9vbCxcbiAgVG9vbENvbmZpZ3VyYXRpb24sXG4gIFRvb2xJbnB1dFNjaGVtYSxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQge1xuICBDb252ZXJzYXRpb25UdXJuRXZlbnQsXG4gIEV4ZWN1dGFibGVUb29sLFxuICBTdHJlYW1pbmdSZXNwb25zZUNodW5rLFxuICBUb29sRGVmaW5pdGlvbixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25UdXJuRXZlbnRUb29sc1Byb3ZpZGVyIH0gZnJvbSAnLi9ldmVudC10b29scy1wcm92aWRlcic7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25NZXNzYWdlSGlzdG9yeVJldHJpZXZlciB9IGZyb20gJy4vY29udmVyc2F0aW9uX21lc3NhZ2VfaGlzdG9yeV9yZXRyaWV2ZXInO1xuaW1wb3J0ICogYXMgYmVkcm9jayBmcm9tICdAYXdzLXNkay9jbGllbnQtYmVkcm9jay1ydW50aW1lJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IFVzZXJBZ2VudFByb3ZpZGVyIH0gZnJvbSAnLi91c2VyX2FnZW50X3Byb3ZpZGVyJztcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpbnRlcmFjdGluZyB3aXRoIEJlZHJvY2sgQ29udmVyc2UgQVBJXG4gKiBpbiBvcmRlciB0byBwcm9kdWNlIGZpbmFsIHJlc3BvbnNlIHRoYXQgY2FuIGJlIHNlbnQgYmFjayB0byBjYWxsZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBCZWRyb2NrQ29udmVyc2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxUb29sczogQXJyYXk8VG9vbERlZmluaXRpb24+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=
@@ -81,6 +81,7 @@ export type StreamingResponseChunk = {
81
81
  associatedUserMessageId: string;
82
82
  contentBlockIndex: number;
83
83
  accumulatedTurnContent: Array<bedrock.ContentBlock>;
84
+ p?: string;
84
85
  } & ({
85
86
  contentBlockText: string;
86
87
  contentBlockDeltaIndex: number;
@@ -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+O1xufSAmIChcbiAgfCB7XG4gICAgICAvLyB0ZXh0IGNodW5rXG4gICAgICBjb250ZW50QmxvY2tUZXh0OiBzdHJpbmc7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4OiBudW1iZXI7XG4gICAgICBjb250ZW50QmxvY2tEb25lQXRJbmRleD86IG5ldmVyO1xuICAgICAgY29udGVudEJsb2NrVG9vbFVzZT86IG5ldmVyO1xuICAgICAgc3RvcFJlYXNvbj86IG5ldmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICAvLyBlbmQgb2YgYmxvY2suIGFwcGxpY2FibGUgdG8gdGV4dCBibG9ja3NcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4OiBudW1iZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlPzogbmV2ZXI7XG4gICAgICBzdG9wUmVhc29uPzogbmV2ZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIC8vIHRvb2wgdXNlXG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlOiBzdHJpbmc7IC8vIHNlcmlhbGl6ZWQganNvbiB3aXRoIGZ1bGwgdG9vbCB1c2UgYmxvY2tcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBzdG9wUmVhc29uPzogbmV2ZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIC8vIHR1cm4gY29tcGxldGVcbiAgICAgIHN0b3BSZWFzb246IHN0cmluZztcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlPzogbmV2ZXI7XG4gICAgfVxuKTtcbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udmVyc2F0aW9uL3J1bnRpbWUvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJlZHJvY2sgZnJvbSAnQGF3cy1zZGsvY2xpZW50LWJlZHJvY2stcnVudGltZSc7XG5pbXBvcnQgKiBhcyBqc29uU2NoZW1hVG9UeXBlU2NyaXB0IGZyb20gJ2pzb24tc2NoZW1hLXRvLXRzJztcblxuLypcbiAgTm90aWNlOiBUaGlzIGZpbGUgY29udGFpbnMgdHlwZXMgdGhhdCBhcmUgZXhwb3NlZCBwdWJsaWNseS5cbiAgVGhlcmVmb3JlLCB3ZSBhdm9pZCBlYWdlciBpbnRyb2R1Y3Rpb24gb2YgdHlwZXMgdGhhdCB3b3VsZG4ndCBiZSB1c2VmdWwgZm9yXG4gIHB1YmxpYyBBUEkgY29uc3VtZXIgYW5kIHBvdGVudGlhbGx5IHBvbGx1dGUgc3ludGF4IGFzc2lzdCBpbiBJREVzLlxuICovXG5leHBvcnQgdHlwZSBKU09OU2NoZW1hID0ganNvblNjaGVtYVRvVHlwZVNjcmlwdC5KU09OU2NoZW1hO1xuZXhwb3J0IHR5cGUgRnJvbUpTT05TY2hlbWE8VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hPiA9XG4gIGpzb25TY2hlbWFUb1R5cGVTY3JpcHQuRnJvbVNjaGVtYTxUSlNPTlNjaGVtYT47XG5leHBvcnQgdHlwZSBUb29sSW5wdXRTY2hlbWE8VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hPiA9IHtcbiAganNvbjogVEpTT05TY2hlbWE7XG59O1xuZXhwb3J0IHR5cGUgVG9vbFJlc3VsdENvbnRlbnRCbG9jayA9IGJlZHJvY2suVG9vbFJlc3VsdENvbnRlbnRCbG9jaztcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uTWVzc2FnZSA9IHtcbiAgcm9sZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCc7XG4gIGNvbnRlbnQ6IEFycmF5PENvbnZlcnNhdGlvbk1lc3NhZ2VDb250ZW50QmxvY2s+O1xufTtcblxuZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uTWVzc2FnZUNvbnRlbnRCbG9jayA9XG4gIHwgYmVkcm9jay5Db250ZW50QmxvY2tcbiAgfCB7XG4gICAgICBpbWFnZTogT21pdDxiZWRyb2NrLkltYWdlQmxvY2ssICdzb3VyY2UnPiAmIHtcbiAgICAgICAgLy8gVXBzdHJlYW0gKEFwcHN5bmMpIG1heSBzZW5kIGltYWdlcyBpbiBhIGZvcm0gb2YgQmFzZTY0IGVuY29kZWQgc3RyaW5nc1xuICAgICAgICBzb3VyY2U6IHsgYnl0ZXM6IHN0cmluZyB9O1xuICAgICAgfTtcbiAgICAgIC8vIFRoZXNlIGFyZSBuZWVkZWQgc28gdGhhdCB1bmlvbiB3aXRoIG90aGVyIGNvbnRlbnQgYmxvY2sgdHlwZXMgd29ya3MuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L1BhY2thZ2UvLWF3cy1zZGstY2xpZW50LWJlZHJvY2stcnVudGltZS9UeXBlQWxpYXMvQ29udGVudEJsb2NrLy5cbiAgICAgIHRleHQ/OiBuZXZlcjtcbiAgICAgIGRvY3VtZW50PzogbmV2ZXI7XG4gICAgICB0b29sVXNlPzogbmV2ZXI7XG4gICAgICB0b29sUmVzdWx0PzogbmV2ZXI7XG4gICAgICBndWFyZENvbnRlbnQ/OiBuZXZlcjtcbiAgICAgICR1bmtub3duPzogbmV2ZXI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgVG9vbERlZmluaXRpb248VEpTT05TY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hID0gSlNPTlNjaGVtYT4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaW5wdXRTY2hlbWE6IFRvb2xJbnB1dFNjaGVtYTxUSlNPTlNjaGVtYT47XG59O1xuXG4vLyBDdXN0b21lcnMgYXJlIG5vdCBleHBlY3RlZCB0byBjcmVhdGUgZXZlbnRzIHRoZW1zZWx2ZXMsIHRoZXJlZm9yZVxuLy8gZGVmaW5pdGlvbiBvZiBuZXN0ZWQgcHJvcGVydGllcyBpcyBpbmxpbmUuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25UdXJuRXZlbnQgPSB7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIGN1cnJlbnRNZXNzYWdlSWQ6IHN0cmluZztcbiAgc3RyZWFtUmVzcG9uc2U/OiBib29sZWFuO1xuICByZXNwb25zZU11dGF0aW9uOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0VHlwZU5hbWU6IHN0cmluZztcbiAgICBzZWxlY3Rpb25TZXQ6IHN0cmluZztcbiAgfTtcbiAgZ3JhcGhxbEFwaUVuZHBvaW50OiBzdHJpbmc7XG4gIG1vZGVsQ29uZmlndXJhdGlvbjoge1xuICAgIG1vZGVsSWQ6IHN0cmluZztcbiAgICBzeXN0ZW1Qcm9tcHQ6IHN0cmluZztcbiAgICByZWdpb24/OiBzdHJpbmc7XG4gICAgaW5mZXJlbmNlQ29uZmlndXJhdGlvbj86IHtcbiAgICAgIG1heFRva2Vucz86IG51bWJlcjtcbiAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICAgICAgdG9wUD86IG51bWJlcjtcbiAgICB9O1xuICB9O1xuICByZXF1ZXN0OiB7XG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfTtcbiAgbWVzc2FnZUhpc3RvcnlRdWVyeToge1xuICAgIGdldFF1ZXJ5TmFtZTogc3RyaW5nO1xuICAgIGdldFF1ZXJ5SW5wdXRUeXBlTmFtZTogc3RyaW5nO1xuICAgIGxpc3RRdWVyeU5hbWU6IHN0cmluZztcbiAgICBsaXN0UXVlcnlJbnB1dFR5cGVOYW1lOiBzdHJpbmc7XG4gICAgbGlzdFF1ZXJ5TGltaXQ/OiBudW1iZXI7XG4gIH07XG4gIHRvb2xzQ29uZmlndXJhdGlvbj86IHtcbiAgICBkYXRhVG9vbHM/OiBBcnJheTxcbiAgICAgIFRvb2xEZWZpbml0aW9uICYge1xuICAgICAgICBncmFwaHFsUmVxdWVzdElucHV0RGVzY3JpcHRvcjoge1xuICAgICAgICAgIHF1ZXJ5TmFtZTogc3RyaW5nO1xuICAgICAgICAgIHNlbGVjdGlvblNldDogc3RyaW5nO1xuICAgICAgICAgIHByb3BlcnR5VHlwZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgPjtcbiAgICBjbGllbnRUb29scz86IEFycmF5PFRvb2xEZWZpbml0aW9uPjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIEV4ZWN1dGFibGVUb29sPFxuICBUSlNPTlNjaGVtYSBleHRlbmRzIEpTT05TY2hlbWEgPSBKU09OU2NoZW1hLFxuICBUVG9vbElucHV0ID0gRnJvbUpTT05TY2hlbWE8VEpTT05TY2hlbWE+XG4+ID0gVG9vbERlZmluaXRpb248VEpTT05TY2hlbWE+ICYge1xuICBleGVjdXRlOiAoaW5wdXQ6IFRUb29sSW5wdXQpID0+IFByb21pc2U8VG9vbFJlc3VsdENvbnRlbnRCbG9jaz47XG59O1xuXG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25UdXJuRXJyb3IgPSB7XG4gIGVycm9yVHlwZTogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTdHJlYW1pbmdSZXNwb25zZUNodW5rID0ge1xuICAvLyBhbHdheXMgcmVxdWlyZWRcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgYXNzb2NpYXRlZFVzZXJNZXNzYWdlSWQ6IHN0cmluZztcbiAgY29udGVudEJsb2NrSW5kZXg6IG51bWJlcjtcbiAgYWNjdW11bGF0ZWRUdXJuQ29udGVudDogQXJyYXk8YmVkcm9jay5Db250ZW50QmxvY2s+O1xuXG4gIC8vIG9wdGlvbmFsIHBhZGRpbmdcbiAgLy8gaXQgaXMgYSByYW5kb20gc3RyaW5nIGluY2x1ZGVkIGluIHRleHQgY2h1bmtzLFxuICAvLyB0aGUgdmFsdWUgZG9lcyBub3QgbWF0dGVyLCBidXQgd2UgbmVlZCB0byBwYXNzIGl0IHRocm91Z2ggdG8gQXBwU3luY1xuICBwPzogc3RyaW5nO1xufSAmIChcbiAgfCB7XG4gICAgICAvLyB0ZXh0IGNodW5rXG4gICAgICBjb250ZW50QmxvY2tUZXh0OiBzdHJpbmc7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4OiBudW1iZXI7XG4gICAgICBjb250ZW50QmxvY2tEb25lQXRJbmRleD86IG5ldmVyO1xuICAgICAgY29udGVudEJsb2NrVG9vbFVzZT86IG5ldmVyO1xuICAgICAgc3RvcFJlYXNvbj86IG5ldmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICAvLyBlbmQgb2YgYmxvY2suIGFwcGxpY2FibGUgdG8gdGV4dCBibG9ja3NcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4OiBudW1iZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlPzogbmV2ZXI7XG4gICAgICBzdG9wUmVhc29uPzogbmV2ZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIC8vIHRvb2wgdXNlXG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlOiBzdHJpbmc7IC8vIHNlcmlhbGl6ZWQganNvbiB3aXRoIGZ1bGwgdG9vbCB1c2UgYmxvY2tcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBzdG9wUmVhc29uPzogbmV2ZXI7XG4gICAgfVxuICB8IHtcbiAgICAgIC8vIHR1cm4gY29tcGxldGVcbiAgICAgIHN0b3BSZWFzb246IHN0cmluZztcbiAgICAgIGNvbnRlbnRCbG9ja0RvbmVBdEluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUZXh0PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tEZWx0YUluZGV4PzogbmV2ZXI7XG4gICAgICBjb250ZW50QmxvY2tUb29sVXNlPzogbmV2ZXI7XG4gICAgfVxuKTtcbiJdfQ==
@@ -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
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BackendIdentifierConversions = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const STACK_NAME_LENGTH_LIMIT = 128;
6
+ const AMPLIFY_PREFIX = 'amplify';
7
+ const HASH_LENGTH = 10;
8
+ const NUM_DASHES = 4;
9
+ /**
10
+ * Provides static methods for converting BackendIdentifier to/from a stack name string
11
+ */
12
+ class BackendIdentifierConversions {
13
+ /**
14
+ * Convert a stack name to a BackendIdentifier
15
+ *
16
+ * If the stack name is ambiguous, undefined is returned
17
+ */
18
+ // It's fine to ignore the rule here because the anti-static rule is to ban the static function which should use constructor
19
+ // eslint-disable-next-line no-restricted-syntax
20
+ static fromStackName(stackName) {
21
+ if (!stackName) {
22
+ return;
23
+ }
24
+ const parts = stackName.split('-');
25
+ if (parts.length !== 5) {
26
+ return;
27
+ }
28
+ const [prefix, namespace, instance, type, hash] = parts;
29
+ if (prefix !== AMPLIFY_PREFIX) {
30
+ return;
31
+ }
32
+ if (type !== 'sandbox' && type !== 'branch') {
33
+ return;
34
+ }
35
+ return {
36
+ namespace,
37
+ name: instance,
38
+ type: type,
39
+ hash,
40
+ };
41
+ }
42
+ /**
43
+ * Convert a BackendIdentifier to a stack name.
44
+ *
45
+ * !!!DANGER!!!
46
+ * !!!DO NOT CHANGE THIS UNLESS YOU ARE 100% SURE YOU UNDERSTAND THE CONSEQUENCES!!!
47
+ *
48
+ * Changing this method will change how stack names are generated which could be a massive breaking change for existing Amplify stacks.
49
+ */
50
+ // It's fine to ignore the rule here because the anti-static rule is to ban the static function which should use constructor
51
+ // eslint-disable-next-line no-restricted-syntax
52
+ static toStackName(backendId) {
53
+ const hash = getHash(backendId);
54
+ // only take the first 50 chars here to make sure there is room in the stack name for the namespace as well
55
+ const name = sanitizeChars(backendId.name).slice(0, 50);
56
+ const namespaceMaxLength = STACK_NAME_LENGTH_LIMIT -
57
+ AMPLIFY_PREFIX.length -
58
+ backendId.type.length -
59
+ name.length -
60
+ NUM_DASHES -
61
+ HASH_LENGTH;
62
+ const namespace = sanitizeChars(backendId.namespace).slice(0, namespaceMaxLength - 1);
63
+ return ['amplify', namespace, name, backendId.type, hash].join('-');
64
+ }
65
+ }
66
+ exports.BackendIdentifierConversions = BackendIdentifierConversions;
67
+ /**
68
+ * Gets a stable hash from the namespace and name in the backendId.
69
+ *
70
+ * If the backendId already includes a hash, this hash is returned as-is.
71
+ *
72
+ * !!!DANGER!!!
73
+ * !!!DO NOT CHANGE THIS UNLESS YOU ARE 100% SURE YOU UNDERSTAND THE CONSEQUENCES!!!
74
+ *
75
+ * Changing this hash algorithm will change how stack names are generated which would be a massive breaking change for existing Amplify stacks.
76
+ */
77
+ const getHash = (backendId) => backendId.hash ??
78
+ // md5 would be sufficient here because this hash does not need to be cryptographically secure, but this ensures that we don't get unnecessarily flagged by some security scanner
79
+ (0, crypto_1.createHash)('sha512')
80
+ .update(backendId.namespace)
81
+ .update(backendId.name)
82
+ .digest('hex')
83
+ .slice(0, HASH_LENGTH);
84
+ /**
85
+ * Remove all non-alphanumeric characters from the input string
86
+ */
87
+ const sanitizeChars = (str) => {
88
+ return str.replace(/[^A-Za-z0-9]/g, '');
89
+ };
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZF9pZGVudGlmaWVyX2NvbnZlcnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2JhY2tlbmRfaWRlbnRpZmllcl9jb252ZXJzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxtQ0FBb0M7QUFFcEMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDcEMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN2QixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFckI7O0dBRUc7QUFDSCxNQUFhLDRCQUE0QjtJQUN2Qzs7OztPQUlHO0lBQ0gsNEhBQTRIO0lBQzVILGdEQUFnRDtJQUNoRCxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQWtCO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxPQUFPO1NBQ1I7UUFDRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTztTQUNSO1FBQ0QsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDeEQsSUFBSSxNQUFNLEtBQUssY0FBYyxFQUFFO1lBQzdCLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzNDLE9BQU87U0FDUjtRQUVELE9BQU87WUFDTCxTQUFTO1lBQ1QsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsSUFBNEI7WUFDbEMsSUFBSTtTQUNMLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDRIQUE0SDtJQUM1SCxnREFBZ0Q7SUFDaEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUE0QjtRQUM3QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEMsMkdBQTJHO1FBQzNHLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV4RCxNQUFNLGtCQUFrQixHQUN0Qix1QkFBdUI7WUFDdkIsY0FBYyxDQUFDLE1BQU07WUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ3JCLElBQUksQ0FBQyxNQUFNO1lBQ1gsVUFBVTtZQUNWLFdBQVcsQ0FBQztRQUVkLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUN4RCxDQUFDLEVBQ0Qsa0JBQWtCLEdBQUcsQ0FBQyxDQUN2QixDQUFDO1FBRUYsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDRjtBQS9ERCxvRUErREM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sR0FBRyxDQUFDLFNBQTRCLEVBQVUsRUFBRSxDQUN2RCxTQUFTLENBQUMsSUFBSTtJQUNkLGlMQUFpTDtJQUNqTCxJQUFBLG1CQUFVLEVBQUMsUUFBUSxDQUFDO1NBQ2pCLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDYixLQUFLLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBRTNCOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQVUsRUFBRTtJQUM1QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhY2tlbmRJZGVudGlmaWVyIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L3BsdWdpbi10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgU1RBQ0tfTkFNRV9MRU5HVEhfTElNSVQgPSAxMjg7XG5jb25zdCBBTVBMSUZZX1BSRUZJWCA9ICdhbXBsaWZ5JztcbmNvbnN0IEhBU0hfTEVOR1RIID0gMTA7XG5jb25zdCBOVU1fREFTSEVTID0gNDtcblxuLyoqXG4gKiBQcm92aWRlcyBzdGF0aWMgbWV0aG9kcyBmb3IgY29udmVydGluZyBCYWNrZW5kSWRlbnRpZmllciB0by9mcm9tIGEgc3RhY2sgbmFtZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIEJhY2tlbmRJZGVudGlmaWVyQ29udmVyc2lvbnMge1xuICAvKipcbiAgICogQ29udmVydCBhIHN0YWNrIG5hbWUgdG8gYSBCYWNrZW5kSWRlbnRpZmllclxuICAgKlxuICAgKiBJZiB0aGUgc3RhY2sgbmFtZSBpcyBhbWJpZ3VvdXMsIHVuZGVmaW5lZCBpcyByZXR1cm5lZFxuICAgKi9cbiAgLy8gSXQncyBmaW5lIHRvIGlnbm9yZSB0aGUgcnVsZSBoZXJlIGJlY2F1c2UgdGhlIGFudGktc3RhdGljIHJ1bGUgaXMgdG8gYmFuIHRoZSBzdGF0aWMgZnVuY3Rpb24gd2hpY2ggc2hvdWxkIHVzZSBjb25zdHJ1Y3RvclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgc3RhdGljIGZyb21TdGFja05hbWUoc3RhY2tOYW1lPzogc3RyaW5nKTogQmFja2VuZElkZW50aWZpZXIgfCB1bmRlZmluZWQge1xuICAgIGlmICghc3RhY2tOYW1lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gc3RhY2tOYW1lLnNwbGl0KCctJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gNSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBbcHJlZml4LCBuYW1lc3BhY2UsIGluc3RhbmNlLCB0eXBlLCBoYXNoXSA9IHBhcnRzO1xuICAgIGlmIChwcmVmaXggIT09IEFNUExJRllfUFJFRklYKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlICE9PSAnc2FuZGJveCcgJiYgdHlwZSAhPT0gJ2JyYW5jaCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlLFxuICAgICAgbmFtZTogaW5zdGFuY2UsXG4gICAgICB0eXBlOiB0eXBlIGFzICdzYW5kYm94JyB8ICdicmFuY2gnLFxuICAgICAgaGFzaCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSBCYWNrZW5kSWRlbnRpZmllciB0byBhIHN0YWNrIG5hbWUuXG4gICAqXG4gICAqICEhIURBTkdFUiEhIVxuICAgKiAhISFETyBOT1QgQ0hBTkdFIFRISVMgVU5MRVNTIFlPVSBBUkUgMTAwJSBTVVJFIFlPVSBVTkRFUlNUQU5EIFRIRSBDT05TRVFVRU5DRVMhISFcbiAgICpcbiAgICogQ2hhbmdpbmcgdGhpcyBtZXRob2Qgd2lsbCBjaGFuZ2UgaG93IHN0YWNrIG5hbWVzIGFyZSBnZW5lcmF0ZWQgd2hpY2ggY291bGQgYmUgYSBtYXNzaXZlIGJyZWFraW5nIGNoYW5nZSBmb3IgZXhpc3RpbmcgQW1wbGlmeSBzdGFja3MuXG4gICAqL1xuICAvLyBJdCdzIGZpbmUgdG8gaWdub3JlIHRoZSBydWxlIGhlcmUgYmVjYXVzZSB0aGUgYW50aS1zdGF0aWMgcnVsZSBpcyB0byBiYW4gdGhlIHN0YXRpYyBmdW5jdGlvbiB3aGljaCBzaG91bGQgdXNlIGNvbnN0cnVjdG9yXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICBzdGF0aWMgdG9TdGFja05hbWUoYmFja2VuZElkOiBCYWNrZW5kSWRlbnRpZmllcik6IHN0cmluZyB7XG4gICAgY29uc3QgaGFzaCA9IGdldEhhc2goYmFja2VuZElkKTtcblxuICAgIC8vIG9ubHkgdGFrZSB0aGUgZmlyc3QgNTAgY2hhcnMgaGVyZSB0byBtYWtlIHN1cmUgdGhlcmUgaXMgcm9vbSBpbiB0aGUgc3RhY2sgbmFtZSBmb3IgdGhlIG5hbWVzcGFjZSBhcyB3ZWxsXG4gICAgY29uc3QgbmFtZSA9IHNhbml0aXplQ2hhcnMoYmFja2VuZElkLm5hbWUpLnNsaWNlKDAsIDUwKTtcblxuICAgIGNvbnN0IG5hbWVzcGFjZU1heExlbmd0aCA9XG4gICAgICBTVEFDS19OQU1FX0xFTkdUSF9MSU1JVCAtXG4gICAgICBBTVBMSUZZX1BSRUZJWC5sZW5ndGggLVxuICAgICAgYmFja2VuZElkLnR5cGUubGVuZ3RoIC1cbiAgICAgIG5hbWUubGVuZ3RoIC1cbiAgICAgIE5VTV9EQVNIRVMgLVxuICAgICAgSEFTSF9MRU5HVEg7XG5cbiAgICBjb25zdCBuYW1lc3BhY2UgPSBzYW5pdGl6ZUNoYXJzKGJhY2tlbmRJZC5uYW1lc3BhY2UpLnNsaWNlKFxuICAgICAgMCxcbiAgICAgIG5hbWVzcGFjZU1heExlbmd0aCAtIDFcbiAgICApO1xuXG4gICAgcmV0dXJuIFsnYW1wbGlmeScsIG5hbWVzcGFjZSwgbmFtZSwgYmFja2VuZElkLnR5cGUsIGhhc2hdLmpvaW4oJy0nKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYSBzdGFibGUgaGFzaCBmcm9tIHRoZSBuYW1lc3BhY2UgYW5kIG5hbWUgaW4gdGhlIGJhY2tlbmRJZC5cbiAqXG4gKiBJZiB0aGUgYmFja2VuZElkIGFscmVhZHkgaW5jbHVkZXMgYSBoYXNoLCB0aGlzIGhhc2ggaXMgcmV0dXJuZWQgYXMtaXMuXG4gKlxuICogISEhREFOR0VSISEhXG4gKiAhISFETyBOT1QgQ0hBTkdFIFRISVMgVU5MRVNTIFlPVSBBUkUgMTAwJSBTVVJFIFlPVSBVTkRFUlNUQU5EIFRIRSBDT05TRVFVRU5DRVMhISFcbiAqXG4gKiBDaGFuZ2luZyB0aGlzIGhhc2ggYWxnb3JpdGhtIHdpbGwgY2hhbmdlIGhvdyBzdGFjayBuYW1lcyBhcmUgZ2VuZXJhdGVkIHdoaWNoIHdvdWxkIGJlIGEgbWFzc2l2ZSBicmVha2luZyBjaGFuZ2UgZm9yIGV4aXN0aW5nIEFtcGxpZnkgc3RhY2tzLlxuICovXG5jb25zdCBnZXRIYXNoID0gKGJhY2tlbmRJZDogQmFja2VuZElkZW50aWZpZXIpOiBzdHJpbmcgPT5cbiAgYmFja2VuZElkLmhhc2ggPz9cbiAgLy8gbWQ1IHdvdWxkIGJlIHN1ZmZpY2llbnQgaGVyZSBiZWNhdXNlIHRoaXMgaGFzaCBkb2VzIG5vdCBuZWVkIHRvIGJlIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSwgYnV0IHRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IGdldCB1bm5lY2Vzc2FyaWx5IGZsYWdnZWQgYnkgc29tZSBzZWN1cml0eSBzY2FubmVyXG4gIGNyZWF0ZUhhc2goJ3NoYTUxMicpXG4gICAgLnVwZGF0ZShiYWNrZW5kSWQubmFtZXNwYWNlKVxuICAgIC51cGRhdGUoYmFja2VuZElkLm5hbWUpXG4gICAgLmRpZ2VzdCgnaGV4JylcbiAgICAuc2xpY2UoMCwgSEFTSF9MRU5HVEgpO1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGZyb20gdGhlIGlucHV0IHN0cmluZ1xuICovXG5jb25zdCBzYW5pdGl6ZUNoYXJzID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywgJycpO1xufTtcbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Extracts the path of the caller of the code that generated the input stack trace.
3
+ * In other words, extracts the path from the _second_ entry in the stack trace
4
+ * (the first entry being the location where the stack trace was created and the second entry being the location that called the code that generated the stack trace)
5
+ */
6
+ export declare class CallerDirectoryExtractor {
7
+ private readonly stackTrace;
8
+ /**
9
+ * Creates caller directory extractor.
10
+ */
11
+ constructor(stackTrace: string | undefined);
12
+ extract: () => string;
13
+ }
14
+ //# sourceMappingURL=caller_directory_extractor.d.ts.map