tnp-helpers 16.444.21 → 16.444.23

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 (112) hide show
  1. package/assets/shared/shared_folder_info.txt +1 -1
  2. package/browser/esm2022/lib/base/base-git.mjs +65 -2
  3. package/browser/esm2022/lib/base/base-library-build.mjs +4 -2
  4. package/browser/esm2022/lib/base/base-npm-helpers.mjs +131 -14
  5. package/browser/esm2022/lib/base/base-project.mjs +8 -1
  6. package/browser/esm2022/lib/base/base-release-process.mjs +381 -3
  7. package/browser/esm2022/lib/base/base-vscode.mjs +10 -1
  8. package/browser/esm2022/lib/base/commit-data.mjs +116 -44
  9. package/browser/esm2022/lib/base/core-project.mjs +1 -1
  10. package/browser/esm2022/lib/base/index.mjs +3 -1
  11. package/browser/esm2022/lib/models.mjs +1 -1
  12. package/browser/fesm2022/tnp-helpers.mjs +925 -84
  13. package/browser/fesm2022/tnp-helpers.mjs.map +1 -1
  14. package/browser/lib/base/base-git.d.ts +15 -4
  15. package/browser/lib/base/base-library-build.d.ts +1 -1
  16. package/browser/lib/base/base-npm-helpers.d.ts +25 -1
  17. package/browser/lib/base/base-project.d.ts +4 -0
  18. package/browser/lib/base/base-release-process.d.ts +32 -2
  19. package/browser/lib/base/commit-data.d.ts +18 -13
  20. package/browser/lib/base/core-project.d.ts +3 -0
  21. package/browser/lib/base/index.d.ts +1 -0
  22. package/browser/lib/models.d.ts +5 -0
  23. package/client/esm2022/lib/base/base-git.mjs +65 -2
  24. package/client/esm2022/lib/base/base-library-build.mjs +4 -2
  25. package/client/esm2022/lib/base/base-npm-helpers.mjs +131 -14
  26. package/client/esm2022/lib/base/base-project.mjs +8 -1
  27. package/client/esm2022/lib/base/base-release-process.mjs +381 -3
  28. package/client/esm2022/lib/base/base-vscode.mjs +10 -1
  29. package/client/esm2022/lib/base/commit-data.mjs +116 -44
  30. package/client/esm2022/lib/base/core-project.mjs +1 -1
  31. package/client/esm2022/lib/base/index.mjs +3 -1
  32. package/client/esm2022/lib/models.mjs +1 -1
  33. package/client/fesm2022/tnp-helpers.mjs +925 -84
  34. package/client/fesm2022/tnp-helpers.mjs.map +1 -1
  35. package/client/lib/base/base-git.d.ts +15 -4
  36. package/client/lib/base/base-library-build.d.ts +1 -1
  37. package/client/lib/base/base-npm-helpers.d.ts +25 -1
  38. package/client/lib/base/base-project.d.ts +4 -0
  39. package/client/lib/base/base-release-process.d.ts +32 -2
  40. package/client/lib/base/commit-data.d.ts +18 -13
  41. package/client/lib/base/core-project.d.ts +3 -0
  42. package/client/lib/base/index.d.ts +1 -0
  43. package/client/lib/models.d.ts +5 -0
  44. package/client/package.json +30 -30
  45. package/lib/base/base-command-line.backend.d.ts +3 -0
  46. package/lib/base/base-command-line.backend.js +51 -0
  47. package/lib/base/base-command-line.backend.js.map +1 -1
  48. package/lib/base/base-git.d.ts +12 -1
  49. package/lib/base/base-git.js +118 -41
  50. package/lib/base/base-git.js.map +1 -1
  51. package/lib/base/base-library-build.d.ts +1 -1
  52. package/lib/base/base-library-build.js +33 -31
  53. package/lib/base/base-library-build.js.map +1 -1
  54. package/lib/base/base-npm-helpers.d.ts +27 -2
  55. package/lib/base/base-npm-helpers.js +157 -16
  56. package/lib/base/base-npm-helpers.js.map +1 -1
  57. package/lib/base/base-project.d.ts +4 -0
  58. package/lib/base/base-project.js +13 -0
  59. package/lib/base/base-project.js.map +1 -1
  60. package/lib/base/base-release-process.d.ts +32 -2
  61. package/lib/base/base-release-process.js +621 -16
  62. package/lib/base/base-release-process.js.map +1 -1
  63. package/lib/base/base-vscode.js +9 -0
  64. package/lib/base/base-vscode.js.map +1 -1
  65. package/lib/base/commit-data.d.ts +17 -12
  66. package/lib/base/commit-data.js +138 -78
  67. package/lib/base/commit-data.js.map +1 -1
  68. package/lib/base/core-project.d.ts +3 -0
  69. package/lib/base/core-project.js.map +1 -1
  70. package/lib/base/index.d.ts +2 -0
  71. package/lib/base/index.js +2 -0
  72. package/lib/base/index.js.map +1 -1
  73. package/lib/base/translate.d.ts +227 -1
  74. package/lib/base/translate.js +566 -54
  75. package/lib/base/translate.js.map +1 -1
  76. package/lib/helpers/for-backend/helpers-console-gui.d.ts +1 -0
  77. package/lib/helpers/for-backend/helpers-console-gui.js +3 -2
  78. package/lib/helpers/for-backend/helpers-console-gui.js.map +1 -1
  79. package/lib/helpers/for-backend/helpers-git.backend.d.ts +16 -1
  80. package/lib/helpers/for-backend/helpers-git.backend.js +123 -16
  81. package/lib/helpers/for-backend/helpers-git.backend.js.map +1 -1
  82. package/lib/helpers/for-backend/helpers-process.backend.d.ts +10 -8
  83. package/lib/helpers/for-backend/helpers-process.backend.js +56 -56
  84. package/lib/helpers/for-backend/helpers-process.backend.js.map +1 -1
  85. package/lib/helpers/for-browser/angular.helper.js +3 -3
  86. package/lib/models.d.ts +5 -0
  87. package/lib/old/base-component.js +3 -3
  88. package/lib/old/base-formly-component.js +3 -3
  89. package/lib/old/dual-component-ctrl.js +3 -3
  90. package/package.json +4 -4
  91. package/tmp-environment.json +34 -34
  92. package/websql/esm2022/lib/base/base-git.mjs +65 -2
  93. package/websql/esm2022/lib/base/base-library-build.mjs +4 -2
  94. package/websql/esm2022/lib/base/base-npm-helpers.mjs +131 -14
  95. package/websql/esm2022/lib/base/base-project.mjs +8 -1
  96. package/websql/esm2022/lib/base/base-release-process.mjs +381 -3
  97. package/websql/esm2022/lib/base/base-vscode.mjs +10 -1
  98. package/websql/esm2022/lib/base/commit-data.mjs +116 -44
  99. package/websql/esm2022/lib/base/core-project.mjs +1 -1
  100. package/websql/esm2022/lib/base/index.mjs +3 -1
  101. package/websql/esm2022/lib/models.mjs +1 -1
  102. package/websql/fesm2022/tnp-helpers.mjs +925 -84
  103. package/websql/fesm2022/tnp-helpers.mjs.map +1 -1
  104. package/websql/lib/base/base-git.d.ts +15 -4
  105. package/websql/lib/base/base-library-build.d.ts +1 -1
  106. package/websql/lib/base/base-npm-helpers.d.ts +26 -4
  107. package/websql/lib/base/base-project.d.ts +4 -0
  108. package/websql/lib/base/base-release-process.d.ts +32 -2
  109. package/websql/lib/base/commit-data.d.ts +18 -13
  110. package/websql/lib/base/core-project.d.ts +3 -0
  111. package/websql/lib/base/index.d.ts +1 -0
  112. package/websql/lib/models.d.ts +5 -0
@@ -1,5 +1,11 @@
1
1
  /* */
2
2
  /* */
3
+ /* */
4
+ /* */
5
+ /* */
6
+ /* */
7
+ /* */
8
+ /* */
3
9
  import { _ } from 'tnp-core/browser';
4
10
  import { Helpers } from '../index';
5
11
  import { BaseFeatureForProject } from './base-feature-for-project';
