oxygen-cli 1.25.0 → 1.27.0

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 (269) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/build/core/OxygenCore.js +266 -37
  3. package/build/core/OxygenEvents.js +11 -1
  4. package/build/core/OxygenModule.js +14 -1
  5. package/build/core/OxygenService.js +12 -1
  6. package/build/core/OxygenSubModule.js +10 -1
  7. package/build/core/WebDriverModule.js +30 -1
  8. package/build/core/utils.js +17 -1
  9. package/build/errors/HookError.js +7 -1
  10. package/build/errors/ModuleError.js +7 -1
  11. package/build/errors/ModuleUnavailableError.js +3 -1
  12. package/build/errors/OxygenError.js +33 -1
  13. package/build/errors/ScriptNotFound.js +7 -1
  14. package/build/errors/helper.js +77 -45
  15. package/build/index.js +18 -6
  16. package/build/lib/cli-util.js +90 -28
  17. package/build/lib/cli.js +23 -1
  18. package/build/lib/debugger.js +144 -1
  19. package/build/lib/img-merge.js +15 -1
  20. package/build/lib/launcher.js +28 -1
  21. package/build/lib/moduleRequire.js +4 -1
  22. package/build/lib/param-manager.js +28 -1
  23. package/build/lib/param-reader-csv.js +15 -1
  24. package/build/lib/param-reader-excel.js +14 -1
  25. package/build/lib/param-reader-json.js +10 -1
  26. package/build/lib/text-to-image.js +183 -0
  27. package/build/lib/util.js +58 -3
  28. package/build/model/case-result.js +4 -2
  29. package/build/model/failure.js +2 -1
  30. package/build/model/status.js +2 -1
  31. package/build/model/step-result.js +2 -1
  32. package/build/model/suite-result.js +2 -1
  33. package/build/model/test-result.js +2 -1
  34. package/build/model/testcase.js +2 -1
  35. package/build/model/testsuite.js +2 -1
  36. package/build/ox_modules/index.js +33 -13
  37. package/build/ox_modules/module-assert.js +24 -8
  38. package/build/ox_modules/module-date.js +8 -3
  39. package/build/ox_modules/module-db.js +28 -7
  40. package/build/ox_modules/module-email.js +36 -10
  41. package/build/ox_modules/module-eyes.js +46 -5
  42. package/build/ox_modules/module-http.js +102 -41
  43. package/build/ox_modules/module-log.js +22 -5
  44. package/build/ox_modules/module-mailinator.js +32 -10
  45. package/build/ox_modules/module-mob/commands/alertAccept.js +2 -1
  46. package/build/ox_modules/module-mob/commands/alertDismiss.js +2 -1
  47. package/build/ox_modules/module-mob/commands/assertAlert.js +6 -1
  48. package/build/ox_modules/module-mob/commands/assertText.js +3 -1
  49. package/build/ox_modules/module-mob/commands/assertTitle.js +4 -1
  50. package/build/ox_modules/module-mob/commands/assertValue.js +15 -9
  51. package/build/ox_modules/module-mob/commands/back.js +2 -1
  52. package/build/ox_modules/module-mob/commands/clear.js +4 -1
  53. package/build/ox_modules/module-mob/commands/click.js +4 -3
  54. package/build/ox_modules/module-mob/commands/clickHidden.js +9 -3
  55. package/build/ox_modules/module-mob/commands/clickLong.js +2 -1
  56. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +4 -1
  57. package/build/ox_modules/module-mob/commands/closeApp.js +2 -1
  58. package/build/ox_modules/module-mob/commands/debug.js +2 -2
  59. package/build/ox_modules/module-mob/commands/dragAndDrop.js +2 -1
  60. package/build/ox_modules/module-mob/commands/enableNetwork.js +12 -4
  61. package/build/ox_modules/module-mob/commands/execute.js +2 -1
  62. package/build/ox_modules/module-mob/commands/findElement.js +3 -1
  63. package/build/ox_modules/module-mob/commands/findElements.js +4 -1
  64. package/build/ox_modules/module-mob/commands/getAlertText.js +2 -1
  65. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +2 -1
  66. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +10 -1
  67. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +2 -1
  68. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +2 -1
  69. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +9 -1
  70. package/build/ox_modules/module-mob/commands/getDeviceTime.js +2 -1
  71. package/build/ox_modules/module-mob/commands/getLocation.js +2 -1
  72. package/build/ox_modules/module-mob/commands/getSource.js +2 -1
  73. package/build/ox_modules/module-mob/commands/getText.js +4 -1
  74. package/build/ox_modules/module-mob/commands/getTitle.js +2 -1
  75. package/build/ox_modules/module-mob/commands/getUrl.js +2 -1
  76. package/build/ox_modules/module-mob/commands/getValue.js +9 -5
  77. package/build/ox_modules/module-mob/commands/getWindowHandles.js +2 -1
  78. package/build/ox_modules/module-mob/commands/hideKeyboard.js +2 -1
  79. package/build/ox_modules/module-mob/commands/index.js +94 -19
  80. package/build/ox_modules/module-mob/commands/installApp.js +2 -1
  81. package/build/ox_modules/module-mob/commands/isAppInstalled.js +2 -1
  82. package/build/ox_modules/module-mob/commands/isCheckable.js +2 -1
  83. package/build/ox_modules/module-mob/commands/isChecked.js +2 -1
  84. package/build/ox_modules/module-mob/commands/isClickable.js +2 -1
  85. package/build/ox_modules/module-mob/commands/isExist.js +3 -1
  86. package/build/ox_modules/module-mob/commands/isSelected.js +2 -1
  87. package/build/ox_modules/module-mob/commands/isVisible.js +3 -1
  88. package/build/ox_modules/module-mob/commands/isWebViewContext.js +2 -1
  89. package/build/ox_modules/module-mob/commands/launchApp.js +2 -1
  90. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +2 -1
  91. package/build/ox_modules/module-mob/commands/open.js +3 -1
  92. package/build/ox_modules/module-mob/commands/pause.js +2 -1
  93. package/build/ox_modules/module-mob/commands/removeApp.js +2 -1
  94. package/build/ox_modules/module-mob/commands/resetApp.js +2 -1
  95. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +6 -1
  96. package/build/ox_modules/module-mob/commands/scrollIntoView.js +2 -1
  97. package/build/ox_modules/module-mob/commands/select.js +4 -1
  98. package/build/ox_modules/module-mob/commands/selectFrame.js +4 -1
  99. package/build/ox_modules/module-mob/commands/selectWindow.js +26 -5
  100. package/build/ox_modules/module-mob/commands/sendKeys.js +9 -6
  101. package/build/ox_modules/module-mob/commands/setContext.js +2 -1
  102. package/build/ox_modules/module-mob/commands/setNativeContext.js +2 -1
  103. package/build/ox_modules/module-mob/commands/setTimeout.js +2 -1
  104. package/build/ox_modules/module-mob/commands/setWebViewContext.js +6 -3
  105. package/build/ox_modules/module-mob/commands/shake.js +2 -1
  106. package/build/ox_modules/module-mob/commands/smsClickLink.js +2 -1
  107. package/build/ox_modules/module-mob/commands/smsGetText.js +6 -3
  108. package/build/ox_modules/module-mob/commands/swipe.js +2 -1
  109. package/build/ox_modules/module-mob/commands/swipeElement.js +2 -1
  110. package/build/ox_modules/module-mob/commands/swipeScreen.js +2 -1
  111. package/build/ox_modules/module-mob/commands/takeScreenshot.js +2 -1
  112. package/build/ox_modules/module-mob/commands/tap.js +2 -1
  113. package/build/ox_modules/module-mob/commands/type.js +7 -3
  114. package/build/ox_modules/module-mob/commands/unlockPattern.js +10 -9
  115. package/build/ox_modules/module-mob/commands/waitForExist.js +2 -1
  116. package/build/ox_modules/module-mob/commands/waitForInteractable.js +3 -1
  117. package/build/ox_modules/module-mob/commands/waitForVisible.js +2 -1
  118. package/build/ox_modules/module-mob.js +141 -72
  119. package/build/ox_modules/module-pdf.js +62 -23
  120. package/build/ox_modules/module-proxy.js +68 -8
  121. package/build/ox_modules/module-serial.js +32 -7
  122. package/build/ox_modules/module-shell.js +27 -8
  123. package/build/ox_modules/module-soap.js +47 -14
  124. package/build/ox_modules/module-twilio.js +53 -10
  125. package/build/ox_modules/module-utils.js +51 -16
  126. package/build/ox_modules/module-web/commands/alertAccept.js +2 -1
  127. package/build/ox_modules/module-web/commands/alertDismiss.js +2 -1
  128. package/build/ox_modules/module-web/commands/assertAlert.js +6 -1
  129. package/build/ox_modules/module-web/commands/assertExist.js +2 -1
  130. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +4 -1
  131. package/build/ox_modules/module-web/commands/assertSelectedValue.js +3 -1
  132. package/build/ox_modules/module-web/commands/assertText.js +3 -1
  133. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +6 -1
  134. package/build/ox_modules/module-web/commands/assertTextPresent.js +6 -1
  135. package/build/ox_modules/module-web/commands/assertTitle.js +3 -1
  136. package/build/ox_modules/module-web/commands/assertValue.js +3 -1
  137. package/build/ox_modules/module-web/commands/back.js +2 -1
  138. package/build/ox_modules/module-web/commands/clear.js +5 -1
  139. package/build/ox_modules/module-web/commands/click.js +13 -4
  140. package/build/ox_modules/module-web/commands/clickHidden.js +7 -2
  141. package/build/ox_modules/module-web/commands/closeWindow.js +2 -1
  142. package/build/ox_modules/module-web/commands/debug.js +2 -2
  143. package/build/ox_modules/module-web/commands/deleteCookies.js +2 -1
  144. package/build/ox_modules/module-web/commands/deselect.js +2 -1
  145. package/build/ox_modules/module-web/commands/doubleClick.js +9 -3
  146. package/build/ox_modules/module-web/commands/dragAndDrop.js +2 -1
  147. package/build/ox_modules/module-web/commands/execute.js +2 -1
  148. package/build/ox_modules/module-web/commands/fileBrowse.js +10 -4
  149. package/build/ox_modules/module-web/commands/findElement.js +3 -1
  150. package/build/ox_modules/module-web/commands/findElements.js +4 -1
  151. package/build/ox_modules/module-web/commands/fullscreenWindow.js +2 -1
  152. package/build/ox_modules/module-web/commands/getAlertText.js +2 -1
  153. package/build/ox_modules/module-web/commands/getAttribute.js +4 -1
  154. package/build/ox_modules/module-web/commands/getBrowserLogs.js +3 -1
  155. package/build/ox_modules/module-web/commands/getCookies.js +2 -1
  156. package/build/ox_modules/module-web/commands/getCssValue.js +4 -1
  157. package/build/ox_modules/module-web/commands/getElementCount.js +2 -1
  158. package/build/ox_modules/module-web/commands/getHTML.js +2 -1
  159. package/build/ox_modules/module-web/commands/getSource.js +2 -1
  160. package/build/ox_modules/module-web/commands/getText.js +4 -1
  161. package/build/ox_modules/module-web/commands/getTitle.js +2 -1
  162. package/build/ox_modules/module-web/commands/getUrl.js +2 -1
  163. package/build/ox_modules/module-web/commands/getValue.js +5 -1
  164. package/build/ox_modules/module-web/commands/getWindowHandles.js +2 -1
  165. package/build/ox_modules/module-web/commands/getWindowSize.js +2 -1
  166. package/build/ox_modules/module-web/commands/getXMLPageSource.js +5 -1
  167. package/build/ox_modules/module-web/commands/index.js +100 -19
  168. package/build/ox_modules/module-web/commands/isAlertPresent.js +2 -1
  169. package/build/ox_modules/module-web/commands/isChecked.js +2 -1
  170. package/build/ox_modules/module-web/commands/isExist.js +3 -1
  171. package/build/ox_modules/module-web/commands/isInteractable.js +2 -1
  172. package/build/ox_modules/module-web/commands/isSelected.js +2 -1
  173. package/build/ox_modules/module-web/commands/isVisible.js +3 -1
  174. package/build/ox_modules/module-web/commands/makeVisible.js +10 -2
  175. package/build/ox_modules/module-web/commands/maximizeWindow.js +2 -1
  176. package/build/ox_modules/module-web/commands/minimizeWindow.js +2 -1
  177. package/build/ox_modules/module-web/commands/newWindow.js +2 -1
  178. package/build/ox_modules/module-web/commands/open.js +4 -1
  179. package/build/ox_modules/module-web/commands/pause.js +2 -1
  180. package/build/ox_modules/module-web/commands/point.js +2 -1
  181. package/build/ox_modules/module-web/commands/pointJS.js +8 -2
  182. package/build/ox_modules/module-web/commands/refresh.js +2 -1
  183. package/build/ox_modules/module-web/commands/rightClick.js +8 -3
  184. package/build/ox_modules/module-web/commands/rightClickActions.js +2 -1
  185. package/build/ox_modules/module-web/commands/scrollToElement.js +2 -1
  186. package/build/ox_modules/module-web/commands/select.js +5 -1
  187. package/build/ox_modules/module-web/commands/selectFrame.js +3 -1
  188. package/build/ox_modules/module-web/commands/selectWindow.js +26 -5
  189. package/build/ox_modules/module-web/commands/sendKeys.js +6 -3
  190. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
  191. package/build/ox_modules/module-web/commands/setTimeout.js +2 -1
  192. package/build/ox_modules/module-web/commands/setWindowSize.js +2 -1
  193. package/build/ox_modules/module-web/commands/takeScreenshot.js +5 -3
  194. package/build/ox_modules/module-web/commands/type.js +5 -1
  195. package/build/ox_modules/module-web/commands/waitForAngular.js +11 -6
  196. package/build/ox_modules/module-web/commands/waitForExist.js +2 -1
  197. package/build/ox_modules/module-web/commands/waitForInteractable.js +2 -1
  198. package/build/ox_modules/module-web/commands/waitForNotExist.js +8 -1
  199. package/build/ox_modules/module-web/commands/waitForNotText.js +3 -1
  200. package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -1
  201. package/build/ox_modules/module-web/commands/waitForText.js +3 -1
  202. package/build/ox_modules/module-web/commands/waitForValue.js +3 -1
  203. package/build/ox_modules/module-web/commands/waitForVisible.js +2 -1
  204. package/build/ox_modules/module-web/commands/waitForWindow.js +21 -4
  205. package/build/ox_modules/module-web.js +181 -82
  206. package/build/ox_modules/module-win/commands/assertText.js +3 -1
  207. package/build/ox_modules/module-win/commands/assertTitle.js +4 -1
  208. package/build/ox_modules/module-win/commands/assertValue.js +15 -9
  209. package/build/ox_modules/module-win/commands/back.js +2 -1
  210. package/build/ox_modules/module-win/commands/clear.js +4 -1
  211. package/build/ox_modules/module-win/commands/click.js +2 -1
  212. package/build/ox_modules/module-win/commands/clickLong.js +2 -1
  213. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +4 -1
  214. package/build/ox_modules/module-win/commands/findElement.js +3 -1
  215. package/build/ox_modules/module-win/commands/findElements.js +4 -1
  216. package/build/ox_modules/module-win/commands/getAppiumLogs.js +2 -1
  217. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +2 -1
  218. package/build/ox_modules/module-win/commands/getLocation.js +2 -1
  219. package/build/ox_modules/module-win/commands/getSource.js +2 -1
  220. package/build/ox_modules/module-win/commands/getText.js +4 -1
  221. package/build/ox_modules/module-win/commands/getValue.js +9 -5
  222. package/build/ox_modules/module-win/commands/getWindowHandles.js +2 -1
  223. package/build/ox_modules/module-win/commands/index.js +43 -5
  224. package/build/ox_modules/module-win/commands/isCheckable.js +2 -1
  225. package/build/ox_modules/module-win/commands/isChecked.js +2 -1
  226. package/build/ox_modules/module-win/commands/isClickable.js +2 -1
  227. package/build/ox_modules/module-win/commands/isExist.js +3 -1
  228. package/build/ox_modules/module-win/commands/isSelected.js +2 -1
  229. package/build/ox_modules/module-win/commands/isVisible.js +3 -1
  230. package/build/ox_modules/module-win/commands/open.js +2 -1
  231. package/build/ox_modules/module-win/commands/pause.js +2 -1
  232. package/build/ox_modules/module-win/commands/rightClick.js +2 -1
  233. package/build/ox_modules/module-win/commands/selectWindow.js +15 -1
  234. package/build/ox_modules/module-win/commands/sendKeys.js +4 -1
  235. package/build/ox_modules/module-win/commands/setTimeout.js +2 -1
  236. package/build/ox_modules/module-win/commands/takeScreenshot.js +2 -1
  237. package/build/ox_modules/module-win/commands/tap.js +2 -1
  238. package/build/ox_modules/module-win/commands/type.js +4 -1
  239. package/build/ox_modules/module-win/commands/waitForExist.js +2 -1
  240. package/build/ox_modules/module-win/commands/waitForInteractable.js +4 -1
  241. package/build/ox_modules/module-win/commands/waitForVisible.js +2 -1
  242. package/build/ox_modules/module-win.js +87 -48
  243. package/build/ox_modules/utils.js +76 -22
  244. package/build/ox_reporters/reporter-excel.js +58 -1
  245. package/build/ox_reporters/reporter-html.js +28 -1
  246. package/build/ox_reporters/reporter-json.js +14 -1
  247. package/build/ox_reporters/reporter-junit.js +24 -1
  248. package/build/ox_reporters/reporter-pdf.js +19 -1
  249. package/build/ox_reporters/reporter-xml.js +17 -1
  250. package/build/ox_services/service-devtools/submodule-network.js +91 -4
  251. package/build/ox_services/service-devtools.js +23 -1
  252. package/build/reporter/FileReporterBase.js +44 -5
  253. package/build/reporter/ReportAggregator.js +65 -1
  254. package/build/reporter/ReporterBase.js +6 -1
  255. package/build/runners/WorkerProcess.js +99 -1
  256. package/build/runners/cucumber/CucumberEventListener.js +29 -4
  257. package/build/runners/cucumber/CucumberReporter.js +56 -1
  258. package/build/runners/cucumber/CucumberWorker.js +66 -1
  259. package/build/runners/cucumber/index.js +30 -1
  260. package/build/runners/cucumber/worker.js +18 -1
  261. package/build/runners/index.js +6 -1
  262. package/build/runners/oxygen/OxygenWorker.js +60 -3
  263. package/build/runners/oxygen/index.js +178 -17
  264. package/build/runners/oxygen/worker.js +25 -2
  265. package/package.json +8 -8
  266. package/.babelrc +0 -28
  267. package/.eslintrc.json +0 -25
  268. package/.husky/pre-commit +0 -4
  269. package/CONTRIBUTE.md +0 -1
