projen 0.52.20 → 0.52.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/.jsii +27 -27
  2. package/README.md +19 -19
  3. package/changelog.md +1 -1
  4. package/docs/README.md +1 -0
  5. package/docs/api/API.md +1 -1
  6. package/docs/github.md +1 -1
  7. package/lib/awscdk/auto-discover.d.ts +14 -46
  8. package/lib/awscdk/auto-discover.js +8 -22
  9. package/lib/awscdk/awscdk-app-java.d.ts +10 -32
  10. package/lib/awscdk/awscdk-app-java.js +5 -9
  11. package/lib/awscdk/awscdk-app-ts.d.ts +15 -35
  12. package/lib/awscdk/awscdk-app-ts.js +6 -14
  13. package/lib/awscdk/awscdk-construct.d.ts +14 -28
  14. package/lib/awscdk/awscdk-construct.js +8 -16
  15. package/lib/awscdk/awscdk-deps-java.d.ts +1 -8
  16. package/lib/awscdk/awscdk-deps-java.js +3 -10
  17. package/lib/awscdk/awscdk-deps-js.d.ts +1 -8
  18. package/lib/awscdk/awscdk-deps-js.js +3 -10
  19. package/lib/awscdk/awscdk-deps.d.ts +28 -67
  20. package/lib/awscdk/awscdk-deps.js +5 -12
  21. package/lib/awscdk/cdk-config.d.ts +19 -51
  22. package/lib/awscdk/cdk-config.js +13 -11
  23. package/lib/awscdk/cdk-tasks.d.ts +7 -24
  24. package/lib/awscdk/cdk-tasks.js +3 -8
  25. package/lib/awscdk/integration-test.d.ts +7 -29
  26. package/lib/awscdk/integration-test.js +3 -8
  27. package/lib/awscdk/lambda-function.d.ts +22 -50
  28. package/lib/awscdk/lambda-function.js +11 -24
  29. package/lib/build/build-workflow.d.ts +33 -78
  30. package/lib/build/build-workflow.js +15 -25
  31. package/lib/cdk/auto-discover-base.d.ts +11 -34
  32. package/lib/cdk/auto-discover-base.js +5 -15
  33. package/lib/cdk/construct-lib.d.ts +8 -22
  34. package/lib/cdk/construct-lib.js +3 -8
  35. package/lib/cdk/integration-test-base.d.ts +12 -38
  36. package/lib/cdk/integration-test-base.js +2 -8
  37. package/lib/cdk/jsii-docgen.d.ts +6 -12
  38. package/lib/cdk/jsii-docgen.js +6 -8
  39. package/lib/cdk/jsii-project.d.ts +16 -95
  40. package/lib/cdk/jsii-project.js +3 -10
  41. package/lib/cdk8s/auto-discover.d.ts +6 -23
  42. package/lib/cdk8s/auto-discover.js +6 -15
  43. package/lib/cdk8s/cdk8s-app-ts.d.ts +21 -43
  44. package/lib/cdk8s/cdk8s-app-ts.js +4 -7
  45. package/lib/cdk8s/cdk8s-construct.d.ts +12 -27
  46. package/lib/cdk8s/cdk8s-construct.js +3 -7
  47. package/lib/cdk8s/integration-test.d.ts +2 -9
  48. package/lib/cdk8s/integration-test.js +3 -8
  49. package/lib/cdktf/cdktf-construct.d.ts +3 -12
  50. package/lib/cdktf/cdktf-construct.js +3 -7
  51. package/lib/component.d.ts +4 -17
  52. package/lib/component.js +6 -19
  53. package/lib/dependencies.d.ts +44 -77
  54. package/lib/dependencies.js +50 -38
  55. package/lib/dev-env.d.ts +26 -53
  56. package/lib/dev-env.js +9 -19
  57. package/lib/docker-compose.d.ts +83 -209
  58. package/lib/docker-compose.js +38 -61
  59. package/lib/file.d.ts +24 -71
  60. package/lib/file.js +4 -16
  61. package/lib/gitattributes.d.ts +3 -14
  62. package/lib/gitattributes.js +5 -16
  63. package/lib/github/auto-approve.d.ts +7 -23
  64. package/lib/github/auto-approve.js +3 -8
  65. package/lib/github/auto-merge.d.ts +7 -29
  66. package/lib/github/auto-merge.js +7 -16
  67. package/lib/github/dependabot.d.ts +54 -147
  68. package/lib/github/dependabot.js +81 -22
  69. package/lib/github/github-project.d.ts +26 -70
  70. package/lib/github/github-project.js +5 -10
  71. package/lib/github/github.d.ts +19 -58
  72. package/lib/github/github.js +9 -30
  73. package/lib/github/mergify.d.ts +9 -54
  74. package/lib/github/mergify.js +2 -14
  75. package/lib/github/pr-template.d.ts +3 -13
  76. package/lib/github/pr-template.js +3 -8
  77. package/lib/github/pull-request-lint.d.ts +8 -28
  78. package/lib/github/pull-request-lint.js +3 -9
  79. package/lib/github/stale.d.ts +17 -47
  80. package/lib/github/stale.js +6 -10
  81. package/lib/github/task-workflow.d.ts +21 -63
  82. package/lib/github/task-workflow.js +3 -8
  83. package/lib/github/workflows-model.d.ts +199 -582
  84. package/lib/github/workflows-model.js +5 -4
  85. package/lib/github/workflows.d.ts +14 -41
  86. package/lib/github/workflows.js +8 -16
  87. package/lib/gitlab/configuration-model.d.ts +145 -947
  88. package/lib/gitlab/configuration-model.js +11 -28
  89. package/lib/gitlab/configuration.d.ts +31 -121
  90. package/lib/gitlab/configuration.js +14 -49
  91. package/lib/gitlab/gitlab-configuration.d.ts +2 -13
  92. package/lib/gitlab/gitlab-configuration.js +4 -15
  93. package/lib/gitlab/nested-configuration.d.ts +1 -9
  94. package/lib/gitlab/nested-configuration.js +3 -8
  95. package/lib/gitpod.d.ts +71 -167
  96. package/lib/gitpod.js +75 -42
  97. package/lib/ignore-file.d.ts +4 -23
  98. package/lib/ignore-file.js +6 -25
  99. package/lib/ini.d.ts +2 -14
  100. package/lib/ini.js +3 -13
  101. package/lib/inventory.js +2 -2
  102. package/lib/java/java-project.d.ts +29 -70
  103. package/lib/java/java-project.js +10 -17
  104. package/lib/java/junit.d.ts +5 -17
  105. package/lib/java/junit.js +3 -8
  106. package/lib/java/maven-compile.d.ts +4 -13
  107. package/lib/java/maven-compile.js +3 -8
  108. package/lib/java/maven-packaging.d.ts +6 -21
  109. package/lib/java/maven-packaging.js +3 -8
  110. package/lib/java/maven-sample.d.ts +2 -12
  111. package/lib/java/maven-sample.js +3 -8
  112. package/lib/java/pom.d.ts +38 -100
  113. package/lib/java/pom.js +13 -25
  114. package/lib/java/projenrc.d.ts +7 -22
  115. package/lib/java/projenrc.js +3 -8
  116. package/lib/javascript/bundler.d.ts +30 -72
  117. package/lib/javascript/bundler.js +13 -21
  118. package/lib/javascript/eslint.d.ts +27 -84
  119. package/lib/javascript/eslint.js +11 -30
  120. package/lib/javascript/jest.d.ts +91 -344
  121. package/lib/javascript/jest.js +6 -23
  122. package/lib/javascript/node-package.d.ts +111 -259
  123. package/lib/javascript/node-package.js +64 -81
  124. package/lib/javascript/node-project.d.ts +112 -220
  125. package/lib/javascript/node-project.js +54 -73
  126. package/lib/javascript/npm-config.d.ts +9 -19
  127. package/lib/javascript/npm-config.js +9 -16
  128. package/lib/javascript/prettier.d.ts +65 -196
  129. package/lib/javascript/prettier.js +70 -46
  130. package/lib/javascript/projenrc.d.ts +2 -12
  131. package/lib/javascript/projenrc.js +3 -8
  132. package/lib/javascript/typescript-config.d.ts +62 -158
  133. package/lib/javascript/typescript-config.js +31 -18
  134. package/lib/javascript/upgrade-dependencies.d.ts +35 -94
  135. package/lib/javascript/upgrade-dependencies.js +21 -51
  136. package/lib/json.d.ts +3 -17
  137. package/lib/json.js +3 -13
  138. package/lib/license.d.ts +3 -20
  139. package/lib/license.js +2 -13
  140. package/lib/logger.d.ts +18 -62
  141. package/lib/logger.js +17 -37
  142. package/lib/makefile.d.ts +14 -45
  143. package/lib/makefile.js +7 -25
  144. package/lib/object-file.d.ts +19 -39
  145. package/lib/object-file.js +17 -28
  146. package/lib/option-hints.d.ts +4 -13
  147. package/lib/option-hints.js +11 -5
  148. package/lib/project-build.d.ts +7 -26
  149. package/lib/project-build.js +3 -8
  150. package/lib/project.d.ts +64 -186
  151. package/lib/project.js +43 -91
  152. package/lib/projects.d.ts +11 -32
  153. package/lib/projects.js +4 -8
  154. package/lib/projenrc-json.d.ts +2 -12
  155. package/lib/projenrc-json.js +3 -8
  156. package/lib/python/pip.d.ts +7 -23
  157. package/lib/python/pip.js +8 -17
  158. package/lib/python/poetry.d.ts +36 -121
  159. package/lib/python/poetry.js +12 -26
  160. package/lib/python/projenrc.d.ts +4 -15
  161. package/lib/python/projenrc.js +3 -8
  162. package/lib/python/pytest.d.ts +3 -16
  163. package/lib/python/pytest.js +2 -8
  164. package/lib/python/python-deps.d.ts +7 -21
  165. package/lib/python/python-deps.js +1 -1
  166. package/lib/python/python-env.d.ts +1 -6
  167. package/lib/python/python-env.js +1 -1
  168. package/lib/python/python-packaging.d.ts +12 -34
  169. package/lib/python/python-packaging.js +1 -1
  170. package/lib/python/python-project.d.ts +34 -79
  171. package/lib/python/python-project.js +7 -20
  172. package/lib/python/python-sample.d.ts +2 -9
  173. package/lib/python/python-sample.js +3 -8
  174. package/lib/python/requirements-file.d.ts +4 -19
  175. package/lib/python/requirements-file.js +5 -15
  176. package/lib/python/setuppy.d.ts +11 -39
  177. package/lib/python/setuppy.js +3 -13
  178. package/lib/python/setuptools.d.ts +2 -14
  179. package/lib/python/setuptools.js +3 -8
  180. package/lib/python/venv.d.ts +4 -14
  181. package/lib/python/venv.js +4 -11
  182. package/lib/readme.d.ts +7 -16
  183. package/lib/readme.js +5 -7
  184. package/lib/release/publisher.d.ts +92 -201
  185. package/lib/release/publisher.js +18 -37
  186. package/lib/release/release-trigger.d.ts +16 -48
  187. package/lib/release/release-trigger.js +8 -18
  188. package/lib/release/release.d.ts +50 -110
  189. package/lib/release/release.js +9 -24
  190. package/lib/run-task.js +1820 -0
  191. package/lib/sample-file.d.ts +14 -47
  192. package/lib/sample-file.js +9 -30
  193. package/lib/semver.d.ts +4 -21
  194. package/lib/semver.js +6 -20
  195. package/lib/source-code.d.ts +7 -23
  196. package/lib/source-code.js +7 -19
  197. package/lib/task-model.d.ts +21 -61
  198. package/lib/task-model.js +1 -1
  199. package/lib/task-runtime.d.ts +7 -24
  200. package/lib/task-runtime.js +7 -20
  201. package/lib/task.d.ts +29 -73
  202. package/lib/task.js +28 -61
  203. package/lib/tasks.d.ts +12 -34
  204. package/lib/tasks.js +14 -36
  205. package/lib/testing.d.ts +6 -10
  206. package/lib/testing.js +8 -12
  207. package/lib/textfile.d.ts +9 -24
  208. package/lib/textfile.js +9 -19
  209. package/lib/toml.d.ts +2 -14
  210. package/lib/toml.js +3 -13
  211. package/lib/typescript/projenrc.d.ts +4 -14
  212. package/lib/typescript/projenrc.js +3 -8
  213. package/lib/typescript/typescript-typedoc.d.ts +1 -6
  214. package/lib/typescript/typescript-typedoc.js +3 -8
  215. package/lib/typescript/typescript.d.ts +24 -82
  216. package/lib/typescript/typescript.js +6 -15
  217. package/lib/version.d.ts +9 -38
  218. package/lib/version.js +2 -11
  219. package/lib/vscode/devcontainer.d.ts +10 -30
  220. package/lib/vscode/devcontainer.js +10 -26
  221. package/lib/vscode/launch-config.d.ts +18 -97
  222. package/lib/vscode/launch-config.js +9 -15
  223. package/lib/vscode/vscode.d.ts +0 -9
  224. package/lib/vscode/vscode.js +2 -11
  225. package/lib/web/next.d.ts +19 -60
  226. package/lib/web/next.js +6 -20
  227. package/lib/web/postcss.d.ts +3 -24
  228. package/lib/web/postcss.js +3 -8
  229. package/lib/web/react.d.ts +13 -60
  230. package/lib/web/react.js +7 -32
  231. package/lib/web/tailwind.d.ts +1 -15
  232. package/lib/web/tailwind.js +3 -7
  233. package/lib/xmlfile.d.ts +2 -14
  234. package/lib/xmlfile.js +3 -13
  235. package/lib/yaml.d.ts +4 -19
  236. package/lib/yaml.js +3 -13
  237. package/package.json +5 -5
  238. package/releasetag.txt +1 -1
  239. package/version.txt +1 -1
