@appium/support 2.60.0 → 2.61.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 (45) hide show
  1. package/build/lib/console.d.ts +1 -1
  2. package/build/lib/console.js +3 -3
  3. package/build/lib/console.js.map +1 -0
  4. package/build/lib/env.d.ts +8 -18
  5. package/build/lib/env.d.ts.map +1 -1
  6. package/build/lib/env.js +57 -36
  7. package/build/lib/env.js.map +1 -0
  8. package/build/lib/fs.d.ts +39 -10
  9. package/build/lib/fs.d.ts.map +1 -1
  10. package/build/lib/fs.js +20 -4
  11. package/build/lib/fs.js.map +1 -0
  12. package/build/lib/image-util.js +3 -3
  13. package/build/lib/image-util.js.map +1 -0
  14. package/build/lib/index.js.map +1 -0
  15. package/build/lib/log-internal.js +3 -3
  16. package/build/lib/log-internal.js.map +1 -0
  17. package/build/lib/logger.js.map +1 -0
  18. package/build/lib/logging.js +3 -3
  19. package/build/lib/logging.js.map +1 -0
  20. package/build/lib/mjpeg.js +3 -3
  21. package/build/lib/mjpeg.js.map +1 -0
  22. package/build/lib/mkdirp.js.map +1 -0
  23. package/build/lib/net.js +3 -3
  24. package/build/lib/net.js.map +1 -0
  25. package/build/lib/node.js +3 -3
  26. package/build/lib/node.js.map +1 -0
  27. package/build/lib/npm.js +3 -3
  28. package/build/lib/npm.js.map +1 -0
  29. package/build/lib/plist.js +3 -3
  30. package/build/lib/plist.js.map +1 -0
  31. package/build/lib/process.js.map +1 -0
  32. package/build/lib/system.js +3 -3
  33. package/build/lib/system.js.map +1 -0
  34. package/build/lib/tempdir.js +3 -3
  35. package/build/lib/tempdir.js.map +1 -0
  36. package/build/lib/timing.js +3 -3
  37. package/build/lib/timing.js.map +1 -0
  38. package/build/lib/util.js +3 -3
  39. package/build/lib/util.js.map +1 -0
  40. package/build/lib/zip.js +3 -3
  41. package/build/lib/zip.js.map +1 -0
  42. package/build/tsconfig.tsbuildinfo +1 -1
  43. package/lib/env.js +63 -74
  44. package/lib/fs.js +34 -7
  45. package/package.json +8 -9
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -26,6 +24,8 @@ var _logger = _interopRequireDefault(require("./logger"));
26
24
 
27
25
  var _lodash = _interopRequireDefault(require("lodash"));
28
26
 
