@aws-amplify/graphql-api-construct 1.9.0-gen2-release-0418-2.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. package/.jsii +73 -59
  2. package/API.md +1 -1
  3. package/CHANGELOG.md +3 -1
  4. package/README.md +156 -24
  5. package/lib/amplify-dynamodb-table-wrapper.js +1 -1
  6. package/lib/amplify-graphql-api.js +7 -10
  7. package/lib/amplify-graphql-definition.js +1 -1
  8. package/lib/internal/asset-provider.d.ts +26 -0
  9. package/lib/internal/asset-provider.js +58 -0
  10. package/lib/internal/data-source-config.js +12 -2
  11. package/lib/internal/index.d.ts +1 -1
  12. package/lib/internal/index.js +2 -2
  13. package/lib/model-datasource-strategy-types.d.ts +7 -2
  14. package/lib/model-datasource-strategy-types.js +1 -1
  15. package/lib/sql-model-datasource-strategy.js +4 -3
  16. package/node_modules/@aws-amplify/graphql-auth-transformer/CHANGELOG.md +7 -1
  17. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/vtl-generator/rds/resolvers/mutation.d.ts.map +1 -1
  18. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/vtl-generator/rds/resolvers/mutation.js +3 -0
  19. package/node_modules/@aws-amplify/graphql-auth-transformer/lib/vtl-generator/rds/resolvers/mutation.js.map +1 -1
  20. package/node_modules/@aws-amplify/graphql-auth-transformer/package.json +14 -14
  21. package/node_modules/@aws-amplify/graphql-default-value-transformer/CHANGELOG.md +1 -1
  22. package/node_modules/@aws-amplify/graphql-default-value-transformer/package.json +9 -9
  23. package/node_modules/@aws-amplify/graphql-directives/CHANGELOG.md +1 -1
  24. package/node_modules/@aws-amplify/graphql-directives/package.json +2 -2
  25. package/node_modules/@aws-amplify/graphql-function-transformer/CHANGELOG.md +1 -1
  26. package/node_modules/@aws-amplify/graphql-function-transformer/package.json +8 -8
  27. package/node_modules/@aws-amplify/graphql-http-transformer/CHANGELOG.md +1 -1
  28. package/node_modules/@aws-amplify/graphql-http-transformer/package.json +8 -8
  29. package/node_modules/@aws-amplify/graphql-index-transformer/CHANGELOG.md +2 -1
  30. package/node_modules/@aws-amplify/graphql-index-transformer/lib/schema.js +8 -3
  31. package/node_modules/@aws-amplify/graphql-index-transformer/lib/schema.js.map +1 -1
  32. package/node_modules/@aws-amplify/graphql-index-transformer/package.json +9 -9
  33. package/node_modules/@aws-amplify/graphql-maps-to-transformer/CHANGELOG.md +4 -2
  34. package/node_modules/@aws-amplify/graphql-maps-to-transformer/lib/assets/mapping-lambda.zip +0 -0
  35. package/node_modules/@aws-amplify/graphql-maps-to-transformer/package.json +12 -12
  36. package/node_modules/@aws-amplify/graphql-model-transformer/CHANGELOG.md +3 -1
  37. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-lambda.zip +0 -0
  38. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-notification-lambda.zip +0 -0
  39. package/node_modules/@aws-amplify/graphql-model-transformer/lib/rds-patching-lambda.zip +0 -0
  40. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/mutation.d.ts.map +1 -1
  41. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/mutation.js +10 -10
  42. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/mutation.js.map +1 -1
  43. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/query.d.ts.map +1 -1
  44. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/query.js +5 -5
  45. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/query.js.map +1 -1
  46. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/resolver.d.ts +0 -8
  47. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/resolver.d.ts.map +1 -1
  48. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/resolver.js +9 -37
  49. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resolvers/rds/resolver.js.map +1 -1
  50. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/rds-model-resource-generator.js +1 -1
  51. package/node_modules/@aws-amplify/graphql-model-transformer/lib/resources/rds-model-resource-generator.js.map +1 -1
  52. package/node_modules/@aws-amplify/graphql-model-transformer/package.json +8 -8
  53. package/node_modules/@aws-amplify/graphql-predictions-transformer/CHANGELOG.md +1 -1
  54. package/node_modules/@aws-amplify/graphql-predictions-transformer/lib/predictionsLambdaFunction.zip +0 -0
  55. package/node_modules/@aws-amplify/graphql-predictions-transformer/package.json +8 -8
  56. package/node_modules/@aws-amplify/graphql-relational-transformer/CHANGELOG.md +4 -1
  57. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-ddb-references-transformer.d.ts.map +1 -1
  58. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-ddb-references-transformer.js +1 -0
  59. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-ddb-references-transformer.js.map +1 -1
  60. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-sql-transformer.d.ts.map +1 -1
  61. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-sql-transformer.js +1 -0
  62. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-sql-transformer.js.map +1 -1
  63. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-transformer-factory.d.ts.map +1 -1
  64. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-transformer-factory.js +2 -1
  65. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/belongs-to/belongs-to-directive-transformer-factory.js.map +1 -1
  66. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-many-transformer.d.ts.map +1 -1
  67. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-many-transformer.js +11 -4
  68. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-many-transformer.js.map +1 -1
  69. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-one-transformer.d.ts.map +1 -1
  70. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-one-transformer.js +8 -1
  71. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/graphql-has-one-transformer.js.map +1 -1
  72. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-ddb-references-transformer.d.ts.map +1 -1
  73. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-ddb-references-transformer.js +2 -1
  74. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-ddb-references-transformer.js.map +1 -1
  75. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-sql-transformer.d.ts.map +1 -1
  76. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-sql-transformer.js +2 -1
  77. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-sql-transformer.js.map +1 -1
  78. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-transformer-factory.d.ts.map +1 -1
  79. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-transformer-factory.js +3 -2
  80. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-many/has-many-directive-transformer-factory.js.map +1 -1
  81. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-ddb-references-transformer.d.ts.map +1 -1
  82. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-ddb-references-transformer.js +2 -1
  83. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-ddb-references-transformer.js.map +1 -1
  84. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-sql-transformer.d.ts.map +1 -1
  85. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-sql-transformer.js +2 -1
  86. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-sql-transformer.js.map +1 -1
  87. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-transformer-factory.d.ts.map +1 -1
  88. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-transformer-factory.js +2 -1
  89. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/has-one/has-one-directive-transformer-factory.js.map +1 -1
  90. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/ddb-references-generator.d.ts.map +1 -1
  91. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/ddb-references-generator.js +4 -4
  92. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/ddb-references-generator.js.map +1 -1
  93. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/rds-generator.d.ts +2 -2
  94. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/rds-generator.d.ts.map +1 -1
  95. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/rds-generator.js +9 -5
  96. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolver/rds-generator.js.map +1 -1
  97. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolvers.d.ts.map +1 -1
  98. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolvers.js +5 -3
  99. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/resolvers.js.map +1 -1
  100. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/types.d.ts +1 -0
  101. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/types.d.ts.map +1 -1
  102. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.d.ts +2 -2
  103. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.d.ts.map +1 -1
  104. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.js +101 -8
  105. package/node_modules/@aws-amplify/graphql-relational-transformer/lib/utils.js.map +1 -1
  106. package/node_modules/@aws-amplify/graphql-relational-transformer/package.json +10 -10
  107. package/node_modules/@aws-amplify/graphql-searchable-transformer/CHANGELOG.md +1 -1
  108. package/node_modules/@aws-amplify/graphql-searchable-transformer/lib/streaming-lambda.zip +0 -0
  109. package/node_modules/@aws-amplify/graphql-searchable-transformer/package.json +9 -9
  110. package/node_modules/@aws-amplify/graphql-sql-transformer/CHANGELOG.md +1 -1
  111. package/node_modules/@aws-amplify/graphql-sql-transformer/package.json +9 -9
  112. package/node_modules/@aws-amplify/graphql-transformer/CHANGELOG.md +1 -1
  113. package/node_modules/@aws-amplify/graphql-transformer/package.json +15 -15
  114. package/node_modules/@aws-amplify/graphql-transformer-core/API.md +20 -1
  115. package/node_modules/@aws-amplify/graphql-transformer-core/CHANGELOG.md +8 -2
  116. package/node_modules/@aws-amplify/graphql-transformer-core/lib/appsync-function.js +2 -2
  117. package/node_modules/@aws-amplify/graphql-transformer-core/lib/appsync-function.js.map +1 -1
  118. package/node_modules/@aws-amplify/graphql-transformer-core/lib/cdk-compat/schema-asset.d.ts.map +1 -1
  119. package/node_modules/@aws-amplify/graphql-transformer-core/lib/cdk-compat/schema-asset.js +1 -2
  120. package/node_modules/@aws-amplify/graphql-transformer-core/lib/cdk-compat/schema-asset.js.map +1 -1
  121. package/node_modules/@aws-amplify/graphql-transformer-core/lib/cdk-compat/template-asset.d.ts +3 -3
  122. package/node_modules/@aws-amplify/graphql-transformer-core/lib/cdk-compat/template-asset.d.ts.map +1 -1
  123. package/node_modules/@aws-amplify/graphql-transformer-core/lib/cdk-compat/template-asset.js +4 -5
  124. package/node_modules/@aws-amplify/graphql-transformer-core/lib/cdk-compat/template-asset.js.map +1 -1
  125. package/node_modules/@aws-amplify/graphql-transformer-core/lib/graphql-api.d.ts +3 -1
  126. package/node_modules/@aws-amplify/graphql-transformer-core/lib/graphql-api.d.ts.map +1 -1
  127. package/node_modules/@aws-amplify/graphql-transformer-core/lib/graphql-api.js +1 -0
  128. package/node_modules/@aws-amplify/graphql-transformer-core/lib/graphql-api.js.map +1 -1
  129. package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.d.ts +1 -1
  130. package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.d.ts.map +1 -1
  131. package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.js +14 -8
  132. package/node_modules/@aws-amplify/graphql-transformer-core/lib/index.js.map +1 -1
  133. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transform-host.js +5 -5
  134. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transform-host.js.map +1 -1
  135. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/transform.d.ts +1 -1
  136. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/transform.d.ts.map +1 -1
  137. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/transform.js +3 -2
  138. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformation/transform.js.map +1 -1
  139. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/index.d.ts +1 -0
  140. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/index.d.ts.map +1 -1
  141. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/index.js +1 -2
  142. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/index.js.map +1 -1
  143. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/index.d.ts +1 -1
  144. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/index.d.ts.map +1 -1
  145. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/index.js +7 -1
  146. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/index.js.map +1 -1
  147. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/rds-util.d.ts +9 -0
  148. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/rds-util.d.ts.map +1 -1
  149. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/rds-util.js +34 -1
  150. package/node_modules/@aws-amplify/graphql-transformer-core/lib/utils/rds-util.js.map +1 -1
  151. package/node_modules/@aws-amplify/graphql-transformer-core/package.json +6 -5
  152. package/node_modules/@aws-amplify/graphql-transformer-interfaces/API.md +9 -6
  153. package/node_modules/@aws-amplify/graphql-transformer-interfaces/CHANGELOG.md +3 -1
  154. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/asset-provider.d.ts +2 -2
  155. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/asset-provider.d.ts.map +1 -1
  156. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/graphql-api-provider.d.ts +4 -2
  157. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/graphql-api-provider.d.ts.map +1 -1
  158. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/graphql-api-provider.js.map +1 -1
  159. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.d.ts +1 -1
  160. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.d.ts.map +1 -1
  161. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.js +2 -1
  162. package/node_modules/@aws-amplify/graphql-transformer-interfaces/lib/model-datasource/types.js.map +1 -1
  163. package/node_modules/@aws-amplify/graphql-transformer-interfaces/package.json +2 -2
  164. package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/asset-provider.ts +2 -2
  165. package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/graphql-api-provider.ts +4 -2
  166. package/node_modules/@aws-amplify/graphql-transformer-interfaces/src/model-datasource/types.ts +5 -2
  167. package/node_modules/@aws-amplify/graphql-transformer-interfaces/tsconfig.tsbuildinfo +1 -1
  168. package/node_modules/graphql-mapping-template/API.md +14 -1
  169. package/node_modules/graphql-mapping-template/CHANGELOG.md +6 -0
  170. package/node_modules/graphql-mapping-template/LICENSE +201 -0
  171. package/node_modules/graphql-mapping-template/lib/ast.d.ts +7 -1
  172. package/node_modules/graphql-mapping-template/lib/ast.d.ts.map +1 -1
  173. package/node_modules/graphql-mapping-template/lib/ast.js +9 -1
  174. package/node_modules/graphql-mapping-template/lib/ast.js.map +1 -1
  175. package/node_modules/graphql-mapping-template/lib/print.d.ts.map +1 -1
  176. package/node_modules/graphql-mapping-template/lib/print.js +5 -0
  177. package/node_modules/graphql-mapping-template/lib/print.js.map +1 -1
  178. package/node_modules/graphql-mapping-template/package.json +5 -4
  179. package/node_modules/graphql-transformer-common/CHANGELOG.md +1 -1
  180. package/node_modules/graphql-transformer-common/package.json +3 -3
  181. package/package.json +20 -20
  182. package/src/amplify-graphql-api.ts +6 -11
  183. package/src/internal/asset-provider.ts +64 -0
  184. package/src/internal/data-source-config.ts +12 -1
  185. package/src/internal/index.ts +1 -1
  186. package/src/model-datasource-strategy-types.ts +7 -2
  187. package/src/sql-model-datasource-strategy.ts +4 -1
  188. package/lib/internal/asset-manager.d.ts +0 -12
  189. package/lib/internal/asset-manager.js +0 -44
  190. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/asset-manager.d.ts +0 -10
  191. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/asset-manager.d.ts.map +0 -1
  192. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/asset-manager.js +0 -20
  193. package/node_modules/@aws-amplify/graphql-transformer-core/lib/transformer-context/asset-manager.js.map +0 -1
  194. package/src/internal/asset-manager.ts +0 -43
