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,566 +0,0 @@
1
- const iso = {
2
- aar: 'aa',
3
- abk: 'ab',
4
- afr: 'af',
5
- aka: 'ak',
6
- alb: 'sq',
7
- amh: 'am',
8
- ara: 'ar',
9
- arg: 'an',
10
- arm: 'hy',
11
- asm: 'as',
12
- ava: 'av',
13
- ave: 'ae',
14
- aym: 'ay',
15
- aze: 'az',
16
- bak: 'ba',
17
- bam: 'bm',
18
- baq: 'eu',
19
- bel: 'be',
20
- ben: 'bn',
21
- bih: 'bh',
22
- bis: 'bi',
23
- bos: 'bs',
24
- bre: 'br',
25
- bul: 'bg',
26
- bur: 'my',
27
- cat: 'ca',
28
- cha: 'ch',
29
- che: 'ce',
30
- chi: 'zh',
31
- chu: 'cu',
32
- chv: 'cv',
33
- cor: 'kw',
34
- cos: 'co',
35
- cre: 'cr',
36
- cze: 'cs',
37
- dan: 'da',
38
- div: 'dv',
39
- dut: 'nl',
40
- dzo: 'dz',
41
- eng: 'en',
42
- epo: 'eo',
43
- est: 'et',
44
- ewe: 'ee',
45
- fao: 'fo',
46
- fij: 'fj',
47
- fin: 'fi',
48
- fre: 'fr',
49
- fry: 'fy',
50
- ful: 'ff',
51
- geo: 'ka',
52
- ger: 'de',
53
- gla: 'gd',
54
- gle: 'ga',
55
- glg: 'gl',
56
- glv: 'gv',
57
- gre: 'el',
58
- grn: 'gn',
59
- guj: 'gu',
60
- hat: 'ht',
61
- hau: 'ha',
62
- heb: 'he',
63
- her: 'hz',
64
- hin: 'hi',
65
- hmo: 'ho',
66
- hrv: 'hr',
67
- hun: 'hu',
68
- ibo: 'ig',
69
- ice: 'is',
70
- ido: 'io',
71
- iii: 'ii',
72
- iku: 'iu',
73
- ile: 'ie',
74
- ina: 'ia',
75
- ind: 'id',
76
- ipk: 'ik',
77
- ita: 'it',
78
- jav: 'jv',
79
- jpn: 'ja',
80
- kal: 'kl',
81
- kan: 'kn',
82
- kas: 'ks',
83
- kau: 'kr',
84
- kaz: 'kk',
85
- khm: 'km',
86
- kik: 'ki',
87
- kin: 'rw',
88
- kir: 'ky',
89
- kom: 'kv',
90
- kon: 'kg',
91
- kor: 'ko',
92
- kua: 'kj',
93
- kur: 'ku',
94
- lao: 'lo',
95
- lat: 'la',
96
- lav: 'lv',
97
- lim: 'li',
98
- lin: 'ln',
99
- lit: 'lt',
100
- ltz: 'lb',
101
- lub: 'lu',
102
- lug: 'lg',
103
- mac: 'mk',
104
- mah: 'mh',
105
- mal: 'ml',
106
- mao: 'mi',
107
- mar: 'mr',
108
- may: 'ms',
109
- mlg: 'mg',
110
- mlt: 'mt',
111
- mon: 'mn',
112
- nau: 'na',
113
- nav: 'nv',
114
- nbl: 'nr',
115
- nde: 'nd',
116
- ndo: 'ng',
117
- nep: 'ne',
118
- nno: 'nn',
119
- nob: 'nb',
120
- nor: 'no',
121
- nya: 'ny',
122
- oci: 'oc',
123
- oji: 'oj',
124
- ori: 'or',
125
- orm: 'om',
126
- oss: 'os',
127
- pan: 'pa',
128
- per: 'fa',
129
- pli: 'pi',
130
- pol: 'pl',
131
- por: 'pt',
132
- pus: 'ps',
133
- que: 'qu',
134
- roh: 'rm',
135
- rum: 'ro',
136
- run: 'rn',
137
- rus: 'ru',
138
- sag: 'sg',
139
- san: 'sa',
140
- sin: 'si',
141
- slo: 'sk',
142
- slv: 'sl',
143
- sme: 'se',
144
- smo: 'sm',
145
- sna: 'sn',
146
- snd: 'sd',
147
- som: 'so',
148
- sot: 'st',
149
- spa: 'es',
150
- srd: 'sc',
151
- srp: 'sr',
152
- ssw: 'ss',
153
- sun: 'su',
154
- swa: 'sw',
155
- swe: 'sv',
156
- tah: 'ty',
157
- tam: 'ta',
158
- tat: 'tt',
159
- tel: 'te',
160
- tgk: 'tg',
161
- tgl: 'tl',
162
- tha: 'th',
163
- tib: 'bo',
164
- tir: 'ti',
165
- ton: 'to',
166
- tsn: 'tn',
167
- tso: 'ts',
168
- tuk: 'tk',
169
- tur: 'tr',
170
- twi: 'tw',
171
- uig: 'ug',
172
- ukr: 'uk',
173
- urd: 'ur',
174
- uzb: 'uz',
175
- ven: 've',
176
- vie: 'vi',
177
- vol: 'vo',
178
- wel: 'cy',
179
- wln: 'wa',
180
- wol: 'wo',
181
- xho: 'xh',
182
- yid: 'yi',
183
- yor: 'yo',
184
- zha: 'za',
185
- zul: 'zu',
186
- }, names = {
187
- afar: 'aa',
188
- abkhazian: 'ab',
189
- afrikaans: 'af',
190
- akan: 'ak',
191
- albanian: 'sq',
192
- amharic: 'am',
193
- arabic: 'ar',
194
- aragonese: 'an',
195
- armenian: 'hy',
196
- assamese: 'as',
197
- avaric: 'av',
198
- avestan: 'ae',
199
- aymara: 'ay',
200
- azerbaijani: 'az',
201
- bashkir: 'ba',
202
- bambara: 'bm',
203
- basque: 'eu',
204
- belarusian: 'be',
205
- bengali: 'bn',
206
- 'bihari languages': 'bh',
207
- bislama: 'bi',
208
- tibetan: 'bo',
209
- bosnian: 'bs',
210
- breton: 'br',
211
- bulgarian: 'bg',
212
- burmese: 'my',
213
- catalan: 'ca',
214
- valencian: 'ca',
215
- czech: 'cs',
216
- chamorro: 'ch',
217
- chechen: 'ce',
218
- chinese: 'zh',
219
- 'church slavic': 'cu',
220
- 'old slavonic': 'cu',
221
- 'church slavonic': 'cu',
222
- 'old bulgarian': 'cu',
223
- 'old church slavonic': 'cu',
224
- chuvash: 'cv',
225
- cornish: 'kw',
226
- corsican: 'co',
227
- cree: 'cr',
228
- welsh: 'cy',
229
- danish: 'da',
230
- german: 'de',
231
- divehi: 'dv',
232
- dhivehi: 'dv',
233
- maldivian: 'dv',
234
- dutch: 'nl',
235
- flemish: 'nl',
236
- dzongkha: 'dz',
237
- greek: 'el',
238
- english: 'en',
239
- esperanto: 'eo',
240
- estonian: 'et',
241
- ewe: 'ee',
242
- faroese: 'fo',
243
- persian: 'fa',
244
- fijian: 'fj',
245
- finnish: 'fi',
246
- french: 'fr',
247
- 'western frisian': 'fy',
248
- fulah: 'ff',
249
- georgian: 'ka',
250
- gaelic: 'gd',
251
- 'scottish gaelic': 'gd',
252
- irish: 'ga',
253
- galician: 'gl',
254
- manx: 'gv',
255
- guarani: 'gn',
256
- gujarati: 'gu',
257
- haitian: 'ht',
258
- 'haitian creole': 'ht',
259
- hausa: 'ha',
260
- hebrew: 'he',
261
- herero: 'hz',
262
- hindi: 'hi',
263
- 'hiri motu': 'ho',
264
- croatian: 'hr',
265
- hungarian: 'hu',
266
- igbo: 'ig',
267
- icelandic: 'is',
268
- ido: 'io',
269
- 'sichuan yi': 'ii',
270
- nuosu: 'ii',
271
- inuktitut: 'iu',
272
- interlingue: 'ie',
273
- occidental: 'ie',
274
- interlingua: 'ia',
275
- indonesian: 'id',
276
- inupiaq: 'ik',
277
- italian: 'it',
278
- javanese: 'jv',
279
- japanese: 'ja',
280
- kalaallisut: 'kl',
281
- greenlandic: 'kl',
282
- kannada: 'kn',
283
- kashmiri: 'ks',
284
- kanuri: 'kr',
285
- kazakh: 'kk',
286
- 'central khmer': 'km',
287
- kikuyu: 'ki',
288
- gikuyu: 'ki',
289
- kinyarwanda: 'rw',
290
- kirghiz: 'ky',
291
- kyrgyz: 'ky',
292
- komi: 'kv',
293
- kongo: 'kg',
294
- korean: 'ko',
295
- kuanyama: 'kj',
296
- kwanyama: 'kj',
297
- kurdish: 'ku',
298
- lao: 'lo',
299
- latin: 'la',
300
- latvian: 'lv',
301
- limburgan: 'li',
302
- limburger: 'li',
303
- limburgish: 'li',
304
- lingala: 'ln',
305
- lithuanian: 'lt',
306
- luxembourgish: 'lb',
307
- letzeburgesch: 'lb',
308
- 'luba-katanga': 'lu',
309
- ganda: 'lg',
310
- macedonian: 'mk',
311
- marshallese: 'mh',
312
- malayalam: 'ml',
313
- maori: 'mi',
314
- marathi: 'mr',
315
- malay: 'ms',
316
- malagasy: 'mg',
317
- maltese: 'mt',
318
- mongolian: 'mn',
319
- nauru: 'na',
320
- navajo: 'nv',
321
- navaho: 'nv',
322
- 'ndebele, south': 'nr',
323
- 'south ndebele': 'nr',
324
- 'ndebele, north': 'nd',
325
- 'north ndebele': 'nd',
326
- ndonga: 'ng',
327
- nepali: 'ne',
328
- 'norwegian nynorsk': 'nn',
329
- 'nynorsk, norwegian': 'nn',
330
- 'norwegian bokmål': 'nb',
331
- 'bokmål, norwegian': 'nb',
332
- norwegian: 'no',
333
- chichewa: 'ny',
334
- chewa: 'ny',
335
- nyanja: 'ny',
336
- occitan: 'oc',
337
- ojibwa: 'oj',
338
- oriya: 'or',
339
- oromo: 'om',
340
- ossetian: 'os',
341
- ossetic: 'os',
342
- panjabi: 'pa',
343
- punjabi: 'pa',
344
- pali: 'pi',
345
- polish: 'pl',
346
- portuguese: 'pt',
347
- pushto: 'ps',
348
- pashto: 'ps',
349
- quechua: 'qu',
350
- romansh: 'rm',
351
- romanian: 'ro',
352
- moldavian: 'ro',
353
- moldovan: 'ro',
354
- rundi: 'rn',
355
- russian: 'ru',
356
- sango: 'sg',
357
- sanskrit: 'sa',
358
- sinhala: 'si',
359
- sinhalese: 'si',
360
- slovak: 'sk',
361
- slovenian: 'sl',
362
- 'northern sami': 'se',
363
- samoan: 'sm',
364
- shona: 'sn',
365
- sindhi: 'sd',
366
- somali: 'so',
367
- 'sotho, southern': 'st',
368
- spanish: 'es',
369
- castilian: 'es',
370
- sardinian: 'sc',
371
- serbian: 'sr',
372
- swati: 'ss',
373
- sundanese: 'su',
374
- swahili: 'sw',
375
- swedish: 'sv',
376
- tahitian: 'ty',
377
- tamil: 'ta',
378
- tatar: 'tt',
379
- telugu: 'te',
380
- tajik: 'tg',
381
- tagalog: 'tl',
382
- thai: 'th',
383
- tigrinya: 'ti',
384
- tonga: 'to',
385
- tswana: 'tn',
386
- tsonga: 'ts',
387
- turkmen: 'tk',
388
- turkish: 'tr',
389
- twi: 'tw',
390
- uighur: 'ug',
391
- uyghur: 'ug',
392
- ukrainian: 'uk',
393
- urdu: 'ur',
394
- uzbek: 'uz',
395
- venda: 've',
396
- vietnamese: 'vi',
397
- volapük: 'vo',
398
- walloon: 'wa',
399
- wolof: 'wo',
400
- xhosa: 'xh',
401
- yiddish: 'yi',
402
- yoruba: 'yo',
403
- zhuang: 'za',
404
- chuang: 'za',
405
- zulu: 'zu',
406
- };
407
- // @ts-ignore
408
- const isoKeys = Object.values(iso).sort();
409
- var languages = e => {
410
- if ('string' != typeof e)
411
- throw new Error('The "language" must be a string, received ' + typeof e);
412
- if (e.length > 100)
413
- throw new Error(`The "language" is too long at ${e.length} characters`);
414
- if (((e = e.toLowerCase()), (e = names[e] || iso[e] || e), !isoKeys.includes(e)))
415
- throw new Error(`The language "${e}" is not part of the ISO 639-1`);
416
- return e;
417
- };
418
- function Cache() {
419
- var e = Object.create(null);
420
- function a(a) {
421
- delete e[a];
422
- }
423
- (this.set = function (n, i, r) {
424
- if (void 0 !== r && ('number' != typeof r || isNaN(r) || r <= 0))
425
- throw new Error('Cache timeout must be a positive number');
426
- var t = e[n];
427
- t && clearTimeout(t.timeout);
428
- var o = { value: i, expire: r + Date.now() };
429
- return (
430
- // @ts-ignore
431
- isNaN(o.expire) || (o.timeout = setTimeout(() => a(n), r)), (e[n] = o), i);
432
- }),
433
- (this.del = function (n) {
434
- var i = !0, r = e[n];
435
- return (r
436
- ? (clearTimeout(r.timeout),
437
- !isNaN(r.expire) && r.expire < Date.now() && (i = !1))
438
- : (i = !1),
439
- i && a(n),
440
- i);
441
- }),
442
- (this.clear = function () {
443
- for (var a in e)
444
- clearTimeout(e[a].timeout);
445
- e = Object.create(null);
446
- }),
447
- (this.get = function (a) {
448
- var n = e[a];
449
- if (void 0 !== n) {
450
- if (isNaN(n.expire) || n.expire >= Date.now())
451
- return n.value;
452
- delete e[a];
453
- }
454
- return null;
455
- });
456
- }
457
- const exp$1 = new Cache();
458
- exp$1.Cache = Cache;
459
- const base = 'https://translate.googleapis.com/translate_a/single';
460
- var google = {
461
- fetch: ({ key: e, from: a, to: n, text: i }) => [
462
- `${base}?client=gtx&sl=${a}&tl=${n}&dt=t&q=${encodeURI(i)}`,
463
- ],
464
- parse: e => e.json().then(e => {
465
- if (!(e = e && e[0] && e[0][0] && e[0].map(e => e[0]).join('')))
466
- throw new Error('Translation not found');
467
- return e;
468
- }),
469
- }, yandex = {
470
- needkey: !0,
471
- fetch: ({ key: e, from: a, to: n, text: i }) => [
472
- `https://translate.yandex.net/api/v1.5/tr.json/translate?key=${e}&lang=${a}-${n}&text=${encodeURIComponent(i)}`,
473
- { method: 'POST', body: '' },
474
- ],
475
- parse: e => e.json().then(e => {
476
- if (200 !== e.code)
477
- throw new Error(e.message);
478
- return e.text[0];
479
- }),
480
- };
481
- const libreUrl = 'https://libretranslate.com/translate';
482
- var libre = {
483
- needkey: !1,
484
- fetch: ({ url: e = libreUrl, key: a, from: n, to: i, text: r }) => [
485
- e,
486
- {
487
- method: 'POST',
488
- body: JSON.stringify({ q: r, source: n, target: i, api_key: a }),
489
- headers: { 'Content-Type': 'application/json' },
490
- },
491
- ],
492
- parse: e => e.json().then(e => {
493
- if (!e)
494
- throw new Error('No response found');
495
- if (e.error)
496
- throw new Error(e.error);
497
- if (!e.translatedText)
498
- throw new Error('No response found');
499
- return e.translatedText;
500
- }),
501
- }, deepl = {
502
- needkey: !0,
503
- fetch: ({ key: e, from: a, to: n, text: i }) => [
504
- `https://api${/:fx$/.test(e) ? '-free' : ''}.deepl.com/v2/translate?auth_key=${e}&source_lang=${a}&target_lang=${n}&text=${(i = encodeURIComponent(i))}`,
505
- { method: 'POST', body: '' },
506
- ],
507
- parse: async (e) => {
508
- if (!e.ok) {
509
- if (403 === e.status)
510
- throw new Error('Auth Error, please review the key for DeepL');
511
- throw new Error(`Error ${e.status}`);
512
- }
513
- return e.json().then(e => e.translations[0].text);
514
- },
515
- }, engines = { google: google, yandex: yandex, libre: libre, deepl: deepl };
516
- const Translate = function (e = {}) {
517
- // @ts-ignore
518
- if (!(this instanceof Translate))
519
- return new Translate(e);
520
- const a = {
521
- from: 'en',
522
- to: 'en',
523
- cache: void 0,
524
- languages: languages,
525
- engines: engines,
526
- engine: 'google',
527
- keys: {},
528
- }, n = async (e, a = {}) => {
529
- 'string' == typeof a && (a = { to: a }), // @ts-ignore
530
- (a.text = e), // @ts-ignore
531
- (a.from = languages(a.from || n.from)), // @ts-ignore
532
- (a.to = languages(a.to || n.to)), // @ts-ignore
533
- (a.cache = a.cache || n.cache), // @ts-ignore
534
- (a.engines = a.engines || {}), // @ts-ignore
535
- (a.engine = a.engine || n.engine), // @ts-ignore
536
- (a.url = a.url || n.url), // @ts-ignore
537
- (a.id = a.id || `${a.url}:${a.from}:${a.to}:${a.engine}:${a.text}`), // @ts-ignore
538
- (a.keys = a.keys || n.keys || {}); // @ts-ignore
539
- for (let e in n.keys)
540
- a.keys[e] = a.keys[e] || n.keys[e]; // @ts-ignore
541
- a.key = a.key || n.key || a.keys[a.engine]; // @ts-ignore
542
- const i = a.engines[a.engine] || n.engines[a.engine], // @ts-ignore
543
- r = exp$1.get(a.id);
544
- if (r)
545
- return Promise.resolve(r); // @ts-ignore
546
- if (a.to === a.from)
547
- return Promise.resolve(a.text); // @ts-ignore
548
- if (i.needkey && !a.key)
549
- // @ts-ignore
550
- throw new Error(// @ts-ignore
551
- `The engine "${a.engine}" needs a key, please provide it`);
552
- const t = i.fetch(a); // @ts-ignore
553
- return fetch(...t)
554
- .then(i.parse) // @ts-ignore
555
- .then(e => exp$1.set(a.id, e, a.cache));
556
- };
557
- for (let i in a)
558
- n[i] = void 0 === e[i] ? a[i] : e[i];
559
- return n;
560
- }, // @ts-ignore
561
- exp = new Translate();
562
- exp.Translate = Translate;
563
- export const translate = exp;
564
- ;
565
- ({}); // @--end-of-file-for-module=tnp-helpers lib/base/translate.ts
566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9iYXNlL3RyYW5zbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLEdBQUcsR0FBRztJQUNSLEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7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RSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUMzRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQzlCLGFBQWE7SUFDYixJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksU0FBUyxDQUFDO1FBQUUsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQUMsR0FBRztRQUNOLElBQUksRUFBRSxJQUFJO1FBQ1YsRUFBRSxFQUFFLElBQUk7UUFDUixLQUFLLEVBQUUsS0FBSyxDQUFDO1FBQ2IsU0FBUyxFQUFFLFNBQVM7UUFDcEIsT0FBTyxFQUFFLE9BQU87UUFDaEIsTUFBTSxFQUFFLFFBQVE7UUFDaEIsSUFBSSxFQUFFLEVBQUU7S0FDVCxFQUNELENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRTtRQUN0QixRQUFRLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxhQUFhO1lBQ3BELENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxhQUFhO1lBQzNCLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxhQUFhO1lBQ3JELENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhO1lBQy9DLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhO1lBQzdDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGFBQWE7WUFDNUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGFBQWE7WUFDaEQsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWE7WUFDdkMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGFBQWE7WUFDbEYsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDbEQsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTtZQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUN2RSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGFBQWE7UUFDekQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsYUFBYTtRQUNqRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUMvQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUk7WUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUNsRSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRztZQUNyQixhQUFhO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBRSxhQUFhO1lBQzVCLGVBQWUsQ0FBQyxDQUFDLE1BQU0sa0NBQWtDLENBQzFELENBQUM7UUFDSixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUNuQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYTthQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUNKLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQztRQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxFQUFFLGFBQWE7QUFDaEIsR0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDeEIsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFFMUIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBR2QsQ0FBQztBQUVYLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsOERBQThEIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmNvbnN0IGlzbyA9IHtcbiAgICBhYXI6ICdhYScsXG4gICAgYWJrOiAnYWInLFxuICAgIGFmcjogJ2FmJyxcbiAgICBha2E6ICdhaycsXG4gICAgYWxiOiAnc3EnLFxuICAgIGFtaDogJ2FtJyxcbiAgICBhcmE6ICdhcicsXG4gICAgYXJnOiAnYW4nLFxuICAgIGFybTogJ2h5JyxcbiAgICBhc206ICdhcycsXG4gICAgYXZhOiAnYXYnLFxuICAgIGF2ZTogJ2FlJyxcbiAgICBheW06ICdheScsXG4gICAgYXplOiAnYXonLFxuICAgIGJhazogJ2JhJyxcbiAgICBiYW06ICdibScsXG4gICAgYmFxOiAnZXUnLFxuICAgIGJlbDogJ2JlJyxcbiAgICBiZW46ICdibicsXG4gICAgYmloOiAnYmgnLFxuICAgIGJpczogJ2JpJyxcbiAgICBib3M6ICdicycsXG4gICAgYnJlOiAnYnInLFxuICAgIGJ1bDogJ2JnJyxcbiAgICBidXI6ICdteScsXG4gICAgY2F0OiAnY2EnLFxuICAgIGNoYTogJ2NoJyxcbiAgICBjaGU6ICdjZScsXG4gICAgY2hpOiAnemgnLFxuICAgIGNodTogJ2N1JyxcbiAgICBjaHY6ICdjdicsXG4gICAgY29yOiAna3cnLFxuICAgIGNvczogJ2NvJyxcbiAgICBjcmU6ICdjcicsXG4gICAgY3plOiAnY3MnLFxuICAgIGRhbjogJ2RhJyxcbiAgICBkaXY6ICdkdicsXG4gICAgZHV0OiAnbmwnLFxuICAgIGR6bzogJ2R6JyxcbiAgICBlbmc6ICdlbicsXG4gICAgZXBvOiAnZW8nLFxuICAgIGVzdDogJ2V0JyxcbiAgICBld2U6ICdlZScsXG4gICAgZmFvOiAnZm8nLFxuICAgIGZpajogJ2ZqJyxcbiAgICBmaW46ICdmaScsXG4gICAgZnJlOiAnZnInLFxuICAgIGZyeTogJ2Z5JyxcbiAgICBmdWw6ICdmZicsXG4gICAgZ2VvOiAna2EnLFxuICAgIGdlcjogJ2RlJyxcbiAgICBnbGE6ICdnZCcsXG4gICAgZ2xlOiAnZ2EnLFxuICAgIGdsZzogJ2dsJyxcbiAgICBnbHY6ICdndicsXG4gICAgZ3JlOiAnZWwnLFxuICAgIGdybjogJ2duJyxcbiAgICBndWo6ICdndScsXG4gICAgaGF0OiAnaHQnLFxuICAgIGhhdTogJ2hhJyxcbiAgICBoZWI6ICdoZScsXG4gICAgaGVyOiAnaHonLFxuICAgIGhpbjogJ2hpJyxcbiAgICBobW86ICdobycsXG4gICAgaHJ2OiAnaHInLFxuICAgIGh1bjogJ2h1JyxcbiAgICBpYm86ICdpZycsXG4gICAgaWNlOiAnaXMnLFxuICAgIGlkbzogJ2lvJyxcbiAgICBpaWk6ICdpaScsXG4gICAgaWt1OiAnaXUnLFxuICAgIGlsZTogJ2llJyxcbiAgICBpbmE6ICdpYScsXG4gICAgaW5kOiAnaWQnLFxuICAgIGlwazogJ2lrJyxcbiAgICBpdGE6ICdpdCcsXG4gICAgamF2OiAnanYnLFxuICAgIGpwbjogJ2phJyxcbiAgICBrYWw6ICdrbCcsXG4gICAga2FuOiAna24nLFxuICAgIGthczogJ2tzJyxcbiAgICBrYXU6ICdrcicsXG4gICAga2F6OiAna2snLFxuICAgIGtobTogJ2ttJyxcbiAgICBraWs6ICdraScsXG4gICAga2luOiAncncnLFxuICAgIGtpcjogJ2t5JyxcbiAgICBrb206ICdrdicsXG4gICAga29uOiAna2cnLFxuICAgIGtvcjogJ2tvJyxcbiAgICBrdWE6ICdraicsXG4gICAga3VyOiAna3UnLFxuICAgIGxhbzogJ2xvJyxcbiAgICBsYXQ6ICdsYScsXG4gICAgbGF2OiAnbHYnLFxuICAgIGxpbTogJ2xpJyxcbiAgICBsaW46ICdsbicsXG4gICAgbGl0OiAnbHQnLFxuICAgIGx0ejogJ2xiJyxcbiAgICBsdWI6ICdsdScsXG4gICAgbHVnOiAnbGcnLFxuICAgIG1hYzogJ21rJyxcbiAgICBtYWg6ICdtaCcsXG4gICAgbWFsOiAnbWwnLFxuICAgIG1hbzogJ21pJyxcbiAgICBtYXI6ICdtcicsXG4gICAgbWF5OiAnbXMnLFxuICAgIG1sZzogJ21nJyxcbiAgICBtbHQ6ICdtdCcsXG4gICAgbW9uOiAnbW4nLFxuICAgIG5hdTogJ25hJyxcbiAgICBuYXY6ICdudicsXG4gICAgbmJsOiAnbnInLFxuICAgIG5kZTogJ25kJyxcbiAgICBuZG86ICduZycsXG4gICAgbmVwOiAnbmUnLFxuICAgIG5ubzogJ25uJyxcbiAgICBub2I6ICduYicsXG4gICAgbm9yOiAnbm8nLFxuICAgIG55YTogJ255JyxcbiAgICBvY2k6ICdvYycsXG4gICAgb2ppOiAnb2onLFxuICAgIG9yaTogJ29yJyxcbiAgICBvcm06ICdvbScsXG4gICAgb3NzOiAnb3MnLFxuICAgIHBhbjogJ3BhJyxcbiAgICBwZXI6ICdmYScsXG4gICAgcGxpOiAncGknLFxuICAgIHBvbDogJ3BsJyxcbiAgICBwb3I6ICdwdCcsXG4gICAgcHVzOiAncHMnLFxuICAgIHF1ZTogJ3F1JyxcbiAgICByb2g6ICdybScsXG4gICAgcnVtOiAncm8nLFxuICAgIHJ1bjogJ3JuJyxcbiAgICBydXM6ICdydScsXG4gICAgc2FnOiAnc2cnLFxuICAgIHNhbjogJ3NhJyxcbiAgICBzaW46ICdzaScsXG4gICAgc2xvOiAnc2snLFxuICAgIHNsdjogJ3NsJyxcbiAgICBzbWU6ICdzZScsXG4gICAgc21vOiAnc20nLFxuICAgIHNuYTogJ3NuJyxcbiAgICBzbmQ6ICdzZCcsXG4gICAgc29tOiAnc28nLFxuICAgIHNvdDogJ3N0JyxcbiAgICBzcGE6ICdlcycsXG4gICAgc3JkOiAnc2MnLFxuICAgIHNycDogJ3NyJyxcbiAgICBzc3c6ICdzcycsXG4gICAgc3VuOiAnc3UnLFxuICAgIHN3YTogJ3N3JyxcbiAgICBzd2U6ICdzdicsXG4gICAgdGFoOiAndHknLFxuICAgIHRhbTogJ3RhJyxcbiAgICB0YXQ6ICd0dCcsXG4gICAgdGVsOiAndGUnLFxuICAgIHRnazogJ3RnJyxcbiAgICB0Z2w6ICd0bCcsXG4gICAgdGhhOiAndGgnLFxuICAgIHRpYjogJ2JvJyxcbiAgICB0aXI6ICd0aScsXG4gICAgdG9uOiAndG8nLFxuICAgIHRzbjogJ3RuJyxcbiAgICB0c286ICd0cycsXG4gICAgdHVrOiAndGsnLFxuICAgIHR1cjogJ3RyJyxcbiAgICB0d2k6ICd0dycsXG4gICAgdWlnOiAndWcnLFxuICAgIHVrcjogJ3VrJyxcbiAgICB1cmQ6ICd1cicsXG4gICAgdXpiOiAndXonLFxuICAgIHZlbjogJ3ZlJyxcbiAgICB2aWU6ICd2aScsXG4gICAgdm9sOiAndm8nLFxuICAgIHdlbDogJ2N5JyxcbiAgICB3bG46ICd3YScsXG4gICAgd29sOiAnd28nLFxuICAgIHhobzogJ3hoJyxcbiAgICB5aWQ6ICd5aScsXG4gICAgeW9yOiAneW8nLFxuICAgIHpoYTogJ3phJyxcbiAgICB6dWw6ICd6dScsXG4gIH0sXG4gIG5hbWVzID0ge1xuICAgIGFmYXI6ICdhYScsXG4gICAgYWJraGF6aWFuOiAnYWInLFxuICAgIGFmcmlrYWFuczogJ2FmJyxcbiAgICBha2FuOiAnYWsnLFxuICAgIGFsYmFuaWFuOiAnc3EnLFxuICAgIGFtaGFyaWM6ICdhbScsXG4gICAgYXJhYmljOiAnYXInLFxuICAgIGFyYWdvbmVzZTogJ2FuJyxcbiAgICBhcm1lbmlhbjogJ2h5JyxcbiAgICBhc3NhbWVzZTogJ2FzJyxcbiAgICBhdmFyaWM6ICdhdicsXG4gICAgYXZlc3RhbjogJ2FlJyxcbiAgICBheW1hcmE6ICdheScsXG4gICAgYXplcmJhaWphbmk6ICdheicsXG4gICAgYmFzaGtpcjogJ2JhJyxcbiAgICBiYW1iYXJhOiAnYm0nLFxuICAgIGJhc3F1ZTogJ2V1JyxcbiAgICBiZWxhcnVzaWFuOiAnYmUnLFxuICAgIGJlbmdhbGk6ICdibicsXG4gICAgJ2JpaGFyaSBsYW5ndWFnZXMnOiAnYmgnLFxuICAgIGJpc2xhbWE6ICdiaScsXG4gICAgdGliZXRhbjogJ2JvJyxcbiAgICBib3NuaWFuOiAnYnMnLFxuICAgIGJyZXRvbjogJ2JyJyxcbiAgICBidWxnYXJpYW46ICdiZycsXG4gICAgYnVybWVzZTogJ215JyxcbiAgICBjYXRhbGFuOiAnY2EnLFxuICAgIHZhbGVuY2lhbjogJ2NhJyxcbiAgICBjemVjaDogJ2NzJyxcbiAgICBjaGFtb3JybzogJ2NoJyxcbiAgICBjaGVjaGVuOiAnY2UnLFxuICAgIGNoaW5lc2U6ICd6aCcsXG4gICAgJ2NodXJjaCBzbGF2aWMnOiAnY3UnLFxuICAgICdvbGQgc2xhdm9uaWMnOiAnY3UnLFxuICAgICdjaHVyY2ggc2xhdm9uaWMnOiAnY3UnLFxuICAgICdvbGQgYnVsZ2FyaWFuJzogJ2N1JyxcbiAgICAnb2xkIGNodXJjaCBzbGF2b25pYyc6ICdjdScsXG4gICAgY2h1dmFzaDogJ2N2JyxcbiAgICBjb3JuaXNoOiAna3cnLFxuICAgIGNvcnNpY2FuOiAnY28nLFxuICAgIGNyZWU6ICdjcicsXG4gICAgd2Vsc2g6ICdjeScsXG4gICAgZGFuaXNoOiAnZGEnLFxuICAgIGdlcm1hbjogJ2RlJyxcbiAgICBkaXZlaGk6ICdkdicsXG4gICAgZGhpdmVoaTogJ2R2JyxcbiAgICBtYWxkaXZpYW46ICdkdicsXG4gICAgZHV0Y2g6ICdubCcsXG4gICAgZmxlbWlzaDogJ25sJyxcbiAgICBkem9uZ2toYTogJ2R6JyxcbiAgICBncmVlazogJ2VsJyxcbiAgICBlbmdsaXNoOiAnZW4nLFxuICAgIGVzcGVyYW50bzogJ2VvJyxcbiAgICBlc3RvbmlhbjogJ2V0JyxcbiAgICBld2U6ICdlZScsXG4gICAgZmFyb2VzZTogJ2ZvJyxcbiAgICBwZXJzaWFuOiAnZmEnLFxuICAgIGZpamlhbjogJ2ZqJyxcbiAgICBmaW5uaXNoOiAnZmknLFxuICAgIGZyZW5jaDogJ2ZyJyxcbiAgICAnd2VzdGVybiBmcmlzaWFuJzogJ2Z5JyxcbiAgICBmdWxhaDogJ2ZmJyxcbiAgICBnZW9yZ2lhbjogJ2thJyxcbiAgICBnYWVsaWM6ICdnZCcsXG4gICAgJ3Njb3R0aXNoIGdhZWxpYyc6ICdnZCcsXG4gICAgaXJpc2g6ICdnYScsXG4gICAgZ2FsaWNpYW46ICdnbCcsXG4gICAgbWFueDogJ2d2JyxcbiAgICBndWFyYW5pOiAnZ24nLFxuICAgIGd1amFyYXRpOiAnZ3UnLFxuICAgIGhhaXRpYW46ICdodCcsXG4gICAgJ2hhaXRpYW4gY3Jlb2xlJzogJ2h0JyxcbiAgICBoYXVzYTogJ2hhJyxcbiAgICBoZWJyZXc6ICdoZScsXG4gICAgaGVyZXJvOiAnaHonLFxuICAgIGhpbmRpOiAnaGknLFxuICAgICdoaXJpIG1vdHUnOiAnaG8nLFxuICAgIGNyb2F0aWFuOiAnaHInLFxuICAgIGh1bmdhcmlhbjogJ2h1JyxcbiAgICBpZ2JvOiAnaWcnLFxuICAgIGljZWxhbmRpYzogJ2lzJyxcbiAgICBpZG86ICdpbycsXG4gICAgJ3NpY2h1YW4geWknOiAnaWknLFxuICAgIG51b3N1OiAnaWknLFxuICAgIGludWt0aXR1dDogJ2l1JyxcbiAgICBpbnRlcmxpbmd1ZTogJ2llJyxcbiAgICBvY2NpZGVudGFsOiAnaWUnLFxuICAgIGludGVybGluZ3VhOiAnaWEnLFxuICAgIGluZG9uZXNpYW46ICdpZCcsXG4gICAgaW51cGlhcTogJ2lrJyxcbiAgICBpdGFsaWFuOiAnaXQnLFxuICAgIGphdmFuZXNlOiAnanYnLFxuICAgIGphcGFuZXNlOiAnamEnLFxuICAgIGthbGFhbGxpc3V0OiAna2wnLFxuICAgIGdyZWVubGFuZGljOiAna2wnLFxuICAgIGthbm5hZGE6ICdrbicsXG4gICAga2FzaG1pcmk6ICdrcycsXG4gICAga2FudXJpOiAna3InLFxuICAgIGthemFraDogJ2trJyxcbiAgICAnY2VudHJhbCBraG1lcic6ICdrbScsXG4gICAga2lrdXl1OiAna2knLFxuICAgIGdpa3V5dTogJ2tpJyxcbiAgICBraW55YXJ3YW5kYTogJ3J3JyxcbiAgICBraXJnaGl6OiAna3knLFxuICAgIGt5cmd5ejogJ2t5JyxcbiAgICBrb21pOiAna3YnLFxuICAgIGtvbmdvOiAna2cnLFxuICAgIGtvcmVhbjogJ2tvJyxcbiAgICBrdWFueWFtYTogJ2tqJyxcbiAgICBrd2FueWFtYTogJ2tqJyxcbiAgICBrdXJkaXNoOiAna3UnLFxuICAgIGxhbzogJ2xvJyxcbiAgICBsYXRpbjogJ2xhJyxcbiAgICBsYXR2aWFuOiAnbHYnLFxuICAgIGxpbWJ1cmdhbjogJ2xpJyxcbiAgICBsaW1idXJnZXI6ICdsaScsXG4gICAgbGltYnVyZ2lzaDogJ2xpJyxcbiAgICBsaW5nYWxhOiAnbG4nLFxuICAgIGxpdGh1YW5pYW46ICdsdCcsXG4gICAgbHV4ZW1ib3VyZ2lzaDogJ2xiJyxcbiAgICBsZXR6ZWJ1cmdlc2NoOiAnbGInLFxuICAgICdsdWJhLWthdGFuZ2EnOiAnbHUnLFxuICAgIGdhbmRhOiAnbGcnLFxuICAgIG1hY2Vkb25pYW46ICdtaycsXG4gICAgbWFyc2hhbGxlc2U6ICdtaCcsXG4gICAgbWFsYXlhbGFtOiAnbWwnLFxuICAgIG1hb3JpOiAnbWknLFxuICAgIG1hcmF0aGk6ICdtcicsXG4gICAgbWFsYXk6ICdtcycsXG4gICAgbWFsYWdhc3k6ICdtZycsXG4gICAgbWFsdGVzZTogJ210JyxcbiAgICBtb25nb2xpYW46ICdtbicsXG4gICAgbmF1cnU6ICduYScsXG4gICAgbmF2YWpvOiAnbnYnLFxuICAgIG5hdmFobzogJ252JyxcbiAgICAnbmRlYmVsZSwgc291dGgnOiAnbnInLFxuICAgICdzb3V0aCBuZGViZWxlJzogJ25yJyxcbiAgICAnbmRlYmVsZSwgbm9ydGgnOiAnbmQnLFxuICAgICdub3J0aCBuZGViZWxlJzogJ25kJyxcbiAgICBuZG9uZ2E6ICduZycsXG4gICAgbmVwYWxpOiAnbmUnLFxuICAgICdub3J3ZWdpYW4gbnlub3Jzayc6ICdubicsXG4gICAgJ255bm9yc2ssIG5vcndlZ2lhbic6ICdubicsXG4gICAgJ25vcndlZ2lhbiBib2ttw6VsJzogJ25iJyxcbiAgICAnYm9rbcOlbCwgbm9yd2VnaWFuJzogJ25iJyxcbiAgICBub3J3ZWdpYW46ICdubycsXG4gICAgY2hpY2hld2E6ICdueScsXG4gICAgY2hld2E6ICdueScsXG4gICAgbnlhbmphOiAnbnknLFxuICAgIG9jY2l0YW46ICdvYycsXG4gICAgb2ppYndhOiAnb2onLFxuICAgIG9yaXlhOiAnb3InLFxuICAgIG9yb21vOiAnb20nLFxuICAgIG9zc2V0aWFuOiAnb3MnLFxuICAgIG9zc2V0aWM6ICdvcycsXG4gICAgcGFuamFiaTogJ3BhJyxcbiAgICBwdW5qYWJpOiAncGEnLFxuICAgIHBhbGk6ICdwaScsXG4gICAgcG9saXNoOiAncGwnLFxuICAgIHBvcnR1Z3Vlc2U6ICdwdCcsXG4gICAgcHVzaHRvOiAncHMnLFxuICAgIHBhc2h0bzogJ3BzJyxcbiAgICBxdWVjaHVhOiAncXUnLFxuICAgIHJvbWFuc2g6ICdybScsXG4gICAgcm9tYW5pYW46ICdybycsXG4gICAgbW9sZGF2aWFuOiAncm8nLFxuICAgIG1vbGRvdmFuOiAncm8nLFxuICAgIHJ1bmRpOiAncm4nLFxuICAgIHJ1c3NpYW46ICdydScsXG4gICAgc2FuZ286ICdzZycsXG4gICAgc2Fuc2tyaXQ6ICdzYScsXG4gICAgc2luaGFsYTogJ3NpJyxcbiAgICBzaW5oYWxlc2U6ICdzaScsXG4gICAgc2xvdmFrOiAnc2snLFxuICAgIHNsb3ZlbmlhbjogJ3NsJyxcbiAgICAnbm9ydGhlcm4gc2FtaSc6ICdzZScsXG4gICAgc2Ftb2FuOiAnc20nLFxuICAgIHNob25hOiAnc24nLFxuICAgIHNpbmRoaTogJ3NkJyxcbiAgICBzb21hbGk6ICdzbycsXG4gICAgJ3NvdGhvLCBzb3V0aGVybic6ICdzdCcsXG4gICAgc3BhbmlzaDogJ2VzJyxcbiAgICBjYXN0aWxpYW46ICdlcycsXG4gICAgc2FyZGluaWFuOiAnc2MnLFxuICAgIHNlcmJpYW46ICdzcicsXG4gICAgc3dhdGk6ICdzcycsXG4gICAgc3VuZGFuZXNlOiAnc3UnLFxuICAgIHN3YWhpbGk6ICdzdycsXG4gICAgc3dlZGlzaDogJ3N2JyxcbiAgICB0YWhpdGlhbjogJ3R5JyxcbiAgICB0YW1pbDogJ3RhJyxcbiAgICB0YXRhcjogJ3R0JyxcbiAgICB0ZWx1Z3U6ICd0ZScsXG4gICAgdGFqaWs6ICd0ZycsXG4gICAgdGFnYWxvZzogJ3RsJyxcbiAgICB0aGFpOiAndGgnLFxuICAgIHRpZ3JpbnlhOiAndGknLFxuICAgIHRvbmdhOiAndG8nLFxuICAgIHRzd2FuYTogJ3RuJyxcbiAgICB0c29uZ2E6ICd0cycsXG4gICAgdHVya21lbjogJ3RrJyxcbiAgICB0dXJraXNoOiAndHInLFxuICAgIHR3aTogJ3R3JyxcbiAgICB1aWdodXI6ICd1ZycsXG4gICAgdXlnaHVyOiAndWcnLFxuICAgIHVrcmFpbmlhbjogJ3VrJyxcbiAgICB1cmR1OiAndXInLFxuICAgIHV6YmVrOiAndXonLFxuICAgIHZlbmRhOiAndmUnLFxuICAgIHZpZXRuYW1lc2U6ICd2aScsXG4gICAgdm9sYXDDvGs6ICd2bycsXG4gICAgd2FsbG9vbjogJ3dhJyxcbiAgICB3b2xvZjogJ3dvJyxcbiAgICB4aG9zYTogJ3hoJyxcbiAgICB5aWRkaXNoOiAneWknLFxuICAgIHlvcnViYTogJ3lvJyxcbiAgICB6aHVhbmc6ICd6YScsXG4gICAgY2h1YW5nOiAnemEnLFxuICAgIHp1bHU6ICd6dScsXG4gIH0gYXMgY29uc3Q7XG4vLyBAdHMtaWdub3JlXG5jb25zdCBpc29LZXlzID0gT2JqZWN0LnZhbHVlcyhpc28pLnNvcnQoKTtcbnZhciBsYW5ndWFnZXMgPSBlID0+IHtcbiAgaWYgKCdzdHJpbmcnICE9IHR5cGVvZiBlKVxuICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwibGFuZ3VhZ2VcIiBtdXN0IGJlIGEgc3RyaW5nLCByZWNlaXZlZCAnICsgdHlwZW9mIGUpO1xuICBpZiAoZS5sZW5ndGggPiAxMDApXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCJsYW5ndWFnZVwiIGlzIHRvbyBsb25nIGF0ICR7ZS5sZW5ndGh9IGNoYXJhY3RlcnNgKTtcbiAgaWYgKFxuICAgICgoZSA9IGUudG9Mb3dlckNhc2UoKSksIChlID0gbmFtZXNbZV0gfHwgaXNvW2VdIHx8IGUpLCAhaXNvS2V5cy5pbmNsdWRlcyhlKSlcbiAgKVxuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGxhbmd1YWdlIFwiJHtlfVwiIGlzIG5vdCBwYXJ0IG9mIHRoZSBJU08gNjM5LTFgKTtcbiAgcmV0dXJuIGU7XG59O1xuXG5mdW5jdGlvbiBDYWNoZSgpIHtcbiAgdmFyIGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmdW5jdGlvbiBhKGEpIHtcbiAgICBkZWxldGUgZVthXTtcbiAgfVxuICAodGhpcy5zZXQgPSBmdW5jdGlvbiAobiwgaSwgcikge1xuICAgIGlmICh2b2lkIDAgIT09IHIgJiYgKCdudW1iZXInICE9IHR5cGVvZiByIHx8IGlzTmFOKHIpIHx8IHIgPD0gMCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhY2hlIHRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIHZhciB0ID0gZVtuXTtcbiAgICB0ICYmIGNsZWFyVGltZW91dCh0LnRpbWVvdXQpO1xuICAgIHZhciBvID0geyB2YWx1ZTogaSwgZXhwaXJlOiByICsgRGF0ZS5ub3coKSB9O1xuICAgIHJldHVybiAoXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpc05hTihvLmV4cGlyZSkgfHwgKG8udGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gYShuKSwgcikpLCAoZVtuXSA9IG8pLCBpXG4gICAgKTtcbiAgfSksXG4gICAgKHRoaXMuZGVsID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgIHZhciBpID0gITAsXG4gICAgICAgIHIgPSBlW25dO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgclxuICAgICAgICAgID8gKGNsZWFyVGltZW91dChyLnRpbWVvdXQpLFxuICAgICAgICAgICAgIWlzTmFOKHIuZXhwaXJlKSAmJiByLmV4cGlyZSA8IERhdGUubm93KCkgJiYgKGkgPSAhMSkpXG4gICAgICAgICAgOiAoaSA9ICExKSxcbiAgICAgICAgaSAmJiBhKG4pLFxuICAgICAgICBpXG4gICAgICApO1xuICAgIH0pLFxuICAgICh0aGlzLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgYSBpbiBlKSBjbGVhclRpbWVvdXQoZVthXS50aW1lb3V0KTtcbiAgICAgIGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH0pLFxuICAgICh0aGlzLmdldCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICB2YXIgbiA9IGVbYV07XG4gICAgICBpZiAodm9pZCAwICE9PSBuKSB7XG4gICAgICAgIGlmIChpc05hTihuLmV4cGlyZSkgfHwgbi5leHBpcmUgPj0gRGF0ZS5ub3coKSkgcmV0dXJuIG4udmFsdWU7XG4gICAgICAgIGRlbGV0ZSBlW2FdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG59XG5jb25zdCBleHAkMSA9IG5ldyBDYWNoZSgpO1xuZXhwJDEuQ2FjaGUgPSBDYWNoZTtcbmNvbnN0IGJhc2UgPSAnaHR0cHM6Ly90cmFuc2xhdGUuZ29vZ2xlYXBpcy5jb20vdHJhbnNsYXRlX2Evc2luZ2xlJztcbnZhciBnb29nbGUgPSB7XG4gICAgZmV0Y2g6ICh7IGtleTogZSwgZnJvbTogYSwgdG86IG4sIHRleHQ6IGkgfSkgPT4gW1xuICAgICAgYCR7YmFzZX0/Y2xpZW50PWd0eCZzbD0ke2F9JnRsPSR7bn0mZHQ9dCZxPSR7ZW5jb2RlVVJJKGkpfWAsXG4gICAgXSxcbiAgICBwYXJzZTogZSA9PlxuICAgICAgZS5qc29uKCkudGhlbihlID0+IHtcbiAgICAgICAgaWYgKCEoZSA9IGUgJiYgZVswXSAmJiBlWzBdWzBdICYmIGVbMF0ubWFwKGUgPT4gZVswXSkuam9pbignJykpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNsYXRpb24gbm90IGZvdW5kJyk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSksXG4gIH0sXG4gIHlhbmRleCA9IHtcbiAgICBuZWVka2V5OiAhMCxcbiAgICBmZXRjaDogKHsga2V5OiBlLCBmcm9tOiBhLCB0bzogbiwgdGV4dDogaSB9KSA9PiBbXG4gICAgICBgaHR0cHM6Ly90cmFuc2xhdGUueWFuZGV4Lm5ldC9hcGkvdjEuNS90ci5qc29uL3RyYW5zbGF0ZT9rZXk9JHtlfSZsYW5nPSR7YX0tJHtufSZ0ZXh0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkpfWAsXG4gICAgICB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiAnJyB9LFxuICAgIF0sXG4gICAgcGFyc2U6IGUgPT5cbiAgICAgIGUuanNvbigpLnRoZW4oZSA9PiB7XG4gICAgICAgIGlmICgyMDAgIT09IGUuY29kZSkgdGhyb3cgbmV3IEVycm9yKGUubWVzc2FnZSk7XG4gICAgICAgIHJldHVybiBlLnRleHRbMF07XG4gICAgICB9KSxcbiAgfTtcbmNvbnN0IGxpYnJlVXJsID0gJ2h0dHBzOi8vbGlicmV0cmFuc2xhdGUuY29tL3RyYW5zbGF0ZSc7XG52YXIgbGlicmUgPSB7XG4gICAgbmVlZGtleTogITEsXG4gICAgZmV0Y2g6ICh7IHVybDogZSA9IGxpYnJlVXJsLCBrZXk6IGEsIGZyb206IG4sIHRvOiBpLCB0ZXh0OiByIH0pID0+IFtcbiAgICAgIGUsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHE6IHIsIHNvdXJjZTogbiwgdGFyZ2V0OiBpLCBhcGlfa2V5OiBhIH0pLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBwYXJzZTogZSA9PlxuICAgICAgZS5qc29uKCkudGhlbihlID0+IHtcbiAgICAgICAgaWYgKCFlKSB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlc3BvbnNlIGZvdW5kJyk7XG4gICAgICAgIGlmIChlLmVycm9yKSB0aHJvdyBuZXcgRXJyb3IoZS5lcnJvcik7XG4gICAgICAgIGlmICghZS50cmFuc2xhdGVkVGV4dCkgdGhyb3cgbmV3IEVycm9yKCdObyByZXNwb25zZSBmb3VuZCcpO1xuICAgICAgICByZXR1cm4gZS50cmFuc2xhdGVkVGV4dDtcbiAgICAgIH0pLFxuICB9LFxuICBkZWVwbCA9IHtcbiAgICBuZWVka2V5OiAhMCxcbiAgICBmZXRjaDogKHsga2V5OiBlLCBmcm9tOiBhLCB0bzogbiwgdGV4dDogaSB9KSA9PiBbXG4gICAgICBgaHR0cHM6Ly9hcGkkey86ZngkLy50ZXN0KGUpID8gJy1mcmVlJyA6ICcnfS5kZWVwbC5jb20vdjIvdHJhbnNsYXRlP2F1dGhfa2V5PSR7ZX0mc291cmNlX2xhbmc9JHthfSZ0YXJnZXRfbGFuZz0ke259JnRleHQ9JHsoaSA9IGVuY29kZVVSSUNvbXBvbmVudChpKSl9YCxcbiAgICAgIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHk6ICcnIH0sXG4gICAgXSxcbiAgICBwYXJzZTogYXN5bmMgZSA9PiB7XG4gICAgICBpZiAoIWUub2spIHtcbiAgICAgICAgaWYgKDQwMyA9PT0gZS5zdGF0dXMpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoIEVycm9yLCBwbGVhc2UgcmV2aWV3IHRoZSBrZXkgZm9yIERlZXBMJyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgJHtlLnN0YXR1c31gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlLmpzb24oKS50aGVuKGUgPT4gZS50cmFuc2xhdGlvbnNbMF0udGV4dCk7XG4gICAgfSxcbiAgfSxcbiAgZW5naW5lcyA9IHsgZ29vZ2xlOiBnb29nbGUsIHlhbmRleDogeWFuZGV4LCBsaWJyZTogbGlicmUsIGRlZXBsOiBkZWVwbCB9O1xuY29uc3QgVHJhbnNsYXRlID0gZnVuY3Rpb24gKGUgPSB7fSkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVHJhbnNsYXRlKSkgcmV0dXJuIG5ldyBUcmFuc2xhdGUoZSk7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgICAgZnJvbTogJ2VuJyxcbiAgICAgICAgdG86ICdlbicsXG4gICAgICAgIGNhY2hlOiB2b2lkIDAsXG4gICAgICAgIGxhbmd1YWdlczogbGFuZ3VhZ2VzLFxuICAgICAgICBlbmdpbmVzOiBlbmdpbmVzLFxuICAgICAgICBlbmdpbmU6ICdnb29nbGUnLFxuICAgICAgICBrZXlzOiB7fSxcbiAgICAgIH0sXG4gICAgICBuID0gYXN5bmMgKGUsIGEgPSB7fSkgPT4ge1xuICAgICAgICAnc3RyaW5nJyA9PSB0eXBlb2YgYSAmJiAoYSA9IHsgdG86IGEgfSksIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAoYS50ZXh0ID0gZSksIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAoYS5mcm9tID0gbGFuZ3VhZ2VzKGEuZnJvbSB8fCBuLmZyb20pKSwgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIChhLnRvID0gbGFuZ3VhZ2VzKGEudG8gfHwgbi50bykpLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgKGEuY2FjaGUgPSBhLmNhY2hlIHx8IG4uY2FjaGUpLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgKGEuZW5naW5lcyA9IGEuZW5naW5lcyB8fCB7fSksIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAoYS5lbmdpbmUgPSBhLmVuZ2luZSB8fCBuLmVuZ2luZSksIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAoYS51cmwgPSBhLnVybCB8fCBuLnVybCksIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAoYS5pZCA9IGEuaWQgfHwgYCR7YS51cmx9OiR7YS5mcm9tfToke2EudG99OiR7YS5lbmdpbmV9OiR7YS50ZXh0fWApLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgKGEua2V5cyA9IGEua2V5cyB8fCBuLmtleXMgfHwge30pOyAvLyBAdHMtaWdub3JlXG4gICAgICAgIGZvciAobGV0IGUgaW4gbi5rZXlzKSBhLmtleXNbZV0gPSBhLmtleXNbZV0gfHwgbi5rZXlzW2VdOyAvLyBAdHMtaWdub3JlXG4gICAgICAgIGEua2V5ID0gYS5rZXkgfHwgbi5rZXkgfHwgYS5rZXlzW2EuZW5naW5lXTsgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBpID0gYS5lbmdpbmVzW2EuZW5naW5lXSB8fCBuLmVuZ2luZXNbYS5lbmdpbmVdLCAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgciA9IGV4cCQxLmdldChhLmlkKTtcbiAgICAgICAgaWYgKHIpIHJldHVybiBQcm9taXNlLnJlc29sdmUocik7IC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKGEudG8gPT09IGEuZnJvbSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhLnRleHQpOyAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChpLm5lZWRrZXkgJiYgIWEua2V5KVxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGBUaGUgZW5naW5lIFwiJHthLmVuZ2luZX1cIiBuZWVkcyBhIGtleSwgcGxlYXNlIHByb3ZpZGUgaXRgLFxuICAgICAgICAgICk7XG4gICAgICAgIGNvbnN0IHQgPSBpLmZldGNoKGEpOyAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBmZXRjaCguLi50KVxuICAgICAgICAgIC50aGVuKGkucGFyc2UpIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAudGhlbihlID0+IGV4cCQxLnNldChhLmlkLCBlLCBhLmNhY2hlKSk7XG4gICAgICB9O1xuICAgIGZvciAobGV0IGkgaW4gYSkgbltpXSA9IHZvaWQgMCA9PT0gZVtpXSA/IGFbaV0gOiBlW2ldO1xuICAgIHJldHVybiBuO1xuICB9LCAvLyBAdHMtaWdub3JlXG4gIGV4cCA9IG5ldyBUcmFuc2xhdGUoKTtcbmV4cC5UcmFuc2xhdGUgPSBUcmFuc2xhdGU7XG5leHBvcnQgdHlwZSBMYW5nVHlwZSA9ICh0eXBlb2YgbmFtZXMpW2tleW9mIHR5cGVvZiBuYW1lc107XG5leHBvcnQgY29uc3QgdHJhbnNsYXRlID0gZXhwIGFzIChcbiAgdGV4dFRvVHJhbnNsYXRlOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsgdG86IExhbmdUeXBlOyBmcm9tOiBMYW5nVHlwZSB9LFxuKSA9PiBzdHJpbmc7XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvYmFzZS90cmFuc2xhdGUudHMiXX0=