27
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
+
29
29
  const BPLIST_IDENTIFIER = {
30
30
  BUFFER: Buffer.from('bplist00'),
31
31
  TEXT: 'bplist00'
@@ -157,4 +157,4 @@ function parsePlist(data) {
157
157
 
158
158
  throw new Error(`Unknown type of plist, data: ${data.toString()}`);
159
159
  }
160
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCUExJU1RfSURFTlRJRklFUiIsIkJVRkZFUiIsIkJ1ZmZlciIsImZyb20iLCJURVhUIiwiUExJU1RfSURFTlRJRklFUiIsInBhcnNlWG1sUGxpc3RGaWxlIiwicGxpc3RGaWxlbmFtZSIsInhtbENvbnRlbnQiLCJmcyIsInJlYWRGaWxlIiwieG1scGxpc3QiLCJwYXJzZSIsInBhcnNlUGxpc3RGaWxlIiwicGxpc3QiLCJtdXN0RXhpc3QiLCJxdWlldCIsImV4aXN0cyIsImxvZyIsImVycm9yQW5kVGhyb3ciLCJkZWJ1ZyIsIm9iaiIsInR5cGUiLCJicGxpc3RQYXJzZSIsInBhcnNlRmlsZSIsImxlbmd0aCIsIkVycm9yIiwiaWduIiwiZXJyIiwibWVzc2FnZSIsInVwZGF0ZVBsaXN0RmlsZSIsInVwZGF0ZWRGaWVsZHMiLCJiaW5hcnkiLCJfIiwiZXh0ZW5kIiwibmV3UGxpc3QiLCJicGxpc3RDcmVhdGUiLCJidWlsZCIsIndyaXRlRmlsZSIsImNyZWF0ZUJpbmFyeVBsaXN0IiwiZGF0YSIsInBhcnNlQmluYXJ5UGxpc3QiLCJwYXJzZUJ1ZmZlciIsImdldFhtbFBsaXN0IiwiaXNTdHJpbmciLCJzdGFydHNXaXRoIiwiaXNCdWZmZXIiLCJjb21wYXJlIiwidG9TdHJpbmciLCJnZXRCaW5hcnlQbGlzdCIsImNyZWF0ZVBsaXN0Iiwib2JqZWN0IiwicGFyc2VQbGlzdCIsInRleHRQbGlzdCIsImJpbmFyeVBsaXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3BsaXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB4bWxwbGlzdCBmcm9tICdwbGlzdCc7XG5pbXBvcnQgYnBsaXN0Q3JlYXRlIGZyb20gJ2JwbGlzdC1jcmVhdG9yJztcbmltcG9ydCBicGxpc3RQYXJzZSBmcm9tICdicGxpc3QtcGFyc2VyJztcbmltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgQlBMSVNUX0lERU5USUZJRVIgPSB7XG4gIEJVRkZFUjogQnVmZmVyLmZyb20oJ2JwbGlzdDAwJyksXG4gIFRFWFQ6ICdicGxpc3QwMCcsXG59O1xuY29uc3QgUExJU1RfSURFTlRJRklFUiA9IHtcbiAgQlVGRkVSOiBCdWZmZXIuZnJvbSgnPCcpLFxuICBURVhUOiAnPCcsXG59O1xuXG4vLyBYTUwgUGxpc3QgbGlicmFyeSBoZWxwZXJcbmFzeW5jIGZ1bmN0aW9uIHBhcnNlWG1sUGxpc3RGaWxlKHBsaXN0RmlsZW5hbWUpIHtcbiAgbGV0IHhtbENvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwbGlzdEZpbGVuYW1lLCAndXRmOCcpO1xuICByZXR1cm4geG1scGxpc3QucGFyc2UoeG1sQ29udGVudCk7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgZmlsZSBpbiB4bWwgb3IgYmluYXJ5IGZvcm1hdCBvZiBwbGlzdFxuICogQHBhcmFtIHtzdHJpbmd9IHBsaXN0IFRoZSBwbGlzdCBmaWxlIHBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbXVzdEV4aXN0IElmIHNldCB0byBmYWxzZSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGZpbGUgZG9lc24ndCBleGlzdFxuICogQHBhcmFtIHtib29sZWFufSBxdWlldCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwbGlzdCBwYXRoIHdpbGwgYmUgbG9nZ2VkIGluIGRlYnVnIGxldmVsXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSBwYXJzZWQgcGxpc3QgSlMgT2JqZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlUGxpc3RGaWxlKHBsaXN0LCBtdXN0RXhpc3QgPSB0cnVlLCBxdWlldCA9IHRydWUpIHtcbiAgLy8gaGFuZGxlIG5vbmV4aXN0YW50IGZpbGVcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHBsaXN0KSkpIHtcbiAgICBpZiAobXVzdEV4aXN0KSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgUGxpc3QgZmlsZSBkb2Vzbid0IGV4aXN0OiAnJHtwbGlzdH0nYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUGxpc3QgZmlsZSAnJHtwbGlzdH0nIGRvZXMgbm90IGV4aXN0LiBSZXR1cm5pbmcgYW4gZW1wdHkgcGxpc3QuYCk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgbGV0IG9iaiA9IHt9O1xuICBsZXQgdHlwZSA9ICdiaW5hcnknO1xuICB0cnkge1xuICAgIG9iaiA9IGF3YWl0IGJwbGlzdFBhcnNlLnBhcnNlRmlsZShwbGlzdCk7XG4gICAgaWYgKG9iai5sZW5ndGgpIHtcbiAgICAgIG9iaiA9IG9ialswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCaW5hcnkgZmlsZSAnJHtwbGlzdH0nJyBhcHBlYXJzIHRvIGJlIGVtcHR5YCk7XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0cnkge1xuICAgICAgb2JqID0gYXdhaXQgcGFyc2VYbWxQbGlzdEZpbGUocGxpc3QpO1xuICAgICAgdHlwZSA9ICd4bWwnO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBwbGlzdCBmaWxlICcke3BsaXN0fScgYXMgWE1MOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcXVpZXQpIHtcbiAgICBsb2cuZGVidWcoYFBhcnNlZCBwbGlzdCBmaWxlICcke3BsaXN0fScgYXMgJHt0eXBlfWApO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogVXBkYXRlcyBhIHBsaXN0IGZpbGUgd2l0aCB0aGUgZ2l2ZW4gZmllbGRzXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxpc3QgVGhlIHBsaXN0IGZpbGUgcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IHVwZGF0ZWRGaWVsZHMgVGhlIHVwZGF0ZWQgZmllbGRzLXZhbHVlIHBhaXJzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpbmFyeSBJZiBzZXQgdG8gZmFsc2UsIHRoZSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhcyBhIHhtbCBwbGlzdFxuICogQHBhcmFtIHtib29sZWFufSBtdXN0RXhpc3QgSWYgc2V0IHRvIGZhbHNlLCB0aGlzIG1ldGhvZCB3aWxsIHVwZGF0ZSBhbiBlbXB0eSBwbGlzdFxuICogQHBhcmFtIHtib29sZWFufSBxdWlldCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwbGlzdCBwYXRoIHdpbGwgYmUgbG9nZ2VkIGluIGRlYnVnIGxldmVsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBsaXN0RmlsZShcbiAgcGxpc3QsXG4gIHVwZGF0ZWRGaWVsZHMsXG4gIGJpbmFyeSA9IHRydWUsXG4gIG11c3RFeGlzdCA9IHRydWUsXG4gIHF1aWV0ID0gdHJ1ZVxuKSB7XG4gIGxldCBvYmo7XG4gIHRyeSB7XG4gICAgb2JqID0gYXdhaXQgcGFyc2VQbGlzdEZpbGUocGxpc3QsIG11c3RFeGlzdCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgdXBkYXRlIHBsaXN0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIF8uZXh0ZW5kKG9iaiwgdXBkYXRlZEZpZWxkcyk7XG4gIGxldCBuZXdQbGlzdCA9IGJpbmFyeSA/IGJwbGlzdENyZWF0ZShvYmopIDogeG1scGxpc3QuYnVpbGQob2JqKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGxpc3QsIG5ld1BsaXN0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBzYXZlIHBsaXN0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIGlmICghcXVpZXQpIHtcbiAgICBsb2cuZGVidWcoYFdyb3RlIHBsaXN0IGZpbGUgJyR7cGxpc3R9J2ApO1xuICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBiaW5hcnkgcGxpc3QgQnVmZmVyIGZyb20gYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSBUaGUgb2JqZWN0IHRvIGJlIHR1cm5lZCBpbnRvIGEgYmluYXJ5IHBsaXN0XG4gKiBAcmV0dXJucyB7QnVmZmVyfSBwbGlzdCBpbiB0aGUgZm9ybSBvZiBhIGJpbmFyeSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmluYXJ5UGxpc3QoZGF0YSkge1xuICByZXR1cm4gYnBsaXN0Q3JlYXRlKGRhdGEpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIEJ1ZmZlciBpbnRvIGFuIE9iamVjdFxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgVGhlIGJlZmZlciBvZiBhIGJpbmFyeSBwbGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZUJpbmFyeVBsaXN0KGRhdGEpIHtcbiAgcmV0dXJuIGJwbGlzdFBhcnNlLnBhcnNlQnVmZmVyKGRhdGEpO1xufVxuXG5mdW5jdGlvbiBnZXRYbWxQbGlzdChkYXRhKSB7XG4gIGlmIChfLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEuc3RhcnRzV2l0aChQTElTVF9JREVOVElGSUVSLlRFWFQpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKFxuICAgIF8uaXNCdWZmZXIoZGF0YSkgJiZcbiAgICBQTElTVF9JREVOVElGSUVSLkJVRkZFUi5jb21wYXJlKGRhdGEsIDAsIFBMSVNUX0lERU5USUZJRVIuQlVGRkVSLmxlbmd0aCkgPT09IDBcbiAgKSB7XG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0QmluYXJ5UGxpc3QoZGF0YSkge1xuICBpZiAoXy5pc1N0cmluZyhkYXRhKSAmJiBkYXRhLnN0YXJ0c1dpdGgoQlBMSVNUX0lERU5USUZJRVIuVEVYVCkpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7XG4gIH1cblxuICBpZiAoXG4gICAgXy5pc0J1ZmZlcihkYXRhKSAmJlxuICAgIEJQTElTVF9JREVOVElGSUVSLkJVRkZFUi5jb21wYXJlKGRhdGEsIDAsIEJQTElTVF9JREVOVElGSUVSLkJVRkZFUi5sZW5ndGgpID09PSAwXG4gICkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwbGlzdCBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgSlMgb2JqZWN0IHRvIGJlIHR1cm5lZCBpbnRvIGEgcGxpc3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYmluYXJ5IFNldCBpdCB0byB0cnVlIGZvciBhIGJpbmFyeSBwbGlzdFxuICogQHJldHVybnMge3N0cmluZ3xCdWZmZXJ9IHJldHVybnMgYSBidWZmZXIgb3IgYSBzdHJpbmcgaW4gcmVzcGVjdCB0byB0aGUgYmluYXJ5IHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiBjcmVhdGVQbGlzdChvYmplY3QsIGJpbmFyeSA9IGZhbHNlKSB7XG4gIGlmIChiaW5hcnkpIHtcbiAgICByZXR1cm4gY3JlYXRlQmluYXJ5UGxpc3Qob2JqZWN0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geG1scGxpc3QuYnVpbGQob2JqZWN0KTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyBhbiBidWZmZXIgb3IgYSBzdHJpbmcgdG8gYSBKUyBvYmplY3QgYSBwbGlzdCBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSBkYXRhIFRoZSBwbGlzdCBpbiB0aGUgZm9ybSBvZiBzdHJpbmcgb3IgQnVmZmVyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBwYXJzZWQgcGxpc3QgSlMgT2JqZWN0XG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHBsaXN0IHR5cGUgaXMgdW5rbm93blxuICovXG5mdW5jdGlvbiBwYXJzZVBsaXN0KGRhdGEpIHtcbiAgbGV0IHRleHRQbGlzdCA9IGdldFhtbFBsaXN0KGRhdGEpO1xuICBpZiAodGV4dFBsaXN0KSB7XG4gICAgcmV0dXJuIHhtbHBsaXN0LnBhcnNlKHRleHRQbGlzdCk7XG4gIH1cblxuICBsZXQgYmluYXJ5UGxpc3QgPSBnZXRCaW5hcnlQbGlzdChkYXRhKTtcbiAgaWYgKGJpbmFyeVBsaXN0KSB7XG4gICAgcmV0dXJuIHBhcnNlQmluYXJ5UGxpc3QoYmluYXJ5UGxpc3QpWzBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgcGxpc3QsIGRhdGE6ICR7ZGF0YS50b1N0cmluZygpfWApO1xufVxuXG5leHBvcnQge1xuICBwYXJzZVBsaXN0RmlsZSxcbiAgcGFyc2VQbGlzdCxcbiAgY3JlYXRlUGxpc3QsXG4gIHVwZGF0ZVBsaXN0RmlsZSxcbiAgY3JlYXRlQmluYXJ5UGxpc3QsXG4gIHBhcnNlQmluYXJ5UGxpc3QsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUc7RUFDeEJDLE1BQU0sRUFBRUMsTUFBTSxDQUFDQyxJQUFQLENBQVksVUFBWixDQURnQjtFQUV4QkMsSUFBSSxFQUFFO0FBRmtCLENBQTFCO0FBSUEsTUFBTUMsZ0JBQWdCLEdBQUc7RUFDdkJKLE1BQU0sRUFBRUMsTUFBTSxDQUFDQyxJQUFQLENBQVksR0FBWixDQURlO0VBRXZCQyxJQUFJLEVBQUU7QUFGaUIsQ0FBekI7O0FBTUEsZUFBZUUsaUJBQWYsQ0FBaUNDLGFBQWpDLEVBQWdEO0VBQzlDLElBQUlDLFVBQVUsR0FBRyxNQUFNQyxXQUFBLENBQUdDLFFBQUgsQ0FBWUgsYUFBWixFQUEyQixNQUEzQixDQUF2QjtFQUNBLE9BQU9JLGNBQUEsQ0FBU0MsS0FBVCxDQUFlSixVQUFmLENBQVA7QUFDRDs7QUFTRCxlQUFlSyxjQUFmLENBQThCQyxLQUE5QixFQUFxQ0MsU0FBUyxHQUFHLElBQWpELEVBQXVEQyxLQUFLLEdBQUcsSUFBL0QsRUFBcUU7RUFFbkUsSUFBSSxFQUFFLE1BQU1QLFdBQUEsQ0FBR1EsTUFBSCxDQUFVSCxL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
160
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCUExJU1RfSURFTlRJRklFUiIsIkJVRkZFUiIsIkJ1ZmZlciIsImZyb20iLCJURVhUIiwiUExJU1RfSURFTlRJRklFUiIsInBhcnNlWG1sUGxpc3RGaWxlIiwicGxpc3RGaWxlbmFtZSIsInhtbENvbnRlbnQiLCJmcyIsInJlYWRGaWxlIiwieG1scGxpc3QiLCJwYXJzZSIsInBhcnNlUGxpc3RGaWxlIiwicGxpc3QiLCJtdXN0RXhpc3QiLCJxdWlldCIsImV4aXN0cyIsImxvZyIsImVycm9yQW5kVGhyb3ciLCJkZWJ1ZyIsIm9iaiIsInR5cGUiLCJicGxpc3RQYXJzZSIsInBhcnNlRmlsZSIsImxlbmd0aCIsIkVycm9yIiwiaWduIiwiZXJyIiwibWVzc2FnZSIsInVwZGF0ZVBsaXN0RmlsZSIsInVwZGF0ZWRGaWVsZHMiLCJiaW5hcnkiLCJfIiwiZXh0ZW5kIiwibmV3UGxpc3QiLCJicGxpc3RDcmVhdGUiLCJidWlsZCIsIndyaXRlRmlsZSIsImNyZWF0ZUJpbmFyeVBsaXN0IiwiZGF0YSIsInBhcnNlQmluYXJ5UGxpc3QiLCJwYXJzZUJ1ZmZlciIsImdldFhtbFBsaXN0IiwiaXNTdHJpbmciLCJzdGFydHNXaXRoIiwiaXNCdWZmZXIiLCJjb21wYXJlIiwidG9TdHJpbmciLCJnZXRCaW5hcnlQbGlzdCIsImNyZWF0ZVBsaXN0Iiwib2JqZWN0IiwicGFyc2VQbGlzdCIsInRleHRQbGlzdCIsImJpbmFyeVBsaXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3BsaXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB4bWxwbGlzdCBmcm9tICdwbGlzdCc7XG5pbXBvcnQgYnBsaXN0Q3JlYXRlIGZyb20gJ2JwbGlzdC1jcmVhdG9yJztcbmltcG9ydCBicGxpc3RQYXJzZSBmcm9tICdicGxpc3QtcGFyc2VyJztcbmltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgQlBMSVNUX0lERU5USUZJRVIgPSB7XG4gIEJVRkZFUjogQnVmZmVyLmZyb20oJ2JwbGlzdDAwJyksXG4gIFRFWFQ6ICdicGxpc3QwMCcsXG59O1xuY29uc3QgUExJU1RfSURFTlRJRklFUiA9IHtcbiAgQlVGRkVSOiBCdWZmZXIuZnJvbSgnPCcpLFxuICBURVhUOiAnPCcsXG59O1xuXG4vLyBYTUwgUGxpc3QgbGlicmFyeSBoZWxwZXJcbmFzeW5jIGZ1bmN0aW9uIHBhcnNlWG1sUGxpc3RGaWxlKHBsaXN0RmlsZW5hbWUpIHtcbiAgbGV0IHhtbENvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShwbGlzdEZpbGVuYW1lLCAndXRmOCcpO1xuICByZXR1cm4geG1scGxpc3QucGFyc2UoeG1sQ29udGVudCk7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgZmlsZSBpbiB4bWwgb3IgYmluYXJ5IGZvcm1hdCBvZiBwbGlzdFxuICogQHBhcmFtIHtzdHJpbmd9IHBsaXN0IFRoZSBwbGlzdCBmaWxlIHBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbXVzdEV4aXN0IElmIHNldCB0byBmYWxzZSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGZpbGUgZG9lc24ndCBleGlzdFxuICogQHBhcmFtIHtib29sZWFufSBxdWlldCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwbGlzdCBwYXRoIHdpbGwgYmUgbG9nZ2VkIGluIGRlYnVnIGxldmVsXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxhbnk+fSBwYXJzZWQgcGxpc3QgSlMgT2JqZWN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlUGxpc3RGaWxlKHBsaXN0LCBtdXN0RXhpc3QgPSB0cnVlLCBxdWlldCA9IHRydWUpIHtcbiAgLy8gaGFuZGxlIG5vbmV4aXN0YW50IGZpbGVcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHBsaXN0KSkpIHtcbiAgICBpZiAobXVzdEV4aXN0KSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgUGxpc3QgZmlsZSBkb2Vzbid0IGV4aXN0OiAnJHtwbGlzdH0nYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5kZWJ1ZyhgUGxpc3QgZmlsZSAnJHtwbGlzdH0nIGRvZXMgbm90IGV4aXN0LiBSZXR1cm5pbmcgYW4gZW1wdHkgcGxpc3QuYCk7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgbGV0IG9iaiA9IHt9O1xuICBsZXQgdHlwZSA9ICdiaW5hcnknO1xuICB0cnkge1xuICAgIG9iaiA9IGF3YWl0IGJwbGlzdFBhcnNlLnBhcnNlRmlsZShwbGlzdCk7XG4gICAgaWYgKG9iai5sZW5ndGgpIHtcbiAgICAgIG9iaiA9IG9ialswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCaW5hcnkgZmlsZSAnJHtwbGlzdH0nJyBhcHBlYXJzIHRvIGJlIGVtcHR5YCk7XG4gICAgfVxuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0cnkge1xuICAgICAgb2JqID0gYXdhaXQgcGFyc2VYbWxQbGlzdEZpbGUocGxpc3QpO1xuICAgICAgdHlwZSA9ICd4bWwnO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBwbGlzdCBmaWxlICcke3BsaXN0fScgYXMgWE1MOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghcXVpZXQpIHtcbiAgICBsb2cuZGVidWcoYFBhcnNlZCBwbGlzdCBmaWxlICcke3BsaXN0fScgYXMgJHt0eXBlfWApO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogVXBkYXRlcyBhIHBsaXN0IGZpbGUgd2l0aCB0aGUgZ2l2ZW4gZmllbGRzXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxpc3QgVGhlIHBsaXN0IGZpbGUgcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IHVwZGF0ZWRGaWVsZHMgVGhlIHVwZGF0ZWQgZmllbGRzLXZhbHVlIHBhaXJzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpbmFyeSBJZiBzZXQgdG8gZmFsc2UsIHRoZSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBhcyBhIHhtbCBwbGlzdFxuICogQHBhcmFtIHtib29sZWFufSBtdXN0RXhpc3QgSWYgc2V0IHRvIGZhbHNlLCB0aGlzIG1ldGhvZCB3aWxsIHVwZGF0ZSBhbiBlbXB0eSBwbGlzdFxuICogQHBhcmFtIHtib29sZWFufSBxdWlldCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwbGlzdCBwYXRoIHdpbGwgYmUgbG9nZ2VkIGluIGRlYnVnIGxldmVsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBsaXN0RmlsZShcbiAgcGxpc3QsXG4gIHVwZGF0ZWRGaWVsZHMsXG4gIGJpbmFyeSA9IHRydWUsXG4gIG11c3RFeGlzdCA9IHRydWUsXG4gIHF1aWV0ID0gdHJ1ZVxuKSB7XG4gIGxldCBvYmo7XG4gIHRyeSB7XG4gICAgb2JqID0gYXdhaXQgcGFyc2VQbGlzdEZpbGUocGxpc3QsIG11c3RFeGlzdCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgdXBkYXRlIHBsaXN0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIF8uZXh0ZW5kKG9iaiwgdXBkYXRlZEZpZWxkcyk7XG4gIGxldCBuZXdQbGlzdCA9IGJpbmFyeSA/IGJwbGlzdENyZWF0ZShvYmopIDogeG1scGxpc3QuYnVpbGQob2JqKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocGxpc3QsIG5ld1BsaXN0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBzYXZlIHBsaXN0OiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIGlmICghcXVpZXQpIHtcbiAgICBsb2cuZGVidWcoYFdyb3RlIHBsaXN0IGZpbGUgJyR7cGxpc3R9J2ApO1xuICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSBiaW5hcnkgcGxpc3QgQnVmZmVyIGZyb20gYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSBUaGUgb2JqZWN0IHRvIGJlIHR1cm5lZCBpbnRvIGEgYmluYXJ5IHBsaXN0XG4gKiBAcmV0dXJucyB7QnVmZmVyfSBwbGlzdCBpbiB0aGUgZm9ybSBvZiBhIGJpbmFyeSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmluYXJ5UGxpc3QoZGF0YSkge1xuICByZXR1cm4gYnBsaXN0Q3JlYXRlKGRhdGEpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIEJ1ZmZlciBpbnRvIGFuIE9iamVjdFxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgVGhlIGJlZmZlciBvZiBhIGJpbmFyeSBwbGlzdFxuICovXG5mdW5jdGlvbiBwYXJzZUJpbmFyeVBsaXN0KGRhdGEpIHtcbiAgcmV0dXJuIGJwbGlzdFBhcnNlLnBhcnNlQnVmZmVyKGRhdGEpO1xufVxuXG5mdW5jdGlvbiBnZXRYbWxQbGlzdChkYXRhKSB7XG4gIGlmIChfLmlzU3RyaW5nKGRhdGEpICYmIGRhdGEuc3RhcnRzV2l0aChQTElTVF9JREVOVElGSUVSLlRFWFQpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKFxuICAgIF8uaXNCdWZmZXIoZGF0YSkgJiZcbiAgICBQTElTVF9JREVOVElGSUVSLkJVRkZFUi5jb21wYXJlKGRhdGEsIDAsIFBMSVNUX0lERU5USUZJRVIuQlVGRkVSLmxlbmd0aCkgPT09IDBcbiAgKSB7XG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0QmluYXJ5UGxpc3QoZGF0YSkge1xuICBpZiAoXy5pc1N0cmluZyhkYXRhKSAmJiBkYXRhLnN0YXJ0c1dpdGgoQlBMSVNUX0lERU5USUZJRVIuVEVYVCkpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSk7XG4gIH1cblxuICBpZiAoXG4gICAgXy5pc0J1ZmZlcihkYXRhKSAmJlxuICAgIEJQTElTVF9JREVOVElGSUVSLkJVRkZFUi5jb21wYXJlKGRhdGEsIDAsIEJQTElTVF9JREVOVElGSUVSLkJVRkZFUi5sZW5ndGgpID09PSAwXG4gICkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwbGlzdCBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgSlMgb2JqZWN0IHRvIGJlIHR1cm5lZCBpbnRvIGEgcGxpc3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYmluYXJ5IFNldCBpdCB0byB0cnVlIGZvciBhIGJpbmFyeSBwbGlzdFxuICogQHJldHVybnMge3N0cmluZ3xCdWZmZXJ9IHJldHVybnMgYSBidWZmZXIgb3IgYSBzdHJpbmcgaW4gcmVzcGVjdCB0byB0aGUgYmluYXJ5IHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiBjcmVhdGVQbGlzdChvYmplY3QsIGJpbmFyeSA9IGZhbHNlKSB7XG4gIGlmIChiaW5hcnkpIHtcbiAgICByZXR1cm4gY3JlYXRlQmluYXJ5UGxpc3Qob2JqZWN0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geG1scGxpc3QuYnVpbGQob2JqZWN0KTtcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyBhbiBidWZmZXIgb3IgYSBzdHJpbmcgdG8gYSBKUyBvYmplY3QgYSBwbGlzdCBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd8QnVmZmVyfSBkYXRhIFRoZSBwbGlzdCBpbiB0aGUgZm9ybSBvZiBzdHJpbmcgb3IgQnVmZmVyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBwYXJzZWQgcGxpc3QgSlMgT2JqZWN0XG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHBsaXN0IHR5cGUgaXMgdW5rbm93blxuICovXG5mdW5jdGlvbiBwYXJzZVBsaXN0KGRhdGEpIHtcbiAgbGV0IHRleHRQbGlzdCA9IGdldFhtbFBsaXN0KGRhdGEpO1xuICBpZiAodGV4dFBsaXN0KSB7XG4gICAgcmV0dXJuIHhtbHBsaXN0LnBhcnNlKHRleHRQbGlzdCk7XG4gIH1cblxuICBsZXQgYmluYXJ5UGxpc3QgPSBnZXRCaW5hcnlQbGlzdChkYXRhKTtcbiAgaWYgKGJpbmFyeVBsaXN0KSB7XG4gICAgcmV0dXJuIHBhcnNlQmluYXJ5UGxpc3QoYmluYXJ5UGxpc3QpWzBdO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgcGxpc3QsIGRhdGE6ICR7ZGF0YS50b1N0cmluZygpfWApO1xufVxuXG5leHBvcnQge1xuICBwYXJzZVBsaXN0RmlsZSxcbiAgcGFyc2VQbGlzdCxcbiAgY3JlYXRlUGxpc3QsXG4gIHVwZGF0ZVBsaXN0RmlsZSxcbiAgY3JlYXRlQmluYXJ5UGxpc3QsXG4gIHBhcnNlQmluYXJ5UGxpc3QsXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsaUJBQWlCLEdBQUc7RUFDeEJDLE1BQU0sRUFBRUMsTUFBTSxDQUFDQyxJQUFQLENBQVksVUFBWixDQURnQjtFQUV4QkMsSUFBSSxFQUFFO0FBRmtCLENBQTFCO0FBSUEsTUFBTUMsZ0JBQWdCLEdBQUc7RUFDdkJKLE1BQU0sRUFBRUMsTUFBTSxDQUFDQyxJQUFQLENBQVksR0FBWixDQURlO0VBRXZCQyxJQUFJLEVBQUU7QUFGaUIsQ0FBekI7O0FBTUEsZUFBZUUsaUJBQWYsQ0FBaUNDLGFBQWpDLEVBQWdEO0VBQzlDLElBQUlDLFVBQVUsR0FBRyxNQUFNQyxXQUFBLENBQUdDLFFBQUgsQ0FBWUgsYUFBWixFQUEyQixNQUEzQixDQUF2QjtFQUNBLE9BQU9JLGNBQUEsQ0FBU0MsS0FBVCxDQUFlSixVQUFmLENBQVA7QUFDRDs7QUFTRCxlQUFlSyxjQUFmLENBQThCQyxLQUE5QixFQUFxQ0MsU0FBUyxHQUFHLElBQWpELEVBQXVEQyxLQUFLLEdBQUcsSUFBL0QsRUFBcUU7RUFFbkUsSUFBSSxFQUFFLE1BQU1QLFdBQUEsQ0FBR1EsTUFBSCxDQUFVSCxL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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plist.js","names":["BPLIST_IDENTIFIER","BUFFER","Buffer","from","TEXT","PLIST_IDENTIFIER","parseXmlPlistFile","plistFilename","xmlContent","fs","readFile","xmlplist","parse","parsePlistFile","plist","mustExist","quiet","exists","log","errorAndThrow","debug","obj","type","bplistParse","parseFile","length","Error","ign","err","message","updatePlistFile","updatedFields","binary","_","extend","newPlist","bplistCreate","build","writeFile","createBinaryPlist","data","parseBinaryPlist","parseBuffer","getXmlPlist","isString","startsWith","isBuffer","compare","toString","getBinaryPlist","createPlist","object","parsePlist","textPlist","binaryPlist"],"sources":["../../lib/plist.js"],"sourcesContent":["import xmlplist from 'plist';\nimport bplistCreate from 'bplist-creator';\nimport bplistParse from 'bplist-parser';\nimport fs from './fs';\nimport log from './logger';\nimport _ from 'lodash';\n\nconst BPLIST_IDENTIFIER = {\n BUFFER: Buffer.from('bplist00'),\n TEXT: 'bplist00',\n};\nconst PLIST_IDENTIFIER = {\n BUFFER: Buffer.from('<'),\n TEXT: '<',\n};\n\n// XML Plist library helper\nasync function parseXmlPlistFile(plistFilename) {\n let xmlContent = await fs.readFile(plistFilename, 'utf8');\n return xmlplist.parse(xmlContent);\n}\n\n/**\n * Parses a file in xml or binary format of plist\n * @param {string} plist The plist file path\n * @param {boolean} mustExist If set to false, this method will return an empty object when the file doesn't exist\n * @param {boolean} quiet If set to false, the plist path will be logged in debug level\n * @returns {Promise<any>} parsed plist JS Object\n */\nasync function parsePlistFile(plist, mustExist = true, quiet = true) {\n // handle nonexistant file\n if (!(await fs.exists(plist))) {\n if (mustExist) {\n log.errorAndThrow(`Plist file doesn't exist: '${plist}'`);\n } else {\n log.debug(`Plist file '${plist}' does not exist. Returning an empty plist.`);\n return {};\n }\n }\n\n let obj = {};\n let type = 'binary';\n try {\n obj = await bplistParse.parseFile(plist);\n if (obj.length) {\n obj = obj[0];\n } else {\n throw new Error(`Binary file '${plist}'' appears to be empty`);\n }\n } catch (ign) {\n try {\n obj = await parseXmlPlistFile(plist);\n type = 'xml';\n } catch (err) {\n log.errorAndThrow(`Could not parse plist file '${plist}' as XML: ${err.message}`);\n }\n }\n\n if (!quiet) {\n log.debug(`Parsed plist file '${plist}' as ${type}`);\n }\n return obj;\n}\n\n/**\n * Updates a plist file with the given fields\n * @param {string} plist The plist file path\n * @param {Object} updatedFields The updated fields-value pairs\n * @param {boolean} binary If set to false, the file will be created as a xml plist\n * @param {boolean} mustExist If set to false, this method will update an empty plist\n * @param {boolean} quiet If set to false, the plist path will be logged in debug level\n */\nasync function updatePlistFile(\n plist,\n updatedFields,\n binary = true,\n mustExist = true,\n quiet = true\n) {\n let obj;\n try {\n obj = await parsePlistFile(plist, mustExist);\n } catch (err) {\n log.errorAndThrow(`Could not update plist: ${err.message}`);\n }\n _.extend(obj, updatedFields);\n let newPlist = binary ? bplistCreate(obj) : xmlplist.build(obj);\n try {\n await fs.writeFile(plist, newPlist);\n } catch (err) {\n log.errorAndThrow(`Could not save plist: ${err.message}`);\n }\n if (!quiet) {\n log.debug(`Wrote plist file '${plist}'`);\n }\n}\n/**\n * Creates a binary plist Buffer from an object\n * @param {Object} data The object to be turned into a binary plist\n * @returns {Buffer} plist in the form of a binary buffer\n */\nfunction createBinaryPlist(data) {\n return bplistCreate(data);\n}\n\n/**\n * Parses a Buffer into an Object\n * @param {Buffer} data The beffer of a binary plist\n */\nfunction parseBinaryPlist(data) {\n return bplistParse.parseBuffer(data);\n}\n\nfunction getXmlPlist(data) {\n if (_.isString(data) && data.startsWith(PLIST_IDENTIFIER.TEXT)) {\n return data;\n }\n if (\n _.isBuffer(data) &&\n PLIST_IDENTIFIER.BUFFER.compare(data, 0, PLIST_IDENTIFIER.BUFFER.length) === 0\n ) {\n return data.toString();\n }\n return null;\n}\n\nfunction getBinaryPlist(data) {\n if (_.isString(data) && data.startsWith(BPLIST_IDENTIFIER.TEXT)) {\n return Buffer.from(data);\n }\n\n if (\n _.isBuffer(data) &&\n BPLIST_IDENTIFIER.BUFFER.compare(data, 0, BPLIST_IDENTIFIER.BUFFER.length) === 0\n ) {\n return data;\n }\n return null;\n}\n\n/**\n * Creates a plist from an object\n * @param {Object} object The JS object to be turned into a plist\n * @param {boolean} binary Set it to true for a binary plist\n * @returns {string|Buffer} returns a buffer or a string in respect to the binary parameter\n */\nfunction createPlist(object, binary = false) {\n if (binary) {\n return createBinaryPlist(object);\n } else {\n return xmlplist.build(object);\n }\n}\n\n/**\n * Parses an buffer or a string to a JS object a plist from an object\n * @param {string|Buffer} data The plist in the form of string or Buffer\n * @returns {Object} parsed plist JS Object\n * @throws Will throw an error if the plist type is unknown\n */\nfunction parsePlist(data) {\n let textPlist = getXmlPlist(data);\n if (textPlist) {\n return xmlplist.parse(textPlist);\n }\n\n let binaryPlist = getBinaryPlist(data);\n if (binaryPlist) {\n return parseBinaryPlist(binaryPlist)[0];\n }\n\n throw new Error(`Unknown type of plist, data: ${data.toString()}`);\n}\n\nexport {\n parsePlistFile,\n parsePlist,\n createPlist,\n updatePlistFile,\n createBinaryPlist,\n parseBinaryPlist,\n};\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","names":["getProcessIds","appName","pids","stdout","exec","trim","split","map","pid","parseInt","err","code","Error","message","killProcess","force","length","args","push"],"sources":["../../lib/process.js"],"sourcesContent":["import {exec} from 'teen_process';\n\n/*\n * Exit Status for pgrep and pkill (`man pkill`)\n * 0. One or more processes matched the criteria.\n * 1. No processes matched.\n * 2. Syntax error in the command line.\n * 3. Fatal error: out of memory etc.\n */\n\nasync function getProcessIds(appName) {\n let pids;\n try {\n let {stdout} = await exec('pgrep', ['-x', appName]);\n pids = stdout\n .trim()\n .split('\\n')\n .map((pid) => parseInt(pid, 10));\n } catch (err) {\n if (parseInt(err.code, 10) !== 1) {\n throw new Error(`Error getting process ids for app '${appName}': ${err.message}`);\n }\n pids = [];\n }\n return pids;\n}\n\nasync function killProcess(appName, force = false) {\n let pids = await getProcessIds(appName);\n if (pids.length === 0) {\n // the process is not running\n return;\n }\n\n try {\n let args = force ? ['-9'] : [];\n args.push('-x', appName);\n await exec('pkill', args);\n } catch (err) {\n if (parseInt(err.code, 10) !== 1) {\n throw new Error(`Error killing app '${appName}' with pkill: ${err.message}`);\n }\n }\n}\n\nexport {getProcessIds, killProcess};\n"],"mappings":";;;;;;;;;;AAAA;;AAUA,eAAeA,aAAf,CAA6BC,OAA7B,EAAsC;EACpC,IAAIC,IAAJ;;EACA,IAAI;IACF,IAAI;MAACC;IAAD,IAAW,MAAM,IAAAC,kBAAA,EAAK,OAAL,EAAc,CAAC,IAAD,EAAOH,OAAP,CAAd,CAArB;IACAC,IAAI,GAAGC,MAAM,CACVE,IADI,GAEJC,KAFI,CAEE,IAFF,EAGJC,GAHI,CAGCC,GAAD,IAASC,QAAQ,CAACD,GAAD,EAAM,EAAN,CAHjB,CAAP;EAID,CAND,CAME,OAAOE,GAAP,EAAY;IACZ,IAAID,QAAQ,CAACC,GAAG,CAACC,IAAL,EAAW,EAAX,CAAR,KAA2B,CAA/B,EAAkC;MAChC,MAAM,IAAIC,KAAJ,CAAW,sCAAqCX,OAAQ,MAAKS,GAAG,CAACG,OAAQ,EAAzE,CAAN;IACD;;IACDX,IAAI,GAAG,EAAP;EACD;;EACD,OAAOA,IAAP;AACD;;AAED,eAAeY,WAAf,CAA2Bb,OAA3B,EAAoCc,KAAK,GAAG,KAA5C,EAAmD;EACjD,IAAIb,IAAI,GAAG,MAAMF,aAAa,CAACC,OAAD,CAA9B;;EACA,IAAIC,IAAI,CAACc,MAAL,KAAgB,CAApB,EAAuB;IAErB;EACD;;EAED,IAAI;IACF,IAAIC,IAAI,GAAGF,KAAK,GAAG,CAAC,IAAD,CAAH,GAAY,EAA5B;IACAE,IAAI,CAACC,IAAL,CAAU,IAAV,EAAgBjB,OAAhB;IACA,MAAM,IAAAG,kBAAA,EAAK,OAAL,EAAca,IAAd,CAAN;EACD,CAJD,CAIE,OAAOP,GAAP,EAAY;IACZ,IAAID,QAAQ,CAACC,GAAG,CAACC,IAAL,EAAW,EAAX,CAAR,KAA2B,CAA/B,EAAkC;MAChC,MAAM,IAAIC,KAAJ,CAAW,sBAAqBX,OAAQ,iBAAgBS,GAAG,CAACG,OAAQ,EAApE,CAAN;IACD;EACF;AACF"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -20,6 +18,8 @@ var _lodash = _interopRequireDefault(require("lodash"));
20
18
 
21
19
  var _os = _interopRequireDefault(require("os"));
22
20
 
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+
23
23
  const VERSION_PATTERN = /^(\d+\.\d+)/m;
24
24
 
25
25
  function isWindows() {
@@ -67,4 +67,4 @@ async function macOsxVersion() {
67
67
 
68
68
  return versionMatch[1];
69
69
  }
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWRVJTSU9OX1BBVFRFUk4iLCJpc1dpbmRvd3MiLCJvcyIsInR5cGUiLCJpc01hYyIsImlzTGludXgiLCJpc09TV2luNjQiLCJwcm9jZXNzIiwiYXJjaCIsIl8iLCJoYXMiLCJlbnYiLCJzdGRvdXQiLCJleGVjIiwidHJpbSIsImlzNjQiLCJtYWNPc3hWZXJzaW9uIiwiZXJyIiwiRXJyb3IiLCJ2ZXJzaW9uTWF0Y2giXSwic291cmNlcyI6WyIuLi8uLi9saWIvc3lzdGVtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuXG5jb25zdCBWRVJTSU9OX1BBVFRFUk4gPSAvXihcXGQrXFwuXFxkKykvbTtcblxuZnVuY3Rpb24gaXNXaW5kb3dzKCkge1xuICByZXR1cm4gb3MudHlwZSgpID09PSAnV2luZG93c19OVCc7XG59XG5cbmZ1bmN0aW9uIGlzTWFjKCkge1xuICByZXR1cm4gb3MudHlwZSgpID09PSAnRGFyd2luJztcbn1cblxuZnVuY3Rpb24gaXNMaW51eCgpIHtcbiAgcmV0dXJuICFpc1dpbmRvd3MoKSAmJiAhaXNNYWMoKTtcbn1cblxuZnVuY3Rpb24gaXNPU1dpbjY0KCkge1xuICByZXR1cm4gcHJvY2Vzcy5hcmNoID09PSAneDY0JyB8fCBfLmhhcyhwcm9jZXNzLmVudiwgJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXJjaCgpIHtcbiAgaWYgKGlzTGludXgoKSB8fCBpc01hYygpKSB7XG4gICAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygndW5hbWUnLCBbJy1tJ10pO1xuICAgIHJldHVybiBzdGRvdXQudHJpbSgpID09PSAnaTY4NicgPyAnMzInIDogJzY0JztcbiAgfSBlbHNlIGlmIChpc1dpbmRvd3MoKSkge1xuICAgIGxldCBpczY0ID0gdGhpcy5pc09TV2luNjQoKTtcbiAgICByZXR1cm4gaXM2NCA/ICc2NCcgOiAnMzInO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1hY09zeFZlcnNpb24oKSB7XG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgc3Rkb3V0ID0gKGF3YWl0IGV4ZWMoJ3N3X3ZlcnMnLCBbJy1wcm9kdWN0VmVyc2lvbiddKSkuc3Rkb3V0LnRyaW0oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZWN0IE1hYyBPUyBYIFZlcnNpb246ICR7ZXJyfWApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbk1hdGNoID0gVkVSU0lPTl9QQVRURVJOLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCF2ZXJzaW9uTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlY3QgTWFjIE9TIFggVmVyc2lvbiBmcm9tIHN3X3ZlcnMgb3V0cHV0OiAnJHtzdGRvdXR9J2ApO1xuICB9XG4gIHJldHVybiB2ZXJzaW9uTWF0Y2hbMV07XG59XG5cbmV4cG9ydCB7aXNXaW5kb3dzLCBpc01hYywgaXNMaW51eCwgaXNPU1dpbjY0LCBhcmNoLCBtYWNPc3hWZXJzaW9ufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGVBQWUsR0FBRyxjQUF4Qjs7QUFFQSxTQUFTQyxTQUFULEdBQXFCO0VBQ25CLE9BQU9DLFdBQUEsQ0FBR0MsSUFBSCxPQUFjLFlBQXJCO0FBQ0Q7O0FBRUQsU0FBU0MsS0FBVCxHQUFpQjtFQUNmLE9BQU9GLFdBQUEsQ0FBR0MsSUFBSCxPQUFjLFFBQXJCO0FBQ0Q7O0FBRUQsU0FBU0UsT0FBVCxHQUFtQjtFQUNqQixPQUFPLENBQUNKLFNBQVMsRUFBVixJQUFnQixDQUFDRyxLQUFLLEVBQTdCO0FBQ0Q7O0FBRUQsU0FBU0UsU0FBVCxHQUFxQjtFQUNuQixPQUFPQyxPQUFPLENBQUNDLElBQVIsS0FBaUIsS0FBakIsSUFBMEJDLGVBQUEsQ0FBRUMsR0FBRixDQUFNSCxPQUFPLENBQUNJLEdBQWQsRUFBbUIsd0JBQW5CLENBQWpDO0FBQ0Q7O0FBRUQsZUFBZUgsSUFBZixHQUFzQjtFQUNwQixJQUFJSCxPQUFPLE1BQU1ELEtBQUssRUFBdEIsRUFBMEI7SUFDeEIsSUFBSTtNQUFDUTtJQUFELElBQVcsTUFBTSxJQUFBQyxrQkFBQSxFQUFLLE9BQUwsRUFBYyxDQUFDLElBQUQsQ0FBZCxDQUFyQjtJQUNBLE9BQU9ELE1BQU0sQ0FBQ0UsSUFBUCxPQUFrQixNQUFsQixHQUEyQixJQUEzQixHQUFrQyxJQUF6QztFQUNELENBSEQsTUFHTyxJQUFJYixTQUFTLEVBQWIsRUFBaUI7SUFDdEIsSUFBSWMsSUFBSSxHQUFHLEtBQUtULFNBQUwsRUFBWDtJQUNBLE9BQU9TLElBQUksR0FBRyxJQUFILEdBQVUsSUFBckI7RUFDRDtBQUNGOztBQUVELGVBQWVDLGFBQWYsR0FBK0I7RUFDN0IsSUFBSUosTUFBSjs7RUFDQSxJQUFJO0lBQ0ZBLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBQUMsa0JBQUEsRUFBSyxTQUFMLEVBQWdCLENBQUMsaUJBQUQsQ0FBaEIsQ0FBUCxFQUE2Q0QsTUFBN0MsQ0FBb0RFLElBQXBELEVBQVQ7RUFDRCxDQUZELENBRUUsT0FBT0csR0FBUCxFQUFZO0lBQ1osTUFBTSxJQUFJQyxLQUFKLENBQVcsc0NBQXFDRCxHQUFJLEVBQXBELENBQU47RUFDRDs7RUFFRCxNQUFNRSxZQUFZLEdBQUduQixlQUFlLENBQUNhLElBQWhCLENBQXFCRCxNQUFyQixDQUFyQjs7RUFDQSxJQUFJLENBQUNPLFlBQUwsRUFBbUI7SUFDakIsTUFBTSxJQUFJRCxLQUFKLENBQVcsMkRBQTBETixNQUFPLEdBQTVFLENBQU47RUFDRDs7RUFDRCxPQUFPTyxZQUFZLENBQUMsQ0FBRCxDQUFuQjtBQUNEIn0=
70
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWRVJTSU9OX1BBVFRFUk4iLCJpc1dpbmRvd3MiLCJvcyIsInR5cGUiLCJpc01hYyIsImlzTGludXgiLCJpc09TV2luNjQiLCJwcm9jZXNzIiwiYXJjaCIsIl8iLCJoYXMiLCJlbnYiLCJzdGRvdXQiLCJleGVjIiwidHJpbSIsImlzNjQiLCJtYWNPc3hWZXJzaW9uIiwiZXJyIiwiRXJyb3IiLCJ2ZXJzaW9uTWF0Y2giXSwic291cmNlcyI6WyIuLi8uLi9saWIvc3lzdGVtLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhlY30gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuXG5jb25zdCBWRVJTSU9OX1BBVFRFUk4gPSAvXihcXGQrXFwuXFxkKykvbTtcblxuZnVuY3Rpb24gaXNXaW5kb3dzKCkge1xuICByZXR1cm4gb3MudHlwZSgpID09PSAnV2luZG93c19OVCc7XG59XG5cbmZ1bmN0aW9uIGlzTWFjKCkge1xuICByZXR1cm4gb3MudHlwZSgpID09PSAnRGFyd2luJztcbn1cblxuZnVuY3Rpb24gaXNMaW51eCgpIHtcbiAgcmV0dXJuICFpc1dpbmRvd3MoKSAmJiAhaXNNYWMoKTtcbn1cblxuZnVuY3Rpb24gaXNPU1dpbjY0KCkge1xuICByZXR1cm4gcHJvY2Vzcy5hcmNoID09PSAneDY0JyB8fCBfLmhhcyhwcm9jZXNzLmVudiwgJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXJjaCgpIHtcbiAgaWYgKGlzTGludXgoKSB8fCBpc01hYygpKSB7XG4gICAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYygndW5hbWUnLCBbJy1tJ10pO1xuICAgIHJldHVybiBzdGRvdXQudHJpbSgpID09PSAnaTY4NicgPyAnMzInIDogJzY0JztcbiAgfSBlbHNlIGlmIChpc1dpbmRvd3MoKSkge1xuICAgIGxldCBpczY0ID0gdGhpcy5pc09TV2luNjQoKTtcbiAgICByZXR1cm4gaXM2NCA/ICc2NCcgOiAnMzInO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1hY09zeFZlcnNpb24oKSB7XG4gIGxldCBzdGRvdXQ7XG4gIHRyeSB7XG4gICAgc3Rkb3V0ID0gKGF3YWl0IGV4ZWMoJ3N3X3ZlcnMnLCBbJy1wcm9kdWN0VmVyc2lvbiddKSkuc3Rkb3V0LnRyaW0oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZWN0IE1hYyBPUyBYIFZlcnNpb246ICR7ZXJyfWApO1xuICB9XG5cbiAgY29uc3QgdmVyc2lvbk1hdGNoID0gVkVSU0lPTl9QQVRURVJOLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCF2ZXJzaW9uTWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBkZXRlY3QgTWFjIE9TIFggVmVyc2lvbiBmcm9tIHN3X3ZlcnMgb3V0cHV0OiAnJHtzdGRvdXR9J2ApO1xuICB9XG4gIHJldHVybiB2ZXJzaW9uTWF0Y2hbMV07XG59XG5cbmV4cG9ydCB7aXNXaW5kb3dzLCBpc01hYywgaXNMaW51eCwgaXNPU1dpbjY0LCBhcmNoLCBtYWNPc3hWZXJzaW9ufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLGVBQWUsR0FBRyxjQUF4Qjs7QUFFQSxTQUFTQyxTQUFULEdBQXFCO0VBQ25CLE9BQU9DLFdBQUEsQ0FBR0MsSUFBSCxPQUFjLFlBQXJCO0FBQ0Q7O0FBRUQsU0FBU0MsS0FBVCxHQUFpQjtFQUNmLE9BQU9GLFdBQUEsQ0FBR0MsSUFBSCxPQUFjLFFBQXJCO0FBQ0Q7O0FBRUQsU0FBU0UsT0FBVCxHQUFtQjtFQUNqQixPQUFPLENBQUNKLFNBQVMsRUFBVixJQUFnQixDQUFDRyxLQUFLLEVBQTdCO0FBQ0Q7O0FBRUQsU0FBU0UsU0FBVCxHQUFxQjtFQUNuQixPQUFPQyxPQUFPLENBQUNDLElBQVIsS0FBaUIsS0FBakIsSUFBMEJDLGVBQUEsQ0FBRUMsR0FBRixDQUFNSCxPQUFPLENBQUNJLEdBQWQsRUFBbUIsd0JBQW5CLENBQWpDO0FBQ0Q7O0FBRUQsZUFBZUgsSUFBZixHQUFzQjtFQUNwQixJQUFJSCxPQUFPLE1BQU1ELEtBQUssRUFBdEIsRUFBMEI7SUFDeEIsSUFBSTtNQUFDUTtJQUFELElBQVcsTUFBTSxJQUFBQyxrQkFBQSxFQUFLLE9BQUwsRUFBYyxDQUFDLElBQUQsQ0FBZCxDQUFyQjtJQUNBLE9BQU9ELE1BQU0sQ0FBQ0UsSUFBUCxPQUFrQixNQUFsQixHQUEyQixJQUEzQixHQUFrQyxJQUF6QztFQUNELENBSEQsTUFHTyxJQUFJYixTQUFTLEVBQWIsRUFBaUI7SUFDdEIsSUFBSWMsSUFBSSxHQUFHLEtBQUtULFNBQUwsRUFBWDtJQUNBLE9BQU9TLElBQUksR0FBRyxJQUFILEdBQVUsSUFBckI7RUFDRDtBQUNGOztBQUVELGVBQWVDLGFBQWYsR0FBK0I7RUFDN0IsSUFBSUosTUFBSjs7RUFDQSxJQUFJO0lBQ0ZBLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBQUMsa0JBQUEsRUFBSyxTQUFMLEVBQWdCLENBQUMsaUJBQUQsQ0FBaEIsQ0FBUCxFQUE2Q0QsTUFBN0MsQ0FBb0RFLElBQXBELEVBQVQ7RUFDRCxDQUZELENBRUUsT0FBT0csR0FBUCxFQUFZO0lBQ1osTUFBTSxJQUFJQyxLQUFKLENBQVcsc0NBQXFDRCxHQUFJLEVBQXBELENBQU47RUFDRDs7RUFFRCxNQUFNRSxZQUFZLEdBQUduQixlQUFlLENBQUNhLElBQWhCLENBQXFCRCxNQUFyQixDQUFyQjs7RUFDQSxJQUFJLENBQUNPLFlBQUwsRUFBbUI7SUFDakIsTUFBTSxJQUFJRCxLQUFKLENBQVcsMkRBQTBETixNQUFPLEdBQTVFLENBQU47RUFDRDs7RUFDRCxPQUFPTyxZQUFZLENBQUMsQ0FBRCxDQUFuQjtBQUNEIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","names":["VERSION_PATTERN","isWindows","os","type","isMac","isLinux","isOSWin64","process","arch","_","has","env","stdout","exec","trim","is64","macOsxVersion","err","Error","versionMatch"],"sources":["../../lib/system.js"],"sourcesContent":["import {exec} from 'teen_process';\nimport _ from 'lodash';\nimport os from 'os';\n\nconst VERSION_PATTERN = /^(\\d+\\.\\d+)/m;\n\nfunction isWindows() {\n return os.type() === 'Windows_NT';\n}\n\nfunction isMac() {\n return os.type() === 'Darwin';\n}\n\nfunction isLinux() {\n return !isWindows() && !isMac();\n}\n\nfunction isOSWin64() {\n return process.arch === 'x64' || _.has(process.env, 'PROCESSOR_ARCHITEW6432');\n}\n\nasync function arch() {\n if (isLinux() || isMac()) {\n let {stdout} = await exec('uname', ['-m']);\n return stdout.trim() === 'i686' ? '32' : '64';\n } else if (isWindows()) {\n let is64 = this.isOSWin64();\n return is64 ? '64' : '32';\n }\n}\n\nasync function macOsxVersion() {\n let stdout;\n try {\n stdout = (await exec('sw_vers', ['-productVersion'])).stdout.trim();\n } catch (err) {\n throw new Error(`Could not detect Mac OS X Version: ${err}`);\n }\n\n const versionMatch = VERSION_PATTERN.exec(stdout);\n if (!versionMatch) {\n throw new Error(`Could not detect Mac OS X Version from sw_vers output: '${stdout}'`);\n }\n return versionMatch[1];\n}\n\nexport {isWindows, isMac, isLinux, isOSWin64, arch, macOsxVersion};\n"],"mappings":";;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;AAEA,MAAMA,eAAe,GAAG,cAAxB;;AAEA,SAASC,SAAT,GAAqB;EACnB,OAAOC,WAAA,CAAGC,IAAH,OAAc,YAArB;AACD;;AAED,SAASC,KAAT,GAAiB;EACf,OAAOF,WAAA,CAAGC,IAAH,OAAc,QAArB;AACD;;AAED,SAASE,OAAT,GAAmB;EACjB,OAAO,CAACJ,SAAS,EAAV,IAAgB,CAACG,KAAK,EAA7B;AACD;;AAED,SAASE,SAAT,GAAqB;EACnB,OAAOC,OAAO,CAACC,IAAR,KAAiB,KAAjB,IAA0BC,eAAA,CAAEC,GAAF,CAAMH,OAAO,CAACI,GAAd,EAAmB,wBAAnB,CAAjC;AACD;;AAED,eAAeH,IAAf,GAAsB;EACpB,IAAIH,OAAO,MAAMD,KAAK,EAAtB,EAA0B;IACxB,IAAI;MAACQ;IAAD,IAAW,MAAM,IAAAC,kBAAA,EAAK,OAAL,EAAc,CAAC,IAAD,CAAd,CAArB;IACA,OAAOD,MAAM,CAACE,IAAP,OAAkB,MAAlB,GAA2B,IAA3B,GAAkC,IAAzC;EACD,CAHD,MAGO,IAAIb,SAAS,EAAb,EAAiB;IACtB,IAAIc,IAAI,GAAG,KAAKT,SAAL,EAAX;IACA,OAAOS,IAAI,GAAG,IAAH,GAAU,IAArB;EACD;AACF;;AAED,eAAeC,aAAf,GAA+B;EAC7B,IAAIJ,MAAJ;;EACA,IAAI;IACFA,MAAM,GAAG,CAAC,MAAM,IAAAC,kBAAA,EAAK,SAAL,EAAgB,CAAC,iBAAD,CAAhB,CAAP,EAA6CD,MAA7C,CAAoDE,IAApD,EAAT;EACD,CAFD,CAEE,OAAOG,GAAP,EAAY;IACZ,MAAM,IAAIC,KAAJ,CAAW,sCAAqCD,GAAI,EAApD,CAAN;EACD;;EAED,MAAME,YAAY,GAAGnB,eAAe,CAACa,IAAhB,CAAqBD,MAArB,CAArB;;EACA,IAAI,CAACO,YAAL,EAAmB;IACjB,MAAM,IAAID,KAAJ,CAAW,2DAA0DN,MAAO,GAA5E,CAAN;EACD;;EACD,OAAOO,YAAY,CAAC,CAAD,CAAnB;AACD"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -22,6 +20,8 @@ var _constants = _interopRequireDefault(require("constants"));
22
20
 
23
21
  var _logger = _interopRequireDefault(require("./logger"));
24
22
 
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+
25
25
  const RDWR_EXCL = _constants.default.O_CREAT | _constants.default.O_TRUNC | _constants.default.O_RDWR | _constants.default.O_EXCL;
26
26
 
27
27
  async function tempDir() {
@@ -85,4 +85,4 @@ exports.openDir = openDir;
85
85
  async function staticDir() {
86
86
  return _static;
87
87
  }
88
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRFdSX0VYQ0wiLCJjbnN0IiwiT19DUkVBVCIsIk9fVFJVTkMiLCJPX1JEV1IiLCJPX0VYQ0wiLCJ0ZW1wRGlyIiwibm93IiwiRGF0ZSIsImZpbGVQYXRoIiwibm9kZVBhdGgiLCJqb2luIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9UTVBfRElSIiwib3MiLCJ0bXBkaXIiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInBpZCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsImZzIiwibWtkaXIiLCJwYXRoIiwicmF3QWZmaXhlcyIsImRlZmF1bHRQcmVmaXgiLCJhZmZpeGVzIiwicGFyc2VBZmZpeGVzIiwibmFtZSIsInByZWZpeCIsInN1ZmZpeCIsInRlbXBEaXJlY3RvcnkiLCJvcGVuIiwiZmQiLCJlcnIiLCJsb2ciLCJlcnJvckFuZFRocm93IiwiRXJyb3IiLCJfc3RhdGljIiwib3BlbkRpciIsInN0YXRpY0RpciJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi90ZW1wZGlyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRoaXMgbGlicmFyeSBpcyBvcmlnaW5hdGVkIGZyb20gdGVtcC5qcyBhdCBodHRwOi8vZ2l0aHViLmNvbS9icnVjZS9ub2RlLXRlbXAgKi9cbmltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY25zdCBmcm9tICdjb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cbmNvbnN0IFJEV1JfRVhDTCA9IGNuc3QuT19DUkVBVCB8IGNuc3QuT19UUlVOQyB8IGNuc3QuT19SRFdSIHwgY25zdC5PX0VYQ0w7XG5cbi8qKlxuICogR2VuZXJhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIG9zLnRlbXBkaXIoKSBvciBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUi5cbiAqIGUuZy5cbiAqIC0gTm8gYHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSYDogYC92YXIvZm9sZGVycy8zNC8yMjIyc2g4bjI3ZDZyY3A3anFsa3c4a20wMDAwZ24vVC94eHh4eHh4eC55eXl5YFxuICogLSBXaXRoIGBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiA9ICcvcGF0aC90by9yb290J2A6IGAvcGF0aC90by9yb290L3h4eHh4eHh4Lnl5eXlgXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gQSBwYXRoIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRlbXBEaXIoKSB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGZpbGVQYXRoID0gbm9kZVBhdGguam9pbihcbiAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fCBvcy50bXBkaXIoKSxcbiAgICBbXG4gICAgICBub3cuZ2V0RnVsbFllYXIoKSxcbiAgICAgIG5vdy5nZXRNb250aCgpLFxuICAgICAgbm93LmdldERhdGUoKSxcbiAgICAgICctJyxcbiAgICAgIHByb2Nlc3MucGlkLFxuICAgICAgJy0nLFxuICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMCArIDEpLnRvU3RyaW5nKDM2KSxcbiAgICBdLmpvaW4oJycpXG4gICk7XG4gIC8vIGNyZWF0ZXMgYSB0ZW1wIGRpcmVjdG9yeSB1c2luZyB0aGUgZGF0ZSBhbmQgYSByYW5kb20gc3RyaW5nXG5cbiAgYXdhaXQgZnMubWtkaXIoZmlsZVBhdGgpO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBBZmZpeGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByZWZpeF0gLSBwcmVmaXggb2YgdGhlIHRlbXAgZGlyZWN0b3J5IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3VmZml4XSAtIHN1ZmZpeCBvZiB0aGUgdGVtcCBkaXJlY3RvcnkgbmFtZVxuICovXG5cbi8qKlxuICogR2VuZXJhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIG9zLnRlbXBkaXIoKSBvciBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUlxuICogd2l0aCBhcmJpdHJhcnkgcHJlZml4L3N1ZmZpeCBmb3IgdGhlIGRpcmVjdG9yeSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFmZml4ZXN9IHJhd0FmZml4ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFByZWZpeF1cbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59ICBBIHBhdGggdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2l0aCByYXdBZmZpeGVzIGFuZCBkZWZhdWx0UHJlZml4XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBhdGgocmF3QWZmaXhlcywgZGVmYXVsdFByZWZpeCkge1xuICBjb25zdCBhZmZpeGVzID0gcGFyc2VBZmZpeGVzKHJhd0FmZml4ZXMsIGRlZmF1bHRQcmVmaXgpO1xuICBjb25zdCBuYW1lID0gYCR7YWZmaXhlcy5wcmVmaXggfHwgJyd9JHthZmZpeGVzLnN1ZmZpeCB8fCAnJ31gO1xuICBjb25zdCB0ZW1wRGlyZWN0b3J5ID0gYXdhaXQgdGVtcERpcigpO1xuICByZXR1cm4gbm9kZVBhdGguam9pbih0ZW1wRGlyZWN0b3J5LCBuYW1lKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBPcGVuZWRBZmZpeGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIGZpbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmZCAtIFRoZSBmaWxlIGRlc2NyaXB0b3Igb3BlbmVkXG4gKi9cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gb3MudGVtcGRpcigpIG9yIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSXG4gKiB3aXRoIGFyYml0cmFyeSBwcmVmaXgvc3VmZml4IGZvciB0aGUgZGlyZWN0b3J5IG5hbWUgYW5kIHJldHVybiBpdCBhcyBvcGVuLlxuICpcbiAqIEBwYXJhbSB7QWZmaXhlc30gYWZmaXhlc1xuICogQHJldHVybnMge1Byb21pc2U8T3BlbmVkQWZmaXhlcz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW4oYWZmaXhlcykge1xuICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IHBhdGgoYWZmaXhlcywgJ2YtJyk7XG4gIHRyeSB7XG4gICAgbGV0IGZkID0gYXdhaXQgZnMub3BlbihmaWxlUGF0aCwgUkRXUl9FWENMLCAwbzYwMCk7XG4gICAgLy8gb3BlbnMgdGhlIGZpbGUgaW4gbW9kZSAzODRcbiAgICByZXR1cm4ge3BhdGg6IGZpbGVQYXRoLCBmZH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBsb2cuZXJyb3JBbmRUaHJvdyhlcnIpO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIFJldHVybnMgcHJlZml4L3N1ZmZpeCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBZmZpeGVzfSByYXdBZmZpeGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gW2RlZmF1bHRQcmVmaXhdXG4gKiBAcmV0dXJucyB7QWZmaXhlc31cbiAqL1xuZnVuY3Rpb24gcGFyc2VBZmZpeGVzKHJhd0FmZml4ZXMsIGRlZmF1bHRQcmVmaXgpIHtcbiAgLyoqIEB0eXBlIHtBZmZpeGVzfSAqL1xuICBsZXQgYWZmaXhlcyA9IHt9O1xuICBpZiAocmF3QWZmaXhlcykge1xuICAgIHN3aXRjaCAodHlwZW9mIHJhd0FmZml4ZXMpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGFmZml4ZXMucHJlZml4ID0gcmF3QWZmaXhlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBhZmZpeGVzID0gcmF3QWZmaXhlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWZmaXggZGVjbGFyYXRpb246ICR7YWZmaXhlc31gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWZmaXhlcy5wcmVmaXggPSBkZWZhdWx0UHJlZml4O1xuICB9XG4gIHJldHVybiBhZmZpeGVzO1xufVxuXG5jb25zdCBfc3RhdGljID0gdGVtcERpcigpO1xuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgcGF0aCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIG5ldyB0ZW1wRGlyKCkgaWYgdGVtcFJvb3REaXJlY3RvcnkgaXMgbm90IHByb3ZpZGVkXG4gKi9cbmNvbnN0IG9wZW5EaXIgPSB0ZW1wRGlyO1xuXG4vKipcbiAqIFJldHVybnMgYSBwYXRoIHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3aGNpaCBpcyBkZWZpbmVkIGFzIHN0YXRpYyBpbiB0aGUgc2FtZSBwcm9jZXNzXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gQSB0ZW1wIGRpcmVjdG9yeSBwYXRoIHdoY2loIGlzIGRlZmluZWQgYXMgc3RhdGljIGluIHRoZSBzYW1lIHByb2Nlc3NcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmFzeW5jIGZ1bmN0aW9uIHN0YXRpY0RpcigpIHtcbiAgcmV0dXJuIF9zdGF0aWM7XG59XG5cbmV4cG9ydCB7b3BlbiwgcGF0aCwgb3BlbkRpciwgc3RhdGljRGlyfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLGtCQUFBLENBQUtDLE9BQUwsR0FBZUQsa0JBQUEsQ0FBS0UsT0FBcEIsR0FBOEJGLGtCQUFBLENBQUtHLE1BQW5DLEdBQTRDSCxrQkFBQSxDQUFLSSxNQUFuRTs7QUFVQSxlQUFlQyxPQUFmLEdBQXlCO0VBQ3ZCLE1BQU1DLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7O0VBQ0EsTUFBTUMsUUFBUSxHQUFHQyxhQUFBLENBQVNDLElBQVQsQ0FDZkMsT0FBTyxDQUFDQyxHQUFSLENBQVlDLGNBQVosSUFBOEJDLFdBQUEsQ0FBR0MsTUFBSCxFQURmLEVBRWYsQ0FDRVQsR0FBRyxDQUFDVSxXQUFKLEVBREYsRUFFRVYsR0FBRyxDQUFDVyxRQUFKLEVBRkYsRUFHRVgsR0FBRyxDQUFDWSxPQUFKLEVBSEYsRUFJRSxHQUpGLEVBS0VQLE9BQU8sQ0FBQ1EsR0FMVixFQU1FLEdBTkYsRUFPRSxDQUFDQyxJQUFJLENBQUNDLE1BQUwsS0FBZ0IsV0FBaEIsR0FBOEIsQ0FBL0IsRUFBa0NDLFFBQWxDLENBQTJDLEVBQTNDLENBUEYsRUFRRVosSUFSRixDQVFPLEVBUlAsQ0FGZSxDQUFqQjs7RUFjQSxNQUFNYSxXQUFBLENBQUdDLEtBQUgsQ0FBU2hCLFFBQVQsQ0FBTjtFQUVBLE9BQU9BLFFBQVA7QUFDRDs7QUFnQkQsZUFBZWlCLElBQWYsQ0FBb0JDLFVBQXBCLEVBQWdDQyxhQUFoQyxFQUErQztFQUM3QyxNQUFNQyxPQUFPLEdBQUdDLFlBQVksQ0FBQ0gsVUFBRCxFQUFhQyxhQUFiLENBQTVCO0VBQ0EsTUFBTUcsSUFBSSxHQUFJLEdBQUVGLE9BQU8sQ0FBQ0csTUFBUixJQUFrQixFQUFHLEdBQUVILE9BQU8sQ0FBQ0ksTUFBUixJQUFrQixFQUFHLEVBQTVEO0VBQ0EsTUFBTUMsYUFBYSxHQUFHLE1BQU01QixPQUFPLEVBQW5DO0VBQ0EsT0FBT0ksYUFBQSxDQUFTQyxJQUFULENBQWN1QixhQUFkLEVBQTZCSCxJQUE3QixDQUFQO0FBQ0Q7O0FBZUQsZUFBZUksSUFBZixDQUFvQk4sT0FBcEIsRUFBNkI7RUFDM0IsTUFBTXBCLFFBQVEsR0FBRyxNQUFNaUIsSUFBSSxDQUFDRyxPQUFELEVBQVUsSUFBVixDQUEzQjs7RUFDQSxJQUFJO0lBQ0YsSUFBSU8sRUFBRSxHQUFHLE1BQU1aLFdBQUEsQ0FBR1csSUFBSCxDQUFRMUIsUUFBUixFQUFrQlQsU0FBbEIsRUFBNkIsS0FBN0IsQ0FBZjtJQUVBLE9BQU87TUFBQzBCLElBQUksRUFBRWpCLFFBQVA7TUFBaUIyQjtJQUFqQixDQUFQO0VBQ0QsQ0FKRCxDQUlFLE9BQU9DLEdBQVAsRUFBWTtJQUNaLE9BQU9DLGVBQUEsQ0FBSUMsYUFBSixDQUFrQkYsR0FBbEIsQ0FBUDtFQUNEO0FBQ0Y7O0FBVUQsU0FBU1AsWUFBVCxDQUFzQkgsVUFBdEIsRUFBa0NDLGFBQWxDLEVBQWlEO0VBRS9DLElBQUlDLE9BQU8sR0FBRyxFQUFkOztFQUNBLElBQUlGLFVBQUosRUFBZ0I7SUFDZCxRQUFRLE9BQU9BLFVBQWY7TUFDRSxLQUFLLFFBQUw7UUFDRUUsT0FBTyxDQUFDRyxNQUFSLEdBQWlCTCxVQUFqQjtRQUNBOztNQUNGLEtBQUssUUFBTDtRQUNFRSxPQUFPLEdBQUdGLFVBQVY7UUFDQTs7TUFDRjtRQUNFLE1BQU0sSUFBSWEsS0FBSixDQUFXLDhCQUE2QlgsT0FBUSxFQUFoRCxDQUFOO0lBUko7RUFVRCxDQVhELE1BV087SUFDTEEsT0FBTyxDQUFDRyxNQUFSLEdBQWlCSixhQUFqQjtFQUNEOztFQUNELE9BQU9DLE9BQVA7QUFDRDs7QUFFRCxNQUFNWSxPQUFPLEdBQUduQyxPQUFPLEVBQXZCOztBQU9BLE1BQU1vQyxPQUFPLEdBQUdwQyxPQUFoQjs7O0FBUUEsZUFBZXFDLFNBQWYsR0FBMkI7RUFDekIsT0FBT0YsT0FBUDtBQUNEIn0=
88
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRFdSX0VYQ0wiLCJjbnN0IiwiT19DUkVBVCIsIk9fVFJVTkMiLCJPX1JEV1IiLCJPX0VYQ0wiLCJ0ZW1wRGlyIiwibm93IiwiRGF0ZSIsImZpbGVQYXRoIiwibm9kZVBhdGgiLCJqb2luIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9UTVBfRElSIiwib3MiLCJ0bXBkaXIiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInBpZCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsImZzIiwibWtkaXIiLCJwYXRoIiwicmF3QWZmaXhlcyIsImRlZmF1bHRQcmVmaXgiLCJhZmZpeGVzIiwicGFyc2VBZmZpeGVzIiwibmFtZSIsInByZWZpeCIsInN1ZmZpeCIsInRlbXBEaXJlY3RvcnkiLCJvcGVuIiwiZmQiLCJlcnIiLCJsb2ciLCJlcnJvckFuZFRocm93IiwiRXJyb3IiLCJfc3RhdGljIiwib3BlbkRpciIsInN0YXRpY0RpciJdLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi90ZW1wZGlyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRoaXMgbGlicmFyeSBpcyBvcmlnaW5hdGVkIGZyb20gdGVtcC5qcyBhdCBodHRwOi8vZ2l0aHViLmNvbS9icnVjZS9ub2RlLXRlbXAgKi9cbmltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgbm9kZVBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgY25zdCBmcm9tICdjb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5cbmNvbnN0IFJEV1JfRVhDTCA9IGNuc3QuT19DUkVBVCB8IGNuc3QuT19UUlVOQyB8IGNuc3QuT19SRFdSIHwgY25zdC5PX0VYQ0w7XG5cbi8qKlxuICogR2VuZXJhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIG9zLnRlbXBkaXIoKSBvciBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUi5cbiAqIGUuZy5cbiAqIC0gTm8gYHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSYDogYC92YXIvZm9sZGVycy8zNC8yMjIyc2g4bjI3ZDZyY3A3anFsa3c4a20wMDAwZ24vVC94eHh4eHh4eC55eXl5YFxuICogLSBXaXRoIGBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiA9ICcvcGF0aC90by9yb290J2A6IGAvcGF0aC90by9yb290L3h4eHh4eHh4Lnl5eXlgXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gQSBwYXRoIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRlbXBEaXIoKSB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGZpbGVQYXRoID0gbm9kZVBhdGguam9pbihcbiAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fCBvcy50bXBkaXIoKSxcbiAgICBbXG4gICAgICBub3cuZ2V0RnVsbFllYXIoKSxcbiAgICAgIG5vdy5nZXRNb250aCgpLFxuICAgICAgbm93LmdldERhdGUoKSxcbiAgICAgICctJyxcbiAgICAgIHByb2Nlc3MucGlkLFxuICAgICAgJy0nLFxuICAgICAgKE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMCArIDEpLnRvU3RyaW5nKDM2KSxcbiAgICBdLmpvaW4oJycpXG4gICk7XG4gIC8vIGNyZWF0ZXMgYSB0ZW1wIGRpcmVjdG9yeSB1c2luZyB0aGUgZGF0ZSBhbmQgYSByYW5kb20gc3RyaW5nXG5cbiAgYXdhaXQgZnMubWtkaXIoZmlsZVBhdGgpO1xuXG4gIHJldHVybiBmaWxlUGF0aDtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBBZmZpeGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3ByZWZpeF0gLSBwcmVmaXggb2YgdGhlIHRlbXAgZGlyZWN0b3J5IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc3VmZml4XSAtIHN1ZmZpeCBvZiB0aGUgdGVtcCBkaXJlY3RvcnkgbmFtZVxuICovXG5cbi8qKlxuICogR2VuZXJhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIG9zLnRlbXBkaXIoKSBvciBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUlxuICogd2l0aCBhcmJpdHJhcnkgcHJlZml4L3N1ZmZpeCBmb3IgdGhlIGRpcmVjdG9yeSBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEFmZml4ZXN9IHJhd0FmZml4ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFByZWZpeF1cbiAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59ICBBIHBhdGggdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2l0aCByYXdBZmZpeGVzIGFuZCBkZWZhdWx0UHJlZml4XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBhdGgocmF3QWZmaXhlcywgZGVmYXVsdFByZWZpeCkge1xuICBjb25zdCBhZmZpeGVzID0gcGFyc2VBZmZpeGVzKHJhd0FmZml4ZXMsIGRlZmF1bHRQcmVmaXgpO1xuICBjb25zdCBuYW1lID0gYCR7YWZmaXhlcy5wcmVmaXggfHwgJyd9JHthZmZpeGVzLnN1ZmZpeCB8fCAnJ31gO1xuICBjb25zdCB0ZW1wRGlyZWN0b3J5ID0gYXdhaXQgdGVtcERpcigpO1xuICByZXR1cm4gbm9kZVBhdGguam9pbih0ZW1wRGlyZWN0b3J5LCBuYW1lKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBPcGVuZWRBZmZpeGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIGZpbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmZCAtIFRoZSBmaWxlIGRlc2NyaXB0b3Igb3BlbmVkXG4gKi9cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gb3MudGVtcGRpcigpIG9yIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSXG4gKiB3aXRoIGFyYml0cmFyeSBwcmVmaXgvc3VmZml4IGZvciB0aGUgZGlyZWN0b3J5IG5hbWUgYW5kIHJldHVybiBpdCBhcyBvcGVuLlxuICpcbiAqIEBwYXJhbSB7QWZmaXhlc30gYWZmaXhlc1xuICogQHJldHVybnMge1Byb21pc2U8T3BlbmVkQWZmaXhlcz59XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG9wZW4oYWZmaXhlcykge1xuICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IHBhdGgoYWZmaXhlcywgJ2YtJyk7XG4gIHRyeSB7XG4gICAgbGV0IGZkID0gYXdhaXQgZnMub3BlbihmaWxlUGF0aCwgUkRXUl9FWENMLCAwbzYwMCk7XG4gICAgLy8gb3BlbnMgdGhlIGZpbGUgaW4gbW9kZSAzODRcbiAgICByZXR1cm4ge3BhdGg6IGZpbGVQYXRoLCBmZH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBsb2cuZXJyb3JBbmRUaHJvdyhlcnIpO1xuICB9XG59XG5cbi8qKlxuICpcbiAqIFJldHVybnMgcHJlZml4L3N1ZmZpeCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBZmZpeGVzfSByYXdBZmZpeGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gW2RlZmF1bHRQcmVmaXhdXG4gKiBAcmV0dXJucyB7QWZmaXhlc31cbiAqL1xuZnVuY3Rpb24gcGFyc2VBZmZpeGVzKHJhd0FmZml4ZXMsIGRlZmF1bHRQcmVmaXgpIHtcbiAgLyoqIEB0eXBlIHtBZmZpeGVzfSAqL1xuICBsZXQgYWZmaXhlcyA9IHt9O1xuICBpZiAocmF3QWZmaXhlcykge1xuICAgIHN3aXRjaCAodHlwZW9mIHJhd0FmZml4ZXMpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGFmZml4ZXMucHJlZml4ID0gcmF3QWZmaXhlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBhZmZpeGVzID0gcmF3QWZmaXhlcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWZmaXggZGVjbGFyYXRpb246ICR7YWZmaXhlc31gKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWZmaXhlcy5wcmVmaXggPSBkZWZhdWx0UHJlZml4O1xuICB9XG4gIHJldHVybiBhZmZpeGVzO1xufVxuXG5jb25zdCBfc3RhdGljID0gdGVtcERpcigpO1xuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgcGF0aCB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIG5ldyB0ZW1wRGlyKCkgaWYgdGVtcFJvb3REaXJlY3RvcnkgaXMgbm90IHByb3ZpZGVkXG4gKi9cbmNvbnN0IG9wZW5EaXIgPSB0ZW1wRGlyO1xuXG4vKipcbiAqIFJldHVybnMgYSBwYXRoIHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB3aGNpaCBpcyBkZWZpbmVkIGFzIHN0YXRpYyBpbiB0aGUgc2FtZSBwcm9jZXNzXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gQSB0ZW1wIGRpcmVjdG9yeSBwYXRoIHdoY2loIGlzIGRlZmluZWQgYXMgc3RhdGljIGluIHRoZSBzYW1lIHByb2Nlc3NcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbmFzeW5jIGZ1bmN0aW9uIHN0YXRpY0RpcigpIHtcbiAgcmV0dXJuIF9zdGF0aWM7XG59XG5cbmV4cG9ydCB7b3BlbiwgcGF0aCwgb3BlbkRpciwgc3RhdGljRGlyfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxTQUFTLEdBQUdDLGtCQUFBLENBQUtDLE9BQUwsR0FBZUQsa0JBQUEsQ0FBS0UsT0FBcEIsR0FBOEJGLGtCQUFBLENBQUtHLE1BQW5DLEdBQTRDSCxrQkFBQSxDQUFLSSxNQUFuRTs7QUFVQSxlQUFlQyxPQUFmLEdBQXlCO0VBQ3ZCLE1BQU1DLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7O0VBQ0EsTUFBTUMsUUFBUSxHQUFHQyxhQUFBLENBQVNDLElBQVQsQ0FDZkMsT0FBTyxDQUFDQyxHQUFSLENBQVlDLGNBQVosSUFBOEJDLFdBQUEsQ0FBR0MsTUFBSCxFQURmLEVBRWYsQ0FDRVQsR0FBRyxDQUFDVSxXQUFKLEVBREYsRUFFRVYsR0FBRyxDQUFDVyxRQUFKLEVBRkYsRUFHRVgsR0FBRyxDQUFDWSxPQUFKLEVBSEYsRUFJRSxHQUpGLEVBS0VQLE9BQU8sQ0FBQ1EsR0FMVixFQU1FLEdBTkYsRUFPRSxDQUFDQyxJQUFJLENBQUNDLE1BQUwsS0FBZ0IsV0FBaEIsR0FBOEIsQ0FBL0IsRUFBa0NDLFFBQWxDLENBQTJDLEVBQTNDLENBUEYsRUFRRVosSUFSRixDQVFPLEVBUlAsQ0FGZSxDQUFqQjs7RUFjQSxNQUFNYSxXQUFBLENBQUdDLEtBQUgsQ0FBU2hCLFFBQVQsQ0FBTjtFQUVBLE9BQU9BLFFBQVA7QUFDRDs7QUFnQkQsZUFBZWlCLElBQWYsQ0FBb0JDLFVBQXBCLEVBQWdDQyxhQUFoQyxFQUErQztFQUM3QyxNQUFNQyxPQUFPLEdBQUdDLFlBQVksQ0FBQ0gsVUFBRCxFQUFhQyxhQUFiLENBQTVCO0VBQ0EsTUFBTUcsSUFBSSxHQUFJLEdBQUVGLE9BQU8sQ0FBQ0csTUFBUixJQUFrQixFQUFHLEdBQUVILE9BQU8sQ0FBQ0ksTUFBUixJQUFrQixFQUFHLEVBQTVEO0VBQ0EsTUFBTUMsYUFBYSxHQUFHLE1BQU01QixPQUFPLEVBQW5DO0VBQ0EsT0FBT0ksYUFBQSxDQUFTQyxJQUFULENBQWN1QixhQUFkLEVBQTZCSCxJQUE3QixDQUFQO0FBQ0Q7O0FBZUQsZUFBZUksSUFBZixDQUFvQk4sT0FBcEIsRUFBNkI7RUFDM0IsTUFBTXBCLFFBQVEsR0FBRyxNQUFNaUIsSUFBSSxDQUFDRyxPQUFELEVBQVUsSUFBVixDQUEzQjs7RUFDQSxJQUFJO0lBQ0YsSUFBSU8sRUFBRSxHQUFHLE1BQU1aLFdBQUEsQ0FBR1csSUFBSCxDQUFRMUIsUUFBUixFQUFrQlQsU0FBbEIsRUFBNkIsS0FBN0IsQ0FBZjtJQUVBLE9BQU87TUFBQzBCLElBQUksRUFBRWpCLFFBQVA7TUFBaUIyQjtJQUFqQixDQUFQO0VBQ0QsQ0FKRCxDQUlFLE9BQU9DLEdBQVAsRUFBWTtJQUNaLE9BQU9DLGVBQUEsQ0FBSUMsYUFBSixDQUFrQkYsR0FBbEIsQ0FBUDtFQUNEO0FBQ0Y7O0FBVUQsU0FBU1AsWUFBVCxDQUFzQkgsVUFBdEIsRUFBa0NDLGFBQWxDLEVBQWlEO0VBRS9DLElBQUlDLE9BQU8sR0FBRyxFQUFkOztFQUNBLElBQUlGLFVBQUosRUFBZ0I7SUFDZCxRQUFRLE9BQU9BLFVBQWY7TUFDRSxLQUFLLFFBQUw7UUFDRUUsT0FBTyxDQUFDRyxNQUFSLEdBQWlCTCxVQUFqQjtRQUNBOztNQUNGLEtBQUssUUFBTDtRQUNFRSxPQUFPLEdBQUdGLFVBQVY7UUFDQTs7TUFDRjtRQUNFLE1BQU0sSUFBSWEsS0FBSixDQUFXLDhCQUE2QlgsT0FBUSxFQUFoRCxDQUFOO0lBUko7RUFVRCxDQVhELE1BV087SUFDTEEsT0FBTyxDQUFDRyxNQUFSLEdBQWlCSixhQUFqQjtFQUNEOztFQUNELE9BQU9DLE9BQVA7QUFDRDs7QUFFRCxNQUFNWSxPQUFPLEdBQUduQyxPQUFPLEVBQXZCOztBQU9BLE1BQU1vQyxPQUFPLEdBQUdwQyxPQUFoQjs7O0FBUUEsZUFBZXFDLFNBQWYsR0FBMkI7RUFDekIsT0FBT0YsT0FBUDtBQUNEIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tempdir.js","names":["RDWR_EXCL","cnst","O_CREAT","O_TRUNC","O_RDWR","O_EXCL","tempDir","now","Date","filePath","nodePath","join","process","env","APPIUM_TMP_DIR","os","tmpdir","getFullYear","getMonth","getDate","pid","Math","random","toString","fs","mkdir","path","rawAffixes","defaultPrefix","affixes","parseAffixes","name","prefix","suffix","tempDirectory","open","fd","err","log","errorAndThrow","Error","_static","openDir","staticDir"],"sources":["../../lib/tempdir.js"],"sourcesContent":["/* This library is originated from temp.js at http://github.com/bruce/node-temp */\nimport fs from './fs';\nimport os from 'os';\nimport nodePath from 'path';\nimport cnst from 'constants';\nimport log from './logger';\n\nconst RDWR_EXCL = cnst.O_CREAT | cnst.O_TRUNC | cnst.O_RDWR | cnst.O_EXCL;\n\n/**\n * Generate a temporary directory in os.tempdir() or process.env.APPIUM_TMP_DIR.\n * e.g.\n * - No `process.env.APPIUM_TMP_DIR`: `/var/folders/34/2222sh8n27d6rcp7jqlkw8km0000gn/T/xxxxxxxx.yyyy`\n * - With `process.env.APPIUM_TMP_DIR = '/path/to/root'`: `/path/to/root/xxxxxxxx.yyyy`\n *\n * @returns {Promise<string>} A path to the temporary directory\n */\nasync function tempDir() {\n const now = new Date();\n const filePath = nodePath.join(\n process.env.APPIUM_TMP_DIR || os.tmpdir(),\n [\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n '-',\n process.pid,\n '-',\n (Math.random() * 0x100000000 + 1).toString(36),\n ].join('')\n );\n // creates a temp directory using the date and a random string\n\n await fs.mkdir(filePath);\n\n return filePath;\n}\n\n/**\n * @typedef Affixes\n * @property {string} [prefix] - prefix of the temp directory name\n * @property {string} [suffix] - suffix of the temp directory name\n */\n\n/**\n * Generate a temporary directory in os.tempdir() or process.env.APPIUM_TMP_DIR\n * with arbitrary prefix/suffix for the directory name.\n *\n * @param {string|Affixes} rawAffixes\n * @param {string} [defaultPrefix]\n * @returns {Promise<string>} A path to the temporary directory with rawAffixes and defaultPrefix\n */\nasync function path(rawAffixes, defaultPrefix) {\n const affixes = parseAffixes(rawAffixes, defaultPrefix);\n const name = `${affixes.prefix || ''}${affixes.suffix || ''}`;\n const tempDirectory = await tempDir();\n return nodePath.join(tempDirectory, name);\n}\n\n/**\n * @typedef OpenedAffixes\n * @property {string} path - The path to file\n * @property {number} fd - The file descriptor opened\n */\n\n/**\n * Generate a temporary directory in os.tempdir() or process.env.APPIUM_TMP_DIR\n * with arbitrary prefix/suffix for the directory name and return it as open.\n *\n * @param {Affixes} affixes\n * @returns {Promise<OpenedAffixes>}\n */\nasync function open(affixes) {\n const filePath = await path(affixes, 'f-');\n try {\n let fd = await fs.open(filePath, RDWR_EXCL, 0o600);\n // opens the file in mode 384\n return {path: filePath, fd};\n } catch (err) {\n return log.errorAndThrow(err);\n }\n}\n\n/**\n *\n * Returns prefix/suffix object\n *\n * @param {string|Affixes} rawAffixes\n * @param {string} [defaultPrefix]\n * @returns {Affixes}\n */\nfunction parseAffixes(rawAffixes, defaultPrefix) {\n /** @type {Affixes} */\n let affixes = {};\n if (rawAffixes) {\n switch (typeof rawAffixes) {\n case 'string':\n affixes.prefix = rawAffixes;\n break;\n case 'object':\n affixes = rawAffixes;\n break;\n default:\n throw new Error(`Unknown affix declaration: ${affixes}`);\n }\n } else {\n affixes.prefix = defaultPrefix;\n }\n return affixes;\n}\n\nconst _static = tempDir();\n\n/**\n * Returns a new path to a temporary directory\n *\n * @returns {string} A new tempDir() if tempRootDirectory is not provided\n */\nconst openDir = tempDir;\n\n/**\n * Returns a path to a temporary directory whcih is defined as static in the same process\n *\n * @returns {Promise<string>} A temp directory path whcih is defined as static in the same process\n */\n// eslint-disable-next-line require-await\nasync function staticDir() {\n return _static;\n}\n\nexport {open, path, openDir, staticDir};\n"],"mappings":";;;;;;;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,MAAMA,SAAS,GAAGC,kBAAA,CAAKC,OAAL,GAAeD,kBAAA,CAAKE,OAApB,GAA8BF,kBAAA,CAAKG,MAAnC,GAA4CH,kBAAA,CAAKI,MAAnE;;AAUA,eAAeC,OAAf,GAAyB;EACvB,MAAMC,GAAG,GAAG,IAAIC,IAAJ,EAAZ;;EACA,MAAMC,QAAQ,GAAGC,aAAA,CAASC,IAAT,CACfC,OAAO,CAACC,GAAR,CAAYC,cAAZ,IAA8BC,WAAA,CAAGC,MAAH,EADf,EAEf,CACET,GAAG,CAACU,WAAJ,EADF,EAEEV,GAAG,CAACW,QAAJ,EAFF,EAGEX,GAAG,CAACY,OAAJ,EAHF,EAIE,GAJF,EAKEP,OAAO,CAACQ,GALV,EAME,GANF,EAOE,CAACC,IAAI,CAACC,MAAL,KAAgB,WAAhB,GAA8B,CAA/B,EAAkCC,QAAlC,CAA2C,EAA3C,CAPF,EAQEZ,IARF,CAQO,EARP,CAFe,CAAjB;;EAcA,MAAMa,WAAA,CAAGC,KAAH,CAAShB,QAAT,CAAN;EAEA,OAAOA,QAAP;AACD;;AAgBD,eAAeiB,IAAf,CAAoBC,UAApB,EAAgCC,aAAhC,EAA+C;EAC7C,MAAMC,OAAO,GAAGC,YAAY,CAACH,UAAD,EAAaC,aAAb,CAA5B;EACA,MAAMG,IAAI,GAAI,GAAEF,OAAO,CAACG,MAAR,IAAkB,EAAG,GAAEH,OAAO,CAACI,MAAR,IAAkB,EAAG,EAA5D;EACA,MAAMC,aAAa,GAAG,MAAM5B,OAAO,EAAnC;EACA,OAAOI,aAAA,CAASC,IAAT,CAAcuB,aAAd,EAA6BH,IAA7B,CAAP;AACD;;AAeD,eAAeI,IAAf,CAAoBN,OAApB,EAA6B;EAC3B,MAAMpB,QAAQ,GAAG,MAAMiB,IAAI,CAACG,OAAD,EAAU,IAAV,CAA3B;;EACA,IAAI;IACF,IAAIO,EAAE,GAAG,MAAMZ,WAAA,CAAGW,IAAH,CAAQ1B,QAAR,EAAkBT,SAAlB,EAA6B,KAA7B,CAAf;IAEA,OAAO;MAAC0B,IAAI,EAAEjB,QAAP;MAAiB2B;IAAjB,CAAP;EACD,CAJD,CAIE,OAAOC,GAAP,EAAY;IACZ,OAAOC,eAAA,CAAIC,aAAJ,CAAkBF,GAAlB,CAAP;EACD;AACF;;AAUD,SAASP,YAAT,CAAsBH,UAAtB,EAAkCC,aAAlC,EAAiD;EAE/C,IAAIC,OAAO,GAAG,EAAd;;EACA,IAAIF,UAAJ,EAAgB;IACd,QAAQ,OAAOA,UAAf;MACE,KAAK,QAAL;QACEE,OAAO,CAACG,MAAR,GAAiBL,UAAjB;QACA;;MACF,KAAK,QAAL;QACEE,OAAO,GAAGF,UAAV;QACA;;MACF;QACE,MAAM,IAAIa,KAAJ,CAAW,8BAA6BX,OAAQ,EAAhD,CAAN;IARJ;EAUD,CAXD,MAWO;IACLA,OAAO,CAACG,MAAR,GAAiBJ,aAAjB;EACD;;EACD,OAAOC,OAAP;AACD;;AAED,MAAMY,OAAO,GAAGnC,OAAO,EAAvB;;AAOA,MAAMoC,OAAO,GAAGpC,OAAhB;;;AAQA,eAAeqC,SAAf,GAA2B;EACzB,OAAOF,OAAP;AACD"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -11,6 +9,8 @@ require("source-map-support/register");
11
9
 
12
10
  var _lodash = _interopRequireDefault(require("lodash"));
13
11
 
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
14
  const NS_PER_S = 1e9;
15
15
  const NS_PER_MS = 1e6;
16
16
 
@@ -94,4 +94,4 @@ class Timer {
94
94
  exports.Timer = Timer;
95
95
  var _default = Timer;
96
96
  exports.default = _default;
97
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOU19QRVJfUyIsIk5TX1BFUl9NUyIsIkR1cmF0aW9uIiwiY29uc3RydWN0b3IiLCJuYW5vcyIsIl9uYW5vcyIsImFzTmFub1NlY29uZHMiLCJhc01pbGxpU2Vjb25kcyIsImFzU2Vjb25kcyIsInRvU3RyaW5nIiwidG9GaXhlZCIsIlRpbWVyIiwiX3N0YXJ0VGltZSIsInN0YXJ0VGltZSIsInN0YXJ0IiwiXyIsImlzTnVsbCIsIkVycm9yIiwiaXNGdW5jdGlvbiIsInByb2Nlc3MiLCJocnRpbWUiLCJiaWdpbnQiLCJnZXREdXJhdGlvbiIsIm5hbm9EdXJhdGlvbiIsImlzQXJyYXkiLCJzZWNvbmRzIiwiZW5kVGltZSIsIk51bWJlciIsImVyciIsIm1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdGltaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IE5TX1BFUl9TID0gMWU5O1xuY29uc3QgTlNfUEVSX01TID0gMWU2O1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uLCBlbmNhcHN1bGF0aW5nIHRoZSBudW1iZXIgYW5kIHVuaXRzLlxuICovXG5jbGFzcyBEdXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG5hbm9zKSB7XG4gICAgdGhpcy5fbmFub3MgPSBuYW5vcztcbiAgfVxuXG4gIGdldCBuYW5vcygpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFub3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkdXJhdGlvbiBhcyBuYW5vc2Vjb25kc1xuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgZHVyYXRpb24gYXMgbmFub3NlY29uZHNcbiAgICovXG4gIGdldCBhc05hbm9TZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLm5hbm9zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZHVyYXRpb24gY29udmVydGVkIGludG8gbWlsbGlzZWNvbmRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBhcyBtaWxsaXNlY29uZHNcbiAgICovXG4gIGdldCBhc01pbGxpU2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5uYW5vcyAvIE5TX1BFUl9NUztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGR1cmF0aW9uIGNvbnZlcnRlZCBpbnRvIHNlY29uZHNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGR1cmF0aW9uIGZhcyBzZWNvbmRzXG4gICAqL1xuICBnZXQgYXNTZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLm5hbm9zIC8gTlNfUEVSX1M7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICAvLyBkZWZhdWx0IHRvIG1pbGxpc2Vjb25kcywgcm91bmRlZFxuICAgIHJldHVybiB0aGlzLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCk7XG4gIH1cbn1cblxuY2xhc3MgVGltZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHRpbWVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBudWxsO1xuICB9XG5cbiAgZ2V0IHN0YXJ0VGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSB0aW1lclxuICAgKlxuICAgKiBAcmV0dXJuIHtUaW1lcn0gVGhlIGN1cnJlbnQgaW5zdGFuY2UsIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgc3RhcnQoKSB7XG4gICAgaWYgKCFfLmlzTnVsbCh0aGlzLnN0YXJ0VGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGltZXIgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLicpO1xuICAgIH1cbiAgICAvLyBvbmNlIE5vZGUgMTAgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdGhpcyBjaGVjayBjYW4gYmUgcmVtb3ZlZFxuICAgIHRoaXMuX3N0YXJ0VGltZSA9IF8uaXNGdW5jdGlvbihwcm9jZXNzLmhydGltZS5iaWdpbnQpXG4gICAgICA/IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpXG4gICAgICA6IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkdXJhdGlvbiBzaW5jZSB0aGUgdGltZXIgd2FzIHN0YXJ0ZWRcbiAgICpcbiAgICogQHJldHVybiB7RHVyYXRpb259IHRoZSBkdXJhdGlvblxuICAgKi9cbiAgZ2V0RHVyYXRpb24oKSB7XG4gICAgaWYgKF8uaXNOdWxsKHRoaXMuc3RhcnRUaW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZ2V0IGR1cmF0aW9uLiBUaW1lciB3YXMgbm90IHN0YXJ0ZWRgKTtcbiAgICB9XG5cbiAgICBsZXQgbmFub0R1cmF0aW9uO1xuICAgIGlmIChfLmlzQXJyYXkodGhpcy5zdGFydFRpbWUpKSB7XG4gICAgICAvLyBzdGFydFRpbWUgd2FzIGNyZWF0ZWQgdXNpbmcgcHJvY2Vzcy5ocnRpbWUoKVxuICAgICAgY29uc3QgW3NlY29uZHMsIG5hbm9zXSA9IHByb2Nlc3MuaHJ0aW1lKHRoaXMuc3RhcnRUaW1lKTtcbiAgICAgIG5hbm9EdXJhdGlvbiA9IHNlY29uZHMgKiBOU19QRVJfUyArIG5hbm9zO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc3RhcnRUaW1lID09PSAnYmlnaW50JyAmJiBfLmlzRnVuY3Rpb24ocHJvY2Vzcy5ocnRpbWUuYmlnaW50KSkge1xuICAgICAgLy8gc3RhcnRUaW1lIHdhcyBjcmVhdGVkIHVzaW5nIHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpXG4gICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCk7XG4gICAgICAvLyBnZXQgdGhlIGRpZmZlcmVuY2UsIGFuZCBjb252ZXJ0IHRvIG51bWJlclxuICAgICAgbmFub0R1cmF0aW9uID0gTnVtYmVyKGVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGdldCBkdXJhdGlvbi4gU3RhcnQgdGltZSAnJHt0aGlzLnN0YXJ0VGltZX0nIGNhbm5vdCBiZSBwYXJzZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKG5hbm9EdXJhdGlvbik7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHVyYXRpb24oKS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGA8ZXJyOiAke2Vyci5tZXNzYWdlfT5gO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1RpbWVyLCBEdXJhdGlvbn07XG5leHBvcnQgZGVmYXVsdCBUaW1lcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsR0FBakI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsR0FBbEI7O0FBS0EsTUFBTUMsUUFBTixDQUFlO0VBQ2JDLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0lBQ2pCLEtBQUtDLE1BQUwsR0FBY0QsS0FBZDtFQUNEOztFQUVRLElBQUxBLEtBQUssR0FBRztJQUNWLE9BQU8sS0FBS0MsTUFBWjtFQUNEOztFQU9nQixJQUFiQyxhQUFhLEdBQUc7SUFDbEIsT0FBTyxLQUFLRixLQUFaO0VBQ0Q7O0VBT2lCLElBQWRHLGNBQWMsR0FBRztJQUNuQixPQUFPLEtBQUtILEtBQUwsR0FBYUgsU0FBcEI7RUFDRDs7RUFPWSxJQUFUTyxTQUFTLEdBQUc7SUFDZCxPQUFPLEtBQUtKLEtBQUwsR0FBYUosUUFBcEI7RUFDRDs7RUFFRFMsUUFBUSxHQUFHO0lBRVQsT0FBTyxLQUFLRixjQUFMLENBQW9CRyxPQUFwQixDQUE0QixDQUE1QixDQUFQO0VBQ0Q7O0FBdkNZOzs7O0FBMENmLE1BQU1DLEtBQU4sQ0FBWTtFQUlWUixXQUFXLEdBQUc7SUFDWixLQUFLUyxVQUFMLEdBQWtCLElBQWxCO0VBQ0Q7O0VBRVksSUFBVEMsU0FBUyxHQUFHO0lBQ2QsT0FBTyxLQUFLRCxVQUFaO0VBQ0Q7O0VBT0RFLEtBQUssR0FBRztJQUNOLElBQUksQ0FBQ0MsZUFBQSxDQUFFQyxNQUFGLENBQVMsS0FBS0gsU0FBZCxDQUFMLEVBQStCO01BQzdCLE1BQU0sSUFBSUksS0FBSixDQUFVLGlDQUFWLENBQU47SUFDRDs7SUFFRCxLQUFLTCxVQUFMLEdBQWtCRyxlQUFBLENBQUVHLFVBQUYsQ0FBYUMsT0FBTyxDQUFDQyxNQUFSLENBQWVDLE1BQTVCLElBQ2RGLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxNQUFmLEVBRGMsR0FFZEYsT0FBTyxDQUFDQyxNQUFSLEVBRko7SUFHQSxPQUFPLElBQVA7RUFDRDs7RUFPREUsV0FBVyxHQUFHO0lBQ1osSUFBSVAsZUFBQSxDQUFFQyxNQUFGLENBQVMsS0FBS0gsU0FBZCxDQUFKLEVBQThCO01BQzVCLE1BQU0sSUFBSUksS0FBSixDQUFXLCtDQUFYLENBQU47SUFDRDs7SUFFRCxJQUFJTSxZQUFKOztJQUNBLElBQUlSLGVBQUEsQ0FBRVMsT0FBRixDQUFVLEtBQUtYLFNBQWYsQ0FBSixFQUErQjtNQUU3QixNQUFNLENBQUNZLE9BQUQsRUFBVXJCLEtBQVYsSUFBbUJlLE9BQU8sQ0FBQ0MsTUFBUixDQUFlLEtBQUtQLFNBQXBCLENBQXpCO01BQ0FVLFlBQVksR0FBR0UsT0FBTyxHQUFHekIsUUFBVixHQUFxQkksS0FBcEM7SUFDRCxDQUpELE1BSU8sSUFBSSxPQUFPLEtBQUtTLFNBQVosS0FBMEIsUUFBMUIsSUFBc0NFLGVBQUEsQ0FBRUcsVUFBRixDQUFhQyxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBNUIsQ0FBMUMsRUFBK0U7TUFFcEYsTUFBTUssT0FBTyxHQUFHUCxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBZixFQUFoQjtNQUVBRSxZQUFZLEdBQUdJLE1BQU0sQ0FBQ0QsT0FBTyxHQUFHLEtBQUtiLFNBQWhCLENBQXJCO0lBQ0QsQ0FMTSxNQUtBO01BQ0wsTUFBTSxJQUFJSSxLQUFKLENBQVcsdUNBQXNDLEtBQUtKLFNBQVUsb0JBQWhFLENBQU47SUFDRDs7SUFFRCxPQUFPLElBQUlYLFFBQUosQ0FBYXFCLFlBQWIsQ0FBUDtFQUNEOztFQUVEZCxRQUFRLEdBQUc7SUFDVCxJQUFJO01BQ0YsT0FBTyxLQUFLYSxXQUFMLEdBQW1CYixRQUFuQixFQUFQO0lBQ0QsQ0FGRCxDQUVFLE9BQU9tQixHQUFQLEVBQVk7TUFDWixPQUFRLFNBQVFBLEdBQUcsQ0FBQ0MsT0FBUSxHQUE1QjtJQUNEO0VBQ0Y7O0FBN0RTOzs7ZUFpRUdsQixLIn0=
97
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOU19QRVJfUyIsIk5TX1BFUl9NUyIsIkR1cmF0aW9uIiwiY29uc3RydWN0b3IiLCJuYW5vcyIsIl9uYW5vcyIsImFzTmFub1NlY29uZHMiLCJhc01pbGxpU2Vjb25kcyIsImFzU2Vjb25kcyIsInRvU3RyaW5nIiwidG9GaXhlZCIsIlRpbWVyIiwiX3N0YXJ0VGltZSIsInN0YXJ0VGltZSIsInN0YXJ0IiwiXyIsImlzTnVsbCIsIkVycm9yIiwiaXNGdW5jdGlvbiIsInByb2Nlc3MiLCJocnRpbWUiLCJiaWdpbnQiLCJnZXREdXJhdGlvbiIsIm5hbm9EdXJhdGlvbiIsImlzQXJyYXkiLCJzZWNvbmRzIiwiZW5kVGltZSIsIk51bWJlciIsImVyciIsIm1lc3NhZ2UiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdGltaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IE5TX1BFUl9TID0gMWU5O1xuY29uc3QgTlNfUEVSX01TID0gMWU2O1xuXG4vKipcbiAqIENsYXNzIHJlcHJlc2VudGluZyBhIGR1cmF0aW9uLCBlbmNhcHN1bGF0aW5nIHRoZSBudW1iZXIgYW5kIHVuaXRzLlxuICovXG5jbGFzcyBEdXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG5hbm9zKSB7XG4gICAgdGhpcy5fbmFub3MgPSBuYW5vcztcbiAgfVxuXG4gIGdldCBuYW5vcygpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFub3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkdXJhdGlvbiBhcyBuYW5vc2Vjb25kc1xuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgZHVyYXRpb24gYXMgbmFub3NlY29uZHNcbiAgICovXG4gIGdldCBhc05hbm9TZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLm5hbm9zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZHVyYXRpb24gY29udmVydGVkIGludG8gbWlsbGlzZWNvbmRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBkdXJhdGlvbiBhcyBtaWxsaXNlY29uZHNcbiAgICovXG4gIGdldCBhc01pbGxpU2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5uYW5vcyAvIE5TX1BFUl9NUztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGR1cmF0aW9uIGNvbnZlcnRlZCBpbnRvIHNlY29uZHNcbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGR1cmF0aW9uIGZhcyBzZWNvbmRzXG4gICAqL1xuICBnZXQgYXNTZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLm5hbm9zIC8gTlNfUEVSX1M7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICAvLyBkZWZhdWx0IHRvIG1pbGxpc2Vjb25kcywgcm91bmRlZFxuICAgIHJldHVybiB0aGlzLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCk7XG4gIH1cbn1cblxuY2xhc3MgVGltZXIge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHRpbWVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSBudWxsO1xuICB9XG5cbiAgZ2V0IHN0YXJ0VGltZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRUaW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSB0aW1lclxuICAgKlxuICAgKiBAcmV0dXJuIHtUaW1lcn0gVGhlIGN1cnJlbnQgaW5zdGFuY2UsIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgc3RhcnQoKSB7XG4gICAgaWYgKCFfLmlzTnVsbCh0aGlzLnN0YXJ0VGltZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGltZXIgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLicpO1xuICAgIH1cbiAgICAvLyBvbmNlIE5vZGUgMTAgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdGhpcyBjaGVjayBjYW4gYmUgcmVtb3ZlZFxuICAgIHRoaXMuX3N0YXJ0VGltZSA9IF8uaXNGdW5jdGlvbihwcm9jZXNzLmhydGltZS5iaWdpbnQpXG4gICAgICA/IHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpXG4gICAgICA6IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkdXJhdGlvbiBzaW5jZSB0aGUgdGltZXIgd2FzIHN0YXJ0ZWRcbiAgICpcbiAgICogQHJldHVybiB7RHVyYXRpb259IHRoZSBkdXJhdGlvblxuICAgKi9cbiAgZ2V0RHVyYXRpb24oKSB7XG4gICAgaWYgKF8uaXNOdWxsKHRoaXMuc3RhcnRUaW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZ2V0IGR1cmF0aW9uLiBUaW1lciB3YXMgbm90IHN0YXJ0ZWRgKTtcbiAgICB9XG5cbiAgICBsZXQgbmFub0R1cmF0aW9uO1xuICAgIGlmIChfLmlzQXJyYXkodGhpcy5zdGFydFRpbWUpKSB7XG4gICAgICAvLyBzdGFydFRpbWUgd2FzIGNyZWF0ZWQgdXNpbmcgcHJvY2Vzcy5ocnRpbWUoKVxuICAgICAgY29uc3QgW3NlY29uZHMsIG5hbm9zXSA9IHByb2Nlc3MuaHJ0aW1lKHRoaXMuc3RhcnRUaW1lKTtcbiAgICAgIG5hbm9EdXJhdGlvbiA9IHNlY29uZHMgKiBOU19QRVJfUyArIG5hbm9zO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc3RhcnRUaW1lID09PSAnYmlnaW50JyAmJiBfLmlzRnVuY3Rpb24ocHJvY2Vzcy5ocnRpbWUuYmlnaW50KSkge1xuICAgICAgLy8gc3RhcnRUaW1lIHdhcyBjcmVhdGVkIHVzaW5nIHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpXG4gICAgICBjb25zdCBlbmRUaW1lID0gcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCk7XG4gICAgICAvLyBnZXQgdGhlIGRpZmZlcmVuY2UsIGFuZCBjb252ZXJ0IHRvIG51bWJlclxuICAgICAgbmFub0R1cmF0aW9uID0gTnVtYmVyKGVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGdldCBkdXJhdGlvbi4gU3RhcnQgdGltZSAnJHt0aGlzLnN0YXJ0VGltZX0nIGNhbm5vdCBiZSBwYXJzZWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKG5hbm9EdXJhdGlvbik7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHVyYXRpb24oKS50b1N0cmluZygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGA8ZXJyOiAke2Vyci5tZXNzYWdlfT5gO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1RpbWVyLCBEdXJhdGlvbn07XG5leHBvcnQgZGVmYXVsdCBUaW1lcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7QUFFQSxNQUFNQSxRQUFRLEdBQUcsR0FBakI7QUFDQSxNQUFNQyxTQUFTLEdBQUcsR0FBbEI7O0FBS0EsTUFBTUMsUUFBTixDQUFlO0VBQ2JDLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0lBQ2pCLEtBQUtDLE1BQUwsR0FBY0QsS0FBZDtFQUNEOztFQUVRLElBQUxBLEtBQUssR0FBRztJQUNWLE9BQU8sS0FBS0MsTUFBWjtFQUNEOztFQU9nQixJQUFiQyxhQUFhLEdBQUc7SUFDbEIsT0FBTyxLQUFLRixLQUFaO0VBQ0Q7O0VBT2lCLElBQWRHLGNBQWMsR0FBRztJQUNuQixPQUFPLEtBQUtILEtBQUwsR0FBYUgsU0FBcEI7RUFDRDs7RUFPWSxJQUFUTyxTQUFTLEdBQUc7SUFDZCxPQUFPLEtBQUtKLEtBQUwsR0FBYUosUUFBcEI7RUFDRDs7RUFFRFMsUUFBUSxHQUFHO0lBRVQsT0FBTyxLQUFLRixjQUFMLENBQW9CRyxPQUFwQixDQUE0QixDQUE1QixDQUFQO0VBQ0Q7O0FBdkNZOzs7O0FBMENmLE1BQU1DLEtBQU4sQ0FBWTtFQUlWUixXQUFXLEdBQUc7SUFDWixLQUFLUyxVQUFMLEdBQWtCLElBQWxCO0VBQ0Q7O0VBRVksSUFBVEMsU0FBUyxHQUFHO0lBQ2QsT0FBTyxLQUFLRCxVQUFaO0VBQ0Q7O0VBT0RFLEtBQUssR0FBRztJQUNOLElBQUksQ0FBQ0MsZUFBQSxDQUFFQyxNQUFGLENBQVMsS0FBS0gsU0FBZCxDQUFMLEVBQStCO01BQzdCLE1BQU0sSUFBSUksS0FBSixDQUFVLGlDQUFWLENBQU47SUFDRDs7SUFFRCxLQUFLTCxVQUFMLEdBQWtCRyxlQUFBLENBQUVHLFVBQUYsQ0FBYUMsT0FBTyxDQUFDQyxNQUFSLENBQWVDLE1BQTVCLElBQ2RGLE9BQU8sQ0FBQ0MsTUFBUixDQUFlQyxNQUFmLEVBRGMsR0FFZEYsT0FBTyxDQUFDQyxNQUFSLEVBRko7SUFHQSxPQUFPLElBQVA7RUFDRDs7RUFPREUsV0FBVyxHQUFHO0lBQ1osSUFBSVAsZUFBQSxDQUFFQyxNQUFGLENBQVMsS0FBS0gsU0FBZCxDQUFKLEVBQThCO01BQzVCLE1BQU0sSUFBSUksS0FBSixDQUFXLCtDQUFYLENBQU47SUFDRDs7SUFFRCxJQUFJTSxZQUFKOztJQUNBLElBQUlSLGVBQUEsQ0FBRVMsT0FBRixDQUFVLEtBQUtYLFNBQWYsQ0FBSixFQUErQjtNQUU3QixNQUFNLENBQUNZLE9BQUQsRUFBVXJCLEtBQVYsSUFBbUJlLE9BQU8sQ0FBQ0MsTUFBUixDQUFlLEtBQUtQLFNBQXBCLENBQXpCO01BQ0FVLFlBQVksR0FBR0UsT0FBTyxHQUFHekIsUUFBVixHQUFxQkksS0FBcEM7SUFDRCxDQUpELE1BSU8sSUFBSSxPQUFPLEtBQUtTLFNBQVosS0FBMEIsUUFBMUIsSUFBc0NFLGVBQUEsQ0FBRUcsVUFBRixDQUFhQyxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBNUIsQ0FBMUMsRUFBK0U7TUFFcEYsTUFBTUssT0FBTyxHQUFHUCxPQUFPLENBQUNDLE1BQVIsQ0FBZUMsTUFBZixFQUFoQjtNQUVBRSxZQUFZLEdBQUdJLE1BQU0sQ0FBQ0QsT0FBTyxHQUFHLEtBQUtiLFNBQWhCLENBQXJCO0lBQ0QsQ0FMTSxNQUtBO01BQ0wsTUFBTSxJQUFJSSxLQUFKLENBQVcsdUNBQXNDLEtBQUtKLFNBQVUsb0JBQWhFLENBQU47SUFDRDs7SUFFRCxPQUFPLElBQUlYLFFBQUosQ0FBYXFCLFlBQWIsQ0FBUDtFQUNEOztFQUVEZCxRQUFRLEdBQUc7SUFDVCxJQUFJO01BQ0YsT0FBTyxLQUFLYSxXQUFMLEdBQW1CYixRQUFuQixFQUFQO0lBQ0QsQ0FGRCxDQUVFLE9BQU9tQixHQUFQLEVBQVk7TUFDWixPQUFRLFNBQVFBLEdBQUcsQ0FBQ0MsT0FBUSxHQUE1QjtJQUNEO0VBQ0Y7O0FBN0RTOzs7ZUFpRUdsQixLIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.js","names":["NS_PER_S","NS_PER_MS","Duration","constructor","nanos","_nanos","asNanoSeconds","asMilliSeconds","asSeconds","toString","toFixed","Timer","_startTime","startTime","start","_","isNull","Error","isFunction","process","hrtime","bigint","getDuration","nanoDuration","isArray","seconds","endTime","Number","err","message"],"sources":["../../lib/timing.js"],"sourcesContent":["import _ from 'lodash';\n\nconst NS_PER_S = 1e9;\nconst NS_PER_MS = 1e6;\n\n/**\n * Class representing a duration, encapsulating the number and units.\n */\nclass Duration {\n constructor(nanos) {\n this._nanos = nanos;\n }\n\n get nanos() {\n return this._nanos;\n }\n\n /**\n * Get the duration as nanoseconds\n *\n * @returns {number} The duration as nanoseconds\n */\n get asNanoSeconds() {\n return this.nanos;\n }\n\n /**\n * Get the duration converted into milliseconds\n *\n * @returns {number} The duration as milliseconds\n */\n get asMilliSeconds() {\n return this.nanos / NS_PER_MS;\n }\n\n /**\n * Get the duration converted into seconds\n *\n * @returns {number} The duration fas seconds\n */\n get asSeconds() {\n return this.nanos / NS_PER_S;\n }\n\n toString() {\n // default to milliseconds, rounded\n return this.asMilliSeconds.toFixed(0);\n }\n}\n\nclass Timer {\n /**\n * Creates a timer\n */\n constructor() {\n this._startTime = null;\n }\n\n get startTime() {\n return this._startTime;\n }\n\n /**\n * Start the timer\n *\n * @return {Timer} The current instance, for chaining\n */\n start() {\n if (!_.isNull(this.startTime)) {\n throw new Error('Timer has already been started.');\n }\n // once Node 10 is no longer supported, this check can be removed\n this._startTime = _.isFunction(process.hrtime.bigint)\n ? process.hrtime.bigint()\n : process.hrtime();\n return this;\n }\n\n /**\n * Get the duration since the timer was started\n *\n * @return {Duration} the duration\n */\n getDuration() {\n if (_.isNull(this.startTime)) {\n throw new Error(`Unable to get duration. Timer was not started`);\n }\n\n let nanoDuration;\n if (_.isArray(this.startTime)) {\n // startTime was created using process.hrtime()\n const [seconds, nanos] = process.hrtime(this.startTime);\n nanoDuration = seconds * NS_PER_S + nanos;\n } else if (typeof this.startTime === 'bigint' && _.isFunction(process.hrtime.bigint)) {\n // startTime was created using process.hrtime.bigint()\n const endTime = process.hrtime.bigint();\n // get the difference, and convert to number\n nanoDuration = Number(endTime - this.startTime);\n } else {\n throw new Error(`Unable to get duration. Start time '${this.startTime}' cannot be parsed`);\n }\n\n return new Duration(nanoDuration);\n }\n\n toString() {\n try {\n return this.getDuration().toString();\n } catch (err) {\n return `<err: ${err.message}>`;\n }\n }\n}\n\nexport {Timer, Duration};\nexport default Timer;\n"],"mappings":";;;;;;;;;AAAA;;;;AAEA,MAAMA,QAAQ,GAAG,GAAjB;AACA,MAAMC,SAAS,GAAG,GAAlB;;AAKA,MAAMC,QAAN,CAAe;EACbC,WAAW,CAACC,KAAD,EAAQ;IACjB,KAAKC,MAAL,GAAcD,KAAd;EACD;;EAEQ,IAALA,KAAK,GAAG;IACV,OAAO,KAAKC,MAAZ;EACD;;EAOgB,IAAbC,aAAa,GAAG;IAClB,OAAO,KAAKF,KAAZ;EACD;;EAOiB,IAAdG,cAAc,GAAG;IACnB,OAAO,KAAKH,KAAL,GAAaH,SAApB;EACD;;EAOY,IAATO,SAAS,GAAG;IACd,OAAO,KAAKJ,KAAL,GAAaJ,QAApB;EACD;;EAEDS,QAAQ,GAAG;IAET,OAAO,KAAKF,cAAL,CAAoBG,OAApB,CAA4B,CAA5B,CAAP;EACD;;AAvCY;;;;AA0Cf,MAAMC,KAAN,CAAY;EAIVR,WAAW,GAAG;IACZ,KAAKS,UAAL,GAAkB,IAAlB;EACD;;EAEY,IAATC,SAAS,GAAG;IACd,OAAO,KAAKD,UAAZ;EACD;;EAODE,KAAK,GAAG;IACN,IAAI,CAACC,eAAA,CAAEC,MAAF,CAAS,KAAKH,SAAd,CAAL,EAA+B;MAC7B,MAAM,IAAII,KAAJ,CAAU,iCAAV,CAAN;IACD;;IAED,KAAKL,UAAL,GAAkBG,eAAA,CAAEG,UAAF,CAAaC,OAAO,CAACC,MAAR,CAAeC,MAA5B,IACdF,OAAO,CAACC,MAAR,CAAeC,MAAf,EADc,GAEdF,OAAO,CAACC,MAAR,EAFJ;IAGA,OAAO,IAAP;EACD;;EAODE,WAAW,GAAG;IACZ,IAAIP,eAAA,CAAEC,MAAF,CAAS,KAAKH,SAAd,CAAJ,EAA8B;MAC5B,MAAM,IAAII,KAAJ,CAAW,+CAAX,CAAN;IACD;;IAED,IAAIM,YAAJ;;IACA,IAAIR,eAAA,CAAES,OAAF,CAAU,KAAKX,SAAf,CAAJ,EAA+B;MAE7B,MAAM,CAACY,OAAD,EAAUrB,KAAV,IAAmBe,OAAO,CAACC,MAAR,CAAe,KAAKP,SAApB,CAAzB;MACAU,YAAY,GAAGE,OAAO,GAAGzB,QAAV,GAAqBI,KAApC;IACD,CAJD,MAIO,IAAI,OAAO,KAAKS,SAAZ,KAA0B,QAA1B,IAAsCE,eAAA,CAAEG,UAAF,CAAaC,OAAO,CAACC,MAAR,CAAeC,MAA5B,CAA1C,EAA+E;MAEpF,MAAMK,OAAO,GAAGP,OAAO,CAACC,MAAR,CAAeC,MAAf,EAAhB;MAEAE,YAAY,GAAGI,MAAM,CAACD,OAAO,GAAG,KAAKb,SAAhB,CAArB;IACD,CALM,MAKA;MACL,MAAM,IAAII,KAAJ,CAAW,uCAAsC,KAAKJ,SAAU,oBAAhE,CAAN;IACD;;IAED,OAAO,IAAIX,QAAJ,CAAaqB,YAAb,CAAP;EACD;;EAEDd,QAAQ,GAAG;IACT,IAAI;MACF,OAAO,KAAKa,WAAL,GAAmBb,QAAnB,EAAP;IACD,CAFD,CAEE,OAAOmB,GAAP,EAAY;MACZ,OAAQ,SAAQA,GAAG,CAACC,OAAQ,GAA5B;IACD;EACF;;AA7DS;;;eAiEGlB,K"}
package/build/lib/util.js CHANGED
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
@@ -85,6 +83,8 @@ var _uuid = require("uuid");
85
83
 
86
84
  var _lockfile2 = _interopRequireDefault(require("lockfile"));
87
85
 
86
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
87
+
88
88
  const W3C_WEB_ELEMENT_IDENTIFIER = 'element-6066-11e4-a52e-4f735466cecf';
89
89
  exports.W3C_WEB_ELEMENT_IDENTIFIER = W3C_WEB_ELEMENT_IDENTIFIER;
90
90
  const KiB = 1024;
@@ -414,4 +414,4 @@ function getLockFileGuard(lockFile, opts = {}) {
414
414
 
415
415
  return guard;
416
416
  }
417
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsIktpQiIsIk1pQiIsIkdpQiIsImhhc0NvbnRlbnQiLCJ2YWwiLCJfIiwiaXNTdHJpbmciLCJoYXNWYWx1ZSIsImlzTnVtYmVyIiwiaXNOYU4iLCJpc1VuZGVmaW5lZCIsImlzTnVsbCIsImVzY2FwZVNwYWNlIiwic3RyIiwic3BsaXQiLCJqb2luIiwiZXNjYXBlU3BlY2lhbENoYXJzIiwicXVvdGVFc2NhcGUiLCJyZXBsYWNlIiwicmUiLCJSZWdFeHAiLCJsb2NhbElwIiwiaXAiLCJjaGFpbiIsIm9zIiwibmV0d29ya0ludGVyZmFjZXMiLCJ2YWx1ZXMiLCJmbGF0dGVuIiwiZmlsdGVyIiwiZmFtaWx5IiwiaW50ZXJuYWwiLCJtYXAiLCJmaXJzdCIsInZhbHVlIiwiY2FuY2VsbGFibGVEZWxheSIsIm1zIiwidGltZXIiLCJyZXNvbHZlIiwicmVqZWN0IiwiZGVsYXkiLCJCIiwiUHJvbWlzZSIsIl9yZXNvbHZlIiwiX3JlamVjdCIsInNldFRpbWVvdXQiLCJjYW5jZWwiLCJjbGVhclRpbWVvdXQiLCJDYW5jZWxsYXRpb25FcnJvciIsIm11bHRpUmVzb2x2ZSIsInJvb3RzIiwiYXJncyIsInJvb3QiLCJwYXRoIiwic2FmZUpzb25QYXJzZSIsIm9iaiIsIkpTT04iLCJwYXJzZSIsImlnbiIsImpzb25TdHJpbmdpZnkiLCJyZXBsYWNlciIsInNwYWNlIiwiaXNGdW5jdGlvbiIsImsiLCJ2IiwiYnVmZmVyVG9KU09OIiwiQnVmZmVyIiwicHJvdG90eXBlIiwidG9KU09OIiwic3RyaW5naWZ5Iiwia2V5IiwidXBkYXRlZFZhbHVlIiwiaXNCdWZmZXIiLCJ0b1N0cmluZyIsInVud3JhcEVsZW1lbnQiLCJlbCIsInByb3BOYW1lIiwiaGFzIiwid3JhcEVsZW1lbnQiLCJlbGVtZW50SWQiLCJFTEVNRU5UIiwiZmlsdGVyT2JqZWN0IiwicHJlZGljYXRlIiwibmV3T2JqIiwiY2xvbmUiLCJ2YWx1ZVByZWRpY2F0ZSIsIk9iamVjdCIsImtleXMiLCJ0b1JlYWRhYmxlU2l6ZVN0cmluZyIsImJ5dGVzIiwiaW50Qnl0ZXMiLCJwYXJzZUludCIsIlN0cmluZyIsIkVycm9yIiwidG9GaXhlZCIsImlzU3ViUGF0aCIsIm9yaWdpbmFsUGF0aCIsImZvcmNlUG9zaXgiLCJwYXRoT2JqIiwicG9zaXgiLCJwIiwiaXNBYnNvbHV0ZSIsIm5vcm1hbGl6ZWRSb290Iiwibm9ybWFsaXplIiwibm9ybWFsaXplZFBhdGgiLCJzdGFydHNXaXRoIiwiaXNTYW1lRGVzdGluYXRpb24iLCJwYXRoMSIsInBhdGgyIiwicGF0aE4iLCJhbGxQYXRocyIsInJlZHVjZSIsImEiLCJiIiwiZnMiLCJleGlzdHMiLCJhcmVBbGxJdGVtc0VxdWFsIiwiYXJyIiwiTmFOIiwibWFwQ2IiLCJ4Iiwic3RhdCIsImJpZ2ludCIsImlubyIsImNvZXJjZVZlcnNpb24iLCJ2ZXIiLCJzdHJpY3QiLCJyZXN1bHQiLCJzZW12ZXIiLCJ2YWxpZCIsImNvZXJjZSIsIlNVUFBPUlRFRF9PUEVSQVRPUlMiLCJjb21wYXJlVmVyc2lvbnMiLCJ2ZXIxIiwib3BlcmF0b3IiLCJ2ZXIyIiwiaW5jbHVkZXMiLCJzZW12ZXJPcGVyYXRvciIsInNhdGlzZmllcyIsInF1b3RlIiwic2hlbGxRdW90ZSIsImNhc3RBcnJheSIsInVubGVha1N0cmluZyIsInMiLCJzdWJzdHIiLCJwbHVyYWxpemUiLCJ3b3JkIiwiY291bnQiLCJvcHRpb25zIiwiaW5jbHVzaXZlIiwiaXNCb29sZWFuIiwicGx1cmFsaXplTGliIiwidG9Jbk1lbW9yeUJhc2U2NCIsInNyY1BhdGgiLCJvcHRzIiwiaXNEaXJlY3RvcnkiLCJtYXhTaXplIiwicmVzdWx0QnVmZmVycyIsInJlc3VsdEJ1ZmZlcnNTaXplIiwicmVzdWx0V3JpdGVTdHJlYW0iLCJzdHJlYW0iLCJXcml0YWJsZSIsIndyaXRlIiwiYnVmZmVyIiwiZW5jb2RpbmciLCJuZXh0IiwicHVzaCIsImxlbmd0aCIsImVtaXQiLCJyZWFkZXJTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwiYmFzZTY0RW5jb2RlclN0cmVhbSIsIkJhc2U2NEVuY29kZSIsInJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSIsIm9uY2UiLCJlIiwidW5waXBlIiwiZGVzdHJveSIsInJlYWRTdHJlYW1Qcm9taXNlIiwibWVzc2FnZSIsInBpcGUiLCJhbGwiLCJjb25jYXQiLCJnZXRMb2NrRmlsZUd1YXJkIiwibG9ja0ZpbGUiLCJ0aW1lb3V0IiwidHJ5UmVjb3ZlcnkiLCJsb2NrIiwicHJvbWlzaWZ5IiwiX2xvY2tmaWxlIiwiY2hlY2siLCJ1bmxvY2siLCJndWFyZCIsImJlaGF2aW9yIiwidHJpZWRSZWNvdmVyeSIsImNoZWNrU3luYyIsIndhaXQiLCJsb2NrU3luYyIsInVubG9ja1N5bmMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc2hlbGwtcXVvdGVcbiAgcXVvdGUgYXMgc2hlbGxRdW90ZSxcbiAgcGFyc2UgYXMgc2hlbGxQYXJzZSxcbn0gZnJvbSAnc2hlbGwtcXVvdGUnO1xuaW1wb3J0IHBsdXJhbGl6ZUxpYiBmcm9tICdwbHVyYWxpemUnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHtCYXNlNjRFbmNvZGV9IGZyb20gJ2Jhc2U2NC1zdHJlYW0nO1xuaW1wb3J0IHtcbiAgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvdXVpZFxuICB2MSBhcyB1dWlkVjEsXG4gIHYzIGFzIHV1aWRWMyxcbiAgdjQgYXMgdXVpZFY0LFxuICB2NSBhcyB1dWlkVjUsXG59IGZyb20gJ3V1aWQnO1xuaW1wb3J0IF9sb2NrZmlsZSBmcm9tICdsb2NrZmlsZSc7XG5cbmNvbnN0IFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSID0gJ2VsZW1lbnQtNjA2Ni0xMWU0LWE1MmUtNGY3MzU0NjZjZWNmJztcbmNvbnN0IEtpQiA9IDEwMjQ7XG5jb25zdCBNaUIgPSBLaUIgKiAxMDI0O1xuY29uc3QgR2lCID0gTWlCICogMTAyNDtcblxuLyoqXG4gKiBAdGVtcGxhdGUge3N0cmluZ30gVFxuICogQHBhcmFtIHtUfSB2YWxcbiAqIEByZXR1cm5zIHt2YWwgaXMgTm9uRW1wdHlTdHJpbmc8VD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNDb250ZW50KHZhbCkge1xuICByZXR1cm4gXy5pc1N0cmluZyh2YWwpICYmIHZhbCAhPT0gJyc7XG59XG5cbi8qKlxuICogcmV0dXJuIHRydWUgaWYgdGhlIHRoZSB2YWx1ZSBpcyBub3QgYHVuZGVmaW5lZGAsIGBudWxsYCwgb3IgYE5hTmAuXG4gKlxuICogWFhYOiBgTmFOYCBpcyBub3QgZXhwcmVzc2libGUgaW4gVHlwZVNjcmlwdC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHZhbFxuICogQHJldHVybnMge3ZhbCBpcyBOb25OdWxsYWJsZTxUPn1cbiAqL1xuZnVuY3Rpb24gaGFzVmFsdWUodmFsKSB7XG4gIC8vIGF2b2lkIGluY29ycmVjdGx5IGV2YWx1YXRpbmcgYDBgIGFzIGZhbHNlXG4gIGlmIChfLmlzTnVtYmVyKHZhbCkpIHtcbiAgICByZXR1cm4gIV8uaXNOYU4odmFsKTtcbiAgfVxuICByZXR1cm4gIV8uaXNVbmRlZmluZWQodmFsKSAmJiAhXy5pc051bGwodmFsKTtcbn1cblxuLy8gZXNjYXBlIHNwYWNlcyBpbiBzdHJpbmcsIGZvciBjb21tYW5kbGluZSBjYWxsc1xuZnVuY3Rpb24gZXNjYXBlU3BhY2Uoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyAvKS5qb2luKCdcXFxcICcpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTcGVjaWFsQ2hhcnMoc3RyLCBxdW90ZUVzY2FwZSkge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGlmICh0eXBlb2YgcXVvdGVFc2NhcGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcXVvdGVFc2NhcGUgPSBmYWxzZTtcbiAgfVxuICBzdHIgPSBzdHJcbiAgICAucmVwbGFjZSgvW1xcXFxdL2csICdcXFxcXFxcXCcpXG4gICAgLnJlcGxhY2UoL1tcXC9dL2csICdcXFxcLycpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAucmVwbGFjZSgvW1xcZl0vZywgJ1xcXFxmJylcbiAgICAucmVwbGFjZSgvW1xcbl0vZywgJ1xcXFxuJylcbiAgICAucmVwbGFjZSgvW1xccl0vZywgJ1xcXFxyJylcbiAgICAucmVwbGFjZSgvW1xcdF0vZywgJ1xcXFx0JylcbiAgICAucmVwbGFjZSgvW1xcXCJdL2csICdcXFxcXCInKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgLnJlcGxhY2UoL1xcXFwnL2csIFwiXFxcXCdcIik7XG4gIGlmIChxdW90ZUVzY2FwZSkge1xuICAgIGxldCByZSA9IG5ldyBSZWdFeHAocXVvdGVFc2NhcGUsICdnJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UocmUsIGBcXFxcJHtxdW90ZUVzY2FwZX1gKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiBsb2NhbElwKCkge1xuICBsZXQgaXAgPSBfLmNoYWluKG9zLm5ldHdvcmtJbnRlcmZhY2VzKCkpXG4gICAgLnZhbHVlcygpXG4gICAgLmZsYXR0ZW4oKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuZmFtaWx5ID09PSAnSVB2NCcgJiYgdmFsLmludGVybmFsID09PSBmYWxzZTtcbiAgICB9KVxuICAgIC5tYXAoJ2FkZHJlc3MnKVxuICAgIC5maXJzdCgpXG4gICAgLnZhbHVlKCk7XG4gIHJldHVybiBpcDtcbn1cblxuLypcbiAqIENyZWF0ZXMgYSBwcm9taXNlIHRoYXQgaXMgY2FuY2VsbGFibGUsIGFuZCB3aWxsIHRpbWVvdXRcbiAqIGFmdGVyIGBtc2AgZGVsYXlcbiAqL1xuZnVuY3Rpb24gY2FuY2VsbGFibGVEZWxheShtcykge1xuICBsZXQgdGltZXI7XG4gIGxldCByZXNvbHZlO1xuICBsZXQgcmVqZWN0O1xuXG4gIGNvbnN0IGRlbGF5ID0gbmV3IEIuUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0sIG1zKTtcbiAgfSk7XG5cbiAgLy8gb3ZlcnJpZGUgQmx1ZWJpcmQncyBgY2FuY2VsYCwgd2hpY2ggZG9lcyBub3Qgd29yayB3aGVuIHVzaW5nIGBhd2FpdGAgb25cbiAgLy8gYSBwcm9taXNlLCBzaW5jZSBgcmVzb2x2ZWAvYHJlamVjdGAgYXJlIG5ldmVyIGNhbGxlZFxuICBkZWxheS5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICByZWplY3QobmV3IEIuQ2FuY2VsbGF0aW9uRXJyb3IoKSk7XG4gIH07XG4gIHJldHVybiBkZWxheTtcbn1cblxuZnVuY3Rpb24gbXVsdGlSZXNvbHZlKHJvb3RzLCAuLi5hcmdzKSB7XG4gIHJldHVybiByb290cy5tYXAoKHJvb3QpID0+IHBhdGgucmVzb2x2ZShyb290LCAuLi5hcmdzKSk7XG59XG5cbi8qXG4gKiBQYXJzZXMgYW4gb2JqZWN0IGlmIHBvc3NpYmxlLiBPdGhlcndpc2UgcmV0dXJucyB0aGUgb2JqZWN0IHdpdGhvdXQgcGFyc2luZy5cbiAqL1xuZnVuY3Rpb24gc2FmZUpzb25QYXJzZShvYmopIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShvYmopO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICAvLyBpZ25vcmU6IHRoaXMgaXMgbm90IGpzb24gcGFyc2FibGVcbiAgICByZXR1cm4gb2JqO1xuICB9XG59XG5cbi8qXG4gKiBTdHJpbmdpZmllcyB0aGUgb2JqZWN0IHBhc3NlZCBpbiwgY29udmVydGluZyBCdWZmZXJzIGludG8gU3RyaW5ncyBmb3IgYmV0dGVyXG4gKiBkaXNwbGF5LiBUaGlzIG1pbWljcyBKU09OLnN0cmluZ2lmeSAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vc3RyaW5naWZ5KVxuICogZXhjZXB0IHRoZSBgcmVwbGFjZXJgIGFyZ3VtZW50IGNhbiBvbmx5IGJlIGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHs/ZnVuY3Rpb259IHJlcGxhY2VyIC0gZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBwcm9wZXJ0aWVzIGFkZGVkIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCBvYmplY3RcbiAqIEBwYXJhbSB7P251bWJlcnxzdHJpbmd9IHNwYWNlIC0gdXNlZCB0byBpbnNlcnQgd2hpdGUgc3BhY2UgaW50byB0aGUgb3V0cHV0IEpTT05cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGZvciByZWFkYWJpbGl0eSBwdXJwb3Nlcy4gRGVmYXVsdHMgdG8gMlxuICogcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBKU09OIG9iamVjdCBzZXJpYWxpemVkIGFzIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGpzb25TdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2UgPSAyKSB7XG4gIC8vIGlmIG5vIHJlcGxhY2VyIGlzIHBhc3NlZCwgb3IgaXQgaXMgbm90IGEgZnVuY3Rpb24sIGp1c3QgdXNlIGEgcGFzcy10aHJvdWdoXG4gIGlmICghXy5pc0Z1bmN0aW9uKHJlcGxhY2VyKSkge1xuICAgIHJlcGxhY2VyID0gKGssIHYpID0+IHY7XG4gIH1cblxuICAvLyBCdWZmZXJzIGNhbm5vdCBiZSBzZXJpYWxpemVkIGluIGEgcmVhZGFibGUgd2F5XG4gIGNvbnN0IGJ1ZmZlclRvSlNPTiA9IEJ1ZmZlci5wcm90b3R5cGUudG9KU09OO1xuICBkZWxldGUgQnVmZmVyLnByb3RvdHlwZS50b0pTT047XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgb2JqLFxuICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSA/IHZhbHVlLnRvU3RyaW5nKCd1dGY4JykgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VyKGtleSwgdXBkYXRlZFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBzcGFjZVxuICAgICk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gcmVzdG9yZSB0aGUgZnVuY3Rpb24sIHNvIGFzIHRvIG5vdCBicmVhayBmdXJ0aGVyIHNlcmlhbGl6YXRpb25cbiAgICBCdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGJ1ZmZlclRvSlNPTjtcbiAgfVxufVxuXG4vKlxuICogUmVtb3ZlcyB0aGUgd3JhcHBlciBmcm9tIGVsZW1lbnQsIGlmIGl0IGV4aXN0cy5cbiAqICAgeyBFTEVNRU5UOiA0IH0gYmVjb21lcyA0XG4gKiAgIHsgZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2Y6IDUgfSBiZWNvbWVzIDVcbiAqL1xuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbCkge1xuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiwgJ0VMRU1FTlQnXSkge1xuICAgIGlmIChfLmhhcyhlbCwgcHJvcE5hbWUpKSB7XG4gICAgICByZXR1cm4gZWxbcHJvcE5hbWVdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWw7XG59XG5cbmZ1bmN0aW9uIHdyYXBFbGVtZW50KGVsZW1lbnRJZCkge1xuICByZXR1cm4ge1xuICAgIEVMRU1FTlQ6IGVsZW1lbnRJZCxcbiAgICBbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdOiBlbGVtZW50SWQsXG4gIH07XG59XG5cbi8qXG4gKiBSZXR1cm5zIG9iamVjdCBjb25zaXN0aW5nIG9mIGFsbCBwcm9wZXJ0aWVzIGluIHRoZSBvcmlnaW5hbCBlbGVtZW50XG4gKiB3aGljaCB3ZXJlIHRydXRoeSBnaXZlbiB0aGUgcHJlZGljYXRlLlxuICogSWYgdGhlIHByZWRpY2F0ZSBpc1xuICogICAqIG1pc3NpbmcgLSBpdCB3aWxsIHJlbW92ZSBhbGwgcHJvcGVydGllcyB3aG9zZSB2YWx1ZXMgYXJlIGB1bmRlZmluZWRgXG4gKiAgICogYSBzY2FsYXIgLSBpdCB3aWxsIHRlc3QgYWxsIHByb3BlcnRpZXMnIHZhbHVlcyBhZ2FpbnN0IHRoYXQgdmFsdWVcbiAqICAgKiBhIGZ1bmN0aW9uIC0gaXQgd2lsbCBwYXNzIGVhY2ggdmFsdWUgYW5kIHRoZSBvcmlnaW5hbCBvYmplY3QgaW50byB0aGUgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmlsdGVyT2JqZWN0KG9iaiwgcHJlZGljYXRlKSB7XG4gIGxldCBuZXdPYmogPSBfLmNsb25lKG9iaik7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHByZWRpY2F0ZSkpIHtcbiAgICAvLyByZW1vdmUgYW55IGVsZW1lbnQgZnJvbSB0aGUgb2JqZWN0IHdob3NlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgIHByZWRpY2F0ZSA9ICh2KSA9PiAhXy5pc1VuZGVmaW5lZCh2KTtcbiAgfSBlbHNlIGlmICghXy5pc0Z1bmN0aW9uKHByZWRpY2F0ZSkpIHtcbiAgICAvLyBtYWtlIHByZWRpY2F0ZSBpbnRvIGEgZnVuY3Rpb25cbiAgICBjb25zdCB2YWx1ZVByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICBwcmVkaWNhdGUgPSAodikgPT4gdiA9PT0gdmFsdWVQcmVkaWNhdGU7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgIGlmICghcHJlZGljYXRlKG9ialtrZXldLCBvYmopKSB7XG4gICAgICBkZWxldGUgbmV3T2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPYmo7XG59XG5cbi8qKlxuICogQ29udmVydHMgbnVtYmVyIG9mIGJ5dGVzIHRvIGEgcmVhZGFibGUgc2l6ZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBieXRlcyAtIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGZvciBleGFtcGxlXG4gKiAgICAgICAgICAgICAgICAgICAnMS4wMCBLQicgZm9yICcxMDI0IEInXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYnl0ZXMgY291bnQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIG9yXG4gKiAgICAgICAgICAgICAgICAgaWYgaXQgaXMgbGVzcyB0aGFuIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHRvUmVhZGFibGVTaXplU3RyaW5nKGJ5dGVzKSB7XG4gIGNvbnN0IGludEJ5dGVzID0gcGFyc2VJbnQoU3RyaW5nKGJ5dGVzKSwgMTApO1xuICBpZiAoaXNOYU4oaW50Qnl0ZXMpIHx8IGludEJ5dGVzIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgJyR7Ynl0ZXN9JyB0byBhIHJlYWRhYmxlIHNpemUgZm9ybWF0YCk7XG4gIH1cbiAgaWYgKGludEJ5dGVzID49IEdpQikge1xuICAgIHJldHVybiBgJHsoaW50Qnl0ZXMgLyAoR2lCICogMS4wKSkudG9GaXhlZCgyKX0gR0JgO1xuICB9IGVsc2UgaWYgKGludEJ5dGVzID49IE1pQikge1xuICAgIHJldHVybiBgJHsoaW50Qnl0ZXMgLyAoTWlCICogMS4wKSkudG9GaXhlZCgyKX0gTUJgO1xuICB9IGVsc2UgaWYgKGludEJ5dGVzID49IEtpQikge1xuICAgIHJldHVybiBgJHsoaW50Qnl0ZXMgLyAoS2lCICogMS4wKSkudG9GaXhlZCgyKX0gS0JgO1xuICB9XG4gIHJldHVybiBgJHtpbnRCeXRlc30gQmA7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHBhdGggaXMgYSBzdWJwYXRoIG9mIHRoZVxuICogcGFydGljdWxhciByb290IGZvbGRlci4gQm90aCBwYXRocyBjYW4gaW5jbHVkZSAuLiBhbmQgLiBzcGVjaWZpZXJzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpbmFsUGF0aCBUaGUgYWJzb2x1dGUgZmlsZS9mb2xkZXIgcGF0aFxuICogQHBhcmFtIHtzdHJpbmd9IHJvb3QgVGhlIGFic29sdXRlIHJvb3QgZm9sZGVyIHBhdGhcbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGZvcmNlUG9zaXggU2V0IGl0IHRvIHRydWUgaWYgcGF0aHMgbXVzdCBiZSBpbnRlcnByZXRlZCBpbiBQT1NJWCBmb3JtYXRcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiBvcmlnaW5hbCBwYXRoIGlzIHRoZSBzdWJwYXRoIG9mIHRoZSByb290IGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IGlmIGFueSBvZiB0aGUgZ2l2ZW4gcGF0aHMgaXMgbm90IGFic29sdXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3ViUGF0aChvcmlnaW5hbFBhdGgsIHJvb3QsIGZvcmNlUG9zaXggPSBudWxsKSB7XG4gIGNvbnN0IHBhdGhPYmogPSBmb3JjZVBvc2l4ID8gcGF0aC5wb3NpeCA6IHBhdGg7XG4gIGZvciAoY29uc3QgcCBvZiBbb3JpZ2luYWxQYXRoLCByb290XSkge1xuICAgIGlmICghcGF0aE9iai5pc0Fic29sdXRlKHApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3B9JyBpcyBleHBlY3RlZCB0byBiZSBhbiBhYnNvbHV0ZSBwYXRoYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290ID0gcGF0aE9iai5ub3JtYWxpemUocm9vdCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aE9iai5ub3JtYWxpemUob3JpZ2luYWxQYXRoKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgobm9ybWFsaXplZFJvb3QpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYXRocyBhcmUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZSBzeXN0ZW1cbiAqIGRlc3RpbmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoMSAtIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gYSBmaWxlL2ZvbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGgyIC0gQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBhIGZpbGUvZm9sZGVyXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gcGF0aE4gLSBaZXJvIG9yIG1vcmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gZmlsZXMvZm9sZGVyc1xuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IHRydWUgaWYgYWxsIHBhdGhzIGFyZSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlIHN5c3RlbSBpdGVtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzU2FtZURlc3RpbmF0aW9uKHBhdGgxLCBwYXRoMiwgLi4ucGF0aE4pIHtcbiAgY29uc3QgYWxsUGF0aHMgPSBbcGF0aDEsIHBhdGgyLCAuLi5wYXRoTl07XG4gIGlmICghKGF3YWl0IEIucmVkdWNlKGFsbFBhdGhzLCBhc3luYyAoYSwgYikgPT4gYSAmJiAoYXdhaXQgZnMuZXhpc3RzKGIpKSwgdHJ1ZSkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYXJlQWxsSXRlbXNFcXVhbCA9IChhcnIpID0+ICEhYXJyLnJlZHVjZSgoYSwgYikgPT4gKGEgPT09IGIgPyBhIDogTmFOKSk7XG4gIGlmIChhcmVBbGxJdGVtc0VxdWFsKGFsbFBhdGhzKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGV0IG1hcENiID0gYXN5bmMgKHgpID0+XG4gICAgKFxuICAgICAgYXdhaXQgZnMuc3RhdCh4LCB7XG4gICAgICAgIGJpZ2ludDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKS5pbm87XG4gIHJldHVybiBhcmVBbGxJdGVtc0VxdWFsKGF3YWl0IEIubWFwKGFsbFBhdGhzLCBtYXBDYikpO1xufVxuXG4vKipcbiAqIENvZXJjZXMgdGhlIGdpdmVuIG51bWJlci9zdHJpbmcgdG8gYSB2YWxpZCB2ZXJzaW9uIHN0cmluZ1xuICpcbiAqIEB0ZW1wbGF0ZSB7Ym9vbGVhbn0gW1N0cmljdD10cnVlXVxuICogQHBhcmFtIHtzdHJpbmd9IHZlciAtIFZlcnNpb24gc3RyaW5nIHRvIGNvZXJjZVxuICogQHBhcmFtIHtTdHJpY3R9IFtzdHJpY3RdIC0gSWYgYHRydWVgIHRoZW4gYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duXG4gKiBpZiBgdmVyYCBjYW5ub3QgYmUgY29lcmNlZFxuICogQHJldHVybnMge1N0cmljdCBleHRlbmRzIHRydWUgPyBzdHJpbmcgOiBzdHJpbmd8bnVsbH0gQ29lcmNlZCB2ZXJzaW9uIG51bWJlciBvciBudWxsIGlmIHRoZSBzdHJpbmcgY2Fubm90IGJlXG4gKiBjb2VyY2VkIGFuZCBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZFxuICogQHRocm93cyB7RXJyb3J9IGlmIHN0cmljdCBtb2RlIGlzIGVuYWJsZWQgYW5kIGB2ZXJgIGNhbm5vdCBiZSBjb2VyY2VkXG4gKi9cbmZ1bmN0aW9uIGNvZXJjZVZlcnNpb24odmVyLCBzdHJpY3QgPSAvKiogQHR5cGUge1N0cmljdH0gKi8gKHRydWUpKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNlbXZlci52YWxpZChzZW12ZXIuY29lcmNlKGAke3Zlcn1gKSk7XG4gIGlmIChzdHJpY3QgJiYgIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7dmVyfScgY2Fubm90IGJlIGNvZXJjZWQgdG8gYSB2YWxpZCB2ZXJzaW9uIG51bWJlcmApO1xuICB9XG4gIHJldHVybiAvKiogQHR5cGUge1N0cmljdCBleHRlbmRzIHRydWUgPyBzdHJpbmcgOiBzdHJpbmc/fSAqLyAocmVzdWx0KTtcbn1cblxuY29uc3QgU1VQUE9SVEVEX09QRVJBVE9SUyA9IFsnPT0nLCAnIT0nLCAnPicsICc8JywgJz49JywgJzw9JywgJz0nXTtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gdmVyc2lvbiBzdHJpbmdzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZlcjEgLSBUaGUgZmlyc3QgdmVyc2lvbiBudW1iZXIgdG8gY29tcGFyZS4gU2hvdWxkIGJlIGEgdmFsaWRcbiAqIHZlcnNpb24gbnVtYmVyIHN1cHBvcnRlZCBieSBzZW12ZXIgcGFyc2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IHZlcjIgLSBUaGUgc2Vjb25kIHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUuIFNob3VsZCBiZSBhIHZhbGlkXG4gKiB2ZXJzaW9uIG51bWJlciBzdXBwb3J0ZWQgYnkgc2VtdmVyIHBhcnNlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciAtIE9uZSBvZiBzdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgb3BlcmF0b3JzOlxuICogPT0sICE9LCA+LCA8LCA8PSwgPj0sID1cbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIG9yIGZhbHNlIGRlcGVuZGluZyBvbiB0aGUgYWN0dWFsIGNvbXBhcmlzb24gcmVzdWx0XG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gdW5zdXBwb3J0ZWQgb3BlcmF0b3IgaXMgc3VwcGxpZWQgb3IgYW55IG9mIHRoZSBzdXBwbGllZFxuICogdmVyc2lvbiBzdHJpbmdzIGNhbm5vdCBiZSBjb2VyY2VkXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyh2ZXIxLCBvcGVyYXRvciwgdmVyMikge1xuICBpZiAoIVNVUFBPUlRFRF9PUEVSQVRPUlMuaW5jbHVkZXMob3BlcmF0b3IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSAnJHtvcGVyYXRvcn0nIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZC4gYCArXG4gICAgICAgIGBPbmx5ICcke0pTT04uc3RyaW5naWZ5KFNVUFBPUlRFRF9PUEVSQVRPUlMpfScgb3BlcmF0b3JzIGFyZSBzdXBwb3J0ZWRgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNlbXZlck9wZXJhdG9yID0gWyc9PScsICchPSddLmluY2x1ZGVzKG9wZXJhdG9yKSA/ICc9JyA6IG9wZXJhdG9yO1xuICBjb25zdCByZXN1bHQgPSBzZW12ZXIuc2F0aXNmaWVzKGNvZXJjZVZlcnNpb24odmVyMSksIGAke3NlbXZlck9wZXJhdG9yfSR7Y29lcmNlVmVyc2lvbih2ZXIyKX1gKTtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSAnIT0nID8gIXJlc3VsdCA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBZGQgYXBwcm9wcmlhdGUgcXVvdGVzIHRvIGNvbW1hbmQgYXJndW1lbnRzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL25vZGUtc2hlbGwtcXVvdGVcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gYXJncyAtIFRoZSBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhcnNlZFxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgYXJndW1lbnRzLCBxdW90ZWRcbiAqL1xuZnVuY3Rpb24gcXVvdGUoYXJncykge1xuICByZXR1cm4gc2hlbGxRdW90ZShfLmNhc3RBcnJheShhcmdzKSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBuZWNlc3NhcnkgdG8gd29ya2Fyb3VuZCB1bmV4cGVjdGVkIG1lbW9yeSBsZWFrc1xuICogY2F1c2VkIGJ5IE5vZGVKUyBzdHJpbmcgaW50ZXJuaW5nXG4gKiBiZWhhdmlvciBkZXNjcmliZWQgaW4gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2OVxuICpcbiAqIEBwYXJhbSB7Kn0gcyAtIFRoZSBzdHJpbmcgdG8gdW5sZWFrXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEVpdGhlciB0aGUgdW5sZWFrZWQgc3RyaW5nIG9yIHRoZSBvcmlnaW5hbCBvYmplY3QgY29udmVydGVkIHRvIHN0cmluZ1xuICovXG5mdW5jdGlvbiB1bmxlYWtTdHJpbmcocykge1xuICByZXR1cm4gYCAke3N9YC5zdWJzdHIoMSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUGx1cmFsaXplT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbaW5jbHVzaXZlPWZhbHNlXSAtIFdoZXRoZXIgdG8gcHJlZml4IHdpdGggdGhlIG51bWJlciAoZS5nLiwgMyBkdWNrcylcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgZm9ybSBvZiBhIHdvcmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNvdW50XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmQgLSBUaGUgd29yZCB0byBwbHVyYWxpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAtIEhvdyBtYW55IG9mIHRoZSB3b3JkIGV4aXN0XG4gKiBAcGFyYW0ge1BsdXJhbGl6ZU9wdGlvbnN8Ym9vbGVhbn0gb3B0aW9ucyAtIG9wdGlvbnMgZm9yIHdvcmQgcGx1cmFsaXphdGlvbixcbiAqICAgb3IgYSBib29sZWFuIGluZGljYXRpbmcgdGhlIG9wdGlvbnMuaW5jbHVzaXZlIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgd29yZCBwbHVyYWxpemVkIGFjY29yZGluZyB0byB0aGUgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIHBsdXJhbGl6ZSh3b3JkLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBpbmNsdXNpdmUgPSBmYWxzZTtcbiAgaWYgKF8uaXNCb29sZWFuKG9wdGlvbnMpKSB7XG4gICAgLy8gaWYgcGFzc2VkIGluIGFzIGEgYm9vbGVhblxuICAgIGluY2x1c2l2ZSA9IG9wdGlvbnM7XG4gIH0gZWxzZSBpZiAoXy5pc0Jvb2xlYW4ob3B0aW9ucz8uaW5jbHVzaXZlKSkge1xuICAgIC8vIGlmIHBhc3NlZCBpbiBhcyBhbiBvcHRpb25zIGhhc2hcbiAgICBpbmNsdXNpdmUgPSBvcHRpb25zLmluY2x1c2l2ZTtcbiAgfVxuICByZXR1cm4gcGx1cmFsaXplTGliKHdvcmQsIGNvdW50LCBpbmNsdXNpdmUpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIEVuY29kaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhTaXplPTEwNzM3NDE4MjRdIFRoZSBtYXhpbXVtIHNpemUgb2ZcbiAqIHRoZSByZXN1bHRpbmcgYnVmZmVyIGluIGJ5dGVzLiBUaGlzIGlzIHNldCB0byAxR0IgYnkgZGVmYXVsdCwgYmVjYXVzZVxuICogQXBwaXVtIGxpbWl0cyB0aGUgbWF4aW11bSBIVFRQIGJvZHkgc2l6ZSB0byAxR0IuIEFsc28sIHRoZSBOb2RlSlMgaGVhcFxuICogc2l6ZSBtdXN0IGJlIGVub3VnaCB0byBrZWVwIHRoZSByZXN1bHRpbmcgb2JqZWN0ICh1c3VhbGx5IHRoaXMgc2l6ZSBpc1xuICogbGltaXRlZCB0byAxLjQgR0IpXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBjb250ZW50cyBvZiBhIGxvY2FsIGZpbGUgdG8gYW4gaW4tbWVtb3J5IGJhc2UtNjQgZW5jb2RlZCBidWZmZXIuXG4gKiBUaGUgb3BlcmF0aW9uIGlzIG1lbW9yeS11c2FnZSBmcmllbmRseSBhbmQgc2hvdWxkIGJlIHVzZWQgd2hpbGUgZW5jb2RpbmdcbiAqIGxhcmdlIGZpbGVzIHRvIGJhc2U2NFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmNQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgYmVpbmcgZW5jb2RlZFxuICogQHBhcmFtIHtFbmNvZGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj59IGJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBmaWxlIGFzIG1lbW9yeSBidWZmZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgc291cmNlIGZpbGVcbiAqIG9yIHRoZSBzb3VyY2UgZmlsZSBpcyB0b29cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9Jbk1lbW9yeUJhc2U2NChzcmNQYXRoLCBvcHRzID0ge30pIHtcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHNyY1BhdGgpKSB8fCAoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlOiAke3NyY1BhdGh9YCk7XG4gIH1cblxuICBjb25zdCB7bWF4U2l6ZSA9IDEgKiBHaUJ9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0QnVmZmVycyA9IFtdO1xuICBsZXQgcmVzdWx0QnVmZmVyc1NpemUgPSAwO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbSA9IG5ldyBzdHJlYW0uV3JpdGFibGUoe1xuICAgIHdyaXRlOiAoYnVmZmVyLCBlbmNvZGluZywgbmV4dCkgPT4ge1xuICAgICAgcmVzdWx0QnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgICByZXN1bHRCdWZmZXJzU2l6ZSArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYgKG1heFNpemUgPiAwICYmIHJlc3VsdEJ1ZmZlcnNTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICByZXN1bHRXcml0ZVN0cmVhbS5lbWl0KFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgYCArXG4gICAgICAgICAgICAgIGBidWZmZXIgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCByZWFkZXJTdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKHNyY1BhdGgpO1xuICBjb25zdCBiYXNlNjRFbmNvZGVyU3RyZWFtID0gbmV3IEJhc2U2NEVuY29kZSgpO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgcmVhZGVyU3RyZWFtLnVucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICAgIGJhc2U2NEVuY29kZXJTdHJlYW0udW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIHJlYWRlclN0cmVhbS5kZXN0cm95KCk7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gIH0pO1xuICBjb25zdCByZWFkU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZWFkZXJTdHJlYW0ub25jZSgnY2xvc2UnLCByZXNvbHZlKTtcbiAgICByZWFkZXJTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT5cbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byByZWFkICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpXG4gICAgKTtcbiAgfSk7XG4gIHJlYWRlclN0cmVhbS5waXBlKGJhc2U2NEVuY29kZXJTdHJlYW0pO1xuICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuXG4gIGF3YWl0IEIuYWxsKFtyZWFkU3RyZWFtUHJvbWlzZSwgcmVzdWx0V3JpdGVTdHJlYW1Qcm9taXNlXSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJlc3VsdEJ1ZmZlcnMpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIExvY2tGaWxlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0PTEyMF0gVGhlIG1heCB0aW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIGxvY2tcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyeVJlY292ZXJ5PWZhbHNlXSBXaGV0aGVyIHRvIHRyeSBsb2NrIHJlY292ZXJ5IGlmXG4gKiB0aGUgZmlyc3QgYXR0ZW1wdCB0byBhY3F1aXJlIGl0IHRpbWVkIG91dC5cbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhbiBhc3luYyBmdW5jdGlvbiB3aGljaCwgd2hlbiBjYWxsZWQsIHdpbGwgbm90IHByb2NlZWQgdW50aWwgYSBjZXJ0YWluIGZpbGUgaXMgbm9cbiAqIGxvbmdlciBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uIFRoaXMgYWxsb3dzIGZvciBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgYmVoYXZpb3IgYWNyb3NzIHByb2Nlc3Nlc1xuICogdXNpbmcgYSBrbm93biBsb2NrZmlsZSBwYXRoLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9ja0ZpbGUgVGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSB1c2VkIGZvciB0aGUgbG9ja1xuICogQHBhcmFtIHtMb2NrRmlsZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIGFzeW5jIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW5vdGhlciBhc3luYyBmdW5jdGlvbiBkZWZpbmluZyB0aGUgbG9ja2VkXG4gKiBiZWhhdmlvclxuICovXG5mdW5jdGlvbiBnZXRMb2NrRmlsZUd1YXJkKGxvY2tGaWxlLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge3RpbWVvdXQgPSAxMjAsIHRyeVJlY292ZXJ5ID0gZmFsc2V9ID0gb3B0cztcblxuICBjb25zdCBsb2NrID0gLyoqIEB0eXBlIHsobG9ja2ZpbGU6IHN0cmluZywgb3B0czogaW1wb3J0KCdsb2NrZmlsZScpLk9wdGlvbnMpPT5CPHZvaWQ+fSAqLyAoXG4gICAgQi5wcm9taXNpZnkoX2xvY2tmaWxlLmxvY2spXG4gICk7XG4gIGNvbnN0IGNoZWNrID0gQi5wcm9taXNpZnkoX2xvY2tmaWxlLmNoZWNrKTtcbiAgY29uc3QgdW5sb2NrID0gQi5wcm9taXNpZnkoX2xvY2tmaWxlLnVubG9jayk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KC4uLmFyZ3M6IGFueVtdKSA9PiBUfSBiZWhhdmlvclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUPn1cbiAgICovXG4gIGNvbnN0IGd1YXJkID0gYXN5bmMgKGJlaGF2aW9yKSA9PiB7XG4gICAgbGV0IHRyaWVkUmVjb3ZlcnkgPSBmYWxzZTtcbiAgICBkbyB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBpZiB0aGUgbG9ja2ZpbGUgZG9lc24ndCBleGlzdCwgbG9jayBpdCBzeW5jaHJvbm91c2x5IHRvIG1ha2Ugc3VyZSBubyBvdGhlciBjYWxsXG4gICAgICAgIC8vIG9uIHRoZSBzYW1lIHNwaW4gb2YgdGhlIGV2ZW50IGxvb3AgY2FuIGFsc28gaW5pdGlhdGUgYSBsb2NrLiBJZiB0aGUgbG9ja2ZpbGUgZG9lcyBleGlzdFxuICAgICAgICAvLyB0aGVuIGp1c3QgdXNlIHRoZSByZWd1bGFyIGFzeW5jICdsb2NrJyBtZXRob2Qgd2hpY2ggd2lsbCB3YWl0IG9uIHRoZSBsb2NrLlxuICAgICAgICBpZiAoX2xvY2tmaWxlLmNoZWNrU3luYyhsb2NrRmlsZSkpIHtcbiAgICAgICAgICBhd2FpdCBsb2NrKGxvY2tGaWxlLCB7d2FpdDogdGltZW91dCAqIDEwMDB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfbG9ja2ZpbGUubG9ja1N5bmMobG9ja0ZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyhlLm1lc3NhZ2UsICdFRVhJU1QnKSAmJiB0cnlSZWNvdmVyeSAmJiAhdHJpZWRSZWNvdmVyeSkge1xuICAgICAgICAgIC8vIFRoZXJlIGNvdWxkIGJlIGNhc2VzIHdoZXJlIGEgcHJvY2VzcyBoYXMgYmVlbiBmb3JjZWZ1bGx5IHRlcm1pbmF0ZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGEgY2hhbmNlIHRvIGNsZWFuIHVwIHBlbmRpbmcgbG9ja3M6IGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbG9ja2ZpbGUvaXNzdWVzLzI2XG4gICAgICAgICAgX2xvY2tmaWxlLnVubG9ja1N5bmMobG9ja0ZpbGUpO1xuICAgICAgICAgIHRyaWVkUmVjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ291bGQgbm90IGFjcXVpcmUgbG9jayBvbiAnJHtsb2NrRmlsZX0nIGFmdGVyICR7dGltZW91dH1zLiBgICtcbiAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIH0gd2hpbGUgKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYmVoYXZpb3IoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gd2hldGhlciB0aGUgYmVoYXZpb3Igc3VjY2VlZGVkIG9yIG5vdCwgZ2V0IHJpZCBvZiB0aGUgbG9ja1xuICAgICAgYXdhaXQgdW5sb2NrKGxvY2tGaWxlKTtcbiAgICB9XG4gIH07XG5cbiAgZ3VhcmQuY2hlY2sgPSBhc3luYyAoKSA9PiBhd2FpdCBjaGVjayhsb2NrRmlsZSk7XG5cbiAgcmV0dXJuIGd1YXJkO1xufVxuXG5leHBvcnQge1xuICBoYXNWYWx1ZSxcbiAgZXNjYXBlU3BhY2UsXG4gIGVzY2FwZVNwZWNpYWxDaGFycyxcbiAgbG9jYWxJcCxcbiAgY2FuY2VsbGFibGVEZWxheSxcbiAgbXVsdGlSZXNvbHZlLFxuICBzYWZlSnNvblBhcnNlLFxuICB3cmFwRWxlbWVudCxcbiAgdW53cmFwRWxlbWVudCxcbiAgZmlsdGVyT2JqZWN0LFxuICB0b1JlYWRhYmxlU2l6ZVN0cmluZyxcbiAgaXNTdWJQYXRoLFxuICBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUixcbiAgaXNTYW1lRGVzdGluYXRpb24sXG4gIGNvbXBhcmVWZXJzaW9ucyxcbiAgY29lcmNlVmVyc2lvbixcbiAgcXVvdGUsXG4gIHVubGVha1N0cmluZyxcbiAganNvblN0cmluZ2lmeSxcbiAgcGx1cmFsaXplLFxuICBHaUIsXG4gIE1pQixcbiAgS2lCLFxuICB0b0luTWVtb3J5QmFzZTY0LFxuICB1dWlkVjEsXG4gIHV1aWRWMyxcbiAgdXVpZFY0LFxuICB1dWlkVjUsXG4gIHNoZWxsUGFyc2UsXG4gIGdldExvY2tGaWxlR3VhcmQsXG59O1xuXG4vKipcbiAqIEEgYHN0cmluZ2Agd2hpY2ggaXMgbmV2ZXIgYCcnYC5cbiAqXG4gKiBAdGVtcGxhdGUge3N0cmluZ30gVFxuICogQHR5cGVkZWYge1QgZXh0ZW5kcyAnJyA/IG5ldmVyIDogVH0gTm9uRW1wdHlTdHJpbmdcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQTs7QUFFQSxNQUFNQSwwQkFBMEIsR0FBRyxxQ0FBbkM7O0FBQ0EsTUFBTUMsR0FBRyxHQUFHLElBQVo7O0FBQ0EsTUFBTUMsR0FBRyxHQUFHRCxHQUFHLEdBQUcsSUFBbEI7O0FBQ0EsTUFBTUUsR0FBRyxH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
417
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiIsIktpQiIsIk1pQiIsIkdpQiIsImhhc0NvbnRlbnQiLCJ2YWwiLCJfIiwiaXNTdHJpbmciLCJoYXNWYWx1ZSIsImlzTnVtYmVyIiwiaXNOYU4iLCJpc1VuZGVmaW5lZCIsImlzTnVsbCIsImVzY2FwZVNwYWNlIiwic3RyIiwic3BsaXQiLCJqb2luIiwiZXNjYXBlU3BlY2lhbENoYXJzIiwicXVvdGVFc2NhcGUiLCJyZXBsYWNlIiwicmUiLCJSZWdFeHAiLCJsb2NhbElwIiwiaXAiLCJjaGFpbiIsIm9zIiwibmV0d29ya0ludGVyZmFjZXMiLCJ2YWx1ZXMiLCJmbGF0dGVuIiwiZmlsdGVyIiwiZmFtaWx5IiwiaW50ZXJuYWwiLCJtYXAiLCJmaXJzdCIsInZhbHVlIiwiY2FuY2VsbGFibGVEZWxheSIsIm1zIiwidGltZXIiLCJyZXNvbHZlIiwicmVqZWN0IiwiZGVsYXkiLCJCIiwiUHJvbWlzZSIsIl9yZXNvbHZlIiwiX3JlamVjdCIsInNldFRpbWVvdXQiLCJjYW5jZWwiLCJjbGVhclRpbWVvdXQiLCJDYW5jZWxsYXRpb25FcnJvciIsIm11bHRpUmVzb2x2ZSIsInJvb3RzIiwiYXJncyIsInJvb3QiLCJwYXRoIiwic2FmZUpzb25QYXJzZSIsIm9iaiIsIkpTT04iLCJwYXJzZSIsImlnbiIsImpzb25TdHJpbmdpZnkiLCJyZXBsYWNlciIsInNwYWNlIiwiaXNGdW5jdGlvbiIsImsiLCJ2IiwiYnVmZmVyVG9KU09OIiwiQnVmZmVyIiwicHJvdG90eXBlIiwidG9KU09OIiwic3RyaW5naWZ5Iiwia2V5IiwidXBkYXRlZFZhbHVlIiwiaXNCdWZmZXIiLCJ0b1N0cmluZyIsInVud3JhcEVsZW1lbnQiLCJlbCIsInByb3BOYW1lIiwiaGFzIiwid3JhcEVsZW1lbnQiLCJlbGVtZW50SWQiLCJFTEVNRU5UIiwiZmlsdGVyT2JqZWN0IiwicHJlZGljYXRlIiwibmV3T2JqIiwiY2xvbmUiLCJ2YWx1ZVByZWRpY2F0ZSIsIk9iamVjdCIsImtleXMiLCJ0b1JlYWRhYmxlU2l6ZVN0cmluZyIsImJ5dGVzIiwiaW50Qnl0ZXMiLCJwYXJzZUludCIsIlN0cmluZyIsIkVycm9yIiwidG9GaXhlZCIsImlzU3ViUGF0aCIsIm9yaWdpbmFsUGF0aCIsImZvcmNlUG9zaXgiLCJwYXRoT2JqIiwicG9zaXgiLCJwIiwiaXNBYnNvbHV0ZSIsIm5vcm1hbGl6ZWRSb290Iiwibm9ybWFsaXplIiwibm9ybWFsaXplZFBhdGgiLCJzdGFydHNXaXRoIiwiaXNTYW1lRGVzdGluYXRpb24iLCJwYXRoMSIsInBhdGgyIiwicGF0aE4iLCJhbGxQYXRocyIsInJlZHVjZSIsImEiLCJiIiwiZnMiLCJleGlzdHMiLCJhcmVBbGxJdGVtc0VxdWFsIiwiYXJyIiwiTmFOIiwibWFwQ2IiLCJ4Iiwic3RhdCIsImJpZ2ludCIsImlubyIsImNvZXJjZVZlcnNpb24iLCJ2ZXIiLCJzdHJpY3QiLCJyZXN1bHQiLCJzZW12ZXIiLCJ2YWxpZCIsImNvZXJjZSIsIlNVUFBPUlRFRF9PUEVSQVRPUlMiLCJjb21wYXJlVmVyc2lvbnMiLCJ2ZXIxIiwib3BlcmF0b3IiLCJ2ZXIyIiwiaW5jbHVkZXMiLCJzZW12ZXJPcGVyYXRvciIsInNhdGlzZmllcyIsInF1b3RlIiwic2hlbGxRdW90ZSIsImNhc3RBcnJheSIsInVubGVha1N0cmluZyIsInMiLCJzdWJzdHIiLCJwbHVyYWxpemUiLCJ3b3JkIiwiY291bnQiLCJvcHRpb25zIiwiaW5jbHVzaXZlIiwiaXNCb29sZWFuIiwicGx1cmFsaXplTGliIiwidG9Jbk1lbW9yeUJhc2U2NCIsInNyY1BhdGgiLCJvcHRzIiwiaXNEaXJlY3RvcnkiLCJtYXhTaXplIiwicmVzdWx0QnVmZmVycyIsInJlc3VsdEJ1ZmZlcnNTaXplIiwicmVzdWx0V3JpdGVTdHJlYW0iLCJzdHJlYW0iLCJXcml0YWJsZSIsIndyaXRlIiwiYnVmZmVyIiwiZW5jb2RpbmciLCJuZXh0IiwicHVzaCIsImxlbmd0aCIsImVtaXQiLCJyZWFkZXJTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwiYmFzZTY0RW5jb2RlclN0cmVhbSIsIkJhc2U2NEVuY29kZSIsInJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSIsIm9uY2UiLCJlIiwidW5waXBlIiwiZGVzdHJveSIsInJlYWRTdHJlYW1Qcm9taXNlIiwibWVzc2FnZSIsInBpcGUiLCJhbGwiLCJjb25jYXQiLCJnZXRMb2NrRmlsZUd1YXJkIiwibG9ja0ZpbGUiLCJ0aW1lb3V0IiwidHJ5UmVjb3ZlcnkiLCJsb2NrIiwicHJvbWlzaWZ5IiwiX2xvY2tmaWxlIiwiY2hlY2siLCJ1bmxvY2siLCJndWFyZCIsImJlaGF2aW9yIiwidHJpZWRSZWNvdmVyeSIsImNoZWNrU3luYyIsIndhaXQiLCJsb2NrU3luYyIsInVubG9ja1N5bmMiXSwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc2hlbGwtcXVvdGVcbiAgcXVvdGUgYXMgc2hlbGxRdW90ZSxcbiAgcGFyc2UgYXMgc2hlbGxQYXJzZSxcbn0gZnJvbSAnc2hlbGwtcXVvdGUnO1xuaW1wb3J0IHBsdXJhbGl6ZUxpYiBmcm9tICdwbHVyYWxpemUnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHtCYXNlNjRFbmNvZGV9IGZyb20gJ2Jhc2U2NC1zdHJlYW0nO1xuaW1wb3J0IHtcbiAgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvdXVpZFxuICB2MSBhcyB1dWlkVjEsXG4gIHYzIGFzIHV1aWRWMyxcbiAgdjQgYXMgdXVpZFY0LFxuICB2NSBhcyB1dWlkVjUsXG59IGZyb20gJ3V1aWQnO1xuaW1wb3J0IF9sb2NrZmlsZSBmcm9tICdsb2NrZmlsZSc7XG5cbmNvbnN0IFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSID0gJ2VsZW1lbnQtNjA2Ni0xMWU0LWE1MmUtNGY3MzU0NjZjZWNmJztcbmNvbnN0IEtpQiA9IDEwMjQ7XG5jb25zdCBNaUIgPSBLaUIgKiAxMDI0O1xuY29uc3QgR2lCID0gTWlCICogMTAyNDtcblxuLyoqXG4gKiBAdGVtcGxhdGUge3N0cmluZ30gVFxuICogQHBhcmFtIHtUfSB2YWxcbiAqIEByZXR1cm5zIHt2YWwgaXMgTm9uRW1wdHlTdHJpbmc8VD59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNDb250ZW50KHZhbCkge1xuICByZXR1cm4gXy5pc1N0cmluZyh2YWwpICYmIHZhbCAhPT0gJyc7XG59XG5cbi8qKlxuICogcmV0dXJuIHRydWUgaWYgdGhlIHRoZSB2YWx1ZSBpcyBub3QgYHVuZGVmaW5lZGAsIGBudWxsYCwgb3IgYE5hTmAuXG4gKlxuICogWFhYOiBgTmFOYCBpcyBub3QgZXhwcmVzc2libGUgaW4gVHlwZVNjcmlwdC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHZhbFxuICogQHJldHVybnMge3ZhbCBpcyBOb25OdWxsYWJsZTxUPn1cbiAqL1xuZnVuY3Rpb24gaGFzVmFsdWUodmFsKSB7XG4gIC8vIGF2b2lkIGluY29ycmVjdGx5IGV2YWx1YXRpbmcgYDBgIGFzIGZhbHNlXG4gIGlmIChfLmlzTnVtYmVyKHZhbCkpIHtcbiAgICByZXR1cm4gIV8uaXNOYU4odmFsKTtcbiAgfVxuICByZXR1cm4gIV8uaXNVbmRlZmluZWQodmFsKSAmJiAhXy5pc051bGwodmFsKTtcbn1cblxuLy8gZXNjYXBlIHNwYWNlcyBpbiBzdHJpbmcsIGZvciBjb21tYW5kbGluZSBjYWxsc1xuZnVuY3Rpb24gZXNjYXBlU3BhY2Uoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyAvKS5qb2luKCdcXFxcICcpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTcGVjaWFsQ2hhcnMoc3RyLCBxdW90ZUVzY2FwZSkge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGlmICh0eXBlb2YgcXVvdGVFc2NhcGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcXVvdGVFc2NhcGUgPSBmYWxzZTtcbiAgfVxuICBzdHIgPSBzdHJcbiAgICAucmVwbGFjZSgvW1xcXFxdL2csICdcXFxcXFxcXCcpXG4gICAgLnJlcGxhY2UoL1tcXC9dL2csICdcXFxcLycpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAucmVwbGFjZSgvW1xcZl0vZywgJ1xcXFxmJylcbiAgICAucmVwbGFjZSgvW1xcbl0vZywgJ1xcXFxuJylcbiAgICAucmVwbGFjZSgvW1xccl0vZywgJ1xcXFxyJylcbiAgICAucmVwbGFjZSgvW1xcdF0vZywgJ1xcXFx0JylcbiAgICAucmVwbGFjZSgvW1xcXCJdL2csICdcXFxcXCInKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgLnJlcGxhY2UoL1xcXFwnL2csIFwiXFxcXCdcIik7XG4gIGlmIChxdW90ZUVzY2FwZSkge1xuICAgIGxldCByZSA9IG5ldyBSZWdFeHAocXVvdGVFc2NhcGUsICdnJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UocmUsIGBcXFxcJHtxdW90ZUVzY2FwZX1gKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiBsb2NhbElwKCkge1xuICBsZXQgaXAgPSBfLmNoYWluKG9zLm5ldHdvcmtJbnRlcmZhY2VzKCkpXG4gICAgLnZhbHVlcygpXG4gICAgLmZsYXR0ZW4oKVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuZmFtaWx5ID09PSAnSVB2NCcgJiYgdmFsLmludGVybmFsID09PSBmYWxzZTtcbiAgICB9KVxuICAgIC5tYXAoJ2FkZHJlc3MnKVxuICAgIC5maXJzdCgpXG4gICAgLnZhbHVlKCk7XG4gIHJldHVybiBpcDtcbn1cblxuLypcbiAqIENyZWF0ZXMgYSBwcm9taXNlIHRoYXQgaXMgY2FuY2VsbGFibGUsIGFuZCB3aWxsIHRpbWVvdXRcbiAqIGFmdGVyIGBtc2AgZGVsYXlcbiAqL1xuZnVuY3Rpb24gY2FuY2VsbGFibGVEZWxheShtcykge1xuICBsZXQgdGltZXI7XG4gIGxldCByZXNvbHZlO1xuICBsZXQgcmVqZWN0O1xuXG4gIGNvbnN0IGRlbGF5ID0gbmV3IEIuUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICByZXNvbHZlID0gX3Jlc29sdmU7XG4gICAgcmVqZWN0ID0gX3JlamVjdDtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0sIG1zKTtcbiAgfSk7XG5cbiAgLy8gb3ZlcnJpZGUgQmx1ZWJpcmQncyBgY2FuY2VsYCwgd2hpY2ggZG9lcyBub3Qgd29yayB3aGVuIHVzaW5nIGBhd2FpdGAgb25cbiAgLy8gYSBwcm9taXNlLCBzaW5jZSBgcmVzb2x2ZWAvYHJlamVjdGAgYXJlIG5ldmVyIGNhbGxlZFxuICBkZWxheS5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICByZWplY3QobmV3IEIuQ2FuY2VsbGF0aW9uRXJyb3IoKSk7XG4gIH07XG4gIHJldHVybiBkZWxheTtcbn1cblxuZnVuY3Rpb24gbXVsdGlSZXNvbHZlKHJvb3RzLCAuLi5hcmdzKSB7XG4gIHJldHVybiByb290cy5tYXAoKHJvb3QpID0+IHBhdGgucmVzb2x2ZShyb290LCAuLi5hcmdzKSk7XG59XG5cbi8qXG4gKiBQYXJzZXMgYW4gb2JqZWN0IGlmIHBvc3NpYmxlLiBPdGhlcndpc2UgcmV0dXJucyB0aGUgb2JqZWN0IHdpdGhvdXQgcGFyc2luZy5cbiAqL1xuZnVuY3Rpb24gc2FmZUpzb25QYXJzZShvYmopIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShvYmopO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICAvLyBpZ25vcmU6IHRoaXMgaXMgbm90IGpzb24gcGFyc2FibGVcbiAgICByZXR1cm4gb2JqO1xuICB9XG59XG5cbi8qXG4gKiBTdHJpbmdpZmllcyB0aGUgb2JqZWN0IHBhc3NlZCBpbiwgY29udmVydGluZyBCdWZmZXJzIGludG8gU3RyaW5ncyBmb3IgYmV0dGVyXG4gKiBkaXNwbGF5LiBUaGlzIG1pbWljcyBKU09OLnN0cmluZ2lmeSAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vc3RyaW5naWZ5KVxuICogZXhjZXB0IHRoZSBgcmVwbGFjZXJgIGFyZ3VtZW50IGNhbiBvbmx5IGJlIGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHs/ZnVuY3Rpb259IHJlcGxhY2VyIC0gZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBwcm9wZXJ0aWVzIGFkZGVkIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCBvYmplY3RcbiAqIEBwYXJhbSB7P251bWJlcnxzdHJpbmd9IHNwYWNlIC0gdXNlZCB0byBpbnNlcnQgd2hpdGUgc3BhY2UgaW50byB0aGUgb3V0cHV0IEpTT05cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGZvciByZWFkYWJpbGl0eSBwdXJwb3Nlcy4gRGVmYXVsdHMgdG8gMlxuICogcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBKU09OIG9iamVjdCBzZXJpYWxpemVkIGFzIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGpzb25TdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2UgPSAyKSB7XG4gIC8vIGlmIG5vIHJlcGxhY2VyIGlzIHBhc3NlZCwgb3IgaXQgaXMgbm90IGEgZnVuY3Rpb24sIGp1c3QgdXNlIGEgcGFzcy10aHJvdWdoXG4gIGlmICghXy5pc0Z1bmN0aW9uKHJlcGxhY2VyKSkge1xuICAgIHJlcGxhY2VyID0gKGssIHYpID0+IHY7XG4gIH1cblxuICAvLyBCdWZmZXJzIGNhbm5vdCBiZSBzZXJpYWxpemVkIGluIGEgcmVhZGFibGUgd2F5XG4gIGNvbnN0IGJ1ZmZlclRvSlNPTiA9IEJ1ZmZlci5wcm90b3R5cGUudG9KU09OO1xuICBkZWxldGUgQnVmZmVyLnByb3RvdHlwZS50b0pTT047XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFxuICAgICAgb2JqLFxuICAgICAgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlID0gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSA/IHZhbHVlLnRvU3RyaW5nKCd1dGY4JykgOiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VyKGtleSwgdXBkYXRlZFZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBzcGFjZVxuICAgICk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gcmVzdG9yZSB0aGUgZnVuY3Rpb24sIHNvIGFzIHRvIG5vdCBicmVhayBmdXJ0aGVyIHNlcmlhbGl6YXRpb25cbiAgICBCdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGJ1ZmZlclRvSlNPTjtcbiAgfVxufVxuXG4vKlxuICogUmVtb3ZlcyB0aGUgd3JhcHBlciBmcm9tIGVsZW1lbnQsIGlmIGl0IGV4aXN0cy5cbiAqICAgeyBFTEVNRU5UOiA0IH0gYmVjb21lcyA0XG4gKiAgIHsgZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2Y6IDUgfSBiZWNvbWVzIDVcbiAqL1xuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbCkge1xuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUiwgJ0VMRU1FTlQnXSkge1xuICAgIGlmIChfLmhhcyhlbCwgcHJvcE5hbWUpKSB7XG4gICAgICByZXR1cm4gZWxbcHJvcE5hbWVdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWw7XG59XG5cbmZ1bmN0aW9uIHdyYXBFbGVtZW50KGVsZW1lbnRJZCkge1xuICByZXR1cm4ge1xuICAgIEVMRU1FTlQ6IGVsZW1lbnRJZCxcbiAgICBbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVJdOiBlbGVtZW50SWQsXG4gIH07XG59XG5cbi8qXG4gKiBSZXR1cm5zIG9iamVjdCBjb25zaXN0aW5nIG9mIGFsbCBwcm9wZXJ0aWVzIGluIHRoZSBvcmlnaW5hbCBlbGVtZW50XG4gKiB3aGljaCB3ZXJlIHRydXRoeSBnaXZlbiB0aGUgcHJlZGljYXRlLlxuICogSWYgdGhlIHByZWRpY2F0ZSBpc1xuICogICAqIG1pc3NpbmcgLSBpdCB3aWxsIHJlbW92ZSBhbGwgcHJvcGVydGllcyB3aG9zZSB2YWx1ZXMgYXJlIGB1bmRlZmluZWRgXG4gKiAgICogYSBzY2FsYXIgLSBpdCB3aWxsIHRlc3QgYWxsIHByb3BlcnRpZXMnIHZhbHVlcyBhZ2FpbnN0IHRoYXQgdmFsdWVcbiAqICAgKiBhIGZ1bmN0aW9uIC0gaXQgd2lsbCBwYXNzIGVhY2ggdmFsdWUgYW5kIHRoZSBvcmlnaW5hbCBvYmplY3QgaW50byB0aGUgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmlsdGVyT2JqZWN0KG9iaiwgcHJlZGljYXRlKSB7XG4gIGxldCBuZXdPYmogPSBfLmNsb25lKG9iaik7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHByZWRpY2F0ZSkpIHtcbiAgICAvLyByZW1vdmUgYW55IGVsZW1lbnQgZnJvbSB0aGUgb2JqZWN0IHdob3NlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgIHByZWRpY2F0ZSA9ICh2KSA9PiAhXy5pc1VuZGVmaW5lZCh2KTtcbiAgfSBlbHNlIGlmICghXy5pc0Z1bmN0aW9uKHByZWRpY2F0ZSkpIHtcbiAgICAvLyBtYWtlIHByZWRpY2F0ZSBpbnRvIGEgZnVuY3Rpb25cbiAgICBjb25zdCB2YWx1ZVByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICBwcmVkaWNhdGUgPSAodikgPT4gdiA9PT0gdmFsdWVQcmVkaWNhdGU7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgIGlmICghcHJlZGljYXRlKG9ialtrZXldLCBvYmopKSB7XG4gICAgICBkZWxldGUgbmV3T2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPYmo7XG59XG5cbi8qKlxuICogQ29udmVydHMgbnVtYmVyIG9mIGJ5dGVzIHRvIGEgcmVhZGFibGUgc2l6ZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBieXRlcyAtIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGZvciBleGFtcGxlXG4gKiAgICAgICAgICAgICAgICAgICAnMS4wMCBLQicgZm9yICcxMDI0IEInXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYnl0ZXMgY291bnQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIG9yXG4gKiAgICAgICAgICAgICAgICAgaWYgaXQgaXMgbGVzcyB0aGFuIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHRvUmVhZGFibGVTaXplU3RyaW5nKGJ5dGVzKSB7XG4gIGNvbnN0IGludEJ5dGVzID0gcGFyc2VJbnQoU3RyaW5nKGJ5dGVzKSwgMTApO1xuICBpZiAoaXNOYU4oaW50Qnl0ZXMpIHx8IGludEJ5dGVzIDwgMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgJyR7Ynl0ZXN9JyB0byBhIHJlYWRhYmxlIHNpemUgZm9ybWF0YCk7XG4gIH1cbiAgaWYgKGludEJ5dGVzID49IEdpQikge1xuICAgIHJldHVybiBgJHsoaW50Qnl0ZXMgLyAoR2lCICogMS4wKSkudG9GaXhlZCgyKX0gR0JgO1xuICB9IGVsc2UgaWYgKGludEJ5dGVzID49IE1pQikge1xuICAgIHJldHVybiBgJHsoaW50Qnl0ZXMgLyAoTWlCICogMS4wKSkudG9GaXhlZCgyKX0gTUJgO1xuICB9IGVsc2UgaWYgKGludEJ5dGVzID49IEtpQikge1xuICAgIHJldHVybiBgJHsoaW50Qnl0ZXMgLyAoS2lCICogMS4wKSkudG9GaXhlZCgyKX0gS0JgO1xuICB9XG4gIHJldHVybiBgJHtpbnRCeXRlc30gQmA7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHBhdGggaXMgYSBzdWJwYXRoIG9mIHRoZVxuICogcGFydGljdWxhciByb290IGZvbGRlci4gQm90aCBwYXRocyBjYW4gaW5jbHVkZSAuLiBhbmQgLiBzcGVjaWZpZXJzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpbmFsUGF0aCBUaGUgYWJzb2x1dGUgZmlsZS9mb2xkZXIgcGF0aFxuICogQHBhcmFtIHtzdHJpbmd9IHJvb3QgVGhlIGFic29sdXRlIHJvb3QgZm9sZGVyIHBhdGhcbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGZvcmNlUG9zaXggU2V0IGl0IHRvIHRydWUgaWYgcGF0aHMgbXVzdCBiZSBpbnRlcnByZXRlZCBpbiBQT1NJWCBmb3JtYXRcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHRoZSBnaXZlbiBvcmlnaW5hbCBwYXRoIGlzIHRoZSBzdWJwYXRoIG9mIHRoZSByb290IGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IGlmIGFueSBvZiB0aGUgZ2l2ZW4gcGF0aHMgaXMgbm90IGFic29sdXRlXG4gKi9cbmZ1bmN0aW9uIGlzU3ViUGF0aChvcmlnaW5hbFBhdGgsIHJvb3QsIGZvcmNlUG9zaXggPSBudWxsKSB7XG4gIGNvbnN0IHBhdGhPYmogPSBmb3JjZVBvc2l4ID8gcGF0aC5wb3NpeCA6IHBhdGg7XG4gIGZvciAoY29uc3QgcCBvZiBbb3JpZ2luYWxQYXRoLCByb290XSkge1xuICAgIGlmICghcGF0aE9iai5pc0Fic29sdXRlKHApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3B9JyBpcyBleHBlY3RlZCB0byBiZSBhbiBhYnNvbHV0ZSBwYXRoYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290ID0gcGF0aE9iai5ub3JtYWxpemUocm9vdCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aE9iai5ub3JtYWxpemUob3JpZ2luYWxQYXRoKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgobm9ybWFsaXplZFJvb3QpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYXRocyBhcmUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZSBzeXN0ZW1cbiAqIGRlc3RpbmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoMSAtIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gYSBmaWxlL2ZvbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGgyIC0gQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBhIGZpbGUvZm9sZGVyXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gcGF0aE4gLSBaZXJvIG9yIG1vcmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gZmlsZXMvZm9sZGVyc1xuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IHRydWUgaWYgYWxsIHBhdGhzIGFyZSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlIHN5c3RlbSBpdGVtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzU2FtZURlc3RpbmF0aW9uKHBhdGgxLCBwYXRoMiwgLi4ucGF0aE4pIHtcbiAgY29uc3QgYWxsUGF0aHMgPSBbcGF0aDEsIHBhdGgyLCAuLi5wYXRoTl07XG4gIGlmICghKGF3YWl0IEIucmVkdWNlKGFsbFBhdGhzLCBhc3luYyAoYSwgYikgPT4gYSAmJiAoYXdhaXQgZnMuZXhpc3RzKGIpKSwgdHJ1ZSkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYXJlQWxsSXRlbXNFcXVhbCA9IChhcnIpID0+ICEhYXJyLnJlZHVjZSgoYSwgYikgPT4gKGEgPT09IGIgPyBhIDogTmFOKSk7XG4gIGlmIChhcmVBbGxJdGVtc0VxdWFsKGFsbFBhdGhzKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGV0IG1hcENiID0gYXN5bmMgKHgpID0+XG4gICAgKFxuICAgICAgYXdhaXQgZnMuc3RhdCh4LCB7XG4gICAgICAgIGJpZ2ludDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgKS5pbm87XG4gIHJldHVybiBhcmVBbGxJdGVtc0VxdWFsKGF3YWl0IEIubWFwKGFsbFBhdGhzLCBtYXBDYikpO1xufVxuXG4vKipcbiAqIENvZXJjZXMgdGhlIGdpdmVuIG51bWJlci9zdHJpbmcgdG8gYSB2YWxpZCB2ZXJzaW9uIHN0cmluZ1xuICpcbiAqIEB0ZW1wbGF0ZSB7Ym9vbGVhbn0gW1N0cmljdD10cnVlXVxuICogQHBhcmFtIHtzdHJpbmd9IHZlciAtIFZlcnNpb24gc3RyaW5nIHRvIGNvZXJjZVxuICogQHBhcmFtIHtTdHJpY3R9IFtzdHJpY3RdIC0gSWYgYHRydWVgIHRoZW4gYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duXG4gKiBpZiBgdmVyYCBjYW5ub3QgYmUgY29lcmNlZFxuICogQHJldHVybnMge1N0cmljdCBleHRlbmRzIHRydWUgPyBzdHJpbmcgOiBzdHJpbmd8bnVsbH0gQ29lcmNlZCB2ZXJzaW9uIG51bWJlciBvciBudWxsIGlmIHRoZSBzdHJpbmcgY2Fubm90IGJlXG4gKiBjb2VyY2VkIGFuZCBzdHJpY3QgbW9kZSBpcyBkaXNhYmxlZFxuICogQHRocm93cyB7RXJyb3J9IGlmIHN0cmljdCBtb2RlIGlzIGVuYWJsZWQgYW5kIGB2ZXJgIGNhbm5vdCBiZSBjb2VyY2VkXG4gKi9cbmZ1bmN0aW9uIGNvZXJjZVZlcnNpb24odmVyLCBzdHJpY3QgPSAvKiogQHR5cGUge1N0cmljdH0gKi8gKHRydWUpKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNlbXZlci52YWxpZChzZW12ZXIuY29lcmNlKGAke3Zlcn1gKSk7XG4gIGlmIChzdHJpY3QgJiYgIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7dmVyfScgY2Fubm90IGJlIGNvZXJjZWQgdG8gYSB2YWxpZCB2ZXJzaW9uIG51bWJlcmApO1xuICB9XG4gIHJldHVybiAvKiogQHR5cGUge1N0cmljdCBleHRlbmRzIHRydWUgPyBzdHJpbmcgOiBzdHJpbmc/fSAqLyAocmVzdWx0KTtcbn1cblxuY29uc3QgU1VQUE9SVEVEX09QRVJBVE9SUyA9IFsnPT0nLCAnIT0nLCAnPicsICc8JywgJz49JywgJzw9JywgJz0nXTtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gdmVyc2lvbiBzdHJpbmdzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZlcjEgLSBUaGUgZmlyc3QgdmVyc2lvbiBudW1iZXIgdG8gY29tcGFyZS4gU2hvdWxkIGJlIGEgdmFsaWRcbiAqIHZlcnNpb24gbnVtYmVyIHN1cHBvcnRlZCBieSBzZW12ZXIgcGFyc2VyLlxuICogQHBhcmFtIHtzdHJpbmd9IHZlcjIgLSBUaGUgc2Vjb25kIHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUuIFNob3VsZCBiZSBhIHZhbGlkXG4gKiB2ZXJzaW9uIG51bWJlciBzdXBwb3J0ZWQgYnkgc2VtdmVyIHBhcnNlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciAtIE9uZSBvZiBzdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgb3BlcmF0b3JzOlxuICogPT0sICE9LCA+LCA8LCA8PSwgPj0sID1cbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIG9yIGZhbHNlIGRlcGVuZGluZyBvbiB0aGUgYWN0dWFsIGNvbXBhcmlzb24gcmVzdWx0XG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gdW5zdXBwb3J0ZWQgb3BlcmF0b3IgaXMgc3VwcGxpZWQgb3IgYW55IG9mIHRoZSBzdXBwbGllZFxuICogdmVyc2lvbiBzdHJpbmdzIGNhbm5vdCBiZSBjb2VyY2VkXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyh2ZXIxLCBvcGVyYXRvciwgdmVyMikge1xuICBpZiAoIVNVUFBPUlRFRF9PUEVSQVRPUlMuaW5jbHVkZXMob3BlcmF0b3IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSAnJHtvcGVyYXRvcn0nIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZC4gYCArXG4gICAgICAgIGBPbmx5ICcke0pTT04uc3RyaW5naWZ5KFNVUFBPUlRFRF9PUEVSQVRPUlMpfScgb3BlcmF0b3JzIGFyZSBzdXBwb3J0ZWRgXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNlbXZlck9wZXJhdG9yID0gWyc9PScsICchPSddLmluY2x1ZGVzKG9wZXJhdG9yKSA/ICc9JyA6IG9wZXJhdG9yO1xuICBjb25zdCByZXN1bHQgPSBzZW12ZXIuc2F0aXNmaWVzKGNvZXJjZVZlcnNpb24odmVyMSksIGAke3NlbXZlck9wZXJhdG9yfSR7Y29lcmNlVmVyc2lvbih2ZXIyKX1gKTtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSAnIT0nID8gIXJlc3VsdCA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBZGQgYXBwcm9wcmlhdGUgcXVvdGVzIHRvIGNvbW1hbmQgYXJndW1lbnRzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL25vZGUtc2hlbGwtcXVvdGVcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gYXJncyAtIFRoZSBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhcnNlZFxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgYXJndW1lbnRzLCBxdW90ZWRcbiAqL1xuZnVuY3Rpb24gcXVvdGUoYXJncykge1xuICByZXR1cm4gc2hlbGxRdW90ZShfLmNhc3RBcnJheShhcmdzKSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBuZWNlc3NhcnkgdG8gd29ya2Fyb3VuZCB1bmV4cGVjdGVkIG1lbW9yeSBsZWFrc1xuICogY2F1c2VkIGJ5IE5vZGVKUyBzdHJpbmcgaW50ZXJuaW5nXG4gKiBiZWhhdmlvciBkZXNjcmliZWQgaW4gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2OVxuICpcbiAqIEBwYXJhbSB7Kn0gcyAtIFRoZSBzdHJpbmcgdG8gdW5sZWFrXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEVpdGhlciB0aGUgdW5sZWFrZWQgc3RyaW5nIG9yIHRoZSBvcmlnaW5hbCBvYmplY3QgY29udmVydGVkIHRvIHN0cmluZ1xuICovXG5mdW5jdGlvbiB1bmxlYWtTdHJpbmcocykge1xuICByZXR1cm4gYCAke3N9YC5zdWJzdHIoMSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUGx1cmFsaXplT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbaW5jbHVzaXZlPWZhbHNlXSAtIFdoZXRoZXIgdG8gcHJlZml4IHdpdGggdGhlIG51bWJlciAoZS5nLiwgMyBkdWNrcylcbiAqL1xuXG4vKipcbiAqIEdldCB0aGUgZm9ybSBvZiBhIHdvcmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNvdW50XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHdvcmQgLSBUaGUgd29yZCB0byBwbHVyYWxpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAtIEhvdyBtYW55IG9mIHRoZSB3b3JkIGV4aXN0XG4gKiBAcGFyYW0ge1BsdXJhbGl6ZU9wdGlvbnN8Ym9vbGVhbn0gb3B0aW9ucyAtIG9wdGlvbnMgZm9yIHdvcmQgcGx1cmFsaXphdGlvbixcbiAqICAgb3IgYSBib29sZWFuIGluZGljYXRpbmcgdGhlIG9wdGlvbnMuaW5jbHVzaXZlIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgd29yZCBwbHVyYWxpemVkIGFjY29yZGluZyB0byB0aGUgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIHBsdXJhbGl6ZSh3b3JkLCBjb3VudCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBpbmNsdXNpdmUgPSBmYWxzZTtcbiAgaWYgKF8uaXNCb29sZWFuKG9wdGlvbnMpKSB7XG4gICAgLy8gaWYgcGFzc2VkIGluIGFzIGEgYm9vbGVhblxuICAgIGluY2x1c2l2ZSA9IG9wdGlvbnM7XG4gIH0gZWxzZSBpZiAoXy5pc0Jvb2xlYW4ob3B0aW9ucz8uaW5jbHVzaXZlKSkge1xuICAgIC8vIGlmIHBhc3NlZCBpbiBhcyBhbiBvcHRpb25zIGhhc2hcbiAgICBpbmNsdXNpdmUgPSBvcHRpb25zLmluY2x1c2l2ZTtcbiAgfVxuICByZXR1cm4gcGx1cmFsaXplTGliKHdvcmQsIGNvdW50LCBpbmNsdXNpdmUpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIEVuY29kaW5nT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFttYXhTaXplPTEwNzM3NDE4MjRdIFRoZSBtYXhpbXVtIHNpemUgb2ZcbiAqIHRoZSByZXN1bHRpbmcgYnVmZmVyIGluIGJ5dGVzLiBUaGlzIGlzIHNldCB0byAxR0IgYnkgZGVmYXVsdCwgYmVjYXVzZVxuICogQXBwaXVtIGxpbWl0cyB0aGUgbWF4aW11bSBIVFRQIGJvZHkgc2l6ZSB0byAxR0IuIEFsc28sIHRoZSBOb2RlSlMgaGVhcFxuICogc2l6ZSBtdXN0IGJlIGVub3VnaCB0byBrZWVwIHRoZSByZXN1bHRpbmcgb2JqZWN0ICh1c3VhbGx5IHRoaXMgc2l6ZSBpc1xuICogbGltaXRlZCB0byAxLjQgR0IpXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBjb250ZW50cyBvZiBhIGxvY2FsIGZpbGUgdG8gYW4gaW4tbWVtb3J5IGJhc2UtNjQgZW5jb2RlZCBidWZmZXIuXG4gKiBUaGUgb3BlcmF0aW9uIGlzIG1lbW9yeS11c2FnZSBmcmllbmRseSBhbmQgc2hvdWxkIGJlIHVzZWQgd2hpbGUgZW5jb2RpbmdcbiAqIGxhcmdlIGZpbGVzIHRvIGJhc2U2NFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcmNQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgYmVpbmcgZW5jb2RlZFxuICogQHBhcmFtIHtFbmNvZGluZ09wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtQcm9taXNlPEJ1ZmZlcj59IGJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBmaWxlIGFzIG1lbW9yeSBidWZmZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgc291cmNlIGZpbGVcbiAqIG9yIHRoZSBzb3VyY2UgZmlsZSBpcyB0b29cbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9Jbk1lbW9yeUJhc2U2NChzcmNQYXRoLCBvcHRzID0ge30pIHtcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHNyY1BhdGgpKSB8fCAoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlOiAke3NyY1BhdGh9YCk7XG4gIH1cblxuICBjb25zdCB7bWF4U2l6ZSA9IDEgKiBHaUJ9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0QnVmZmVycyA9IFtdO1xuICBsZXQgcmVzdWx0QnVmZmVyc1NpemUgPSAwO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbSA9IG5ldyBzdHJlYW0uV3JpdGFibGUoe1xuICAgIHdyaXRlOiAoYnVmZmVyLCBlbmNvZGluZywgbmV4dCkgPT4ge1xuICAgICAgcmVzdWx0QnVmZmVycy5wdXNoKGJ1ZmZlcik7XG4gICAgICByZXN1bHRCdWZmZXJzU2l6ZSArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYgKG1heFNpemUgPiAwICYmIHJlc3VsdEJ1ZmZlcnNTaXplID4gbWF4U2l6ZSkge1xuICAgICAgICByZXN1bHRXcml0ZVN0cmVhbS5lbWl0KFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgYCArXG4gICAgICAgICAgICAgIGBidWZmZXIgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCByZWFkZXJTdHJlYW0gPSBmcy5jcmVhdGVSZWFkU3RyZWFtKHNyY1BhdGgpO1xuICBjb25zdCBiYXNlNjRFbmNvZGVyU3RyZWFtID0gbmV3IEJhc2U2NEVuY29kZSgpO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgcmVhZGVyU3RyZWFtLnVucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICAgIGJhc2U2NEVuY29kZXJTdHJlYW0udW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIHJlYWRlclN0cmVhbS5kZXN0cm95KCk7XG4gICAgICByZWplY3QoZSk7XG4gICAgfSk7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gIH0pO1xuICBjb25zdCByZWFkU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZWFkZXJTdHJlYW0ub25jZSgnY2xvc2UnLCByZXNvbHZlKTtcbiAgICByZWFkZXJTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT5cbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byByZWFkICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpXG4gICAgKTtcbiAgfSk7XG4gIHJlYWRlclN0cmVhbS5waXBlKGJhc2U2NEVuY29kZXJTdHJlYW0pO1xuICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuXG4gIGF3YWl0IEIuYWxsKFtyZWFkU3RyZWFtUHJvbWlzZSwgcmVzdWx0V3JpdGVTdHJlYW1Qcm9taXNlXSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJlc3VsdEJ1ZmZlcnMpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIExvY2tGaWxlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0PTEyMF0gVGhlIG1heCB0aW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIGxvY2tcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyeVJlY292ZXJ5PWZhbHNlXSBXaGV0aGVyIHRvIHRyeSBsb2NrIHJlY292ZXJ5IGlmXG4gKiB0aGUgZmlyc3QgYXR0ZW1wdCB0byBhY3F1aXJlIGl0IHRpbWVkIG91dC5cbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhbiBhc3luYyBmdW5jdGlvbiB3aGljaCwgd2hlbiBjYWxsZWQsIHdpbGwgbm90IHByb2NlZWQgdW50aWwgYSBjZXJ0YWluIGZpbGUgaXMgbm9cbiAqIGxvbmdlciBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uIFRoaXMgYWxsb3dzIGZvciBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgYmVoYXZpb3IgYWNyb3NzIHByb2Nlc3Nlc1xuICogdXNpbmcgYSBrbm93biBsb2NrZmlsZSBwYXRoLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9ja0ZpbGUgVGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSB1c2VkIGZvciB0aGUgbG9ja1xuICogQHBhcmFtIHtMb2NrRmlsZU9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIGFzeW5jIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYW5vdGhlciBhc3luYyBmdW5jdGlvbiBkZWZpbmluZyB0aGUgbG9ja2VkXG4gKiBiZWhhdmlvclxuICovXG5mdW5jdGlvbiBnZXRMb2NrRmlsZUd1YXJkKGxvY2tGaWxlLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge3RpbWVvdXQgPSAxMjAsIHRyeVJlY292ZXJ5ID0gZmFsc2V9ID0gb3B0cztcblxuICBjb25zdCBsb2NrID0gLyoqIEB0eXBlIHsobG9ja2ZpbGU6IHN0cmluZywgb3B0czogaW1wb3J0KCdsb2NrZmlsZScpLk9wdGlvbnMpPT5CPHZvaWQ+fSAqLyAoXG4gICAgQi5wcm9taXNpZnkoX2xvY2tmaWxlLmxvY2spXG4gICk7XG4gIGNvbnN0IGNoZWNrID0gQi5wcm9taXNpZnkoX2xvY2tmaWxlLmNoZWNrKTtcbiAgY29uc3QgdW5sb2NrID0gQi5wcm9taXNpZnkoX2xvY2tmaWxlLnVubG9jayk7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KC4uLmFyZ3M6IGFueVtdKSA9PiBUfSBiZWhhdmlvclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUPn1cbiAgICovXG4gIGNvbnN0IGd1YXJkID0gYXN5bmMgKGJlaGF2aW9yKSA9PiB7XG4gICAgbGV0IHRyaWVkUmVjb3ZlcnkgPSBmYWxzZTtcbiAgICBkbyB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBpZiB0aGUgbG9ja2ZpbGUgZG9lc24ndCBleGlzdCwgbG9jayBpdCBzeW5jaHJvbm91c2x5IHRvIG1ha2Ugc3VyZSBubyBvdGhlciBjYWxsXG4gICAgICAgIC8vIG9uIHRoZSBzYW1lIHNwaW4gb2YgdGhlIGV2ZW50IGxvb3AgY2FuIGFsc28gaW5pdGlhdGUgYSBsb2NrLiBJZiB0aGUgbG9ja2ZpbGUgZG9lcyBleGlzdFxuICAgICAgICAvLyB0aGVuIGp1c3QgdXNlIHRoZSByZWd1bGFyIGFzeW5jICdsb2NrJyBtZXRob2Qgd2hpY2ggd2lsbCB3YWl0IG9uIHRoZSBsb2NrLlxuICAgICAgICBpZiAoX2xvY2tmaWxlLmNoZWNrU3luYyhsb2NrRmlsZSkpIHtcbiAgICAgICAgICBhd2FpdCBsb2NrKGxvY2tGaWxlLCB7d2FpdDogdGltZW91dCAqIDEwMDB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfbG9ja2ZpbGUubG9ja1N5bmMobG9ja0ZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoXy5pbmNsdWRlcyhlLm1lc3NhZ2UsICdFRVhJU1QnKSAmJiB0cnlSZWNvdmVyeSAmJiAhdHJpZWRSZWNvdmVyeSkge1xuICAgICAgICAgIC8vIFRoZXJlIGNvdWxkIGJlIGNhc2VzIHdoZXJlIGEgcHJvY2VzcyBoYXMgYmVlbiBmb3JjZWZ1bGx5IHRlcm1pbmF0ZWRcbiAgICAgICAgICAvLyB3aXRob3V0IGEgY2hhbmNlIHRvIGNsZWFuIHVwIHBlbmRpbmcgbG9ja3M6IGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbG9ja2ZpbGUvaXNzdWVzLzI2XG4gICAgICAgICAgX2xvY2tmaWxlLnVubG9ja1N5bmMobG9ja0ZpbGUpO1xuICAgICAgICAgIHRyaWVkUmVjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ291bGQgbm90IGFjcXVpcmUgbG9jayBvbiAnJHtsb2NrRmlsZX0nIGFmdGVyICR7dGltZW91dH1zLiBgICtcbiAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0YW50LWNvbmRpdGlvblxuICAgIH0gd2hpbGUgKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgYmVoYXZpb3IoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gd2hldGhlciB0aGUgYmVoYXZpb3Igc3VjY2VlZGVkIG9yIG5vdCwgZ2V0IHJpZCBvZiB0aGUgbG9ja1xuICAgICAgYXdhaXQgdW5sb2NrKGxvY2tGaWxlKTtcbiAgICB9XG4gIH07XG5cbiAgZ3VhcmQuY2hlY2sgPSBhc3luYyAoKSA9PiBhd2FpdCBjaGVjayhsb2NrRmlsZSk7XG5cbiAgcmV0dXJuIGd1YXJkO1xufVxuXG5leHBvcnQge1xuICBoYXNWYWx1ZSxcbiAgZXNjYXBlU3BhY2UsXG4gIGVzY2FwZVNwZWNpYWxDaGFycyxcbiAgbG9jYWxJcCxcbiAgY2FuY2VsbGFibGVEZWxheSxcbiAgbXVsdGlSZXNvbHZlLFxuICBzYWZlSnNvblBhcnNlLFxuICB3cmFwRWxlbWVudCxcbiAgdW53cmFwRWxlbWVudCxcbiAgZmlsdGVyT2JqZWN0LFxuICB0b1JlYWRhYmxlU2l6ZVN0cmluZyxcbiAgaXNTdWJQYXRoLFxuICBXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUixcbiAgaXNTYW1lRGVzdGluYXRpb24sXG4gIGNvbXBhcmVWZXJzaW9ucyxcbiAgY29lcmNlVmVyc2lvbixcbiAgcXVvdGUsXG4gIHVubGVha1N0cmluZyxcbiAganNvblN0cmluZ2lmeSxcbiAgcGx1cmFsaXplLFxuICBHaUIsXG4gIE1pQixcbiAgS2lCLFxuICB0b0luTWVtb3J5QmFzZTY0LFxuICB1dWlkVjEsXG4gIHV1aWRWMyxcbiAgdXVpZFY0LFxuICB1dWlkVjUsXG4gIHNoZWxsUGFyc2UsXG4gIGdldExvY2tGaWxlR3VhcmQsXG59O1xuXG4vKipcbiAqIEEgYHN0cmluZ2Agd2hpY2ggaXMgbmV2ZXIgYCcnYC5cbiAqXG4gKiBAdGVtcGxhdGUge3N0cmluZ30gVFxuICogQHR5cGVkZWYge1QgZXh0ZW5kcyAnJyA/IG5ldmVyIDogVH0gTm9uRW1wdHlTdHJpbmdcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBT0E7Ozs7QUFFQSxNQUFNQSwwQkFBMEIsR0FBRyxxQ0FBbkM7O0FBQ0EsTUFBTUMsR0FBRyxHQUFHLElBQVo7O0FBQ0EsTUFBTUMsR0FBRyxHQUFHRCxHQUFHLEdBQUcsSUFBbEI7O0FBQ0EsTUFBTUUsR0FBRyxH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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","names":["W3C_WEB_ELEMENT_IDENTIFIER","KiB","MiB","GiB","hasContent","val","_","isString","hasValue","isNumber","isNaN","isUndefined","isNull","escapeSpace","str","split","join","escapeSpecialChars","quoteEscape","replace","re","RegExp","localIp","ip","chain","os","networkInterfaces","values","flatten","filter","family","internal","map","first","value","cancellableDelay","ms","timer","resolve","reject","delay","B","Promise","_resolve","_reject","setTimeout","cancel","clearTimeout","CancellationError","multiResolve","roots","args","root","path","safeJsonParse","obj","JSON","parse","ign","jsonStringify","replacer","space","isFunction","k","v","bufferToJSON","Buffer","prototype","toJSON","stringify","key","updatedValue","isBuffer","toString","unwrapElement","el","propName","has","wrapElement","elementId","ELEMENT","filterObject","predicate","newObj","clone","valuePredicate","Object","keys","toReadableSizeString","bytes","intBytes","parseInt","String","Error","toFixed","isSubPath","originalPath","forcePosix","pathObj","posix","p","isAbsolute","normalizedRoot","normalize","normalizedPath","startsWith","isSameDestination","path1","path2","pathN","allPaths","reduce","a","b","fs","exists","areAllItemsEqual","arr","NaN","mapCb","x","stat","bigint","ino","coerceVersion","ver","strict","result","semver","valid","coerce","SUPPORTED_OPERATORS","compareVersions","ver1","operator","ver2","includes","semverOperator","satisfies","quote","shellQuote","castArray","unleakString","s","substr","pluralize","word","count","options","inclusive","isBoolean","pluralizeLib","toInMemoryBase64","srcPath","opts","isDirectory","maxSize","resultBuffers","resultBuffersSize","resultWriteStream","stream","Writable","write","buffer","encoding","next","push","length","emit","readerStream","createReadStream","base64EncoderStream","Base64Encode","resultWriteStreamPromise","once","e","unpipe","destroy","readStreamPromise","message","pipe","all","concat","getLockFileGuard","lockFile","timeout","tryRecovery","lock","promisify","_lockfile","check","unlock","guard","behavior","triedRecovery","checkSync","wait","lockSync","unlockSync"],"sources":["../../lib/util.js"],"sourcesContent":["import B from 'bluebird';\nimport _ from 'lodash';\nimport os from 'os';\nimport path from 'path';\nimport fs from './fs';\nimport semver from 'semver';\nimport {\n // https://www.npmjs.com/package/shell-quote\n quote as shellQuote,\n parse as shellParse,\n} from 'shell-quote';\nimport pluralizeLib from 'pluralize';\nimport stream from 'stream';\nimport {Base64Encode} from 'base64-stream';\nimport {\n // https://www.npmjs.com/package/uuid\n v1 as uuidV1,\n v3 as uuidV3,\n v4 as uuidV4,\n v5 as uuidV5,\n} from 'uuid';\nimport _lockfile from 'lockfile';\n\nconst W3C_WEB_ELEMENT_IDENTIFIER = 'element-6066-11e4-a52e-4f735466cecf';\nconst KiB = 1024;\nconst MiB = KiB * 1024;\nconst GiB = MiB * 1024;\n\n/**\n * @template {string} T\n * @param {T} val\n * @returns {val is NonEmptyString<T>}\n */\nexport function hasContent(val) {\n return _.isString(val) && val !== '';\n}\n\n/**\n * return true if the the value is not `undefined`, `null`, or `NaN`.\n *\n * XXX: `NaN` is not expressible in TypeScript.\n * @template T\n * @param {T} val\n * @returns {val is NonNullable<T>}\n */\nfunction hasValue(val) {\n // avoid incorrectly evaluating `0` as false\n if (_.isNumber(val)) {\n return !_.isNaN(val);\n }\n return !_.isUndefined(val) && !_.isNull(val);\n}\n\n// escape spaces in string, for commandline calls\nfunction escapeSpace(str) {\n return str.split(/ /).join('\\\\ ');\n}\n\nfunction escapeSpecialChars(str, quoteEscape) {\n if (typeof str !== 'string') {\n return str;\n }\n if (typeof quoteEscape === 'undefined') {\n quoteEscape = false;\n }\n str = str\n .replace(/[\\\\]/g, '\\\\\\\\')\n .replace(/[\\/]/g, '\\\\/') // eslint-disable-line no-useless-escape\n .replace(/[\\b]/g, '\\\\b')\n .replace(/[\\f]/g, '\\\\f')\n .replace(/[\\n]/g, '\\\\n')\n .replace(/[\\r]/g, '\\\\r')\n .replace(/[\\t]/g, '\\\\t')\n .replace(/[\\\"]/g, '\\\\\"') // eslint-disable-line no-useless-escape\n .replace(/\\\\'/g, \"\\\\'\");\n if (quoteEscape) {\n let re = new RegExp(quoteEscape, 'g');\n str = str.replace(re, `\\\\${quoteEscape}`);\n }\n return str;\n}\n\nfunction localIp() {\n let ip = _.chain(os.networkInterfaces())\n .values()\n .flatten()\n // @ts-ignore\n .filter(function (val) {\n return val.family === 'IPv4' && val.internal === false;\n })\n .map('address')\n .first()\n .value();\n return ip;\n}\n\n/*\n * Creates a promise that is cancellable, and will timeout\n * after `ms` delay\n */\nfunction cancellableDelay(ms) {\n let timer;\n let resolve;\n let reject;\n\n const delay = new B.Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n timer = setTimeout(function () {\n resolve();\n }, ms);\n });\n\n // override Bluebird's `cancel`, which does not work when using `await` on\n // a promise, since `resolve`/`reject` are never called\n delay.cancel = function () {\n clearTimeout(timer);\n reject(new B.CancellationError());\n };\n return delay;\n}\n\nfunction multiResolve(roots, ...args) {\n return roots.map((root) => path.resolve(root, ...args));\n}\n\n/*\n * Parses an object if possible. Otherwise returns the object without parsing.\n */\nfunction safeJsonParse(obj) {\n try {\n return JSON.parse(obj);\n } catch (ign) {\n // ignore: this is not json parsable\n return obj;\n }\n}\n\n/*\n * Stringifies the object passed in, converting Buffers into Strings for better\n * display. This mimics JSON.stringify (see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * except the `replacer` argument can only be a function.\n *\n * @param {object} obj - the object to be serialized\n * @param {?function} replacer - function to transform the properties added to the\n * serialized object\n * @param {?number|string} space - used to insert white space into the output JSON\n * string for readability purposes. Defaults to 2\n * returns {string} - the JSON object serialized as a string\n */\nfunction jsonStringify(obj, replacer, space = 2) {\n // if no replacer is passed, or it is not a function, just use a pass-through\n if (!_.isFunction(replacer)) {\n replacer = (k, v) => v;\n }\n\n // Buffers cannot be serialized in a readable way\n const bufferToJSON = Buffer.prototype.toJSON;\n delete Buffer.prototype.toJSON;\n try {\n return JSON.stringify(\n obj,\n (key, value) => {\n const updatedValue = Buffer.isBuffer(value) ? value.toString('utf8') : value;\n return replacer(key, updatedValue);\n },\n space\n );\n } finally {\n // restore the function, so as to not break further serialization\n Buffer.prototype.toJSON = bufferToJSON;\n }\n}\n\n/*\n * Removes the wrapper from element, if it exists.\n * { ELEMENT: 4 } becomes 4\n * { element-6066-11e4-a52e-4f735466cecf: 5 } becomes 5\n */\nfunction unwrapElement(el) {\n for (const propName of [W3C_WEB_ELEMENT_IDENTIFIER, 'ELEMENT']) {\n if (_.has(el, propName)) {\n return el[propName];\n }\n }\n return el;\n}\n\nfunction wrapElement(elementId) {\n return {\n ELEMENT: elementId,\n [W3C_WEB_ELEMENT_IDENTIFIER]: elementId,\n };\n}\n\n/*\n * Returns object consisting of all properties in the original element\n * which were truthy given the predicate.\n * If the predicate is\n * * missing - it will remove all properties whose values are `undefined`\n * * a scalar - it will test all properties' values against that value\n * * a function - it will pass each value and the original object into the function\n */\nfunction filterObject(obj, predicate) {\n let newObj = _.clone(obj);\n if (_.isUndefined(predicate)) {\n // remove any element from the object whose value is undefined\n predicate = (v) => !_.isUndefined(v);\n } else if (!_.isFunction(predicate)) {\n // make predicate into a function\n const valuePredicate = predicate;\n predicate = (v) => v === valuePredicate;\n }\n for (const key of Object.keys(obj)) {\n if (!predicate(obj[key], obj)) {\n delete newObj[key];\n }\n }\n return newObj;\n}\n\n/**\n * Converts number of bytes to a readable size string.\n *\n * @param {number|string} bytes - The actual number of bytes.\n * @returns {string} The actual string representation, for example\n * '1.00 KB' for '1024 B'\n * @throws {Error} If bytes count cannot be converted to an integer or\n * if it is less than zero.\n */\nfunction toReadableSizeString(bytes) {\n const intBytes = parseInt(String(bytes), 10);\n if (isNaN(intBytes) || intBytes < 0) {\n throw new Error(`Cannot convert '${bytes}' to a readable size format`);\n }\n if (intBytes >= GiB) {\n return `${(intBytes / (GiB * 1.0)).toFixed(2)} GB`;\n } else if (intBytes >= MiB) {\n return `${(intBytes / (MiB * 1.0)).toFixed(2)} MB`;\n } else if (intBytes >= KiB) {\n return `${(intBytes / (KiB * 1.0)).toFixed(2)} KB`;\n }\n return `${intBytes} B`;\n}\n\n/**\n * Checks whether the given path is a subpath of the\n * particular root folder. Both paths can include .. and . specifiers\n *\n * @param {string} originalPath The absolute file/folder path\n * @param {string} root The absolute root folder path\n * @param {?boolean} forcePosix Set it to true if paths must be interpreted in POSIX format\n * @returns {boolean} true if the given original path is the subpath of the root folder\n * @throws {Error} if any of the given paths is not absolute\n */\nfunction isSubPath(originalPath, root, forcePosix = null) {\n const pathObj = forcePosix ? path.posix : path;\n for (const p of [originalPath, root]) {\n if (!pathObj.isAbsolute(p)) {\n throw new Error(`'${p}' is expected to be an absolute path`);\n }\n }\n const normalizedRoot = pathObj.normalize(root);\n const normalizedPath = pathObj.normalize(originalPath);\n return normalizedPath.startsWith(normalizedRoot);\n}\n\n/**\n * Checks whether the given paths are pointing to the same file system\n * destination.\n *\n * @param {string} path1 - Absolute or relative path to a file/folder\n * @param {string} path2 - Absolute or relative path to a file/folder\n * @param {...string} pathN - Zero or more absolute or relative paths to files/folders\n * @returns {Promise<boolean>} true if all paths are pointing to the same file system item\n */\nasync function isSameDestination(path1, path2, ...pathN) {\n const allPaths = [path1, path2, ...pathN];\n if (!(await B.reduce(allPaths, async (a, b) => a && (await fs.exists(b)), true))) {\n return false;\n }\n\n const areAllItemsEqual = (arr) => !!arr.reduce((a, b) => (a === b ? a : NaN));\n if (areAllItemsEqual(allPaths)) {\n return true;\n }\n\n let mapCb = async (x) =>\n (\n await fs.stat(x, {\n bigint: true,\n })\n ).ino;\n return areAllItemsEqual(await B.map(allPaths, mapCb));\n}\n\n/**\n * Coerces the given number/string to a valid version string\n *\n * @template {boolean} [Strict=true]\n * @param {string} ver - Version string to coerce\n * @param {Strict} [strict] - If `true` then an exception will be thrown\n * if `ver` cannot be coerced\n * @returns {Strict extends true ? string : string|null} Coerced version number or null if the string cannot be\n * coerced and strict mode is disabled\n * @throws {Error} if strict mode is enabled and `ver` cannot be coerced\n */\nfunction coerceVersion(ver, strict = /** @type {Strict} */ (true)) {\n const result = semver.valid(semver.coerce(`${ver}`));\n if (strict && !result) {\n throw new Error(`'${ver}' cannot be coerced to a valid version number`);\n }\n return /** @type {Strict extends true ? string : string?} */ (result);\n}\n\nconst SUPPORTED_OPERATORS = ['==', '!=', '>', '<', '>=', '<=', '='];\n\n/**\n * Compares two version strings\n *\n * @param {string} ver1 - The first version number to compare. Should be a valid\n * version number supported by semver parser.\n * @param {string} ver2 - The second version number to compare. Should be a valid\n * version number supported by semver parser.\n * @param {string} operator - One of supported version number operators:\n * ==, !=, >, <, <=, >=, =\n * @returns {boolean} true or false depending on the actual comparison result\n * @throws {Error} if an unsupported operator is supplied or any of the supplied\n * version strings cannot be coerced\n */\nfunction compareVersions(ver1, operator, ver2) {\n if (!SUPPORTED_OPERATORS.includes(operator)) {\n throw new Error(\n `The '${operator}' comparison operator is not supported. ` +\n `Only '${JSON.stringify(SUPPORTED_OPERATORS)}' operators are supported`\n );\n }\n\n const semverOperator = ['==', '!='].includes(operator) ? '=' : operator;\n const result = semver.satisfies(coerceVersion(ver1), `${semverOperator}${coerceVersion(ver2)}`);\n return operator === '!=' ? !result : result;\n}\n\n/**\n * Add appropriate quotes to command arguments. See https://github.com/substack/node-shell-quote\n * for more details\n *\n * @param {string|string[]} args - The arguments that will be parsed\n * @returns {string} - The arguments, quoted\n */\nfunction quote(args) {\n return shellQuote(_.castArray(args));\n}\n\n/**\n * This function is necessary to workaround unexpected memory leaks\n * caused by NodeJS string interning\n * behavior described in https://bugs.chromium.org/p/v8/issues/detail?id=2869\n *\n * @param {*} s - The string to unleak\n * @return {string} Either the unleaked string or the original object converted to string\n */\nfunction unleakString(s) {\n return ` ${s}`.substr(1);\n}\n\n/**\n * @typedef PluralizeOptions\n * @property {boolean} [inclusive=false] - Whether to prefix with the number (e.g., 3 ducks)\n */\n\n/**\n * Get the form of a word appropriate to the count\n *\n * @param {string} word - The word to pluralize\n * @param {number} count - How many of the word exist\n * @param {PluralizeOptions|boolean} options - options for word pluralization,\n * or a boolean indicating the options.inclusive property\n * @returns {string} The word pluralized according to the number\n */\nfunction pluralize(word, count, options = {}) {\n let inclusive = false;\n if (_.isBoolean(options)) {\n // if passed in as a boolean\n inclusive = options;\n } else if (_.isBoolean(options?.inclusive)) {\n // if passed in as an options hash\n inclusive = options.inclusive;\n }\n return pluralizeLib(word, count, inclusive);\n}\n\n/**\n * @typedef EncodingOptions\n * @property {number} [maxSize=1073741824] The maximum size of\n * the resulting buffer in bytes. This is set to 1GB by default, because\n * Appium limits the maximum HTTP body size to 1GB. Also, the NodeJS heap\n * size must be enough to keep the resulting object (usually this size is\n * limited to 1.4 GB)\n */\n\n/**\n * Converts contents of a local file to an in-memory base-64 encoded buffer.\n * The operation is memory-usage friendly and should be used while encoding\n * large files to base64\n *\n * @param {string} srcPath The full path to the file being encoded\n * @param {EncodingOptions} opts\n * @returns {Promise<Buffer>} base64-encoded content of the source file as memory buffer\n * @throws {Error} if there was an error while reading the source file\n * or the source file is too\n */\nasync function toInMemoryBase64(srcPath, opts = {}) {\n if (!(await fs.exists(srcPath)) || (await fs.stat(srcPath)).isDirectory()) {\n throw new Error(`No such file: ${srcPath}`);\n }\n\n const {maxSize = 1 * GiB} = opts;\n const resultBuffers = [];\n let resultBuffersSize = 0;\n const resultWriteStream = new stream.Writable({\n write: (buffer, encoding, next) => {\n resultBuffers.push(buffer);\n resultBuffersSize += buffer.length;\n if (maxSize > 0 && resultBuffersSize > maxSize) {\n resultWriteStream.emit(\n 'error',\n new Error(\n `The size of the resulting ` +\n `buffer must not be greater than ${toReadableSizeString(maxSize)}`\n )\n );\n }\n next();\n },\n });\n\n const readerStream = fs.createReadStream(srcPath);\n const base64EncoderStream = new Base64Encode();\n const resultWriteStreamPromise = new B((resolve, reject) => {\n resultWriteStream.once('error', (e) => {\n readerStream.unpipe(base64EncoderStream);\n base64EncoderStream.unpipe(resultWriteStream);\n readerStream.destroy();\n reject(e);\n });\n resultWriteStream.once('finish', resolve);\n });\n const readStreamPromise = new B((resolve, reject) => {\n readerStream.once('close', resolve);\n readerStream.once('error', (e) =>\n reject(new Error(`Failed to read '${srcPath}': ${e.message}`))\n );\n });\n readerStream.pipe(base64EncoderStream);\n base64EncoderStream.pipe(resultWriteStream);\n\n await B.all([readStreamPromise, resultWriteStreamPromise]);\n return Buffer.concat(resultBuffers);\n}\n\n/**\n * @typedef LockFileOptions\n * @property {number} [timeout=120] The max time in seconds to wait for the lock\n * @property {boolean} [tryRecovery=false] Whether to try lock recovery if\n * the first attempt to acquire it timed out.\n */\n\n/**\n * Create an async function which, when called, will not proceed until a certain file is no\n * longer present on the system. This allows for preventing concurrent behavior across processes\n * using a known lockfile path.\n *\n * @template T\n * @param {string} lockFile The full path to the file used for the lock\n * @param {LockFileOptions} opts\n * @returns async function that takes another async function defining the locked\n * behavior\n */\nfunction getLockFileGuard(lockFile, opts = {}) {\n const {timeout = 120, tryRecovery = false} = opts;\n\n const lock = /** @type {(lockfile: string, opts: import('lockfile').Options)=>B<void>} */ (\n B.promisify(_lockfile.lock)\n );\n const check = B.promisify(_lockfile.check);\n const unlock = B.promisify(_lockfile.unlock);\n\n /**\n * @param {(...args: any[]) => T} behavior\n * @returns {Promise<T>}\n */\n const guard = async (behavior) => {\n let triedRecovery = false;\n do {\n try {\n // if the lockfile doesn't exist, lock it synchronously to make sure no other call\n // on the same spin of the event loop can also initiate a lock. If the lockfile does exist\n // then just use the regular async 'lock' method which will wait on the lock.\n if (_lockfile.checkSync(lockFile)) {\n await lock(lockFile, {wait: timeout * 1000});\n } else {\n _lockfile.lockSync(lockFile);\n }\n break;\n } catch (e) {\n if (_.includes(e.message, 'EEXIST') && tryRecovery && !triedRecovery) {\n // There could be cases where a process has been forcefully terminated\n // without a chance to clean up pending locks: https://github.com/npm/lockfile/issues/26\n _lockfile.unlockSync(lockFile);\n triedRecovery = true;\n continue;\n }\n throw new Error(\n `Could not acquire lock on '${lockFile}' after ${timeout}s. ` +\n `Original error: ${e.message}`\n );\n }\n // eslint-disable-next-line no-constant-condition\n } while (true);\n try {\n return await behavior();\n } finally {\n // whether the behavior succeeded or not, get rid of the lock\n await unlock(lockFile);\n }\n };\n\n guard.check = async () => await check(lockFile);\n\n return guard;\n}\n\nexport {\n hasValue,\n escapeSpace,\n escapeSpecialChars,\n localIp,\n cancellableDelay,\n multiResolve,\n safeJsonParse,\n wrapElement,\n unwrapElement,\n filterObject,\n toReadableSizeString,\n isSubPath,\n W3C_WEB_ELEMENT_IDENTIFIER,\n isSameDestination,\n compareVersions,\n coerceVersion,\n quote,\n unleakString,\n jsonStringify,\n pluralize,\n GiB,\n MiB,\n KiB,\n toInMemoryBase64,\n uuidV1,\n uuidV3,\n uuidV4,\n uuidV5,\n shellParse,\n getLockFileGuard,\n};\n\n/**\n * A `string` which is never `''`.\n *\n * @template {string} T\n * @typedef {T extends '' ? never : T} NonEmptyString\n */\n"],"mappings":"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"}