package/API.md CHANGED
@@ -383,7 +383,7 @@ export interface SqlModelDataSourceSsmDbConnectionConfig {
383
383
 
384
384
  // @public
385
385
  export interface SqlModelDataSourceSsmDbConnectionStringConfig {
386
- readonly connectionUriSsmPath: string;
386
+ readonly connectionUriSsmPath: string | string[];
387
387
  }
388
388
 
389
389
  // @public
package/CHANGELOG.md CHANGED
@@ -3,12 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- # [1.9.0-gen2-release-0418-2.0](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-api-construct@1.8.1...@aws-amplify/graphql-api-construct@1.9.0-gen2-release-0418-2.0) (2024-04-18)
6
+ # [1.9.0](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-api-construct@1.8.1...@aws-amplify/graphql-api-construct@1.9.0) (2024-04-26)
7
7
 
8
8
  ### Features
9
9
 
10
+ - allow multiple graphql APIs in a cdk app ([#2406](https://github.com/aws-amplify/amplify-category-api/issues/2406)) ([72ca6ba](https://github.com/aws-amplify/amplify-category-api/commit/72ca6ba7243d1f267d38be76e43d623d16608c14))
10
11
  - **api:** enable cors on codegen asset bucket ([#2366](https://github.com/aws-amplify/amplify-category-api/issues/2366)) ([b69a492](https://github.com/aws-amplify/amplify-category-api/commit/b69a4924002ecb17780b9c3a0f33f44f59d9b642))
11
12
  - generic iam authorization ([#2385](https://github.com/aws-amplify/amplify-category-api/issues/2385)) ([550ee80](https://github.com/aws-amplify/amplify-category-api/commit/550ee803275817d25447ff1400d55eb1ad4cd0c2))
13
+ - support multiple connection Uris for SQL databases ([#2481](https://github.com/aws-amplify/amplify-category-api/issues/2481)) ([7ea8000](https://github.com/aws-amplify/amplify-category-api/commit/7ea8000026d3f8fe9c791720701250fa958c9bc8))
12
14
 
13
15
  ## [1.8.1](https://github.com/aws-amplify/amplify-category-api/compare/@aws-amplify/graphql-api-construct@1.8.0...@aws-amplify/graphql-api-construct@1.8.1) (2024-04-16)
14
16
 
package/README.md CHANGED
@@ -6,8 +6,6 @@ This package vends an L3 CDK Construct wrapping the behavior of the Amplify Grap
6
6
 
7
7
  The primary way to use this construct is to invoke it with a provided schema (either as an inline graphql string, or as one or more `appsync.SchemaFile`) objects, and with authorization config provided. There are 5 supported methods for authorization of an AppSync API, all of which are supported by this construct. For more information on authorization rule definitions in Amplify, refer to the [authorization docs](https://docs.amplify.aws/cli/graphql/authorization-rules/). Note: currently at least one authorization rule is required, and if multiple are specified, a `defaultAuthorizationMode` must be specified on the api as well. Specified authorization modes must be a superset of those configured in the graphql schema.
8
8
 
9
- Note: only a single instance of the `AmplifyGraphqlApi` construct can be invoked within a CDK synthesis at this point in time.
10
-
11
9
  ## Examples
12
10
 
13
11
  ### Simple Todo List With Cognito Userpool-based Owner Authorization
@@ -872,6 +870,7 @@ const amplifyGraphqlApiCfnResources: AmplifyGraphqlApiCfnResources = { ... }
872
870
  | **Name** | **Type** | **Description** |
873
871
  | --- | --- | --- |
874
872
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiCfnResources.property.additionalCfnResources">additionalCfnResources</a></code> | <code>{[ key: string ]: aws-cdk-lib.CfnResource}</code> | Remaining L1 resources generated, keyed by logicalId. |
873
+ | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiCfnResources.property.amplifyDynamoDbTables">amplifyDynamoDbTables</a></code> | <code>{[ key: string ]: <a href="#@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper">AmplifyDynamoDbTableWrapper</a>}</code> | The Generated Amplify DynamoDb Table L1 resource wrapper, keyed by model type name. |
875
874
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiCfnResources.property.cfnDataSources">cfnDataSources</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_appsync.CfnDataSource}</code> | The Generated AppSync DataSource L1 Resources, keyed by logicalId. |
876
875
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiCfnResources.property.cfnFunctionConfigurations">cfnFunctionConfigurations</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_appsync.CfnFunctionConfiguration}</code> | The Generated AppSync Function L1 Resources, keyed by logicalId. |
877
876
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiCfnResources.property.cfnFunctions">cfnFunctions</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_lambda.CfnFunction}</code> | The Generated Lambda Function L1 Resources, keyed by function name. |
@@ -896,6 +895,18 @@ Remaining L1 resources generated, keyed by logicalId.
896
895
 
897
896
  ---
898
897
 
898
+ ##### `amplifyDynamoDbTables`<sup>Required</sup> <a name="amplifyDynamoDbTables" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiCfnResources.property.amplifyDynamoDbTables"></a>
899
+
900
+ ```typescript
901
+ public readonly amplifyDynamoDbTables: {[ key: string ]: AmplifyDynamoDbTableWrapper};
902
+ ```
903
+
904
+ - *Type:* {[ key: string ]: <a href="#@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper">AmplifyDynamoDbTableWrapper</a>}
905
+
906
+ The Generated Amplify DynamoDb Table L1 resource wrapper, keyed by model type name.
907
+
908
+ ---
909
+
899
910
  ##### `cfnDataSources`<sup>Required</sup> <a name="cfnDataSources" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiCfnResources.property.cfnDataSources"></a>
900
911
 
901
912
  ```typescript
@@ -1027,6 +1038,8 @@ const amplifyGraphqlApiProps: AmplifyGraphqlApiProps = { ... }
1027
1038
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.definition">definition</a></code> | <code><a href="#@aws-amplify/graphql-api-construct.IAmplifyGraphqlDefinition">IAmplifyGraphqlDefinition</a></code> | The definition to transform in a full Api. |
1028
1039
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.apiName">apiName</a></code> | <code>string</code> | Name to be used for the AppSync Api. |
1029
1040
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.conflictResolution">conflictResolution</a></code> | <code><a href="#@aws-amplify/graphql-api-construct.ConflictResolution">ConflictResolution</a></code> | Configure conflict resolution on the Api, which is required to enable DataStore Api functionality. |
1041
+ | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.dataStoreConfiguration">dataStoreConfiguration</a></code> | <code><a href="#@aws-amplify/graphql-api-construct.DataStoreConfiguration">DataStoreConfiguration</a></code> | Configure DataStore conflict resolution on the Api. |
1042
+ | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.disableOutputStorage">disableOutputStorage</a></code> | <code>boolean</code> | Disables storing construct output. |
1030
1043
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.functionNameMap">functionNameMap</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_lambda.IFunction}</code> | Lambda functions referenced in the definitions's. |
1031
1044
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.functionSlots">functionSlots</a></code> | <code><a href="#@aws-amplify/graphql-api-construct.MutationFunctionSlot">MutationFunctionSlot</a> \| <a href="#@aws-amplify/graphql-api-construct.QueryFunctionSlot">QueryFunctionSlot</a> \| <a href="#@aws-amplify/graphql-api-construct.SubscriptionFunctionSlot">SubscriptionFunctionSlot</a>[]</code> | Overrides for a given slot in the generated resolver pipelines. |
1032
1045
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.outputStorageStrategy">outputStorageStrategy</a></code> | <code><a href="#@aws-amplify/graphql-api-construct.IBackendOutputStorageStrategy">IBackendOutputStorageStrategy</a></code> | Strategy to store construct outputs. |
@@ -1080,7 +1093,9 @@ Default: construct id.
1080
1093
 
1081
1094
  ---
1082
1095
 
1083
- ##### `conflictResolution`<sup>Optional</sup> <a name="conflictResolution" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.conflictResolution"></a>
1096
+ ##### ~~`conflictResolution`~~<sup>Optional</sup> <a name="conflictResolution" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.conflictResolution"></a>
1097
+
1098
+ - *Deprecated:* use dataStoreConfiguration instead.
1084
1099
 
1085
1100
  ```typescript
1086
1101
  public readonly conflictResolution: ConflictResolution;
@@ -1094,6 +1109,36 @@ For more information, refer to https://docs.amplify.aws/lib/datastore/getting-st
1094
1109
 
1095
1110
  ---
1096
1111
 
1112
+ ##### `dataStoreConfiguration`<sup>Optional</sup> <a name="dataStoreConfiguration" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.dataStoreConfiguration"></a>
1113
+
1114
+ ```typescript
1115
+ public readonly dataStoreConfiguration: DataStoreConfiguration;
1116
+ ```
1117
+
1118
+ - *Type:* <a href="#@aws-amplify/graphql-api-construct.DataStoreConfiguration">DataStoreConfiguration</a>
1119
+
1120
+ Configure DataStore conflict resolution on the Api.
1121
+
1122
+ Conflict resolution is required to enable DataStore Api functionality.
1123
+ For more information, refer to https://docs.amplify.aws/lib/datastore/getting-started/q/platform/js/
1124
+
1125
+ ---
1126
+
1127
+ ##### `disableOutputStorage`<sup>Optional</sup> <a name="disableOutputStorage" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.disableOutputStorage"></a>
1128
+
1129
+ ```typescript
1130
+ public readonly disableOutputStorage: boolean;
1131
+ ```
1132
+
1133
+ - *Type:* boolean
1134
+
1135
+ Disables storing construct output.
1136
+
1137
+ Output storage should be disabled when creating multiple GraphQL APIs in a single CDK synthesis.
1138
+ outputStorageStrategy will be ignored if this is set to true.
1139
+
1140
+ ---
1141
+
1097
1142
  ##### `functionNameMap`<sup>Optional</sup> <a name="functionNameMap" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiProps.property.functionNameMap"></a>
1098
1143
 
1099
1144
  ```typescript
@@ -1209,7 +1254,6 @@ const amplifyGraphqlApiResources: AmplifyGraphqlApiResources = { ... }
1209
1254
 
1210
1255
  | **Name** | **Type** | **Description** |
1211
1256
  | --- | --- | --- |
1212
- | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiResources.property.amplifyDynamoDbTables">amplifyDynamoDbTables</a></code> | <code>{[ key: string ]: <a href="#@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper">AmplifyDynamoDbTableWrapper</a>}</code> | The Generated Amplify DynamoDb Table wrapped if produced, keyed by name. |
1213
1257
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiResources.property.cfnResources">cfnResources</a></code> | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiCfnResources">AmplifyGraphqlApiCfnResources</a></code> | L1 Cfn Resources, for when dipping down a level of abstraction is desirable. |
1214
1258
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiResources.property.functions">functions</a></code> | <code>{[ key: string ]: aws-cdk-lib.aws_lambda.IFunction}</code> | The Generated Lambda Function L1 Resources, keyed by function name. |
1215
1259
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyGraphqlApiResources.property.graphqlApi">graphqlApi</a></code> | <code>aws-cdk-lib.aws_appsync.IGraphqlApi</code> | The Generated AppSync Api L2 Resource, includes the Schema. |
@@ -1219,18 +1263,6 @@ const amplifyGraphqlApiResources: AmplifyGraphqlApiResources = { ... }
1219
1263
 
1220
1264
  ---
1221
1265
 
1222
- ##### `amplifyDynamoDbTables`<sup>Required</sup> <a name="amplifyDynamoDbTables" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiResources.property.amplifyDynamoDbTables"></a>
1223
-
1224
- ```typescript
1225
- public readonly amplifyDynamoDbTables: {[ key: string ]: AmplifyDynamoDbTableWrapper};
1226
- ```
1227
-
1228
- - *Type:* {[ key: string ]: <a href="#@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper">AmplifyDynamoDbTableWrapper</a>}
1229
-
1230
- The Generated Amplify DynamoDb Table wrapped if produced, keyed by name.
1231
-
1232
- ---
1233
-
1234
1266
  ##### `cfnResources`<sup>Required</sup> <a name="cfnResources" id="@aws-amplify/graphql-api-construct.AmplifyGraphqlApiResources.property.cfnResources"></a>
1235
1267
 
1236
1268
  ```typescript
@@ -1541,7 +1573,9 @@ const conflictResolution: ConflictResolution = { ... }
1541
1573
 
1542
1574
  ---
1543
1575
 
1544
- ##### `models`<sup>Optional</sup> <a name="models" id="@aws-amplify/graphql-api-construct.ConflictResolution.property.models"></a>
1576
+ ##### ~~`models`~~<sup>Optional</sup> <a name="models" id="@aws-amplify/graphql-api-construct.ConflictResolution.property.models"></a>
1577
+
1578
+ - *Deprecated:* use DataStoreConfiguration instead.
1545
1579
 
1546
1580
  ```typescript
1547
1581
  public readonly models: {[ key: string ]: AutomergeConflictResolutionStrategy | OptimisticConflictResolutionStrategy | CustomConflictResolutionStrategy};
@@ -1553,7 +1587,9 @@ Model-specific conflict resolution overrides.
1553
1587
 
1554
1588
  ---
1555
1589
 
1556
- ##### `project`<sup>Optional</sup> <a name="project" id="@aws-amplify/graphql-api-construct.ConflictResolution.property.project"></a>
1590
+ ##### ~~`project`~~<sup>Optional</sup> <a name="project" id="@aws-amplify/graphql-api-construct.ConflictResolution.property.project"></a>
1591
+
1592
+ - *Deprecated:* use DataStoreConfiguration instead.
1557
1593
 
1558
1594
  ```typescript
1559
1595
  public readonly project: AutomergeConflictResolutionStrategy | OptimisticConflictResolutionStrategy | CustomConflictResolutionStrategy;
@@ -1721,6 +1757,53 @@ The built-in type (either "Query" or "Mutation") with which the custom SQL is as
1721
1757
 
1722
1758
  ---
1723
1759
 
1760
+ ### DataStoreConfiguration <a name="DataStoreConfiguration" id="@aws-amplify/graphql-api-construct.DataStoreConfiguration"></a>
1761
+
1762
+ Project level configuration for DataStore.
1763
+
1764
+ #### Initializer <a name="Initializer" id="@aws-amplify/graphql-api-construct.DataStoreConfiguration.Initializer"></a>
1765
+
1766
+ ```typescript
1767
+ import { DataStoreConfiguration } from '@aws-amplify/graphql-api-construct'
1768
+
1769
+ const dataStoreConfiguration: DataStoreConfiguration = { ... }
1770
+ ```
1771
+
1772
+ #### Properties <a name="Properties" id="Properties"></a>
1773
+
1774
+ | **Name** | **Type** | **Description** |
1775
+ | --- | --- | --- |
1776
+ | <code><a href="#@aws-amplify/graphql-api-construct.DataStoreConfiguration.property.models">models</a></code> | <code>{[ key: string ]: <a href="#@aws-amplify/graphql-api-construct.AutomergeConflictResolutionStrategy">AutomergeConflictResolutionStrategy</a> \| <a href="#@aws-amplify/graphql-api-construct.OptimisticConflictResolutionStrategy">OptimisticConflictResolutionStrategy</a> \| <a href="#@aws-amplify/graphql-api-construct.CustomConflictResolutionStrategy">CustomConflictResolutionStrategy</a>}</code> | Model-specific conflict resolution overrides. |
1777
+ | <code><a href="#@aws-amplify/graphql-api-construct.DataStoreConfiguration.property.project">project</a></code> | <code><a href="#@aws-amplify/graphql-api-construct.AutomergeConflictResolutionStrategy">AutomergeConflictResolutionStrategy</a> \| <a href="#@aws-amplify/graphql-api-construct.OptimisticConflictResolutionStrategy">OptimisticConflictResolutionStrategy</a> \| <a href="#@aws-amplify/graphql-api-construct.CustomConflictResolutionStrategy">CustomConflictResolutionStrategy</a></code> | Project-wide config for conflict resolution. |
1778
+
1779
+ ---
1780
+
1781
+ ##### `models`<sup>Optional</sup> <a name="models" id="@aws-amplify/graphql-api-construct.DataStoreConfiguration.property.models"></a>
1782
+
1783
+ ```typescript
1784
+ public readonly models: {[ key: string ]: AutomergeConflictResolutionStrategy | OptimisticConflictResolutionStrategy | CustomConflictResolutionStrategy};
1785
+ ```
1786
+
1787
+ - *Type:* {[ key: string ]: <a href="#@aws-amplify/graphql-api-construct.AutomergeConflictResolutionStrategy">AutomergeConflictResolutionStrategy</a> | <a href="#@aws-amplify/graphql-api-construct.OptimisticConflictResolutionStrategy">OptimisticConflictResolutionStrategy</a> | <a href="#@aws-amplify/graphql-api-construct.CustomConflictResolutionStrategy">CustomConflictResolutionStrategy</a>}
1788
+
1789
+ Model-specific conflict resolution overrides.
1790
+
1791
+ ---
1792
+
1793
+ ##### `project`<sup>Optional</sup> <a name="project" id="@aws-amplify/graphql-api-construct.DataStoreConfiguration.property.project"></a>
1794
+
1795
+ ```typescript
1796
+ public readonly project: AutomergeConflictResolutionStrategy | OptimisticConflictResolutionStrategy | CustomConflictResolutionStrategy;
1797
+ ```
1798
+
1799
+ - *Type:* <a href="#@aws-amplify/graphql-api-construct.AutomergeConflictResolutionStrategy">AutomergeConflictResolutionStrategy</a> | <a href="#@aws-amplify/graphql-api-construct.OptimisticConflictResolutionStrategy">OptimisticConflictResolutionStrategy</a> | <a href="#@aws-amplify/graphql-api-construct.CustomConflictResolutionStrategy">CustomConflictResolutionStrategy</a>
1800
+
1801
+ Project-wide config for conflict resolution.
1802
+
1803
+ Applies to all non-overridden models.
1804
+
1805
+ ---
1806
+
1724
1807
  ### DefaultDynamoDbModelDataSourceStrategy <a name="DefaultDynamoDbModelDataSourceStrategy" id="@aws-amplify/graphql-api-construct.DefaultDynamoDbModelDataSourceStrategy"></a>
1725
1808
 
1726
1809
  Use default CloudFormation type 'AWS::DynamoDB::Table' to provision table.
@@ -2712,6 +2795,10 @@ The configuration of the VPC into which to install the Lambda.
2712
2795
 
2713
2796
  ### SqlModelDataSourceSecretsManagerDbConnectionConfig <a name="SqlModelDataSourceSecretsManagerDbConnectionConfig" id="@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig"></a>
2714
2797
 
2798
+ The credentials stored in Secrets Manager that the lambda data source will use to connect to the database.
2799
+
2800
+ The managed secret should be in the same region as the lambda.
2801
+
2715
2802
  #### Initializer <a name="Initializer" id="@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.Initializer"></a>
2716
2803
 
2717
2804
  ```typescript
@@ -2724,9 +2811,11 @@ const sqlModelDataSourceSecretsManagerDbConnectionConfig: SqlModelDataSourceSecr
2724
2811
 
2725
2812
  | **Name** | **Type** | **Description** |
2726
2813
  | --- | --- | --- |
2727
- | <code><a href="#@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.databaseName">databaseName</a></code> | <code>string</code> | database name. |
2728
- | <code><a href="#@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.port">port</a></code> | <code>number</code> | port number of the database proxy, cluster, or instance. |
2729
- | <code><a href="#@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.secretArn">secretArn</a></code> | <code>string</code> | The arn of the managed secret with username, password, and hostname to use when connecting to the database. |
2814
+ | <code><a href="#@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.databaseName">databaseName</a></code> | <code>string</code> | The database name. |
2815
+ | <code><a href="#@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.hostname">hostname</a></code> | <code>string</code> | The hostame of the database. |
2816
+ | <code><a href="#@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.port">port</a></code> | <code>number</code> | The port number of the database proxy, cluster, or instance. |
2817
+ | <code><a href="#@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.secretArn">secretArn</a></code> | <code>string</code> | The ARN of the managed secret with username, password, and hostname to use when connecting to the database. |
2818
+ | <code><a href="#@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.keyArn">keyArn</a></code> | <code>string</code> | The ARN of the customer managed encryption key for the secret. |
2730
2819
 
2731
2820
  ---
2732
2821
 
@@ -2738,7 +2827,19 @@ public readonly databaseName: string;
2738
2827
 
2739
2828
  - *Type:* string
2740
2829
 
2741
- database name.
2830
+ The database name.
2831
+
2832
+ ---
2833
+
2834
+ ##### `hostname`<sup>Required</sup> <a name="hostname" id="@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.hostname"></a>
2835
+
2836
+ ```typescript
2837
+ public readonly hostname: string;
2838
+ ```
2839
+
2840
+ - *Type:* string
2841
+
2842
+ The hostame of the database.
2742
2843
 
2743
2844
  ---
2744
2845
 
@@ -2750,7 +2851,7 @@ public readonly port: number;
2750
2851
 
2751
2852
  - *Type:* number
2752
2853
 
2753
- port number of the database proxy, cluster, or instance.
2854
+ The port number of the database proxy, cluster, or instance.
2754
2855
 
2755
2856
  ---
2756
2857
 
@@ -2762,12 +2863,26 @@ public readonly secretArn: string;
2762
2863
 
2763
2864
  - *Type:* string
2764
2865
 
2765
- The arn of the managed secret with username, password, and hostname to use when connecting to the database.
2866
+ The ARN of the managed secret with username, password, and hostname to use when connecting to the database.
2766
2867
 
2767
2868
  *
2768
2869
 
2769
2870
  ---
2770
2871
 
2872
+ ##### `keyArn`<sup>Optional</sup> <a name="keyArn" id="@aws-amplify/graphql-api-construct.SqlModelDataSourceSecretsManagerDbConnectionConfig.property.keyArn"></a>
2873
+
2874
+ ```typescript
2875
+ public readonly keyArn: string;
2876
+ ```
2877
+
2878
+ - *Type:* string
2879
+
2880
+ The ARN of the customer managed encryption key for the secret.
2881
+
2882
+ If not supplied, the secret is expected to be encrypted with the default AWS-managed key. *
2883
+
2884
+ ---
2885
+
2771
2886
  ### SqlModelDataSourceSsmDbConnectionConfig <a name="SqlModelDataSourceSsmDbConnectionConfig" id="@aws-amplify/graphql-api-construct.SqlModelDataSourceSsmDbConnectionConfig"></a>
2772
2887
 
2773
2888
  The Secure Systems Manager parameter paths the Lambda data source will use to connect to the database.
@@ -3495,10 +3610,27 @@ the Cfn resource.
3495
3610
 
3496
3611
  | **Name** | **Description** |
3497
3612
  | --- | --- |
3613
+ | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper.applyRemovalPolicy">applyRemovalPolicy</a></code> | Set the deletion policy of the resource based on the removal policy specified. |
3498
3614
  | <code><a href="#@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper.setGlobalSecondaryIndexProvisionedThroughput">setGlobalSecondaryIndexProvisionedThroughput</a></code> | Set the provisionedThroughtput for a specified GSI by name. |
3499
3615
 
3500
3616
  ---
3501
3617
 
3618
+ ##### `applyRemovalPolicy` <a name="applyRemovalPolicy" id="@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper.applyRemovalPolicy"></a>
3619
+
3620
+ ```typescript
3621
+ public applyRemovalPolicy(policy: RemovalPolicy): void
3622
+ ```
3623
+
3624
+ Set the deletion policy of the resource based on the removal policy specified.
3625
+
3626
+ ###### `policy`<sup>Required</sup> <a name="policy" id="@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper.applyRemovalPolicy.parameter.policy"></a>
3627
+
3628
+ - *Type:* aws-cdk-lib.RemovalPolicy
3629
+
3630
+ removal policy to set.
3631
+
3632
+ ---
3633
+
3502
3634
  ##### `setGlobalSecondaryIndexProvisionedThroughput` <a name="setGlobalSecondaryIndexProvisionedThroughput" id="@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper.setGlobalSecondaryIndexProvisionedThroughput"></a>
3503
3635
 
3504
3636
  ```typescript
@@ -105,5 +105,5 @@ class AmplifyDynamoDbTableWrapper {
105
105
  }
106
106
  exports.AmplifyDynamoDbTableWrapper = AmplifyDynamoDbTableWrapper;
107
107
  _a = JSII_RTTI_SYMBOL_1;
108
- AmplifyDynamoDbTableWrapper[_a] = { fqn: "@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper", version: "1.9.0-gen2-release-0418-2.0" };
108
+ AmplifyDynamoDbTableWrapper[_a] = { fqn: "@aws-amplify/graphql-api-construct.AmplifyDynamoDbTableWrapper", version: "1.9.0" };
109
109
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGlmeS1keW5hbW9kYi10YWJsZS13cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FtcGxpZnktZHluYW1vZGItdGFibGUtd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUF5RDtBQUd6RCxNQUFNLG9DQUFvQyxHQUFHLDhCQUE4QixDQUFDO0FBZ0M1RTs7O0dBR0c7QUFDSCxJQUFZLE9BRVg7QUFGRCxXQUFZLE9BQU87SUFDakIsc0JBQVcsQ0FBQTtBQUNiLENBQUMsRUFGVyxPQUFPLHVCQUFQLE9BQU8sUUFFbEI7QUEyQ0Q7Ozs7Ozs7R0FPRztBQUNILE1BQWEsMkJBQTJCO0lBQ3RDOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBTTtRQUMxQyxPQUFPLENBQUMsWUFBWSx5QkFBVyxJQUFJLENBQUMsQ0FBQyxlQUFlLEtBQUssb0NBQW9DLENBQUM7SUFDaEcsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQTZCLFFBQXFCO1FBQXJCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDaEQsSUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLG9DQUFvQyxFQUFFO1lBQ3JFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLG9DQUFvQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQzNIO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLE1BQXFCO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxXQUFXLENBQUMsV0FBd0I7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxtQkFBbUIsQ0FBQyx1QkFBZ0Q7UUFDdEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksMEJBQTBCLENBQUMsMEJBQW1DO1FBQ2hFLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsa0NBQWtDLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxxQkFBcUIsQ0FBQyxxQkFBNEM7UUFDcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyx1QkFBdUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsNENBQTRDLENBQUMsU0FBaUIsRUFBRSxxQkFBNEM7UUFDMUcsTUFBTSxJQUFJLEdBQTJDLE1BQU0sQ0FBQyxPQUFPLENBQ2hFLElBQUksQ0FBQyxRQUFnQixDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsc0JBQXNCLElBQUksRUFBRSxDQUM5RSxDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ILElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsU0FBUyxnQ0FBZ0MsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsU0FBUyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksbUJBQW1CLENBQUMsbUJBQXdDO1FBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGdCQUFnQixDQUFDLGdCQUFrQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSx5QkFBeUIsQ0FBQyx5QkFBa0M7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQywyQkFBMkIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVGLENBQUM7O0FBM0ZILGtFQTRGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmblJlc291cmNlLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQmlsbGluZ01vZGUsIFN0cmVhbVZpZXdUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiJztcblxuY29uc3QgQU1QTElGWV9EWU5BTU9EQl9UQUJMRV9SRVNPVVJDRV9UWVBFID0gJ0N1c3RvbTo6QW1wbGlmeUR5bmFtb0RCVGFibGUnO1xuXG4vKipcbiAqIFNoYXBlIGZvciBUVEwgY29uZmlnLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVUb0xpdmVTcGVjaWZpY2F0aW9uIHtcbiAgLyoqXG4gICAqIEJvb2xlYW4gZGV0ZXJtaW5pbmcgaWYgdGhlIHR0bCBpcyBlbmFibGVkIG9yIG5vdC5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0ZSBuYW1lIHRvIGFwcGx5IHRvIHRoZSB0dGwgc3BlYy5cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogV3JhcHBlciBmb3IgcHJvdmlzaW9uZWQgdGhyb3VnaHB1dCBjb25maWcgaW4gRERCLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCB7XG4gIC8qKlxuICAgKiBUaGUgcmVhZCBjYXBhY2l0eSB1bml0cyBvbiB0aGUgdGFibGUgb3IgaW5kZXguXG4gICAqL1xuICByZWFkb25seSByZWFkQ2FwYWNpdHlVbml0czogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgd3JpdGUgY2FwYWNpdHkgdW5pdHMgb24gdGhlIHRhYmxlIG9yIGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVDYXBhY2l0eVVuaXRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogU2VydmVyIFNpZGUgRW5jcnlwdGlvbiBUeXBlIFZhbHVlc1xuICogLSBgS01TYCAtIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gdGhhdCB1c2VzIEFXUyBLTVMuIFRoZSBrZXkgaXMgc3RvcmVkIGluIHlvdXIgYWNjb3VudCBhbmQgaXMgbWFuYWdlZCBieSBLTVMgKEFXUyBLTVMgY2hhcmdlcyBhcHBseSkuXG4gKi9cbmV4cG9ydCBlbnVtIFNTRVR5cGUge1xuICBLTVMgPSAnS01TJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzZXR0aW5ncyB1c2VkIHRvIGVuYWJsZSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNTRVNwZWNpZmljYXRpb24ge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBpcyBkb25lIHVzaW5nIGFuIEFXUyBtYW5hZ2VkIGtleSBvciBhbiBBV1Mgb3duZWQga2V5LlxuICAgKiBJZiBlbmFibGVkICh0cnVlKSwgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0eXBlIGlzIHNldCB0byBgS01TYCBhbmQgYW4gQVdTIG1hbmFnZWQga2V5IGlzIHVzZWQgKCBBV1MgS01TIGNoYXJnZXMgYXBwbHkpLlxuICAgKiBJZiBkaXNhYmxlZCAoZmFsc2UpIG9yIG5vdCBzcGVjaWZpZWQsIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gaXMgc2V0IHRvIEFXUyBvd25lZCBrZXkuXG4gICAqL1xuICByZWFkb25seSBzc2VFbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIEtNUyBrZXkgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIEFXUyBLTVMgZW5jcnlwdGlvbi5cbiAgICogVG8gc3BlY2lmeSBhIGtleSwgdXNlIGl0cyBrZXkgSUQsIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pLCBhbGlhcyBuYW1lLCBvciBhbGlhcyBBUk4uIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgKiB0aGlzIHBhcmFtZXRlciBpZiB0aGUga2V5IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IER5bmFtb0RCIGtleSBgYWxpYXMvYXdzL2R5bmFtb2RiYCAuXG4gICAqL1xuICByZWFkb25seSBrbXNNYXN0ZXJLZXlJZD86IHN0cmluZztcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0eXBlLiBUaGUgb25seSBzdXBwb3J0ZWQgdmFsdWUgaXM6XG4gICAqIGBLTVNgIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gdGhhdCB1c2VzIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlLlxuICAgKiAgIFRoZSBrZXkgaXMgc3RvcmVkIGluIHlvdXIgYWNjb3VudCBhbmQgaXMgbWFuYWdlZCBieSBBV1MgS01TICggQVdTIEtNUyBjaGFyZ2VzIGFwcGx5KS5cbiAgICovXG4gIHJlYWRvbmx5IHNzZVR5cGU/OiBTU0VUeXBlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIER5bmFtb0RCIFN0cmVhbXMgY29uZmlndXJhdGlvbiBmb3IgYSB0YWJsZSBpbiBEeW5hbW9EQi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1TcGVjaWZpY2F0aW9uIHtcbiAgLyoqXG4gICAqIFdoZW4gYW4gaXRlbSBpbiB0aGUgdGFibGUgaXMgbW9kaWZpZWQsIGBTdHJlYW1WaWV3VHlwZWAgZGV0ZXJtaW5lcyB3aGF0IGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSBmb3IgdGhpcyB0YWJsZS5cbiAgICogVmFsaWQgdmFsdWVzIGZvciBgU3RyZWFtVmlld1R5cGVgIGFyZTpcbiAgICogLSBgS0VZU19PTkxZYCAtIE9ubHkgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RpZmllZCBpdGVtIGFyZSB3cml0dGVuIHRvIHRoZSBzdHJlYW0uXG4gICAqIC0gYE5FV19JTUFHRWAgLSBUaGUgZW50aXJlIGl0ZW0sIGFzIGl0IGFwcGVhcnMgYWZ0ZXIgaXQgd2FzIG1vZGlmaWVkLCBpcyB3cml0dGVuIHRvIHRoZSBzdHJlYW0uXG4gICAqIC0gYE9MRF9JTUFHRWAgLSBUaGUgZW50aXJlIGl0ZW0sIGFzIGl0IGFwcGVhcmVkIGJlZm9yZSBpdCB3YXMgbW9kaWZpZWQsIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbS5cbiAgICogLSBgTkVXX0FORF9PTERfSU1BR0VTYCAtIEJvdGggdGhlIG5ldyBhbmQgdGhlIG9sZCBpdGVtIGltYWdlcyBvZiB0aGUgaXRlbSBhcmUgd3JpdHRlbiB0byB0aGUgc3RyZWFtLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyZWFtVmlld1R5cGU6IFN0cmVhbVZpZXdUeXBlO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgY2xhc3MgYXJvdW5kIEN1c3RvbTo6QW1wbGlmeUR5bmFtb0RCVGFibGUgY3VzdG9tIHJlc291cmNlLCB0byBzaW1wbGlmeVxuICogdGhlIG92ZXJyaWRlIGV4cGVyaWVuY2UgYSBiaXQuIFRoaXMgaXMgTk9UIGEgY29uc3RydWN0LCBqdXN0IGFuIGVhc2llciB3YXkgdG8gYWNjZXNzXG4gKiB0aGUgZ2VuZXJhdGVkIGNvbnN0cnVjdC5cbiAqIFRoaXMgaXMgYSB3cmFwcGVyIGludGVuZGVkIHRvIG1pbWljIHRoZSBgYXdzX2Nka19saWIuYXdzX2R5bmFtb2RiLlRhYmxlYCBmdW5jdGlvbmFsaXR5IG1vcmUtb3ItbGVzcy5cbiAqIE5vdGFibGUgZGlmZmVyZW5jZXMgaXMgdGhlIGFkZGl0aW9uIG9mIFRLVEsgcHJvcGVydGllcywgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCB0aGV5J3JlIGNvbnN0cnVjdG9yIHByb3BzXG4gKiBpbiB0aGUgQ0RLIGNvbnN0cnVjdCwgYXMgd2VsbCBhcyB0aGUgcmVtb3ZhbCBvZiBhbGwgZnJvbSosIGdyYW50KiwgYW5kIG1ldHJpYyogbWV0aG9kcyBpbXBsZW1lbnRlZCBieSBUYWJsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFtcGxpZnlEeW5hbW9EYlRhYmxlV3JhcHBlciB7XG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBhbmQgcGVyZm9ybSB0eXBlIG5hcnJvd2luZyBpZiBhIGdpdmVuIGlucHV0IGFwcGVhcnMgdG8gYmUgY2FwYWJsZSBvZlxuICAgKiBAcGFyYW0geCB0aGUgb2JqZWN0IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcmVzb3VyY2UgaXMgYW4gdW5kZXJseWluZyBhbXBsaWZ5IGR5bmFtb2RiIHRhYmxlIHJlc291cmNlLlxuICAgKi9cbiAgc3RhdGljIGlzQW1wbGlmeUR5bmFtb0RiVGFibGVSZXNvdXJjZSh4OiBhbnkpOiB4IGlzIENmblJlc291cmNlIHtcbiAgICByZXR1cm4geCBpbnN0YW5jZW9mIENmblJlc291cmNlICYmIHguY2ZuUmVzb3VyY2VUeXBlID09PSBBTVBMSUZZX0RZTkFNT0RCX1RBQkxFX1JFU09VUkNFX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSB3cmFwcGVyIGdpdmVuIGFuIHVuZGVybHlpbmcgQ2ZuUmVzb3VyY2UgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZiBDdXN0b206OkFtcGxpZnlEeW5hbW9EQlRhYmxlLlxuICAgKiBAcGFyYW0gcmVzb3VyY2UgdGhlIENmbiByZXNvdXJjZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IENmblJlc291cmNlKSB7XG4gICAgaWYgKHJlc291cmNlLmNmblJlc291cmNlVHlwZSAhPT0gQU1QTElGWV9EWU5BTU9EQl9UQUJMRV9SRVNPVVJDRV9UWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgQ2ZuUmVzb3VyY2Ugd2l0aCB0eXBlICR7QU1QTElGWV9EWU5BTU9EQl9UQUJMRV9SRVNPVVJDRV9UWVBFfSBjYW4gYmUgdXNlZCBpbiBBbXBsaWZ5RHluYW1vRGJUYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlbGV0aW9uIHBvbGljeSBvZiB0aGUgcmVzb3VyY2UgYmFzZWQgb24gdGhlIHJlbW92YWwgcG9saWN5IHNwZWNpZmllZC5cbiAgICogQHBhcmFtIHBvbGljeSByZW1vdmFsIHBvbGljeSB0byBzZXRcbiAgICovXG4gIGFwcGx5UmVtb3ZhbFBvbGljeShwb2xpY3k6IFJlbW92YWxQb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnJlc291cmNlLmFwcGx5UmVtb3ZhbFBvbGljeShwb2xpY3kpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgaG93IHlvdSBhcmUgY2hhcmdlZCBmb3IgcmVhZCBhbmQgd3JpdGUgdGhyb3VnaHB1dCBhbmQgaG93IHlvdSBtYW5hZ2UgY2FwYWNpdHkuXG4gICAqL1xuICBzZXQgYmlsbGluZ01vZGUoYmlsbGluZ01vZGU6IEJpbGxpbmdNb2RlKSB7XG4gICAgdGhpcy5yZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdiaWxsaW5nTW9kZScsIGJpbGxpbmdNb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBUVEwgYXR0cmlidXRlLlxuICAgKi9cbiAgc2V0IHRpbWVUb0xpdmVBdHRyaWJ1dGUodGltZVRvTGl2ZVNwZWNpZmljYXRpb246IFRpbWVUb0xpdmVTcGVjaWZpY2F0aW9uKSB7XG4gICAgdGhpcy5yZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCd0aW1lVG9MaXZlU3BlY2lmaWNhdGlvbicsIHRpbWVUb0xpdmVTcGVjaWZpY2F0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHBvaW50LWluLXRpbWUgcmVjb3ZlcnkgaXMgZW5hYmxlZC5cbiAgICovXG4gIHNldCBwb2ludEluVGltZVJlY292ZXJ5RW5hYmxlZChwb2ludEluVGltZVJlY292ZXJ5RW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMucmVzb3VyY2UuYWRkUHJvcGVydHlPdmVycmlkZSgncG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb24nLCB7IHBvaW50SW5UaW1lUmVjb3ZlcnlFbmFibGVkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcHJvdmlzaW9uZWQgdGhyb3VnaHB1dCBmb3IgdGhlIGJhc2UgdGFibGUuXG4gICAqL1xuICBzZXQgcHJvdmlzaW9uZWRUaHJvdWdocHV0KHByb3Zpc2lvbmVkVGhyb3VnaHB1dDogUHJvdmlzaW9uZWRUaHJvdWdocHV0KSB7XG4gICAgdGhpcy5yZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdwcm92aXNpb25lZFRocm91Z2hwdXQnLCBwcm92aXNpb25lZFRocm91Z2hwdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcHJvdmlzaW9uZWRUaHJvdWdodHB1dCBmb3IgYSBzcGVjaWZpZWQgR1NJIGJ5IG5hbWUuXG4gICAqIEBwYXJhbSBpbmRleE5hbWUgdGhlIGluZGV4IHRvIHNwZWNpZnkgYSBwcm92aXNpb25lZFRocm91Z2hwdXQgY29uZmlnIGZvclxuICAgKiBAcGFyYW0gcHJvdmlzaW9uZWRUaHJvdWdocHV0IHRoZSBjb25maWcgdG8gc2V0XG4gICAqL1xuICBzZXRHbG9iYWxTZWNvbmRhcnlJbmRleFByb3Zpc2lvbmVkVGhyb3VnaHB1dChpbmRleE5hbWU6IHN0cmluZywgcHJvdmlzaW9uZWRUaHJvdWdocHV0OiBQcm92aXNpb25lZFRocm91Z2hwdXQpOiB2b2lkIHtcbiAgICBjb25zdCBnc2lzOiBBcnJheTxbc3RyaW5nLCB7IGluZGV4TmFtZTogc3RyaW5nIH1dPiA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgKHRoaXMucmVzb3VyY2UgYXMgYW55KS5yYXdPdmVycmlkZXM/LlByb3BlcnRpZXM/Lmdsb2JhbFNlY29uZGFyeUluZGV4ZXMgPz8ge30sXG4gICAgKTtcbiAgICBjb25zdCBmb3VuZEdzaXMgPSBnc2lzLmZpbHRlcigoW18sIGdzaUNvbmZpZ10pID0+IGluZGV4TmFtZSA9PT0gZ3NpQ29uZmlnLmluZGV4TmFtZSkubWFwKChbZ3NpSW5kZXhdKSA9PiBnc2lJbmRleCk7XG4gICAgaWYgKGZvdW5kR3Npcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5kZXggd2l0aCBuYW1lICR7aW5kZXhOYW1lfSBub3QgZm91bmQgaW4gdGFibGUgZGVmaW5pdGlvbmApO1xuICAgIH1cbiAgICB0aGlzLnJlc291cmNlLmFkZFByb3BlcnR5T3ZlcnJpZGUoYGdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJHtmb3VuZEdzaXNbMF19LnByb3Zpc2lvbmVkVGhyb3VnaHB1dGAsIHByb3Zpc2lvbmVkVGhyb3VnaHB1dCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZGIgc3RyZWFtIHNwZWNpZmljYXRpb24gb24gdGhlIHRhYmxlLlxuICAgKi9cbiAgc2V0IHN0cmVhbVNwZWNpZmljYXRpb24oc3RyZWFtU3BlY2lmaWNhdGlvbjogU3RyZWFtU3BlY2lmaWNhdGlvbikge1xuICAgIHRoaXMucmVzb3VyY2UuYWRkUHJvcGVydHlPdmVycmlkZSgnc3RyZWFtU3BlY2lmaWNhdGlvbicsIHN0cmVhbVNwZWNpZmljYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGRiIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gc3BlY2lmaWNhdGlvbiBvbiB0aGUgdGFibGUuXG4gICAqL1xuICBzZXQgc3NlU3BlY2lmaWNhdGlvbihzc2VTcGVjaWZpY2F0aW9uOiBTU0VTcGVjaWZpY2F0aW9uKSB7XG4gICAgdGhpcy5yZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdzc2VTcGVjaWZpY2F0aW9uJywgc3NlU3BlY2lmaWNhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRhYmxlIGRlbGV0aW9uIHByb3RlY3Rpb24uXG4gICAqL1xuICBzZXQgZGVsZXRpb25Qcm90ZWN0aW9uRW5hYmxlZChkZWxldGlvblByb3RlY3Rpb25FbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5yZXNvdXJjZS5hZGRQcm9wZXJ0eU92ZXJyaWRlKCdkZWxldGlvblByb3RlY3Rpb25FbmFibGVkJywgZGVsZXRpb25Qcm90ZWN0aW9uRW5hYmxlZCk7XG4gIH1cbn1cbiJdfQ==
@@ -7,7 +7,6 @@ const path = require("path");
7
7
  const constructs_1 = require("constructs");
8
8
  const graphql_transformer_1 = require("@aws-amplify/graphql-transformer");
9
9
  const aws_cdk_lib_1 = require("aws-cdk-lib");
10
- const aws_s3_assets_1 = require("aws-cdk-lib/aws-s3-assets");
11
10
  const backend_output_storage_1 = require("@aws-amplify/backend-output-storage");
12
11
  const backend_output_schemas_1 = require("@aws-amplify/backend-output-schemas");
13
12
  const aws_appsync_1 = require("aws-cdk-lib/aws-appsync");
@@ -80,15 +79,13 @@ class AmplifyGraphqlApi extends constructs_1.Construct {
80
79
  if (amplifyEnvironmentName.length > 8) {
81
80
  throw new Error(`or cdk --context env must have a length <= 8, found ${amplifyEnvironmentName}`);
82
81
  }
83
- const assetManager = new internal_1.AssetManager();
82
+ const assetProvider = new internal_1.AssetProvider(this);
84
83
  const executeTransformConfig = {
85
84
  scope: this,
86
85
  nestedStackProvider: {
87
86
  provide: (nestedStackScope, name) => new aws_cdk_lib_1.NestedStack(nestedStackScope, name),
88
87
  },
89
- assetProvider: {
90
- provide: (assetScope, assetId, assetProps) => new aws_s3_assets_1.Asset(assetScope, assetId, { path: assetManager.addAsset(assetProps.fileName, assetProps.fileContent) }),
91
- },
88
+ assetProvider,
92
89
  synthParameters: {
93
90
  amplifyEnvironmentName: amplifyEnvironmentName,
94
91
  apiName: props.apiName ?? id,
@@ -120,7 +117,7 @@ class AmplifyGraphqlApi extends constructs_1.Construct {
120
117
  (0, graphql_transformer_1.executeTransform)(executeTransformConfig);
121
118
  this.codegenAssets = new internal_1.CodegenAssets(this, 'AmplifyCodegenAssets', { modelSchema: definition.schema });
122
119
  this.resources = (0, internal_1.getGeneratedResources)(this);
123
- this.generatedFunctionSlots = (0, internal_1.getGeneratedFunctionSlots)(assetManager.resolverAssets);
120
+ this.generatedFunctionSlots = (0, internal_1.getGeneratedFunctionSlots)(assetProvider.resolverAssets);
124
121
  this.storeOutput(outputStorageStrategy);
125
122
  this.apiId = this.resources.cfnResources.cfnGraphqlApi.attrApiId;
126
123
  this.graphqlUrl = this.resources.cfnResources.cfnGraphqlApi.attrGraphQlUrl;
@@ -264,14 +261,14 @@ class AmplifyGraphqlApi extends constructs_1.Construct {
264
261
  }
265
262
  exports.AmplifyGraphqlApi = AmplifyGraphqlApi;
266
263
  _a = JSII_RTTI_SYMBOL_1;
267
- AmplifyGraphqlApi[_a] = { fqn: "@aws-amplify/graphql-api-construct.AmplifyGraphqlApi", version: "1.9.0-gen2-release-0418-2.0" };
264
+ AmplifyGraphqlApi[_a] = { fqn: "@aws-amplify/graphql-api-construct.AmplifyGraphqlApi", version: "1.9.0" };
268
265
  /**
269
266
  * Given the provided scope, walk the node tree, and throw an exception if any other AmplifyGraphqlApi constructs
270
267
  * are found in the stack.
271
268
  * @param scope the scope this construct is created in.
272
269
  */
273
270
  const validateNoOtherAmplifyGraphqlApiInStack = (scope) => {
274
- const rootStack = (0, construct_tree_1.getStackForScope)(scope, true);
271
+ const rootStack = (0, construct_tree_1.getStackForScope)(scope, false);
275
272
  let wasOtherAmplifyGraphlApiFound = false;
276
273
  (0, construct_tree_1.walkAndProcessNodes)(rootStack, (node) => {
277
274
  if (node instanceof AmplifyGraphqlApi && scope !== node) {
@@ -279,7 +276,7 @@ const validateNoOtherAmplifyGraphqlApiInStack = (scope) => {
279
276
  }
280
277
  });
281
278
  if (wasOtherAmplifyGraphlApiFound) {
282
- throw new Error('Only one AmplifyGraphqlApi is expected in a stack');
279
+ throw new Error('Only one AmplifyGraphqlApi is expected in a stack. Place the AmplifyGraphqlApis in separate nested stacks.');
283
280
  }
284
281
  };
285
282
  const getMetadataDataSources = (definition) => {
@@ -288,4 +285,4 @@ const getMetadataDataSources = (definition) => {
288
285
  const dataSources = [...new Set([...dataSourceDbTypes, ...customSqlDbTypes])].sort();
289
286
  return dataSources.join(',');
290
287
  };
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGlmeS1ncmFwaHFsLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hbXBsaWZ5LWdyYXBocWwtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLDJDQUF1QztBQUN2QywwRUFBNEY7QUFDNUYsNkNBQWlEO0FBQ2pELDZEQUFrRDtBQUVsRCxnRkFBNEg7QUFDNUgsZ0ZBQXVFO0FBRXZFLHlEQWNpQztBQVFqQyxzRUFBNEc7QUFVNUcseUNBVW9CO0FBQ3BCLDhEQUFrRjtBQUNsRixzRUFBZ0Y7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxzQkFBUztJQStDOUM7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBYm5COztXQUVHO1FBQ2MsY0FBUyxHQUFHLGFBQWEsQ0FBQztRQVl6Qyx1Q0FBdUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QyxNQUFNLEVBQ0osVUFBVSxFQUNWLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUN2QixHQUFHLEtBQUssQ0FBQztRQUVWLElBQUksa0JBQWtCLElBQUksc0JBQXNCLEVBQUU7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FDYiw2SUFBNkksQ0FDOUksQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixJQUFJLGtCQUFrQixDQUFDO1FBRTNFLE1BQU0sV0FBVyxHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXZELElBQUksbURBQTBCLEVBQUUsQ0FBQyx3QkFBd0Is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QUM7SUFFSCxJQUFJLDZCQUE2QixFQUFFO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztLQUN0RTtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxVQUFxQyxFQUFVLEVBQUU7SUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDaEksTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUMxSSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixFQUFFLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckYsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEV4ZWN1dGVUcmFuc2Zvcm1Db25maWcsIGV4ZWN1dGVUcmFuc2Zvcm0gfSBmcm9tICdAYXdzLWFtcGxpZnkvZ3JhcGhxbC10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBOZXN0ZWRTdGFjaywgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBBc3NldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgQXNzZXRQcm9wcyB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9ncmFwaHFsLXRyYW5zZm9ybWVyLWludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXR0cmlidXRpb25NZXRhZGF0YVN0b3JhZ2UsIFN0YWNrTWV0YWRhdGFCYWNrZW5kT3V0cHV0U3RvcmFnZVN0cmF0ZWd5IH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2JhY2tlbmQtb3V0cHV0LXN0b3JhZ2UnO1xuaW1wb3J0IHsgZ3JhcGhxbE91dHB1dEtleSB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9iYWNrZW5kLW91dHB1dC1zY2hlbWFzJztcbmltcG9ydCB0eXBlIHsgR3JhcGhxbE91dHB1dCwgQXdzQXBwc3luY0F1dGhlbnRpY2F0aW9uVHlwZSB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9iYWNrZW5kLW91dHB1dC1zY2hlbWFzJztcbmltcG9ydCB7XG4gIEFwcHN5bmNGdW5jdGlvbixcbiAgRGF0YVNvdXJjZU9wdGlvbnMsXG4gIER5bmFtb0RiRGF0YVNvdXJjZSxcbiAgRWxhc3RpY3NlYXJjaERhdGFTb3VyY2UsXG4gIEV2ZW50QnJpZGdlRGF0YVNvdXJjZSxcbiAgRXh0ZW5kZWRSZXNvbHZlclByb3BzLFxuICBIdHRwRGF0YVNvdXJjZSxcbiAgSHR0cERhdGFTb3VyY2VPcHRpb25zLFxuICBMYW1iZGFEYXRhU291cmNlLFxuICBOb25lRGF0YVNvdXJjZSxcbiAgT3BlblNlYXJjaERhdGFTb3VyY2UsXG4gIFJkc0RhdGFTb3VyY2UsXG4gIFJlc29sdmVyLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBwc3luYyc7XG5pbXBvcnQgeyBJVGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0IHsgSURvbWFpbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lbGFzdGljc2VhcmNoJztcbmltcG9ydCB7IElEb21haW4gYXMgSU9wZW5TZWFyY2hEb21haW4gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtb3BlbnNlYXJjaHNlcnZpY2UnO1xuaW1wb3J0IHsgSUV2ZW50QnVzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IElTZXJ2ZXJsZXNzQ2x1c3RlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1yZHMnO1xuaW1wb3J0IHsgSVNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgeyBwYXJzZVVzZXJEZWZpbmVkU2xvdHMsIHZhbGlkYXRlRnVuY3Rpb25TbG90cywgc2VwYXJhdGVTbG90cyB9IGZyb20gJy4vaW50ZXJuYWwvdXNlci1kZWZpbmVkLXNsb3RzJztcbmltcG9ydCB0eXBlIHtcbiAgQW1wbGlmeUdyYXBocWxBcGlSZXNvdXJjZXMsXG4gIEFtcGxpZnlHcmFwaHFsQXBpUHJvcHMsXG4gIEZ1bmN0aW9uU2xvdCxcbiAgSUJhY2tlbmRPdXRwdXRTdG9yYWdlU3RyYXRlZ3ksXG4gIEFkZEZ1bmN0aW9uUHJvcHMsXG4gIERhdGFTdG9yZUNvbmZpZ3VyYXRpb24sXG4gIElBbXBsaWZ5R3JhcGhxbERlZmluaXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgY29udmVydEF1dGhvcml6YXRpb25Nb2Rlc1RvVHJhbnNmb3JtZXJBdXRoQ29uZmlnLFxuICBjb252ZXJ0VG9SZXNvbHZlckNvbmZpZyxcbiAgZGVmYXVsdFRyYW5zbGF0aW9uQmVoYXZpb3IsXG4gIEFzc2V0TWFuYWdlcixcbiAgZ2V0R2VuZXJhdGVkUmVzb3VyY2VzLFxuICBnZXRHZW5lcmF0ZWRGdW5jdGlvblNsb3RzLFxuICBDb2RlZ2VuQXNzZXRzLFxuICBnZXRBZGRpdGlvbmFsQXV0aGVudGljYXRpb25UeXBlcyxcbiAgdmFsaWRhdGVBdXRob3JpemF0aW9uTW9kZXMsXG59IGZyb20gJy4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgZ2V0U3RhY2tGb3JTY29wZSwgd2Fsa0FuZFByb2Nlc3NOb2RlcyB9IGZyb20gJy4vaW50ZXJuYWwvY29uc3RydWN0LXRyZWUnO1xuaW1wb3J0IHsgZ2V0RGF0YVNvdXJjZVN0cmF0ZWdpZXNQcm92aWRlciB9IGZyb20gJy4vaW50ZXJuYWwvZGF0YS1zb3VyY2UtY29uZmlnJztcblxuLyoqXG4gKiBMMyBDb25zdHJ1Y3Qgd2hpY2ggaW52b2tlcyB0aGUgQW1wbGlmeSBUcmFuc2Zvcm1lciBQYXR0ZXJuIG92ZXIgYW4gaW5wdXQgR3JhcGhxbCBTY2hlbWEuXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byBxdWlja2x5IGRlZmluZSBhcHBzeW5jIGFwaXMgd2hpY2ggc3VwcG9ydCBmdWxsIENSVUQrTGlzdCBhbmQgU3Vic2NyaXB0aW9ucywgcmVsYXRpb25zaGlwcyxcbiAqIGF1dGgsIHNlYXJjaCBvdmVyIGRhdGEsIHRoZSBhYmlsaXR5IHRvIGluamVjdCBjdXN0b20gYnVzaW5lc3MgbG9naWMgYW5kIHF1ZXJ5L211dGF0aW9uIG9wZXJhdGlvbnMsIGFuZCBjb25uZWN0IHRvIE1MIHNlcnZpY2VzLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgZG9jcyBsaW5rcyBiZWxvdzpcbiAqIERhdGEgTW9kZWxpbmcgLSBodHRwczovL2RvY3MuYW1wbGlmeS5hd3MvY2xpL2dyYXBocWwvZGF0YS1tb2RlbGluZy9cbiAqIEF1dGhvcml6YXRpb24gLSBodHRwczovL2RvY3MuYW1wbGlmeS5hd3MvY2xpL2dyYXBocWwvYXV0aG9yaXphdGlvbi1ydWxlcy9cbiAqIEN1c3RvbSBCdXNpbmVzcyBMb2dpYyAtIGh0dHBzOi8vZG9jcy5hbXBsaWZ5LmF3cy9jbGkvZ3JhcGhxbC9jdXN0b20tYnVzaW5lc3MtbG9naWMvXG4gKiBTZWFyY2ggLSBodHRwczovL2RvY3MuYW1wbGlmeS5hd3MvY2xpL2dyYXBocWwvc2VhcmNoLWFuZC1yZXN1bHQtYWdncmVnYXRpb25zL1xuICogTUwgU2VydmljZXMgLSBodHRwczovL2RvY3MuYW1wbGlmeS5hd3MvY2xpL2dyYXBocWwvY29ubmVjdC10by1tYWNoaW5lLWxlYXJuaW5nLXNlcnZpY2VzL1xuICpcbiAqIEZvciBhIGZ1bGwgcmVmZXJlbmNlIG9mIHRoZSBzdXBwb3J0ZWQgY3VzdG9tIGdyYXBocWwgZGlyZWN0aXZlcyAtIGh0dHBzOi8vZG9jcy5hbXBsaWZ5LmF3cy9jbGkvZ3JhcGhxbC9kaXJlY3RpdmVzLXJlZmVyZW5jZS9cbiAqXG4gKiBUaGUgb3V0cHV0IG9mIHRoaXMgY29uc3RydWN0IGlzIGEgbWFwcGluZyBvZiBMMiBvciBMMSByZXNvdXJjZXMgZ2VuZXJhdGVkIGJ5IHRoZSB0cmFuc2Zvcm1lciwgd2hpY2ggZ2VuZXJhbGx5IGZvbGxvdyB0aGUgYWNjZXNzIHBhdHRlcm5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAgIGNvbnN0IGFwaSA9IG5ldyBBbXBsaWZ5R3JhcGhRbEFwaSh0aGlzLCAnYXBpJywgeyA8cGFyYW1zPiB9KTtcbiAqICAgLy8gQWNjZXNzIEwyIHJlc291cmNlcyB1bmRlciBgLnJlc291cmNlc2BcbiAqICAgYXBpLnJlc291cmNlcy50YWJsZXNbXCJUb2RvXCJdLnRhYmxlQXJuO1xuICpcbiAqICAgLy8gQWNjZXNzIEwxIHJlc291cmNlcyB1bmRlciBgLnJlc291cmNlcy5jZm5SZXNvdXJjZXNgXG4gKiAgIGFwaS5yZXNvdXJjZXMuY2ZuUmVzb3VyY2VzLmNmbkdyYXBocWxBcGkueHJheUVuYWJsZWQgPSB0cnVlO1xuICogICBPYmplY3QudmFsdWVzKGFwaS5yZXNvdXJjZXMuY2ZuUmVzb3VyY2VzLmNmblRhYmxlcykuZm9yRWFjaCh0YWJsZSA9PiB7XG4gKiAgICAgdGFibGUucG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb24gPSB7IHBvaW50SW5UaW1lUmVjb3ZlcnlFbmFibGVkOiBmYWxzZSB9O1xuICogICB9KTtcbiAqIGBgYFxuICogYHJlc291cmNlcy48UmVzb3VyY2VUeXBlPi48UmVzb3VyY2VOYW1lPmAgLSB5b3UgY2FuIHRoZW4gcGVyZm9ybSBhbnkgQ0RLIGFjdGlvbiBvbiB0aGVzZSByZXN1bHRpbmcgcmVzb3VyZWNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFtcGxpZnlHcmFwaHFsQXBpIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlZCBMMSBhbmQgTDIgQ0RLIHJlc291cmNlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZXM6IEFtcGxpZnlHcmFwaHFsQXBpUmVzb3VyY2VzO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZWQgYXNzZXRzIHJlcXVpcmVkIGZvciBjb2RlZ2VuIHN0ZXBzLiBQZXJzaXN0ZWQgaW4gb3JkZXIgdG8gcmVuZGVyIGFzIHBhcnQgb2YgdGhlIG91dHB1dCBzdHJhdGVneS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZWdlbkFzc2V0czogQ29kZWdlbkFzc2V0cztcblxuICAvKipcbiAgICogUmVzb2x2ZXJzIGdlbmVyYXRlZCBieSB0aGUgdHJhbnNmb3JtIHByb2Nlc3MsIHBlcnNpc3RlZCBvbiB0aGUgc2lkZSBpbiBvcmRlciB0byBmYWNpbGl0YXRlIHB1bGxpbmcgYSBtYW5pZmVzdFxuICAgKiBmb3IgdGhlIHB1cnBvc2VzIG9mIGluc3BlY3RpbmcgYW5kIHByb2R1Y2luZyBvdmVycmlkZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2VuZXJhdGVkRnVuY3Rpb25TbG90czogRnVuY3Rpb25TbG90W107XG5cbiAgLyoqXG4gICAqIEdyYXBocWwgVVJMIEZvciB0aGUgZ2VuZXJhdGVkIEFQSS4gTWF5IGJlIGEgQ0RLIFRva2VuLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYXBocWxVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogUmVhbHRpbWUgVVJMIEZvciB0aGUgZ2VuZXJhdGVkIEFQSS4gTWF5IGJlIGEgQ0RLIFRva2VuLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlYWx0aW1lVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlZCBBcGkgS2V5IGlmIGdlbmVyYXRlZC4gTWF5IGJlIGEgQ0RLIFRva2VuLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZWQgQXBpIElkLiBNYXkgYmUgYSBDREsgVG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YVN0b3JlIGNvbmZsaWN0IHJlc29sdXRpb24gc2V0dGluZ1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhU3RvcmVDb25maWd1cmF0aW9uOiBEYXRhU3RvcmVDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBCZSB2ZXJ5IGNhcmVmdWwgZWRpdGluZyB0aGlzIHZhbHVlLiBUaGlzIGlzIHRoZSBzdHJpbmcgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGdyYXBocWwgc3RhY2tzIGluIEJJIG1ldHJpY3NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tUeXBlID0gJ2FwaS1BcHBTeW5jJztcblxuICAvKipcbiAgICogTmV3IEFtcGxpZnlHcmFwaHFsQXBpIGNvbnN0cnVjdCwgdGhpcyB3aWxsIGNyZWF0ZSBhbiBhcHBzeW5jIGFwaSB3aXRoIGF1dGhvcml6YXRpb24sIGEgc2NoZW1hLCBhbmQgYWxsIG5lY2Vzc2FyeSByZXNvbHZlcnMsIGZ1bmN0aW9ucyxcbiAgICogYW5kIGRhdGFzb3VyY2VzLlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIHRvIGNyZWF0ZSB0aGlzIGNvbnN0cnVjdCB3aXRoaW4uXG4gICAqIEBwYXJhbSBpZCB0aGUgaWQgdG8gdXNlIGZvciB0aGlzIGFwaS5cbiAgICogQHBhcmFtIHByb3BzIHRoZSBwcm9wZXJ0aWVzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBnZW5lcmF0ZWQgYXBpLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFtcGxpZnlHcmFwaHFsQXBpUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdmFsaWRhdGVOb090aGVyQW1wbGlmeUdyYXBocWxBcGlJblN0YWNrKHRoaXMpO1xuXG4gICAgY29uc3Qge1xuICAgICAgZGVmaW5pdGlvbixcbiAgICAgIGF1dGhvcml6YXRpb25Nb2RlcyxcbiAgICAgIGNvbmZsaWN0UmVzb2x1dGlvbixcbiAgICAgIGZ1bmN0aW9uU2xvdHMsXG4gICAgICB0cmFuc2Zvcm1lclBsdWdpbnMsXG4gICAgICBwcmVkaWN0aW9uc0J1Y2tldCxcbiAgICAgIHN0YWNrTWFwcGluZ3MsXG4gICAgICB0cmFuc2xhdGlvbkJlaGF2aW9yLFxuICAgICAgZnVuY3Rpb25OYW1lTWFwLFxuICAgICAgb3V0cHV0U3RvcmFnZVN0cmF0ZWd5LFxuICAgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbixcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBpZiAoY29uZmxpY3RSZXNvbHV0aW9uICYmIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNvbmZsaWN0UmVzb2x1dGlvbiBpcyBkZXByZWNhdGVkLiBjb25mbGljdFJlc29sdXRpb24gYW5kIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2UgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBkYXRhU3RvcmVDb25maWd1cmF0aW9uIHx8IGNvbmZsaWN0UmVzb2x1dGlvbjtcblxuICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gZ2V0TWV0YWRhdGFEYXRhU291cmNlcyhkZWZpbml0aW9uKTtcblxuICAgIG5ldyBBdHRyaWJ1dGlvbk1ldGFkYXRhU3RvcmFnZSgpLnN0b3JlQXR0cmlidXRpb25NZXRhZGF0YShTdGFjay5vZihzY29wZSksIHRoaXMuc3RhY2tUeXBlLCBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyksIHtcbiAgICAgIGRhdGFTb3VyY2VzLFxuICAgIH0pO1xuXG4gICAgdmFsaWRhdGVBdXRob3JpemF0aW9uTW9kZXMoYXV0aG9yaXphdGlvbk1vZGVzKTtcbiAgICBjb25zdCB7IGF1dGhDb25maWcsIGF1dGhTeW50aFBhcmFtZXRlcnMgfSA9IGNvbnZlcnRBdXRob3JpemF0aW9uTW9kZXNUb1RyYW5zZm9ybWVyQXV0aENvbmZpZyhhdXRob3JpemF0aW9uTW9kZXMpO1xuXG4gICAgdmFsaWRhdGVGdW5jdGlvblNsb3RzKGZ1bmN0aW9uU2xvdHMgPz8gW10pO1xuICAgIGNvbnN0IHNlcGFyYXRlZEZ1bmN0aW9uU2xvdHMgPSBzZXBhcmF0ZVNsb3RzKFsuLi4oZnVuY3Rpb25TbG90cyA/PyBbXSksIC4uLmRlZmluaXRpb24uZnVuY3Rpb25TbG90c10pO1xuXG4gICAgLy8gQWxsb3cgYW1wbGlmeUVudmlyb25tZW50TmFtZSB0byBiZSByZXRyaWV2ZSBmcm9tIGNvbnRleHQsIGFuZCB1c2UgdmFsdWUgJ05PTkUnIGlmIG5vIHZhbHVlIGNhbiBiZSBmb3VuZC5cbiAgICAvLyBhbXBsaWZ5RW52aXJvbm1lbnROYW1lIGlzIHJlcXVpcmVkIGZvciBsb2dpY2FsIGlkIHN1ZmZpeGluZywgYXMgd2VsbCBhcyBFeHBvcnRzIGZyb20gdGhlIG5lc3RlZCBzdGFja3MuXG4gICAgLy8gQWxsb3cgZXhwb3J0IHNvIGN1c3RvbWVycyBjYW4gcmV1c2UgdGhlIGVudiBpbiB0aGVpciBvd24gcmVmZXJlbmNlcyBkb3duc3RyZWFtLlxuICAgIGNvbnN0IGFtcGxpZnlFbnZpcm9ubWVudE5hbWUgPSB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dCgnYW1wbGlmeUVudmlyb25tZW50TmFtZScpID8/ICdOT05FJztcbiAgICBpZiAoYW1wbGlmeUVudmlyb25tZW50TmFtZS5sZW5ndGggPiA4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG9yIGNkayAtLWNvbnRleHQgZW52IG11c3QgaGF2ZSBhIGxlbmd0aCA8PSA4LCBmb3VuZCAke2FtcGxpZnlFbnZpcm9ubWVudE5hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzZXRNYW5hZ2VyID0gbmV3IEFzc2V0TWFuYWdlcigpO1xuXG4gICAgY29uc3QgZXhlY3V0ZVRyYW5zZm9ybUNvbmZpZzogRXhlY3V0ZVRyYW5zZm9ybUNvbmZpZyA9IHtcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgbmVzdGVkU3RhY2tQcm92aWRlcjoge1xuICAgICAgICBwcm92aWRlOiAobmVzdGVkU3RhY2tTY29wZTogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcpID0+IG5ldyBOZXN0ZWRTdGFjayhuZXN0ZWRTdGFja1Njb3BlLCBuYW1lKSxcbiAgICAgIH0sXG4gICAgICBhc3NldFByb3ZpZGVyOiB7XG4gICAgICAgIHByb3ZpZGU6IChhc3NldFNjb3BlOiBDb25zdHJ1Y3QsIGFzc2V0SWQ6IHN0cmluZywgYXNzZXRQcm9wczogQXNzZXRQcm9wcykgPT5cbiAgICAgICAgICBuZXcgQXNzZXQoYXNzZXRTY29wZSwgYXNzZXRJZCwgeyBwYXRoOiBhc3NldE1hbmFnZXIuYWRkQXNzZXQoYXNzZXRQcm9wcy5maWxlTmFtZSwgYXNzZXRQcm9wcy5maWxlQ29udGVudCkgfSksXG4gICAgICB9LFxuICAgICAgc3ludGhQYXJhbWV0ZXJzOiB7XG4gICAgICAgIGFtcGxpZnlFbnZpcm9ubWVudE5hbWU6IGFtcGxpZnlFbnZpcm9ubWVudE5hbWUsXG4gICAgICAgIGFwaU5hbWU6IHByb3BzLmFwaU5hbWUgPz8gaWQsXG4gICAgICAgIC4uLmF1dGhTeW50aFBhcmFtZXRlcnMsXG4gICAgICB9LFxuICAgICAgc2NoZW1hOiBkZWZpbml0aW9uLnNjaGVtYSxcbiAgICAgIHVzZXJEZWZpbmVkU2xvdHM6IHBhcnNlVXNlckRlZmluZWRTbG90cyhzZXBhcmF0ZWRGdW5jdGlvblNsb3RzKSxcbiAgICAgIHRyYW5zZm9ybWVyc0ZhY3RvcnlBcmdzOiB7XG4gICAgICAgIGN1c3RvbVRyYW5zZm9ybWVyczogdHJhbnNmb3JtZXJQbHVnaW5zID8/IFtdLFxuICAgICAgICAuLi4ocHJlZGljdGlvbnNCdWNrZXQgPyB7IHN0b3JhZ2VDb25maWc6IHsgYnVja2V0TmFtZTogcHJlZGljdGlvbnNCdWNrZXQuYnVja2V0TmFtZSB9IH0gOiB7fSksXG4gICAgICAgIGZ1bmN0aW9uTmFtZU1hcDoge1xuICAgICAgICAgIC4uLmRlZmluaXRpb24ucmVmZXJlbmNlZExhbWJkYUZ1bmN0aW9ucyxcbiAgICAgICAgICAuLi5mdW5jdGlvbk5hbWVNYXAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXV0aENvbmZpZyxcbiAgICAgIHN0YWNrTWFwcGluZzogc3RhY2tNYXBwaW5ncyA/PyB7fSxcbiAgICAgIHJlc29sdmVyQ29uZmlnOiB0aGlzLmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPyBjb252ZXJ0VG9SZXNvbHZlckNvbmZpZyh0aGlzLmRhdGFTdG9yZUNvbmZpZ3VyYXRpb24pIDogdW5kZWZpbmVkLFxuICAgICAgdHJhbnNmb3JtUGFyYW1ldGVyczoge1xuICAgICAgICAuLi5kZWZhdWx0VHJhbnNsYXRpb25CZWhhdmlvcixcbiAgICAgICAgLi4uKHRyYW5zbGF0aW9uQmVoYXZpb3IgPz8ge30pLFxuICAgICAgfSxcbiAgICAgIC8vIENESyBjb25zdHJ1Y3QgdXNlcyBhIGN1c3RvbSByZXNvdXJjZS4gV2UnbGwgZGVmaW5lIHRoaXMgZXhwbGljaXRseSBoZXJlIHRvIHJlbWluZCBvdXJzZWx2ZXMgdGhhdCB0aGlzIHZhbHVlIGlzIHVudXNlZCBpbiB0aGUgQ0RLXG4gICAgICAvLyBjb25zdHJ1Y3QgZmxvd1xuICAgICAgcmRzTGF5ZXJNYXBwaW5nOiB1bmRlZmluZWQsXG4gICAgICByZHNTbnNUb3BpY01hcHBpbmc6IHVuZGVmaW5lZCxcbiAgICAgIC4uLmdldERhdGFTb3VyY2VTdHJhdGVnaWVzUHJvdmlkZXIoZGVmaW5pdGlvbiksXG4gICAgfTtcblxuICAgIGV4ZWN1dGVUcmFuc2Zvcm0oZXhlY3V0ZVRyYW5zZm9ybUNvbmZpZyk7XG5cbiAgICB0aGlzLmNvZGVnZW5Bc3NldHMgPSBuZXcgQ29kZWdlbkFzc2V0cyh0aGlzLCAnQW1wbGlmeUNvZGVnZW5Bc3NldHMnLCB7IG1vZGVsU2NoZW1hOiBkZWZpbml0aW9uLnNjaGVtYSB9KTtcblxuICAgIHRoaXMucmVzb3VyY2VzID0gZ2V0R2VuZXJhdGVkUmVzb3VyY2VzKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkRnVuY3Rpb25TbG90cyA9IGdldEdlbmVyYXRlZEZ1bmN0aW9uU2xvdHMoYXNzZXRNYW5hZ2VyLnJlc29sdmVyQXNzZXRzKTtcbiAgICB0aGlzLnN0b3JlT3V0cHV0KG91dHB1dFN0b3JhZ2VTdHJhdGVneSk7XG5cbiAgICB0aGlzLmFwaUlkID0gdGhpcy5yZXNvdXJjZXMuY2ZuUmVzb3VyY2VzLmNmbkdyYXBocWxBcGkuYXR0ckFwaUlkO1xuICAgIHRoaXMuZ3JhcGhxbFVybCA9IHRoaXMucmVzb3VyY2VzLmNmblJlc291cmNlcy5jZm5HcmFwaHFsQXBpLmF0dHJHcmFwaFFsVXJsO1xuICAgIHRoaXMucmVhbHRpbWVVcmwgPSB0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuR3JhcGhxbEFwaS5hdHRyUmVhbHRpbWVVcmw7XG4gICAgdGhpcy5hcGlLZXkgPSB0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuQXBpS2V5Py5hdHRyQXBpS2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBncmFwaHFsIGFwaSBvdXRwdXQgdG8gYmUgdXNlZCBmb3IgY2xpZW50IGNvbmZpZyBnZW5lcmF0aW9uXG4gICAqIEBwYXJhbSBvdXRwdXRTdG9yYWdlU3RyYXRlZ3kgU3RyYXRlZ3kgdG8gc3RvcmUgY29uc3RydWN0IG91dHB1dHMuIElmIG5vIHN0cmF0ZWd5IGlzIHByb3ZpZGVkIGEgZGVmYXVsdCBzdHJhdGVneSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBwcml2YXRlIHN0b3JlT3V0cHV0KFxuICAgIG91dHB1dFN0b3JhZ2VTdHJhdGVneTogSUJhY2tlbmRPdXRwdXRTdG9yYWdlU3RyYXRlZ3kgPSBuZXcgU3RhY2tNZXRhZGF0YUJhY2tlbmRPdXRwdXRTdG9yYWdlU3RyYXRlZ3koU3RhY2sub2YodGhpcykpLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IG91dHB1dDogR3JhcGhxbE91dHB1dCA9IHtcbiAgICAgIHZlcnNpb246ICcxJyxcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgYXdzQXBwc3luY0FwaUlkOiB0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuR3JhcGhxbEFwaS5hdHRyQXBpSWQsXG4gICAgICAgIGF3c0FwcHN5bmNBcGlFbmRwb2ludDogdGhpcy5yZXNvdXJjZXMuY2ZuUmVzb3VyY2VzLmNmbkdyYXBocWxBcGkuYXR0ckdyYXBoUWxVcmwsXG4gICAgICAgIGF3c0FwcHN5bmNBdXRoZW50aWNhdGlvblR5cGU6IHRoaXMucmVzb3VyY2VzLmNmblJlc291cmNlcy5jZm5HcmFwaHFsQXBpLmF1dGhlbnRpY2F0aW9uVHlwZSBhcyBBd3NBcHBzeW5jQXV0aGVudGljYXRpb25UeXBlLFxuICAgICAgICBhd3NBcHBzeW5jUmVnaW9uOiBzdGFjay5yZWdpb24sXG4gICAgICAgIGFtcGxpZnlBcGlNb2RlbFNjaGVtYVMzVXJpOiB0aGlzLmNvZGVnZW5Bc3NldHMubW9kZWxTY2hlbWFTM1VyaSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuQXBpS2V5KSB7XG4gICAgICBvdXRwdXQucGF5bG9hZC5hd3NBcHBzeW5jQXBpS2V5ID0gdGhpcy5yZXNvdXJjZXMuY2ZuUmVzb3VyY2VzLmNmbkFwaUtleS5hdHRyQXBpS2V5O1xuICAgIH1cblxuICAgIGNvbnN0IGFkZGl0aW9uYWxBdXRoVHlwZXMgPSBnZXRBZGRpdGlvbmFsQXV0aGVudGljYXRpb25UeXBlcyh0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuR3JhcGhxbEFwaSk7XG4gICAgaWYgKGFkZGl0aW9uYWxBdXRoVHlwZXMpIHtcbiAgICAgIG91dHB1dC5wYXlsb2FkLmF3c0FwcHN5bmNBZGRpdGlvbmFsQXV0aGVudGljYXRpb25UeXBlcyA9IGFkZGl0aW9uYWxBdXRoVHlwZXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YVN0b3JlQ29uZmlndXJhdGlvbj8ucHJvamVjdD8uaGFuZGxlclR5cGUpIHtcbiAgICAgIG91dHB1dC5wYXlsb2FkLmF3c0FwcHN5bmNDb25mbGljdFJlc29sdXRpb25Nb2RlID0gdGhpcy5kYXRhU3RvcmVDb25maWd1cmF0aW9uPy5wcm9qZWN0Py5oYW5kbGVyVHlwZTtcbiAgICB9XG5cbiAgICBvdXRwdXRTdG9yYWdlU3RyYXRlZ3kuYWRkQmFja2VuZE91dHB1dEVudHJ5KGdyYXBocWxPdXRwdXRLZXksIG91dHB1dCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGxvd2luZyBhcmUgcHJveHkgbWV0aG9kcyB0byB0aGUgTDIgSUdyYXBocWxBcGkgaW50ZXJmYWNlLCB0byBmYWNpbGl0YXRlIGVhc2llciB1c2Ugb2YgdGhlIEwzIHdpdGhvdXQgbmVlZGluZ1xuICAgKiB0byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgcmVzb3VyY2VzLlxuICAgKi9cblxuICAvKipcbiAgICogQWRkIGEgbmV3IER5bmFtb0RCIGRhdGEgc291cmNlIHRvIHRoaXMgQVBJLiBUaGlzIGlzIGEgcHJveHkgbWV0aG9kIHRvIHRoZSBMMiBHcmFwaHFsQXBpIENvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIFRoZSBkYXRhIHNvdXJjZSdzIGlkLlxuICAgKiBAcGFyYW0gdGFibGUgVGhlIER5bmFtb0RCIHRhYmxlIGJhY2tpbmcgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGF0YSBzb3VyY2UuXG4gICAqIEByZXR1cm5zIHRoZSBnZW5lcmF0ZWQgZGF0YSBzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRHluYW1vRGJEYXRhU291cmNlKGlkOiBzdHJpbmcsIHRhYmxlOiBJVGFibGUsIG9wdGlvbnM/OiBEYXRhU291cmNlT3B0aW9ucyk6IER5bmFtb0RiRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmdyYXBocWxBcGkuYWRkRHluYW1vRGJEYXRhU291cmNlKGlkLCB0YWJsZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGVsYXN0aWNzZWFyY2ggZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGFkZE9wZW5TZWFyY2hEYXRhU291cmNlYFxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBkb21haW4gVGhlIGVsYXN0aWNzZWFyY2ggZG9tYWluIGZvciB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBkYXRhIHNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFbGFzdGljc2VhcmNoRGF0YVNvdXJjZShpZDogc3RyaW5nLCBkb21haW46IElEb21haW4sIG9wdGlvbnM/OiBEYXRhU291cmNlT3B0aW9ucyk6IEVsYXN0aWNzZWFyY2hEYXRhU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXMuZ3JhcGhxbEFwaS5hZGRFbGFzdGljc2VhcmNoRGF0YVNvdXJjZShpZCwgZG9tYWluLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gRXZlbnRCcmlkZ2UgZGF0YSBzb3VyY2UgdG8gdGhpcyBhcGkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBldmVudEJ1cyBUaGUgRXZlbnRCcmlkZ2UgRXZlbnRCdXMgb24gd2hpY2ggdG8gcHV0IGV2ZW50cy5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGF0YSBzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRXZlbnRCcmlkZ2VEYXRhU291cmNlKGlkOiBzdHJpbmcsIGV2ZW50QnVzOiBJRXZlbnRCdXMsIG9wdGlvbnM/OiBEYXRhU291cmNlT3B0aW9ucyk6IEV2ZW50QnJpZGdlRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmdyYXBocWxBcGkuYWRkRXZlbnRCcmlkZ2VEYXRhU291cmNlKGlkLCBldmVudEJ1cywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGh0dHAgZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBlbmRwb2ludCBUaGUgaHR0cCBlbmRwb2ludC5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGF0YSBzb3VyY2UuXG4gICAqIEByZXR1cm5zIHRoZSBnZW5lcmF0ZWQgZGF0YSBzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkSHR0cERhdGFTb3VyY2UoaWQ6IHN0cmluZywgZW5kcG9pbnQ6IHN0cmluZywgb3B0aW9ucz86IEh0dHBEYXRhU291cmNlT3B0aW9ucyk6IEh0dHBEYXRhU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXMuZ3JhcGhxbEFwaS5hZGRIdHRwRGF0YVNvdXJjZShpZCwgZW5kcG9pbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBMYW1iZGEgZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBsYW1iZGFGdW5jdGlvbiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGNhbGwgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBkYXRhIHNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGRMYW1iZGFEYXRhU291cmNlKGlkOiBzdHJpbmcsIGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24sIG9wdGlvbnM/OiBEYXRhU291cmNlT3B0aW9ucyk6IExhbWJkYURhdGFTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlcy5ncmFwaHFsQXBpLmFkZExhbWJkYURhdGFTb3VyY2UoaWQsIGxhbWJkYUZ1bmN0aW9uLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgZHVtbXkgZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBVc2VmdWwgZm9yIHBpcGVsaW5lIHJlc29sdmVycyBhbmQgZm9yIGJhY2tlbmQgY2hhbmdlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBkYXRhIHNvdXJjZS5cbiAgICogQHBhcmFtIGlkIFRoZSBkYXRhIHNvdXJjZSdzIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBkYXRhIHNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGROb25lRGF0YVNvdXJjZShpZDogc3RyaW5nLCBvcHRpb25zPzogRGF0YVNvdXJjZU9wdGlvbnMpOiBOb25lRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmdyYXBocWxBcGkuYWRkTm9uZURhdGFTb3VyY2UoaWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRkIGEgbmV3IE9wZW5TZWFyY2ggZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBkb21haW4gVGhlIE9wZW5TZWFyY2ggZG9tYWluIGZvciB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBkYXRhIHNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGRPcGVuU2VhcmNoRGF0YVNvdXJjZShpZDogc3RyaW5nLCBkb21haW46IElPcGVuU2VhcmNoRG9tYWluLCBvcHRpb25zPzogRGF0YVNvdXJjZU9wdGlvbnMpOiBPcGVuU2VhcmNoRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmdyYXBocWxBcGkuYWRkT3BlblNlYXJjaERhdGFTb3VyY2UoaWQsIGRvbWFpbiwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IFJkcyBkYXRhIHNvdXJjZSB0byB0aGlzIEFQSS4gVGhpcyBpcyBhIHByb3h5IG1ldGhvZCB0byB0aGUgTDIgR3JhcGhxbEFwaSBDb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCBUaGUgZGF0YSBzb3VyY2UncyBpZC5cbiAgICogQHBhcmFtIHNlcnZlcmxlc3NDbHVzdGVyIFRoZSBzZXJ2ZXJsZXNzIGNsdXN0ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcGFyYW0gc2VjcmV0U3RvcmUgVGhlIHNlY3JldCBzdG9yZSB0aGF0IGNvbnRhaW5zIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoZSBzZXJ2ZXJsZXNzIGNsdXN0ZXIuXG4gICAqIEBwYXJhbSBkYXRhYmFzZU5hbWUgVGhlIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIHVzZSB3aXRoaW4gdGhlIGNsdXN0ZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcmV0dXJucyB0aGUgZ2VuZXJhdGVkIGRhdGEgc291cmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFJkc0RhdGFTb3VyY2UoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzZXJ2ZXJsZXNzQ2x1c3RlcjogSVNlcnZlcmxlc3NDbHVzdGVyLFxuICAgIHNlY3JldFN0b3JlOiBJU2VjcmV0LFxuICAgIGRhdGFiYXNlTmFtZT86IHN0cmluZyxcbiAgICBvcHRpb25zPzogRGF0YVNvdXJjZU9wdGlvbnMsXG4gICk6IFJkc0RhdGFTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlcy5ncmFwaHFsQXBpLmFkZFJkc0RhdGFTb3VyY2UoaWQsIHNlcnZlcmxlc3NDbHVzdGVyLCBzZWNyZXRTdG9yZSwgZGF0YWJhc2VOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSByZXNvbHZlciB0byB0aGUgYXBpLiBUaGlzIGlzIGEgcHJveHkgbWV0aG9kIHRvIHRoZSBMMiBHcmFwaHFsQXBpIENvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIFRoZSByZXNvbHZlcidzIGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgdGhlIHJlc29sdmVyIHByb3BlcnRpZXMuXG4gICAqIEByZXR1cm5zIHRoZSBnZW5lcmF0ZWQgcmVzb2x2ZXIuXG4gICAqL1xuICBwdWJsaWMgYWRkUmVzb2x2ZXIoaWQ6IHN0cmluZywgcHJvcHM6IEV4dGVuZGVkUmVzb2x2ZXJQcm9wcyk6IFJlc29sdmVyIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXMuZ3JhcGhxbEFwaS5jcmVhdGVSZXNvbHZlcihpZCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhcHBzeW5jIGZ1bmN0aW9uIHRvIHRoZSBhcGkuXG4gICAqIEBwYXJhbSBpZCB0aGUgZnVuY3Rpb24ncyBpZC5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBhcHBzeW5jIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHVibGljIGFkZEZ1bmN0aW9uKGlkOiBzdHJpbmcsIHByb3BzOiBBZGRGdW5jdGlvblByb3BzKTogQXBwc3luY0Z1bmN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEFwcHN5bmNGdW5jdGlvbih0aGlzLCBpZCwge1xuICAgICAgYXBpOiB0aGlzLnJlc291cmNlcy5ncmFwaHFsQXBpLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiB0aGUgcHJvdmlkZWQgc2NvcGUsIHdhbGsgdGhlIG5vZGUgdHJlZSwgYW5kIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbnkgb3RoZXIgQW1wbGlmeUdyYXBocWxBcGkgY29uc3RydWN0c1xuICogYXJlIGZvdW5kIGluIHRoZSBzdGFjay5cbiAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgdGhpcyBjb25zdHJ1Y3QgaXMgY3JlYXRlZCBpbi5cbiAqL1xuY29uc3QgdmFsaWRhdGVOb090aGVyQW1wbGlmeUdyYXBocWxBcGlJblN0YWNrID0gKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkID0+IHtcbiAgY29uc3Qgcm9vdFN0YWNrID0gZ2V0U3RhY2tGb3JTY29wZShzY29wZSwgdHJ1ZSk7XG5cbiAgbGV0IHdhc090aGVyQW1wbGlmeUdyYXBobEFwaUZvdW5kID0gZmFsc2U7XG4gIHdhbGtBbmRQcm9jZXNzTm9kZXMocm9vdFN0YWNrLCAobm9kZTogQ29uc3RydWN0KSA9PiB7XG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBBbXBsaWZ5R3JhcGhxbEFwaSAmJiBzY29wZSAhPT0gbm9kZSkge1xuICAgICAgd2FzT3RoZXJBbXBsaWZ5R3JhcGhsQXBpRm91bmQgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHdhc090aGVyQW1wbGlmeUdyYXBobEFwaUZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IG9uZSBBbXBsaWZ5R3JhcGhxbEFwaSBpcyBleHBlY3RlZCBpbiBhIHN0YWNrJyk7XG4gIH1cbn07XG5cbmNvbnN0IGdldE1ldGFkYXRhRGF0YVNvdXJjZXMgPSAoZGVmaW5pdGlvbjogSUFtcGxpZnlHcmFwaHFsRGVmaW5pdGlvbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGRhdGFTb3VyY2VEYlR5cGVzID0gT2JqZWN0LnZhbHVlcyhkZWZpbml0aW9uLmRhdGFTb3VyY2VTdHJhdGVnaWVzKS5tYXAoKHN0cmF0ZWd5KSA9PiBzdHJhdGVneS5kYlR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSk7XG4gIGNvbnN0IGN1c3RvbVNxbERiVHlwZXMgPSAoZGVmaW5pdGlvbi5jdXN0b21TcWxEYXRhU291cmNlU3RyYXRlZ2llcyA/PyBbXSkubWFwKChzdHJhdGVneSkgPT4gc3RyYXRlZ3kuc3RyYXRlZ3kuZGJUeXBlLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICBjb25zdCBkYXRhU291cmNlcyA9IFsuLi5uZXcgU2V0KFsuLi5kYXRhU291cmNlRGJUeXBlcywgLi4uY3VzdG9tU3FsRGJUeXBlc10pXS5zb3J0KCk7XG4gIHJldHVybiBkYXRhU291cmNlcy5qb2luKCcsJyk7XG59O1xuIl19
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGlmeS1ncmFwaHFsLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hbXBsaWZ5LWdyYXBocWwtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLDJDQUF1QztBQUN2QywwRUFBNEY7QUFDNUYsNkNBQWlEO0FBQ2pELGdGQUE0SDtBQUM1SCxnRkFBdUU7QUFFdkUseURBY2lDO0FBUWpDLHNFQUE0RztBQVU1Ryx5Q0FVb0I7QUFDcEIsOERBQWtGO0FBQ2xGLHNFQUFnRjtBQUVoRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFhLGlCQUFrQixTQUFRLHNCQUFTO0lBK0M5Qzs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ3JFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFibkI7O1dBRUc7UUFDYyxjQUFTLEdBQUcsYUFBYSxDQUFDO1FBWXpDLHVDQUF1QyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlDLE1BQU0sRUFDSixVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsc0JBQXNCLEdBQ3ZCLEdBQUcsS0FBSyxDQUFDO1FBRVYsSUFBSSxrQkFBa0IsSUFBSSxzQkFBc0IsRUFBRTtZQUNoRCxNQUFNLElBQUksS0FBSyxDQUNiLDZJQUE2SSxDQUM5SSxDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLElBQUksa0JBQWtCLENBQUM7UUFFM0UsTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkQsSUFBSSxtREFBMEIsRUFBRSxDQUFDLHdCQUF3QixDQUFDLG1CQUFLLENB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QUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNoSSxNQUFNLGdCQUFnQixHQUFHLENBQUMsVUFBVSxDQUFDLDZCQUE2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQzFJLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRXhlY3V0ZVRyYW5zZm9ybUNvbmZpZywgZXhlY3V0ZVRyYW5zZm9ybSB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9ncmFwaHFsLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IE5lc3RlZFN0YWNrLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEF0dHJpYnV0aW9uTWV0YWRhdGFTdG9yYWdlLCBTdGFja01ldGFkYXRhQmFja2VuZE91dHB1dFN0b3JhZ2VTdHJhdGVneSB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9iYWNrZW5kLW91dHB1dC1zdG9yYWdlJztcbmltcG9ydCB7IGdyYXBocWxPdXRwdXRLZXkgfSBmcm9tICdAYXdzLWFtcGxpZnkvYmFja2VuZC1vdXRwdXQtc2NoZW1hcyc7XG5pbXBvcnQgdHlwZSB7IEdyYXBocWxPdXRwdXQsIEF3c0FwcHN5bmNBdXRoZW50aWNhdGlvblR5cGUgfSBmcm9tICdAYXdzLWFtcGxpZnkvYmFja2VuZC1vdXRwdXQtc2NoZW1hcyc7XG5pbXBvcnQge1xuICBBcHBzeW5jRnVuY3Rpb24sXG4gIERhdGFTb3VyY2VPcHRpb25zLFxuICBEeW5hbW9EYkRhdGFTb3VyY2UsXG4gIEVsYXN0aWNzZWFyY2hEYXRhU291cmNlLFxuICBFdmVudEJyaWRnZURhdGFTb3VyY2UsXG4gIEV4dGVuZGVkUmVzb2x2ZXJQcm9wcyxcbiAgSHR0cERhdGFTb3VyY2UsXG4gIEh0dHBEYXRhU291cmNlT3B0aW9ucyxcbiAgTGFtYmRhRGF0YVNvdXJjZSxcbiAgTm9uZURhdGFTb3VyY2UsXG4gIE9wZW5TZWFyY2hEYXRhU291cmNlLFxuICBSZHNEYXRhU291cmNlLFxuICBSZXNvbHZlcixcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwcHN5bmMnO1xuaW1wb3J0IHsgSVRhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiJztcbmltcG9ydCB7IElEb21haW4gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY3NlYXJjaCc7XG5pbXBvcnQgeyBJRG9tYWluIGFzIElPcGVuU2VhcmNoRG9tYWluIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW9wZW5zZWFyY2hzZXJ2aWNlJztcbmltcG9ydCB7IElFdmVudEJ1cyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0IHsgSUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJU2VydmVybGVzc0NsdXN0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtcmRzJztcbmltcG9ydCB7IElTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgcGFyc2VVc2VyRGVmaW5lZFNsb3RzLCB2YWxpZGF0ZUZ1bmN0aW9uU2xvdHMsIHNlcGFyYXRlU2xvdHMgfSBmcm9tICcuL2ludGVybmFsL3VzZXItZGVmaW5lZC1zbG90cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEFtcGxpZnlHcmFwaHFsQXBpUmVzb3VyY2VzLFxuICBBbXBsaWZ5R3JhcGhxbEFwaVByb3BzLFxuICBGdW5jdGlvblNsb3QsXG4gIElCYWNrZW5kT3V0cHV0U3RvcmFnZVN0cmF0ZWd5LFxuICBBZGRGdW5jdGlvblByb3BzLFxuICBEYXRhU3RvcmVDb25maWd1cmF0aW9uLFxuICBJQW1wbGlmeUdyYXBocWxEZWZpbml0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIGNvbnZlcnRBdXRob3JpemF0aW9uTW9kZXNUb1RyYW5zZm9ybWVyQXV0aENvbmZpZyxcbiAgY29udmVydFRvUmVzb2x2ZXJDb25maWcsXG4gIGRlZmF1bHRUcmFuc2xhdGlvbkJlaGF2aW9yLFxuICBBc3NldFByb3ZpZGVyLFxuICBnZXRHZW5lcmF0ZWRSZXNvdXJjZXMsXG4gIGdldEdlbmVyYXRlZEZ1bmN0aW9uU2xvdHMsXG4gIENvZGVnZW5Bc3NldHMsXG4gIGdldEFkZGl0aW9uYWxBdXRoZW50aWNhdGlvblR5cGVzLFxuICB2YWxpZGF0ZUF1dGhvcml6YXRpb25Nb2Rlcyxcbn0gZnJvbSAnLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBnZXRTdGFja0ZvclNjb3BlLCB3YWxrQW5kUHJvY2Vzc05vZGVzIH0gZnJvbSAnLi9pbnRlcm5hbC9jb25zdHJ1Y3QtdHJlZSc7XG5pbXBvcnQgeyBnZXREYXRhU291cmNlU3RyYXRlZ2llc1Byb3ZpZGVyIH0gZnJvbSAnLi9pbnRlcm5hbC9kYXRhLXNvdXJjZS1jb25maWcnO1xuXG4vKipcbiAqIEwzIENvbnN0cnVjdCB3aGljaCBpbnZva2VzIHRoZSBBbXBsaWZ5IFRyYW5zZm9ybWVyIFBhdHRlcm4gb3ZlciBhbiBpbnB1dCBHcmFwaHFsIFNjaGVtYS5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHF1aWNrbHkgZGVmaW5lIGFwcHN5bmMgYXBpcyB3aGljaCBzdXBwb3J0IGZ1bGwgQ1JVRCtMaXN0IGFuZCBTdWJzY3JpcHRpb25zLCByZWxhdGlvbnNoaXBzLFxuICogYXV0aCwgc2VhcmNoIG92ZXIgZGF0YSwgdGhlIGFiaWxpdHkgdG8gaW5qZWN0IGN1c3RvbSBidXNpbmVzcyBsb2dpYyBhbmQgcXVlcnkvbXV0YXRpb24gb3BlcmF0aW9ucywgYW5kIGNvbm5lY3QgdG8gTUwgc2VydmljZXMuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBkb2NzIGxpbmtzIGJlbG93OlxuICogRGF0YSBNb2RlbGluZyAtIGh0dHBzOi8vZG9jcy5hbXBsaWZ5LmF3cy9jbGkvZ3JhcGhxbC9kYXRhLW1vZGVsaW5nL1xuICogQXV0aG9yaXphdGlvbiAtIGh0dHBzOi8vZG9jcy5hbXBsaWZ5LmF3cy9jbGkvZ3JhcGhxbC9hdXRob3JpemF0aW9uLXJ1bGVzL1xuICogQ3VzdG9tIEJ1c2luZXNzIExvZ2ljIC0gaHR0cHM6Ly9kb2NzLmFtcGxpZnkuYXdzL2NsaS9ncmFwaHFsL2N1c3RvbS1idXNpbmVzcy1sb2dpYy9cbiAqIFNlYXJjaCAtIGh0dHBzOi8vZG9jcy5hbXBsaWZ5LmF3cy9jbGkvZ3JhcGhxbC9zZWFyY2gtYW5kLXJlc3VsdC1hZ2dyZWdhdGlvbnMvXG4gKiBNTCBTZXJ2aWNlcyAtIGh0dHBzOi8vZG9jcy5hbXBsaWZ5LmF3cy9jbGkvZ3JhcGhxbC9jb25uZWN0LXRvLW1hY2hpbmUtbGVhcm5pbmctc2VydmljZXMvXG4gKlxuICogRm9yIGEgZnVsbCByZWZlcmVuY2Ugb2YgdGhlIHN1cHBvcnRlZCBjdXN0b20gZ3JhcGhxbCBkaXJlY3RpdmVzIC0gaHR0cHM6Ly9kb2NzLmFtcGxpZnkuYXdzL2NsaS9ncmFwaHFsL2RpcmVjdGl2ZXMtcmVmZXJlbmNlL1xuICpcbiAqIFRoZSBvdXRwdXQgb2YgdGhpcyBjb25zdHJ1Y3QgaXMgYSBtYXBwaW5nIG9mIEwyIG9yIEwxIHJlc291cmNlcyBnZW5lcmF0ZWQgYnkgdGhlIHRyYW5zZm9ybWVyLCB3aGljaCBnZW5lcmFsbHkgZm9sbG93IHRoZSBhY2Nlc3MgcGF0dGVyblxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqICAgY29uc3QgYXBpID0gbmV3IEFtcGxpZnlHcmFwaFFsQXBpKHRoaXMsICdhcGknLCB7IDxwYXJhbXM+IH0pO1xuICogICAvLyBBY2Nlc3MgTDIgcmVzb3VyY2VzIHVuZGVyIGAucmVzb3VyY2VzYFxuICogICBhcGkucmVzb3VyY2VzLnRhYmxlc1tcIlRvZG9cIl0udGFibGVBcm47XG4gKlxuICogICAvLyBBY2Nlc3MgTDEgcmVzb3VyY2VzIHVuZGVyIGAucmVzb3VyY2VzLmNmblJlc291cmNlc2BcbiAqICAgYXBpLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuR3JhcGhxbEFwaS54cmF5RW5hYmxlZCA9IHRydWU7XG4gKiAgIE9iamVjdC52YWx1ZXMoYXBpLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuVGFibGVzKS5mb3JFYWNoKHRhYmxlID0+IHtcbiAqICAgICB0YWJsZS5wb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbiA9IHsgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IGZhbHNlIH07XG4gKiAgIH0pO1xuICogYGBgXG4gKiBgcmVzb3VyY2VzLjxSZXNvdXJjZVR5cGU+LjxSZXNvdXJjZU5hbWU+YCAtIHlvdSBjYW4gdGhlbiBwZXJmb3JtIGFueSBDREsgYWN0aW9uIG9uIHRoZXNlIHJlc3VsdGluZyByZXNvdXJlY2VzLlxuICovXG5leHBvcnQgY2xhc3MgQW1wbGlmeUdyYXBocWxBcGkgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogR2VuZXJhdGVkIEwxIGFuZCBMMiBDREsgcmVzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlczogQW1wbGlmeUdyYXBocWxBcGlSZXNvdXJjZXM7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlZCBhc3NldHMgcmVxdWlyZWQgZm9yIGNvZGVnZW4gc3RlcHMuIFBlcnNpc3RlZCBpbiBvcmRlciB0byByZW5kZXIgYXMgcGFydCBvZiB0aGUgb3V0cHV0IHN0cmF0ZWd5LlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlZ2VuQXNzZXRzOiBDb2RlZ2VuQXNzZXRzO1xuXG4gIC8qKlxuICAgKiBSZXNvbHZlcnMgZ2VuZXJhdGVkIGJ5IHRoZSB0cmFuc2Zvcm0gcHJvY2VzcywgcGVyc2lzdGVkIG9uIHRoZSBzaWRlIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUgcHVsbGluZyBhIG1hbmlmZXN0XG4gICAqIGZvciB0aGUgcHVycG9zZXMgb2YgaW5zcGVjdGluZyBhbmQgcHJvZHVjaW5nIG92ZXJyaWRlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBnZW5lcmF0ZWRGdW5jdGlvblNsb3RzOiBGdW5jdGlvblNsb3RbXTtcblxuICAvKipcbiAgICogR3JhcGhxbCBVUkwgRm9yIHRoZSBnZW5lcmF0ZWQgQVBJLiBNYXkgYmUgYSBDREsgVG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhcGhxbFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWFsdGltZSBVUkwgRm9yIHRoZSBnZW5lcmF0ZWQgQVBJLiBNYXkgYmUgYSBDREsgVG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVhbHRpbWVVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogR2VuZXJhdGVkIEFwaSBLZXkgaWYgZ2VuZXJhdGVkLiBNYXkgYmUgYSBDREsgVG9rZW4uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlZCBBcGkgSWQuIE1heSBiZSBhIENESyBUb2tlbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEYXRhU3RvcmUgY29uZmxpY3QgcmVzb2x1dGlvbiBzZXR0aW5nXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTdG9yZUNvbmZpZ3VyYXRpb246IERhdGFTdG9yZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEJlIHZlcnkgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgdmFsdWUuIFRoaXMgaXMgdGhlIHN0cmluZyB0aGF0IGlzIHVzZWQgdG8gaWRlbnRpZnkgZ3JhcGhxbCBzdGFja3MgaW4gQkkgbWV0cmljc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdGFja1R5cGUgPSAnYXBpLUFwcFN5bmMnO1xuXG4gIC8qKlxuICAgKiBOZXcgQW1wbGlmeUdyYXBocWxBcGkgY29uc3RydWN0LCB0aGlzIHdpbGwgY3JlYXRlIGFuIGFwcHN5bmMgYXBpIHdpdGggYXV0aG9yaXphdGlvbiwgYSBzY2hlbWEsIGFuZCBhbGwgbmVjZXNzYXJ5IHJlc29sdmVycywgZnVuY3Rpb25zLFxuICAgKiBhbmQgZGF0YXNvdXJjZXMuXG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgdG8gY3JlYXRlIHRoaXMgY29uc3RydWN0IHdpdGhpbi5cbiAgICogQHBhcmFtIGlkIHRoZSBpZCB0byB1c2UgZm9yIHRoaXMgYXBpLlxuICAgKiBAcGFyYW0gcHJvcHMgdGhlIHByb3BlcnRpZXMgdXNlZCB0byBjb25maWd1cmUgdGhlIGdlbmVyYXRlZCBhcGkuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQW1wbGlmeUdyYXBocWxBcGlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB2YWxpZGF0ZU5vT3RoZXJBbXBsaWZ5R3JhcGhxbEFwaUluU3RhY2sodGhpcyk7XG5cbiAgICBjb25zdCB7XG4gICAgICBkZWZpbml0aW9uLFxuICAgICAgYXV0aG9yaXphdGlvbk1vZGVzLFxuICAgICAgY29uZmxpY3RSZXNvbHV0aW9uLFxuICAgICAgZnVuY3Rpb25TbG90cyxcbiAgICAgIHRyYW5zZm9ybWVyUGx1Z2lucyxcbiAgICAgIHByZWRpY3Rpb25zQnVja2V0LFxuICAgICAgc3RhY2tNYXBwaW5ncyxcbiAgICAgIHRyYW5zbGF0aW9uQmVoYXZpb3IsXG4gICAgICBmdW5jdGlvbk5hbWVNYXAsXG4gICAgICBvdXRwdXRTdG9yYWdlU3RyYXRlZ3ksXG4gICAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLFxuICAgIH0gPSBwcm9wcztcblxuICAgIGlmIChjb25mbGljdFJlc29sdXRpb24gJiYgZGF0YVN0b3JlQ29uZmlndXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgY29uZmxpY3RSZXNvbHV0aW9uIGlzIGRlcHJlY2F0ZWQuIGNvbmZsaWN0UmVzb2x1dGlvbiBhbmQgZGF0YVN0b3JlQ29uZmlndXJhdGlvbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBkYXRhU3RvcmVDb25maWd1cmF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gfHwgY29uZmxpY3RSZXNvbHV0aW9uO1xuXG4gICAgY29uc3QgZGF0YVNvdXJjZXMgPSBnZXRNZXRhZGF0YURhdGFTb3VyY2VzKGRlZmluaXRpb24pO1xuXG4gICAgbmV3IEF0dHJpYnV0aW9uTWV0YWRhdGFTdG9yYWdlKCkuc3RvcmVBdHRyaWJ1dGlvbk1ldGFkYXRhKFN0YWNrLm9mKHNjb3BlKSwgdGhpcy5zdGFja1R5cGUsIHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdwYWNrYWdlLmpzb24nKSwge1xuICAgICAgZGF0YVNvdXJjZXMsXG4gICAgfSk7XG5cbiAgICB2YWxpZGF0ZUF1dGhvcml6YXRpb25Nb2RlcyhhdXRob3JpemF0aW9uTW9kZXMpO1xuICAgIGNvbnN0IHsgYXV0aENvbmZpZywgYXV0aFN5bnRoUGFyYW1ldGVycyB9ID0gY29udmVydEF1dGhvcml6YXRpb25Nb2Rlc1RvVHJhbnNmb3JtZXJBdXRoQ29uZmlnKGF1dGhvcml6YXRpb25Nb2Rlcyk7XG5cbiAgICB2YWxpZGF0ZUZ1bmN0aW9uU2xvdHMoZnVuY3Rpb25TbG90cyA/PyBbXSk7XG4gICAgY29uc3Qgc2VwYXJhdGVkRnVuY3Rpb25TbG90cyA9IHNlcGFyYXRlU2xvdHMoWy4uLihmdW5jdGlvblNsb3RzID8/IFtdKSwgLi4uZGVmaW5pdGlvbi5mdW5jdGlvblNsb3RzXSk7XG5cbiAgICAvLyBBbGxvdyBhbXBsaWZ5RW52aXJvbm1lbnROYW1lIHRvIGJlIHJldHJpZXZlIGZyb20gY29udGV4dCwgYW5kIHVzZSB2YWx1ZSAnTk9ORScgaWYgbm8gdmFsdWUgY2FuIGJlIGZvdW5kLlxuICAgIC8vIGFtcGxpZnlFbnZpcm9ubWVudE5hbWUgaXMgcmVxdWlyZWQgZm9yIGxvZ2ljYWwgaWQgc3VmZml4aW5nLCBhcyB3ZWxsIGFzIEV4cG9ydHMgZnJvbSB0aGUgbmVzdGVkIHN0YWNrcy5cbiAgICAvLyBBbGxvdyBleHBvcnQgc28gY3VzdG9tZXJzIGNhbiByZXVzZSB0aGUgZW52IGluIHRoZWlyIG93biByZWZlcmVuY2VzIGRvd25zdHJlYW0uXG4gICAgY29uc3QgYW1wbGlmeUVudmlyb25tZW50TmFtZSA9IHRoaXMubm9kZS50cnlHZXRDb250ZXh0KCdhbXBsaWZ5RW52aXJvbm1lbnROYW1lJykgPz8gJ05PTkUnO1xuICAgIGlmIChhbXBsaWZ5RW52aXJvbm1lbnROYW1lLmxlbmd0aCA+IDgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgb3IgY2RrIC0tY29udGV4dCBlbnYgbXVzdCBoYXZlIGEgbGVuZ3RoIDw9IDgsIGZvdW5kICR7YW1wbGlmeUVudmlyb25tZW50TmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3NldFByb3ZpZGVyID0gbmV3IEFzc2V0UHJvdmlkZXIodGhpcyk7XG5cbiAgICBjb25zdCBleGVjdXRlVHJhbnNmb3JtQ29uZmlnOiBFeGVjdXRlVHJhbnNmb3JtQ29uZmlnID0ge1xuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICBuZXN0ZWRTdGFja1Byb3ZpZGVyOiB7XG4gICAgICAgIHByb3ZpZGU6IChuZXN0ZWRTdGFja1Njb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZykgPT4gbmV3IE5lc3RlZFN0YWNrKG5lc3RlZFN0YWNrU2NvcGUsIG5hbWUpLFxuICAgICAgfSxcbiAgICAgIGFzc2V0UHJvdmlkZXIsXG4gICAgICBzeW50aFBhcmFtZXRlcnM6IHtcbiAgICAgICAgYW1wbGlmeUVudmlyb25tZW50TmFtZTogYW1wbGlmeUVudmlyb25tZW50TmFtZSxcbiAgICAgICAgYXBpTmFtZTogcHJvcHMuYXBpTmFtZSA/PyBpZCxcbiAgICAgICAgLi4uYXV0aFN5bnRoUGFyYW1ldGVycyxcbiAgICAgIH0sXG4gICAgICBzY2hlbWE6IGRlZmluaXRpb24uc2NoZW1hLFxuICAgICAgdXNlckRlZmluZWRTbG90czogcGFyc2VVc2VyRGVmaW5lZFNsb3RzKHNlcGFyYXRlZEZ1bmN0aW9uU2xvdHMpLFxuICAgICAgdHJhbnNmb3JtZXJzRmFjdG9yeUFyZ3M6IHtcbiAgICAgICAgY3VzdG9tVHJhbnNmb3JtZXJzOiB0cmFuc2Zvcm1lclBsdWdpbnMgPz8gW10sXG4gICAgICAgIC4uLihwcmVkaWN0aW9uc0J1Y2tldCA/IHsgc3RvcmFnZUNvbmZpZzogeyBidWNrZXROYW1lOiBwcmVkaWN0aW9uc0J1Y2tldC5idWNrZXROYW1lIH0gfSA6IHt9KSxcbiAgICAgICAgZnVuY3Rpb25OYW1lTWFwOiB7XG4gICAgICAgICAgLi4uZGVmaW5pdGlvbi5yZWZlcmVuY2VkTGFtYmRhRnVuY3Rpb25zLFxuICAgICAgICAgIC4uLmZ1bmN0aW9uTmFtZU1hcCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhdXRoQ29uZmlnLFxuICAgICAgc3RhY2tNYXBwaW5nOiBzdGFja01hcHBpbmdzID8/IHt9LFxuICAgICAgcmVzb2x2ZXJDb25maWc6IHRoaXMuZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA/IGNvbnZlcnRUb1Jlc29sdmVyQ29uZmlnKHRoaXMuZGF0YVN0b3JlQ29uZmlndXJhdGlvbikgOiB1bmRlZmluZWQsXG4gICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXJzOiB7XG4gICAgICAgIC4uLmRlZmF1bHRUcmFuc2xhdGlvbkJlaGF2aW9yLFxuICAgICAgICAuLi4odHJhbnNsYXRpb25CZWhhdmlvciA/PyB7fSksXG4gICAgICB9LFxuICAgICAgLy8gQ0RLIGNvbnN0cnVjdCB1c2VzIGEgY3VzdG9tIHJlc291cmNlLiBXZSdsbCBkZWZpbmUgdGhpcyBleHBsaWNpdGx5IGhlcmUgdG8gcmVtaW5kIG91cnNlbHZlcyB0aGF0IHRoaXMgdmFsdWUgaXMgdW51c2VkIGluIHRoZSBDREtcbiAgICAgIC8vIGNvbnN0cnVjdCBmbG93XG4gICAgICByZHNMYXllck1hcHBpbmc6IHVuZGVmaW5lZCxcbiAgICAgIHJkc1Nuc1RvcGljTWFwcGluZzogdW5kZWZpbmVkLFxuICAgICAgLi4uZ2V0RGF0YVNvdXJjZVN0cmF0ZWdpZXNQcm92aWRlcihkZWZpbml0aW9uKSxcbiAgICB9O1xuXG4gICAgZXhlY3V0ZVRyYW5zZm9ybShleGVjdXRlVHJhbnNmb3JtQ29uZmlnKTtcblxuICAgIHRoaXMuY29kZWdlbkFzc2V0cyA9IG5ldyBDb2RlZ2VuQXNzZXRzKHRoaXMsICdBbXBsaWZ5Q29kZWdlbkFzc2V0cycsIHsgbW9kZWxTY2hlbWE6IGRlZmluaXRpb24uc2NoZW1hIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMgPSBnZXRHZW5lcmF0ZWRSZXNvdXJjZXModGhpcyk7XG4gICAgdGhpcy5nZW5lcmF0ZWRGdW5jdGlvblNsb3RzID0gZ2V0R2VuZXJhdGVkRnVuY3Rpb25TbG90cyhhc3NldFByb3ZpZGVyLnJlc29sdmVyQXNzZXRzKTtcbiAgICB0aGlzLnN0b3JlT3V0cHV0KG91dHB1dFN0b3JhZ2VTdHJhdGVneSk7XG5cbiAgICB0aGlzLmFwaUlkID0gdGhpcy5yZXNvdXJjZXMuY2ZuUmVzb3VyY2VzLmNmbkdyYXBocWxBcGkuYXR0ckFwaUlkO1xuICAgIHRoaXMuZ3JhcGhxbFVybCA9IHRoaXMucmVzb3VyY2VzLmNmblJlc291cmNlcy5jZm5HcmFwaHFsQXBpLmF0dHJHcmFwaFFsVXJsO1xuICAgIHRoaXMucmVhbHRpbWVVcmwgPSB0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuR3JhcGhxbEFwaS5hdHRyUmVhbHRpbWVVcmw7XG4gICAgdGhpcy5hcGlLZXkgPSB0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuQXBpS2V5Py5hdHRyQXBpS2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBncmFwaHFsIGFwaSBvdXRwdXQgdG8gYmUgdXNlZCBmb3IgY2xpZW50IGNvbmZpZyBnZW5lcmF0aW9uXG4gICAqIEBwYXJhbSBvdXRwdXRTdG9yYWdlU3RyYXRlZ3kgU3RyYXRlZ3kgdG8gc3RvcmUgY29uc3RydWN0IG91dHB1dHMuIElmIG5vIHN0cmF0ZWd5IGlzIHByb3ZpZGVkIGEgZGVmYXVsdCBzdHJhdGVneSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBwcml2YXRlIHN0b3JlT3V0cHV0KFxuICAgIG91dHB1dFN0b3JhZ2VTdHJhdGVneTogSUJhY2tlbmRPdXRwdXRTdG9yYWdlU3RyYXRlZ3kgPSBuZXcgU3RhY2tNZXRhZGF0YUJhY2tlbmRPdXRwdXRTdG9yYWdlU3RyYXRlZ3koU3RhY2sub2YodGhpcykpLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IG91dHB1dDogR3JhcGhxbE91dHB1dCA9IHtcbiAgICAgIHZlcnNpb246ICcxJyxcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgYXdzQXBwc3luY0FwaUlkOiB0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuR3JhcGhxbEFwaS5hdHRyQXBpSWQsXG4gICAgICAgIGF3c0FwcHN5bmNBcGlFbmRwb2ludDogdGhpcy5yZXNvdXJjZXMuY2ZuUmVzb3VyY2VzLmNmbkdyYXBocWxBcGkuYXR0ckdyYXBoUWxVcmwsXG4gICAgICAgIGF3c0FwcHN5bmNBdXRoZW50aWNhdGlvblR5cGU6IHRoaXMucmVzb3VyY2VzLmNmblJlc291cmNlcy5jZm5HcmFwaHFsQXBpLmF1dGhlbnRpY2F0aW9uVHlwZSBhcyBBd3NBcHBzeW5jQXV0aGVudGljYXRpb25UeXBlLFxuICAgICAgICBhd3NBcHBzeW5jUmVnaW9uOiBzdGFjay5yZWdpb24sXG4gICAgICAgIGFtcGxpZnlBcGlNb2RlbFNjaGVtYVMzVXJpOiB0aGlzLmNvZGVnZW5Bc3NldHMubW9kZWxTY2hlbWFTM1VyaSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuQXBpS2V5KSB7XG4gICAgICBvdXRwdXQucGF5bG9hZC5hd3NBcHBzeW5jQXBpS2V5ID0gdGhpcy5yZXNvdXJjZXMuY2ZuUmVzb3VyY2VzLmNmbkFwaUtleS5hdHRyQXBpS2V5O1xuICAgIH1cblxuICAgIGNvbnN0IGFkZGl0aW9uYWxBdXRoVHlwZXMgPSBnZXRBZGRpdGlvbmFsQXV0aGVudGljYXRpb25UeXBlcyh0aGlzLnJlc291cmNlcy5jZm5SZXNvdXJjZXMuY2ZuR3JhcGhxbEFwaSk7XG4gICAgaWYgKGFkZGl0aW9uYWxBdXRoVHlwZXMpIHtcbiAgICAgIG91dHB1dC5wYXlsb2FkLmF3c0FwcHN5bmNBZGRpdGlvbmFsQXV0aGVudGljYXRpb25UeXBlcyA9IGFkZGl0aW9uYWxBdXRoVHlwZXM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YVN0b3JlQ29uZmlndXJhdGlvbj8ucHJvamVjdD8uaGFuZGxlclR5cGUpIHtcbiAgICAgIG91dHB1dC5wYXlsb2FkLmF3c0FwcHN5bmNDb25mbGljdFJlc29sdXRpb25Nb2RlID0gdGhpcy5kYXRhU3RvcmVDb25maWd1cmF0aW9uPy5wcm9qZWN0Py5oYW5kbGVyVHlwZTtcbiAgICB9XG5cbiAgICBvdXRwdXRTdG9yYWdlU3RyYXRlZ3kuYWRkQmFja2VuZE91dHB1dEVudHJ5KGdyYXBocWxPdXRwdXRLZXksIG91dHB1dCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGxvd2luZyBhcmUgcHJveHkgbWV0aG9kcyB0byB0aGUgTDIgSUdyYXBocWxBcGkgaW50ZXJmYWNlLCB0byBmYWNpbGl0YXRlIGVhc2llciB1c2Ugb2YgdGhlIEwzIHdpdGhvdXQgbmVlZGluZ1xuICAgKiB0byBhY2Nlc3MgdGhlIHVuZGVybHlpbmcgcmVzb3VyY2VzLlxuICAgKi9cblxuICAvKipcbiAgICogQWRkIGEgbmV3IER5bmFtb0RCIGRhdGEgc291cmNlIHRvIHRoaXMgQVBJLiBUaGlzIGlzIGEgcHJveHkgbWV0aG9kIHRvIHRoZSBMMiBHcmFwaHFsQXBpIENvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIFRoZSBkYXRhIHNvdXJjZSdzIGlkLlxuICAgKiBAcGFyYW0gdGFibGUgVGhlIER5bmFtb0RCIHRhYmxlIGJhY2tpbmcgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGF0YSBzb3VyY2UuXG4gICAqIEByZXR1cm5zIHRoZSBnZW5lcmF0ZWQgZGF0YSBzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRHluYW1vRGJEYXRhU291cmNlKGlkOiBzdHJpbmcsIHRhYmxlOiBJVGFibGUsIG9wdGlvbnM/OiBEYXRhU291cmNlT3B0aW9ucyk6IER5bmFtb0RiRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmdyYXBocWxBcGkuYWRkRHluYW1vRGJEYXRhU291cmNlKGlkLCB0YWJsZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGVsYXN0aWNzZWFyY2ggZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGFkZE9wZW5TZWFyY2hEYXRhU291cmNlYFxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBkb21haW4gVGhlIGVsYXN0aWNzZWFyY2ggZG9tYWluIGZvciB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBkYXRhIHNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFbGFzdGljc2VhcmNoRGF0YVNvdXJjZShpZDogc3RyaW5nLCBkb21haW46IElEb21haW4sIG9wdGlvbnM/OiBEYXRhU291cmNlT3B0aW9ucyk6IEVsYXN0aWNzZWFyY2hEYXRhU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXMuZ3JhcGhxbEFwaS5hZGRFbGFzdGljc2VhcmNoRGF0YVNvdXJjZShpZCwgZG9tYWluLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gRXZlbnRCcmlkZ2UgZGF0YSBzb3VyY2UgdG8gdGhpcyBhcGkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBldmVudEJ1cyBUaGUgRXZlbnRCcmlkZ2UgRXZlbnRCdXMgb24gd2hpY2ggdG8gcHV0IGV2ZW50cy5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGF0YSBzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkRXZlbnRCcmlkZ2VEYXRhU291cmNlKGlkOiBzdHJpbmcsIGV2ZW50QnVzOiBJRXZlbnRCdXMsIG9wdGlvbnM/OiBEYXRhU291cmNlT3B0aW9ucyk6IEV2ZW50QnJpZGdlRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmdyYXBocWxBcGkuYWRkRXZlbnRCcmlkZ2VEYXRhU291cmNlKGlkLCBldmVudEJ1cywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGh0dHAgZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBlbmRwb2ludCBUaGUgaHR0cCBlbmRwb2ludC5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGF0YSBzb3VyY2UuXG4gICAqIEByZXR1cm5zIHRoZSBnZW5lcmF0ZWQgZGF0YSBzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgYWRkSHR0cERhdGFTb3VyY2UoaWQ6IHN0cmluZywgZW5kcG9pbnQ6IHN0cmluZywgb3B0aW9ucz86IEh0dHBEYXRhU291cmNlT3B0aW9ucyk6IEh0dHBEYXRhU291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXMuZ3JhcGhxbEFwaS5hZGRIdHRwRGF0YVNvdXJjZShpZCwgZW5kcG9pbnQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBMYW1iZGEgZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBsYW1iZGFGdW5jdGlvbiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGNhbGwgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBkYXRhIHNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGRMYW1iZGFEYXRhU291cmNlKGlkOiBzdHJpbmcsIGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb24sIG9wdGlvbnM/OiBEYXRhU291cmNlT3B0aW9ucyk6IExhbWJkYURhdGFTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlcy5ncmFwaHFsQXBpLmFkZExhbWJkYURhdGFTb3VyY2UoaWQsIGxhbWJkYUZ1bmN0aW9uLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgZHVtbXkgZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBVc2VmdWwgZm9yIHBpcGVsaW5lIHJlc29sdmVycyBhbmQgZm9yIGJhY2tlbmQgY2hhbmdlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBkYXRhIHNvdXJjZS5cbiAgICogQHBhcmFtIGlkIFRoZSBkYXRhIHNvdXJjZSdzIGlkLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBkYXRhIHNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGROb25lRGF0YVNvdXJjZShpZDogc3RyaW5nLCBvcHRpb25zPzogRGF0YVNvdXJjZU9wdGlvbnMpOiBOb25lRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmdyYXBocWxBcGkuYWRkTm9uZURhdGFTb3VyY2UoaWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIGRkIGEgbmV3IE9wZW5TZWFyY2ggZGF0YSBzb3VyY2UgdG8gdGhpcyBBUEkuIFRoaXMgaXMgYSBwcm94eSBtZXRob2QgdG8gdGhlIEwyIEdyYXBocWxBcGkgQ29uc3RydWN0LlxuICAgKiBAcGFyYW0gaWQgVGhlIGRhdGEgc291cmNlJ3MgaWQuXG4gICAqIEBwYXJhbSBkb21haW4gVGhlIE9wZW5TZWFyY2ggZG9tYWluIGZvciB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkYXRhIHNvdXJjZS5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBkYXRhIHNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBhZGRPcGVuU2VhcmNoRGF0YVNvdXJjZShpZDogc3RyaW5nLCBkb21haW46IElPcGVuU2VhcmNoRG9tYWluLCBvcHRpb25zPzogRGF0YVNvdXJjZU9wdGlvbnMpOiBPcGVuU2VhcmNoRGF0YVNvdXJjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzLmdyYXBocWxBcGkuYWRkT3BlblNlYXJjaERhdGFTb3VyY2UoaWQsIGRvbWFpbiwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IFJkcyBkYXRhIHNvdXJjZSB0byB0aGlzIEFQSS4gVGhpcyBpcyBhIHByb3h5IG1ldGhvZCB0byB0aGUgTDIgR3JhcGhxbEFwaSBDb25zdHJ1Y3QuXG4gICAqIEBwYXJhbSBpZCBUaGUgZGF0YSBzb3VyY2UncyBpZC5cbiAgICogQHBhcmFtIHNlcnZlcmxlc3NDbHVzdGVyIFRoZSBzZXJ2ZXJsZXNzIGNsdXN0ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcGFyYW0gc2VjcmV0U3RvcmUgVGhlIHNlY3JldCBzdG9yZSB0aGF0IGNvbnRhaW5zIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoZSBzZXJ2ZXJsZXNzIGNsdXN0ZXIuXG4gICAqIEBwYXJhbSBkYXRhYmFzZU5hbWUgVGhlIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGRhdGFiYXNlIHRvIHVzZSB3aXRoaW4gdGhlIGNsdXN0ZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGlzIGRhdGEgc291cmNlLlxuICAgKiBAcmV0dXJucyB0aGUgZ2VuZXJhdGVkIGRhdGEgc291cmNlLlxuICAgKi9cbiAgcHVibGljIGFkZFJkc0RhdGFTb3VyY2UoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzZXJ2ZXJsZXNzQ2x1c3RlcjogSVNlcnZlcmxlc3NDbHVzdGVyLFxuICAgIHNlY3JldFN0b3JlOiBJU2VjcmV0LFxuICAgIGRhdGFiYXNlTmFtZT86IHN0cmluZyxcbiAgICBvcHRpb25zPzogRGF0YVNvdXJjZU9wdGlvbnMsXG4gICk6IFJkc0RhdGFTb3VyY2Uge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlcy5ncmFwaHFsQXBpLmFkZFJkc0RhdGFTb3VyY2UoaWQsIHNlcnZlcmxlc3NDbHVzdGVyLCBzZWNyZXRTdG9yZSwgZGF0YWJhc2VOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSByZXNvbHZlciB0byB0aGUgYXBpLiBUaGlzIGlzIGEgcHJveHkgbWV0aG9kIHRvIHRoZSBMMiBHcmFwaHFsQXBpIENvbnN0cnVjdC5cbiAgICogQHBhcmFtIGlkIFRoZSByZXNvbHZlcidzIGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgdGhlIHJlc29sdmVyIHByb3BlcnRpZXMuXG4gICAqIEByZXR1cm5zIHRoZSBnZW5lcmF0ZWQgcmVzb2x2ZXIuXG4gICAqL1xuICBwdWJsaWMgYWRkUmVzb2x2ZXIoaWQ6IHN0cmluZywgcHJvcHM6IEV4dGVuZGVkUmVzb2x2ZXJQcm9wcyk6IFJlc29sdmVyIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZXMuZ3JhcGhxbEFwaS5jcmVhdGVSZXNvbHZlcihpZCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhcHBzeW5jIGZ1bmN0aW9uIHRvIHRoZSBhcGkuXG4gICAqIEBwYXJhbSBpZCB0aGUgZnVuY3Rpb24ncyBpZC5cbiAgICogQHJldHVybnMgdGhlIGdlbmVyYXRlZCBhcHBzeW5jIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHVibGljIGFkZEZ1bmN0aW9uKGlkOiBzdHJpbmcsIHByb3BzOiBBZGRGdW5jdGlvblByb3BzKTogQXBwc3luY0Z1bmN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEFwcHN5bmNGdW5jdGlvbih0aGlzLCBpZCwge1xuICAgICAgYXBpOiB0aGlzLnJlc291cmNlcy5ncmFwaHFsQXBpLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiB0aGUgcHJvdmlkZWQgc2NvcGUsIHdhbGsgdGhlIG5vZGUgdHJlZSwgYW5kIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbnkgb3RoZXIgQW1wbGlmeUdyYXBocWxBcGkgY29uc3RydWN0c1xuICogYXJlIGZvdW5kIGluIHRoZSBzdGFjay5cbiAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgdGhpcyBjb25zdHJ1Y3QgaXMgY3JlYXRlZCBpbi5cbiAqL1xuY29uc3QgdmFsaWRhdGVOb090aGVyQW1wbGlmeUdyYXBocWxBcGlJblN0YWNrID0gKHNjb3BlOiBDb25zdHJ1Y3QpOiB2b2lkID0+IHtcbiAgY29uc3Qgcm9vdFN0YWNrID0gZ2V0U3RhY2tGb3JTY29wZShzY29wZSwgZmFsc2UpO1xuXG4gIGxldCB3YXNPdGhlckFtcGxpZnlHcmFwaGxBcGlGb3VuZCA9IGZhbHNlO1xuICB3YWxrQW5kUHJvY2Vzc05vZGVzKHJvb3RTdGFjaywgKG5vZGU6IENvbnN0cnVjdCkgPT4ge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgQW1wbGlmeUdyYXBocWxBcGkgJiYgc2NvcGUgIT09IG5vZGUpIHtcbiAgICAgIHdhc090aGVyQW1wbGlmeUdyYXBobEFwaUZvdW5kID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh3YXNPdGhlckFtcGxpZnlHcmFwaGxBcGlGb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgQW1wbGlmeUdyYXBocWxBcGkgaXMgZXhwZWN0ZWQgaW4gYSBzdGFjay4gUGxhY2UgdGhlIEFtcGxpZnlHcmFwaHFsQXBpcyBpbiBzZXBhcmF0ZSBuZXN0ZWQgc3RhY2tzLicpO1xuICB9XG59O1xuXG5jb25zdCBnZXRNZXRhZGF0YURhdGFTb3VyY2VzID0gKGRlZmluaXRpb246IElBbXBsaWZ5R3JhcGhxbERlZmluaXRpb24pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBkYXRhU291cmNlRGJUeXBlcyA9IE9iamVjdC52YWx1ZXMoZGVmaW5pdGlvbi5kYXRhU291cmNlU3RyYXRlZ2llcykubWFwKChzdHJhdGVneSkgPT4gc3RyYXRlZ3kuZGJUeXBlLnRvTG9jYWxlTG93ZXJDYXNlKCkpO1xuICBjb25zdCBjdXN0b21TcWxEYlR5cGVzID0gKGRlZmluaXRpb24uY3VzdG9tU3FsRGF0YVNvdXJjZVN0cmF0ZWdpZXMgPz8gW10pLm1hcCgoc3RyYXRlZ3kpID0+IHN0cmF0ZWd5LnN0cmF0ZWd5LmRiVHlwZS50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcbiAgY29uc3QgZGF0YVNvdXJjZXMgPSBbLi4ubmV3IFNldChbLi4uZGF0YVNvdXJjZURiVHlwZXMsIC4uLmN1c3RvbVNxbERiVHlwZXNdKV0uc29ydCgpO1xuICByZXR1cm4gZGF0YVNvdXJjZXMuam9pbignLCcpO1xufTtcbiJdfQ==