@@ -1,55 +1,39 @@
1
1
  import { Eslint } from "../javascript";
2
2
  import { GoPublishOptions, MavenPublishOptions, NugetPublishOptions, PyPiPublishOptions } from "../release";
3
3
  import { TypeScriptProject, TypeScriptProjectOptions } from "../typescript";
4
- /**
5
- * @experimental
6
- */
7
4
  export interface JsiiProjectOptions extends TypeScriptProjectOptions {
8
5
  /**
9
6
  * @default "."
10
- * @experimental
11
7
  */
12
8
  readonly rootdir?: string;
13
9
  /**
14
- * (experimental) Git repository URL.
15
- *
10
+ * Git repository URL.
16
11
  * @default $GIT_REMOTE
17
- * @experimental
18
12
  */
19
13
  readonly repositoryUrl: string;
20
14
  /**
21
- * (experimental) The name of the library author.
22
- *
15
+ * The name of the library author.
23
16
  * @default $GIT_USER_NAME
24
- * @experimental
25
17
  */
26
18
  readonly author: string;
27
19
  /**
28
- * (experimental) Email or URL of the library author.
29
- *
20
+ * Email or URL of the library author.
30
21
  * @default $GIT_USER_EMAIL
31
- * @experimental
32
22
  */
33
23
  readonly authorAddress: string;
34
24
  /**
35
- * (experimental) Publish to maven.
36
- *
25
+ * Publish to maven
37
26
  * @default - no publishing
38
- * @experimental
39
27
  */
40
28
  readonly publishToMaven?: JsiiJavaTarget;
41
29
  /**
42
- * (experimental) Publish to pypi.
43
- *
30
+ * Publish to pypi
44
31
  * @default - no publishing
45
- * @experimental
46
32
  */
47
33
  readonly publishToPypi?: JsiiPythonTarget;
48
34
  /**
49
- * (experimental) Publish Go bindings to a git repository.
50
- *
35
+ * Publish Go bindings to a git repository.
51
36
  * @default - no publishing
52
- * @experimental
53
37
  */
54
38
  readonly publishToGo?: JsiiGoTarget;
55
39
  /**
@@ -57,10 +41,8 @@ export interface JsiiProjectOptions extends TypeScriptProjectOptions {
57
41
  */
58
42
  readonly python?: JsiiPythonTarget;
59
43
  /**
60
- * (experimental) Publish to NuGet.
61
- *
44
+ * Publish to NuGet
62
45
  * @default - no publishing
63
- * @experimental
64
46
  */
65
47
  readonly publishToNuget?: JsiiDotNetTarget;
66
48
  /**
@@ -68,133 +50,72 @@ export interface JsiiProjectOptions extends TypeScriptProjectOptions {
68
50
  */
69
51
  readonly dotnet?: JsiiDotNetTarget;
70
52
  /**
71
- * (experimental) Automatically run API compatibility test against the latest version published to npm after compilation.
53
+ * Automatically run API compatibility test against the latest version published to npm after compilation.
72
54
  *
73
55
  * - You can manually run compatibility tests using `yarn compat` if this feature is disabled.
74
56
  * - You can ignore compatibility failures by adding lines to a ".compatignore" file.
75
57
  *
76
58
  * @default false
77
- * @experimental
78
59
  */
79
60
  readonly compat?: boolean;
80
61
  /**
81
- * (experimental) Name of the ignore file for API compatibility tests.
62
+ * Name of the ignore file for API compatibility tests.
82
63
  *
83
64
  * @default ".compatignore"
84
- * @experimental
85
65
  */
86
66
  readonly compatIgnore?: string;
87
67
  /**
88
- * (experimental) Accepts a list of glob patterns.
89
- *
90
- * Files matching any of those patterns will be excluded from the TypeScript compiler input.
68
+ * Accepts a list of glob patterns. Files matching any of those patterns will be excluded from the TypeScript compiler input.
91
69
  *
92
70
  * By default, jsii will include all *.ts files (except .d.ts files) in the TypeScript compiler input.
93
71
  * This can be problematic for example when the package's build or test procedure generates .ts files
94
72
  * that cannot be compiled with jsii's compiler settings.
95
- *
96
- * @experimental
97
73
  */
98
74
  readonly excludeTypescript?: string[];
99
75
  /**
100
- * (experimental) File path for generated docs.
101
- *
76
+ * File path for generated docs.
102
77
  * @default "API.md"
103
- * @experimental
104
78
  */
105
79
  readonly docgenFilePath?: string;
106
80
  }
107
- /**
108
- * @experimental
109
- */
110
81
  export declare enum Stability {
111
- /**
112
- * @experimental
113
- */
114
82
  EXPERIMENTAL = "experimental",
115
- /**
116
- * @experimental
117
- */
118
83
  STABLE = "stable",
119
- /**
120
- * @experimental
121
- */
122
84
  DEPRECATED = "deprecated"
123
85
  }
124
- /**
125
- * @experimental
126
- */
127
86
  export interface JsiiJavaTarget extends MavenPublishOptions {
128
- /**
129
- * @experimental
130
- */
131
87
  readonly javaPackage: string;
132
- /**
133
- * @experimental
134
- */
135
88
  readonly mavenGroupId: string;
136
- /**
137
- * @experimental
138
- */
139
89
  readonly mavenArtifactId: string;
140
90
  }
141
- /**
142
- * @experimental
143
- */
144
91
  export interface JsiiPythonTarget extends PyPiPublishOptions {
145
- /**
146
- * @experimental
147
- */
148
92
  readonly distName: string;
149
- /**
150
- * @experimental
151
- */
152
93
  readonly module: string;
153
94
  }
154
- /**
155
- * @experimental
156
- */
157
95
  export interface JsiiDotNetTarget extends NugetPublishOptions {
158
- /**
159
- * @experimental
160
- */
161
96
  readonly dotNetNamespace: string;
162
- /**
163
- * @experimental
164
- */
165
97
  readonly packageId: string;
166
98
  }
167
99
  /**
168
- * (experimental) Go target configuration.
169
- *
170
- * @experimental
100
+ * Go target configuration
171
101
  */
172
102
  export interface JsiiGoTarget extends GoPublishOptions {
173
103
  /**
174
- * (experimental) The name of the target go module.
104
+ * The name of the target go module.
175
105
  *
176
- * @experimental
177
- * @example
178
- *
179
- * github.com/owner/repo/subdir
106
+ * @example github.com/owner/repo
107
+ * @example github.com/owner/repo/subdir
180
108
  */
181
109
  readonly moduleName: string;
182
110
  }
183
111
  /**
184
- * (experimental) Multi-language jsii library project.
112
+ * Multi-language jsii library project
185
113
  *
186
- * @experimental
187
114
  * @pjid jsii
188
115
  */
189
116
  export declare class JsiiProject extends TypeScriptProject {
190
- /**
191
- * @experimental
192
- */
193
117
  readonly eslint?: Eslint;
194
118
  private readonly packageAllTask;
195
- /**
196
- * @experimental
197
- */
198
119
  constructor(options: JsiiProjectOptions);
199
120
  /**
200
121
  * Adds a target language to the build workflow and creates a package task.
@@ -9,9 +9,6 @@ const jsii_docgen_1 = require("./jsii-docgen");
9
9
  const EMAIL_REGEX = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/;
10
10
  const URL_REGEX = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[A-Za-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[A-Za-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-_]*)?\??(?:[\-\+=&;%@\.\w_]*)#?(?:[\.\!\/\\\w]*))?)/;
11
11
  const REPO_TEMP_DIRECTORY = ".repo";
12
- /**
13
- * @experimental
14
- */
15
12
  var Stability;
16
13
  (function (Stability) {
17
14
  Stability["EXPERIMENTAL"] = "experimental";
@@ -19,15 +16,11 @@ var Stability;
19
16
  Stability["DEPRECATED"] = "deprecated";
20
17
  })(Stability = exports.Stability || (exports.Stability = {}));
21
18
  /**
22
- * (experimental) Multi-language jsii library project.
19
+ * Multi-language jsii library project
23
20
  *
24
- * @experimental
25
21
  * @pjid jsii
26
22
  */
27
23
  class JsiiProject extends typescript_1.TypeScriptProject {
28
- /**
29
- * @experimental
30
- */
31
24
  constructor(options) {
32
25
  var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
33
26
  const { authorEmail, authorUrl } = parseAuthorAddress(options);
@@ -229,7 +222,7 @@ class JsiiProject extends typescript_1.TypeScriptProject {
229
222
  }
230
223
  exports.JsiiProject = JsiiProject;
231
224
  _a = JSII_RTTI_SYMBOL_1;
232
- JsiiProject[_a] = { fqn: "projen.cdk.JsiiProject", version: "0.52.20" };
225
+ JsiiProject[_a] = { fqn: "projen.cdk.JsiiProject", version: "0.52.24" };
233
226
  function parseAuthorAddress(options) {
234
227
  let authorEmail = options.authorEmail;
235
228
  let authorUrl = options.authorUrl;
@@ -252,4 +245,4 @@ function parseAuthorAddress(options) {
252
245
  }
253
246
  return { authorEmail, authorUrl };
254
247
  }
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nkay9qc2lpLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSw4Q0FBNEU7QUFDNUUscUNBQTREO0FBQzVELCtDQUEyQztBQUUzQyxNQUFNLFdBQVcsR0FDZiw0YUFBNGEsQ0FBQztBQUMvYSxNQUFNLFNBQVMsR0FDYixzTEFBc0wsQ0FBQztBQUN6TCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQzs7OztBQThDcEMsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ25CLDBDQUE2QixDQUFBO0lBQzdCLDhCQUFpQixDQUFBO0lBQ2pCLHNDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUlwQjs7Ozs7OztBQXlCRCxNQUFhLFdBQVksU0FBUSw4QkFBaUI7Ozs7SUFLaEQsWUFBWSxPQUEyQjs7UUFDckMsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxLQUFLLENBQUM7WUFDSixVQUFVLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDakMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQzFCLFdBQVc7WUFDWCxTQUFTO1lBQ1QsR0FBRyxPQUFPO1lBQ1YsWUFBWSxFQUFFLEtBQUs7WUFDbkIsZUFBZSxFQUFFLElBQUk7WUFDckIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sYUFBYSxFQUFFLENBQUMsQ0FBQztRQUVsRCwrQkFBK0I7UUFDL0IsTUFBTSxTQUFTLEdBQUc7WUFDaEIsa0NBQWtDO1lBQ2xDLDRCQUE0QjtTQUM3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVaLE1BQU0sWUFBWSxTQUFHLE9BQU8sQ0FBQyxZQUFZLG1DQUFJLGVBQWUsQ0FBQztRQUU3RCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxRQUFFLE9BQU8sQ0FBQyxTQUFTLG1DQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXJFLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsVUFBVSxFQUFFO1lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN0QztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3hDLFdBQVcsRUFBRSx3REFBd0Q7WUFDckUsSUFBSSxFQUFFLGdGQUFnRixZQUFZLGdHQUFnRyxZQUFZLHlCQUF5QjtTQUN4TyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sU0FBRyxPQUFPLENBQUMsTUFBTSxtQ0FBSSxLQUFLLENBQUM7UUFDdkMsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxXQUFXLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUNoRCxXQUFXLEVBQUUsNkNBQTZDO1NBQzNELENBQUMsQ0FBQztRQUVILHlFQUF5RTtRQUN6RSx1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNuQixjQUFjLElBQUksQ0FBQyxrQkFBa0Isd0NBQXdDLENBQzlFLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1FBRXhDLE1BQU0sSUFBSSxHQUFRO1lBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQy9CLE9BQU87WUFDUCxHQUFHLEVBQUU7Z0JBQ0gsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLE1BQU07YUFDaEI7U0FDRixDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztTQUNwRDtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXpCLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsU0FBUyxDQUFDLDJCQUEyQixDQUNqRDtZQUNFLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsR0FBRyxFQUFFLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixJQUFJLG1CQUFtQixFQUFFO1NBQzVELEVBQ0Q7WUFDRSxJQUFJLEVBQUUseUJBQXlCO1lBQy9CLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7U0FDdkYsRUFDRDtRQUVGLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxLQUFLLEVBQUU7WUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQztnQkFDbkMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFDckMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztnQkFDbEMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYzthQUM1QyxFQUFFO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNyQztRQUVELDBFQUEwRTtRQUMxRSw2RUFBNkU7UUFDN0UseURBQXlEO1FBQ3pELElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7U0FDckU7UUFFRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDMUIsT0FBTyxDQUFDLElBQUksR0FBRztnQkFDYixPQUFPLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXO2dCQUMzQyxLQUFLLEVBQUU7b0JBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWTtvQkFDNUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsZUFBZTtpQkFDbkQ7YUFDRixDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTNDLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQztnQkFDckMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFDdkMsR0FBRyxPQUFPLENBQUMsY0FBYzthQUMxQixFQUFFO1lBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN2QztRQUVELE1BQU0sSUFBSSxTQUFHLE9BQU8sQ0FBQyxhQUFhLG1DQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDckQsSUFBSSxJQUFJLEVBQUU7WUFDUixPQUFPLENBQUMsTUFBTSxHQUFHO2dCQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ3BCLENBQUM7WUFFRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxTQUFTLENBQUMsYUFBYSxDQUFDO2dCQUNwQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO2dCQUN6QyxHQUFHLElBQUk7YUFDUixFQUFFO1lBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN6QztRQUVELE1BQU0sS0FBSyxTQUFHLE9BQU8sQ0FBQyxjQUFjLG1DQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDdkQsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLENBQUMsTUFBTSxHQUFHO2dCQUNmLFNBQVMsRUFBRSxLQUFLLENBQUMsZUFBZTtnQkFDaEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2FBQzNCLENBQUM7WUFFRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxTQUFTLENBQUMsY0FBYyxDQUFDO2dCQUNyQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO2dCQUN6QyxHQUFHLEtBQUs7YUFDVCxFQUFFO1lBRUgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN6QztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxNQUFNLEVBQUU7WUFDVixPQUFPLENBQUMsRUFBRSxHQUFHO2dCQUNYLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTthQUM5QixDQUFDO1lBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQztnQkFDbEMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFDckMsR0FBRyxNQUFNO2FBQ1YsRUFBRTtZQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVyQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDakQsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxPQUFPLENBQUMsT0FBTyxFQUFFO1FBRWpDLFVBQUksT0FBTyxDQUFDLE1BQU0sbUNBQUksSUFBSSxFQUFFO1lBQzFCLElBQUksd0JBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFFRCxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsUUFBMEIsRUFBRSxRQUFjOztRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFdBQVcsUUFBUSxFQUFFLEVBQUU7WUFDeEQsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFdBQVcsRUFBRSxFQUFFO1lBQ2YsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQ3pCLEdBQUcsTUFBTSxDQUFDLFlBQVk7YUFDdkI7WUFDRCxLQUFLLFFBQUUsTUFBTSxDQUFDLGVBQWUsbUNBQUksRUFBRTtTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsUUFBMEI7UUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxRQUFRLEVBQUUsRUFBRTtZQUM1RCxXQUFXLEVBQUUsVUFBVSxRQUFRLG9CQUFvQjtTQUNwRCxDQUFDLENBQUM7UUFFSCxXQUFXLENBQUMsSUFBSSxDQUNkLDRGQUE0RixDQUM3RixDQUFDO1FBQ0YsV0FBVyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRU8saUJBQWlCLENBQ3ZCLE1BQXdCLEVBQ3hCLFFBQWM7UUFFZCx3RUFBd0U7UUFDeEUsK0ZBQStGO1FBQy9GLDhFQUE4RTtRQUU5RSxPQUFPO1lBQ0wsWUFBWSxFQUFFLHVCQUFjLENBQUMsTUFBTSxDQUFDO1lBQ3BDLGVBQWUsRUFBRTtnQkFDZjtvQkFDRSxJQUFJLEVBQUUsb0JBQW9CO29CQUMxQixHQUFHLEVBQUUsTUFBTSxJQUFJLENBQUMsa0JBQWtCLElBQUksbUJBQW1CLEVBQUU7aUJBQzVEO2dCQUNEO29CQUNFLElBQUksRUFBRSxzQkFBc0I7b0JBQzVCLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO2lCQUNuRTtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsVUFBVSxNQUFNLFdBQVc7b0JBQ2pDLEdBQUcsRUFBRSxNQUFNLG1CQUFtQixrQkFBa0IsUUFBUSxDQUFDLElBQUksRUFBRTtpQkFDaEU7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFdBQVcsTUFBTSxXQUFXO29CQUNsQyxHQUFHLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2lCQUN2RjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBM1BILGtDQTRQQzs7O0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxPQUEyQjtJQUNyRCxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQ3RDLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDbEMsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFO1FBQ3pCLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDeEUsTUFBTSxJQUFJLEtBQUssQ0FDYixnRkFBZ0YsQ0FDakYsQ0FBQztTQUNIO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUNwRSxNQUFNLElBQUksS0FBSyxDQUNiLCtFQUErRSxDQUNoRixDQUFDO1NBQ0g7UUFFRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzNDLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3JDO2FBQU0sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNoRCxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUNuQzthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUNuRixDQUFDO1NBQ0g7S0FDRjtJQUNELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhc2sgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IEVzbGludCB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQge1xuICBDb21tb25QdWJsaXNoT3B0aW9ucyxcbiAgR29QdWJsaXNoT3B0aW9ucyxcbiAgTWF2ZW5QdWJsaXNoT3B0aW9ucyxcbiAgTnVnZXRQdWJsaXNoT3B0aW9ucyxcbiAgUHlQaVB1Ymxpc2hPcHRpb25zLFxufSBmcm9tIFwiLi4vcmVsZWFzZVwiO1xuaW1wb3J0IHsgVHlwZVNjcmlwdFByb2plY3QsIFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBKc2lpUGFjbWFrVGFyZ2V0LCBKU0lJX1RPT0xDSEFJTiB9IGZyb20gXCIuL2NvbnN0c1wiO1xuaW1wb3J0IHsgSnNpaURvY2dlbiB9IGZyb20gXCIuL2pzaWktZG9jZ2VuXCI7XG5cbmNvbnN0IEVNQUlMX1JFR0VYID1cbiAgLyg/OlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pLztcbmNvbnN0IFVSTF9SRUdFWCA9XG4gIC8oKChbQS1aYS16XXszLDl9Oig/OlxcL1xcLyk/KSg/OltcXC07OiY9XFwrXFwkLFxcd10rQCk/W0EtWmEtejAtOVxcLlxcLV0rfCg/Ond3d1xcLnxbXFwtOzomPVxcK1xcJCxcXHddK0ApW0EtWmEtejAtOVxcLlxcLV0rKSgoPzpcXC9bXFwrfiVcXC9cXC5cXHdcXC1fXSopP1xcPz8oPzpbXFwtXFwrPSY7JUBcXC5cXHdfXSopIz8oPzpbXFwuXFwhXFwvXFxcXFxcd10qKSk/KS87XG5jb25zdCBSRVBPX1RFTVBfRElSRUNUT1JZID0gXCIucmVwb1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlQcm9qZWN0T3B0aW9ucyBleHRlbmRzIFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByb290ZGlyPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByZXBvc2l0b3J5VXJsOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGF1dGhvcjogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGF1dGhvckFkZHJlc3M6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHB1Ymxpc2hUb01hdmVuPzogSnNpaUphdmFUYXJnZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHB1Ymxpc2hUb1B5cGk/OiBKc2lpUHl0aG9uVGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHVibGlzaFRvR28/OiBKc2lpR29UYXJnZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBweXRob24/OiBKc2lpUHl0aG9uVGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHVibGlzaFRvTnVnZXQ/OiBKc2lpRG90TmV0VGFyZ2V0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvdG5ldD86IEpzaWlEb3ROZXRUYXJnZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNvbXBhdD86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNvbXBhdElnbm9yZT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZXhjbHVkZVR5cGVzY3JpcHQ/OiBzdHJpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRvY2dlbkZpbGVQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBTdGFiaWxpdHkge1xuICBFWFBFUklNRU5UQUwgPSBcImV4cGVyaW1lbnRhbFwiLFxuICBTVEFCTEUgPSBcInN0YWJsZVwiLFxuICBERVBSRUNBVEVEID0gXCJkZXByZWNhdGVkXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNpaUphdmFUYXJnZXQgZXh0ZW5kcyBNYXZlblB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgamF2YVBhY2thZ2U6IHN0cmluZztcbiAgcmVhZG9ubHkgbWF2ZW5Hcm91cElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hdmVuQXJ0aWZhY3RJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlQeXRob25UYXJnZXQgZXh0ZW5kcyBQeVBpUHVibGlzaE9wdGlvbnMge1xuICByZWFkb25seSBkaXN0TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBtb2R1bGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc2lpRG90TmV0VGFyZ2V0IGV4dGVuZHMgTnVnZXRQdWJsaXNoT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRvdE5ldE5hbWVzcGFjZTogc3RyaW5nO1xuICByZWFkb25seSBwYWNrYWdlSWQ6IHN0cmluZztcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBKc2lpR29UYXJnZXQgZXh0ZW5kcyBHb1B1Ymxpc2hPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1vZHVsZU5hbWU6IHN0cmluZztcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgSnNpaVByb2plY3QgZXh0ZW5kcyBUeXBlU2NyaXB0UHJvamVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBlc2xpbnQ/OiBFc2xpbnQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwYWNrYWdlQWxsVGFzazogVGFzaztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBKc2lpUHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGF1dGhvckVtYWlsLCBhdXRob3JVcmwgfSA9IHBhcnNlQXV0aG9yQWRkcmVzcyhvcHRpb25zKTtcbiAgICBzdXBlcih7XG4gICAgICByZXBvc2l0b3J5OiBvcHRpb25zLnJlcG9zaXRvcnlVcmwsXG4gICAgICBhdXRob3JOYW1lOiBvcHRpb25zLmF1dGhvcixcbiAgICAgIGF1dGhvckVtYWlsLFxuICAgICAgYXV0aG9yVXJsLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJlbGVhc2VUb05wbTogZmFsc2UsIC8vIHdlIGhhdmUgYSBqc2lpIHJlbGVhc2Ugd29ya2Zsb3dcbiAgICAgIGRpc2FibGVUc2NvbmZpZzogdHJ1ZSwgLy8ganNpaSBnZW5lcmF0ZXMgaXRzIG93biB0c2NvbmZpZy5qc29uXG4gICAgICBkb2NnZW46IGZhbHNlLCAvLyB3ZSB1c2UganNpaS1kb2NnZW4gaGVyZSBzbyBkaXNhYmxlIHR5cGVzY3JpcHQgZG9jZ2VuXG4gICAgfSk7XG5cbiAgICBjb25zdCBzcmNkaXIgPSB0aGlzLnNyY2RpcjtcbiAgICBjb25zdCBsaWJkaXIgPSB0aGlzLmxpYmRpcjtcblxuICAgIHRoaXMuYWRkRmllbGRzKHsgdHlwZXM6IGAke2xpYmRpcn0vaW5kZXguZC50c2AgfSk7XG5cbiAgICAvLyB0aGlzIGlzIGFuIHVuaGVscGZ1bCB3YXJuaW5nXG4gICAgY29uc3QganNpaUZsYWdzID0gW1xuICAgICAgXCItLXNpbGVuY2Utd2FybmluZ3M9cmVzZXJ2ZWQtd29yZFwiLFxuICAgICAgXCItLW5vLWZpeC1wZWVyLWRlcGVuZGVuY2llc1wiLFxuICAgIF0uam9pbihcIiBcIik7XG5cbiAgICBjb25zdCBjb21wYXRJZ25vcmUgPSBvcHRpb25zLmNvbXBhdElnbm9yZSA/PyBcIi5jb21wYXRpZ25vcmVcIjtcblxuICAgIHRoaXMuYWRkRmllbGRzKHsgc3RhYmlsaXR5OiBvcHRpb25zLnN0YWJpbGl0eSA/PyBTdGFiaWxpdHkuU1RBQkxFIH0pO1xuXG4gICAgaWYgKG9wdGlvbnMuc3RhYmlsaXR5ID09PSBTdGFiaWxpdHkuREVQUkVDQVRFRCkge1xuICAgICAgdGhpcy5hZGRGaWVsZHMoeyBkZXByZWNhdGVkOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhdFRhc2sgPSB0aGlzLmFkZFRhc2soXCJjb21wYXRcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiUGVyZm9ybSBBUEkgY29tcGF0aWJpbGl0eSBjaGVjayBhZ2FpbnN0IGxhdGVzdCB2ZXJzaW9uXCIsXG4gICAgICBleGVjOiBganNpaS1kaWZmIG5wbTokKG5vZGUgLXAgXCJyZXF1aXJlKFxcJy4vcGFja2FnZS5qc29uXFwnKS5uYW1lXCIpIC1rIC0taWdub3JlLWZpbGUgJHtjb21wYXRJZ25vcmV9IHx8IChlY2hvIFwiXFxuVU5FWFBFQ1RFRCBCUkVBS0lORyBDSEFOR0VTOiBhZGQga2V5cyBzdWNoIGFzIFxcJ3JlbW92ZWQ6Y29uc3RydWN0cy5Ob2RlLm9mXFwnIHRvICR7Y29tcGF0SWdub3JlfSB0byBza2lwLlxcblwiICYmIGV4aXQgMSlgLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29tcGF0ID0gb3B0aW9ucy5jb21wYXQgPz8gZmFsc2U7XG4gICAgaWYgKGNvbXBhdCkge1xuICAgICAgdGhpcy5jb21waWxlVGFzay5zcGF3bihjb21wYXRUYXNrKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBpbGVUYXNrLnJlc2V0KGBqc2lpICR7anNpaUZsYWdzfWApO1xuICAgIHRoaXMud2F0Y2hUYXNrLnJlc2V0KGBqc2lpIC13ICR7anNpaUZsYWdzfWApO1xuICAgIHRoaXMucGFja2FnZUFsbFRhc2sgPSB0aGlzLmFkZFRhc2soXCJwYWNrYWdlLWFsbFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJQYWNrYWdlcyBhcnRpZmFjdHMgZm9yIGFsbCB0YXJnZXQgbGFuZ3VhZ2VzXCIsXG4gICAgfSk7XG5cbiAgICAvLyBpbiBqc2lpIHdlIGNvbnNpZGVyIHRoZSBlbnRpcmUgcmVwbyAocG9zdCBidWlsZCkgYXMgdGhlIGJ1aWxkIGFydGlmYWN0XG4gICAgLy8gd2hpY2ggaXMgdGhlbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbGFuZ3VhZ2UgYmluZGluZ3MgaW4gc2VwYXJhdGUgam9icy5cbiAgICB0aGlzLnBhY2thZ2VUYXNrLnJlc2V0KGBta2RpciAtcCAke3RoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5fWApO1xuICAgIHRoaXMucGFja2FnZVRhc2suZXhlYyhcbiAgICAgIGByc3luYyAtYSAuICR7dGhpcy5hcnRpZmFjdHNEaXJlY3Rvcnl9IC0tZXhjbHVkZSAuZ2l0IC0tZXhjbHVkZSBub2RlX21vZHVsZXNgXG4gICAgKTtcblxuICAgIGNvbnN0IHRhcmdldHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGNvbnN0IGpzaWk6IGFueSA9IHtcbiAgICAgIG91dGRpcjogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICB0YXJnZXRzLFxuICAgICAgdHNjOiB7XG4gICAgICAgIG91dERpcjogbGliZGlyLFxuICAgICAgICByb290RGlyOiBzcmNkaXIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5leGNsdWRlVHlwZXNjcmlwdCkge1xuICAgICAganNpaS5leGNsdWRlVHlwZXNjcmlwdCA9IG9wdGlvbnMuZXhjbHVkZVR5cGVzY3JpcHQ7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRGaWVsZHMoeyBqc2lpIH0pO1xuXG4gICAgdGhpcy5yZWxlYXNlPy5wdWJsaXNoZXIuYWRkR2l0SHViUHJlUHVibGlzaGluZ1N0ZXBzKFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIlByZXBhcmUgUmVwb3NpdG9yeVwiLFxuICAgICAgICBydW46IGBtdiAke3RoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5fSAke1JFUE9fVEVNUF9ESVJFQ1RPUll9YCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiQ29sbGVjdCBHaXRIdWIgTWV0YWRhdGFcIixcbiAgICAgICAgcnVuOiBgbXYgJHtSRVBPX1RFTVBfRElSRUNUT1JZfS8ke3RoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5fSAke3RoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5fWAsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGlmIChvcHRpb25zLnJlbGVhc2VUb05wbSAhPSBmYWxzZSkge1xuICAgICAgY29uc3QgdGFzayA9IHRoaXMuYWRkUGFja2FnaW5nVGFzayhcImpzXCIpO1xuICAgICAgdGhpcy5yZWxlYXNlPy5wdWJsaXNoZXIucHVibGlzaFRvTnBtKHtcbiAgICAgICAgLi4udGhpcy5wYWNtYWtGb3JMYW5ndWFnZShcImpzXCIsIHRhc2spLFxuICAgICAgICByZWdpc3RyeTogdGhpcy5wYWNrYWdlLm5wbVJlZ2lzdHJ5LFxuICAgICAgICBucG1Ub2tlblNlY3JldDogdGhpcy5wYWNrYWdlLm5wbVRva2VuU2VjcmV0LFxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkZFBhY2thZ2luZ1RhcmdldChcImpzXCIsIHRhc2spO1xuICAgIH1cblxuICAgIC8vIHdlIGNhbm5vdCBjYWxsIGFuIG9wdGlvbiBgamF2YWAgYmVjYXVzZSB0aGUgamF2YSBjb2RlIGdlbmVyYXRlZCBieSBqc2lpXG4gICAgLy8gZG9lcyBub3QgY29tcGlsZSBkdWUgdG8gYSBjb25mbGljdCBiZXR3ZWVuIHRoaXMgb3B0aW9uIG5hbWUgYW5kIHRoZSBgamF2YWBcbiAgICAvLyBwYWNrYWdlIChlLmcuIHdoZW4gYGphdmEudXRpbC5PYmplY3RzYCBpcyByZWZlcmVuY2VkKS5cbiAgICBpZiAoXCJqYXZhXCIgaW4gb3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGUgXCJqYXZhXCIgb3B0aW9uIGlzIG5vdyBjYWxsZWQgXCJwdWJsaXNoVG9NYXZlblwiJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHVibGlzaFRvTWF2ZW4pIHtcbiAgICAgIHRhcmdldHMuamF2YSA9IHtcbiAgICAgICAgcGFja2FnZTogb3B0aW9ucy5wdWJsaXNoVG9NYXZlbi5qYXZhUGFja2FnZSxcbiAgICAgICAgbWF2ZW46IHtcbiAgICAgICAgICBncm91cElkOiBvcHRpb25zLnB1Ymxpc2hUb01hdmVuLm1hdmVuR3JvdXBJZCxcbiAgICAgICAgICBhcnRpZmFjdElkOiBvcHRpb25zLnB1Ymxpc2hUb01hdmVuLm1hdmVuQXJ0aWZhY3RJZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLmFkZFBhY2thZ2luZ1Rhc2soXCJqYXZhXCIpO1xuXG4gICAgICB0aGlzLnJlbGVhc2U/LnB1Ymxpc2hlci5wdWJsaXNoVG9NYXZlbih7XG4gICAgICAgIC4uLnRoaXMucGFjbWFrRm9yTGFuZ3VhZ2UoXCJqYXZhXCIsIHRhc2spLFxuICAgICAgICAuLi5vcHRpb25zLnB1Ymxpc2hUb01hdmVuLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWRkUGFja2FnaW5nVGFyZ2V0KFwiamF2YVwiLCB0YXNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBweXBpID0gb3B0aW9ucy5wdWJsaXNoVG9QeXBpID8/IG9wdGlvbnMucHl0aG9uO1xuICAgIGlmIChweXBpKSB7XG4gICAgICB0YXJnZXRzLnB5dGhvbiA9IHtcbiAgICAgICAgZGlzdE5hbWU6IHB5cGkuZGlzdE5hbWUsXG4gICAgICAgIG1vZHVsZTogcHlwaS5tb2R1bGUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0YXNrID0gdGhpcy5hZGRQYWNrYWdpbmdUYXNrKFwicHl0aG9uXCIpO1xuICAgICAgdGhpcy5yZWxlYXNlPy5wdWJsaXNoZXIucHVibGlzaFRvUHlQaSh7XG4gICAgICAgIC4uLnRoaXMucGFjbWFrRm9yTGFuZ3VhZ2UoXCJweXRob25cIiwgdGFzayksXG4gICAgICAgIC4uLnB5cGksXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hZGRQYWNrYWdpbmdUYXJnZXQoXCJweXRob25cIiwgdGFzayk7XG4gICAgfVxuXG4gICAgY29uc3QgbnVnZXQgPSBvcHRpb25zLnB1Ymxpc2hUb051Z2V0ID8/IG9wdGlvbnMuZG90bmV0O1xuICAgIGlmIChudWdldCkge1xuICAgICAgdGFyZ2V0cy5kb3RuZXQgPSB7XG4gICAgICAgIG5hbWVzcGFjZTogbnVnZXQuZG90TmV0TmFtZXNwYWNlLFxuICAgICAgICBwYWNrYWdlSWQ6IG51Z2V0LnBhY2thZ2VJZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLmFkZFBhY2thZ2luZ1Rhc2soXCJkb3RuZXRcIik7XG4gICAgICB0aGlzLnJlbGVhc2U/LnB1Ymxpc2hlci5wdWJsaXNoVG9OdWdldCh7XG4gICAgICAgIC4uLnRoaXMucGFjbWFrRm9yTGFuZ3VhZ2UoXCJkb3RuZXRcIiwgdGFzayksXG4gICAgICAgIC4uLm51Z2V0LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWRkUGFja2FnaW5nVGFyZ2V0KFwiZG90bmV0XCIsIHRhc2spO1xuICAgIH1cblxuICAgIGNvbnN0IGdvbGFuZyA9IG9wdGlvbnMucHVibGlzaFRvR287XG4gICAgaWYgKGdvbGFuZykge1xuICAgICAgdGFyZ2V0cy5nbyA9IHtcbiAgICAgICAgbW9kdWxlTmFtZTogZ29sYW5nLm1vZHVsZU5hbWUsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0YXNrID0gdGhpcy5hZGRQYWNrYWdpbmdUYXNrKFwiZ29cIik7XG4gICAgICB0aGlzLnJlbGVhc2U/LnB1Ymxpc2hlci5wdWJsaXNoVG9Hbyh7XG4gICAgICAgIC4uLnRoaXMucGFjbWFrRm9yTGFuZ3VhZ2UoXCJnb1wiLCB0YXNrKSxcbiAgICAgICAgLi4uZ29sYW5nLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWRkUGFja2FnaW5nVGFyZ2V0KFwiZ29cIiwgdGFzayk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZXZEZXBzKFwianNpaVwiLCBcImpzaWktZGlmZlwiKTtcblxuICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoXCIuanNpaVwiLCBcInRzY29uZmlnLmpzb25cIik7XG4gICAgdGhpcy5ucG1pZ25vcmU/LmluY2x1ZGUoXCIuanNpaVwiKTtcblxuICAgIGlmIChvcHRpb25zLmRvY2dlbiA/PyB0cnVlKSB7XG4gICAgICBuZXcgSnNpaURvY2dlbih0aGlzLCB7IGZpbGVQYXRoOiBvcHRpb25zLmRvY2dlbkZpbGVQYXRoIH0pO1xuICAgIH1cblxuICAgIC8vIGpzaWkgdXBkYXRlcyAubnBtaWdub3JlLCBzbyB3ZSBtYWtlIGl0IHdyaXRhYmxlXG4gICAgaWYgKHRoaXMubnBtaWdub3JlKSB7XG4gICAgICB0aGlzLm5wbWlnbm9yZS5yZWFkb25seSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgdGFyZ2V0IGxhbmd1YWdlIHRvIHRoZSBidWlsZCB3b3JrZmxvdyBhbmQgY3JlYXRlcyBhIHBhY2thZ2UgdGFzay5cbiAgICogQHBhcmFtIGxhbmd1YWdlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwcml2YXRlIGFkZFBhY2thZ2luZ1RhcmdldChsYW5ndWFnZTogSnNpaVBhY21ha1RhcmdldCwgcGFja1Rhc2s6IFRhc2spIHtcbiAgICBpZiAoIXRoaXMuYnVpbGRXb3JrZmxvdykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY21hayA9IHRoaXMucGFjbWFrRm9yTGFuZ3VhZ2UobGFuZ3VhZ2UsIHBhY2tUYXNrKTtcblxuICAgIHRoaXMuYnVpbGRXb3JrZmxvdy5hZGRQb3N0QnVpbGRKb2IoYHBhY2thZ2UtJHtsYW5ndWFnZX1gLCB7XG4gICAgICBydW5zT246IFtcInVidW50dS1sYXRlc3RcIl0sXG4gICAgICBwZXJtaXNzaW9uczoge30sXG4gICAgICB0b29sczoge1xuICAgICAgICBub2RlOiB7IHZlcnNpb246IFwiMTQueFwiIH0sXG4gICAgICAgIC4uLnBhY21hay5wdWJsaXNoVG9vbHMsXG4gICAgICB9LFxuICAgICAgc3RlcHM6IHBhY21hay5wcmVQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZFBhY2thZ2luZ1Rhc2sobGFuZ3VhZ2U6IEpzaWlQYWNtYWtUYXJnZXQpOiBUYXNrIHtcbiAgICBjb25zdCBwYWNrYWdlVGFzayA9IHRoaXMudGFza3MuYWRkVGFzayhgcGFja2FnZToke2xhbmd1YWdlfWAsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBgQ3JlYXRlICR7bGFuZ3VhZ2V9IGxhbmd1YWdlIGJpbmRpbmdzYCxcbiAgICB9KTtcblxuICAgIHBhY2thZ2VUYXNrLmV4ZWMoXG4gICAgICBcImpzaWlfdmVyc2lvbj0kKG5vZGUgLXAgXFxcIkpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKCcuanNpaScpKS5qc2lpVmVyc2lvbi5zcGxpdCgnICcpWzBdXFxcIilcIlxuICAgICk7XG4gICAgcGFja2FnZVRhc2suZXhlYyhgbnB4IGpzaWktcGFjbWFrQCRqc2lpX3ZlcnNpb24gLXYgLS10YXJnZXQgJHtsYW5ndWFnZX1gKTtcbiAgICB0aGlzLnBhY2thZ2VBbGxUYXNrLnNwYXduKHBhY2thZ2VUYXNrKTtcbiAgICByZXR1cm4gcGFja2FnZVRhc2s7XG4gIH1cblxuICBwcml2YXRlIHBhY21ha0Zvckxhbmd1YWdlKFxuICAgIHRhcmdldDogSnNpaVBhY21ha1RhcmdldCxcbiAgICBwYWNrVGFzazogVGFza1xuICApOiBDb21tb25QdWJsaXNoT3B0aW9ucyB7XG4gICAgLy8gYXQgdGhpcyBzdGFnZSwgYGFydGlmYWN0c0RpcmVjdG9yeWAgY29udGFpbnMgdGhlIHByZWJ1aWx0IHJlcG9zaXRvcnkuXG4gICAgLy8gZm9yIHRoZSBwdWJsaXNoaW5nIHRvIHdvcmsgc2VhbWxlc3NlbHksIHRoYXQgZGlyZWN0b3J5IG5lZWRzIHRvIGNvbnRhaW4gdGhlIGFjdHVhbCBhcnRpZmFjdC5cbiAgICAvLyBzbyB3ZSBtb3ZlIHRoZSByZXBvLCBjcmVhdGUgdGhlIGFydGlmYWN0LCBhbmQgcHV0IGl0IGluIHRoZSBleHBlY3RlZCBwbGFjZS5cblxuICAgIHJldHVybiB7XG4gICAgICBwdWJsaXNoVG9vbHM6IEpTSUlfVE9PTENIQUlOW3RhcmdldF0sXG4gICAgICBwcmVQdWJsaXNoU3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiUHJlcGFyZSBSZXBvc2l0b3J5XCIsXG4gICAgICAgICAgcnVuOiBgbXYgJHt0aGlzLmFydGlmYWN0c0RpcmVjdG9yeX0gJHtSRVBPX1RFTVBfRElSRUNUT1JZfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkluc3RhbGwgRGVwZW5kZW5jaWVzXCIsXG4gICAgICAgICAgcnVuOiBgY2QgJHtSRVBPX1RFTVBfRElSRUNUT1JZfSAmJiAke3RoaXMucGFja2FnZS5pbnN0YWxsQ29tbWFuZH1gLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYENyZWF0ZSAke3RhcmdldH0gYXJ0aWZhY3RgLFxuICAgICAgICAgIHJ1bjogYGNkICR7UkVQT19URU1QX0RJUkVDVE9SWX0gJiYgbnB4IHByb2plbiAke3BhY2tUYXNrLm5hbWV9YCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGBDb2xsZWN0ICR7dGFyZ2V0fSBBcnRpZmFjdGAsXG4gICAgICAgICAgcnVuOiBgbXYgJHtSRVBPX1RFTVBfRElSRUNUT1JZfS8ke3RoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5fSAke3RoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5fWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VBdXRob3JBZGRyZXNzKG9wdGlvbnM6IEpzaWlQcm9qZWN0T3B0aW9ucykge1xuICBsZXQgYXV0aG9yRW1haWwgPSBvcHRpb25zLmF1dGhvckVtYWlsO1xuICBsZXQgYXV0aG9yVXJsID0gb3B0aW9ucy5hdXRob3JVcmw7XG4gIGlmIChvcHRpb25zLmF1dGhvckFkZHJlc3MpIHtcbiAgICBpZiAob3B0aW9ucy5hdXRob3JFbWFpbCAmJiBvcHRpb25zLmF1dGhvckVtYWlsICE9PSBvcHRpb25zLmF1dGhvckFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJhdXRob3JFbWFpbCBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGF1dGhvckFkZHJlc3NcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hdXRob3JVcmwgJiYgb3B0aW9ucy5hdXRob3JVcmwgIT09IG9wdGlvbnMuYXV0aG9yQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImF1dGhvclVybCBpcyBkZXByZWNhdGVkIGFuZCBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGF1dGhvckFkZHJlc3MuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKEVNQUlMX1JFR0VYLnRlc3Qob3B0aW9ucy5hdXRob3JBZGRyZXNzKSkge1xuICAgICAgYXV0aG9yRW1haWwgPSBvcHRpb25zLmF1dGhvckFkZHJlc3M7XG4gICAgfSBlbHNlIGlmIChVUkxfUkVHRVgudGVzdChvcHRpb25zLmF1dGhvckFkZHJlc3MpKSB7XG4gICAgICBhdXRob3JVcmwgPSBvcHRpb25zLmF1dGhvckFkZHJlc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGF1dGhvckFkZHJlc3MgbXVzdCBiZSBlaXRoZXIgYW4gZW1haWwgYWRkcmVzcyBvciBhIFVSTDogJHtvcHRpb25zLmF1dGhvckFkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgYXV0aG9yRW1haWwsIGF1dGhvclVybCB9O1xufVxuIl19
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nkay9qc2lpLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSw4Q0FBNEU7QUFDNUUscUNBQTREO0FBQzVELCtDQUEyQztBQUUzQyxNQUFNLFdBQVcsR0FDZiw0YUFBNGEsQ0FBQztBQUMvYSxNQUFNLFNBQVMsR0FDYixzTEFBc0wsQ0FBQztBQUN6TCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztBQTZGcEMsSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ25CLDBDQUE2QixDQUFBO0lBQzdCLDhCQUFpQixDQUFBO0lBQ2pCLHNDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFKVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUlwQjtBQStCRDs7OztHQUlHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsOEJBQWlCO0lBS2hELFlBQVksT0FBMkI7O1FBQ3JDLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsS0FBSyxDQUFDO1lBQ0osVUFBVSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1lBQ2pDLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTTtZQUMxQixXQUFXO1lBQ1gsU0FBUztZQUNULEdBQUcsT0FBTztZQUNWLFlBQVksRUFBRSxLQUFLO1lBQ25CLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTNCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFbEQsK0JBQStCO1FBQy9CLE1BQU0sU0FBUyxHQUFH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a0IsRUFBRTtpQkFDdkY7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOztBQTNQSCxrQ0E0UEM7OztBQUVELFNBQVMsa0JBQWtCLENBQUMsT0FBMkI7SUFDckQsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUN0QyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBQ2xDLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRTtRQUN6QixJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQ3hFLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0ZBQWdGLENBQ2pGLENBQUM7U0FDSDtRQUVELElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRUFBK0UsQ0FDaEYsQ0FBQztTQUNIO1FBRUQsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMzQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUNyQzthQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDaEQsU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDbkM7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FDbkYsQ0FBQztTQUNIO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYXNrIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBFc2xpbnQgfSBmcm9tIFwiLi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHtcbiAgQ29tbW9uUHVibGlzaE9wdGlvbnMsXG4gIEdvUHVibGlzaE9wdGlvbnMsXG4gIE1hdmVuUHVibGlzaE9wdGlvbnMsXG4gIE51Z2V0UHVibGlzaE9wdGlvbnMsXG4gIFB5UGlQdWJsaXNoT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3JlbGVhc2VcIjtcbmltcG9ydCB7IFR5cGVTY3JpcHRQcm9qZWN0LCBUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgSnNpaVBhY21ha1RhcmdldCwgSlNJSV9UT09MQ0hBSU4gfSBmcm9tIFwiLi9jb25zdHNcIjtcbmltcG9ydCB7IEpzaWlEb2NnZW4gfSBmcm9tIFwiLi9qc2lpLWRvY2dlblwiO1xuXG5jb25zdCBFTUFJTF9SRUdFWCA9XG4gIC8oPzpbYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKD86XFwuW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKykqfFwiKD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkqXCIpQCg/Oig/OlthLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT9cXC4pK1thLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT98XFxbKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT98W2EtejAtOS1dKlthLXowLTldOig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxLVxceDVhXFx4NTMtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSspXFxdKS87XG5jb25zdCBVUkxfUkVHRVggPVxuICAvKCgoW0EtWmEtel17Myw5fTooPzpcXC9cXC8pPykoPzpbXFwtOzomPVxcK1xcJCxcXHddK0ApP1tBLVphLXowLTlcXC5cXC1dK3woPzp3d3dcXC58W1xcLTs6Jj1cXCtcXCQsXFx3XStAKVtBLVphLXowLTlcXC5cXC1dKykoKD86XFwvW1xcK34lXFwvXFwuXFx3XFwtX10qKT9cXD8/KD86W1xcLVxcKz0mOyVAXFwuXFx3X10qKSM/KD86W1xcLlxcIVxcL1xcXFxcXHddKikpPykvO1xuY29uc3QgUkVQT19URU1QX0RJUkVDVE9SWSA9IFwiLnJlcG9cIjtcblxuZXhwb3J0IGludGVyZmFjZSBKc2lpUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgXCIuXCJcbiAgICovXG4gIHJlYWRvbmx5IHJvb3RkaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdpdCByZXBvc2l0b3J5IFVSTC5cbiAgICogQGRlZmF1bHQgJEdJVF9SRU1PVEVcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnlVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgYXV0aG9yLlxuICAgKiBAZGVmYXVsdCAkR0lUX1VTRVJfTkFNRVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVtYWlsIG9yIFVSTCBvZiB0aGUgbGlicmFyeSBhdXRob3IuXG4gICAqIEBkZWZhdWx0ICRHSVRfVVNFUl9FTUFJTFxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yQWRkcmVzczogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaXNoIHRvIG1hdmVuXG4gICAqIEBkZWZhdWx0IC0gbm8gcHVibGlzaGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFRvTWF2ZW4/OiBKc2lpSmF2YVRhcmdldDtcblxuICAvKipcbiAgICogUHVibGlzaCB0byBweXBpXG4gICAqIEBkZWZhdWx0IC0gbm8gcHVibGlzaGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaFRvUHlwaT86IEpzaWlQeXRob25UYXJnZXQ7XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2ggR28gYmluZGluZ3MgdG8gYSBnaXQgcmVwb3NpdG9yeS5cbiAgICogQGRlZmF1bHQgLSBubyBwdWJsaXNoaW5nXG4gICAqL1xuICByZWFkb25seSBwdWJsaXNoVG9Hbz86IEpzaWlHb1RhcmdldDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBwdWJsaXNoVG9QeVBpYFxuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uPzogSnNpaVB5dGhvblRhcmdldDtcblxuICAvKipcbiAgICogUHVibGlzaCB0byBOdUdldFxuICAgKiBAZGVmYXVsdCAtIG5vIHB1Ymxpc2hpbmdcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hUb051Z2V0PzogSnNpaURvdE5ldFRhcmdldDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBwdWJsaXNoVG9OdWdldGBcbiAgICovXG4gIHJlYWRvbmx5IGRvdG5ldD86IEpzaWlEb3ROZXRUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgcnVuIEFQSSBjb21wYXRpYmlsaXR5IHRlc3QgYWdhaW5zdCB0aGUgbGF0ZXN0IHZlcnNpb24gcHVibGlzaGVkIHRvIG5wbSBhZnRlciBjb21waWxhdGlvbi5cbiAgICpcbiAgICogLSBZb3UgY2FuIG1hbnVhbGx5IHJ1biBjb21wYXRpYmlsaXR5IHRlc3RzIHVzaW5nIGB5YXJuIGNvbXBhdGAgaWYgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLlxuICAgKiAtIFlvdSBjYW4gaWdub3JlIGNvbXBhdGliaWxpdHkgZmFpbHVyZXMgYnkgYWRkaW5nIGxpbmVzIHRvIGEgXCIuY29tcGF0aWdub3JlXCIgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBhdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGlnbm9yZSBmaWxlIGZvciBBUEkgY29tcGF0aWJpbGl0eSB0ZXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIuY29tcGF0aWdub3JlXCJcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBhdElnbm9yZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWNjZXB0cyBhIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gRmlsZXMgbWF0Y2hpbmcgYW55IG9mIHRob3NlIHBhdHRlcm5zIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCBjb21waWxlciBpbnB1dC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwganNpaSB3aWxsIGluY2x1ZGUgYWxsICoudHMgZmlsZXMgKGV4Y2VwdCAuZC50cyBmaWxlcykgaW4gdGhlIFR5cGVTY3JpcHQgY29tcGlsZXIgaW5wdXQuXG4gICAqIFRoaXMgY2FuIGJlIHByb2JsZW1hdGljIGZvciBleGFtcGxlIHdoZW4gdGhlIHBhY2thZ2UncyBidWlsZCBvciB0ZXN0IHByb2NlZHVyZSBnZW5lcmF0ZXMgLnRzIGZpbGVzXG4gICAqIHRoYXQgY2Fubm90IGJlIGNvbXBpbGVkIHdpdGgganNpaSdzIGNvbXBpbGVyIHNldHRpbmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZVR5cGVzY3JpcHQ/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRmlsZSBwYXRoIGZvciBnZW5lcmF0ZWQgZG9jcy5cbiAgICogQGRlZmF1bHQgXCJBUEkubWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jZ2VuRmlsZVBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFN0YWJpbGl0eSB7XG4gIEVYUEVSSU1FTlRBTCA9IFwiZXhwZXJpbWVudGFsXCIsXG4gIFNUQUJMRSA9IFwic3RhYmxlXCIsXG4gIERFUFJFQ0FURUQgPSBcImRlcHJlY2F0ZWRcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc2lpSmF2YVRhcmdldCBleHRlbmRzIE1hdmVuUHVibGlzaE9wdGlvbnMge1xuICByZWFkb25seSBqYXZhUGFja2FnZTogc3RyaW5nO1xuICByZWFkb25seSBtYXZlbkdyb3VwSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbWF2ZW5BcnRpZmFjdElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNpaVB5dGhvblRhcmdldCBleHRlbmRzIFB5UGlQdWJsaXNoT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRpc3ROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZHVsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlEb3ROZXRUYXJnZXQgZXh0ZW5kcyBOdWdldFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgZG90TmV0TmFtZXNwYWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhY2thZ2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdvIHRhcmdldCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNpaUdvVGFyZ2V0IGV4dGVuZHMgR29QdWJsaXNoT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGdvIG1vZHVsZS5cbiAgICpcbiAgICogQGV4YW1wbGUgZ2l0aHViLmNvbS9vd25lci9yZXBvXG4gICAqIEBleGFtcGxlIGdpdGh1Yi5jb20vb3duZXIvcmVwby9zdWJkaXJcbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBNdWx0aS1sYW5ndWFnZSBqc2lpIGxpYnJhcnkgcHJvamVjdFxuICpcbiAqIEBwamlkIGpzaWlcbiAqL1xuZXhwb3J0IGNsYXNzIEpzaWlQcm9qZWN0IGV4dGVuZHMgVHlwZVNjcmlwdFByb2plY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZXNsaW50PzogRXNsaW50O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZUFsbFRhc2s6IFRhc2s7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSnNpaVByb2plY3RPcHRpb25zKSB7XG4gICAgY29uc3QgeyBhdXRob3JFbWFpbCwgYXV0aG9yVXJsIH0gPSBwYXJzZUF1dGhvckFkZHJlc3Mob3B0aW9ucyk7XG4gICAgc3VwZXIoe1xuICAgICAgcmVwb3NpdG9yeTogb3B0aW9ucy5yZXBvc2l0b3J5VXJsLFxuICAgICAgYXV0aG9yTmFtZTogb3B0aW9ucy5hdXRob3IsXG4gICAgICBhdXRob3JFbWFpbCxcbiAgICAgIGF1dGhvclVybCxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICByZWxlYXNlVG9OcG06IGZhbHNlLCAvLyB3ZSBoYXZlIGEganNpaSByZWxlYXNlIHdvcmtmbG93XG4gICAgICBkaXNhYmxlVHNjb25maWc6IHRydWUsIC8vIGpzaWkgZ2VuZXJhdGVzIGl0cyBvd24gdHNjb25maWcuanNvblxuICAgICAgZG9jZ2VuOiBmYWxzZSwgLy8gd2UgdXNlIGpzaWktZG9jZ2VuIGhlcmUgc28gZGlzYWJsZSB0eXBlc2NyaXB0IGRvY2dlblxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3JjZGlyID0gdGhpcy5zcmNkaXI7XG4gICAgY29uc3QgbGliZGlyID0gdGhpcy5saWJkaXI7XG5cbiAgICB0aGlzLmFkZEZpZWxkcyh7IHR5cGVzOiBgJHtsaWJkaXJ9L2luZGV4LmQudHNgIH0pO1xuXG4gICAgLy8gdGhpcyBpcyBhbiB1bmhlbHBmdWwgd2FybmluZ1xuICAgIGNvbnN0IGpzaWlGbGFncyA9IFtcbiAgICAgIFwiLS1zaWxlbmNlLXdhcm5pbmdzPXJlc2VydmVkLXdvcmRcIixcbiAgICAgIFwiLS1uby1maXgtcGVlci1kZXBlbmRlbmNpZXNcIixcbiAgICBdLmpvaW4oXCIgXCIpO1xuXG4gICAgY29uc3QgY29tcGF0SWdub3JlID0gb3B0aW9ucy5jb21wYXRJZ25vcmUgPz8gXCIuY29tcGF0aWdub3JlXCI7XG5cbiAgICB0aGlzLmFkZEZpZWxkcyh7IHN0YWJpbGl0eTogb3B0aW9ucy5zdGFiaWxpdHkgPz8gU3RhYmlsaXR5LlNUQUJMRSB9KTtcblxuICAgIGlmIChvcHRpb25zLnN0YWJpbGl0eSA9PT0gU3RhYmlsaXR5LkRFUFJFQ0FURUQpIHtcbiAgICAgIHRoaXMuYWRkRmllbGRzKHsgZGVwcmVjYXRlZDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wYXRUYXNrID0gdGhpcy5hZGRUYXNrKFwiY29tcGF0XCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlBlcmZvcm0gQVBJIGNvbXBhdGliaWxpdHkgY2hlY2sgYWdhaW5zdCBsYXRlc3QgdmVyc2lvblwiLFxuICAgICAgZXhlYzogYGpzaWktZGlmZiBucG06JChub2RlIC1wIFwicmVxdWlyZShcXCcuL3BhY2thZ2UuanNvblxcJykubmFtZVwiKSAtayAtLWlnbm9yZS1maWxlICR7Y29tcGF0SWdub3JlfSB8fCAoZWNobyBcIlxcblVORVhQRUNURUQgQlJFQUtJTkcgQ0hBTkdFUzogYWRkIGtleXMgc3VjaCBhcyBcXCdyZW1vdmVkOmNvbnN0cnVjdHMuTm9kZS5vZlxcJyB0byAke2NvbXBhdElnbm9yZX0gdG8gc2tpcC5cXG5cIiAmJiBleGl0IDEpYCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbXBhdCA9IG9wdGlvbnMuY29tcGF0ID8/IGZhbHNlO1xuICAgIGlmIChjb21wYXQpIHtcbiAgICAgIHRoaXMuY29tcGlsZVRhc2suc3Bhd24oY29tcGF0VGFzayk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21waWxlVGFzay5yZXNldChganNpaSAke2pzaWlGbGFnc31gKTtcbiAgICB0aGlzLndhdGNoVGFzay5yZXNldChganNpaSAtdyAke2pzaWlGbGFnc31gKTtcbiAgICB0aGlzLnBhY2thZ2VBbGxUYXNrID0gdGhpcy5hZGRUYXNrKFwicGFja2FnZS1hbGxcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiUGFja2FnZXMgYXJ0aWZhY3RzIGZvciBhbGwgdGFyZ2V0IGxhbmd1YWdlc1wiLFxuICAgIH0pO1xuXG4gICAgLy8gaW4ganNpaSB3ZSBjb25zaWRlciB0aGUgZW50aXJlIHJlcG8gKHBvc3QgYnVpbGQpIGFzIHRoZSBidWlsZCBhcnRpZmFjdFxuICAgIC8vIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBjcmVhdGUgdGhlIGxhbmd1YWdlIGJpbmRpbmdzIGluIHNlcGFyYXRlIGpvYnMuXG4gICAgdGhpcy5wYWNrYWdlVGFzay5yZXNldChgbWtkaXIgLXAgJHt0aGlzLmFydGlmYWN0c0RpcmVjdG9yeX1gKTtcbiAgICB0aGlzLnBhY2thZ2VUYXNrLmV4ZWMoXG4gICAgICBgcnN5bmMgLWEgLiAke3RoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5fSAtLWV4Y2x1ZGUgLmdpdCAtLWV4Y2x1ZGUgbm9kZV9tb2R1bGVzYFxuICAgICk7XG5cbiAgICBjb25zdCB0YXJnZXRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBjb25zdCBqc2lpOiBhbnkgPSB7XG4gICAgICBvdXRkaXI6IHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5LFxuICAgICAgdGFyZ2V0cyxcbiAgICAgIHRzYzoge1xuICAgICAgICBvdXREaXI6IGxpYmRpcixcbiAgICAgICAgcm9vdERpcjogc3JjZGlyLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMuZXhjbHVkZVR5cGVzY3JpcHQpIHtcbiAgICAgIGpzaWkuZXhjbHVkZVR5cGVzY3JpcHQgPSBvcHRpb25zLmV4Y2x1ZGVUeXBlc2NyaXB0O1xuICAgIH1cblxuICAgIHRoaXMuYWRkRmllbGRzKHsganNpaSB9KTtcblxuICAgIHRoaXMucmVsZWFzZT8ucHVibGlzaGVyLmFkZEdpdEh1YlByZVB1Ymxpc2hpbmdTdGVwcyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJQcmVwYXJlIFJlcG9zaXRvcnlcIixcbiAgICAgICAgcnVuOiBgbXYgJHt0aGlzLmFydGlmYWN0c0RpcmVjdG9yeX0gJHtSRVBPX1RFTVBfRElSRUNUT1JZfWAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIkNvbGxlY3QgR2l0SHViIE1ldGFkYXRhXCIsXG4gICAgICAgIHJ1bjogYG12ICR7UkVQT19URU1QX0RJUkVDVE9SWX0vJHt0aGlzLmFydGlmYWN0c0RpcmVjdG9yeX0gJHt0aGlzLmFydGlmYWN0c0RpcmVjdG9yeX1gLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAob3B0aW9ucy5yZWxlYXNlVG9OcG0gIT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLmFkZFBhY2thZ2luZ1Rhc2soXCJqc1wiKTtcbiAgICAgIHRoaXMucmVsZWFzZT8ucHVibGlzaGVyLnB1Ymxpc2hUb05wbSh7XG4gICAgICAgIC4uLnRoaXMucGFjbWFrRm9yTGFuZ3VhZ2UoXCJqc1wiLCB0YXNrKSxcbiAgICAgICAgcmVnaXN0cnk6IHRoaXMucGFja2FnZS5ucG1SZWdpc3RyeSxcbiAgICAgICAgbnBtVG9rZW5TZWNyZXQ6IHRoaXMucGFja2FnZS5ucG1Ub2tlblNlY3JldCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRQYWNrYWdpbmdUYXJnZXQoXCJqc1wiLCB0YXNrKTtcbiAgICB9XG5cbiAgICAvLyB3ZSBjYW5ub3QgY2FsbCBhbiBvcHRpb24gYGphdmFgIGJlY2F1c2UgdGhlIGphdmEgY29kZSBnZW5lcmF0ZWQgYnkganNpaVxuICAgIC8vIGRvZXMgbm90IGNvbXBpbGUgZHVlIHRvIGEgY29uZmxpY3QgYmV0d2VlbiB0aGlzIG9wdGlvbiBuYW1lIGFuZCB0aGUgYGphdmFgXG4gICAgLy8gcGFja2FnZSAoZS5nLiB3aGVuIGBqYXZhLnV0aWwuT2JqZWN0c2AgaXMgcmVmZXJlbmNlZCkuXG4gICAgaWYgKFwiamF2YVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhlIFwiamF2YVwiIG9wdGlvbiBpcyBub3cgY2FsbGVkIFwicHVibGlzaFRvTWF2ZW5cIicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnB1Ymxpc2hUb01hdmVuKSB7XG4gICAgICB0YXJnZXRzLmphdmEgPSB7XG4gICAgICAgIHBhY2thZ2U6IG9wdGlvbnMucHVibGlzaFRvTWF2ZW4uamF2YVBhY2thZ2UsXG4gICAgICAgIG1hdmVuOiB7XG4gICAgICAgICAgZ3JvdXBJZDogb3B0aW9ucy5wdWJsaXNoVG9NYXZlbi5tYXZlbkdyb3VwSWQsXG4gICAgICAgICAgYXJ0aWZhY3RJZDogb3B0aW9ucy5wdWJsaXNoVG9NYXZlbi5tYXZlbkFydGlmYWN0SWQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0YXNrID0gdGhpcy5hZGRQYWNrYWdpbmdUYXNrKFwiamF2YVwiKTtcblxuICAgICAgdGhpcy5yZWxlYXNlPy5wdWJsaXNoZXIucHVibGlzaFRvTWF2ZW4oe1xuICAgICAgICAuLi50aGlzLnBhY21ha0Zvckxhbmd1YWdlKFwiamF2YVwiLCB0YXNrKSxcbiAgICAgICAgLi4ub3B0aW9ucy5wdWJsaXNoVG9NYXZlbixcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFkZFBhY2thZ2luZ1RhcmdldChcImphdmFcIiwgdGFzayk7XG4gICAgfVxuXG4gICAgY29uc3QgcHlwaSA9IG9wdGlvbnMucHVibGlzaFRvUHlwaSA/PyBvcHRpb25zLnB5dGhvbjtcbiAgICBpZiAocHlwaSkge1xuICAgICAgdGFyZ2V0cy5weXRob24gPSB7XG4gICAgICAgIGRpc3ROYW1lOiBweXBpLmRpc3ROYW1lLFxuICAgICAgICBtb2R1bGU6IHB5cGkubW9kdWxlLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdGFzayA9IHRoaXMuYWRkUGFja2FnaW5nVGFzayhcInB5dGhvblwiKTtcbiAgICAgIHRoaXMucmVsZWFzZT8ucHVibGlzaGVyLnB1Ymxpc2hUb1B5UGkoe1xuICAgICAgICAuLi50aGlzLnBhY21ha0Zvckxhbmd1YWdlKFwicHl0aG9uXCIsIHRhc2spLFxuICAgICAgICAuLi5weXBpLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWRkUGFja2FnaW5nVGFyZ2V0KFwicHl0aG9uXCIsIHRhc2spO1xuICAgIH1cblxuICAgIGNvbnN0IG51Z2V0ID0gb3B0aW9ucy5wdWJsaXNoVG9OdWdldCA/PyBvcHRpb25zLmRvdG5ldDtcbiAgICBpZiAobnVnZXQpIHtcbiAgICAgIHRhcmdldHMuZG90bmV0ID0ge1xuICAgICAgICBuYW1lc3BhY2U6IG51Z2V0LmRvdE5ldE5hbWVzcGFjZSxcbiAgICAgICAgcGFja2FnZUlkOiBudWdldC5wYWNrYWdlSWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0YXNrID0gdGhpcy5hZGRQYWNrYWdpbmdUYXNrKFwiZG90bmV0XCIpO1xuICAgICAgdGhpcy5yZWxlYXNlPy5wdWJsaXNoZXIucHVibGlzaFRvTnVnZXQoe1xuICAgICAgICAuLi50aGlzLnBhY21ha0Zvckxhbmd1YWdlKFwiZG90bmV0XCIsIHRhc2spLFxuICAgICAgICAuLi5udWdldCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFkZFBhY2thZ2luZ1RhcmdldChcImRvdG5ldFwiLCB0YXNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBnb2xhbmcgPSBvcHRpb25zLnB1Ymxpc2hUb0dvO1xuICAgIGlmIChnb2xhbmcpIHtcbiAgICAgIHRhcmdldHMuZ28gPSB7XG4gICAgICAgIG1vZHVsZU5hbWU6IGdvbGFuZy5tb2R1bGVOYW1lLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdGFzayA9IHRoaXMuYWRkUGFja2FnaW5nVGFzayhcImdvXCIpO1xuICAgICAgdGhpcy5yZWxlYXNlPy5wdWJsaXNoZXIucHVibGlzaFRvR28oe1xuICAgICAgICAuLi50aGlzLnBhY21ha0Zvckxhbmd1YWdlKFwiZ29cIiwgdGFzayksXG4gICAgICAgIC4uLmdvbGFuZyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFkZFBhY2thZ2luZ1RhcmdldChcImdvXCIsIHRhc2spO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGV2RGVwcyhcImpzaWlcIiwgXCJqc2lpLWRpZmZcIik7XG5cbiAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKFwiLmpzaWlcIiwgXCJ0c2NvbmZpZy5qc29uXCIpO1xuICAgIHRoaXMubnBtaWdub3JlPy5pbmNsdWRlKFwiLmpzaWlcIik7XG5cbiAgICBpZiAob3B0aW9ucy5kb2NnZW4gPz8gdHJ1ZSkge1xuICAgICAgbmV3IEpzaWlEb2NnZW4odGhpcywgeyBmaWxlUGF0aDogb3B0aW9ucy5kb2NnZW5GaWxlUGF0aCB9KTtcbiAgICB9XG5cbiAgICAvLyBqc2lpIHVwZGF0ZXMgLm5wbWlnbm9yZSwgc28gd2UgbWFrZSBpdCB3cml0YWJsZVxuICAgIGlmICh0aGlzLm5wbWlnbm9yZSkge1xuICAgICAgdGhpcy5ucG1pZ25vcmUucmVhZG9ubHkgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHRhcmdldCBsYW5ndWFnZSB0byB0aGUgYnVpbGQgd29ya2Zsb3cgYW5kIGNyZWF0ZXMgYSBwYWNrYWdlIHRhc2suXG4gICAqIEBwYXJhbSBsYW5ndWFnZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRQYWNrYWdpbmdUYXJnZXQobGFuZ3VhZ2U6IEpzaWlQYWNtYWtUYXJnZXQsIHBhY2tUYXNrOiBUYXNrKSB7XG4gICAgaWYgKCF0aGlzLmJ1aWxkV29ya2Zsb3cpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNtYWsgPSB0aGlzLnBhY21ha0Zvckxhbmd1YWdlKGxhbmd1YWdlLCBwYWNrVGFzayk7XG5cbiAgICB0aGlzLmJ1aWxkV29ya2Zsb3cuYWRkUG9zdEJ1aWxkSm9iKGBwYWNrYWdlLSR7bGFuZ3VhZ2V9YCwge1xuICAgICAgcnVuc09uOiBbXCJ1YnVudHUtbGF0ZXN0XCJdLFxuICAgICAgcGVybWlzc2lvbnM6IHt9LFxuICAgICAgdG9vbHM6IHtcbiAgICAgICAgbm9kZTogeyB2ZXJzaW9uOiBcIjE0LnhcIiB9LFxuICAgICAgICAuLi5wYWNtYWsucHVibGlzaFRvb2xzLFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOiBwYWNtYWsucHJlUHVibGlzaFN0ZXBzID8/IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQYWNrYWdpbmdUYXNrKGxhbmd1YWdlOiBKc2lpUGFjbWFrVGFyZ2V0KTogVGFzayB7XG4gICAgY29uc3QgcGFja2FnZVRhc2sgPSB0aGlzLnRhc2tzLmFkZFRhc2soYHBhY2thZ2U6JHtsYW5ndWFnZX1gLCB7XG4gICAgICBkZXNjcmlwdGlvbjogYENyZWF0ZSAke2xhbmd1YWdlfSBsYW5ndWFnZSBiaW5kaW5nc2AsXG4gICAgfSk7XG5cbiAgICBwYWNrYWdlVGFzay5leGVjKFxuICAgICAgXCJqc2lpX3ZlcnNpb249JChub2RlIC1wIFxcXCJKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYygnLmpzaWknKSkuanNpaVZlcnNpb24uc3BsaXQoJyAnKVswXVxcXCIpXCJcbiAgICApO1xuICAgIHBhY2thZ2VUYXNrLmV4ZWMoYG5weCBqc2lpLXBhY21ha0AkanNpaV92ZXJzaW9uIC12IC0tdGFyZ2V0ICR7bGFuZ3VhZ2V9YCk7XG4gICAgdGhpcy5wYWNrYWdlQWxsVGFzay5zcGF3bihwYWNrYWdlVGFzayk7XG4gICAgcmV0dXJuIHBhY2thZ2VUYXNrO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWNtYWtGb3JMYW5ndWFnZShcbiAgICB0YXJnZXQ6IEpzaWlQYWNtYWtUYXJnZXQsXG4gICAgcGFja1Rhc2s6IFRhc2tcbiAgKTogQ29tbW9uUHVibGlzaE9wdGlvbnMge1xuICAgIC8vIGF0IHRoaXMgc3RhZ2UsIGBhcnRpZmFjdHNEaXJlY3RvcnlgIGNvbnRhaW5zIHRoZSBwcmVidWlsdCByZXBvc2l0b3J5LlxuICAgIC8vIGZvciB0aGUgcHVibGlzaGluZyB0byB3b3JrIHNlYW1sZXNzZWx5LCB0aGF0IGRpcmVjdG9yeSBuZWVkcyB0byBjb250YWluIHRoZSBhY3R1YWwgYXJ0aWZhY3QuXG4gICAgLy8gc28gd2UgbW92ZSB0aGUgcmVwbywgY3JlYXRlIHRoZSBhcnRpZmFjdCwgYW5kIHB1dCBpdCBpbiB0aGUgZXhwZWN0ZWQgcGxhY2UuXG5cbiAgICByZXR1cm4ge1xuICAgICAgcHVibGlzaFRvb2xzOiBKU0lJX1RPT0xDSEFJTlt0YXJnZXRdLFxuICAgICAgcHJlUHVibGlzaFN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIlByZXBhcmUgUmVwb3NpdG9yeVwiLFxuICAgICAgICAgIHJ1bjogYG12ICR7dGhpcy5hcnRpZmFjdHNEaXJlY3Rvcnl9ICR7UkVQT19URU1QX0RJUkVDVE9SWX1gLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJJbnN0YWxsIERlcGVuZGVuY2llc1wiLFxuICAgICAgICAgIHJ1bjogYGNkICR7UkVQT19URU1QX0RJUkVDVE9SWX0gJiYgJHt0aGlzLnBhY2thZ2UuaW5zdGFsbENvbW1hbmR9YCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGBDcmVhdGUgJHt0YXJnZXR9IGFydGlmYWN0YCxcbiAgICAgICAgICBydW46IGBjZCAke1JFUE9fVEVNUF9ESVJFQ1RPUll9ICYmIG5weCBwcm9qZW4gJHtwYWNrVGFzay5uYW1lfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgQ29sbGVjdCAke3RhcmdldH0gQXJ0aWZhY3RgLFxuICAgICAgICAgIHJ1bjogYG12ICR7UkVQT19URU1QX0RJUkVDVE9SWX0vJHt0aGlzLmFydGlmYWN0c0RpcmVjdG9yeX0gJHt0aGlzLmFydGlmYWN0c0RpcmVjdG9yeX1gLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQXV0aG9yQWRkcmVzcyhvcHRpb25zOiBKc2lpUHJvamVjdE9wdGlvbnMpIHtcbiAgbGV0IGF1dGhvckVtYWlsID0gb3B0aW9ucy5hdXRob3JFbWFpbDtcbiAgbGV0IGF1dGhvclVybCA9IG9wdGlvbnMuYXV0aG9yVXJsO1xuICBpZiAob3B0aW9ucy5hdXRob3JBZGRyZXNzKSB7XG4gICAgaWYgKG9wdGlvbnMuYXV0aG9yRW1haWwgJiYgb3B0aW9ucy5hdXRob3JFbWFpbCAhPT0gb3B0aW9ucy5hdXRob3JBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYXV0aG9yRW1haWwgaXMgZGVwcmVjYXRlZCBhbmQgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhdXRob3JBZGRyZXNzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuYXV0aG9yVXJsICYmIG9wdGlvbnMuYXV0aG9yVXJsICE9PSBvcHRpb25zLmF1dGhvckFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJhdXRob3JVcmwgaXMgZGVwcmVjYXRlZCBhbmQgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhdXRob3JBZGRyZXNzLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChFTUFJTF9SRUdFWC50ZXN0KG9wdGlvbnMuYXV0aG9yQWRkcmVzcykpIHtcbiAgICAgIGF1dGhvckVtYWlsID0gb3B0aW9ucy5hdXRob3JBZGRyZXNzO1xuICAgIH0gZWxzZSBpZiAoVVJMX1JFR0VYLnRlc3Qob3B0aW9ucy5hdXRob3JBZGRyZXNzKSkge1xuICAgICAgYXV0aG9yVXJsID0gb3B0aW9ucy5hdXRob3JBZGRyZXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhdXRob3JBZGRyZXNzIG11c3QgYmUgZWl0aGVyIGFuIGVtYWlsIGFkZHJlc3Mgb3IgYSBVUkw6ICR7b3B0aW9ucy5hdXRob3JBZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGF1dGhvckVtYWlsLCBhdXRob3JVcmwgfTtcbn1cbiJdfQ==
@@ -2,49 +2,32 @@ import { IntegrationTestAutoDiscoverBase, IntegrationTestAutoDiscoverBaseOptions
2
2
  import { Component } from "../component";
3
3
  import { Project } from "../project";
4
4
  /**
5
- * (experimental) Options for `AutoDiscover`.
6
- *
7
- * @experimental
5
+ * Options for `AutoDiscover`.
8
6
  */
9
7
  export interface AutoDiscoverOptions extends IntegrationTestAutoDiscoverOptions {
10
8
  /**
11
- * (experimental) Automatically discover integration tests.
9
+ * Automatically discover integration tests
12
10
  *
13
11
  * @default true
14
- * @experimental
15
12
  */
16
13
  readonly integrationTestAutoDiscover?: boolean;
17
14
  }
18
15
  /**
19
- * (experimental) Automatically discovers and creates `IntegrationTest`s from entry points found in the test tree.
20
- *
21
- * @experimental
16
+ * Automatically discovers and creates `IntegrationTest`s from entry points
17
+ * found in the test tree.
22
18
  */
23
19
  export declare class AutoDiscover extends Component {
24
- /**
25
- * @experimental
26
- */
27
20
  constructor(project: Project, options: AutoDiscoverOptions);
28
21
  }
29
- /**
30
- * @experimental
31
- */
32
22
  export interface IntegrationTestAutoDiscoverOptions extends IntegrationTestAutoDiscoverBaseOptions {
33
23
  /**
34
- * (experimental) Path to the tsconfig file to use for integration tests.
35
- *
36
- * @experimental
24
+ * Path to the tsconfig file to use for integration tests.
37
25
  */
38
26
  readonly tsconfigPath: string;
39
27
  }
40
28
  /**
41
- * (experimental) Discovers and creates integration tests from files in the test root.
42
- *
43
- * @experimental
29
+ * Discovers and creates integration tests from files in the test root.
44
30
  */
45
31
  export declare class IntegrationTestAutoDiscover extends IntegrationTestAutoDiscoverBase {
46
- /**
47
- * @experimental
48
- */
49
32
  constructor(project: Project, options: IntegrationTestAutoDiscoverOptions);
50
33
  }
@@ -7,14 +7,10 @@ const cdk_1 = require("../cdk");
7
7
  const component_1 = require("../component");
8
8
  const integration_test_1 = require("./integration-test");
9
9
  /**
10
- * (experimental) Automatically discovers and creates `IntegrationTest`s from entry points found in the test tree.
11
- *
12
- * @experimental
10
+ * Automatically discovers and creates `IntegrationTest`s from entry points
11
+ * found in the test tree.
13
12
  */
14
13
  class AutoDiscover extends component_1.Component {
15
- /**
16
- * @experimental
17
- */
18
14
  constructor(project, options) {
19
15
  var _c;
20
16
  super(project);
@@ -25,16 +21,11 @@ class AutoDiscover extends component_1.Component {
25
21
  }
26
22
  exports.AutoDiscover = AutoDiscover;
27
23
  _a = JSII_RTTI_SYMBOL_1;
28
- AutoDiscover[_a] = { fqn: "projen.cdk8s.AutoDiscover", version: "0.52.20" };
24
+ AutoDiscover[_a] = { fqn: "projen.cdk8s.AutoDiscover", version: "0.52.24" };
29
25
  /**
30
- * (experimental) Discovers and creates integration tests from files in the test root.
31
- *
32
- * @experimental
26
+ * Discovers and creates integration tests from files in the test root.
33
27
  */
34
28
  class IntegrationTestAutoDiscover extends cdk_1.IntegrationTestAutoDiscoverBase {
35
- /**
36
- * @experimental
37
- */
38
29
  constructor(project, options) {
39
30
  super(project, options);
40
31
  for (const entrypoint of this.entrypoints) {
@@ -47,5 +38,5 @@ class IntegrationTestAutoDiscover extends cdk_1.IntegrationTestAutoDiscoverBase
47
38
  }
48
39
  exports.IntegrationTestAutoDiscover = IntegrationTestAutoDiscover;
49
40
  _b = JSII_RTTI_SYMBOL_1;
50
- IntegrationTestAutoDiscover[_b] = { fqn: "projen.cdk8s.IntegrationTestAutoDiscover", version: "0.52.20" };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1kaXNjb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGs4cy9hdXRvLWRpc2NvdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0NBR2dCO0FBQ2hCLDRDQUF5QztBQUV6Qyx5REFBcUQ7Ozs7OztBQVVyRCxNQUFhLFlBQWEsU0FBUSxxQkFBUzs7OztJQUN6QyxZQUFZLE9BQWdCLEVBQUUsT0FBNEI7O1FBQ3hELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLFVBQUksT0FBTyxDQUFDLDJCQUEyQixtQ0FBSSxJQUFJLEVBQUU7WUFDL0MsSUFBSSwyQkFBMkIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3hEO0lBQ0gsQ0FBQzs7QUFQSCxvQ0FRQzs7Ozs7Ozs7QUFTRCxNQUFhLDJCQUE0QixTQUFRLHFDQUErQjs7OztJQUM5RSxZQUFZLE9BQWdCLEVBQUUsT0FBMkM7UUFDdkUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV4QixLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDekMsSUFBSSxrQ0FBZSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hDLFVBQVU7Z0JBQ1YsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2FBQ25DLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7QUFWSCxrRUFXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEludGVncmF0aW9uVGVzdEF1dG9EaXNjb3ZlckJhc2UsXG4gIEludGVncmF0aW9uVGVzdEF1dG9EaXNjb3ZlckJhc2VPcHRpb25zLFxufSBmcm9tIFwiLi4vY2RrXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB7IEludGVncmF0aW9uVGVzdCB9IGZyb20gXCIuL2ludGVncmF0aW9uLXRlc3RcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0Rpc2NvdmVyT3B0aW9uc1xuICBleHRlbmRzIEludGVncmF0aW9uVGVzdEF1dG9EaXNjb3Zlck9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGludGVncmF0aW9uVGVzdEF1dG9EaXNjb3Zlcj86IGJvb2xlYW47XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgQXV0b0Rpc2NvdmVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogQXV0b0Rpc2NvdmVyT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgaWYgKG9wdGlvbnMuaW50ZWdyYXRpb25UZXN0QXV0b0Rpc2NvdmVyID8/IHRydWUpIHtcbiAgICAgIG5ldyBJbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXIodGhpcy5wcm9qZWN0LCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXJPcHRpb25zXG4gIGV4dGVuZHMgSW50ZWdyYXRpb25UZXN0QXV0b0Rpc2NvdmVyQmFzZU9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHRzY29uZmlnUGF0aDogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgSW50ZWdyYXRpb25UZXN0QXV0b0Rpc2NvdmVyIGV4dGVuZHMgSW50ZWdyYXRpb25UZXN0QXV0b0Rpc2NvdmVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEludGVncmF0aW9uVGVzdEF1dG9EaXNjb3Zlck9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBvcHRpb25zKTtcblxuICAgIGZvciAoY29uc3QgZW50cnlwb2ludCBvZiB0aGlzLmVudHJ5cG9pbnRzKSB7XG4gICAgICBuZXcgSW50ZWdyYXRpb25UZXN0KHRoaXMucHJvamVjdCwge1xuICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICB0c2NvbmZpZ1BhdGg6IG9wdGlvbnMudHNjb25maWdQYXRoLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
41
+ IntegrationTestAutoDiscover[_b] = { fqn: "projen.cdk8s.IntegrationTestAutoDiscover", version: "0.52.24" };
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1kaXNjb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGs4cy9hdXRvLWRpc2NvdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0NBR2dCO0FBQ2hCLDRDQUF5QztBQUV6Qyx5REFBcUQ7QUFlckQ7OztHQUdHO0FBQ0gsTUFBYSxZQUFhLFNBQVEscUJBQVM7SUFDekMsWUFBWSxPQUFnQixFQUFFLE9BQTRCOztRQUN4RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixVQUFJLE9BQU8sQ0FBQywyQkFBMkIsbUNBQUksSUFBSSxFQUFFO1lBQy9DLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7O0FBUEgsb0NBUUM7OztBQVVEOztHQUVHO0FBQ0gsTUFBYSwyQkFBNEIsU0FBUSxxQ0FBK0I7SUFDOUUsWUFBWSxPQUFnQixFQUFFLE9BQTJDO1FBQ3ZFLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFeEIsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksa0NBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQyxVQUFVO2dCQUNWLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTthQUNuQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7O0FBVkgsa0VBV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXJCYXNlLFxuICBJbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXJCYXNlT3B0aW9ucyxcbn0gZnJvbSBcIi4uL2Nka1wiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvblRlc3QgfSBmcm9tIFwiLi9pbnRlZ3JhdGlvbi10ZXN0XCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEF1dG9EaXNjb3ZlcmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0Rpc2NvdmVyT3B0aW9uc1xuICBleHRlbmRzIEludGVncmF0aW9uVGVzdEF1dG9EaXNjb3Zlck9wdGlvbnMge1xuICAvKipcbiAgICogQXV0b21hdGljYWxseSBkaXNjb3ZlciBpbnRlZ3JhdGlvbiB0ZXN0c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBpbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgZGlzY292ZXJzIGFuZCBjcmVhdGVzIGBJbnRlZ3JhdGlvblRlc3RgcyBmcm9tIGVudHJ5IHBvaW50c1xuICogZm91bmQgaW4gdGhlIHRlc3QgdHJlZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1dG9EaXNjb3ZlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEF1dG9EaXNjb3Zlck9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIGlmIChvcHRpb25zLmludGVncmF0aW9uVGVzdEF1dG9EaXNjb3ZlciA/PyB0cnVlKSB7XG4gICAgICBuZXcgSW50ZWdyYXRpb25UZXN0QXV0b0Rpc2NvdmVyKHRoaXMucHJvamVjdCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZWdyYXRpb25UZXN0QXV0b0Rpc2NvdmVyT3B0aW9uc1xuICBleHRlbmRzIEludGVncmF0aW9uVGVzdEF1dG9EaXNjb3ZlckJhc2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIHRzY29uZmlnIGZpbGUgdG8gdXNlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHRzY29uZmlnUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIERpc2NvdmVycyBhbmQgY3JlYXRlcyBpbnRlZ3JhdGlvbiB0ZXN0cyBmcm9tIGZpbGVzIGluIHRoZSB0ZXN0IHJvb3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXIgZXh0ZW5kcyBJbnRlZ3JhdGlvblRlc3RBdXRvRGlzY292ZXJCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogSW50ZWdyYXRpb25UZXN0QXV0b0Rpc2NvdmVyT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QsIG9wdGlvbnMpO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeXBvaW50IG9mIHRoaXMuZW50cnlwb2ludHMpIHtcbiAgICAgIG5ldyBJbnRlZ3JhdGlvblRlc3QodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIGVudHJ5cG9pbnQsXG4gICAgICAgIHRzY29uZmlnUGF0aDogb3B0aW9ucy50c2NvbmZpZ1BhdGgsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,132 +1,110 @@
1
1
  import { TypeScriptAppProject, TypeScriptProjectOptions } from "../typescript";
2
- /**
3
- * @experimental
4
- */
5
2
  export interface Cdk8sTypeScriptAppOptions extends TypeScriptProjectOptions {
6
3
  /**
7
- * (experimental) Minimum target version this library is tested against.
4
+ * Minimum target version this library is tested against.
8
5
  *
9
6
  * @default "1.0.0-beta.10"
10
- * @experimental
11
- * @featured true
7
+ * @featured
12
8
  */
13
9
  readonly cdk8sVersion: string;
14
10
  /**
15
- * (experimental) Import a specific Kubernetes spec version.
11
+ * Import a specific Kubernetes spec version.
16
12
  *
17
13
  * @default - Use the cdk8s default
18
- * @experimental
19
14
  */
20
15
  readonly k8sSpecVersion?: string;
21
16
  /**
22
- * (experimental) Import additional specs.
17
+ * Import additional specs
23
18
  *
24
19
  * @default - no additional specs imported
25
- * @experimental
26
20
  */
27
21
  readonly cdk8sImports?: string[];
28
22
  /**
29
- * (experimental) constructs verion.
23
+ * constructs verion
30
24
  *
31
25
  * @default "3.2.34"
32
- * @experimental
33
26
  */
34
27
  readonly constructsVersion?: string;
35
28
  /**
36
- * (experimental) cdk8s-cli version.
29
+ * cdk8s-cli version
37
30
  *
38
31
  * @default "cdk8sVersion"
39
- * @experimental
40
32
  */
41
33
  readonly cdk8sCliVersion?: string;
42
34
  /**
43
- * (experimental) Use pinned version instead of caret version for CDK8s.
35
+ * Use pinned version instead of caret version for CDK8s.
44
36
  *
45
37
  * You can use this to prevent yarn to mix versions for your CDK8s package and to prevent auto-updates.
46
38
  * If you use experimental features this will let you define the moment you include breaking changes.
47
39
  *
48
40
  * @default false
49
- * @experimental
50
41
  */
51
42
  readonly cdk8sVersionPinning?: boolean;
52
43
  /**
53
- * (experimental) Use pinned version instead of caret version for CDK8s-cli.
44
+ * Use pinned version instead of caret version for CDK8s-cli.
54
45
  *
55
46
  * You can use this to prevent yarn to mix versions for your CDK8s package and to prevent auto-updates.
56
47
  * If you use experimental features this will let you define the moment you include breaking changes.
57
48
  *
58
49
  * @default false
59
- * @experimental
60
50
  */
61
51
  readonly cdk8sCliVersionPinning?: boolean;
62
52
  /**
63
- * (experimental) Use pinned version instead of caret version for cdk8s-plus-17.
53
+ * Use pinned version instead of caret version for cdk8s-plus-17.
64
54
  *
65
55
  * You can use this to prevent yarn to mix versions for your CDK8s package and to prevent auto-updates.
66
56
  * If you use experimental features this will let you define the moment you include breaking changes.
67
57
  *
68
58
  * @default false
69
- * @experimental
70
59
  */
71
60
  readonly cdk8sPlusVersionPinning?: boolean;
72
61
  /**
73
- * (experimental) Use pinned version instead of caret version for constructs.
62
+ * Use pinned version instead of caret version for constructs.
74
63
  *
75
64
  * You can use this to prevent yarn to mix versions for your consructs package and to prevent auto-updates.
76
65
  * If you use experimental features this will let you define the moment you include breaking changes.
77
66
  *
78
67
  * @default false
79
- * @experimental
80
68
  */
81
69
  readonly constructsVersionPinning?: boolean;
82
70
  /**
83
- * (experimental) The CDK8s app's entrypoint (relative to the source directory, which is "src" by default).
71
+ * The CDK8s app's entrypoint (relative to the source directory, which is
72
+ * "src" by default).
84
73
  *
85
74
  * @default "main.ts"
86
- * @experimental
87
75
  */
88
76
  readonly appEntrypoint?: string;
89
77
  /**
90
- * (experimental) Automatically adds an `cdk8s.IntegrationTest` for each `.integ.ts` app in your test directory. If this is disabled, you can manually add an `cdk8s.AutoDiscover` component to your project.
78
+ * Automatically adds an `cdk8s.IntegrationTest` for each `.integ.ts` app
79
+ * in your test directory. If this is disabled, you can manually add an
80
+ * `cdk8s.AutoDiscover` component to your project.
91
81
  *
92
82
  * @default true
93
- * @experimental
94
83
  */
95
84
  readonly integrationTestAutoDiscover?: boolean;
96
85
  }
97
86
  /**
98
- * (experimental) CDK8s app in TypeScript.
87
+ * CDK8s app in TypeScript
88
+ *
99
89
  *
100
- * @experimental
101
90
  * @pjid cdk8s-app-ts
102
91
  */
103
92
  export declare class Cdk8sTypeScriptApp extends TypeScriptAppProject {
104
93
  /**
105
- * (experimental) The CDK8s version this app is using.
106
- *
107
- * @experimental
94
+ * The CDK8s version this app is using.
108
95
  */
109
96
  readonly cdk8sVersion: string;
110
97
  /**
111
- * (experimental) The constructs version this app is using.
112
- *
113
- * @experimental
98
+ * The constructs version this app is using.
114
99
  */
115
100
  readonly constructsVersion: string;
116
101
  /**
117
- * (experimental) The cdk8s-cli version this app is using.
118
- *
119
- * @experimental
102
+ * The cdk8s-cli version this app is using.
120
103
  */
121
104
  readonly cdk8sCliVersion: string;
122
105
  /**
123
- * (experimental) The CDK8s app entrypoint.
124
- *
125
- * @experimental
106
+ * The CDK8s app entrypoint
126
107
  */
127
108
  readonly appEntrypoint: string;
128
- /**
129
- * @experimental
130
- */
131
109
  constructor(options: Cdk8sTypeScriptAppOptions);
132
110
  }