@@ -7,7 +13,15 @@ import { config } from 'tnp-config/browser';
7
13
  export class BaseNpmHelpers extends BaseFeatureForProject {
8
14
  constructor(project) {
9
15
  super(project);
10
- this.packageJSON = project.readJson(config.file.package_json);
16
+ this.project = project;
17
+ this.reloadPackageJsonInMemory();
18
+ }
19
+ /**
20
+ * if something else change package.json in this project
21
+ * and you know that you need to reload it..
22
+ */
23
+ reloadPackageJsonInMemory() {
24
+ this.packageJSON = this.project.readJson(config.file.package_json);
11
25
  }
12
26
  get name() {
13
27
  return this.packageJSON?.name || '';
@@ -18,6 +32,23 @@ export class BaseNpmHelpers extends BaseFeatureForProject {
18
32
  get version() {
19
33
  return this.packageJSON?.version;
20
34
  }
35
+ set version(newVersion) {
36
+ this.packageJSON.version = newVersion;
37
+ this.project.writeJson(config.file.package_json, this.packageJSON);
38
+ }
39
+ updateDependency(packageName, version) {
40
+ /* */
41
+ /* */
42
+ /* */
43
+ /* */
44
+ /* */
45
+ /* */
46
+ /* */
47
+ /* */
48
+ /* */
49
+ /* */
50
+ return (void 0);
51
+ }
21
52
  get versionWithPatchPlusOne() {
22
53
  const ver = this.version.split('.');
23
54
  if (ver.length > 0) {
@@ -150,18 +181,6 @@ export class BaseNpmHelpers extends BaseFeatureForProject {
150
181
  ...(packageJson.resolutions || {}),
151
182
  });
152
183
  }
153
- checkIfLogginInToNpm() {
154
- /* */
155
- /* */
156
- /* */
157
- /* */
158
- /* */
159
- /* */
160
- /* */
161
- /* */
162
- /* */
163
- return (void 0);
164
- }
165
184
  linkNodeModulesTo(proj) {
166
185
  /* */
167
186
  /* */
@@ -357,7 +376,105 @@ export class BaseNpmHelpers extends BaseFeatureForProject {
357
376
  }
358
377
  return command;
359
378
  }
379
+ /**
380
+ *
381
+ * @param registry without specified registr is checking npm registry
382
+ * @returns
383
+ */
384
+ async isLoggedInToRegistry(registry) {
385
+ /* */
386
+ /* */
387
+ /* */
388
+ /* */
389
+ /* */
390
+ /* */
391
+ /* */
392
+ /* */
393
+ /* */
394
+ /* */
395
+ /* */
396
+ /* */
397
+ /* */
398
+ /* */
399
+ /* */
400
+ /* */
401
+ /* */
402
+ /* */
403
+ /* */
404
+ /* */
405
+ /* */
406
+ /* */
407
+ return (void 0);
408
+ }
409
+ /**
410
+ * Prompt the user to log in to a specific npm registry.
411
+ * @param {string} [registry] - Optional npm registry URL.
412
+ * @returns {Promise<void>} - A promise that resolves when the login process completes.
413
+ */
414
+ async loginToRegistry(registry) {
415
+ /* */
416
+ /* */
417
+ /* */
418
+ /* */
419
+ /* */
420
+ /* */
421
+ /* */
422
+ /* */
423
+ /* */
424
+ /* */
425
+ /* */
426
+ /* */
427
+ /* */
428
+ /* */
429
+ /* */
430
+ /* */
431
+ /* */
432
+ /* */
433
+ return (void 0);
434
+ }
435
+ async makeSureLoggedInToNpmRegistry(registry) {
436
+ /* */
437
+ /* */
438
+ /* */
439
+ /* */
440
+ /* */
441
+ /* */
442
+ /* */
443
+ /* */
444
+ /* */
445
+ /* */
446
+ /* */
447
+ /* */
448
+ /* */
449
+ /* */
450
+ /* */
451
+ /* */
452
+ /* */
453
+ /* */
454
+ /* */
455
+ /* */
456
+ /* */
457
+ /* */
458
+ /* */
459
+ return (void 0);
460
+ }
461
+ /**
462
+ * @deprecated
463
+ * use makeSureLoggedInToNpmRegistry()
464
+ */
465
+ checkIfLogginInToNpm() {
466
+ /* */
467
+ /* */
468
+ /* */
469
+ /* */
470
+ /* */
471
+ /* */
472
+ /* */
473
+ /* */
474
+ /* */
475
+ return (void 0);
476
+ }
360
477
  }
361
478
  ;
362
479
  ({}); // @--end-of-file-for-module=tnp-helpers lib/base/base-npm-helpers.ts
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1ucG0taGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L3RucC1oZWxwZXJzL3Byb2plY3RzL3RucC1oZWxwZXJzL3NyYy9saWIvYmFzZS9iYXNlLW5wbS1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSzVDLE1BQU0sT0FBTyxjQUVYLFNBQVEscUJBQXFCO0lBRTdCLFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUdELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFJRDs7T0FFRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUlELElBQUksdUJBQXVCO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMs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O1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBSUQ7O09BRUc7SUFDSCxJQUFJLGdCQUFnQjtRQUN0QixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFJRCxLQUFLLENBQUMsb0JBQW9CO1FBQzVCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0ws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QUNMLEdBQ0UsMkJBQTJCO29CQUN6QixDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHO3dCQUN0QyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLE9BQU87b0JBQ2xELENBQUMsQ0FBQyxFQUNOLEVBQUU7b0JBQ0YsbURBQW1EO29CQUNuRCxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7b0JBQzdELElBQUksNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEdBQUc7b0JBQy9ELElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHO29CQUNoRCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUc7b0JBQ3BELElBQUksb0JBQW9CLEdBQUcsQ0FBQztTQUUvQjtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FFRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscUVBQXFFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuLyogKi9cbi8qICovXG4gIFxuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IEJhc2VGZWF0dXJlRm9yUHJvamVjdCB9IGZyb20gJy4vYmFzZS1mZWF0dXJlLWZvci1wcm9qZWN0JztcbmltcG9ydCB0eXBlIHsgQmFzZVByb2plY3QgfSBmcm9tICcuL2Jhc2UtcHJvamVjdCc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICd0bnAtY29uZmlnL2Jyb3dzZXInO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tICd0eXBlLWZlc3QnO1xuaW1wb3J0IHsgQ29yZU1vZGVscyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuXG5cbmV4cG9ydCBjbGFzcyBCYXNlTnBtSGVscGVyczxcbiAgUFJPSkNFVCBleHRlbmRzIEJhc2VQcm9qZWN0ID0gYW55LFxuPiBleHRlbmRzIEJhc2VGZWF0dXJlRm9yUHJvamVjdCB7XG4gIHByaXZhdGUgcGFja2FnZUpTT046IFBhY2thZ2VKc29uO1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQUk9KQ0VUKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG4gICAgdGhpcy5wYWNrYWdlSlNPTiA9IHByb2plY3QucmVhZEpzb24oY29uZmlnLmZpbGUucGFja2FnZV9qc29uKTtcbiAgfVxuXG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlSlNPTj8ubmFtZSB8fCAnJztcbiAgfVxuXG5cblxuICAvKipcbiAgICogdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvbiAtPiBwcm9wZXJ0eSB2ZXJzaW9uXG4gICAqL1xuICBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2VKU09OPy52ZXJzaW9uO1xuICB9XG5cblxuXG4gIGdldCB2ZXJzaW9uV2l0aFBhdGNoUGx1c09uZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlciA9IHRoaXMudmVyc2lvbi5zcGxpdCgnLicpO1xuICAgIGlmICh2ZXIubGVuZ3RoID4gMCkge1xuICAgICAgdmVyW3Zlci5sZW5ndGggLSAxXSA9IChwYXJzZUludChfLmxhc3QodmVyKSkgKyAxKS50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gdmVyLmpvaW4oJy4nKTtcbiAgfVxuXG5cblxuICBnZXQgdmVyc2lvbldpdGhNaW5vclBsdXNPbmVBbmRQYXRjaFplcm8oKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXIgPSB0aGlzLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICBpZiAodmVyLmxlbmd0aCA+IDEpIHtcbiAgICAgIHZlclsxXSA9IChwYXJzZUludCh2ZXJbMV0pICsgMSkudG9TdHJpbmcoKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMjsgaW5kZXggPCB2ZXIubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZlcltpbmRleF0gPSAnMCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIEhlbHBlcnMud2FybihcbiAgICAgICAgYFtucG0tcHJvamVjdF0gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBidW1waW5nIG1pbm9yIHZlcnNpb25gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlci5qb2luKCcuJyk7XG4gIH1cblxuXG5cbiAgZ2V0IHZlcnNpb25XaXRoTWFqb3JQbHVzT25lQW5kTWlub3JaZXJvQW5kUGF0Y2haZXJvKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyID0gdGhpcy52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgaWYgKHZlci5sZW5ndGggPiAwKSB7XG4gICAgICB2ZXJbMF0gPSAocGFyc2VJbnQoXy5maXJzdCh2ZXIpKSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgdmVyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2ZXJbaW5kZXhdID0gJzAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBIZWxwZXJzLndhcm4oXG4gICAgICAgIGBbbnBtLXByb2plY3RdIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYnVtcGluZyBtYWpvciB2ZXJzaW9uYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB2ZXIuam9pbignLicpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBNYWpvciBWZXJzaW9uIGZyb20gcGFja2FnZS5qc29uXG4gICAqL1xuICAvLyBAdHMtaWdub3JlXG4gIGdldCBtYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogTWlub3IgVmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvblxuICAgKi9cbiAgLy8gQHRzLWlnbm9yZVxuICBnZXQgbWlub3JWZXJzaW9uKCk6IG51bWJlciB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgYXN5bmMgYnVtcFBhdGNoVmVyc2lvbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXQgdmVyc2lvblBhdGhBc051bWJlcigpOiBudW1iZXIge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIG5wbSBkZXBlbmRlbmNpZXMgZnJvbSBwYWNrYWdlLmpzb25cbiAgICovXG4gIGdldCBkZXBlbmRlbmNpZXMoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhY2thZ2VKU09OID8gdGhpcy5wYWNrYWdlSlNPTi5kZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHBlZXJEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBnZXQgcGVlckRlcGVuZGVuY2llcygpIHtcbiAgICByZXR1cm4gKHRoaXMucGFja2FnZUpTT04gPyB0aGlzLnBhY2thZ2VKU09OLnBlZXJEZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGRldkRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXNcbiAgICovXG4gIGdldCBkZXZEZXBlbmRlbmNpZXMoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhY2thZ2VKU09OID8gdGhpcy5wYWNrYWdlSlNPTi5kZXZEZXBlbmRlbmNpZXMgOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHJlc29sdXRpb25zIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgZ2V0IHJlc29sdXRpb25zKCkge1xuICAgIHJldHVybiAodGhpcy5wYWNrYWdlSlNPTiA/IHRoaXMucGFja2FnZUpTT05bJ3Jlc29sdXRpb25zJ10gOiB7fSkgfHwge307XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIG9iamVjdCB3aXRsIGFsbCBkZXBzIGZyb20gY3VycmVudCBwcm9qZWN0IHBhY2thZ2UganNvblxuICAgKi9cbiAgZ2V0IGFsbERlcGVuZGVuY2llcygpOiB7IFtwYWNrYWdlTmFtZTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLmFsbERlcHNGcm9tUGFja2FnZUpzb24odGhpcy5wYWNrYWdlSlNPTik7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgb2JqZWN0IHdpdGwgYWxsIGRlcHMgZnJvbSBwYWNrYWdlIGpzb25cbiAgICovXG4gIGFsbERlcHNGcm9tUGFja2FnZUpzb24ocGFja2FnZUpzb246IFBhY2thZ2VKc29uKSB7XG4gICAgcmV0dXJuIF8ubWVyZ2Uoe1xuICAgICAgLi4uKHBhY2thZ2VKc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSksXG4gICAgICAuLi4ocGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcyB8fCB7fSksXG4gICAgICAuLi4ocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KSxcbiAgICAgIC4uLihwYWNrYWdlSnNvbi5yZXNvbHV0aW9ucyB8fCB7fSksXG4gICAgfSkgYXMgYW55O1xuICB9XG5cblxuXG4gIGNoZWNrSWZMb2dnaW5JblRvTnBtKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBsaW5rTm9kZU1vZHVsZXNUbyhwcm9qOiBQYXJ0aWFsPEJhc2VQcm9qZWN0Pikge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByZWZlcllhcm5PdmVyTnBtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG5cblxuICBhc3luYyBtYWtlU3VyZU5vZGVNb2R1bGVzSW5zdGFsbGVkKG9wdGlvbnM/OiB7XG4gICAgdXNlWWFybj86IGJvb2xlYW47XG4gICAgZm9yY2U/OiBib29sZWFuO1xuICB9KSB7XG4gICAgaWYgKHRoaXMuZW1wdHlOb2RlTW9kdWxlcykge1xuICAgICAgdGhpcy5yZWluc3RhbE5vZGVNb2R1bGVzKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG5cblxuICBkZWxldGVOb2RlTW9kdWxlcygpIHtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlKGNvbmZpZy5mb2xkZXIubm9kZV9tb2R1bGVzKTtcbiAgfVxuXG5cblxuICBhc3luYyByZWluc3RhbGxOb2RlTW9kdWxlcyhmb3JjZXJSZW1vdmVOb2RlTW9kdWxlcyA9IGZhbHNlKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVpbnN0YWxOb2RlTW9kdWxlcyhvcHRpb25zPzogeyB1c2VZYXJuPzogYm9vbGVhbjsgZm9yY2U/OiBib29sZWFuIH0pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbm9kZV9tb2R1bGVzIGZvbGRlciBpcyBlbXB0eVxuICAgKi9cbiAgZ2V0IGVtcHR5Tm9kZU1vZHVsZXMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgcmVzZXRQYWNrYWdlTG9ja0pzb24oKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgc3RhcnROcG1UYXNrKHRhc2tOYW1lOiBzdHJpbmcsIGFkZGl0aW9uYWxBcmd1bWVudHM/OiBzdHJpbmcgfCBvYmplY3QpIHtcbiAgICBpZiAoXy5pc09iamVjdChhZGRpdGlvbmFsQXJndW1lbnRzKSkge1xuICAgICAgYWRkaXRpb25hbEFyZ3VtZW50cyA9IE9iamVjdC5rZXlzKGFkZGl0aW9uYWxBcmd1bWVudHMpXG4gICAgICAgIC5tYXAoayA9PiBgLS0ke2t9ICR7YWRkaXRpb25hbEFyZ3VtZW50c1trXX1gKVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cbiAgICBjb25zdCBjb21tYW5kID0gYG5wbSBydW4gJHt0YXNrTmFtZX0gJHtcbiAgICAgIGFkZGl0aW9uYWxBcmd1bWVudHMgPyAnIC0tICcgKyBhZGRpdGlvbmFsQXJndW1lbnRzIDogJydcbiAgICB9YDtcbiAgICBIZWxwZXJzLmluZm8oYFN0YXJ0aW5nIG5wbSB0YXNrOiBcIiR7Y29tbWFuZH1cImApO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5ydW4oY29tbWFuZCwge1xuICAgICAgb3V0cHV0OiB0cnVlLFxuICAgICAgYmlnZ2VyQnVmZmVyOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cblxuXG4gIGFzeW5jIHByZXBhcmVDb21tYW5kKFxuICAgIG9wdGlvc24/OiBDb3JlTW9kZWxzLk5wbUluc3RhbGxPcHRpb25zLFxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCB7XG4gICAgICBwa2csXG4gICAgICByZW1vdmUsXG4gICAgICBzaWxlbnQsXG4gICAgICB1c2VZYXJuLFxuICAgICAgZm9yY2UsXG4gICAgICByZW1vdmVZYXJuT3JQYWNrYWdlSnNvbkxvY2ssXG4gICAgICBnZW5lcmF0ZVlhcm5PclBhY2thZ2VKc29uTG9jayxcbiAgICAgIGlnbm9yZU9wdGlvbmFsLFxuICAgIH0gPSBvcHRpb3NuIHx8IHt9O1xuXG4gICAgZm9yY2UgPSB0cnVlOyAvLyBUT0RPIFFVSUNLX0ZJWFxuXG4gICAgbGV0IGNvbW1hbmQgPSAnJztcbiAgICBjb25zdCBjb21tb25PcHRpb25zID0gYC0taWdub3JlLWVuZ2luZXNgO1xuXG4gICAgaWYgKHVzZVlhcm4pIHtcblxuICAgICAgY29uc3QgYXJnc0ZvckZhc3Rlckluc3RhbGwgPSBgJHtmb3JjZSA/ICctLWZvcmNlJyA6ICcnfSAke2NvbW1vbk9wdGlvbnN9IGA7XG4gICAgICBjb21tYW5kID1cbiAgICAgICAgYCR7XG4gICAgICAgICAgcmVtb3ZlWWFybk9yUGFja2FnZUpzb25Mb2NrXG4gICAgICAgICAgICA/IGBybSAke2NvbmZpZy5maWxlLnlhcm5fbG9ja30gYCArXG4gICAgICAgICAgICAgIGAmJiB0b3VjaCAke2NvbmZpZy5maWxlLnlhcm5fbG9ja30gJiYgYFxuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9YCArXG4gICAgICAgIGB5YXJuICR7cGtnID8gKHJlbW92ZSA/ICdyZW1vdmUnIDogJ2FkZCcpIDogJ2luc3RhbGwnfSAke3BrZyA/IHBrZy5uYW1lIDogJyd9IGAgK1xuICAgICAgICBgICR7Z2VuZXJhdGVZYXJuT3JQYWNrYWdlSnNvbkxvY2sgPyAnJyA6ICctLW5vLWxvY2tmaWxlJ30gYCArXG4gICAgICAgIGAgJHthcmdzRm9yRmFzdGVySW5zdGFsbH0gYCArXG4gICAgICAgIGAgJHtwa2cgJiYgcGtnLmluc3RhbGxUeXBlICYmIHBrZy5pbnN0YWxsVHlwZSA9PT0gJy0tc2F2ZS1kZXYnID8gJy1kZXYnIDogJyd9IGA7XG5cbiAgICB9IGVsc2Uge1xuXG4gICAgICBjb25zdCBhcmdzRm9yRmFzdGVySW5zdGFsbCA9XG4gICAgICAgIGAke2ZvcmNlID8gJy0tZm9yY2UnIDogJyd9ICR7Y29tbW9uT3B0aW9uc30gLS1uby1hdWRpdCBgICtcbiAgICAgICAgYCR7c2lsZW50ID8gJy0tc2lsZW50IC0tbm8tcHJvZ3Jlc3MnIDogJyd9ICAgYDtcblxuICAgICAgY29tbWFuZCA9XG4gICAgICAgIGAke1xuICAgICAgICAgIHJlbW92ZVlhcm5PclBhY2thZ2VKc29uTG9ja1xuICAgICAgICAgICAgPyBgcm0gJHtjb25maWcuZmlsZS5wYWNrYWdlX2xvY2tfanNvbn0gYCArXG4gICAgICAgICAgICAgIGAmJiB0b3VjaCAke2NvbmZpZy5maWxlLnBhY2thZ2VfbG9ja19qc29ufSAgJiYgYFxuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9YCArXG4gICAgICAgIGBucHggLS1ub2RlLW9wdGlvbnM9LS1tYXgtb2xkLXNwYWNlLXNpemU9ODAwMCBucG0gYCArXG4gICAgICAgIGAke3JlbW92ZSA/ICd1bmluc3RhbGwnIDogJ2luc3RhbGwnfSAke3BrZyA/IHBrZy5uYW1lIDogJyd9IGAgK1xuICAgICAgICBgICR7Z2VuZXJhdGVZYXJuT3JQYWNrYWdlSnNvbkxvY2sgPyAnJyA6ICctLW5vLXBhY2thZ2UtbG9jayd9IGAgK1xuICAgICAgICBgICR7aWdub3JlT3B0aW9uYWwgPyAnLS1pZ25vcmUtb3B0aW9uYWwnIDogJyd9IGAgK1xuICAgICAgICBgICR7cGtnICYmIHBrZy5pbnN0YWxsVHlwZSA/IHBrZy5pbnN0YWxsVHlwZSA6ICcnfSBgICtcbiAgICAgICAgYCAke2FyZ3NGb3JGYXN0ZXJJbnN0YWxsfSBgO1xuXG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kO1xuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1oZWxwZXJzIGxpYi9iYXNlL2Jhc2UtbnBtLWhlbHBlcnMudHMiXX0=
480
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1ucG0taGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RtcC1saWJzLWZvci1kaXN0L3RucC1oZWxwZXJzL3Byb2plY3RzL3RucC1oZWxwZXJzL3NyYy9saWIvYmFzZS9iYXNlLW5wbS1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBRUwsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSzVDLE1BQU0sT0FBTyxjQUVYLFNBQVEscUJBQXFCO0lBRTdCLFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUdEOzs7T0FHRztJQUNILHlCQUF5QjtRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUlELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFJRDs7T0FFRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksT0FBTyxD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LENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CO1FBQ3RCLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7Q0FFRjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscUVBQXFFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuaW1wb3J0IHsgXyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCB7IEJhc2VGZWF0dXJlRm9yUHJvamVjdCB9IGZyb20gJy4vYmFzZS1mZWF0dXJlLWZvci1wcm9qZWN0JztcbmltcG9ydCB0eXBlIHsgQmFzZVByb2plY3QgfSBmcm9tICcuL2Jhc2UtcHJvamVjdCc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICd0bnAtY29uZmlnL2Jyb3dzZXInO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tICd0eXBlLWZlc3QnO1xuaW1wb3J0IHsgQ29yZU1vZGVscyB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuXG5cbmV4cG9ydCBjbGFzcyBCYXNlTnBtSGVscGVyczxcbiAgUFJPSkNFVCBleHRlbmRzIEJhc2VQcm9qZWN0ID0gYW55LFxuPiBleHRlbmRzIEJhc2VGZWF0dXJlRm9yUHJvamVjdCB7XG4gIHByaXZhdGUgcGFja2FnZUpTT046IFBhY2thZ2VKc29uO1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQUk9KQ0VUKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG4gICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICB0aGlzLnJlbG9hZFBhY2thZ2VKc29uSW5NZW1vcnkoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIGlmIHNvbWV0aGluZyBlbHNlIGNoYW5nZSBwYWNrYWdlLmpzb24gaW4gdGhpcyBwcm9qZWN0XG4gICAqIGFuZCB5b3Uga25vdyB0aGF0IHlvdSBuZWVkIHRvIHJlbG9hZCBpdC4uXG4gICAqL1xuICByZWxvYWRQYWNrYWdlSnNvbkluTWVtb3J5KCk6IHZvaWQge1xuICAgIHRoaXMucGFja2FnZUpTT04gPSB0aGlzLnByb2plY3QucmVhZEpzb24oY29uZmlnLmZpbGUucGFja2FnZV9qc29uKTtcbiAgfVxuXG5cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2VKU09OPy5uYW1lIHx8ICcnO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiB2ZXJzaW9uIGZyb20gcGFja2FnZS5qc29uIC0+IHByb3BlcnR5IHZlcnNpb25cbiAgICovXG4gIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZUpTT04/LnZlcnNpb247XG4gIH1cblxuICBzZXQgdmVyc2lvbihuZXdWZXJzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhY2thZ2VKU09OLnZlcnNpb24gPSBuZXdWZXJzaW9uO1xuICAgIHRoaXMucHJvamVjdC53cml0ZUpzb24oY29uZmlnLmZpbGUucGFja2FnZV9qc29uLCB0aGlzLnBhY2thZ2VKU09OKTtcbiAgfVxuXG5cblxuICB1cGRhdGVEZXBlbmRlbmN5KHBhY2thZ2VOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHZvaWQge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZ2V0IHZlcnNpb25XaXRoUGF0Y2hQbHVzT25lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyID0gdGhpcy52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgaWYgKHZlci5sZW5ndGggPiAwKSB7XG4gICAgICB2ZXJbdmVyLmxlbmd0aCAtIDFdID0gKHBhcnNlSW50KF8ubGFzdCh2ZXIpKSArIDEpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiB2ZXIuam9pbignLicpO1xuICB9XG5cblxuXG4gIGdldCB2ZXJzaW9uV2l0aE1pbm9yUGx1c09uZUFuZFBhdGNoWmVybygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlciA9IHRoaXMudmVyc2lvbi5zcGxpdCgnLicpO1xuICAgIGlmICh2ZXIubGVuZ3RoID4gMSkge1xuICAgICAgdmVyWzFdID0gKHBhcnNlSW50KHZlclsxXSkgKyAxKS50b1N0cmluZygpO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAyOyBpbmRleCA8IHZlci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmVyW2luZGV4XSA9ICcwJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgSGVscGVycy53YXJuKFxuICAgICAgICBgW25wbS1wcm9qZWN0XSBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIGJ1bXBpbmcgbWlub3IgdmVyc2lvbmAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdmVyLmpvaW4oJy4nKTtcbiAgfVxuXG5cblxuICBnZXQgdmVyc2lvbldpdGhNYWpvclBsdXNPbmVBbmRNaW5vclplcm9BbmRQYXRjaFplcm8oKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXIgPSB0aGlzLnZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICBpZiAodmVyLmxlbmd0aCA+IDApIHtcbiAgICAgIHZlclswXSA9IChwYXJzZUludChfLmZpcnN0KHZlcikpICsgMSkudG9TdHJpbmcoKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCB2ZXIubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZlcltpbmRleF0gPSAnMCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIEhlbHBlcnMud2FybihcbiAgICAgICAgYFtucG0tcHJvamVjdF0gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCBidW1waW5nIG1ham9yIHZlcnNpb25gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlci5qb2luKCcuJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIE1ham9yIFZlcnNpb24gZnJvbSBwYWNrYWdlLmpzb25cbiAgICovXG4gIC8vIEB0cy1pZ25vcmVcbiAgZ2V0IG1ham9yVmVyc2lvbigpOiBudW1iZXIge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBNaW5vciBWZXJzaW9uIGZyb20gcGFja2FnZS5qc29uXG4gICAqL1xuICAvLyBAdHMtaWdub3JlXG4gIGdldCBtaW5vclZlcnNpb24oKTogbnVtYmVyIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBhc3luYyBidW1wUGF0Y2hWZXJzaW9uKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldCB2ZXJzaW9uUGF0aEFzTnVtYmVyKCk6IG51bWJlciB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogbnBtIGRlcGVuZGVuY2llcyBmcm9tIHBhY2thZ2UuanNvblxuICAgKi9cbiAgZ2V0IGRlcGVuZGVuY2llcygpIHtcbiAgICByZXR1cm4gKHRoaXMucGFja2FnZUpTT04gPyB0aGlzLnBhY2thZ2VKU09OLmRlcGVuZGVuY2llcyA6IHt9KSB8fCB7fTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogcGVlckRlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXNcbiAgICovXG4gIGdldCBwZWVyRGVwZW5kZW5jaWVzKCkge1xuICAgIHJldHVybiAodGhpcy5wYWNrYWdlSlNPTiA/IHRoaXMucGFja2FnZUpTT04ucGVlckRlcGVuZGVuY2llcyA6IHt9KSB8fCB7fTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZGV2RGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgZ2V0IGRldkRlcGVuZGVuY2llcygpIHtcbiAgICByZXR1cm4gKHRoaXMucGFja2FnZUpTT04gPyB0aGlzLnBhY2thZ2VKU09OLmRldkRlcGVuZGVuY2llcyA6IHt9KSB8fCB7fTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogcmVzb2x1dGlvbnMgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBnZXQgcmVzb2x1dGlvbnMoKSB7XG4gICAgcmV0dXJuICh0aGlzLnBhY2thZ2VKU09OID8gdGhpcy5wYWNrYWdlSlNPTlsncmVzb2x1dGlvbnMnXSA6IHt9KSB8fCB7fTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQHJldHVybnMgb2JqZWN0IHdpdGwgYWxsIGRlcHMgZnJvbSBjdXJyZW50IHByb2plY3QgcGFja2FnZSBqc29uXG4gICAqL1xuICBnZXQgYWxsRGVwZW5kZW5jaWVzKCk6IHsgW3BhY2thZ2VOYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRGVwc0Zyb21QYWNrYWdlSnNvbih0aGlzLnBhY2thZ2VKU09OKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBvYmplY3Qgd2l0bCBhbGwgZGVwcyBmcm9tIHBhY2thZ2UganNvblxuICAgKi9cbiAgYWxsRGVwc0Zyb21QYWNrYWdlSnNvbihwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pIHtcbiAgICByZXR1cm4gXy5tZXJnZSh7XG4gICAgICAuLi4ocGFja2FnZUpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KSxcbiAgICAgIC4uLihwYWNrYWdlSnNvbi5wZWVyRGVwZW5kZW5jaWVzIHx8IHt9KSxcbiAgICAgIC4uLihwYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMgfHwge30pLFxuICAgICAgLi4uKHBhY2thZ2VKc29uLnJlc29sdXRpb25zIHx8IHt9KSxcbiAgICB9KSBhcyBhbnk7XG4gIH1cblxuXG5cbiAgbGlua05vZGVNb2R1bGVzVG8ocHJvajogUGFydGlhbDxCYXNlUHJvamVjdD4pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBwcmVmZXJZYXJuT3Zlck5wbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG5cbiAgYXN5bmMgbWFrZVN1cmVOb2RlTW9kdWxlc0luc3RhbGxlZChvcHRpb25zPzoge1xuICAgIHVzZVlhcm4/OiBib29sZWFuO1xuICAgIGZvcmNlPzogYm9vbGVhbjtcbiAgfSkge1xuICAgIGlmICh0aGlzLmVtcHR5Tm9kZU1vZHVsZXMpIHtcbiAgICAgIHRoaXMucmVpbnN0YWxOb2RlTW9kdWxlcyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgZGVsZXRlTm9kZU1vZHVsZXMoKSB7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZShjb25maWcuZm9sZGVyLm5vZGVfbW9kdWxlcyk7XG4gIH1cblxuXG5cbiAgYXN5bmMgcmVpbnN0YWxsTm9kZU1vZHVsZXMoZm9yY2VyUmVtb3ZlTm9kZU1vZHVsZXMgPSBmYWxzZSkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHJlaW5zdGFsTm9kZU1vZHVsZXMob3B0aW9ucz86IHsgdXNlWWFybj86IGJvb2xlYW47IGZvcmNlPzogYm9vbGVhbiB9KSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIG5vZGVfbW9kdWxlcyBmb2xkZXIgaXMgZW1wdHlcbiAgICovXG4gIGdldCBlbXB0eU5vZGVNb2R1bGVzKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlc2V0UGFja2FnZUxvY2tKc29uKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHN0YXJ0TnBtVGFzayh0YXNrTmFtZTogc3RyaW5nLCBhZGRpdGlvbmFsQXJndW1lbnRzPzogc3RyaW5nIHwgb2JqZWN0KSB7XG4gICAgaWYgKF8uaXNPYmplY3QoYWRkaXRpb25hbEFyZ3VtZW50cykpIHtcbiAgICAgIGFkZGl0aW9uYWxBcmd1bWVudHMgPSBPYmplY3Qua2V5cyhhZGRpdGlvbmFsQXJndW1lbnRzKVxuICAgICAgICAubWFwKGsgPT4gYC0tJHtrfSAke2FkZGl0aW9uYWxBcmd1bWVudHNba119YClcbiAgICAgICAgLmpvaW4oJyAnKTtcbiAgICB9XG4gICAgY29uc3QgY29tbWFuZCA9IGBucG0gcnVuICR7dGFza05hbWV9ICR7XG4gICAgICBhZGRpdGlvbmFsQXJndW1lbnRzID8gJyAtLSAnICsgYWRkaXRpb25hbEFyZ3VtZW50cyA6ICcnXG4gICAgfWA7XG4gICAgSGVscGVycy5pbmZvKGBTdGFydGluZyBucG0gdGFzazogXCIke2NvbW1hbmR9XCJgKTtcblxuICAgIHJldHVybiB0aGlzLnByb2plY3QucnVuKGNvbW1hbmQsIHtcbiAgICAgIG91dHB1dDogdHJ1ZSxcbiAgICAgIGJpZ2dlckJ1ZmZlcjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG5cblxuICBhc3luYyBwcmVwYXJlQ29tbWFuZChcbiAgICBvcHRpb3NuPzogQ29yZU1vZGVscy5OcG1JbnN0YWxsT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQge1xuICAgICAgcGtnLFxuICAgICAgcmVtb3ZlLFxuICAgICAgc2lsZW50LFxuICAgICAgdXNlWWFybixcbiAgICAgIGZvcmNlLFxuICAgICAgcmVtb3ZlWWFybk9yUGFja2FnZUpzb25Mb2NrLFxuICAgICAgZ2VuZXJhdGVZYXJuT3JQYWNrYWdlSnNvbkxvY2ssXG4gICAgICBpZ25vcmVPcHRpb25hbCxcbiAgICB9ID0gb3B0aW9zbiB8fCB7fTtcblxuICAgIGZvcmNlID0gdHJ1ZTsgLy8gVE9ETyBRVUlDS19GSVhcblxuICAgIGxldCBjb21tYW5kID0gJyc7XG4gICAgY29uc3QgY29tbW9uT3B0aW9ucyA9IGAtLWlnbm9yZS1lbmdpbmVzYDtcblxuICAgIGlmICh1c2VZYXJuKSB7XG5cbiAgICAgIGNvbnN0IGFyZ3NGb3JGYXN0ZXJJbnN0YWxsID0gYCR7Zm9yY2UgPyAnLS1mb3JjZScgOiAnJ30gJHtjb21tb25PcHRpb25zfSBgO1xuICAgICAgY29tbWFuZCA9XG4gICAgICAgIGAke1xuICAgICAgICAgIHJlbW92ZVlhcm5PclBhY2thZ2VKc29uTG9ja1xuICAgICAgICAgICAgPyBgcm0gJHtjb25maWcuZmlsZS55YXJuX2xvY2t9IGAgK1xuICAgICAgICAgICAgICBgJiYgdG91Y2ggJHtjb25maWcuZmlsZS55YXJuX2xvY2t9ICYmIGBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfWAgK1xuICAgICAgICBgeWFybiAke3BrZyA/IChyZW1vdmUgPyAncmVtb3ZlJyA6ICdhZGQnKSA6ICdpbnN0YWxsJ30gJHtwa2cgPyBwa2cubmFtZSA6ICcnfSBgICtcbiAgICAgICAgYCAke2dlbmVyYXRlWWFybk9yUGFja2FnZUpzb25Mb2NrID8gJycgOiAnLS1uby1sb2NrZmlsZSd9IGAgK1xuICAgICAgICBgICR7YXJnc0ZvckZhc3Rlckluc3RhbGx9IGAgK1xuICAgICAgICBgICR7cGtnICYmIHBrZy5pbnN0YWxsVHlwZSAmJiBwa2cuaW5zdGFsbFR5cGUgPT09ICctLXNhdmUtZGV2JyA/ICctZGV2JyA6ICcnfSBgO1xuXG4gICAgfSBlbHNlIHtcblxuICAgICAgY29uc3QgYXJnc0ZvckZhc3Rlckluc3RhbGwgPVxuICAgICAgICBgJHtmb3JjZSA/ICctLWZvcmNlJyA6ICcnfSAke2NvbW1vbk9wdGlvbnN9IC0tbm8tYXVkaXQgYCArXG4gICAgICAgIGAke3NpbGVudCA/ICctLXNpbGVudCAtLW5vLXByb2dyZXNzJyA6ICcnfSAgIGA7XG5cbiAgICAgIGNvbW1hbmQgPVxuICAgICAgICBgJHtcbiAgICAgICAgICByZW1vdmVZYXJuT3JQYWNrYWdlSnNvbkxvY2tcbiAgICAgICAgICAgID8gYHJtICR7Y29uZmlnLmZpbGUucGFja2FnZV9sb2NrX2pzb259IGAgK1xuICAgICAgICAgICAgICBgJiYgdG91Y2ggJHtjb25maWcuZmlsZS5wYWNrYWdlX2xvY2tfanNvbn0gICYmIGBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfWAgK1xuICAgICAgICBgbnB4IC0tbm9kZS1vcHRpb25zPS0tbWF4LW9sZC1zcGFjZS1zaXplPTgwMDAgbnBtIGAgK1xuICAgICAgICBgJHtyZW1vdmUgPyAndW5pbnN0YWxsJyA6ICdpbnN0YWxsJ30gJHtwa2cgPyBwa2cubmFtZSA6ICcnfSBgICtcbiAgICAgICAgYCAke2dlbmVyYXRlWWFybk9yUGFja2FnZUpzb25Mb2NrID8gJycgOiAnLS1uby1wYWNrYWdlLWxvY2snfSBgICtcbiAgICAgICAgYCAke2lnbm9yZU9wdGlvbmFsID8gJy0taWdub3JlLW9wdGlvbmFsJyA6ICcnfSBgICtcbiAgICAgICAgYCAke3BrZyAmJiBwa2cuaW5zdGFsbFR5cGUgPyBwa2cuaW5zdGFsbFR5cGUgOiAnJ30gYCArXG4gICAgICAgIGAgJHthcmdzRm9yRmFzdGVySW5zdGFsbH0gYDtcblxuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZDtcbiAgfVxuXG5cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJlZ2lzdHJ5IHdpdGhvdXQgc3BlY2lmaWVkIHJlZ2lzdHIgaXMgY2hlY2tpbmcgbnBtIHJlZ2lzdHJ5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBpc0xvZ2dlZEluVG9SZWdpc3RyeShyZWdpc3RyeT86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFByb21wdCB0aGUgdXNlciB0byBsb2cgaW4gdG8gYSBzcGVjaWZpYyBucG0gcmVnaXN0cnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVnaXN0cnldIC0gT3B0aW9uYWwgbnBtIHJlZ2lzdHJ5IFVSTC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbG9naW4gcHJvY2VzcyBjb21wbGV0ZXMuXG4gICAqL1xuICBhc3luYyBsb2dpblRvUmVnaXN0cnkocmVnaXN0cnk/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgYXN5bmMgbWFrZVN1cmVMb2dnZWRJblRvTnBtUmVnaXN0cnkocmVnaXN0cnk/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiB1c2UgbWFrZVN1cmVMb2dnZWRJblRvTnBtUmVnaXN0cnkoKVxuICAgKi9cbiAgY2hlY2tJZkxvZ2dpbkluVG9OcG0oKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRucC1oZWxwZXJzIGxpYi9iYXNlL2Jhc2UtbnBtLWhlbHBlcnMudHMiXX0=
@@ -400,6 +400,7 @@ class BaseProject {
400
400
  /* */
401
401
  /* */
402
402
  /* */
403
+ /* */
403
404
  return (void 0);
404
405
  }
405
406
  readJson(fileRelativeToProjectPath) {
@@ -667,6 +668,12 @@ class BaseProject {
667
668
  async build(buildOptions) {
668
669
  throw new Error('TODO IMPLEMENT');
669
670
  }
671
+ /**
672
+ * publish project to npm
673
+ */
674
+ async publish(publishOptions) {
675
+ throw new Error('TODO IMPLEMENT');
676
+ }
670
677
  async release(releaseOptions) {
671
678
  throw new Error('TODO IMPLEMENT');
672
679
  }
@@ -713,4 +720,4 @@ ${(this.linkedProjects.linkedProjects || [])
713
720
  export { BaseProject };
714
721
  ;
715
722
  ({}); // @--end-of-file-for-module=tnp-helpers lib/base/base-project.ts
716
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9iYXNlL2Jhc2UtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBSUwsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyQyxPQUFPLEVBQWtCLFdBQVcsRUFBSSxPQUFPLEdBQTRELE1BQU0sVUFBVSxDQUFDLENBQUEsS0FBSztBQUNqSSxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFFTCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWU5RCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFFdEIsTUFBc0IsV0FBVzthQU94QixRQUFHLEdBQUcsSUFBSSxtQkFBbUIsQ0FBYyxXQUFXLENBQUMsQUFBcEQsQ0FBcUQ7YUFPakQsVUFBSyxHQUFRLEVBQUUsQUFBVixDQUFXO0lBQzlCLElBQVcsV0FBVztRQUNwQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQXNCRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLENBQVM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBR0QsYUFBYTtJQUNiO0lBQ0U7O09BRUc7SUFDSCxRQUFnQjtRQXZD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QUFDO2lCQUNELElBQUksQ0FBQyxJQUFJLENBQUM7O0dBRVYsQ0FDRSxDQUFDO0lBSUosQ0FBQzs7U0E1OEJtQixXQUFXO0FBZzlCaEMsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpRUFBaUUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbmltcG9ydCB7IENvcmVNb2RlbHMgfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IENMSSB9IGZyb20gJ3RucC1jbGkvYnJvd3Nlcic7XG5pbXBvcnQgeyBwYXRoLCBjcm9zc1BsYXRmb3JtUGF0aCB9IGZyb20gJ3RucC1jb3JlL2Jyb3dzZXInO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAndG5wLWNvbmZpZy9icm93c2VyJztcbmltcG9ydCB7IF8gfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7ICAgQ29tbWl0RGF0YSwgICBDb3JlUHJvamVjdCwgICBIZWxwZXJzLCAgIExpbmtlZFBvcmplY3RzQ29uZmlnLCAgIExpbmtlZFByb2plY3QsICAgVHlwZU9mQ29tbWl0LCB9IGZyb20gJy4uL2luZGV4JzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgeyBCYXNlUHJvamVjdFJlc29sdmVyIH0gZnJvbSAnLi9iYXNlLXByb2plY3QtcmVzb2x2ZXInO1xuaW1wb3J0IHsgICBCYXNlUHJvamVjdFR5cGUsICAgTGlicmFyaWVzQnVpbGRPcHRpb25zLCAgIExpYnJhcnlCdWlsZENvbW1hbmRPcHRpb25zLCAgIE5nUHJvamVjdCwgfSBmcm9tICcuLi9tb2RlbHMnOy8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VMaWJyYXJ5QnVpbGQgfSBmcm9tICcuL2Jhc2UtbGlicmFyeS1idWlsZCc7XG5pbXBvcnQgeyBCYXNlTnBtSGVscGVycyB9IGZyb20gJy4vYmFzZS1ucG0taGVscGVycyc7XG5pbXBvcnQgeyBCYXNlTGlua2VkUHJvamVjdHMgfSBmcm9tICcuL2Jhc2UtbGlua2VkLXByb2plY3RzJztcbmltcG9ydCB7IEJhc2VHaXQgfSBmcm9tICcuL2Jhc2UtZ2l0JztcbmltcG9ydCB7IEJhc2VWc2NvZGVIZWxwZXJzIH0gZnJvbSAnLi9iYXNlLXZzY29kZSc7XG5pbXBvcnQgeyBCYXNlUmVsZWFzZVByb2Nlc3MgfSBmcm9tICcuL2Jhc2UtcmVsZWFzZS1wcm9jZXNzJztcblxuXG5jb25zdCB0YWtlblBvcnRzID0gW107XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlUHJvamVjdDxcbiAgUFJPSkNFVCBleHRlbmRzIEJhc2VQcm9qZWN0ID0gYW55LFxuICBUWVBFID0gQmFzZVByb2plY3RUeXBlLFxuPiB7XG5cblxuXG4gIHN0YXRpYyBpbnMgPSBuZXcgQmFzZVByb2plY3RSZXNvbHZlcjxCYXNlUHJvamVjdD4oQmFzZVByb2plY3QpO1xuXG5cblxuXG5cbiAgcHVibGljIGNhY2hlOiBhbnkgPSB7fTtcbiAgcHVibGljIHN0YXRpYyBjYWNoZTogYW55ID0ge307XG4gIHB1YmxpYyBnZXQgZ2xvYmFsQ2FjaGUoKSB7XG4gICAgcmV0dXJuIEJhc2VQcm9qZWN0LmNhY2hlO1xuICB9XG4gIHJlYWRvbmx5IHR5cGU6IFRZUEUgfCBzdHJpbmcgPSAndW5rbm93JztcblxuICAvKipcbiAgICogcmVzb2x2ZSBpbnN0YW5jZVxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgaW5zOiBCYXNlUHJvamVjdFJlc29sdmVyPFBST0pDRVQ+O1xuICAvKipcbiAgICogVW5pcXVlIGZyZWUgcG9ydCBmb3IgcHJvamVjdCBpbnN0YW5jZVxuICAgKiBvbmx5IGF2YWlsYWJsZSBhZnRlciBleGVjdXRpbmcgKnRoaXMuYXNzaWduRnJlZVBvcnQoKSpcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IHN0cmluZztcblxuICBwdWJsaWMgbGlicmFyeUJ1aWxkOiBCYXNlTGlicmFyeUJ1aWxkO1xuICBwdWJsaWMgbnBtSGVscGVyczogQmFzZU5wbUhlbHBlcnM7XG4gIHB1YmxpYyBsaW5rZWRQcm9qZWN0czogQmFzZUxpbmtlZFByb2plY3RzO1xuICBwdWJsaWMgdnNDb2RlSGVscGVyczogQmFzZVZzY29kZUhlbHBlcnM7XG4gIHB1YmxpYyByZWxlYXNlUHJvY2VzczogQmFzZVJlbGVhc2VQcm9jZXNzO1xuICBwdWJsaWMgZ2l0OiBCYXNlR2l0O1xuXG5cbiAgcHJpdmF0ZSBfX2xvY2F0aW9uOiBzdHJpbmc7XG4gIGdldCBsb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9fbG9jYXRpb247XG4gIH1cbiAgc2V0IGxvY2F0aW9uKHY6IHN0cmluZykge1xuICAgIHRoaXMuX19sb2NhdGlvbiA9IGNyb3NzUGxhdGZvcm1QYXRoKHYpO1xuICB9XG5cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKlxuICAgICAqIGRvZXNuJ3QgbmVlZCB0byBiZSByZWFsIHBhdGggLT4gY2FuIGJlIGxpbmtcbiAgICAgKi9cbiAgICBsb2NhdGlvbjogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBnZXQgaXNNb25vcmVwbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIG9yZGVyQ29yZVByb2plY3RzKGNvcmVQcm9qZWN0czogQ29yZVByb2plY3RbXSk6IENvcmVQcm9qZWN0W10ge1xuICAgIGNvbnN0IHByb2plY3RNYXAgPSBuZXcgTWFwPENvcmVQcm9qZWN0LCBDb3JlUHJvamVjdFtdPigpO1xuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICBwcm9qZWN0TWFwLnNldChwcm9qZWN0LCBbXSk7XG4gICAgfVxuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICBpZiAoIXByb2plY3RNYXAuaGFzKHByb2plY3QuZXh0ZW5kcykpIHtcbiAgICAgICAgcHJvamVjdE1hcC5zZXQocHJvamVjdC5leHRlbmRzLCBbXSk7XG4gICAgICB9XG4gICAgICBwcm9qZWN0TWFwLmdldChwcm9qZWN0LmV4dGVuZHMpIS5wdXNoKHByb2plY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyZWRQcm9qZWN0czogQ29yZVByb2plY3RbXSA9IFtdO1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PENvcmVQcm9qZWN0PigpO1xuXG4gICAgY29uc3QgdmlzaXQgPSAocHJvamVjdDogQ29yZVByb2plY3QpID0+IHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMocHJvamVjdCkpIHtcbiAgICAgICAgdmlzaXRlZC5hZGQocHJvamVjdCk7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHByb2plY3RNYXAuZ2V0KHByb2plY3QpO1xuICAgICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB2aXNpdChkZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvcmRlcmVkUHJvamVjdHMucHVzaChwcm9qZWN0KTtcbiAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBmb3IgKGNvbnN0IHByb2plY3Qgb2YgY29yZVByb2plY3RzKSB7XG4gICAgICB2aXNpdChwcm9qZWN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JkZXJlZFByb2plY3RzLnJldmVyc2UoKTtcbiAgfVxuXG5cblxuXG4gIGdldCBjb3JlKCk6IENvcmVQcm9qZWN0IHtcbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5jYWNoZVsnY29yZSddKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbJ2NvcmUnXTtcbiAgICB9XG5cbiAgICBsZXQgY29yZVByb2plY3RzID0gQ29yZVByb2plY3QuY29yZVByb2plY3RzLmZpbHRlcihwID0+XG4gICAgICBwLnJlY29nbml6ZWRGbih0aGlzIGFzIGFueSksXG4gICAgKTtcbiAgICBjb3JlUHJvamVjdHMgPSB0aGlzLm9yZGVyQ29yZVByb2plY3RzKGNvcmVQcm9qZWN0cyk7XG5cblxuICAgIHRoaXMuY2FjaGVbJ2NvcmUnXSA9IF8uZmlyc3QoY29yZVByb2plY3RzKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVsnY29yZSddO1xuICB9XG5cblxuXG4gIGdldCBsaW5rZWRQcm9qZWN0c0V4aXN0ZWQoKTogUFJPSkNFVFtdIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHB1YmxpYyBzZXRUeXBlKHR5cGU6IFRZUEUpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG5cblxuICBwdWJsaWMgdHlwZUlzKC4uLnR5cGVzOiBUWVBFW10pIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICYmIHR5cGVzLmluY2x1ZGVzKHRoaXMudHlwZSBhcyBhbnkpO1xuICB9XG5cblxuXG4gIHB1YmxpYyB0eXBlSXNOb3QoLi4udHlwZXM6IFRZUEVbXSkge1xuICAgIHJldHVybiAhdGhpcy50eXBlSXMoLi4udHlwZXMpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBwcm9qZWN0IGZvbGRlciBiYXNlbmFtZVxuICAgKi9cbiAgZ2V0IGJhc2VuYW1lKCk6IHN0cmluZyB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIG5hbWUgZnJvbSBwYWNrYWdlLmpzb25cbiAgICovXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubnBtSGVscGVycz8ubmFtZSB8fCB0aGlzLm5hbWVGcm9tUG9tWE1MO1xuICB9XG5cbiAgZ2V0IG5hbWVGcm9tUG9tWE1MKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYXJ0aWZhY3RJZFBhdHRlcm4gPSAvPGFydGlmYWN0SWQ+KFtePF0rKTxcXC9hcnRpZmFjdElkPi87XG4gICAgY29uc3QgbWF0Y2ggPSAodGhpcy5yZWFkRmlsZSgncG9tLnhtbCcpIHx8ICcnKS5tYXRjaChhcnRpZmFjdElkUGF0dGVybik7XG4gICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICByZXR1cm4gbWF0Y2hbMV07XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG5cblxuICBwcm90ZWN0ZWQgZ2V0Rm9sZGVyc0ZvclBvc3NpYmxlUHJvamVjdENoaWxkcmVuKCk6IHN0cmluZ1tdIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldEFsbENoaWxkcmVuKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogYWxpYXMgdG8gZ2V0QWxsQ2hpbGRyZW5cbiAgICovXG4gIGdldCBjaGlsZHJlbigpOiBQUk9KQ0VUW10ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldENoaWxkQnkobmFtZU9yQmFzZW5hbWU6IHN0cmluZywgZXJyb3JzID0gdHJ1ZSk6IFBST0pDRVQge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZ2V0IHBhcmVudCgpOiBQUk9KQ0VUIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXQgZ3JhbmRwYSgpOiBQUk9KQ0VUIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZ2V0IGdlbmVyaWNOYW1lKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGNoZWNrQW5kQm9sZGVuUGF0aChmdWxsUGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFydHMgPSBmdWxsUGF0aC5zcGxpdCgnLycpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gcGFydHMubWFwKChwYXJ0LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcGF0aFRvY2hlY2sgPSBwYXJ0cy5zbGljZSgwLCBpbmRleCArIDEpLmpvaW4oJy8nKTtcblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gICAgICByZXR1cm4gcGFydDtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQuam9pbignLycpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzYW1lIGhhcyBwcm9qZWN0Lmhhc0ZpbGUoKTtcbiAgICovXG4gIHBhdGhFeGlzdHMocmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0ZpbGUocmVsYXRpdmVQYXRoKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogc2FtZSBhcyBwcm9qZWN0LnBhdGhFeGlzdHMoKTtcbiAgICovXG4gIGhhc0ZpbGUocmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG4gIGhhc0ZvbGRlcihyZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHNhbWUgYXMgcHJvamVjdC5wYXRoaGFzRmlsZUV4aXN0cygpO1xuICAgKiBidXQgd2l0aCBwYXRoLnJlc29sdmVcbiAgICovXG4gIGNvbnRhaW5zRmlsZShmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShcbiAgICAgIHBhdGguam9pbih0aGlzLmxvY2F0aW9uLCBmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoKSxcbiAgICApO1xuICAgIHJldHVybiBIZWxwZXJzLmV4aXN0cyhmdWxsUGF0aCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGFic29sdXRlIHBhdGg6XG4gICAqIGNvbmNhdGVkIHByb2plY3QgbG9jYXRpb24gd2l0aCByZWxhdGl2ZSBwYXRoXG4gICAqL1xuICBwYXRoRm9yKHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10pIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICB3cml0ZUpzb24ocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGpzb246IG9iamVjdCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1cyBleGVjdXRlIGluc3RlYWRcbiAgICogdXNlIG91dHB1dCBmcm9tIG9yIG1vcmUgcHJlY2llc2UgY3JhZnRlZCBhcGlcbiAgICovXG4gIHJ1bihjb21tYW5kOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENvcmVNb2RlbHMuUnVuT3B0aW9ucywgJ2N3ZCc+KSB7XG4gICAgbGV0IG9wdDogQ29yZU1vZGVscy5SdW5PcHRpb25zO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgIHJldHVybiBIZWxwZXJzLnJ1bihjb21tYW5kLCBvcHQpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzYW1lIGFzIHJ1biBidXQgYXN5bmNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBleGVjdXRlKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29yZU1vZGVscy5FeGVjdXRlT3B0aW9ucyAmIHsgc2hvd0NvbW1hbmQ/OiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8YW55PiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogdHJ5IHJ1biBidXQgY29udGludWUgd2hlbiBpdCBmYWlsc1xuICAgKiBAcGFyYW0gY29tbWFuZFxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJ5UnVuU3luYyhcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4vKiAqL1xuLyogKi9cbiAgXG4gICk6IHZvaWQge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBvdXRwdXRGcm9tKFxuICAgIGNvbW1hbmQ6IHN0cmluZyxcbi8qICovXG4vKiAqL1xuICBcbiAgKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVtb3ZlRmlsZShmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZWFkRmlsZShmaWxlUmVsYXRpdmVUb1Byb2plY3RQYXRoOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZWFkSnNvbjxUID0ge30+KGZpbGVSZWxhdGl2ZVRvUHJvamVjdFBhdGg6IHN0cmluZyk6IFQge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHJlbW92ZShyZWxhdGl2ZVBhdGg6IHN0cmluZywgZXhhY3RQYXRoID0gdHJ1ZSkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICByZW1vdmVGb2xkZXJCeVJlbGF0aXZlUGF0aChyZWxhdGl2ZVBhdGhUb0ZvbGRlcjogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgYXN5bmMgYXNzaWduRnJlZVBvcnQoXG4gICAgc3RhcnRGcm9tOiBudW1iZXIgPSA0MjAwLFxuICAgIGhvd01hbnlGcmVlUG9ydHNBZnRlclRoYXRQb3J0OiBudW1iZXIgPSAwLFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICByZW1vdmVJdHNlbGYoKSB7XG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFB1cnBvc2U6IG5vdCBpbml0aWFsaXppbmcgYWxsIGNsYXNzZXMgYXQgdGhlIGJlZ2lubmluZ1xuICAgKiBPbmx5IGZvciBCYXNlRmVhdHVyZUZvclByb2plY3QgY2xhc3NcbiAgICovXG4gIGRlZmluZVByb3BlcnR5PFBST0pFQ1Q+KFxuICAgIHZhcmlhYmxlTmFtZToga2V5b2YgUFJPSkVDVCxcbiAgICBjbGFzc0ZuOiBGdW5jdGlvbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgY3VzdG9tSW5zdGFuY2VSZXR1cm4/OiAoKSA9PiBvYmplY3Q7XG4gICAgfSxcbiAgKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZnMuY29weSBvcHRpb24gZmlsdGVyIGZ1bmN0aW9uIGZvciBjb3B5aW5nIG9ubHkgc2VsZWN0ZWQgZm9sZGVycyBmcm9tIHByb2plY3RcbiAgICovXG4gIGZpbHRlck9ubHlDb3B5KGJhc2VQYXRoRm9sZGVyc09ubHlUb0luY2x1ZGU6IHN0cmluZ1tdKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGZzLmNvcHkgb3B0aW9uIGZpbHRlciBmdW5jdGlvbiBmb3IgY29weWluZyBvbmx5IG5vdCBzZWxlY3RlZCBmb2xkZXJzIGZyb20gcHJvamVjdFxuICAgKi9cbiAgZmlsdGVyRG9udENvcHkoYmFzZVBhdGhGb2xkZXJzVG9zU2tpcDogc3RyaW5nW10pIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZ2VuZXJhbCBkZWZhdWx0IGRldmVsb3BtZW50IGJyYW5jaCBmb3IgYWxsIGtpbmRzIG9mIHByb2plY3RzXG4gICAqL1xuICBnZXREZWZhdWx0RGV2ZWxvcG1lbnRCcmFuY2goKSB7XG4gICAgcmV0dXJuICdkZXZlbG9wJztcbiAgfVxuXG5cblxuICAvKipcbiAgICogbWFpbi9kZWZhdWx0IGhhcmRjb2RlZCBicmFuY2hlc1xuICAgKi9cbiAgZ2V0TWFpbkJyYW5jaGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWydtYXN0ZXInLCAnZGV2ZWxvcCcsICdzdGFnZScsICdwcm9kJywgJ3Rlc3QnXTtcbiAgfVxuXG5cblxuICBpc1Vuc2luZ0FjdGlvbkNvbW1pdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG5cbiAgYXN5bmMgcmVzZXRQcm9jZXNzKG92ZXJyaWRlQnJhbmNoPzogc3RyaW5nLCByZWNydXNpdmUgPSBmYWxzZSkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIGxpbmtUbyhkZXN0UGFja2FnZUxvY2F0aW9uOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBzZXRWYWx1ZVRvSlNPTihcbiAgICByZWxhdGl2ZVBhdGg6IHN0cmluZyxcbiAgICBsb2Rhc2hHZXRQYXRoOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgKTogdm9pZCB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZ2V0VmFsdWVGcm9tSlNPTihcbiAgICByZWxhdGl2ZVBhdGg6IHN0cmluZyxcbiAgICBsb2Rhc2hHZXRQYXRoOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiBhbnkgPSB2b2lkIDAsXG4gICk6IGFueSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldFZhbHVlRnJvbUpTT05DKFxuICAgIHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuICAgIGxvZGFzaEdldFBhdGg6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IGFueSA9IHZvaWQgMCxcbiAgKTogYW55IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cblxuICB3cml0ZUZpbGUocmVsYXRpdmVQYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIHB1YmxpYyBydW5Db21tYW5kR2V0U3RyaW5nKHRoaXM6IEJhc2VQcm9qZWN0LCBjb21tYW5kOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHRvU3RyaW5nID0gKCkgPT4ge1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9PT4ke3RoaXMubG9jYXRpb259YDtcbiAgfTtcblxuXG5cbiAgZ2V0IHBhcmVudHNOYW1lcygpIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cbiAgb3BlbkxvY2F0aW9uKHJlbGF0aXZlRm9sZGVyUGF0aDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG4gIHByaXZhdGUgZmluZFBhcmVudHNOYW1lcyhcbiAgICBwcm9qZWN0PzogUFJPSkNFVCxcbiAgICBwYXJlbnQ/OiBQUk9KQ0VULFxuICAgIHJlc3VsdCA9IFtdLFxuICApOiBzdHJpbmdbXSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgdHJ5S2lsbEFsbEVsZWN0cm9uSW5zdGFuY2VzKCkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGluaXQgcHJvamVjdCBmaWxlcyBzdHJ1Y3R1cmUgYW5kIGRlcGVkZW5jaWVzXG4gICAqL1xuICBhc3luYyBpbml0KGluaXRPcHRpb25zPzogYW55KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPIElNUExFTUVOVCcpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBnbG9iYWxseSBsaW5rIG5wbSBhcyBwYWNrYWdlXG4gICAqL1xuICBhc3luYyBsaW5rKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogaW5pdCBwcm9qZWN0IGZpbGVzIHN0cnVjdHVyZSB3aXRob3V0IGRlcGVkZW5jaWVzXG4gICAqL1xuICBhc3luYyBzdHJ1Y3QoaW5pdE9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGluaXQgYW5kIGJ1aWxkKCkgcHJvamVjdFxuICAgKi9cbiAgYXN5bmMgYnVpbGQoYnVpbGRPcHRpb25zPzogYW55KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPIElNUExFTUVOVCcpO1xuICB9XG5cblxuXG4gIGFzeW5jIHJlbGVhc2UocmVsZWFzZU9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGxpbnQgcG9yamVjdFxuICAgKi9cbiAgYXN5bmMgbGludChsaW50T3B0aW9ucz86IGFueSkge1xuICAgIEhlbHBlcnMuaW5mbyhgXG5cblxuICAgIENPTU1JVCBMSU5UIE5PVCBJTVBMRU1FTlRFRFxuXG5cbiAgICBgKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZ2V0IGluZm8gYWJvdXQgcG9yamVjdFxuICAgKi9cbiAgYXN5bmMgaW5mbygpIHtcbiAgICBjb25zdCBwcm9qID0gdGhpcztcbiAgICBIZWxwZXJzLmluZm8oXG4gICAgICBgXG5cbiAgbmFtZTogJHtwcm9qPy5uYW1lfVxuICB0eXBlOiAke3Byb2o/LnR5cGV9XG4gIGNvcmUgcHJvamVjdCBuYW1lOiAnJHtwcm9qPy5jb3JlPy5uYW1lfSdcbiAgZW1iZWRkZWQgcHJvamVjdDogJHtwcm9qPy5saW5rZWRQcm9qZWN0cy5lbWJlZGRlZFByb2plY3Q/LmdlbmVyaWNOYW1lIHx8ICc8IG5vbmUgPid9XG4gIGNoaWxkcmVuICgke3Byb2o/LmNoaWxkcmVuLmxlbmd0aH0pOiAkeyFwcm9qIHx8ICFwcm9qLmNoaWxkcmVuLmxlbmd0aCA/ICc8IG5vbmUgPicgOiAnJ31cbiR7cHJvaj8uY2hpbGRyZW4ubWFwKGMgPT4gJysnICsgYy5nZW5lcmljTmFtZSkuam9pbignXFxuJyl9XG5gICtcbiAgICAgICAgYFxubGlua2VkIHBvcmplY3QgcHJlZml4OiBcIiR7dGhpcy5saW5rZWRQcm9qZWN0cy5saW5rZWRQcm9qZWN0c1ByZWZpeH1cIlxuXG5saW5rZWQgcHJvamVjdHMgZnJvbSBqc29uICgke3RoaXMubGlua2VkUHJvamVjdHMubGlua2VkUHJvamVjdHM/Lmxlbmd0aCB8fCAwfSk6XG4keyh0aGlzLmxpbmtlZFByb2plY3RzLmxpbmtlZFByb2plY3RzIHx8IFtdKVxuICAubWFwKGMgPT4ge1xuICAgIGNvbnN0IHByb2ogPSB0aGlzLmlucy5Gcm9tKHRoaXMucGF0aEZvcihjLnJlbGF0aXZlQ2xvbmVQYXRoKSk7XG4gICAgcmV0dXJuICctICcgKyBwcm9qID8gcHJvai5nZW5lcmljTmFtZSA6IGMucmVsYXRpdmVDbG9uZVBhdGg7XG4gIH0pXG4gIC5qb2luKCdcXG4nKX1cblxuICBgLFxuICAgICk7XG5cblxuXG4gIH1cblxufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWhlbHBlcnMgbGliL2Jhc2UvYmFzZS1wcm9qZWN0LnRzIl19
723
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdG5wLWhlbHBlcnMvcHJvamVjdHMvdG5wLWhlbHBlcnMvc3JjL2xpYi9iYXNlL2Jhc2UtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBSUwsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyQyxPQUFPLEVBQWtCLFdBQVcsRUFBSSxPQUFPLEdBQTRELE1BQU0sVUFBVSxDQUFDLENBQUEsS0FBSztBQUNqSSxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFDTCxLQUFLO0FBQ0wsS0FBSztBQUNMLEtBQUs7QUFFTCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWU5RCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFFdEIsTUFBc0IsV0FBVzthQU94QixRQUFHLEdBQUcsSUFBSSxtQkFBbUIsQ0FBYyxXQUFXLENBQUMsQUFBcEQsQ0FBcUQ7YUFPakQsVUFBSyxHQUFRLEVBQUUsQUFBVixDQUFXO0lBQzlCLElBQVcsV0FBVztRQUNwQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQXNCRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLENBQVM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBR0QsYUFBYTtJQUNiO0lBQ0U7O09BRUc7SUFDSCxRQUFnQjtRQXZD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Z0JBQzlELE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBQzlELENBQUMsQ0FBQztpQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDOztHQUVWLENBQ0UsQ0FBQztJQUlKLENBQUM7O1NBdDlCbUIsV0FBVztBQTA5QmhDLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUVBQWlFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG5pbXBvcnQgeyBDb3JlTW9kZWxzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyBDTEkgfSBmcm9tICd0bnAtY2xpL2Jyb3dzZXInO1xuaW1wb3J0IHsgcGF0aCwgY3Jvc3NQbGF0Zm9ybVBhdGggfSBmcm9tICd0bnAtY29yZS9icm93c2VyJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJ3RucC1jb25maWcvYnJvd3Nlcic7XG5pbXBvcnQgeyBfIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5pbXBvcnQgeyAgIENvbW1pdERhdGEsICAgQ29yZVByb2plY3QsICAgSGVscGVycywgICBMaW5rZWRQb3JqZWN0c0NvbmZpZywgICBMaW5rZWRQcm9qZWN0LCAgIFR5cGVPZkNvbW1pdCwgfSBmcm9tICcuLi9pbmRleCc7LyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHsgQmFzZVByb2plY3RSZXNvbHZlciB9IGZyb20gJy4vYmFzZS1wcm9qZWN0LXJlc29sdmVyJztcbmltcG9ydCB7ICAgQmFzZVByb2plY3RUeXBlLCAgIExpYnJhcmllc0J1aWxkT3B0aW9ucywgICBMaWJyYXJ5QnVpbGRDb21tYW5kT3B0aW9ucywgICBOZ1Byb2plY3QsIH0gZnJvbSAnLi4vbW9kZWxzJzsvKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cblxuaW1wb3J0IHR5cGUgeyBCYXNlTGlicmFyeUJ1aWxkIH0gZnJvbSAnLi9iYXNlLWxpYnJhcnktYnVpbGQnO1xuaW1wb3J0IHsgQmFzZU5wbUhlbHBlcnMgfSBmcm9tICcuL2Jhc2UtbnBtLWhlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZUxpbmtlZFByb2plY3RzIH0gZnJvbSAnLi9iYXNlLWxpbmtlZC1wcm9qZWN0cyc7XG5pbXBvcnQgeyBCYXNlR2l0IH0gZnJvbSAnLi9iYXNlLWdpdCc7XG5pbXBvcnQgeyBCYXNlVnNjb2RlSGVscGVycyB9IGZyb20gJy4vYmFzZS12c2NvZGUnO1xuaW1wb3J0IHsgQmFzZVJlbGVhc2VQcm9jZXNzIH0gZnJvbSAnLi9iYXNlLXJlbGVhc2UtcHJvY2Vzcyc7XG5cblxuY29uc3QgdGFrZW5Qb3J0cyA9IFtdO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVByb2plY3Q8XG4gIFBST0pDRVQgZXh0ZW5kcyBCYXNlUHJvamVjdCA9IGFueSxcbiAgVFlQRSA9IEJhc2VQcm9qZWN0VHlwZSxcbj4ge1xuXG5cblxuICBzdGF0aWMgaW5zID0gbmV3IEJhc2VQcm9qZWN0UmVzb2x2ZXI8QmFzZVByb2plY3Q+KEJhc2VQcm9qZWN0KTtcblxuXG5cblxuXG4gIHB1YmxpYyBjYWNoZTogYW55ID0ge307XG4gIHB1YmxpYyBzdGF0aWMgY2FjaGU6IGFueSA9IHt9O1xuICBwdWJsaWMgZ2V0IGdsb2JhbENhY2hlKCkge1xuICAgIHJldHVybiBCYXNlUHJvamVjdC5jYWNoZTtcbiAgfVxuICByZWFkb25seSB0eXBlOiBUWVBFIHwgc3RyaW5nID0gJ3Vua25vdyc7XG5cbiAgLyoqXG4gICAqIHJlc29sdmUgaW5zdGFuY2VcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGluczogQmFzZVByb2plY3RSZXNvbHZlcjxQUk9KQ0VUPjtcbiAgLyoqXG4gICAqIFVuaXF1ZSBmcmVlIHBvcnQgZm9yIHByb2plY3QgaW5zdGFuY2VcbiAgICogb25seSBhdmFpbGFibGUgYWZ0ZXIgZXhlY3V0aW5nICp0aGlzLmFzc2lnbkZyZWVQb3J0KCkqXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBzdHJpbmc7XG5cbiAgcHVibGljIGxpYnJhcnlCdWlsZDogQmFzZUxpYnJhcnlCdWlsZDtcbiAgcHVibGljIG5wbUhlbHBlcnM6IEJhc2VOcG1IZWxwZXJzO1xuICBwdWJsaWMgbGlua2VkUHJvamVjdHM6IEJhc2VMaW5rZWRQcm9qZWN0cztcbiAgcHVibGljIHZzQ29kZUhlbHBlcnM6IEJhc2VWc2NvZGVIZWxwZXJzO1xuICBwdWJsaWMgcmVsZWFzZVByb2Nlc3M6IEJhc2VSZWxlYXNlUHJvY2VzcztcbiAgcHVibGljIGdpdDogQmFzZUdpdDtcblxuXG4gIHByaXZhdGUgX19sb2NhdGlvbjogc3RyaW5nO1xuICBnZXQgbG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fX2xvY2F0aW9uO1xuICB9XG4gIHNldCBsb2NhdGlvbih2OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9fbG9jYXRpb24gPSBjcm9zc1BsYXRmb3JtUGF0aCh2KTtcbiAgfVxuXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBkb2Vzbid0IG5lZWQgdG8gYmUgcmVhbCBwYXRoIC0+IGNhbiBiZSBsaW5rXG4gICAgICovXG4gICAgbG9jYXRpb246IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgZ2V0IGlzTW9ub3JlcG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBvcmRlckNvcmVQcm9qZWN0cyhjb3JlUHJvamVjdHM6IENvcmVQcm9qZWN0W10pOiBDb3JlUHJvamVjdFtdIHtcbiAgICBjb25zdCBwcm9qZWN0TWFwID0gbmV3IE1hcDxDb3JlUHJvamVjdCwgQ29yZVByb2plY3RbXT4oKTtcblxuXG4gICAgZm9yIChjb25zdCBwcm9qZWN0IG9mIGNvcmVQcm9qZWN0cykge1xuICAgICAgcHJvamVjdE1hcC5zZXQocHJvamVjdCwgW10pO1xuICAgIH1cblxuXG4gICAgZm9yIChjb25zdCBwcm9qZWN0IG9mIGNvcmVQcm9qZWN0cykge1xuICAgICAgaWYgKCFwcm9qZWN0TWFwLmhhcyhwcm9qZWN0LmV4dGVuZHMpKSB7XG4gICAgICAgIHByb2plY3RNYXAuc2V0KHByb2plY3QuZXh0ZW5kcywgW10pO1xuICAgICAgfVxuICAgICAgcHJvamVjdE1hcC5nZXQocHJvamVjdC5leHRlbmRzKSEucHVzaChwcm9qZWN0KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkUHJvamVjdHM6IENvcmVQcm9qZWN0W10gPSBbXTtcbiAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxDb3JlUHJvamVjdD4oKTtcblxuICAgIGNvbnN0IHZpc2l0ID0gKHByb2plY3Q6IENvcmVQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKHByb2plY3QpKSB7XG4gICAgICAgIHZpc2l0ZWQuYWRkKHByb2plY3QpO1xuICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBwcm9qZWN0TWFwLmdldChwcm9qZWN0KTtcbiAgICAgICAgaWYgKGRlcGVuZGVuY2llcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdmlzaXQoZGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3JkZXJlZFByb2plY3RzLnB1c2gocHJvamVjdCk7XG4gICAgICB9XG4gICAgfTtcblxuXG4gICAgZm9yIChjb25zdCBwcm9qZWN0IG9mIGNvcmVQcm9qZWN0cykge1xuICAgICAgdmlzaXQocHJvamVjdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyZWRQcm9qZWN0cy5yZXZlcnNlKCk7XG4gIH1cblxuXG5cblxuICBnZXQgY29yZSgpOiBDb3JlUHJvamVjdCB7XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuY2FjaGVbJ2NvcmUnXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlWydjb3JlJ107XG4gICAgfVxuXG4gICAgbGV0IGNvcmVQcm9qZWN0cyA9IENvcmVQcm9qZWN0LmNvcmVQcm9qZWN0cy5maWx0ZXIocCA9PlxuICAgICAgcC5yZWNvZ25pemVkRm4odGhpcyBhcyBhbnkpLFxuICAgICk7XG4gICAgY29yZVByb2plY3RzID0gdGhpcy5vcmRlckNvcmVQcm9qZWN0cyhjb3JlUHJvamVjdHMpO1xuXG5cbiAgICB0aGlzLmNhY2hlWydjb3JlJ10gPSBfLmZpcnN0KGNvcmVQcm9qZWN0cyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVbJ2NvcmUnXTtcbiAgfVxuXG5cblxuICBnZXQgbGlua2VkUHJvamVjdHNFeGlzdGVkKCk6IFBST0pDRVRbXSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBwdWJsaWMgc2V0VHlwZSh0eXBlOiBUWVBFKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuXG5cbiAgcHVibGljIHR5cGVJcyguLi50eXBlczogVFlQRVtdKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSAmJiB0eXBlcy5pbmNsdWRlcyh0aGlzLnR5cGUgYXMgYW55KTtcbiAgfVxuXG5cblxuICBwdWJsaWMgdHlwZUlzTm90KC4uLnR5cGVzOiBUWVBFW10pIHtcbiAgICByZXR1cm4gIXRoaXMudHlwZUlzKC4uLnR5cGVzKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogcHJvamVjdCBmb2xkZXIgYmFzZW5hbWVcbiAgICovXG4gIGdldCBiYXNlbmFtZSgpOiBzdHJpbmcge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBuYW1lIGZyb20gcGFja2FnZS5qc29uXG4gICAqL1xuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5wbUhlbHBlcnM/Lm5hbWUgfHwgdGhpcy5uYW1lRnJvbVBvbVhNTDtcbiAgfVxuXG4gIGdldCBuYW1lRnJvbVBvbVhNTCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFydGlmYWN0SWRQYXR0ZXJuID0gLzxhcnRpZmFjdElkPihbXjxdKyk8XFwvYXJ0aWZhY3RJZD4vO1xuICAgIGNvbnN0IG1hdGNoID0gKHRoaXMucmVhZEZpbGUoJ3BvbS54bWwnKSB8fCAnJykubWF0Y2goYXJ0aWZhY3RJZFBhdHRlcm4pO1xuICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xuICAgICAgcmV0dXJuIG1hdGNoWzFdO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuXG5cbiAgcHJvdGVjdGVkIGdldEZvbGRlcnNGb3JQb3NzaWJsZVByb2plY3RDaGlsZHJlbigpOiBzdHJpbmdbXSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHByb3RlY3RlZCBnZXRBbGxDaGlsZHJlbigpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGFsaWFzIHRvIGdldEFsbENoaWxkcmVuXG4gICAqL1xuICBnZXQgY2hpbGRyZW4oKTogUFJPSkNFVFtdIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXRDaGlsZEJ5KG5hbWVPckJhc2VuYW1lOiBzdHJpbmcsIGVycm9ycyA9IHRydWUpOiBQUk9KQ0VUIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldCBwYXJlbnQoKTogUFJPSkNFVCB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZ2V0IGdyYW5kcGEoKTogUFJPSkNFVCB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIGdldCBnZW5lcmljTmFtZSgpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcHJpdmF0ZSBjaGVja0FuZEJvbGRlblBhdGgoZnVsbFBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnRzID0gZnVsbFBhdGguc3BsaXQoJy8nKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnRzLm1hcCgocGFydCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGhUb2NoZWNrID0gcGFydHMuc2xpY2UoMCwgaW5kZXggKyAxKS5qb2luKCcvJyk7XG5cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICAgICAgcmV0dXJuIHBhcnQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJy8nKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogc2FtZSBoYXMgcHJvamVjdC5oYXNGaWxlKCk7XG4gICAqL1xuICBwYXRoRXhpc3RzKHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNGaWxlKHJlbGF0aXZlUGF0aCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHNhbWUgYXMgcHJvamVjdC5wYXRoRXhpc3RzKCk7XG4gICAqL1xuICBoYXNGaWxlKHJlbGF0aXZlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiBib29sZWFuIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuICBoYXNGb2xkZXIocmVsYXRpdmVQYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBzYW1lIGFzIHByb2plY3QucGF0aGhhc0ZpbGVFeGlzdHMoKTtcbiAgICogYnV0IHdpdGggcGF0aC5yZXNvbHZlXG4gICAqL1xuICBjb250YWluc0ZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgICBwYXRoLmpvaW4odGhpcy5sb2NhdGlvbiwgZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aCksXG4gICAgKTtcbiAgICByZXR1cm4gSGVscGVycy5leGlzdHMoZnVsbFBhdGgpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBhYnNvbHV0ZSBwYXRoOlxuICAgKiBjb25jYXRlZCBwcm9qZWN0IGxvY2F0aW9uIHdpdGggcmVsYXRpdmUgcGF0aFxuICAgKi9cbiAgcGF0aEZvcihyZWxhdGl2ZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgd3JpdGVKc29uKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBqc29uOiBvYmplY3QpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXMgZXhlY3V0ZSBpbnN0ZWFkXG4gICAqIHVzZSBvdXRwdXQgZnJvbSBvciBtb3JlIHByZWNpZXNlIGNyYWZ0ZWQgYXBpXG4gICAqL1xuICBydW4oY29tbWFuZDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDb3JlTW9kZWxzLlJ1bk9wdGlvbnMsICdjd2QnPikge1xuICAgIGxldCBvcHQ6IENvcmVNb2RlbHMuUnVuT3B0aW9ucztcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgICByZXR1cm4gSGVscGVycy5ydW4oY29tbWFuZCwgb3B0KTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogc2FtZSBhcyBydW4gYnV0IGFzeW5jXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhlY3V0ZShcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENvcmVNb2RlbHMuRXhlY3V0ZU9wdGlvbnMgJiB7IHNob3dDb21tYW5kPzogYm9vbGVhbiB9LFxuICApOiBQcm9taXNlPGFueT4ge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHRyeSBydW4gYnV0IGNvbnRpbnVlIHdoZW4gaXQgZmFpbHNcbiAgICogQHBhcmFtIGNvbW1hbmRcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyeVJ1blN5bmMoXG4gICAgY29tbWFuZDogc3RyaW5nLFxuLyogKi9cbi8qICovXG4gIFxuICApOiB2b2lkIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgb3V0cHV0RnJvbShcbiAgICBjb21tYW5kOiBzdHJpbmcsXG4vKiAqL1xuLyogKi9cbiAgXG4gICkge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHJlbW92ZUZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVhZEZpbGUoZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHJlYWRKc29uPFQgPSB7fT4oZmlsZVJlbGF0aXZlVG9Qcm9qZWN0UGF0aDogc3RyaW5nKTogVCB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgcmVtb3ZlKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBleGFjdFBhdGggPSB0cnVlKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIHJlbW92ZUZvbGRlckJ5UmVsYXRpdmVQYXRoKHJlbGF0aXZlUGF0aFRvRm9sZGVyOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICBhc3luYyBhc3NpZ25GcmVlUG9ydChcbiAgICBzdGFydEZyb206IG51bWJlciA9IDQyMDAsXG4gICAgaG93TWFueUZyZWVQb3J0c0FmdGVyVGhhdFBvcnQ6IG51bWJlciA9IDAsXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIHJlbW92ZUl0c2VsZigpIHtcbi8qICovXG4vKiAqL1xuICBcbiAgfVxuXG5cblxuICAvKipcbiAgICogUHVycG9zZTogbm90IGluaXRpYWxpemluZyBhbGwgY2xhc3NlcyBhdCB0aGUgYmVnaW5uaW5nXG4gICAqIE9ubHkgZm9yIEJhc2VGZWF0dXJlRm9yUHJvamVjdCBjbGFzc1xuICAgKi9cbiAgZGVmaW5lUHJvcGVydHk8UFJPSkVDVD4oXG4gICAgdmFyaWFibGVOYW1lOiBrZXlvZiBQUk9KRUNULFxuICAgIGNsYXNzRm46IEZ1bmN0aW9uLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBjdXN0b21JbnN0YW5jZVJldHVybj86ICgpID0+IG9iamVjdDtcbiAgICB9LFxuICApIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBmcy5jb3B5IG9wdGlvbiBmaWx0ZXIgZnVuY3Rpb24gZm9yIGNvcHlpbmcgb25seSBzZWxlY3RlZCBmb2xkZXJzIGZyb20gcHJvamVjdFxuICAgKi9cbiAgZmlsdGVyT25seUNvcHkoYmFzZVBhdGhGb2xkZXJzT25seVRvSW5jbHVkZTogc3RyaW5nW10pIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogZnMuY29weSBvcHRpb24gZmlsdGVyIGZ1bmN0aW9uIGZvciBjb3B5aW5nIG9ubHkgbm90IHNlbGVjdGVkIGZvbGRlcnMgZnJvbSBwcm9qZWN0XG4gICAqL1xuICBmaWx0ZXJEb250Q29weShiYXNlUGF0aEZvbGRlcnNUb3NTa2lwOiBzdHJpbmdbXSkge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBnZW5lcmFsIGRlZmF1bHQgZGV2ZWxvcG1lbnQgYnJhbmNoIGZvciBhbGwga2luZHMgb2YgcHJvamVjdHNcbiAgICovXG4gIGdldERlZmF1bHREZXZlbG9wbWVudEJyYW5jaCgpIHtcbiAgICByZXR1cm4gJ2RldmVsb3AnO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBtYWluL2RlZmF1bHQgaGFyZGNvZGVkIGJyYW5jaGVzXG4gICAqL1xuICBnZXRNYWluQnJhbmNoZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ21hc3RlcicsICdkZXZlbG9wJywgJ3N0YWdlJywgJ3Byb2QnLCAndGVzdCddO1xuICB9XG5cblxuXG4gIGlzVW5zaW5nQWN0aW9uQ29tbWl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG5cblxuICBhc3luYyByZXNldFByb2Nlc3Mob3ZlcnJpZGVCcmFuY2g/OiBzdHJpbmcsIHJlY3J1c2l2ZSA9IGZhbHNlKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgbGlua1RvKGRlc3RQYWNrYWdlTG9jYXRpb246IHN0cmluZykge1xuLyogKi9cbi8qICovXG4gIFxuICB9XG5cblxuXG4gIHNldFZhbHVlVG9KU09OKFxuICAgIHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuICAgIGxvZGFzaEdldFBhdGg6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICApOiB2b2lkIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICBnZXRWYWx1ZUZyb21KU09OKFxuICAgIHJlbGF0aXZlUGF0aDogc3RyaW5nLFxuICAgIGxvZGFzaEdldFBhdGg6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IGFueSA9IHZvaWQgMCxcbiAgKTogYW55IHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgZ2V0VmFsdWVGcm9tSlNPTkMoXG4gICAgcmVsYXRpdmVQYXRoOiBzdHJpbmcsXG4gICAgbG9kYXNoR2V0UGF0aDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogYW55ID0gdm9pZCAwLFxuICApOiBhbnkge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuXG4gIHdyaXRlRmlsZShyZWxhdGl2ZVBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XG4vKiAqL1xuLyogKi9cbiAgXG4gIH1cblxuXG5cbiAgcHVibGljIHJ1bkNvbW1hbmRHZXRTdHJpbmcodGhpczogQmFzZVByb2plY3QsIGNvbW1hbmQ6IHN0cmluZykge1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbiAgICByZXR1cm4gKHZvaWQgMCk7XG4gIH1cblxuXG5cbiAgdG9TdHJpbmcgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGAke3RoaXMubmFtZX09PiR7dGhpcy5sb2NhdGlvbn1gO1xuICB9O1xuXG5cblxuICBnZXQgcGFyZW50c05hbWVzKCkge1xuLyogKi9cbi8qICovXG4gICAgcmV0dXJuICh2b2lkIDApO1xuICB9XG5cblxuICBvcGVuTG9jYXRpb24ocmVsYXRpdmVGb2xkZXJQYXRoOiBzdHJpbmcpIHtcbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBmaW5kUGFyZW50c05hbWVzKFxuICAgIHByb2plY3Q/OiBQUk9KQ0VULFxuICAgIHBhcmVudD86IFBST0pDRVQsXG4gICAgcmVzdWx0ID0gW10sXG4gICk6IHN0cmluZ1tdIHtcbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICB0cnlLaWxsQWxsRWxlY3Ryb25JbnN0YW5jZXMoKSB7XG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuLyogKi9cbi8qICovXG4vKiAqL1xuICAgIHJldHVybiAodm9pZCAwKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogaW5pdCBwcm9qZWN0IGZpbGVzIHN0cnVjdHVyZSBhbmQgZGVwZWRlbmNpZXNcbiAgICovXG4gIGFzeW5jIGluaXQoaW5pdE9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIGdsb2JhbGx5IGxpbmsgbnBtIGFzIHBhY2thZ2VcbiAgICovXG4gIGFzeW5jIGxpbmsoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUT0RPIElNUExFTUVOVCcpO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBpbml0IHByb2plY3QgZmlsZXMgc3RydWN0dXJlIHdpdGhvdXQgZGVwZWRlbmNpZXNcbiAgICovXG4gIGFzeW5jIHN0cnVjdChpbml0T3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogaW5pdCBhbmQgYnVpbGQoKSBwcm9qZWN0XG4gICAqL1xuICBhc3luYyBidWlsZChidWlsZE9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIHB1Ymxpc2ggcHJvamVjdCB0byBucG1cbiAgICovXG4gIGFzeW5jIHB1Ymxpc2gocHVibGlzaE9wdGlvbnM/OiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RPRE8gSU1QTEVNRU5UJyk7XG4gIH1cblxuXG5cbiAgYXN5bmMgcmVsZWFzZShyZWxlYXNlT3B0aW9ucz86IGFueSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVE9ETyBJTVBMRU1FTlQnKTtcbiAgfVxuXG5cblxuICAvKipcbiAgICogbGludCBwb3JqZWN0XG4gICAqL1xuICBhc3luYyBsaW50KGxpbnRPcHRpb25zPzogYW55KSB7XG4gICAgSGVscGVycy5pbmZvKGBcblxuXG4gICAgQ09NTUlUIExJTlQgTk9UIElNUExFTUVOVEVEXG5cblxuICAgIGApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBnZXQgaW5mbyBhYm91dCBwb3JqZWN0XG4gICAqL1xuICBhc3luYyBpbmZvKCkge1xuICAgIGNvbnN0IHByb2ogPSB0aGlzO1xuICAgIEhlbHBlcnMuaW5mbyhcbiAgICAgIGBcblxuICBuYW1lOiAke3Byb2o/Lm5hbWV9XG4gIHR5cGU6ICR7cHJvaj8udHlwZX1cbiAgY29yZSBwcm9qZWN0IG5hbWU6ICcke3Byb2o/LmNvcmU/Lm5hbWV9J1xuICBlbWJlZGRlZCBwcm9qZWN0OiAke3Byb2o/LmxpbmtlZFByb2plY3RzLmVtYmVkZGVkUHJvamVjdD8uZ2VuZXJpY05hbWUgfHwgJzwgbm9uZSA+J31cbiAgY2hpbGRyZW4gKCR7cHJvaj8uY2hpbGRyZW4ubGVuZ3RofSk6ICR7IXByb2ogfHwgIXByb2ouY2hpbGRyZW4ubGVuZ3RoID8gJzwgbm9uZSA+JyA6ICcnfVxuJHtwcm9qPy5jaGlsZHJlbi5tYXAoYyA9PiAnKycgKyBjLmdlbmVyaWNOYW1lKS5qb2luKCdcXG4nKX1cbmAgK1xuICAgICAgICBgXG5saW5rZWQgcG9yamVjdCBwcmVmaXg6IFwiJHt0aGlzLmxpbmtlZFByb2plY3RzLmxpbmtlZFByb2plY3RzUHJlZml4fVwiXG5cbmxpbmtlZCBwcm9qZWN0cyBmcm9tIGpzb24gKCR7dGhpcy5saW5rZWRQcm9qZWN0cy5saW5rZWRQcm9qZWN0cz8ubGVuZ3RoIHx8IDB9KTpcbiR7KHRoaXMubGlua2VkUHJvamVjdHMubGlua2VkUHJvamVjdHMgfHwgW10pXG4gIC5tYXAoYyA9PiB7XG4gICAgY29uc3QgcHJvaiA9IHRoaXMuaW5zLkZyb20odGhpcy5wYXRoRm9yKGMucmVsYXRpdmVDbG9uZVBhdGgpKTtcbiAgICByZXR1cm4gJy0gJyArIHByb2ogPyBwcm9qLmdlbmVyaWNOYW1lIDogYy5yZWxhdGl2ZUNsb25lUGF0aDtcbiAgfSlcbiAgLmpvaW4oJ1xcbicpfVxuXG4gIGAsXG4gICAgKTtcblxuXG5cbiAgfVxuXG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10bnAtaGVscGVycyBsaWIvYmFzZS9iYXNlLXByb2plY3QudHMiXX0=