@@ -4,29 +4,42 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
7
8
  require("source-map-support/register");
9
+
8
10
  var _fs = _interopRequireDefault(require("fs"));
11
+
9
12
  var _path = _interopRequireDefault(require("path"));
13
+
10
14
  var _moment = _interopRequireDefault(require("moment"));
15
+
11
16
  var _ReporterBase = _interopRequireDefault(require("./ReporterBase"));
17
+
12
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
13
20
  const REPORTS_FOLDER_NAME = 'reports';
14
21
  const REPORT_FILE_NAME = 'report';
22
+
15
23
  class FileReporterBase extends _ReporterBase.default {
16
24
  constructor(options) {
17
25
  super(options);
18
26
  }
27
+
19
28
  createFolderStructureAndFilePath(fileExtension) {
20
29
  if (!fileExtension || typeof fileExtension !== 'string' || fileExtension.length == 0) {
21
30
  throw new Error('"fileExtension" argument must be specified');
22
31
  }
32
+
23
33
  if (!fileExtension.startsWith('.')) {
24
34
  fileExtension = `.${fileExtension}`;
25
35
  }
36
+
26
37
  if (!this.options || !this.options.target || !this.options.reporting) {
27
38
  throw new Error('FileReporterBase is not properly initialized');
28
39
  }
40
+
29
41
  let resultsBaseFolder = null;
42
+
30
43
  if (this.options.cwd && this.options.reporting.outputDir) {
31
44
  if (_path.default.isAbsolute(this.options.reporting.outputDir)) {
32
45
  resultsBaseFolder = this.options.reporting.outputDir;
@@ -34,35 +47,44 @@ class FileReporterBase extends _ReporterBase.default {
34
47
  resultsBaseFolder = _path.default.resolve(this.options.cwd, this.options.reporting.outputDir);
35
48
  }
36
49
  } else if (this.options.target) {
37
- resultsBaseFolder = _path.default.join(this.options.target.cwd, REPORTS_FOLDER_NAME);
38
- } else {
39
- throw new Error('Error constructing reports path. Either srcFile or outputFolder is required.');
40
- }
50
+ resultsBaseFolder = _path.default.join(this.options.target.cwd, REPORTS_FOLDER_NAME);
51
+ } else {
52
+ throw new Error('Error constructing reports path. Either srcFile or outputFolder is required.');
53
+ }
54
+
41
55
  this.createFolderIfNotExists(resultsBaseFolder);
42
56
  let resultFolderPath = resultsBaseFolder;
57
+
43
58
  if (!this.options.reporting.outputDir) {
44
59
  const subFolderName = (0, _moment.default)().format('YYYY-MM-DD_HHmmss');
45
60
  resultFolderPath = _path.default.join(resultsBaseFolder, subFolderName);
46
61
  this.createFolderIfNotExists(resultFolderPath);
47
62
  }
63
+
48
64
  return _path.default.join(resultFolderPath, `${REPORT_FILE_NAME}${fileExtension}`);
49
65
  }
66
+
50
67
  createFolderIfNotExists(folderPath) {
51
68
  try {
52
69
  _fs.default.mkdirSync(folderPath);
53
70
  } catch (e) {
54
71
  if (e.code != 'EEXIST') throw e;
55
72
  }
73
+
56
74
  return folderPath;
57
75
  }
76
+
58
77
  replaceScreenshotsWithFiles(results, folderPath) {
59
78
  if (!Array.isArray(results)) {
60
79
  throw new Error('Invalid argument "results" - must be an array.');
61
80
  }
81
+
62
82
  if (!folderPath) {
63
83
  throw new Error('"folderPath" argument cannot be null or empty.');
64
84
  }
85
+
65
86
  const stepsWithScreenshot = [];
87
+
66
88
  for (let result of results) {
67
89
  for (let suite of result.suites) {
68
90
  for (let caze of suite.cases) {
@@ -70,21 +92,29 @@ class FileReporterBase extends _ReporterBase.default {
70
92
  }
71
93
  }
72
94
  }
95
+
73
96
  const screenshotFilePrefix = 'screenshot-';
74
97
  const screenshotFileSuffix = '.png';
98
+
75
99
  for (let i = 0; i < stepsWithScreenshot.length; i++) {
76
100
  let filename = screenshotFilePrefix + i + screenshotFileSuffix;
101
+
77
102
  let filepath = _path.default.join(folderPath, filename);
103
+
78
104
  let step = stepsWithScreenshot[i];
105
+
79
106
  _fs.default.writeFileSync(filepath, step.screenshot, 'base64');
107
+
80
108
  step.screenshotFile = filename;
81
109
  step.screenshot = null;
82
110
  }
83
111
  }
112
+
84
113
  formatTotalDuration(results) {
85
114
  if (!Array.isArray(results)) {
86
115
  throw new Error('Invalid argument "results" - must be an array.');
87
116
  }
117
+
88
118
  for (let result of results) {
89
119
  for (let suite of result.suites) {
90
120
  for (let caze of suite.cases) {
@@ -95,33 +125,42 @@ class FileReporterBase extends _ReporterBase.default {
95
125
  }
96
126
  }
97
127
  }
128
+
98
129
  _populateStepsWithScreenshots(steps, stepsWithScreenshot) {
99
130
  for (let step of steps) {
100
131
  if (step.screenshot) {
101
132
  stepsWithScreenshot.push(step);
102
133
  }
134
+
103
135
  if (step.steps) {
104
136
  this._populateStepsWithScreenshots(step.steps, stepsWithScreenshot);
105
137
  }
106
138
  }
107
139
  }
140
+
108
141
  formatDuration(miliseconds) {
109
142
  var seconds = miliseconds / 1000;
110
143
  var hh = Math.floor(seconds / 3600);
111
144
  var min = Math.floor((seconds - hh * 3600) / 60);
112
145
  var sec = seconds - hh * 3600 - min * 60;
113
146
  let result = '';
147
+
114
148
  if (hh) {
115
149
  result += `${hh.toFixed(0)} hr `;
116
150
  }
151
+
117
152
  if (min) {
118
153
  result += `${min.toFixed(0)} min `;
119
154
  }
155
+
120
156
  if (sec) {
121
157
  result += `${sec.toFixed(0)} sec`;
122
158
  }
159
+
123
160
  return result;
124
161
  }
162
+
125
163
  }
164
+
126
165
  exports.default = FileReporterBase;
127
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRVBPUlRTX0ZPTERFUl9OQU1FIiwiUkVQT1JUX0ZJTEVfTkFNRSIsIkZpbGVSZXBvcnRlckJhc2UiLCJSZXBvcnRlckJhc2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aCIsImZpbGVFeHRlbnNpb24iLCJsZW5ndGgiLCJFcnJvciIsInN0YXJ0c1dpdGgiLCJ0YXJnZXQiLCJyZXBvcnRpbmciLCJyZXN1bHRzQmFzZUZvbGRlciIsImN3ZCIsIm91dHB1dERpciIsInBhdGgiLCJpc0Fic29sdXRlIiwicmVzb2x2ZSIsImpvaW4iLCJjcmVhdGVGb2xkZXJJZk5vdEV4aXN0cyIsInJlc3VsdEZvbGRlclBhdGgiLCJzdWJGb2xkZXJOYW1lIiwibW9tZW50IiwiZm9ybWF0IiwiZm9sZGVyUGF0aCIsImZzIiwibWtkaXJTeW5jIiwiZSIsImNvZGUiLCJyZXBsYWNlU2NyZWVuc2hvdHNXaXRoRmlsZXMiLCJyZXN1bHRzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3RlcHNXaXRoU2NyZWVuc2hvdCIsInJlc3VsdCIsInN1aXRlIiwic3VpdGVzIiwiY2F6ZSIsImNhc2VzIiwiX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMiLCJzdGVwcyIsInNjcmVlbnNob3RGaWxlUHJlZml4Iiwic2NyZWVuc2hvdEZpbGVTdWZmaXgiLCJpIiwiZmlsZW5hbWUiLCJmaWxlcGF0aCIsInN0ZXAiLCJ3cml0ZUZpbGVTeW5jIiwic2NyZWVuc2hvdCIsInNjcmVlbnNob3RGaWxlIiwiZm9ybWF0VG90YWxEdXJhdGlvbiIsImR1cmF0aW9uIiwiZm9ybWF0RHVyYXRpb24iLCJwdXNoIiwibWlsaXNlY29uZHMiLCJzZWNvbmRzIiwiaGgiLCJNYXRoIiwiZmxvb3IiLCJtaW4iLCJzZWMiLCJ0b0ZpeGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcG9ydGVyL0ZpbGVSZXBvcnRlckJhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBPeHlnZW4gRmlsZSBSZXBvcnRlciBhYnN0cmFjdCBjbGFzc1xyXG4gKi9cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi9SZXBvcnRlckJhc2UnO1xyXG5cclxuY29uc3QgUkVQT1JUU19GT0xERVJfTkFNRSA9ICdyZXBvcnRzJztcclxuY29uc3QgUkVQT1JUX0ZJTEVfTkFNRSA9ICdyZXBvcnQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9ydGVyQmFzZSBleHRlbmRzIFJlcG9ydGVyQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlRXh0ZW5zaW9uIHx8IHR5cGVvZiBmaWxlRXh0ZW5zaW9uICE9PSAnc3RyaW5nJyB8fCBmaWxlRXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJmaWxlRXh0ZW5zaW9uXCIgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgZmlsZUV4dGVuc2lvbiBkb2Vzbid0IHN0YXJ0IHdpdGggJy4nLCBhZGQgaXQgYXV0b21hdGljYWxseVxyXG4gICAgICAgIGlmICghZmlsZUV4dGVuc2lvbi5zdGFydHNXaXRoKCcuJykpIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGAuJHtmaWxlRXh0ZW5zaW9ufWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICF0aGlzLm9wdGlvbnMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZVJlcG9ydGVyQmFzZSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdHNCYXNlRm9sZGVyID0gbnVsbDtcclxuICAgICAgICAvLyBwcm9kdWNlIHJlcG9ydCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguIHdpbGwgb3ZlcndyaXRlIGFueSBleGlzdGluZyByZXBvcnRzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3dkICYmIHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUodGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzQmFzZUZvbGRlciA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c0Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmN3ZCwgdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIGRhdGUtdGltZSBmb2xkZXIgc3RydWN0dXJlIGZvciByZXBvcnQgZmlsZXNcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50YXJnZXQuY3dkLCBSRVBPUlRTX0ZPTERFUl9OQU1FKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyByZXBvcnRzIHBhdGguIEVpdGhlciBzcmNGaWxlIG9yIG91dHB1dEZvbGRlciBpcyByZXF1aXJlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHJlc3VsdHMgbWFpbiBmb2xkZXIgKHdoZXJlIGFsbCB0aGUgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUgYXJlIHN0b3JlZClcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdHNCYXNlRm9sZGVyKTtcclxuICAgICAgICBsZXQgcmVzdWx0Rm9sZGVyUGF0aCA9IHJlc3VsdHNCYXNlRm9sZGVyO1xyXG4gICAgICAgIC8vIGNyZWF0ZSB0aW1lc3RhbXAtYmFzZWQgc3ViIGZvbGRlciBmb3IgdGhlIGN1cnJlbnQgcmVzdWx0cyBpZiBcIm91dHB1dERpclwiIHByb3BlcnR5IGlzIE5PVCBzcGVjaWZpZWRcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlck5hbWUgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERfSEhtbXNzJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdEZvbGRlclBhdGggPSBwYXRoLmpvaW4ocmVzdWx0c0Jhc2VGb2xkZXIsIHN1YkZvbGRlck5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdEZvbGRlclBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKHJlc3VsdEZvbGRlclBhdGgsIGAke1JFUE9SVF9GSUxFX05BTUV9JHtmaWxlRXh0ZW5zaW9ufWApO1xyXG5cclxuICAgIH1cclxuICAgIGNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKGZvbGRlclBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIGUuY29kZSAhPSAnRUVYSVNUJyApIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmb2xkZXJQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmUgYWxsIHNjcmVlbnNob3RzIHRvIGZpbGVzIGFuZCByZXBsYWNlIHNjcmVlbnNob3QgY29udGVudCB3aXRoIGZpbGUgcGF0aCBpbiB0aGUgcmVzdWx0IEpTT04gYmVmb3JlIHNlcmlhbGl6YXRpb25cclxuICAgIHJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyhyZXN1bHRzLCBmb2xkZXJQYXRoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBcInJlc3VsdHNcIiAtIG11c3QgYmUgYW4gYXJyYXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm9sZGVyUGF0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiZm9sZGVyUGF0aFwiIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGVwc1dpdGhTY3JlZW5zaG90ID0gW107XHJcbiAgICAgICAgLy8gbWFwIHN0ZXBzIHdpdGggbm9uIGVtcHR5IHNjcmVlbnNob3QgYXR0cmlidXRlXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoY2F6ZS5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdEZpbGVQcmVmaXggPSAnc2NyZWVuc2hvdC0nO1xyXG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RGaWxlU3VmZml4ID0gJy5wbmcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpPHN0ZXBzV2l0aFNjcmVlbnNob3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gc2NyZWVuc2hvdEZpbGVQcmVmaXggKyBpICsgc2NyZWVuc2hvdEZpbGVTdWZmaXg7XHJcbiAgICAgICAgICAgIGxldCBmaWxlcGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGxldCBzdGVwID0gc3RlcHNXaXRoU2NyZWVuc2hvdFtpXTtcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgc3RlcC5zY3JlZW5zaG90LCAnYmFzZTY0Jyk7XHJcbiAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdEZpbGUgPSBmaWxlbmFtZTtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbnVsbDsgLy8gZG9uJ3Qgc2F2ZSBiYXNlNjQgc2NyZWVuc2hvdCBkYXRlIHRvIHRoZSBmaWxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZm9ybWF0IHRvdGFsIGR1cmF0aW9uIGxpa2UgOiA1Ni4yIHNlYyAvIDMxIG1pbiA1OSBzZWMgLyAxIGhyIDMxIG1pbiA1OSBzZWNcclxuICAgIGZvcm1hdFRvdGFsRHVyYXRpb24ocmVzdWx0cykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJyZXN1bHRzXCIgLSBtdXN0IGJlIGFuIGFycmF5LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXAgb2YgY2F6ZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmR1cmF0aW9uID0gdGhpcy5mb3JtYXREdXJhdGlvbihzdGVwLmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhzdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCkge1xyXG4gICAgICAgIGZvciAobGV0IHN0ZXAgb2Ygc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0ZXAuc2NyZWVuc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHNXaXRoU2NyZWVuc2hvdC5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjaGlsZCBzdGVwcyB0b29cclxuICAgICAgICAgICAgaWYgKHN0ZXAuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoc3RlcC5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtYXREdXJhdGlvbihtaWxpc2Vjb25kcykge1xyXG4gICAgICAgIHZhciBzZWNvbmRzID0gbWlsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICAgIHZhciBoaCAgID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XHJcbiAgICAgICAgdmFyIG1pbiA9IE1hdGguZmxvb3IoKHNlY29uZHMgLSAoaGggKiAzNjAwKSkgLyA2MCk7XHJcbiAgICAgICAgdmFyIHNlYyA9IHNlY29uZHMgLSAoaGggKiAzNjAwKSAtIChtaW4gKiA2MCk7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGhoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHtoaC50b0ZpeGVkKDApfSBociBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHttaW4udG9GaXhlZCgwKX0gbWluIGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlYy50b0ZpeGVkKDApfSBzZWNgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFFQTtBQUEwQztBQUUxQyxNQUFNQSxtQkFBbUIsR0FBRyxTQUFTO0FBQ3JDLE1BQU1DLGdCQUFnQixHQUFHLFFBQVE7QUFFbEIsTUFBTUMsZ0JBQWdCLFNBQVNDLHFCQUFZLENBQUM7RUFDdkRDLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFO0lBQ2pCLEtBQUssQ0FBQ0EsT0FBTyxDQUFDO0VBQ2xCO0VBQ0FDLGdDQUFnQyxDQUFDQyxhQUFhLEVBQUU7SUFDNUMsSUFBSSxDQUFDQSxhQUFhLElBQUksT0FBT0EsYUFBYSxLQUFLLFFBQVEsSUFBSUEsYUFBYSxDQUFDQyxNQUFNLElBQUksQ0FBQyxFQUFFO01BQ2xGLE1BQU0sSUFBSUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDO0lBQ2pFO0lBRUEsSUFBSSxDQUFDRixhQUFhLENBQUNHLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNoQ0gsYUFBYSxHQUFJLElBQUdBLGFBQWMsRUFBQztJQUN2QztJQUNBLElBQUksQ0FBQyxJQUFJLENBQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQ0EsT0FBTyxDQUFDTSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUNOLE9BQU8sQ0FBQ08sU0FBUyxFQUFFO01BQ2xFLE1BQU0sSUFBSUgsS0FBSyxDQUFDLDhDQUE4QyxDQUFDO0lBQ25FO0lBQ0EsSUFBSUksaUJBQWlCLEdBQUcsSUFBSTtJQUU1QixJQUFJLElBQUksQ0FBQ1IsT0FBTyxDQUFDUyxHQUFHLElBQUksSUFBSSxDQUFDVCxPQUFPLENBQUNPLFNBQVMsQ0FBQ0csU0FBUyxFQUFFO01BQ3RELElBQUlDLGFBQUksQ0FBQ0MsVUFBVSxDQUFDLElBQUksQ0FBQ1osT0FBTyxDQUFDTyxTQUFTLENBQUNHLFNBQVMsQ0FBQyxFQUFFO1FBQ25ERixpQkFBaUIsR0FBRyxJQUFJLENBQUNSLE9BQU8sQ0FBQ08sU0FBUyxDQUFDRyxTQUFTO01BQ3hELENBQUMsTUFDSTtRQUNERixpQkFBaUIsR0FBR0csYUFBSSxDQUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDYixPQUFPLENBQUNTLEdBQUcsRUFBRSxJQUFJLENBQUNULE9BQU8sQ0FBQ08sU0FBUyxDQUFDRyxTQUFTLENBQUM7TUFDeEY7SUFDSixDQUFDLE1BRUksSUFBSSxJQUFJLENBQUNWLE9BQU8sQ0FBQ00sTUFBTSxFQUFFO01BQzFCRSxpQkFBaUIsR0FBR0csYUFBSSxDQUFDRyxJQUFJLENBQUMsSUFBSSxDQUFDZCxPQUFPLENBQUNNLE1BQU0sQ0FBQ0csR0FBRyxFQUFFZCxtQkFBbUIsQ0FBQztJQUMvRSxDQUFDLE1BQU07TUFDSCxNQUFNLElBQUlTLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQztJQUNuRztJQUVBLElBQUksQ0FBQ1csdUJBQXVCLENBQUNQLGlCQUFpQixDQUFDO0lBQy9DLElBQUlRLGdCQUFnQixHQUFHUixpQkFBaUI7SUFFeEMsSUFBSSxDQUFDLElBQUksQ0FBQ1IsT0FBTyxDQUFDTyxTQUFTLENBQUNHLFNBQVMsRUFBRTtNQUNuQyxNQUFNTyxhQUFhLEdBQUcsSUFBQUMsZUFBTSxHQUFFLENBQUNDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztNQUMxREgsZ0JBQWdCLEdBQUdMLGFBQUksQ0FBQ0csSUFBSSxDQUFDTixpQkFBaUIsRUFBRVMsYUFBYSxDQUFDO01BQzlELElBQUksQ0FBQ0YsdUJBQXVCLENBQUNDLGdCQUFnQixDQUFDO0lBQ2xEO0lBQ0EsT0FBT0wsYUFBSSxDQUFDRyxJQUFJLENBQUNFLGdCQUFnQixFQUFHLEdBQUVwQixnQkFBaUIsR0FBRU0sYUFBYyxFQUFDLENBQUM7RUFFN0U7RUFDQWEsdUJBQXVCLENBQUNLLFVBQVUsRUFBRTtJQUNoQyxJQUFJO01BQ0FDLFdBQUUsQ0FBQ0MsU0FBUyxDQUFDRixVQUFVLENBQUM7SUFDNUIsQ0FBQyxDQUFDLE9BQU9HLENBQUMsRUFBRTtNQUNSLElBQUtBLENBQUMsQ0FBQ0MsSUFBSSxJQUFJLFFBQVEsRUFBRyxNQUFNRCxDQUFDO0lBQ3JDO0lBQ0EsT0FBT0gsVUFBVTtFQUNyQjtFQUdBSywyQkFBMkIsQ0FBQ0MsT0FBTyxFQUFFTixVQUFVLEVBQUU7SUFDN0MsSUFBSSxDQUFDTyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0YsT0FBTyxDQUFDLEVBQUU7TUFDekIsTUFBTSxJQUFJdEIsS0FBSyxDQUFDLGdEQUFnRCxDQUFDO0lBQ3JFO0lBQ0EsSUFBSSxDQUFDZ0IsVUFBVSxFQUFFO01BQ2IsTUFBTSxJQUFJaEIsS0FBSyxDQUFDLGdEQUFnRCxDQUFDO0lBQ3JFO0lBQ0EsTUFBTXlCLG1CQUFtQixHQUFHLEVBQUU7SUFFOUIsS0FBSyxJQUFJQyxNQUFNLElBQUlKLE9BQU8sRUFBRTtNQUN4QixLQUFLLElBQUlLLEtBQUssSUFBSUQsTUFBTSxDQUFDRSxNQUFNLEVBQUU7UUFDN0IsS0FBSyxJQUFJQyxJQUFJLElBQUlGLEtBQUssQ0FBQ0csS0FBSyxFQUFFO1VBQzFCLElBQUksQ0FBQ0MsNkJBQTZCLENBQUNGLElBQUksQ0FBQ0csS0FBSyxFQUFFUCxtQkFBbUIsQ0FBQztRQUN2RTtNQUNKO0lBQ0o7SUFDQSxNQUFNUSxvQkFBb0IsR0FBRyxhQUFhO0lBQzFDLE1BQU1DLG9CQUFvQixHQUFHLE1BQU07SUFDbkMsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUNWLG1CQUFtQixDQUFDMUIsTUFBTSxFQUFFb0MsQ0FBQyxFQUFFLEVBQUU7TUFDL0MsSUFBSUMsUUFBUSxHQUFHSCxvQkFBb0IsR0FBR0UsQ0FBQyxHQUFHRCxvQkFBb0I7TUFDOUQsSUFBSUcsUUFBUSxHQUFHOUIsYUFBSSxDQUFDRyxJQUFJLENBQUNNLFVBQVUsRUFBRW9CLFFBQVEsQ0FBQztNQUM5QyxJQUFJRSxJQUFJLEdBQUdiLG1CQUFtQixDQUFDVSxDQUFDLENBQUM7TUFDakNsQixXQUFFLENBQUNzQixhQUFhLENBQUNGLFFBQVEsRUFBRUMsSUFBSSxDQUFDRSxVQUFVLEVBQUUsUUFBUSxDQUFDO01BQ3JERixJQUFJLENBQUNHLGNBQWMsR0FBR0wsUUFBUTtNQUM5QkUsSUFBSSxDQUFDRSxVQUFVLEdBQUcsSUFBSTtJQUMxQjtFQUNKO0VBRUFFLG1CQUFtQixDQUFDcEIsT0FBTyxFQUFFO0lBQ3pCLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUNGLE9BQU8sQ0FBQyxFQUFFO01BQ3pCLE1BQU0sSUFBSXRCLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQztJQUNyRTtJQUVBLEtBQUssSUFBSTBCLE1BQU0sSUFBSUosT0FBTyxFQUFFO01BQ3hCLEtBQUssSUFBSUssS0FBSyxJQUFJRCxNQUFNLENBQUNFLE1BQU0sRUFBRTtRQUM3QixLQUFLLElBQUlDLElBQUksSUFBSUYsS0FBSyxDQUFDRyxLQUFLLEVBQUU7VUFDMUIsS0FBSyxJQUFJUSxJQUFJLElBQUlULElBQUksQ0FBQ0csS0FBSyxFQUFFO1lBQ3pCTSxJQUFJLENBQUNLLFFBQVEsR0FBRyxJQUFJLENBQUNDLGNBQWMsQ0FBQ04sSUFBSSxDQUFDSyxRQUFRLENBQUM7VUFDdEQ7UUFDSjtNQUNKO0lBQ0o7RUFDSjtFQUNBWiw2QkFBNkIsQ0FBQ0MsS0FBSyxFQUFFUCxtQkFBbUIsRUFBRTtJQUN0RCxLQUFLLElBQUlhLElBQUksSUFBSU4sS0FBSyxFQUFFO01BQ3BCLElBQUlNLElBQUksQ0FBQ0UsVUFBVSxFQUFFO1FBQ2pCZixtQkFBbUIsQ0FBQ29CLElBQUksQ0FBQ1AsSUFBSSxDQUFDO01BQ2xDO01BRUEsSUFBSUEsSUFBSSxDQUFDTixLQUFLLEVBQUU7UUFDWixJQUFJLENBQUNELDZCQUE2QixDQUFDTyxJQUFJLENBQUNOLEtBQUssRUFBRVAsbUJBQW1CLENBQUM7TUFDdkU7SUFDSjtFQUNKO0VBQ0FtQixjQUFjLENBQUNFLFdBQVcsRUFBRTtJQUN4QixJQUFJQyxPQUFPLEdBQUdELFdBQVcsR0FBRyxJQUFJO0lBQ2hDLElBQUlFLEVBQUUsR0FBS0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDckMsSUFBSUksR0FBRyxHQUFHRixJQUFJLENBQUNDLEtBQUssQ0FBQyxDQUFDSCxPQUFPLEdBQUlDLEVBQUUsR0FBRyxJQUFLLElBQUksRUFBRSxDQUFDO0lBQ2xELElBQUlJLEdBQUcsR0FBR0wsT0FBTyxHQUFJQyxFQUFFLEdBQUcsSUFBSyxHQUFJRyxHQUFHLEdBQUcsRUFBRztJQUU1QyxJQUFJekIsTUFBTSxHQUFHLEVBQUU7SUFFZixJQUFJc0IsRUFBRSxFQUFFO01BQ0p0QixNQUFNLElBQUssR0FBRXNCLEVBQUUsQ0FBQ0ssT0FBTyxDQUFDLENBQUMsQ0FBRSxNQUFLO0lBQ3BDO0lBQ0EsSUFBSUYsR0FBRyxFQUFFO01BQ0x6QixNQUFNLElBQUssR0FBRXlCLEdBQUcsQ0FBQ0UsT0FBTyxDQUFDLENBQUMsQ0FBRSxPQUFNO0lBQ3RDO0lBQ0EsSUFBSUQsR0FBRyxFQUFFO01BQ0wxQixNQUFNLElBQUssR0FBRTBCLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBRSxNQUFLO0lBQ3JDO0lBRUEsT0FBTzNCLE1BQU07RUFDakI7QUFDSjtBQUFDIn0=
166
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9GaWxlUmVwb3J0ZXJCYXNlLmpzIl0sIm5hbWVzIjpbIlJFUE9SVFNfRk9MREVSX05BTUUiLCJSRVBPUlRfRklMRV9OQU1FIiwiRmlsZVJlcG9ydGVyQmFzZSIsIlJlcG9ydGVyQmFzZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNyZWF0ZUZvbGRlclN0cnVjdHVyZUFuZEZpbGVQYXRoIiwiZmlsZUV4dGVuc2lvbiIsImxlbmd0aCIsIkVycm9yIiwic3RhcnRzV2l0aCIsInRhcmdldCIsInJlcG9ydGluZyIsInJlc3VsdHNCYXNlRm9sZGVyIiwiY3dkIiwib3V0cHV0RGlyIiwicGF0aCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwiam9pbiIsImNyZWF0ZUZvbGRlcklmTm90RXhpc3RzIiwicmVzdWx0Rm9sZGVyUGF0aCIsInN1YkZvbGRlck5hbWUiLCJmb3JtYXQiLCJmb2xkZXJQYXRoIiwiZnMiLCJta2RpclN5bmMiLCJlIiwiY29kZSIsInJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyIsInJlc3VsdHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdGVwc1dpdGhTY3JlZW5zaG90IiwicmVzdWx0Iiwic3VpdGUiLCJzdWl0ZXMiLCJjYXplIiwiY2FzZXMiLCJfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyIsInN0ZXBzIiwic2NyZWVuc2hvdEZpbGVQcmVmaXgiLCJzY3JlZW5zaG90RmlsZVN1ZmZpeCIsImkiLCJmaWxlbmFtZSIsImZpbGVwYXRoIiwic3RlcCIsIndyaXRlRmlsZVN5bmMiLCJzY3JlZW5zaG90Iiwic2NyZWVuc2hvdEZpbGUiLCJmb3JtYXRUb3RhbER1cmF0aW9uIiwiZHVyYXRpb24iLCJmb3JtYXREdXJhdGlvbiIsInB1c2giLCJtaWxpc2Vjb25kcyIsInNlY29uZHMiLCJoaCIsIk1hdGgiLCJmbG9vciIsIm1pbiIsInNlYyIsInRvRml4ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztB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ckMsQ0FBVjtBQUNBLFFBQUlJLEdBQUcsR0FBR0wsT0FBTyxHQUFJQyxFQUFFLEdBQUcsSUFBaEIsR0FBeUJHLEdBQUcsR0FBRyxFQUF6QztBQUVBLFFBQUl6QixNQUFNLEdBQUcsRUFBYjs7QUFFQSxRQUFJc0IsRUFBSixFQUFRO0FBQ0p0QixNQUFBQSxNQUFNLElBQUssR0FBRXNCLEVBQUUsQ0FBQ0ssT0FBSCxDQUFXLENBQVgsQ0FBYyxNQUEzQjtBQUNIOztBQUNELFFBQUlGLEdBQUosRUFBUztBQUNMekIsTUFBQUEsTUFBTSxJQUFLLEdBQUV5QixHQUFHLENBQUNFLE9BQUosQ0FBWSxDQUFaLENBQWUsT0FBNUI7QUFDSDs7QUFDRCxRQUFJRCxHQUFKLEVBQVM7QUFDTDFCLE1BQUFBLE1BQU0sSUFBSyxHQUFFMEIsR0FBRyxDQUFDQyxPQUFKLENBQVksQ0FBWixDQUFlLE1BQTVCO0FBQ0g7O0FBRUQsV0FBTzNCLE1BQVA7QUFDSDs7QUE5SHNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBPeHlnZW4gRmlsZSBSZXBvcnRlciBhYnN0cmFjdCBjbGFzc1xyXG4gKi9cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi9SZXBvcnRlckJhc2UnO1xyXG5cclxuY29uc3QgUkVQT1JUU19GT0xERVJfTkFNRSA9ICdyZXBvcnRzJztcclxuY29uc3QgUkVQT1JUX0ZJTEVfTkFNRSA9ICdyZXBvcnQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9ydGVyQmFzZSBleHRlbmRzIFJlcG9ydGVyQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlRXh0ZW5zaW9uIHx8IHR5cGVvZiBmaWxlRXh0ZW5zaW9uICE9PSAnc3RyaW5nJyB8fCBmaWxlRXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJmaWxlRXh0ZW5zaW9uXCIgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgZmlsZUV4dGVuc2lvbiBkb2Vzbid0IHN0YXJ0IHdpdGggJy4nLCBhZGQgaXQgYXV0b21hdGljYWxseVxyXG4gICAgICAgIGlmICghZmlsZUV4dGVuc2lvbi5zdGFydHNXaXRoKCcuJykpIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGAuJHtmaWxlRXh0ZW5zaW9ufWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICF0aGlzLm9wdGlvbnMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZVJlcG9ydGVyQmFzZSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdHNCYXNlRm9sZGVyID0gbnVsbDtcclxuICAgICAgICAvLyBwcm9kdWNlIHJlcG9ydCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguIHdpbGwgb3ZlcndyaXRlIGFueSBleGlzdGluZyByZXBvcnRzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3dkICYmIHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUodGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzQmFzZUZvbGRlciA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c0Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmN3ZCwgdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIGRhdGUtdGltZSBmb2xkZXIgc3RydWN0dXJlIGZvciByZXBvcnQgZmlsZXNcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50YXJnZXQuY3dkLCBSRVBPUlRTX0ZPTERFUl9OQU1FKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyByZXBvcnRzIHBhdGguIEVpdGhlciBzcmNGaWxlIG9yIG91dHB1dEZvbGRlciBpcyByZXF1aXJlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHJlc3VsdHMgbWFpbiBmb2xkZXIgKHdoZXJlIGFsbCB0aGUgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUgYXJlIHN0b3JlZClcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdHNCYXNlRm9sZGVyKTtcclxuICAgICAgICBsZXQgcmVzdWx0Rm9sZGVyUGF0aCA9IHJlc3VsdHNCYXNlRm9sZGVyO1xyXG4gICAgICAgIC8vIGNyZWF0ZSB0aW1lc3RhbXAtYmFzZWQgc3ViIGZvbGRlciBmb3IgdGhlIGN1cnJlbnQgcmVzdWx0cyBpZiBcIm91dHB1dERpclwiIHByb3BlcnR5IGlzIE5PVCBzcGVjaWZpZWRcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlck5hbWUgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERfSEhtbXNzJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdEZvbGRlclBhdGggPSBwYXRoLmpvaW4ocmVzdWx0c0Jhc2VGb2xkZXIsIHN1YkZvbGRlck5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdEZvbGRlclBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKHJlc3VsdEZvbGRlclBhdGgsIGAke1JFUE9SVF9GSUxFX05BTUV9JHtmaWxlRXh0ZW5zaW9ufWApO1xyXG5cclxuICAgIH1cclxuICAgIGNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKGZvbGRlclBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIGUuY29kZSAhPSAnRUVYSVNUJyApIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmb2xkZXJQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmUgYWxsIHNjcmVlbnNob3RzIHRvIGZpbGVzIGFuZCByZXBsYWNlIHNjcmVlbnNob3QgY29udGVudCB3aXRoIGZpbGUgcGF0aCBpbiB0aGUgcmVzdWx0IEpTT04gYmVmb3JlIHNlcmlhbGl6YXRpb25cclxuICAgIHJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyhyZXN1bHRzLCBmb2xkZXJQYXRoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBcInJlc3VsdHNcIiAtIG11c3QgYmUgYW4gYXJyYXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm9sZGVyUGF0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiZm9sZGVyUGF0aFwiIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGVwc1dpdGhTY3JlZW5zaG90ID0gW107XHJcbiAgICAgICAgLy8gbWFwIHN0ZXBzIHdpdGggbm9uIGVtcHR5IHNjcmVlbnNob3QgYXR0cmlidXRlXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoY2F6ZS5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdEZpbGVQcmVmaXggPSAnc2NyZWVuc2hvdC0nO1xyXG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RGaWxlU3VmZml4ID0gJy5wbmcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpPHN0ZXBzV2l0aFNjcmVlbnNob3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gc2NyZWVuc2hvdEZpbGVQcmVmaXggKyBpICsgc2NyZWVuc2hvdEZpbGVTdWZmaXg7XHJcbiAgICAgICAgICAgIGxldCBmaWxlcGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGxldCBzdGVwID0gc3RlcHNXaXRoU2NyZWVuc2hvdFtpXTtcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgc3RlcC5zY3JlZW5zaG90LCAnYmFzZTY0Jyk7XHJcbiAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdEZpbGUgPSBmaWxlbmFtZTtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbnVsbDsgLy8gZG9uJ3Qgc2F2ZSBiYXNlNjQgc2NyZWVuc2hvdCBkYXRlIHRvIHRoZSBmaWxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZm9ybWF0IHRvdGFsIGR1cmF0aW9uIGxpa2UgOiA1Ni4yIHNlYyAvIDMxIG1pbiA1OSBzZWMgLyAxIGhyIDMxIG1pbiA1OSBzZWNcclxuICAgIGZvcm1hdFRvdGFsRHVyYXRpb24ocmVzdWx0cykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJyZXN1bHRzXCIgLSBtdXN0IGJlIGFuIGFycmF5LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXAgb2YgY2F6ZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmR1cmF0aW9uID0gdGhpcy5mb3JtYXREdXJhdGlvbihzdGVwLmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhzdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCkge1xyXG4gICAgICAgIGZvciAobGV0IHN0ZXAgb2Ygc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0ZXAuc2NyZWVuc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHNXaXRoU2NyZWVuc2hvdC5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjaGlsZCBzdGVwcyB0b29cclxuICAgICAgICAgICAgaWYgKHN0ZXAuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoc3RlcC5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtYXREdXJhdGlvbihtaWxpc2Vjb25kcykge1xyXG4gICAgICAgIHZhciBzZWNvbmRzID0gbWlsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICAgIHZhciBoaCAgID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XHJcbiAgICAgICAgdmFyIG1pbiA9IE1hdGguZmxvb3IoKHNlY29uZHMgLSAoaGggKiAzNjAwKSkgLyA2MCk7XHJcbiAgICAgICAgdmFyIHNlYyA9IHNlY29uZHMgLSAoaGggKiAzNjAwKSAtIChtaW4gKiA2MCk7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGhoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHtoaC50b0ZpeGVkKDApfSBociBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHttaW4udG9GaXhlZCgwKX0gbWluIGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlYy50b0ZpeGVkKDApfSBzZWNgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -4,21 +4,37 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+
7
8
  require("source-map-support/register");
9
+
8
10
  var _events = require("events");
11
+
9
12
  var _path = _interopRequireDefault(require("path"));
13
+
10
14
  var _testResult = _interopRequireDefault(require("../model/test-result"));
15
+
11
16
  var _util = _interopRequireDefault(require("../lib/util"));
17
+
12
18
  var _when = require("when");
19
+
13
20
  var _reporterJson = _interopRequireDefault(require("../ox_reporters/reporter-json"));
21
+
14
22
  var _reporterJunit = _interopRequireDefault(require("../ox_reporters/reporter-junit"));
23
+
15
24
  var _reporterHtml = _interopRequireDefault(require("../ox_reporters/reporter-html"));
25
+
16
26
  var _reporterExcel = _interopRequireDefault(require("../ox_reporters/reporter-excel"));
27
+
17
28
  var _reporterPdf = _interopRequireDefault(require("../ox_reporters/reporter-pdf"));
29
+
18
30
  var _reporterXml = _interopRequireDefault(require("../ox_reporters/reporter-xml"));
31
+
19
32
  var _helper = _interopRequireDefault(require("../errors/helper"));
33
+
20
34
  var _status = _interopRequireDefault(require("../model/status"));
35
+
21
36
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+
22
38
  const Reporters = {
23
39
  json: _reporterJson.default,
24
40
  junit: _reporterJunit.default,
@@ -29,6 +45,7 @@ const Reporters = {
29
45
  };
30
46
  const DEFAULT_TEST_NAME = 'Oxygen Test';
31
47
  const DEFAULT_REPORTERS = [];
48
+
32
49
  class ReportAggregator extends _events.EventEmitter {
33
50
  constructor(options) {
34
51
  super();
@@ -37,52 +54,67 @@ class ReportAggregator extends _events.EventEmitter {
37
54
  this.options = options;
38
55
  this.instantiateReporters();
39
56
  }
57
+
40
58
  getExitCode() {
41
59
  let exitCode = 0;
60
+
42
61
  if (this.results && Array.isArray(this.results) && this.results.length > 0) {
43
62
  const testFailded = this.results.find(item => item.status === 'failed');
63
+
44
64
  if (testFailded) {
45
65
  exitCode = -1;
46
66
  }
47
67
  } else {
48
68
  exitCode = -1;
49
69
  }
70
+
50
71
  return exitCode;
51
72
  }
73
+
52
74
  instantiateReporters() {
53
75
  this.reporters = [];
54
76
  const generalReportingOpts = this.options.reporting || {};
77
+
55
78
  for (let reporter of generalReportingOpts.reporters || DEFAULT_REPORTERS) {
56
79
  if (typeof reporter !== 'string' && !Object.prototype.hasOwnProperty.call(reporter, 'name')) {
57
80
  continue;
58
81
  }
82
+
59
83
  const reporterName = typeof reporter === 'string' ? reporter : reporter.name;
60
84
  const reporterOpts = typeof reporter === 'object' ? reporter : generalReportingOpts;
85
+
61
86
  if (Object.prototype.hasOwnProperty.call(Reporters, reporterName)) {
62
87
  this.reporters.push(new Reporters[reporterName](this.options, reporterOpts));
63
88
  }
64
89
  }
65
90
  }
91
+
66
92
  generateReports() {
67
93
  if (!Array.isArray(this.reporters) || this.reporters.length == 0) {
68
94
  return false;
69
95
  }
96
+
70
97
  for (let reporter of this.reporters) {
71
98
  const reportPath = reporter.generate(this.results);
72
99
  console.log(`Your report is ready: ${reportPath}`);
73
100
  }
101
+
74
102
  return true;
75
103
  }
104
+
76
105
  async waitForResult(rid) {
77
106
  if (!rid || !this.runnerEndPromises[rid]) {
78
107
  return null;
79
108
  }
109
+
80
110
  return this.runnerEndPromises[rid];
81
111
  }
112
+
82
113
  onRunnerStart(rid, opts, caps) {
83
114
  if (!rid) {
84
115
  throw new Error('"rid" cannot be empty.');
85
116
  }
117
+
86
118
  const testResult = new _testResult.default();
87
119
  testResult.rid = rid;
88
120
  testResult.name = opts.name || DEFAULT_TEST_NAME;
@@ -99,12 +131,15 @@ class ReportAggregator extends _events.EventEmitter {
99
131
  caps
100
132
  });
101
133
  }
134
+
102
135
  onRunnerEnd(rid, finalResult, fatalError) {
103
136
  const testResult = this.results.find(x => x.rid === rid);
137
+
104
138
  if (testResult) {
105
139
  testResult.endTime = _util.default.getTimeStamp();
106
140
  testResult.duration = testResult.endTime - testResult.startTime;
107
141
  testResult.status = fatalError ? _status.default.FAILED : testResult.suites.some(x => x.status === _status.default.FAILED) ? _status.default.FAILED : _status.default.PASSED;
142
+
108
143
  if (testResult.status === _status.default.FAILED) {
109
144
  if (fatalError) {
110
145
  testResult.failure = fatalError instanceof Error ? _helper.default.getFailureFromError(fatalError) : fatalError;
@@ -112,9 +147,11 @@ class ReportAggregator extends _events.EventEmitter {
112
147
  testResult.failure = this._getFirstFailure(testResult);
113
148
  }
114
149
  }
150
+
115
151
  if (finalResult && finalResult.capabilities) {
116
152
  testResult.capabilities = finalResult.capabilities;
117
153
  }
154
+
118
155
  if (testResult.failure) {
119
156
  if (testResult.failure.type && testResult.failure.location) {
120
157
  console.log(`Error: ${testResult.failure.type} at ${testResult.failure.location}.`);
@@ -124,18 +161,22 @@ class ReportAggregator extends _events.EventEmitter {
124
161
  console.log(`Error: ${testResult.failure}`);
125
162
  }
126
163
  }
164
+
127
165
  console.log(`Test ${rid} has finished with status: ${testResult.status.toUpperCase()}.`);
128
166
  }
167
+
129
168
  this.emit('runner:end', {
130
169
  rid,
131
170
  result: testResult
132
171
  });
172
+
133
173
  if (this.runnerEndPromises[rid]) {
134
174
  process.nextTick(() => {
135
175
  this.runnerEndPromises[rid].resolve(testResult);
136
176
  });
137
177
  }
138
178
  }
179
+
139
180
  onIterationStart(rid, iteration, start) {
140
181
  if (iteration) {
141
182
  const msg = `${start} Iteration #${iteration} started...`;
@@ -143,6 +184,7 @@ class ReportAggregator extends _events.EventEmitter {
143
184
  this.onLogEntry(null, 'INFO', msg, 'user');
144
185
  }
145
186
  }
187
+
146
188
  onIterationEnd(rid, result, start) {
147
189
  if (result && result.iterationNum && result.status && result.status.toUpperCase) {
148
190
  const msg = `${start} Iteration #${result.iterationNum} ended with status: ${result.status.toUpperCase()}.`;
@@ -150,6 +192,7 @@ class ReportAggregator extends _events.EventEmitter {
150
192
  this.onLogEntry(null, 'INFO', msg, 'user');
151
193
  }
152
194
  }
195
+
153
196
  onSuiteStart(rid, suiteId, suite) {
154
197
  console.log(`Suite "${suite.name}" has started...`);
155
198
  this.emit('suite:start', {
@@ -158,11 +201,14 @@ class ReportAggregator extends _events.EventEmitter {
158
201
  suite: suite
159
202
  });
160
203
  }
204
+
161
205
  onSuiteEnd(rid, suiteId, suiteResult) {
162
206
  const testResult = this.results.find(x => x.rid === rid);
207
+
163
208
  if (!testResult) {
164
209
  return;
165
210
  }
211
+
166
212
  testResult.suites.push(suiteResult);
167
213
  console.log(`Suite "${suiteResult.name}" has ended with status: ${suiteResult.status.toUpperCase()}.`);
168
214
  this.emit('suite:end', {
@@ -171,6 +217,7 @@ class ReportAggregator extends _events.EventEmitter {
171
217
  result: suiteResult
172
218
  });
173
219
  }
220
+
174
221
  onCaseStart(rid, suiteId, caseId, caseDef) {
175
222
  console.log(`- Case "${caseDef.name}" has started...`);
176
223
  this.emit('case:start', {
@@ -180,6 +227,7 @@ class ReportAggregator extends _events.EventEmitter {
180
227
  case: caseDef
181
228
  });
182
229
  }
230
+
183
231
  onCaseEnd(rid, suiteId, caseId, caseResult) {
184
232
  console.log(`- Case "${caseResult.name}" has ended with status: ${caseResult.status.toUpperCase()}.`);
185
233
  this.emit('case:end', {
@@ -189,17 +237,22 @@ class ReportAggregator extends _events.EventEmitter {
189
237
  result: caseResult
190
238
  });
191
239
  }
240
+
192
241
  onStepStart(rid, step) {
193
242
  console.log(` - Step "${step.name}" has started...`);
243
+
194
244
  if (this.options && this.options.rootPath && this.options.framework && this.options.framework === 'cucumber') {
195
245
  const fullPath = _path.default.resolve(this.options.rootPath, step.location);
246
+
196
247
  step.location = fullPath + ':1';
197
248
  }
249
+
198
250
  this.emit('step:start', {
199
251
  rid,
200
252
  step: step
201
253
  });
202
254
  }
255
+
203
256
  onStepEnd(rid, stepResult) {
204
257
  const status = stepResult.status.toUpperCase();
205
258
  const duration = stepResult.duration ? (stepResult.duration / 1000).toFixed(2) : 0;
@@ -209,6 +262,7 @@ class ReportAggregator extends _events.EventEmitter {
209
262
  step: stepResult
210
263
  });
211
264
  }
265
+
212
266
  onLogEntry(time, level, msg, src = null) {
213
267
  this.emit('log', {
214
268
  level,
@@ -217,36 +271,46 @@ class ReportAggregator extends _events.EventEmitter {
217
271
  src
218
272
  });
219
273
  }
274
+
220
275
  _getFirstFailure(testResult) {
221
276
  if (testResult.status === _status.default.FAILED) {
222
277
  if (testResult.failure) {
223
278
  return testResult.failure;
224
279
  }
280
+
225
281
  for (let suiteResult of testResult.suites) {
226
282
  if (suiteResult.status !== _status.default.FAILED) {
227
283
  continue;
228
284
  }
285
+
229
286
  if (suiteResult.failure) {
230
287
  return suiteResult.failure;
231
288
  }
289
+
232
290
  for (let caseResult of suiteResult.cases) {
233
291
  if (suiteResult.status !== _status.default.FAILED) {
234
292
  continue;
235
293
  }
294
+
236
295
  if (caseResult.failure) {
237
296
  return caseResult.failure;
238
297
  }
298
+
239
299
  for (let stepResult of caseResult.steps) {
240
300
  if (stepResult.status !== _status.default.FAILED) {
241
301
  continue;
242
302
  }
303
+
243
304
  return stepResult.failure || null;
244
305
  }
245
306
  }
246
307
  }
247
308
  }
309
+
248
310
  return null;
249
311
  }
312
+
250
313
  }
314
+
251
315
  exports.default = ReportAggregator;
252
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZXBvcnRlcnMiLCJqc29uIiwiSnNvblJlcG9ydGVyIiwianVuaXQiLCJKVW5pdFJlcG9ydGVyIiwiaHRtbCIsIkh0bWxSZXBvcnRlciIsImV4Y2VsIiwiRXhjZWxSZXBvcnRlciIsInBkZiIsIlBkZlJlcG9ydGVyIiwieG1sIiwiWG1sUmVwb3J0ZXIiLCJERUZBVUxUX1RFU1RfTkFNRSIsIkRFRkFVTFRfUkVQT1JURVJTIiwiUmVwb3J0QWdncmVnYXRvciIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsInJlc3VsdHMiLCJydW5uZXJFbmRQcm9taXNlcyIsImluc3RhbnRpYXRlUmVwb3J0ZXJzIiwiZ2V0RXhpdENvZGUiLCJleGl0Q29kZSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInRlc3RGYWlsZGVkIiwiZmluZCIsIml0ZW0iLCJzdGF0dXMiLCJyZXBvcnRlcnMiLCJnZW5lcmFsUmVwb3J0aW5nT3B0cyIsInJlcG9ydGluZyIsInJlcG9ydGVyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVwb3J0ZXJOYW1lIiwibmFtZSIsInJlcG9ydGVyT3B0cyIsInB1c2giLCJnZW5lcmF0ZVJlcG9ydHMiLCJyZXBvcnRQYXRoIiwiZ2VuZXJhdGUiLCJjb25zb2xlIiwibG9nIiwid2FpdEZvclJlc3VsdCIsInJpZCIsIm9uUnVubmVyU3RhcnQiLCJvcHRzIiwiY2FwcyIsIkVycm9yIiwidGVzdFJlc3VsdCIsIlRlc3RSZXN1bHQiLCJzdGFydFRpbWUiLCJveHV0aWwiLCJnZXRUaW1lU3RhbXAiLCJjYXBhYmlsaXRpZXMiLCJlbnZpcm9ubWVudCIsImVudlZhcnMiLCJkZWZlciIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJTdGF0dXMiLCJGQUlMRUQiLCJzdWl0ZXMiLCJzb21lIiwiUEFTU0VEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsInJvb3RQYXRoIiwiZnJhbWV3b3JrIiwiZnVsbFBhdGgiLCJwYXRoIiwib25TdGVwRW5kIiwic3RlcFJlc3VsdCIsInRvRml4ZWQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJjYXNlcyIsInN0ZXBzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBSZXBvcnQgYWdncmVnYXRvclxyXG4gKi9cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBUZXN0UmVzdWx0IGZyb20gJy4uL21vZGVsL3Rlc3QtcmVzdWx0JztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcblxyXG4vLyBpbXBvcnQgYWxsIGJ1aWx0LWluIHJlcG9ydGVyc1xyXG5pbXBvcnQgSnNvblJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qc29uJztcclxuaW1wb3J0IEpVbml0UmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWp1bml0JztcclxuaW1wb3J0IEh0bWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItaHRtbCc7XHJcbmltcG9ydCBFeGNlbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1leGNlbCc7XHJcbmltcG9ydCBQZGZSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcGRmJztcclxuaW1wb3J0IFhtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci14bWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzJztcclxuXHJcbmNvbnN0IFJlcG9ydGVycyA9IHtcclxuICAgIGpzb246IEpzb25SZXBvcnRlcixcclxuICAgIGp1bml0OiBKVW5pdFJlcG9ydGVyLFxyXG4gICAgaHRtbDogSHRtbFJlcG9ydGVyLFxyXG4gICAgZXhjZWw6IEV4Y2VsUmVwb3J0ZXIsXHJcbiAgICBwZGY6IFBkZlJlcG9ydGVyLFxyXG4gICAgeG1sOiBYbWxSZXBvcnRlclxyXG59O1xyXG5cclxuY29uc3QgREVGQVVMVF9URVNUX05BTUUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5jb25zdCBERUZBVUxUX1JFUE9SVEVSUyA9IFtdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0QWdncmVnYXRvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyByZXN1bHRzIGhhc2ggdGFibGUgYmFzZWQgb24gcnVubmVyIGlkIGtleVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIC8vIGEgaGFzaCBsaXN0IG9mIHJ1bm5lckVuZCBldmVudCBwcm9taXNlcywga2V5ZWQgYnkgcnVubmVyIGlkXHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5pbnN0YW50aWF0ZVJlcG9ydGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEV4aXRDb2RlKCkge1xyXG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSAmJlxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RmFpbGRlZCA9IHRoaXMucmVzdWx0cy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJyb2tlbiA/XHJcbiAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zdGFudGlhdGVSZXBvcnRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRlcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBnZW5lcmFsUmVwb3J0aW5nT3B0cyA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcgfHwge307XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgZ2VuZXJhbFJlcG9ydGluZ09wdHMucmVwb3J0ZXJzIHx8IERFRkFVTFRfUkVQT1JURVJTKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwb3J0ZXIgIT09ICdzdHJpbmcnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVwb3J0ZXIsICduYW1lJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSByZXBvcnRlcnMgdGhhdCBkbyBub3QgaGF2ZSAnbmFtZScgcHJvcGVydHkgYXMgaXQncyBlc3NlbnRpYWwgdG8gbG9hZCB0aGUgY29ycmVzcG9uZGluZyBSZXBvcnRlciBjbGFzc1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyTmFtZSA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ3N0cmluZycgPyByZXBvcnRlciA6IHJlcG9ydGVyLm5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyT3B0cyA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ29iamVjdCcgPyByZXBvcnRlciA6IGdlbmVyYWxSZXBvcnRpbmdPcHRzO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXBvcnRlcnMsIHJlcG9ydGVyTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0ZXJzLnB1c2gobmV3IFJlcG9ydGVyc1tyZXBvcnRlck5hbWVdKHRoaXMub3B0aW9ucywgcmVwb3J0ZXJPcHRzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRQYXRoID0gcmVwb3J0ZXIuZ2VuZXJhdGUodGhpcy5yZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lclN0YXJ0KHJpZCwgb3B0cywgY2Fwcykge1xyXG4gICAgICAgIGlmICghcmlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyaWRcIiBjYW5ub3QgYmUgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBuZXcgVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQucmlkID0gcmlkO1xyXG4gICAgICAgIHRlc3RSZXN1bHQubmFtZSA9IG9wdHMubmFtZSB8fCBERUZBVUxUX1RFU1RfTkFNRTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGNhcHM7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5lbnZpcm9ubWVudCA9IG9wdHMuZW52VmFycyB8fCB7fTtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm9wdGlvbnMgPSBvcHRzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciBsYXRlciB0byBiZSByZXNvbHZlZCBvbiBydW5uZXI6ZW5kIGV2ZW50XHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdID0gZGVmZXIoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjpzdGFydCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBvcHRzLFxyXG4gICAgICAgICAgICBjYXBzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SdW5uZXJFbmQocmlkLCBmaW5hbFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5kdXJhdGlvbiA9IHRlc3RSZXN1bHQuZW5kVGltZSAtIHRlc3RSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LnN0YXR1cyA9IGZhdGFsRXJyb3IgPyBTdGF0dXMuRkFJTEVEIDogKHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkpID8gU3RhdHVzLkZBSUxFRCA6IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpZiBmYXRhbEVycm9yIGlzIG5vdCBpbmhlcml0ZWQgZnJvbSBFcnJvciBjbGFzcyB0aGVuIHdlIGFscmVhZHkgZ290IE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IGZhdGFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZmF0YWxFcnJvcikgOiBmYXRhbEVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gdGhpcy5fZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdCAmJiBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gZmluYWxSZXN1bHQuY2FwYWJpbGl0aWVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSAmJiB0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9IGF0ICR7dGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9ufS5gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZXN0UmVzdWx0LmZhaWx1cmUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIGZpbmlzaGVkIHdpdGggc3RhdHVzOiAke3Rlc3RSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgcmVzdWx0OiB0ZXN0UmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0pIHtcclxuICAgICAgICAgICAgLy8gY2FsbGluZyBuZXh0VGljaygpIHdpbGwgaGVscCB1cyB0byBpbnN1cmUgdGhhdCB3ZSByZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGVtaXQoJ3J1bm5lcjplbmQnKSBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdLnJlc29sdmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvblN0YXJ0KHJpZCwgaXRlcmF0aW9uLCBzdGFydCkge1xyXG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtpdGVyYXRpb259IHN0YXJ0ZWQuLi5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uRW5kKHJpZCwgcmVzdWx0LCBzdGFydCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lml0ZXJhdGlvbk51bSAmJiByZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXN0UmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke3N1aXRlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhc2VFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VSZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke2Nhc2VSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBcUM7QUFFckMsTUFBTUEsU0FBUyxHQUFHO0VBQ2RDLElBQUksRUFBRUMscUJBQVk7RUFDbEJDLEtBQUssRUFBRUMsc0JBQWE7RUFDcEJDLElBQUksRUFBRUMscUJBQVk7RUFDbEJDLEtBQUssRUFBRUMsc0JBQWE7RUFDcEJDLEdBQUcsRUFBRUMsb0JBQVc7RUFDaEJDLEdBQUcsRUFBRUM7QUFDVCxDQUFDO0FBRUQsTUFBTUMsaUJBQWlCLEdBQUcsYUFBYTtBQUN2QyxNQUFNQyxpQkFBaUIsR0FBRyxFQUFFO0FBRWIsTUFBTUMsZ0JBQWdCLFNBQVNDLG9CQUFZLENBQUM7RUFDdkRDLFdBQVcsQ0FBQ0MsT0FBTyxFQUFFO0lBQ2pCLEtBQUssRUFBRTtJQUVQLElBQUksQ0FBQ0MsT0FBTyxHQUFHLEVBQUU7SUFFakIsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDRixPQUFPLEdBQUdBLE9BQU87SUFDdEIsSUFBSSxDQUFDRyxvQkFBb0IsRUFBRTtFQUMvQjtFQUVBQyxXQUFXLEdBQUc7SUFDVixJQUFJQyxRQUFRLEdBQUcsQ0FBQztJQUVoQixJQUNJLElBQUksQ0FBQ0osT0FBTyxJQUNaSyxLQUFLLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUNOLE9BQU8sQ0FBQyxJQUMzQixJQUFJLENBQUNBLE9BQU8sQ0FBQ08sTUFBTSxHQUFHLENBQUMsRUFDekI7TUFDRSxNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDUixPQUFPLENBQUNTLElBQUksQ0FBRUMsSUFBSSxJQUFLQSxJQUFJLENBQUNDLE1BQU0sS0FBSyxRQUFRLENBQUM7TUFFekUsSUFBSUgsV0FBVyxFQUFFO1FBQ2JKLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDakI7SUFDSixDQUFDLE1BQU07TUFFSEEsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNqQjtJQUVBLE9BQU9BLFFBQVE7RUFDbkI7RUFFQUYsb0JBQW9CLEdBQUc7SUFDbkIsSUFBSSxDQUFDVSxTQUFTLEdBQUcsRUFBRTtJQUNuQixNQUFNQyxvQkFBb0IsR0FBRyxJQUFJLENBQUNkLE9BQU8sQ0FBQ2UsU0FBUyxJQUFJLENBQUMsQ0FBQztJQUN6RCxLQUFLLElBQUlDLFFBQVEsSUFBSUYsb0JBQW9CLENBQUNELFNBQVMsSUFBSWpCLGlCQUFpQixFQUFFO01BQ3RFLElBQUksT0FBT29CLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDSixRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFFekY7TUFDSjtNQUVBLE1BQU1LLFlBQVksR0FBRyxPQUFPTCxRQUFRLEtBQUssUUFBUSxHQUFHQSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ00sSUFBSTtNQUM1RSxNQUFNQyxZQUFZLEdBQUcsT0FBT1AsUUFBUSxLQUFLLFFBQVEsR0FBR0EsUUFBUSxHQUFHRixvQkFBb0I7TUFFbkYsSUFBSUcsTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDdEMsU0FBUyxFQUFFdUMsWUFBWSxDQUFDLEVBQUU7UUFDL0QsSUFBSSxDQUFDUixTQUFTLENBQUNXLElBQUksQ0FBQyxJQUFJMUMsU0FBUyxDQUFDdUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDckIsT0FBTyxFQUFFdUIsWUFBWSxDQUFDLENBQUM7TUFDaEY7SUFDSjtFQUNKO0VBRUFFLGVBQWUsR0FBRztJQUNkLElBQUksQ0FBQ25CLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ00sU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDQSxTQUFTLENBQUNMLE1BQU0sSUFBSSxDQUFDLEVBQUU7TUFDOUQsT0FBTyxLQUFLO0lBQ2hCO0lBQ0EsS0FBSyxJQUFJUSxRQUFRLElBQUksSUFBSSxDQUFDSCxTQUFTLEVBQUU7TUFDakMsTUFBTWEsVUFBVSxHQUFHVixRQUFRLENBQUNXLFFBQVEsQ0FBQyxJQUFJLENBQUMxQixPQUFPLENBQUM7TUFDbEQyQixPQUFPLENBQUNDLEdBQUcsQ0FBRSx5QkFBd0JILFVBQVcsRUFBQyxDQUFDO0lBQ3REO0lBQ0EsT0FBTyxJQUFJO0VBQ2Y7RUFFQSxNQUFNSSxhQUFhLENBQUNDLEdBQUcsRUFBRTtJQUNyQixJQUFJLENBQUNBLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQzdCLGlCQUFpQixDQUFDNkIsR0FBRyxDQUFDLEVBQUU7TUFDdEMsT0FBTyxJQUFJO0lBQ2Y7SUFDQSxPQUFPLElBQUksQ0FBQzdCLGlCQUFpQixDQUFDNkIsR0FBRyxDQUFDO0VBQ3RDO0VBRUFDLGFBQWEsQ0FBQ0QsR0FBRyxFQUFFRSxJQUFJLEVBQUVDLElBQUksRUFBRTtJQUMzQixJQUFJLENBQUNILEdBQUcsRUFBRTtNQUNOLE1BQU0sSUFBSUksS0FBSyxDQUFDLHdCQUF3QixDQUFDO0lBQzdDO0lBQ0EsTUFBTUMsVUFBVSxHQUFHLElBQUlDLG1CQUFVLEVBQUU7SUFDbkNELFVBQVUsQ0FBQ0wsR0FBRyxHQUFHQSxHQUFHO0lBQ3BCSyxVQUFVLENBQUNkLElBQUksR0FBR1csSUFBSSxDQUFDWCxJQUFJLElBQUkzQixpQkFBaUI7SUFDaER5QyxVQUFVLENBQUNFLFNBQVMsR0FBR0MsYUFBTSxDQUFDQyxZQUFZLEVBQUU7SUFDNUNKLFVBQVUsQ0FBQ0ssWUFBWSxHQUFHUCxJQUFJO0lBQzlCRSxVQUFVLENBQUNNLFdBQVcsR0FBR1QsSUFBSSxDQUFDVSxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQzNDUCxVQUFVLENBQUNwQyxPQUFPLEdBQUdpQyxJQUFJO0lBQ3pCLElBQUksQ0FBQ2hDLE9BQU8sQ0FBQ3VCLElBQUksQ0FBQ1ksVUFBVSxDQUFDO0lBRTdCLElBQUksQ0FBQ2xDLGlCQUFpQixDQUFDNkIsR0FBRyxDQUFDLEdBQUcsSUFBQWEsV0FBSyxHQUFFO0lBQ3JDaEIsT0FBTyxDQUFDQyxHQUFHLENBQUUsUUFBT0UsR0FBSSxpQkFBZ0IsQ0FBQztJQUN6QyxJQUFJLENBQUNjLElBQUksQ0FBQyxjQUFjLEVBQUU7TUFDdEJkLEdBQUc7TUFDSEUsSUFBSTtNQUNKQztJQUNKLENBQUMsQ0FBQztFQUNOO0VBRUFZLFdBQVcsQ0FBQ2YsR0FBRyxFQUFFZ0IsV0FBVyxFQUFFQyxVQUFVLEVBQUU7SUFDdEMsTUFBTVosVUFBVSxHQUFHLElBQUksQ0FBQ25DLE9BQU8sQ0FBQ1MsSUFBSSxDQUFDdUMsQ0FBQyxJQUFJQSxDQUFDLENBQUNsQixHQUFHLEtBQUtBLEdBQUcsQ0FBQztJQUN4RCxJQUFJSyxVQUFVLEVBQUU7TUFDWkEsVUFBVSxDQUFDYyxPQUFPLEdBQUdYLGFBQU0sQ0FBQ0MsWUFBWSxFQUFFO01BQzFDSixVQUFVLENBQUNlLFFBQVEsR0FBR2YsVUFBVSxDQUFDYyxPQUFPLEdBQUdkLFVBQVUsQ0FBQ0UsU0FBUztNQUMvREYsVUFBVSxDQUFDeEIsTUFBTSxHQUFHb0MsVUFBVSxHQUFHSSxlQUFNLENBQUNDLE1BQU0sR0FBSWpCLFVBQVUsQ0FBQ2tCLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDTixDQUFDLElBQUlBLENBQUMsQ0FBQ3JDLE1BQU0sS0FBS3dDLGVBQU0sQ0FBQ0MsTUFBTSxDQUFDLEdBQUlELGVBQU0sQ0FBQ0MsTUFBTSxHQUFHRCxlQUFNLENBQUNJLE1BQU07TUFDMUksSUFBSXBCLFVBQVUsQ0FBQ3hCLE1BQU0sS0FBS3dDLGVBQU0sQ0FBQ0MsTUFBTSxFQUFFO1FBQ3JDLElBQUlMLFVBQVUsRUFBRTtVQUVaWixVQUFVLENBQUNxQixPQUFPLEdBQUdULFVBQVUsWUFBWWIsS0FBSyxHQUFHdUIsZUFBVyxDQUFDQyxtQkFBbUIsQ0FBQ1gsVUFBVSxDQUFDLEdBQUdBLFVBQVU7UUFDL0csQ0FBQyxNQUNJO1VBQ0RaLFVBQVUsQ0FBQ3FCLE9BQU8sR0FBRyxJQUFJLENBQUNHLGdCQUFnQixDQUFDeEIsVUFBVSxDQUFDO1FBQzFEO01BQ0o7TUFDQSxJQUFJVyxXQUFXLElBQUlBLFdBQVcsQ0FBQ04sWUFBWSxFQUFFO1FBQ3pDTCxVQUFVLENBQUNLLFlBQVksR0FBR00sV0FBVyxDQUFDTixZQUFZO01BQ3REO01BQ0EsSUFBSUwsVUFBVSxDQUFDcUIsT0FBTyxFQUFFO1FBQ3BCLElBQUlyQixVQUFVLENBQUNxQixPQUFPLENBQUNJLElBQUksSUFBSXpCLFVBQVUsQ0FBQ3FCLE9BQU8sQ0FBQ0ssUUFBUSxFQUFFO1VBQ3hEbEMsT0FBTyxDQUFDQyxHQUFHLENBQUUsVUFBU08sVUFBVSxDQUFDcUIsT0FBTyxDQUFDSSxJQUFLLE9BQU16QixVQUFVLENBQUNxQixPQUFPLENBQUNLLFFBQVMsR0FBRSxDQUFDO1FBQ3ZGLENBQUMsTUFBTSxJQUFJMUIsVUFBVSxDQUFDcUIsT0FBTyxDQUFDSSxJQUFJLEVBQUU7VUFDaENqQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxVQUFTTyxVQUFVLENBQUNxQixPQUFPLENBQUNJLElBQUssRUFBQyxDQUFDO1FBQ3BELENBQUMsTUFBTSxJQUFJLE9BQU96QixVQUFVLENBQUNxQixPQUFPLEtBQUssUUFBUSxFQUFFO1VBQy9DN0IsT0FBTyxDQUFDQyxHQUFHLENBQUUsVUFBU08sVUFBVSxDQUFDcUIsT0FBUSxFQUFDLENBQUM7UUFDL0M7TUFDSjtNQUNBN0IsT0FBTyxDQUFDQyxHQUFHLENBQUUsUUFBT0UsR0FBSSw4QkFBNkJLLFVBQVUsQ0FBQ3hCLE1BQU0sQ0FBQ21ELFdBQVcsRUFBRyxHQUFFLENBQUM7SUFDNUY7SUFDQSxJQUFJLENBQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFO01BQ3BCZCxHQUFHO01BQ0hpQyxNQUFNLEVBQUU1QjtJQUNaLENBQUMsQ0FBQztJQUNGLElBQUksSUFBSSxDQUFDbEMsaUJBQWlCLENBQUM2QixHQUFHLENBQUMsRUFBRTtNQUU3QmtDLE9BQU8sQ0FBQ0MsUUFBUSxDQUFDLE1BQU07UUFDbkIsSUFBSSxDQUFDaEUsaUJBQWlCLENBQUM2QixHQUFHLENBQUMsQ0FBQ29DLE9BQU8sQ0FBQy9CLFVBQVUsQ0FBQztNQUNuRCxDQUFDLENBQUM7SUFDTjtFQUNKO0VBRUFnQyxnQkFBZ0IsQ0FBQ3JDLEdBQUcsRUFBRXNDLFNBQVMsRUFBRUMsS0FBSyxFQUFFO0lBQ3BDLElBQUlELFNBQVMsRUFBRTtNQUNYLE1BQU1FLEdBQUcsR0FBSSxHQUFFRCxLQUFNLGVBQWNELFNBQVUsYUFBWTtNQUN6RHpDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDMEMsR0FBRyxDQUFDO01BQ2hCLElBQUksQ0FBQ0MsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUVELEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDOUM7RUFDSjtFQUVBRSxjQUFjLENBQUMxQyxHQUFHLEVBQUVpQyxNQUFNLEVBQUVNLEtBQUssRUFBRTtJQUMvQixJQUFJTixNQUFNLElBQUlBLE1BQU0sQ0FBQ1UsWUFBWSxJQUFJVixNQUFNLENBQUNwRCxNQUFNLElBQUlvRCxNQUFNLENBQUNwRCxNQUFNLENBQUNtRCxXQUFXLEVBQUU7TUFDN0UsTUFBTVEsR0FBRyxHQUFJLEdBQUVELEtBQU0sZUFBY04sTUFBTSxDQUFDVSxZQUFhLHVCQUFzQlYsTUFBTSxDQUFDcEQsTUFBTSxDQUFDbUQsV0FBVyxFQUFHLEdBQUU7TUFDM0duQyxPQUFPLENBQUNDLEdBQUcsQ0FBQzBDLEdBQUcsQ0FBQztNQUNoQixJQUFJLENBQUNDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFRCxHQUFHLEVBQUUsTUFBTSxDQUFDO0lBQzlDO0VBQ0o7RUFFQUksWUFBWSxDQUFDNUMsR0FBRyxFQUFFNkMsT0FBTyxFQUFFQyxLQUFLLEVBQUU7SUFDOUJqRCxPQUFPLENBQUNDLEdBQUcsQ0FBRSxVQUFTZ0QsS0FBSyxDQUFDdkQsSUFBSyxrQkFBaUIsQ0FBQztJQUNuRCxJQUFJLENBQUN1QixJQUFJLENBQUMsYUFBYSxFQUFFO01BQ3JCZCxHQUFHO01BQ0g2QyxPQUFPLEVBQUVBLE9BQU87TUFDaEJDLEtBQUssRUFBRUE7SUFDWCxDQUFDLENBQUM7RUFDTjtFQUVBQyxVQUFVLENBQUMvQyxHQUFHLEVBQUU2QyxPQUFPLEVBQUVHLFdBQVcsRUFBRTtJQUNsQyxNQUFNM0MsVUFBVSxHQUFHLElBQUksQ0FBQ25DLE9BQU8sQ0FBQ1MsSUFBSSxDQUFDdUMsQ0FBQyxJQUFJQSxDQUFDLENBQUNsQixHQUFHLEtBQUtBLEdBQUcsQ0FBQztJQUN4RCxJQUFJLENBQUNLLFVBQVUsRUFBRTtNQUNiO0lBQ0o7SUFDQUEsVUFBVSxDQUFDa0IsTUFBTSxDQUFDOUIsSUFBSSxDQUFDdUQsV0FBVyxDQUFDO0lBQ25DbkQsT0FBTyxDQUFDQyxHQUFHLENBQUUsVUFBU2tELFdBQVcsQ0FBQ3pELElBQUssNEJBQTJCeUQsV0FBVyxDQUFDbkUsTUFBTSxDQUFDbUQsV0FBVyxFQUFHLEdBQUUsQ0FBQztJQUN0RyxJQUFJLENBQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFO01BQ25CZCxHQUFHO01BQ0g2QyxPQUFPO01BQ1BaLE1BQU0sRUFBRWU7SUFDWixDQUFDLENBQUM7RUFDTjtFQUVBQyxXQUFXLENBQUNqRCxHQUFHLEVBQUU2QyxPQUFPLEVBQUVLLE1BQU0sRUFBRUMsT0FBTyxFQUFFO0lBQ3ZDdEQsT0FBTyxDQUFDQyxHQUFHLENBQUUsV0FBVXFELE9BQU8sQ0FBQzVELElBQUssa0JBQWlCLENBQUM7SUFDdEQsSUFBSSxDQUFDdUIsSUFBSSxDQUFDLFlBQVksRUFBRTtNQUNwQmQsR0FBRztNQUNINkMsT0FBTztNQUNQSyxNQUFNO01BQ05FLElBQUksRUFBRUQ7SUFDVixDQUFDLENBQUM7RUFDTjtFQUVBRSxTQUFTLENBQUNyRCxHQUFHLEVBQUU2QyxPQUFPLEVBQUVLLE1BQU0sRUFBRUksVUFBVSxFQUFFO0lBQ3hDekQsT0FBTyxDQUFDQyxHQUFHLENBQUUsV0FBVXdELFVBQVUsQ0FBQy9ELElBQUssNEJBQTJCK0QsVUFBVSxDQUFDekUsTUFBTSxDQUFDbUQsV0FBVyxFQUFHLEdBQUUsQ0FBQztJQUNyRyxJQUFJLENBQUNsQixJQUFJLENBQUMsVUFBVSxFQUFFO01BQ2xCZCxHQUFHO01BQ0g2QyxPQUFPO01BQ1BLLE1BQU07TUFDTmpCLE1BQU0sRUFBRXFCO0lBQ1osQ0FBQyxDQUFDO0VBQ047RUFFQUMsV0FBVyxDQUFDdkQsR0FBRyxFQUFFd0QsSUFBSSxFQUFFO0lBQ25CM0QsT0FBTyxDQUFDQyxHQUFHLENBQUUsYUFBWTBELElBQUksQ0FBQ2pFLElBQUssa0JBQWlCLENBQUM7SUFFckQsSUFBSSxJQUFJLENBQUN0QixPQUFPLElBQUksSUFBSSxDQUFDQSxPQUFPLENBQUN3RixRQUFRLElBQUksSUFBSSxDQUFDeEYsT0FBTyxDQUFDeUYsU0FBUyxJQUFJLElBQUksQ0FBQ3pGLE9BQU8sQ0FBQ3lGLFNBQVMsS0FBSyxVQUFVLEVBQUU7TUFDMUcsTUFBTUMsUUFBUSxHQUFHQyxhQUFJLENBQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDbkUsT0FBTyxDQUFDd0YsUUFBUSxFQUFFRCxJQUFJLENBQUN6QixRQUFRLENBQUM7TUFDbkV5QixJQUFJLENBQUN6QixRQUFRLEdBQUc0QixRQUFRLEdBQUMsSUFBSTtJQUNqQztJQUVBLElBQUksQ0FBQzdDLElBQUksQ0FBQyxZQUFZLEVBQUU7TUFDcEJkLEdBQUc7TUFDSHdELElBQUksRUFBRUE7SUFDVixDQUFDLENBQUM7RUFDTjtFQUVBSyxTQUFTLENBQUM3RCxHQUFHLEVBQUU4RCxVQUFVLEVBQUU7SUFDdkIsTUFBTWpGLE1BQU0sR0FBR2lGLFVBQVUsQ0FBQ2pGLE1BQU0sQ0FBQ21ELFdBQVcsRUFBRTtJQUM5QyxNQUFNWixRQUFRLEdBQUcwQyxVQUFVLENBQUMxQyxRQUFRLEdBQUcsQ0FBQzBDLFVBQVUsQ0FBQzFDLFFBQVEsR0FBRyxJQUFJLEVBQUUyQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNsRmxFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFFLGFBQVlnRSxVQUFVLENBQUN2RSxJQUFLLGtCQUFpQjZCLFFBQVMsa0JBQWlCdkMsTUFBTyxHQUFFLENBQUM7SUFDOUYsSUFBSSxDQUFDaUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtNQUNsQmQsR0FBRztNQUNId0QsSUFBSSxFQUFFTTtJQUNWLENBQUMsQ0FBQztFQUNOO0VBRUFyQixVQUFVLENBQUN1QixJQUFJLEVBQUVDLEtBQUssRUFBRXpCLEdBQUcsRUFBRTBCLEdBQUcsR0FBRyxJQUFJLEVBQUU7SUFDckMsSUFBSSxDQUFDcEQsSUFBSSxDQUFDLEtBQUssRUFBRTtNQUNibUQsS0FBSztNQUFFekIsR0FBRztNQUFFd0IsSUFBSTtNQUFFRTtJQUN0QixDQUFDLENBQUM7RUFDTjtFQU1BckMsZ0JBQWdCLENBQUN4QixVQUFVLEVBQUU7SUFDekIsSUFBSUEsVUFBVSxDQUFDeEIsTUFBTSxLQUFLd0MsZUFBTSxDQUFDQyxNQUFNLEVBQUU7TUFDckMsSUFBSWpCLFVBQVUsQ0FBQ3FCLE9BQU8sRUFBRTtRQUNwQixPQUFPckIsVUFBVSxDQUFDcUIsT0FBTztNQUM3QjtNQUNBLEtBQUssSUFBSXNCLFdBQVcsSUFBSTNDLFVBQVUsQ0FBQ2tCLE1BQU0sRUFBRTtRQUN2QyxJQUFJeUIsV0FBVyxDQUFDbkUsTUFBTSxLQUFLd0MsZUFBTSxDQUFDQyxNQUFNLEVBQUU7VUFDdEM7UUFDSjtRQUNBLElBQUkwQixXQUFXLENBQUN0QixPQUFPLEVBQUU7VUFDckIsT0FBT3NCLFdBQVcsQ0FBQ3RCLE9BQU87UUFDOUI7UUFDQSxLQUFLLElBQUk0QixVQUFVLElBQUlOLFdBQVcsQ0FBQ21CLEtBQUssRUFBRTtVQUN0QyxJQUFJbkIsV0FBVyxDQUFDbkUsTUFBTSxLQUFLd0MsZUFBTSxDQUFDQyxNQUFNLEVBQUU7WUFDdEM7VUFDSjtVQUNBLElBQUlnQyxVQUFVLENBQUM1QixPQUFPLEVBQUU7WUFDcEIsT0FBTzRCLFVBQVUsQ0FBQzVCLE9BQU87VUFDN0I7VUFDQSxLQUFLLElBQUlvQyxVQUFVLElBQUlSLFVBQVUsQ0FBQ2MsS0FBSyxFQUFFO1lBQ3JDLElBQUlOLFVBQVUsQ0FBQ2pGLE1BQU0sS0FBS3dDLGVBQU0sQ0FBQ0MsTUFBTSxFQUFFO2NBQ3JDO1lBQ0o7WUFDQSxPQUFPd0MsVUFBVSxDQUFDcEMsT0FBTyxJQUFJLElBQUk7VUFDckM7UUFDSjtNQUNKO0lBQ0o7SUFDQSxPQUFPLElBQUk7RUFDZjtBQUNKO0FBQUMifQ==
316
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdlbmVyYXRlUmVwb3J0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJTdGF0dXMiLCJGQUlMRUQiLCJzdWl0ZXMiLCJzb21lIiwiUEFTU0VEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsInJvb3RQYXRoIiwiZnJhbWV3b3JrIiwiZnVsbFBhdGgiLCJwYXRoIiwib25TdGVwRW5kIiwic3RlcFJlc3VsdCIsInRvRml4ZWQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJjYXNlcyIsInN0ZXBzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFNBQVMsR0FBRztBQUNkQyxFQUFBQSxJQUFJLEVBQUVDLHFCQURRO0FBRWRDLEVBQUFBLEtBQUssRUFBRUMsc0JBRk87QUFHZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFIUTtBQUlkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUpPO0FBS2RDLEVBQUFBLEdBQUcsRUFBRUMsb0JBTFM7QUFNZEMsRUFBQUEsR0FBRyxFQUFFQztBQU5TLENBQWxCO0FBU0EsTUFBTUMsaUJBQWlCLEdBQUcsYUFBMUI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxFQUExQjs7QUFFZSxNQUFNQyxn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Q2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBSZXBvcnQgYWdncmVnYXRvclxyXG4gKi9cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBUZXN0UmVzdWx0IGZyb20gJy4uL21vZGVsL3Rlc3QtcmVzdWx0JztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcblxyXG4vLyBpbXBvcnQgYWxsIGJ1aWx0LWluIHJlcG9ydGVyc1xyXG5pbXBvcnQgSnNvblJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qc29uJztcclxuaW1wb3J0IEpVbml0UmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWp1bml0JztcclxuaW1wb3J0IEh0bWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItaHRtbCc7XHJcbmltcG9ydCBFeGNlbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1leGNlbCc7XHJcbmltcG9ydCBQZGZSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcGRmJztcclxuaW1wb3J0IFhtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci14bWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzJztcclxuXHJcbmNvbnN0IFJlcG9ydGVycyA9IHtcclxuICAgIGpzb246IEpzb25SZXBvcnRlcixcclxuICAgIGp1bml0OiBKVW5pdFJlcG9ydGVyLFxyXG4gICAgaHRtbDogSHRtbFJlcG9ydGVyLFxyXG4gICAgZXhjZWw6IEV4Y2VsUmVwb3J0ZXIsXHJcbiAgICBwZGY6IFBkZlJlcG9ydGVyLFxyXG4gICAgeG1sOiBYbWxSZXBvcnRlclxyXG59O1xyXG5cclxuY29uc3QgREVGQVVMVF9URVNUX05BTUUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5jb25zdCBERUZBVUxUX1JFUE9SVEVSUyA9IFtdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0QWdncmVnYXRvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyByZXN1bHRzIGhhc2ggdGFibGUgYmFzZWQgb24gcnVubmVyIGlkIGtleVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIC8vIGEgaGFzaCBsaXN0IG9mIHJ1bm5lckVuZCBldmVudCBwcm9taXNlcywga2V5ZWQgYnkgcnVubmVyIGlkXHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5pbnN0YW50aWF0ZVJlcG9ydGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEV4aXRDb2RlKCkge1xyXG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSAmJlxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RmFpbGRlZCA9IHRoaXMucmVzdWx0cy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJyb2tlbiA/XHJcbiAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zdGFudGlhdGVSZXBvcnRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRlcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBnZW5lcmFsUmVwb3J0aW5nT3B0cyA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcgfHwge307XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgZ2VuZXJhbFJlcG9ydGluZ09wdHMucmVwb3J0ZXJzIHx8IERFRkFVTFRfUkVQT1JURVJTKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwb3J0ZXIgIT09ICdzdHJpbmcnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVwb3J0ZXIsICduYW1lJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSByZXBvcnRlcnMgdGhhdCBkbyBub3QgaGF2ZSAnbmFtZScgcHJvcGVydHkgYXMgaXQncyBlc3NlbnRpYWwgdG8gbG9hZCB0aGUgY29ycmVzcG9uZGluZyBSZXBvcnRlciBjbGFzc1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyTmFtZSA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ3N0cmluZycgPyByZXBvcnRlciA6IHJlcG9ydGVyLm5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyT3B0cyA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ29iamVjdCcgPyByZXBvcnRlciA6IGdlbmVyYWxSZXBvcnRpbmdPcHRzO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXBvcnRlcnMsIHJlcG9ydGVyTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0ZXJzLnB1c2gobmV3IFJlcG9ydGVyc1tyZXBvcnRlck5hbWVdKHRoaXMub3B0aW9ucywgcmVwb3J0ZXJPcHRzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRQYXRoID0gcmVwb3J0ZXIuZ2VuZXJhdGUodGhpcy5yZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lclN0YXJ0KHJpZCwgb3B0cywgY2Fwcykge1xyXG4gICAgICAgIGlmICghcmlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyaWRcIiBjYW5ub3QgYmUgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBuZXcgVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQucmlkID0gcmlkO1xyXG4gICAgICAgIHRlc3RSZXN1bHQubmFtZSA9IG9wdHMubmFtZSB8fCBERUZBVUxUX1RFU1RfTkFNRTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGNhcHM7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5lbnZpcm9ubWVudCA9IG9wdHMuZW52VmFycyB8fCB7fTtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm9wdGlvbnMgPSBvcHRzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciBsYXRlciB0byBiZSByZXNvbHZlZCBvbiBydW5uZXI6ZW5kIGV2ZW50XHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdID0gZGVmZXIoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjpzdGFydCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBvcHRzLFxyXG4gICAgICAgICAgICBjYXBzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SdW5uZXJFbmQocmlkLCBmaW5hbFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5kdXJhdGlvbiA9IHRlc3RSZXN1bHQuZW5kVGltZSAtIHRlc3RSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LnN0YXR1cyA9IGZhdGFsRXJyb3IgPyBTdGF0dXMuRkFJTEVEIDogKHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkpID8gU3RhdHVzLkZBSUxFRCA6IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpZiBmYXRhbEVycm9yIGlzIG5vdCBpbmhlcml0ZWQgZnJvbSBFcnJvciBjbGFzcyB0aGVuIHdlIGFscmVhZHkgZ290IE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IGZhdGFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZmF0YWxFcnJvcikgOiBmYXRhbEVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gdGhpcy5fZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdCAmJiBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gZmluYWxSZXN1bHQuY2FwYWJpbGl0aWVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSAmJiB0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9IGF0ICR7dGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9ufS5gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZXN0UmVzdWx0LmZhaWx1cmUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIGZpbmlzaGVkIHdpdGggc3RhdHVzOiAke3Rlc3RSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgcmVzdWx0OiB0ZXN0UmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0pIHtcclxuICAgICAgICAgICAgLy8gY2FsbGluZyBuZXh0VGljaygpIHdpbGwgaGVscCB1cyB0byBpbnN1cmUgdGhhdCB3ZSByZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGVtaXQoJ3J1bm5lcjplbmQnKSBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdLnJlc29sdmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvblN0YXJ0KHJpZCwgaXRlcmF0aW9uLCBzdGFydCkge1xyXG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtpdGVyYXRpb259IHN0YXJ0ZWQuLi5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uRW5kKHJpZCwgcmVzdWx0LCBzdGFydCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lml0ZXJhdGlvbk51bSAmJiByZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXN0UmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke3N1aXRlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhc2VFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VSZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke2Nhc2VSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59Il19