tnp-helpers 19.0.0 → 19.0.2

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 (246) hide show
  1. package/assets/shared/shared_folder_info.txt +3 -3
  2. package/browser/fesm2022/tnp-helpers.mjs +74 -39
  3. package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
  4. package/browser/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +13 -3
  5. package/browser/lib/base/classes/base-git.d.ts +1 -1
  6. package/browser/lib/base/classes/base-node-modules.d.ts +1 -1
  7. package/browser/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
  8. package/browser/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -7
  9. package/browser/lib/build-info._auto-generated_.d.ts +3 -0
  10. package/browser/lib/helpers/helpers.d.ts +4 -1
  11. package/client/fesm2022/tnp-helpers.mjs +74 -39
  12. package/client/fesm2022/tnp-helpers.mjs.map +1 -1
  13. package/client/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +13 -3
  14. package/client/lib/base/classes/base-git.d.ts +1 -1
  15. package/client/lib/base/classes/base-node-modules.d.ts +1 -1
  16. package/client/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
  17. package/client/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -7
  18. package/client/lib/build-info._auto-generated_.d.ts +3 -0
  19. package/client/lib/helpers/helpers.d.ts +4 -1
  20. package/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +13 -3
  21. package/lib/base/classes/base-cli-worker/base-cli-worker.js +54 -1
  22. package/lib/base/classes/base-cli-worker/base-cli-worker.js.map +1 -1
  23. package/lib/base/classes/base-global-command-line.backend.d.ts +2 -0
  24. package/lib/base/classes/base-global-command-line.backend.js +36 -1
  25. package/lib/base/classes/base-global-command-line.backend.js.map +1 -1
  26. package/lib/base/classes/base-node-modules.d.ts +1 -1
  27. package/lib/base/classes/base-project-resolver.js +4 -2
  28. package/lib/base/classes/base-project-resolver.js.map +1 -1
  29. package/lib/base/classes/base-project.d.ts +1 -1
  30. package/lib/base/classes/base-vscode.js +3 -0
  31. package/lib/base/classes/base-vscode.js.map +1 -1
  32. package/lib/base/tcp-udp-ports/not-assignable-port.entity.js +2 -2
  33. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
  34. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js +2 -2
  35. package/lib/base/tcp-udp-ports/tcp-udp-ports.context.js.map +1 -1
  36. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -7
  37. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js +3 -33
  38. package/lib/base/tcp-udp-ports/tcp-upd-ports.worker.js.map +1 -1
  39. package/lib/build-info._auto-generated_.d.ts +1 -0
  40. package/lib/build-info._auto-generated_.js +4 -1
  41. package/lib/build-info._auto-generated_.js.map +1 -1
  42. package/lib/helpers/for-backend/helpers-file-folders.js.map +1 -1
  43. package/lib/helpers/for-backend/helpers-git.backend.d.ts +2 -0
  44. package/lib/helpers/for-backend/helpers-git.backend.js +34 -23
  45. package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
  46. package/lib/helpers/for-browser/angular.helper.js +2 -2
  47. package/lib/helpers/helpers.d.ts +4 -1
  48. package/lib/helpers/helpers.js +18 -15
  49. package/lib/helpers/helpers.js.map +1 -1
  50. package/lib/index._auto-generated_.js +2 -2
  51. package/lib/index._auto-generated_.js.map +1 -1
  52. package/lib/old/base-component.js +2 -2
  53. package/lib/old/base-formly-component.js +2 -2
  54. package/lib/old/dual-component-ctrl.js +2 -2
  55. package/package.json +5 -5
  56. package/src.d.ts +3 -3
  57. package/tmp-environment.json +5 -4
  58. package/websql/fesm2022/tnp-helpers.mjs +74 -40
  59. package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
  60. package/websql/lib/base/classes/base-cli-worker/base-cli-worker.d.ts +13 -3
  61. package/websql/lib/base/classes/base-git.d.ts +1 -1
  62. package/websql/lib/base/classes/base-node-modules.d.ts +1 -1
  63. package/websql/lib/base/tcp-udp-ports/tcp-udp-ports.context.d.ts +10 -43
  64. package/websql/lib/base/tcp-udp-ports/tcp-upd-ports.worker.d.ts +3 -7
  65. package/websql/lib/build-info._auto-generated_.d.ts +3 -0
  66. package/websql/lib/helpers/helpers.d.ts +4 -1
  67. package/browser/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
  68. package/browser/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-config.mjs +0 -37
  69. package/browser/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-controller.mjs +0 -125
  70. package/browser/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.mjs +0 -133
  71. package/browser/esm2022/lib/base/classes/base-cli-worker/base-cli-worker.mjs +0 -404
  72. package/browser/esm2022/lib/base/classes/base-cli-worker/index.mjs +0 -7
  73. package/browser/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
  74. package/browser/esm2022/lib/base/classes/base-db.mjs +0 -31
  75. package/browser/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
  76. package/browser/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
  77. package/browser/esm2022/lib/base/classes/base-git.mjs +0 -1175
  78. package/browser/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
  79. package/browser/esm2022/lib/base/classes/base-library-build.mjs +0 -613
  80. package/browser/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
  81. package/browser/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
  82. package/browser/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
  83. package/browser/esm2022/lib/base/classes/base-package-json.mjs +0 -340
  84. package/browser/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
  85. package/browser/esm2022/lib/base/classes/base-project-resolver.mjs +0 -282
  86. package/browser/esm2022/lib/base/classes/base-project.mjs +0 -922
  87. package/browser/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
  88. package/browser/esm2022/lib/base/classes/base-release-process.mjs +0 -599
  89. package/browser/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
  90. package/browser/esm2022/lib/base/classes/base-vscode.mjs +0 -531
  91. package/browser/esm2022/lib/base/classes/index.mjs +0 -24
  92. package/browser/esm2022/lib/base/commit-data.mjs +0 -633
  93. package/browser/esm2022/lib/base/config-database.mjs +0 -46
  94. package/browser/esm2022/lib/base/core-project.mjs +0 -115
  95. package/browser/esm2022/lib/base/index.mjs +0 -10
  96. package/browser/esm2022/lib/base/linked-project.mjs +0 -90
  97. package/browser/esm2022/lib/base/project-database.mjs +0 -18
  98. package/browser/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
  99. package/browser/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
  100. package/browser/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -33
  101. package/browser/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
  102. package/browser/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.mjs +0 -261
  103. package/browser/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -45
  104. package/browser/esm2022/lib/base/translate.mjs +0 -566
  105. package/browser/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
  106. package/browser/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
  107. package/browser/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
  108. package/browser/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
  109. package/browser/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
  110. package/browser/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
  111. package/browser/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
  112. package/browser/esm2022/lib/helpers/helpers-strings.mjs +0 -258
  113. package/browser/esm2022/lib/helpers/helpers.mjs +0 -428
  114. package/browser/esm2022/lib/index.mjs +0 -13
  115. package/browser/esm2022/lib/models.mjs +0 -175
  116. package/browser/esm2022/lib/utils.mjs +0 -952
  117. package/browser/esm2022/lib/validators/validators-git.mjs +0 -12
  118. package/browser/esm2022/lib/validators/validators-network.mjs +0 -18
  119. package/browser/esm2022/lib/validators/validators.mjs +0 -10
  120. package/browser/esm2022/migrations/1736198527297_init.mjs +0 -41
  121. package/browser/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
  122. package/browser/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
  123. package/browser/esm2022/migrations/index.mjs +0 -5
  124. package/browser/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
  125. package/browser/esm2022/public-api.mjs +0 -2
  126. package/browser/esm2022/tnp-helpers.mjs +0 -5
  127. package/client/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
  128. package/client/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-config.mjs +0 -37
  129. package/client/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-controller.mjs +0 -125
  130. package/client/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.mjs +0 -133
  131. package/client/esm2022/lib/base/classes/base-cli-worker/base-cli-worker.mjs +0 -404
  132. package/client/esm2022/lib/base/classes/base-cli-worker/index.mjs +0 -7
  133. package/client/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
  134. package/client/esm2022/lib/base/classes/base-db.mjs +0 -31
  135. package/client/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
  136. package/client/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
  137. package/client/esm2022/lib/base/classes/base-git.mjs +0 -1175
  138. package/client/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
  139. package/client/esm2022/lib/base/classes/base-library-build.mjs +0 -613
  140. package/client/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
  141. package/client/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
  142. package/client/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
  143. package/client/esm2022/lib/base/classes/base-package-json.mjs +0 -340
  144. package/client/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
  145. package/client/esm2022/lib/base/classes/base-project-resolver.mjs +0 -282
  146. package/client/esm2022/lib/base/classes/base-project.mjs +0 -922
  147. package/client/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
  148. package/client/esm2022/lib/base/classes/base-release-process.mjs +0 -599
  149. package/client/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
  150. package/client/esm2022/lib/base/classes/base-vscode.mjs +0 -531
  151. package/client/esm2022/lib/base/classes/index.mjs +0 -24
  152. package/client/esm2022/lib/base/commit-data.mjs +0 -633
  153. package/client/esm2022/lib/base/config-database.mjs +0 -46
  154. package/client/esm2022/lib/base/core-project.mjs +0 -115
  155. package/client/esm2022/lib/base/index.mjs +0 -10
  156. package/client/esm2022/lib/base/linked-project.mjs +0 -90
  157. package/client/esm2022/lib/base/project-database.mjs +0 -18
  158. package/client/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
  159. package/client/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
  160. package/client/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -33
  161. package/client/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
  162. package/client/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.mjs +0 -261
  163. package/client/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -45
  164. package/client/esm2022/lib/base/translate.mjs +0 -566
  165. package/client/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
  166. package/client/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
  167. package/client/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
  168. package/client/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
  169. package/client/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
  170. package/client/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
  171. package/client/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
  172. package/client/esm2022/lib/helpers/helpers-strings.mjs +0 -258
  173. package/client/esm2022/lib/helpers/helpers.mjs +0 -428
  174. package/client/esm2022/lib/index.mjs +0 -13
  175. package/client/esm2022/lib/models.mjs +0 -175
  176. package/client/esm2022/lib/utils.mjs +0 -952
  177. package/client/esm2022/lib/validators/validators-git.mjs +0 -12
  178. package/client/esm2022/lib/validators/validators-network.mjs +0 -18
  179. package/client/esm2022/lib/validators/validators.mjs +0 -10
  180. package/client/esm2022/migrations/1736198527297_init.mjs +0 -41
  181. package/client/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
  182. package/client/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
  183. package/client/esm2022/migrations/index.mjs +0 -5
  184. package/client/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
  185. package/client/esm2022/public-api.mjs +0 -2
  186. package/client/esm2022/tnp-helpers.mjs +0 -5
  187. package/websql/esm2022/lib/base/classes/base-bower-json.mjs +0 -14
  188. package/websql/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-config.mjs +0 -37
  189. package/websql/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-controller.mjs +0 -125
  190. package/websql/esm2022/lib/base/classes/base-cli-worker/base-cli-worker-terminal-ui.mjs +0 -133
  191. package/websql/esm2022/lib/base/classes/base-cli-worker/base-cli-worker.mjs +0 -404
  192. package/websql/esm2022/lib/base/classes/base-cli-worker/index.mjs +0 -7
  193. package/websql/esm2022/lib/base/classes/base-compiler-for-project.mjs +0 -61
  194. package/websql/esm2022/lib/base/classes/base-db.mjs +0 -31
  195. package/websql/esm2022/lib/base/classes/base-debounce-compiler-for-project.mjs +0 -56
  196. package/websql/esm2022/lib/base/classes/base-feature-for-project.mjs +0 -11
  197. package/websql/esm2022/lib/base/classes/base-git.mjs +0 -1175
  198. package/websql/esm2022/lib/base/classes/base-json-file-reader.mjs +0 -114
  199. package/websql/esm2022/lib/base/classes/base-library-build.mjs +0 -613
  200. package/websql/esm2022/lib/base/classes/base-linked-projects.mjs +0 -323
  201. package/websql/esm2022/lib/base/classes/base-node-modules.mjs +0 -417
  202. package/websql/esm2022/lib/base/classes/base-npm-helpers.mjs +0 -266
  203. package/websql/esm2022/lib/base/classes/base-package-json.mjs +0 -340
  204. package/websql/esm2022/lib/base/classes/base-process-manager.mjs +0 -285
  205. package/websql/esm2022/lib/base/classes/base-project-resolver.mjs +0 -272
  206. package/websql/esm2022/lib/base/classes/base-project.mjs +0 -891
  207. package/websql/esm2022/lib/base/classes/base-quick-fixes.mjs +0 -88
  208. package/websql/esm2022/lib/base/classes/base-release-process.mjs +0 -599
  209. package/websql/esm2022/lib/base/classes/base-static-pages.mjs +0 -110
  210. package/websql/esm2022/lib/base/classes/base-vscode.mjs +0 -531
  211. package/websql/esm2022/lib/base/classes/index.mjs +0 -24
  212. package/websql/esm2022/lib/base/commit-data.mjs +0 -633
  213. package/websql/esm2022/lib/base/config-database.mjs +0 -46
  214. package/websql/esm2022/lib/base/core-project.mjs +0 -115
  215. package/websql/esm2022/lib/base/index.mjs +0 -10
  216. package/websql/esm2022/lib/base/linked-project.mjs +0 -90
  217. package/websql/esm2022/lib/base/project-database.mjs +0 -18
  218. package/websql/esm2022/lib/base/tcp-udp-ports/index.mjs +0 -6
  219. package/websql/esm2022/lib/base/tcp-udp-ports/ports.controller.mjs +0 -260
  220. package/websql/esm2022/lib/base/tcp-udp-ports/ports.entity.mjs +0 -56
  221. package/websql/esm2022/lib/base/tcp-udp-ports/tcp-udp-ports.context.mjs +0 -32
  222. package/websql/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports-terminal-ui.mjs +0 -261
  223. package/websql/esm2022/lib/base/tcp-udp-ports/tcp-upd-ports.worker.mjs +0 -45
  224. package/websql/esm2022/lib/base/translate.mjs +0 -566
  225. package/websql/esm2022/lib/helpers/for-backend/helpers-file-folders.mjs +0 -1008
  226. package/websql/esm2022/lib/helpers/for-backend/helpers-process.mjs +0 -493
  227. package/websql/esm2022/lib/helpers/for-browser/angular.helper.mjs +0 -89
  228. package/websql/esm2022/lib/helpers/for-browser/helpers-browser.mjs +0 -47
  229. package/websql/esm2022/lib/helpers/helpers-array-obj.mjs +0 -118
  230. package/websql/esm2022/lib/helpers/helpers-numbers.mjs +0 -12
  231. package/websql/esm2022/lib/helpers/helpers-strings-regexes.mjs +0 -51
  232. package/websql/esm2022/lib/helpers/helpers-strings.mjs +0 -258
  233. package/websql/esm2022/lib/helpers/helpers.mjs +0 -428
  234. package/websql/esm2022/lib/index.mjs +0 -13
  235. package/websql/esm2022/lib/models.mjs +0 -175
  236. package/websql/esm2022/lib/utils.mjs +0 -952
  237. package/websql/esm2022/lib/validators/validators-git.mjs +0 -12
  238. package/websql/esm2022/lib/validators/validators-network.mjs +0 -18
  239. package/websql/esm2022/lib/validators/validators.mjs +0 -10
  240. package/websql/esm2022/migrations/1736198527297_init.mjs +0 -41
  241. package/websql/esm2022/migrations/1736199486472_addingNotAssignablePorts.mjs +0 -63
  242. package/websql/esm2022/migrations/1736454437350_addFreePorts.mjs +0 -50
  243. package/websql/esm2022/migrations/index.mjs +0 -5
  244. package/websql/esm2022/migrations/migrations_index._auto-generated_.mjs +0 -16
  245. package/websql/esm2022/public-api.mjs +0 -2
  246. package/websql/esm2022/tnp-helpers.mjs +0 -5
@@ -1,952 +0,0 @@
1
- import { CoreModels, Utils } from 'tnp-core/browser';
2
- import { isExportDeclaration, isImportDeclaration, isNamedImports, isNamedExports, } from 'typescript'; /* */
3
- export var UtilsNpm;
4
- (function (UtilsNpm) {
5
- UtilsNpm.isSpecialVersion = (version) => {
6
- return CoreModels.NpmSpecialVersions.includes(version);
7
- };
8
- UtilsNpm.clearVersion = (version, options) => {
9
- const { removePrefixes, removeSuffix } = options || {};
10
- if (!version || UtilsNpm.isSpecialVersion(version)) {
11
- return version;
12
- }
13
- version = (version || '')
14
- .trim()
15
- .replace(new RegExp(Utils.escapeStringForRegEx('undefined'), 'g'), '0');
16
- if (removePrefixes) {
17
- version = version.replace('^', '').replace('~', '');
18
- }
19
- let [major, minor, patch, alphaOrBetaOrRc] = version.split('.');
20
- if (removeSuffix) {
21
- alphaOrBetaOrRc = '';
22
- }
23
- return UtilsNpm.fixMajorVerNumber(`${major}.${minor}.${patch}${alphaOrBetaOrRc ? '.' + alphaOrBetaOrRc : ''}`);
24
- };
25
- UtilsNpm.fixMajorVerNumber = (version) => {
26
- if (!version || UtilsNpm.isSpecialVersion(version)) {
27
- return version;
28
- }
29
- version = (version || '')
30
- .trim()
31
- .replace(new RegExp(Utils.escapeStringForRegEx('undefined'), 'g'), '0');
32
- const splited = version.split('.');
33
- let [major, minor, patch, alphaOrBetaOrRc] = splited;
34
- if (splited.length === 1) {
35
- minor = '0';
36
- patch = '0';
37
- }
38
- else if (splited.length === 2) {
39
- patch = '0';
40
- }
41
- return `${major}.${minor}.${patch}${alphaOrBetaOrRc ? '.' + alphaOrBetaOrRc : ''}`;
42
- };
43
- })(UtilsNpm || (UtilsNpm = {}));
44
- export var UtilsTypescript;
45
- (function (UtilsTypescript) {
46
- /**
47
- * Remove TypeScript region blocks by their name, including nested regions.
48
- *
49
- * @param sourceCode - The TypeScript source code as a string.
50
- * @param regionName - The name of the region to remove.
51
- * @returns Modified TypeScript code without the specified regions.
52
- */
53
- UtilsTypescript.removeRegionByName = (sourceCode, regionName) => {
54
- /* */
55
- /* */
56
- /* */
57
- /* */
58
- /* */
59
- /* */
60
- /* */
61
- /* */
62
- /* */
63
- /* */
64
- /* */
65
- /* */
66
- /* */
67
- /* */
68
- /* */
69
- /* */
70
- /* */
71
- /* */
72
- /* */
73
- /* */
74
- /* */
75
- /* */
76
- /* */
77
- /* */
78
- /* */
79
- /* */
80
- /* */
81
- /* */
82
- /* */
83
- /* */
84
- /* */
85
- /* */
86
- /* */
87
- /* */
88
- /* */
89
- /* */
90
- /* */
91
- /* */
92
- /* */
93
- /* */
94
- /* */
95
- /* */
96
- /* */
97
- /* */
98
- /* */
99
- /* */
100
- /* */
101
- /* */
102
- /* */
103
- /* */
104
- /* */
105
- /* */
106
- /* */
107
- /* */
108
- /* */
109
- /* */
110
- /* */
111
- /* */
112
- /* */
113
- /* */
114
- /* */
115
- /* */
116
- /* */
117
- /* */
118
- /* */
119
- /* */
120
- /* */
121
- /* */
122
- /* */
123
- /* */
124
- /* */
125
- /* */
126
- /* */
127
- /* */
128
- /* */
129
- /* */
130
- /* */
131
- /* */
132
- /* */
133
- /* */
134
- /* */
135
- /* */
136
- /* */
137
- /* */
138
- /* */
139
- /* */
140
- /* */
141
- /* */
142
- /* */
143
- /* */
144
- /* */
145
- /* */
146
- /* */
147
- /* */
148
- /* */
149
- /* */
150
- /* */
151
- /* */
152
- /* */
153
- /* */
154
- /* */
155
- /* */
156
- /* */
157
- /* */
158
- /* */
159
- /* */
160
- /* */
161
- /* */
162
- /* */
163
- /* */
164
- /* */
165
- /* */
166
- /* */
167
- /* */
168
- /* */
169
- /* */
170
- return (void 0);
171
- };
172
- const isExported = (node) => {
173
- /* */
174
- /* */
175
- /* */
176
- /* */
177
- /* */
178
- return (void 0);
179
- };
180
- /**
181
- * Function to extract exports from a TypeScript file
182
- */
183
- UtilsTypescript.exportsFromFile = (filePath) => {
184
- /* */
185
- /* */
186
- /* */
187
- /* */
188
- /* */
189
- /* */
190
- return (void 0);
191
- };
192
- /**
193
- * Function to extract exports from a TypeScript file
194
- */
195
- UtilsTypescript.exportsFromContent = (fileContent) => {
196
- /* */
197
- /* */
198
- /* */
199
- /* */
200
- /* */
201
- /* */
202
- /* */
203
- /* */
204
- /* */
205
- /* */
206
- /* */
207
- /* */
208
- /* */
209
- /* */
210
- /* */
211
- /* */
212
- /* */
213
- /* */
214
- /* */
215
- /* */
216
- /* */
217
- /* */
218
- /* */
219
- /* */
220
- /* */
221
- /* */
222
- /* */
223
- /* */
224
- /* */
225
- /* */
226
- /* */
227
- /* */
228
- /* */
229
- /* */
230
- /* */
231
- /* */
232
- /* */
233
- /* */
234
- /* */
235
- /* */
236
- /* */
237
- /* */
238
- /* */
239
- /* */
240
- /* */
241
- /* */
242
- /* */
243
- /* */
244
- /* */
245
- /* */
246
- /* */
247
- /* */
248
- /* */
249
- /* */
250
- /* */
251
- /* */
252
- /* */
253
- /* */
254
- /* */
255
- /* */
256
- /* */
257
- /* */
258
- /* */
259
- /* */
260
- /* */
261
- /* */
262
- /* */
263
- /* */
264
- /* */
265
- /* */
266
- /* */
267
- /* */
268
- /* */
269
- return (void 0);
270
- };
271
- UtilsTypescript.extractDefaultClassNameFromString = (sourceCode) => {
272
- /* */
273
- /* */
274
- /* */
275
- /* */
276
- /* */
277
- /* */
278
- /* */
279
- /* */
280
- /* */
281
- /* */
282
- /* */
283
- /* */
284
- /* */
285
- /* */
286
- /* */
287
- /* */
288
- /* */
289
- /* */
290
- /* */
291
- /* */
292
- /* */
293
- return (void 0);
294
- };
295
- UtilsTypescript.extractClassNameFromString = (sourceCode) => {
296
- /* */
297
- /* */
298
- /* */
299
- /* */
300
- /* */
301
- /* */
302
- /* */
303
- /* */
304
- /* */
305
- /* */
306
- /* */
307
- /* */
308
- /* */
309
- /* */
310
- /* */
311
- /* */
312
- /* */
313
- /* */
314
- return (void 0);
315
- };
316
- UtilsTypescript.extractClassNamesFromFile = (absoluteFilePath) => {
317
- /* */
318
- /* */
319
- /* */
320
- /* */
321
- /* */
322
- /* */
323
- return (void 0);
324
- };
325
- UtilsTypescript.extractDefaultClassNameFromFile = (absoluteFilePath) => {
326
- /* */
327
- /* */
328
- /* */
329
- return (void 0);
330
- };
331
- UtilsTypescript.formatFile = (absPathToFile) => {
332
- /* */
333
- /* */
334
- /* */
335
- /* */
336
- /* */
337
- /* */
338
- /* */
339
- /* */
340
- /* */
341
- /* */
342
- /* */
343
- /* */
344
- /* */
345
- return (void 0);
346
- };
347
- UtilsTypescript.formatAllFilesInsideFolder = (absPathToFolder) => {
348
- /* */
349
- /* */
350
- /* */
351
- /* */
352
- /* */
353
- /* */
354
- /* */
355
- /* */
356
- /* */
357
- return (void 0);
358
- };
359
- UtilsTypescript.getTaonContextFromContent = (fileContent) => {
360
- /* */
361
- /* */
362
- /* */
363
- /* */
364
- /* */
365
- /* */
366
- /* */
367
- /* */
368
- /* */
369
- /* */
370
- /* */
371
- /* */
372
- /* */
373
- /* */
374
- /* */
375
- /* */
376
- /* */
377
- /* */
378
- /* */
379
- /* */
380
- /* */
381
- /* */
382
- /* */
383
- /* */
384
- /* */
385
- /* */
386
- /* */
387
- /* */
388
- /* */
389
- /* */
390
- /* */
391
- /* */
392
- /* */
393
- /* */
394
- /* */
395
- /* */
396
- /* */
397
- /* */
398
- /* */
399
- /* */
400
- /* */
401
- /* */
402
- /* */
403
- /* */
404
- /* */
405
- /* */
406
- /* */
407
- /* */
408
- /* */
409
- /* */
410
- /* */
411
- /* */
412
- return (void 0);
413
- };
414
- UtilsTypescript.getTaonContextsNamesFromFile = (tsAbsFilePath) => {
415
- /* */
416
- /* */
417
- return (void 0);
418
- };
419
- UtilsTypescript.extractAngularComponentSelectors = (fileAbsPath) => {
420
- /* */
421
- /* */
422
- /* */
423
- /* */
424
- /* */
425
- /* */
426
- /* */
427
- /* */
428
- /* */
429
- /* */
430
- /* */
431
- /* */
432
- /* */
433
- /* */
434
- /* */
435
- /* */
436
- /* */
437
- /* */
438
- /* */
439
- /* */
440
- /* */
441
- /* */
442
- /* */
443
- /* */
444
- /* */
445
- /* */
446
- /* */
447
- /* */
448
- /* */
449
- /* */
450
- /* */
451
- /* */
452
- /* */
453
- /* */
454
- /* */
455
- /* */
456
- /* */
457
- /* */
458
- /* */
459
- /* */
460
- /* */
461
- /* */
462
- /* */
463
- /* */
464
- /* */
465
- /* */
466
- /* */
467
- return (void 0);
468
- };
469
- UtilsTypescript.wrapWithComment = (oneLineComment, absDestFilePath) => {
470
- /* */
471
- /* */
472
- /* */
473
- /* */
474
- /* */
475
- /* */
476
- /* */
477
- /* */
478
- /* */
479
- /* */
480
- /* */
481
- /* */
482
- /* */
483
- /* */
484
- /* */
485
- /* */
486
- /* */
487
- /* */
488
- /* */
489
- /* */
490
- /* */
491
- /* */
492
- /* */
493
- /* */
494
- return (void 0);
495
- };
496
- /**
497
- * Attempts to set or add an exported const with given name and value.
498
- */
499
- UtilsTypescript.setValueToVariableInTsFile = (tsAbsFilePath, variableName, valueOfVariable, addIfNotExists = true) => {
500
- /* */
501
- /* */
502
- /* */
503
- /* */
504
- /* */
505
- /* */
506
- /* */
507
- /* */
508
- /* */
509
- /* */
510
- /* */
511
- /* */
512
- /* */
513
- /* */
514
- /* */
515
- /* */
516
- /* */
517
- /* */
518
- /* */
519
- /* */
520
- /* */
521
- /* */
522
- /* */
523
- /* */
524
- /* */
525
- /* */
526
- /* */
527
- /* */
528
- /* */
529
- /* */
530
- /* */
531
- /* */
532
- /* */
533
- /* */
534
- /* */
535
- /* */
536
- /* */
537
- /* */
538
- /* */
539
- /* */
540
- /* */
541
- /* */
542
- /* */
543
- /* */
544
- /* */
545
- /* */
546
- /* */
547
- /* */
548
- /* */
549
- /* */
550
- /* */
551
- /* */
552
- /* */
553
- /* */
554
- /* */
555
- /* */
556
- /* */
557
- /* */
558
- /* */
559
- /* */
560
- /* */
561
- /* */
562
- /* */
563
- /* */
564
- /* */
565
- /* */
566
- /* */
567
- /* */
568
- /* */
569
- /* */
570
- /* */
571
- /* */
572
- /* */
573
- /* */
574
- /* */
575
- /* */
576
- /* */
577
- /* */
578
- /* */
579
- /* */
580
- /* */
581
- /* */
582
- /* */
583
- /* */
584
- /* */
585
- /* */
586
- /* */
587
- /* */
588
- /* */
589
- /* */
590
- /* */
591
- /* */
592
- /* */
593
- /* */
594
- /* */
595
- /* */
596
- /* */
597
- /* */
598
- /* */
599
- /* */
600
- /* */
601
- /* */
602
- /* */
603
- /* */
604
- /* */
605
- /* */
606
- /* */
607
- /* */
608
- /* */
609
- /* */
610
- /* */
611
- /* */
612
- /* */
613
- /* */
614
- /* */
615
- /* */
616
- return (void 0);
617
- };
618
- class TsImportExport {
619
- removeStartEndQuotes(str) {
620
- return str.replace(/^['"`]/, '').replace(/['"`]$/, '');
621
- }
622
- /**
623
- * it will extract part of the file content
624
- * that is between startRow, startCol and endRow, endCol
625
- * and contains import/export/require statement
626
- */
627
- getStringPartFrom(wholeContentOfFile) {
628
- const lines = wholeContentOfFile.split('\n');
629
- const startRowIndex = this.startRow - 1;
630
- const endRowIndex = this.endRow - 1;
631
- if (startRowIndex >= lines.length || endRowIndex >= lines.length) {
632
- throw new Error('Row index out of bounds.');
633
- }
634
- let extractedLines = [];
635
- for (let i = startRowIndex; i <= endRowIndex; i++) {
636
- let line = lines[i];
637
- if (i === startRowIndex && i === endRowIndex) {
638
- extractedLines.push(line.substring(this.startCol - 1, this.endCol));
639
- }
640
- else if (i === startRowIndex) {
641
- extractedLines.push(line.substring(this.startCol - 1));
642
- }
643
- else if (i === endRowIndex) {
644
- extractedLines.push(line.substring(0, this.endCol));
645
- }
646
- else {
647
- extractedLines.push(line);
648
- }
649
- }
650
- return extractedLines.join('\n');
651
- }
652
- wrapInParenthesis(str) {
653
- return this.parenthesisType === 'single'
654
- ? `'${str}'`
655
- : this.parenthesisType === 'double'
656
- ? `"${str}"`
657
- : `\`${str}\``;
658
- }
659
- constructor(type, embeddedPathToFile, start, end, parenthesisType, importElements = []) {
660
- this.importElements = [];
661
- this.type = type;
662
- this.isIsomorphic = false;
663
- this.embeddedPathToFile = embeddedPathToFile;
664
- this.cleanEmbeddedPathToFile =
665
- this.removeStartEndQuotes(embeddedPathToFile);
666
- this.embeddedPathToFileResult = embeddedPathToFile;
667
- this.startRow = start.line + 1; // TypeScript lines are zero-based
668
- this.startCol = start.character + 1;
669
- this.endRow = end.line + 1;
670
- this.endCol = end.character + 1;
671
- this.parenthesisType = parenthesisType;
672
- this.importElements = importElements;
673
- }
674
- }
675
- UtilsTypescript.TsImportExport = TsImportExport;
676
- const getQuoteType = (text) => {
677
- if (text.startsWith('`'))
678
- return 'tics';
679
- if (text.startsWith("'"))
680
- return 'single';
681
- return 'double';
682
- };
683
- const extractImportExportElements = (node) => {
684
- const elements = [];
685
- if (isImportDeclaration(node) && node.importClause) {
686
- if (node.importClause.namedBindings &&
687
- isNamedImports(node.importClause.namedBindings)) {
688
- elements.push(...node.importClause.namedBindings.elements.map(el => el.name.text));
689
- }
690
- }
691
- else if (isExportDeclaration(node) && node.exportClause) {
692
- if (isNamedExports(node.exportClause)) {
693
- elements.push(...node.exportClause.elements.map(el => el.name.text));
694
- }
695
- }
696
- return elements;
697
- };
698
- UtilsTypescript.recognizeImportsFromFile = (fileAbsPAth) => {
699
- /* */
700
- /* */
701
- /* */
702
- return (void 0);
703
- };
704
- UtilsTypescript.recognizeImportsFromContent = (fileContent) => {
705
- /* */
706
- /* */
707
- /* */
708
- /* */
709
- /* */
710
- /* */
711
- /* */
712
- /* */
713
- /* */
714
- /* */
715
- /* */
716
- /* */
717
- /* */
718
- /* */
719
- /* */
720
- /* */
721
- /* */
722
- /* */
723
- /* */
724
- /* */
725
- /* */
726
- /* */
727
- /* */
728
- /* */
729
- /* */
730
- /* */
731
- /* */
732
- /* */
733
- /* */
734
- /* */
735
- /* */
736
- /* */
737
- /* */
738
- /* */
739
- /* */
740
- /* */
741
- /* */
742
- /* */
743
- /* */
744
- /* */
745
- /* */
746
- /* */
747
- /* */
748
- /* */
749
- /* */
750
- /* */
751
- /* */
752
- /* */
753
- /* */
754
- /* */
755
- /* */
756
- /* */
757
- /* */
758
- /* */
759
- /* */
760
- /* */
761
- /* */
762
- /* */
763
- /* */
764
- /* */
765
- /* */
766
- /* */
767
- /* */
768
- /* */
769
- /* */
770
- /* */
771
- /* */
772
- /* */
773
- /* */
774
- /* */
775
- /* */
776
- /* */
777
- /* */
778
- /* */
779
- /* */
780
- /* */
781
- /* */
782
- /* */
783
- /* */
784
- /* */
785
- /* */
786
- /* */
787
- /* */
788
- /* */
789
- return (void 0);
790
- };
791
- })(UtilsTypescript || (UtilsTypescript = {}));
792
- export var UtilsHttp;
793
- (function (UtilsHttp) {
794
- UtilsHttp.startHttpServer = async (cwd, port) => {
795
- /* */
796
- /* */
797
- /* */
798
- /* */
799
- /* */
800
- /* */
801
- /* */
802
- /* */
803
- /* */
804
- /* */
805
- /* */
806
- /* */
807
- /* */
808
- /* */
809
- /* */
810
- /* */
811
- /* */
812
- /* */
813
- /* */
814
- /* */
815
- /* */
816
- /* */
817
- /* */
818
- /* */
819
- /* */
820
- /* */
821
- /* */
822
- return (void 0);
823
- };
824
- })(UtilsHttp || (UtilsHttp = {}));
825
- export var UtilsMd;
826
- (function (UtilsMd) {
827
- /**
828
- * extract assets pathes from .md file
829
- */
830
- UtilsMd.getAssets = (mdfileContent) => {
831
- /* */
832
- /* */
833
- /* */
834
- /* */
835
- /* */
836
- /* */
837
- /* */
838
- /* */
839
- /* */
840
- /* */
841
- /* */
842
- /* */
843
- /* */
844
- /* */
845
- /* */
846
- /* */
847
- /* */
848
- /* */
849
- /* */
850
- /* */
851
- return (void 0);
852
- };
853
- /**
854
- * Extract links to other Markdown files from a given Markdown content.
855
- * @param mdfileContent
856
- */
857
- UtilsMd.getLinksToOtherMdFiles = (mdfileContent) => {
858
- /* */
859
- /* */
860
- /* */
861
- /* */
862
- /* */
863
- /* */
864
- /* */
865
- /* */
866
- /* */
867
- /* */
868
- /* */
869
- /* */
870
- /* */
871
- /* */
872
- /* */
873
- /* */
874
- /* */
875
- /* */
876
- /* */
877
- return (void 0);
878
- };
879
- /**
880
- * Move asset paths to a higher directory level by adding "../" before each path.
881
- *
882
- * @param mdfileContent - The content of the .md file.
883
- * @param level - The number of levels to go up (default is 1).
884
- * @returns The modified content with updated asset paths.
885
- */
886
- UtilsMd.moveAssetsPathesToLevel = (mdfileContent, level = 1) => {
887
- /* */
888
- /* */
889
- /* */
890
- /* */
891
- /* */
892
- /* */
893
- /* */
894
- /* */
895
- /* */
896
- /* */
897
- /* */
898
- /* */
899
- /* */
900
- /* */
901
- /* */
902
- /* */
903
- /* */
904
- /* */
905
- /* */
906
- /* */
907
- /* */
908
- /* */
909
- /* */
910
- /* */
911
- /* */
912
- /* */
913
- /* */
914
- /* */
915
- return (void 0);
916
- };
917
- })(UtilsMd || (UtilsMd = {}));
918
- export var UtilsQuickFixes;
919
- (function (UtilsQuickFixes) {
920
- /**
921
- *
922
- * @param node_modules/sql.js/dist/sql-wasm.js
923
- */
924
- UtilsQuickFixes.replaceSQLliteFaultyCode = (contentofSQLWasmJS) => {
925
- /* */
926
- /* */
927
- /* */
928
- /* */
929
- /* */
930
- /* */
931
- /* */
932
- /* */
933
- /* */
934
- /* */
935
- /* */
936
- /* */
937
- /* */
938
- /* */
939
- return (void 0);
940
- };
941
- /**
942
- * for some reason electron is being bundled - and it is not needed for cli
943
- */
944
- UtilsQuickFixes.replaceElectronWithNothing = (jsContent) => {
945
- /* */
946
- /* */
947
- return (void 0);
948
- };
949
- })(UtilsQuickFixes || (UtilsQuickFixes = {}));
950
- ;
951
- ({}); // @--end-of-file-for-module=tnp-helpers lib/utils.ts
952
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90bnAtaGVscGVycy9wcm9qZWN0cy90bnAtaGVscGVycy9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBSyxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUE4dEIsbUJBQW1CLEVBQUksbUJBQW1CLEVBQWtCLGNBQWMsRUFBSSxjQUFjLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQSxLQUFLO0FBaUQ1MUIsTUFBTSxLQUFXLFFBQVEsQ0E0RHhCO0FBNURELFdBQWlCLFFBQVE7SUFFVix5QkFBZ0IsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1FBQ2xELE9BQU8sVUFBVSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUM7SUFJVyxxQkFBWSxHQUFHLENBQzFCLE9BQWUsRUFDZixPQU1DLEVBQ0QsRUFBRTtRQUNGLE1BQU0sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUV2RCxJQUFJLENBQUMsT0FBTyxJQUFJLFNBQUEsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQzthQUN0QixJQUFJLEVBQUU7YUFDTixPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTFFLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxD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S0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBTUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFVLEVBQVcsRUFBRTtRQUM3QyxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQXFCRjs7T0FFRztJQUNVLCtCQUFlLEdBQUcsQ0FBQyxRQUFnQixFQUFnQixFQUFFO1FBQ3BFLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztR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QUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBRVcsMENBQTBCLEdBQUcsQ0FBQyxlQUF1QixFQUFRLEVBQUU7UUFDOUUsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBSVcseUNBQXlCLEdBQUcsQ0FBQyxXQUFtQixFQUFZLEVBQUU7UUFDN0UsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUVXLDRDQUE0QixHQUFHLENBQzFDLGFBQXFCLEVBQ1gsRUFBRTtRQUNoQixLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUtXLGdEQUFnQyxHQUFHLENBQzlDLFdBQW1CLEVBQ3dCLEVBQUU7UUFDakQsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFJVywrQkFBZSxHQUFHLENBQzdCLGNBQXNCLEVBQ3RCLGVBQXVCLEVBQ3ZCLEVBQUU7UUFDTixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFhRjs7T0FFRztJQUNVLDBDQUEwQixHQUFHLENBQ3hDLGFBQXFCLEVBQ3JCLFlBQW9CLEVBQ3BCLGVBQW9CLEVBQ3BCLGNBQWMsR0FBRyxJQUFJLEVBQ2YsRUFBRTtRQUNaLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBT0YsTUFBYSxjQUFjO1FBWXpCLG9CQUFvQixDQUFDLEdBQVc7WUFDOUIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFhRDs7OztXQUlHO1FBQ0gsaUJBQWlCLENBQUMsa0JBQTBCO1lBQzFDLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUc3QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUdwQyxJQUFJLGFBQWEsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLFdBQVcsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2pFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBRUQsSUFBSSxjQUFjLEdBQWEsRUFBRSxDQUFDO1lBRWxDLEtBQUssSUFBSSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVwQixJQUFJLENBQUMsS0FBSyxhQUFhLElBQUksQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUU3QyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLENBQUM7cUJBQU0sSUFBSSxDQUFDLEtBQUssYUFBYSxFQUFFLENBQUM7b0JBRS9CLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELENBQUM7cUJBQU0sSUFBSSxDQUFDLEtBQUssV0FBVyxFQUFFLENBQUM7b0JBRTdCLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sQ0FBQztvQkFFTixjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBS0QsaUJBQWlCLENBQUMsR0FBVztZQUMzQixPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssUUFBUTtnQkFDdEMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHO2dCQUNaLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxLQUFLLFFBQVE7b0JBQ2pDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRztvQkFDWixDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNyQixDQUFDO1FBSUQsWUFDRSxJQUFzRCxFQUN0RCxrQkFBMEIsRUFDMUIsS0FBMEIsRUFDMUIsR0FBd0IsRUFDeEIsZUFBNkMsRUFDN0MsaUJBQTJCLEVBQUU7WUFSL0IsbUJBQWMsR0FBYSxFQUFFLENBQUM7WUFVNUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1lBQzdDLElBQUksQ0FBQyx1QkFBdUI7Z0JBQzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxrQkFBa0IsQ0FBQztZQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsa0NBQWtDO1lBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3ZDLENBQUM7S0FDRjtJQXJHWSw4QkFBYyxpQkFxRzFCLENBQUE7SUFJRCxNQUFNLFlBQVksR0FBRyxDQUFDLElBQVksRUFBZ0MsRUFBRTtRQUNsRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQzFDLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztJQUdGLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxJQUFhLEVBQVksRUFBRTtRQUM5RCxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFFOUIsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFbkQsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWE7Z0JBQy9CLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUMvQyxDQUFDO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQ1gsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDcEUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFMUQsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFVyx3Q0FBd0IsR0FBRyxDQUN0QyxXQUFtQixFQUNELEVBQUU7UUFDeEIsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBRVcsMkNBQTJCLEdBQUcsQ0FDekMsV0FBbUIsRUFDRCxFQUFFO1FBQ3hCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FB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LEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0lBR0Y7O09BRUc7SUFDVSwwQ0FBMEIsR0FBRyxDQUFDLFNBQWlCLEVBQVUsRUFBRTtRQUMxRSxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUNKLENBQUMsRUFuQ2dCLGVBQWUsS0FBZixlQUFlLFFBbUMvQjtBQUdBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscURBQXFEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuaW1wb3J0IHsgZnNlLCBIZWxwZXJzLCBwYXRoIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBfLCBDb3JlTW9kZWxzLCBVdGlscyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgICBjcmVhdGVQcmludGVyLCAgIGNyZWF0ZVNvdXJjZUZpbGUsICAgZmFjdG9yeSwgICBnZXRMZWFkaW5nQ29tbWVudFJhbmdlcywgICBpc0NsYXNzRGVjbGFyYXRpb24sICAgaXNTb3VyY2VGaWxlLCAgIE5vZGVBcnJheSwgICBTY3JpcHRLaW5kLCAgIFNjcmlwdFRhcmdldCwgICBTb3VyY2VGaWxlLCAgIFN0YXRlbWVudCwgICB0cmFuc2Zvcm0sICAgVHJhbnNmb3JtYXRpb25Db250ZXh0LCAgIHZpc2l0RWFjaENoaWxkLCAgIE5vZGUsICAgaXNGdW5jdGlvbkRlY2xhcmF0aW9uLCAgIGlzVmFyaWFibGVTdGF0ZW1lbnQsICAgaXNJZGVudGlmaWVyLCAgIE5vZGVGbGFncywgICBpc0VudW1EZWNsYXJhdGlvbiwgICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLCAgIGlzSW50ZXJmYWNlRGVjbGFyYXRpb24sICAgaXNNb2R1bGVEZWNsYXJhdGlvbiwgICBpc0V4cG9ydEFzc2lnbm1lbnQsICAgZm9yRWFjaENoaWxkLCAgIERlY2xhcmF0aW9uLCAgIGdldENvbWJpbmVkTW9kaWZpZXJGbGFncywgICBNb2RpZmllckZsYWdzLCAgIFN5bnRheEtpbmQsICAgaXNWYXJpYWJsZURlY2xhcmF0aW9uLCAgIGlzQ2FsbEV4cHJlc3Npb24sICAgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sICAgaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbiwgICBpc1Byb3BlcnR5QXNzaWdubWVudCwgICBpc1N0cmluZ0xpdGVyYWwsICAgY2FuSGF2ZURlY29yYXRvcnMsICAgZ2V0RGVjb3JhdG9ycywgICB2aXNpdE5vZGUsICAgaXNFeHBvcnREZWNsYXJhdGlvbiwgICBpc0ltcG9ydERlY2xhcmF0aW9uLCAgIEV4cHJlc3Npb24sICAgaXNOYW1lZEltcG9ydHMsICAgaXNOYW1lZEV4cG9ydHMsIH0gZnJvbSAndHlwZXNjcmlwdCc7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG5cbmltcG9ydCB0eXBlICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cblxuXG5leHBvcnQgbmFtZXNwYWNlIFV0aWxzTnBtIHtcblxuICBleHBvcnQgY29uc3QgaXNTcGVjaWFsVmVyc2lvbiA9ICh2ZXJzaW9uOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gQ29yZU1vZGVscy5OcG1TcGVjaWFsVmVyc2lvbnMuaW5jbHVkZXModmVyc2lvbik7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCBjbGVhclZlcnNpb24gPSAoXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHJlbW92ZVByZWZpeGVzPzogYm9vbGVhbjtcbiAgICAgIC8qKlxuICAgICAgICogUmVtb3ZlIGFscGhhLCBiZXRhLCByYywgbGF0ZXN0LCBuZXh0IGV0Yy5cbiAgICAgICAqL1xuICAgICAgcmVtb3ZlU3VmZml4PzogYm9vbGVhbjtcbiAgICB9LFxuICApID0+IHtcbiAgICBjb25zdCB7IHJlbW92ZVByZWZpeGVzLCByZW1vdmVTdWZmaXggfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoIXZlcnNpb24gfHwgaXNTcGVjaWFsVmVyc2lvbih2ZXJzaW9uKSkge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuXG4gICAgdmVyc2lvbiA9ICh2ZXJzaW9uIHx8ICcnKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChVdGlscy5lc2NhcGVTdHJpbmdGb3JSZWdFeCgndW5kZWZpbmVkJyksICdnJyksICcwJyk7XG5cbiAgICBpZiAocmVtb3ZlUHJlZml4ZXMpIHtcbiAgICAgIHZlcnNpb24gPSB2ZXJzaW9uLnJlcGxhY2UoJ14nLCAnJykucmVwbGFjZSgnficsICcnKTtcbiAgICB9XG4gICAgbGV0IFttYWpvciwgbWlub3IsIHBhdGNoLCBhbHBoYU9yQmV0YU9yUmNdID0gdmVyc2lvbi5zcGxpdCgnLicpO1xuICAgIGlmIChyZW1vdmVTdWZmaXgpIHtcbiAgICAgIGFscGhhT3JCZXRhT3JSYyA9ICcnO1xuICAgIH1cbiAgICByZXR1cm4gZml4TWFqb3JWZXJOdW1iZXIoXG4gICAgICBgJHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0ke2FscGhhT3JCZXRhT3JSYyA/ICcuJyArIGFscGhhT3JCZXRhT3JSYyA6ICcnfWAsXG4gICAgKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGZpeE1ham9yVmVyTnVtYmVyID0gKHZlcnNpb246IHN0cmluZykgPT4ge1xuICAgIGlmICghdmVyc2lvbiB8fCBpc1NwZWNpYWxWZXJzaW9uKHZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICB9XG4gICAgdmVyc2lvbiA9ICh2ZXJzaW9uIHx8ICcnKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChVdGlscy5lc2NhcGVTdHJpbmdGb3JSZWdFeCgndW5kZWZpbmVkJyksICdnJyksICcwJyk7XG4gICAgY29uc3Qgc3BsaXRlZCA9IHZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICBsZXQgW21ham9yLCBtaW5vciwgcGF0Y2gsIGFscGhhT3JCZXRhT3JSY10gPSBzcGxpdGVkO1xuICAgIGlmIChzcGxpdGVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgbWlub3IgPSAnMCc7XG4gICAgICBwYXRjaCA9ICcwJztcbiAgICB9IGVsc2UgaWYgKHNwbGl0ZWQubGVuZ3RoID09PSAyKSB7XG4gICAgICBwYXRjaCA9ICcwJztcbiAgICB9XG4gICAgcmV0dXJuIGAke21ham9yfS4ke21pbm9yfS4ke3BhdGNofSR7YWxwaGFPckJldGFPclJjID8gJy4nICsgYWxwaGFPckJldGFPclJjIDogJyd9YDtcbiAgfTtcblxufVxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc1R5cGVzY3JpcHQge1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgVHlwZVNjcmlwdCByZWdpb24gYmxvY2tzIGJ5IHRoZWlyIG5hbWUsIGluY2x1ZGluZyBuZXN0ZWQgcmVnaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZUNvZGUgLSBUaGUgVHlwZVNjcmlwdCBzb3VyY2UgY29kZSBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHJlZ2lvbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcmVnaW9uIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgTW9kaWZpZWQgVHlwZVNjcmlwdCBjb2RlIHdpdGhvdXQgdGhlIHNwZWNpZmllZCByZWdpb25zLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHJlbW92ZVJlZ2lvbkJ5TmFtZSA9IChcbiAgICBzb3VyY2VDb2RlOiBzdHJpbmcsXG4gICAgcmVnaW9uTmFtZTogc3RyaW5nLFxuICApOiBzdHJpbmcgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuXG5cbiAgY29uc3QgaXNFeHBvcnRlZCA9IChub2RlOiBOb2RlKTogYm9vbGVhbiA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG5cbiAgaW50ZXJmYWNlIEV4cG9ydEluZm8ge1xuICAgIHR5cGU6XG4gICAgICB8ICdjbGFzcydcbiAgICAgIHwgJ2Z1bmN0aW9uJ1xuICAgICAgfCAnY29uc3QnXG4gICAgICB8ICdsZXQnXG4gICAgICB8ICd2YXInXG4gICAgICB8ICdlbnVtJ1xuICAgICAgfCAndHlwZSdcbiAgICAgIHwgJ2ludGVyZmFjZSdcbiAgICAgIHwgJ2RlZmF1bHQnXG4gICAgICB8ICdtb2R1bGUnXG4gICAgICB8ICduYW1lc3BhY2UnO1xuICAgIG5hbWU6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBleHRyYWN0IGV4cG9ydHMgZnJvbSBhIFR5cGVTY3JpcHQgZmlsZVxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IGV4cG9ydHNGcm9tRmlsZSA9IChmaWxlUGF0aDogc3RyaW5nKTogRXhwb3J0SW5mb1tdID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGV4dHJhY3QgZXhwb3J0cyBmcm9tIGEgVHlwZVNjcmlwdCBmaWxlXG4gICAqL1xuICBleHBvcnQgY29uc3QgZXhwb3J0c0Zyb21Db250ZW50ID0gKGZpbGVDb250ZW50OiBzdHJpbmcpOiBFeHBvcnRJbmZvW10gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG5cblxuXG4gIGV4cG9ydCBjb25zdCBleHRyYWN0RGVmYXVsdENsYXNzTmFtZUZyb21TdHJpbmcgPSAoXG4gICAgc291cmNlQ29kZTogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZXh0cmFjdENsYXNzTmFtZUZyb21TdHJpbmcgPSAoc291cmNlQ29kZTogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZXh0cmFjdENsYXNzTmFtZXNGcm9tRmlsZSA9IChcbiAgICBhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcsXG4gICk6IHN0cmluZ1tdID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IGV4dHJhY3REZWZhdWx0Q2xhc3NOYW1lRnJvbUZpbGUgPSAoYWJzb2x1dGVGaWxlUGF0aDogc3RyaW5nKSA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuICBleHBvcnQgY29uc3QgZm9ybWF0RmlsZSA9IChhYnNQYXRoVG9GaWxlOiBzdHJpbmcpOiB2b2lkID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBmb3JtYXRBbGxGaWxlc0luc2lkZUZvbGRlciA9IChhYnNQYXRoVG9Gb2xkZXI6IHN0cmluZyk6IHZvaWQgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuXG5cbiAgZXhwb3J0IGNvbnN0IGdldFRhb25Db250ZXh0RnJvbUNvbnRlbnQgPSAoZmlsZUNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG4gIGV4cG9ydCBjb25zdCBnZXRUYW9uQ29udGV4dHNOYW1lc0Zyb21GaWxlID0gKFxuICAgIHRzQWJzRmlsZVBhdGg6IHN0cmluZyxcbiAgKTogc3RyaW5nW10gPT4ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuXG4gIGV4cG9ydCBjb25zdCBleHRyYWN0QW5ndWxhckNvbXBvbmVudFNlbGVjdG9ycyA9IChcbiAgICBmaWxlQWJzUGF0aDogc3RyaW5nLFxuICApOiB7IGNsYXNzTmFtZTogc3RyaW5nOyBzZWxlY3Rvcjogc3RyaW5nIH1bXSA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuXG4gIGV4cG9ydCBjb25zdCB3cmFwV2l0aENvbW1lbnQgPSAoXG4gICAgb25lTGluZUNvbW1lbnQ6IHN0cmluZyxcbiAgICBhYnNEZXN0RmlsZVBhdGg6IHN0cmluZyxcbiAgKSA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gc2V0IG9yIGFkZCBhbiBleHBvcnRlZCBjb25zdCB3aXRoIGdpdmVuIG5hbWUgYW5kIHZhbHVlLlxuICAgKi9cbiAgZXhwb3J0IGNvbnN0IHNldFZhbHVlVG9WYXJpYWJsZUluVHNGaWxlID0gKFxuICAgIHRzQWJzRmlsZVBhdGg6IHN0cmluZyxcbiAgICB2YXJpYWJsZU5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZU9mVmFyaWFibGU6IGFueSxcbiAgICBhZGRJZk5vdEV4aXN0cyA9IHRydWUsXG4gICk6IHZvaWQgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG5cblxuXG5cblxuICBleHBvcnQgY2xhc3MgVHNJbXBvcnRFeHBvcnQge1xuICAgIHR5cGU6ICdleHBvcnQnIHwgJ2ltcG9ydCcgfCAnYXN5bmMtaW1wb3J0JyB8ICdyZXF1aXJlJztcbiAgICAvKipcbiAgICAgKiBPUklHTkFMXG4gICAgICogTmFtZSBvZiB0aGUgZmlsZSB0aGF0IGlzIGJlaW5nIGltcG9ydGVkL2V4cG9ydGVkXG4gICAgICogd2l0aCBwYXJlbnRoZXNpcyBpbmNsdWRlZFxuICAgICAqL1xuICAgIGVtYmVkZGVkUGF0aFRvRmlsZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIHNhbWUgYXMgY2xlYW5FbWJlZGRlZFBhdGhUb0ZpbGUgYnV0IHdpdGhvdXQgcXVvdGVzIChwYXJlbnRoZXNpcylcbiAgICAgKi9cbiAgICBjbGVhbkVtYmVkZGVkUGF0aFRvRmlsZTogc3RyaW5nO1xuICAgIHJlbW92ZVN0YXJ0RW5kUXVvdGVzKHN0cjogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15bJ1wiYF0vLCAnJykucmVwbGFjZSgvWydcImBdJC8sICcnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUkVTVUxUIE9GIFBST0NFU1NJTkdcbiAgICAgKi9cbiAgICBlbWJlZGRlZFBhdGhUb0ZpbGVSZXN1bHQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCB1c2UgY2xlYW5FbWJlZGRlZFBhdGhUb0ZpbGVcbiAgICAgKi9cbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAgIGlzSXNvbW9ycGhpYz86IGJvb2xlYW47XG4gICAgc3RhcnRSb3c6IG51bWJlcjtcbiAgICBzdGFydENvbDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogaXQgd2lsbCBleHRyYWN0IHBhcnQgb2YgdGhlIGZpbGUgY29udGVudFxuICAgICAqIHRoYXQgaXMgYmV0d2VlbiBzdGFydFJvdywgc3RhcnRDb2wgYW5kIGVuZFJvdywgZW5kQ29sXG4gICAgICogYW5kIGNvbnRhaW5zIGltcG9ydC9leHBvcnQvcmVxdWlyZSBzdGF0ZW1lbnRcbiAgICAgKi9cbiAgICBnZXRTdHJpbmdQYXJ0RnJvbSh3aG9sZUNvbnRlbnRPZkZpbGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICBjb25zdCBsaW5lcyA9IHdob2xlQ29udGVudE9mRmlsZS5zcGxpdCgnXFxuJyk7XG5cblxuICAgICAgY29uc3Qgc3RhcnRSb3dJbmRleCA9IHRoaXMuc3RhcnRSb3cgLSAxO1xuICAgICAgY29uc3QgZW5kUm93SW5kZXggPSB0aGlzLmVuZFJvdyAtIDE7XG5cblxuICAgICAgaWYgKHN0YXJ0Um93SW5kZXggPj0gbGluZXMubGVuZ3RoIHx8IGVuZFJvd0luZGV4ID49IGxpbmVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBpbmRleCBvdXQgb2YgYm91bmRzLicpO1xuICAgICAgfVxuXG4gICAgICBsZXQgZXh0cmFjdGVkTGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSBzdGFydFJvd0luZGV4OyBpIDw9IGVuZFJvd0luZGV4OyBpKyspIHtcbiAgICAgICAgbGV0IGxpbmUgPSBsaW5lc1tpXTtcblxuICAgICAgICBpZiAoaSA9PT0gc3RhcnRSb3dJbmRleCAmJiBpID09PSBlbmRSb3dJbmRleCkge1xuXG4gICAgICAgICAgZXh0cmFjdGVkTGluZXMucHVzaChsaW5lLnN1YnN0cmluZyh0aGlzLnN0YXJ0Q29sIC0gMSwgdGhpcy5lbmRDb2wpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID09PSBzdGFydFJvd0luZGV4KSB7XG5cbiAgICAgICAgICBleHRyYWN0ZWRMaW5lcy5wdXNoKGxpbmUuc3Vic3RyaW5nKHRoaXMuc3RhcnRDb2wgLSAxKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kUm93SW5kZXgpIHtcblxuICAgICAgICAgIGV4dHJhY3RlZExpbmVzLnB1c2gobGluZS5zdWJzdHJpbmcoMCwgdGhpcy5lbmRDb2wpKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIGV4dHJhY3RlZExpbmVzLnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV4dHJhY3RlZExpbmVzLmpvaW4oJ1xcbicpO1xuICAgIH1cblxuICAgIGVuZFJvdzogbnVtYmVyO1xuICAgIGVuZENvbDogbnVtYmVyO1xuICAgIHBhcmVudGhlc2lzVHlwZTogJ3NpbmdsZScgfCAnZG91YmxlJyB8ICd0aWNzJztcbiAgICB3cmFwSW5QYXJlbnRoZXNpcyhzdHI6IHN0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50aGVzaXNUeXBlID09PSAnc2luZ2xlJ1xuICAgICAgICA/IGAnJHtzdHJ9J2BcbiAgICAgICAgOiB0aGlzLnBhcmVudGhlc2lzVHlwZSA9PT0gJ2RvdWJsZSdcbiAgICAgICAgICA/IGBcIiR7c3RyfVwiYFxuICAgICAgICAgIDogYFxcYCR7c3RyfVxcYGA7XG4gICAgfVxuXG4gICAgaW1wb3J0RWxlbWVudHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHR5cGU6ICdleHBvcnQnIHwgJ2ltcG9ydCcgfCAnYXN5bmMtaW1wb3J0JyB8ICdyZXF1aXJlJyxcbiAgICAgIGVtYmVkZGVkUGF0aFRvRmlsZTogc3RyaW5nLFxuICAgICAgc3RhcnQ6IHRzLkxpbmVBbmRDaGFyYWN0ZXIsXG4gICAgICBlbmQ6IHRzLkxpbmVBbmRDaGFyYWN0ZXIsXG4gICAgICBwYXJlbnRoZXNpc1R5cGU6ICdzaW5nbGUnIHwgJ2RvdWJsZScgfCAndGljcycsXG4gICAgICBpbXBvcnRFbGVtZW50czogc3RyaW5nW10gPSBbXSxcbiAgICApIHtcbiAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICB0aGlzLmlzSXNvbW9ycGhpYyA9IGZhbHNlO1xuICAgICAgdGhpcy5lbWJlZGRlZFBhdGhUb0ZpbGUgPSBlbWJlZGRlZFBhdGhUb0ZpbGU7XG4gICAgICB0aGlzLmNsZWFuRW1iZWRkZWRQYXRoVG9GaWxlID1cbiAgICAgICAgdGhpcy5yZW1vdmVTdGFydEVuZFF1b3RlcyhlbWJlZGRlZFBhdGhUb0ZpbGUpO1xuICAgICAgdGhpcy5lbWJlZGRlZFBhdGhUb0ZpbGVSZXN1bHQgPSBlbWJlZGRlZFBhdGhUb0ZpbGU7XG4gICAgICB0aGlzLnN0YXJ0Um93ID0gc3RhcnQubGluZSArIDE7IC8vIFR5cGVTY3JpcHQgbGluZXMgYXJlIHplcm8tYmFzZWRcbiAgICAgIHRoaXMuc3RhcnRDb2wgPSBzdGFydC5jaGFyYWN0ZXIgKyAxO1xuICAgICAgdGhpcy5lbmRSb3cgPSBlbmQubGluZSArIDE7XG4gICAgICB0aGlzLmVuZENvbCA9IGVuZC5jaGFyYWN0ZXIgKyAxO1xuICAgICAgdGhpcy5wYXJlbnRoZXNpc1R5cGUgPSBwYXJlbnRoZXNpc1R5cGU7XG4gICAgICB0aGlzLmltcG9ydEVsZW1lbnRzID0gaW1wb3J0RWxlbWVudHM7XG4gICAgfVxuICB9XG5cblxuXG4gIGNvbnN0IGdldFF1b3RlVHlwZSA9ICh0ZXh0OiBzdHJpbmcpOiAnc2luZ2xlJyB8ICdkb3VibGUnIHwgJ3RpY3MnID0+IHtcbiAgICBpZiAodGV4dC5zdGFydHNXaXRoKCdgJykpIHJldHVybiAndGljcyc7XG4gICAgaWYgKHRleHQuc3RhcnRzV2l0aChcIidcIikpIHJldHVybiAnc2luZ2xlJztcbiAgICByZXR1cm4gJ2RvdWJsZSc7XG4gIH07XG5cblxuICBjb25zdCBleHRyYWN0SW1wb3J0RXhwb3J0RWxlbWVudHMgPSAobm9kZTogdHMuTm9kZSk6IHN0cmluZ1tdID0+IHtcbiAgICBjb25zdCBlbGVtZW50czogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChpc0ltcG9ydERlY2xhcmF0aW9uKG5vZGUpICYmIG5vZGUuaW1wb3J0Q2xhdXNlKSB7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9kZS5pbXBvcnRDbGF1c2UubmFtZWRCaW5kaW5ncyAmJlxuICAgICAgICBpc05hbWVkSW1wb3J0cyhub2RlLmltcG9ydENsYXVzZS5uYW1lZEJpbmRpbmdzKVxuICAgICAgKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgLi4ubm9kZS5pbXBvcnRDbGF1c2UubmFtZWRCaW5kaW5ncy5lbGVtZW50cy5tYXAoZWwgPT4gZWwubmFtZS50ZXh0KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRXhwb3J0RGVjbGFyYXRpb24obm9kZSkgJiYgbm9kZS5leHBvcnRDbGF1c2UpIHtcblxuICAgICAgaWYgKGlzTmFtZWRFeHBvcnRzKG5vZGUuZXhwb3J0Q2xhdXNlKSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKC4uLm5vZGUuZXhwb3J0Q2xhdXNlLmVsZW1lbnRzLm1hcChlbCA9PiBlbC5uYW1lLnRleHQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IHJlY29nbml6ZUltcG9ydHNGcm9tRmlsZSA9IChcbiAgICBmaWxlQWJzUEF0aDogc3RyaW5nLFxuICApOiBUc0ltcG9ydEV4cG9ydFtdID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IHJlY29nbml6ZUltcG9ydHNGcm9tQ29udGVudCA9IChcbiAgICBmaWxlQ29udGVudDogc3RyaW5nLFxuICApOiBUc0ltcG9ydEV4cG9ydFtdID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cbn1cblxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc0h0dHAge1xuXG4gIGV4cG9ydCBjb25zdCBzdGFydEh0dHBTZXJ2ZXIgPSBhc3luYyAoY3dkOiBzdHJpbmcsIHBvcnQ6IG51bWJlcikgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxufVxuXG5cblxuZXhwb3J0IG5hbWVzcGFjZSBVdGlsc01kIHtcbiAgLyoqXG4gICAqIGV4dHJhY3QgYXNzZXRzIHBhdGhlcyBmcm9tIC5tZCBmaWxlXG4gICAqL1xuICBleHBvcnQgY29uc3QgZ2V0QXNzZXRzID0gKG1kZmlsZUNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfTtcblxuICAvKipcbiAgICogRXh0cmFjdCBsaW5rcyB0byBvdGhlciBNYXJrZG93biBmaWxlcyBmcm9tIGEgZ2l2ZW4gTWFya2Rvd24gY29udGVudC5cbiAgICogQHBhcmFtIG1kZmlsZUNvbnRlbnRcbiAgICovXG4gIGV4cG9ydCBjb25zdCBnZXRMaW5rc1RvT3RoZXJNZEZpbGVzID0gKG1kZmlsZUNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBNb3ZlIGFzc2V0IHBhdGhzIHRvIGEgaGlnaGVyIGRpcmVjdG9yeSBsZXZlbCBieSBhZGRpbmcgXCIuLi9cIiBiZWZvcmUgZWFjaCBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gbWRmaWxlQ29udGVudCAtIFRoZSBjb250ZW50IG9mIHRoZSAubWQgZmlsZS5cbiAgICogQHBhcmFtIGxldmVsIC0gVGhlIG51bWJlciBvZiBsZXZlbHMgdG8gZ28gdXAgKGRlZmF1bHQgaXMgMSkuXG4gICAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBjb250ZW50IHdpdGggdXBkYXRlZCBhc3NldCBwYXRocy5cbiAgICovXG4gIGV4cG9ydCBjb25zdCBtb3ZlQXNzZXRzUGF0aGVzVG9MZXZlbCA9IChcbiAgICBtZGZpbGVDb250ZW50OiBzdHJpbmcsXG4gICAgbGV2ZWwgPSAxLFxuICApOiBzdHJpbmcgPT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG59XG5cblxuXG5leHBvcnQgbmFtZXNwYWNlIFV0aWxzUXVpY2tGaXhlcyB7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBub2RlX21vZHVsZXMvc3FsLmpzL2Rpc3Qvc3FsLXdhc20uanNcbiAgICovXG4gIGV4cG9ydCBjb25zdCByZXBsYWNlU1FMbGl0ZUZhdWx0eUNvZGUgPSAoXG4gICAgY29udGVudG9mU1FMV2FzbUpTOiBzdHJpbmcsXG4gICk6IHN0cmluZyA9PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH07XG5cblxuICAvKipcbiAgICogZm9yIHNvbWUgcmVhc29uIGVsZWN0cm9uIGlzIGJlaW5nIGJ1bmRsZWQgLSBhbmQgaXQgaXMgbm90IG5lZWRlZCBmb3IgY2xpXG4gICAqL1xuICBleHBvcnQgY29uc3QgcmVwbGFjZUVsZWN0cm9uV2l0aE5vdGhpbmcgPSAoanNDb250ZW50OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9O1xufVxuXG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvdXRpbHMudHMiXX0=