@appium/support 2.55.2 → 2.56.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 (55) hide show
  1. package/build/lib/env.js +102 -0
  2. package/build/lib/fs.js +74 -56
  3. package/build/lib/image-util.js +4 -332
  4. package/build/lib/index.js +18 -6
  5. package/build/lib/log-internal.js +2 -4
  6. package/build/lib/logger.js +2 -4
  7. package/build/lib/logging.js +2 -4
  8. package/build/lib/mjpeg.js +2 -4
  9. package/build/lib/mkdirp.js +7 -11
  10. package/build/lib/net.js +2 -4
  11. package/build/lib/node.js +99 -2
  12. package/build/lib/npm.js +240 -0
  13. package/build/lib/plist.js +2 -4
  14. package/build/lib/process.js +2 -4
  15. package/build/lib/system.js +2 -4
  16. package/build/lib/tempdir.js +2 -4
  17. package/build/lib/timing.js +2 -4
  18. package/build/lib/util.js +6 -8
  19. package/build/lib/zip.js +4 -8
  20. package/lib/env.js +162 -0
  21. package/lib/fs.js +193 -69
  22. package/lib/image-util.js +3 -570
  23. package/lib/index.js +8 -2
  24. package/lib/log-internal.js +2 -2
  25. package/lib/logging.js +1 -1
  26. package/lib/mkdirp.js +3 -6
  27. package/lib/net.js +4 -4
  28. package/lib/node.js +104 -1
  29. package/lib/npm.js +335 -0
  30. package/lib/tempdir.js +6 -6
  31. package/lib/util.js +28 -24
  32. package/lib/zip.js +7 -8
  33. package/package.json +20 -9
  34. package/build/test/assets/sample_binary.plist +0 -0
  35. package/build/test/assets/sample_text.plist +0 -28
  36. package/build/test/fs-specs.js +0 -264
  37. package/build/test/helpers.js +0 -35
  38. package/build/test/image-util-e2e-specs.js +0 -227
  39. package/build/test/index-specs.js +0 -49
  40. package/build/test/log-internals-specs.js +0 -97
  41. package/build/test/logger/helpers.js +0 -71
  42. package/build/test/logger/logger-force-specs.js +0 -41
  43. package/build/test/logger/logger-normal-specs.js +0 -113
  44. package/build/test/logger/logger-test-specs.js +0 -40
  45. package/build/test/mjpeg-e2e-specs.js +0 -96
  46. package/build/test/net-e2e-specs.js +0 -32
  47. package/build/test/node-e2e-specs.js +0 -22
  48. package/build/test/plist-specs.js +0 -54
  49. package/build/test/process-specs.js +0 -104
  50. package/build/test/system-specs.js +0 -136
  51. package/build/test/tempdir-specs.js +0 -86
  52. package/build/test/timing-specs.js +0 -125
  53. package/build/test/util-e2e-specs.js +0 -136
  54. package/build/test/util-specs.js +0 -537
  55. package/build/test/zip-e2e-specs.js +0 -233
package/build/lib/util.js CHANGED
@@ -229,18 +229,18 @@ function filterObject(obj, predicate) {
229
229
  }
230
230
 
231
231
  function toReadableSizeString(bytes) {
232
- const intBytes = parseInt(bytes, 10);
232
+ const intBytes = parseInt(String(bytes), 10);
233
233
 
234
234
  if (isNaN(intBytes) || intBytes < 0) {
235
235
  throw new Error(`Cannot convert '${bytes}' to a readable size format`);
236
236
  }
237
237
 
238
238
  if (intBytes >= GiB) {
239
- return `${parseFloat(intBytes / (GiB * 1.0)).toFixed(2)} GB`;
239
+ return `${(intBytes / (GiB * 1.0)).toFixed(2)} GB`;
240
240
  } else if (intBytes >= MiB) {
241
- return `${parseFloat(intBytes / (MiB * 1.0)).toFixed(2)} MB`;
241
+ return `${(intBytes / (MiB * 1.0)).toFixed(2)} MB`;
242
242
  } else if (intBytes >= KiB) {
243
- return `${parseFloat(intBytes / (KiB * 1.0)).toFixed(2)} KB`;
243
+ return `${(intBytes / (KiB * 1.0)).toFixed(2)} KB`;
244
244
  }
245
245
 
246
246
  return `${intBytes} B`;
@@ -421,7 +421,5 @@ function getLockFileGuard(lockFile, opts = {}) {
421
421
  guard.check = async () => await check(lockFile);
422
422
 
423
423
  return guard;
424
- }require('source-map-support').install();
425
-
426
-
427
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi91dGlsLmpzIl0sIm5hbWVzIjpbIlczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSIiwiS2lCIiwiTWlCIiwiR2lCIiwiaGFzQ29udGVudCIsInZhbCIsIl8iLCJpc1N0cmluZyIsImhhc1ZhbHVlIiwiaGFzVmFsIiwiaXNOdW1iZXIiLCJpc05hTiIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiZXNjYXBlU3BhY2UiLCJzdHIiLCJzcGxpdCIsImpvaW4iLCJlc2NhcGVTcGVjaWFsQ2hhcnMiLCJxdW90ZUVzY2FwZSIsInJlcGxhY2UiLCJyZSIsIlJlZ0V4cCIsImxvY2FsSXAiLCJpcCIsImNoYWluIiwib3MiLCJuZXR3b3JrSW50ZXJmYWNlcyIsInZhbHVlcyIsImZsYXR0ZW4iLCJmaWx0ZXIiLCJmYW1pbHkiLCJpbnRlcm5hbCIsIm1hcCIsImZpcnN0IiwidmFsdWUiLCJjYW5jZWxsYWJsZURlbGF5IiwibXMiLCJ0aW1lciIsInJlc29sdmUiLCJyZWplY3QiLCJkZWxheSIsIkIiLCJQcm9taXNlIiwiX3Jlc29sdmUiLCJfcmVqZWN0Iiwic2V0VGltZW91dCIsImNhbmNlbCIsImNsZWFyVGltZW91dCIsIkNhbmNlbGxhdGlvbkVycm9yIiwibXVsdGlSZXNvbHZlIiwicm9vdHMiLCJhcmdzIiwicm9vdCIsInBhdGgiLCJzYWZlSnNvblBhcnNlIiwib2JqIiwiSlNPTiIsInBhcnNlIiwiaWduIiwianNvblN0cmluZ2lmeSIsInJlcGxhY2VyIiwic3BhY2UiLCJpc0Z1bmN0aW9uIiwiayIsInYiLCJidWZmZXJUb0pTT04iLCJCdWZmZXIiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJzdHJpbmdpZnkiLCJrZXkiLCJ1cGRhdGVkVmFsdWUiLCJpc0J1ZmZlciIsInRvU3RyaW5nIiwidW53cmFwRWxlbWVudCIsImVsIiwicHJvcE5hbWUiLCJoYXMiLCJ3cmFwRWxlbWVudCIsImVsZW1lbnRJZCIsIkVMRU1FTlQiLCJmaWx0ZXJPYmplY3QiLCJwcmVkaWNhdGUiLCJuZXdPYmoiLCJjbG9uZSIsInZhbHVlUHJlZGljYXRlIiwiT2JqZWN0Iiwia2V5cyIsInRvUmVhZGFibGVTaXplU3RyaW5nIiwiYnl0ZXMiLCJpbnRCeXRlcyIsInBhcnNlSW50IiwiRXJyb3IiLCJwYXJzZUZsb2F0IiwidG9GaXhlZCIsImlzU3ViUGF0aCIsIm9yaWdpbmFsUGF0aCIsImZvcmNlUG9zaXgiLCJwYXRoT2JqIiwicG9zaXgiLCJwIiwiaXNBYnNvbHV0ZSIsIm5vcm1hbGl6ZWRSb290Iiwibm9ybWFsaXplIiwibm9ybWFsaXplZFBhdGgiLCJzdGFydHNXaXRoIiwiaXNTYW1lRGVzdGluYXRpb24iLCJwYXRoMSIsInBhdGgyIiwicGF0aE4iLCJhbGxQYXRocyIsInJlZHVjZSIsImEiLCJiIiwiZnMiLCJleGlzdHMiLCJhcmVBbGxJdGVtc0VxdWFsIiwiYXJyIiwiTmFOIiwibWFwQ2IiLCJ4Iiwic3RhdCIsImJpZ2ludCIsImlubyIsInNlbXZlciIsImx0IiwicHJvY2VzcyIsInZlcnNpb24iLCJjb2VyY2VWZXJzaW9uIiwidmVyIiwic3RyaWN0IiwicmVzdWx0IiwidmFsaWQiLCJjb2VyY2UiLCJTVVBQT1JURURfT1BFUkFUT1JTIiwiY29tcGFyZVZlcnNpb25zIiwidmVyMSIsIm9wZXJhdG9yIiwidmVyMiIsImluY2x1ZGVzIiwic2VtdmVyT3BlcmF0b3IiLCJzYXRpc2ZpZXMiLCJxdW90ZSIsInVubGVha1N0cmluZyIsInMiLCJzdWJzdHIiLCJwbHVyYWxpemUiLCJ3b3JkIiwiY291bnQiLCJvcHRpb25zIiwiaW5jbHVzaXZlIiwiaXNCb29sZWFuIiwidG9Jbk1lbW9yeUJhc2U2NCIsInNyY1BhdGgiLCJvcHRzIiwiaXNEaXJlY3RvcnkiLCJtYXhTaXplIiwicmVzdWx0QnVmZmVycyIsInJlc3VsdEJ1ZmZlcnNTaXplIiwicmVzdWx0V3JpdGVTdHJlYW0iLCJzdHJlYW0iLCJXcml0YWJsZSIsIndyaXRlIiwiYnVmZmVyIiwiZW5jb2RpbmciLCJuZXh0IiwicHVzaCIsImxlbmd0aCIsImVtaXQiLCJyZWFkZXJTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwiYmFzZTY0RW5jb2RlclN0cmVhbSIsIkJhc2U2NEVuY29kZSIsInJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSIsIm9uY2UiLCJlIiwidW5waXBlIiwiZGVzdHJveSIsInJlYWRTdHJlYW1Qcm9taXNlIiwibWVzc2FnZSIsInBpcGUiLCJhbGwiLCJjb25jYXQiLCJnZXRMb2NrRmlsZUd1YXJkIiwibG9ja0ZpbGUiLCJ0aW1lb3V0IiwidHJ5UmVjb3ZlcnkiLCJsb2NrIiwicHJvbWlzaWZ5IiwiX2xvY2tmaWxlIiwiY2hlY2siLCJ1bmxvY2siLCJndWFyZCIsImJlaGF2aW9yIiwidHJpZWRSZWNvdmVyeSIsImNoZWNrU3luYyIsIndhaXQiLCJsb2NrU3luYyIsInVubG9ja1N5bmMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtBOztBQUNBOztBQUNBOztBQUNBOztBQUtBOztBQUdBLE1BQU1BLDBCQUEwQixHQUFHLHFDQUFuQzs7QUFDQSxNQUFNQyxHQUFHLEdBQUcsSUFBWjs7QUFDQSxNQUFNQyxHQUFHLEdBQUdELEdBQUcsR0FBRyxJQUFsQjs7QUFDQSxNQUFNRSxHQUFHLEdBQUdELEdBQUcsR0FBRyxJQUFsQjs7O0FBRU8sU0FBU0UsVUFBVCxDQUFxQkMsR0FBckIsRUFBMEI7QUFDL0IsU0FBT0MsZ0JBQUVDLFFBQUYsQ0FBV0YsR0FBWCxLQUFtQkEsR0FBRyxLQUFLLEVBQWxDO0FBQ0Q7O0FBR0QsU0FBU0csUUFBVCxDQUFtQkgsR0FBbkIsRUFBd0I7QUFDdEIsTUFBSUksTUFBTSxHQUFHLEtBQWI7O0FBRUEsTUFBSUgsZ0JBQUVJLFFBQUYsQ0FBV0wsR0FBWCxDQUFKLEVBQXFCO0FBQ25CSSxJQUFBQSxNQUFNLEdBQUcsQ0FBQ0gsZ0JBQUVLLEtBQUYsQ0FBUU4sR0FBUixDQUFWO0FBQ0QsR0FGRCxNQUVPO0FBQ0xJLElBQUFBLE1BQU0sR0FBRyxDQUFDSCxnQkFBRU0sV0FBRixDQUFjUCxHQUFkLENBQUQsSUFBdUIsQ0FBQ0MsZ0JBQUVPLE1BQUYsQ0FBU1IsR0FBVCxDQUFqQztBQUNEOztBQUVELFNBQU9JLE1BQVA7QUFDRDs7QUFHRCxTQUFTSyxXQUFULENBQXNCQyxHQUF0QixFQUEyQjtBQUN6QixTQUFPQSxHQUFHLENBQUNDLEtBQUosQ0FBVSxHQUFWLEVBQWVDLElBQWYsQ0FBb0IsS0FBcEIsQ0FBUDtBQUNEOztBQUVELFNBQVNDLGtCQUFULENBQTZCSCxHQUE3QixFQUFrQ0ksV0FBbEMsRUFBK0M7QUFDN0MsTUFBSSxPQUFPSixHQUFQLEtBQWUsUUFBbkIsRUFBNkI7QUFDM0IsV0FBT0EsR0FBUDtBQUNEOztBQUNELE1BQUksT0FBT0ksV0FBUCxLQUF1QixXQUEzQixFQUF3QztBQUN0Q0EsSUFBQUEsV0FBVyxHQUFHLEtBQWQ7QUFDRDs7QUFDREosRUFBQUEsR0FBRyxHQUFHQSxHQUFHLENBQ05LLE9BREcsQ0FDSyxPQURMLEVBQ2MsTUFEZCxFQUVIQSxPQUZHLENBRUssT0FGTCxFQUVjLEtBRmQsRUFHSEEsT0FIRyxDQUdLLE9BSEwsRUFHYyxLQUhkLEVBSUhBLE9BSkcsQ0FJSyxPQUpMLEVBSWMsS0FKZCxFQUtIQSxPQUxHLENBS0ssT0FMTCxFQUtjLEtBTGQsRUFNSEEsT0FORyxDQU1LLE9BTkwsRUFNYyxLQU5kLEVBT0hBLE9BUEcsQ0FPSyxPQVBMLEVBT2MsS0FQZCxFQVFIQSxPQVJHLENBUUssT0FSTCxFQVFjLEtBUmQsRUFTSEEsT0FURyxDQVNLLE1BVEwsRUFTYSxLQVRiLENBQU47O0FBVUEsTUFBSUQsV0FBSixFQUFpQjtBQUNmLFFBQUlFLEVBQUUsR0FBRyxJQUFJQyxNQUFKLENBQVdILFdBQVgsRUFBd0IsR0FBeEIsQ0FBVDtBQUNBSixJQUFBQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ0ssT0FBSixDQUFZQyxFQUFaLEVBQWlCLEtBQUlGLFdBQVksRUFBakMsQ0FBTjtBQUNEOztBQUNELFNBQU9KLEdBQVA7QUFDRDs7QUFFRCxTQUFTUSxPQUFULEdBQW9CO0FBQ2xCLE1BQUlDLEVBQUUsR0FBR2xCLGdCQUFFbUIsS0FBRixDQUFRQyxZQUFHQyxpQkFBSCxFQUFSLEVBQ05DLE1BRE0sR0FFTkMsT0FGTSxHQUdOQyxNQUhNLENBR0MsVUFBVXpCLEdBQVYsRUFBZTtBQUNyQixXQUFRQSxHQUFHLENBQUMwQixNQUFKLEtBQWUsTUFBZixJQUF5QjFCLEdBQUcsQ0FBQzJCLFFBQUosS0FBaUIsS0FBbEQ7QUFDRCxHQUxNLEVBTU5DLEdBTk0sQ0FNRixTQU5FLEVBT05DLEtBUE0sR0FRTkMsS0FSTSxFQUFUOztBQVNBLFNBQU9YLEVBQVA7QUFDRDs7QUFNRCxTQUFTWSxnQkFBVCxDQUEyQkMsRUFBM0IsRUFBK0I7QUFDN0IsTUFBSUMsS0FBSjtBQUNBLE1BQUlDLE9BQUo7QUFDQSxNQUFJQyxNQUFKO0FBRUEsUUFBTUMsS0FBSyxHQUFHLElBQUlDLGtCQUFFQyxPQUFOLENBQWMsQ0FBQ0MsUUFBRCxFQUFXQyxPQUFYLEtBQXVCO0FBQ2pETixJQUFBQSxPQUFPLEdBQUdLLFFBQVY7QUFDQUosSUFBQUEsTUFBTSxHQUFHSyxPQUFUO0FBQ0FQLElBQUFBLEtBQUssR0FBR1EsVUFBVSxDQUFDLFlBQVk7QUFDN0JQLE1BQUFBLE9BQU87QUFDUixLQUZpQixFQUVmRixFQUZlLENBQWxCO0FBR0QsR0FOYSxDQUFkOztBQVVBSSxFQUFBQSxLQUFLLENBQUNNLE1BQU4sR0FBZSxZQUFZO0FBQ3pCQyxJQUFBQSxZQUFZLENBQUNWLEtBQUQsQ0FBWjtBQUNBRSxJQUFBQSxNQUFNLENBQUMsSUFBSUUsa0JBQUVPLGlCQUFOLEVBQUQsQ0FBTjtBQUNELEdBSEQ7O0FBSUEsU0FBT1IsS0FBUDtBQUNEOztBQUVELFNBQVNTLFlBQVQsQ0FBdUJDLEtBQXZCLEVBQThCLEdBQUdDLElBQWpDLEVBQXVDO0FBQ3JDLFNBQU9ELEtBQUssQ0FBQ2xCLEdBQU4sQ0FBV29CLElBQUQsSUFBVUMsY0FBS2YsT0FBTCxDQUFhYyxJQUFiLEVBQW1CLEdBQUdELElBQXRCLENBQXBCLENBQVA7QUFDRDs7QUFLRCxTQUFTRyxhQUFULENBQXdCQyxHQUF4QixFQUE2QjtBQUMzQixNQUFJO0FBQ0YsV0FBT0MsSUFBSSxDQUFDQyxLQUFMLENBQVdGLEdBQVgsQ0FBUDtBQUNELEdBRkQsQ0FFRSxPQUFPRyxHQUFQLEVBQVk7QUFFWixXQUFPSCxHQUFQO0FBQ0Q7QUFDRjs7QUFjRCxTQUFTSSxhQUFULENBQXdCSixHQUF4QixFQUE2QkssUUFBN0IsRUFBdUNDLEtBQUssR0FBRyxDQUEvQyxFQUFrRDtBQUVoRCxNQUFJLENBQUN4RCxnQkFBRXlELFVBQUYsQ0FBYUYsUUFBYixDQUFMLEVBQTZCO0FBQzNCQSxJQUFBQSxRQUFRLEdBQUcsQ0FBQ0csQ0FBRCxFQUFJQyxDQUFKLEtBQVVBLENBQXJCO0FBQ0Q7O0FBR0QsUUFBTUMsWUFBWSxHQUFHQyxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLE1BQXRDO0FBQ0EsU0FBT0YsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxNQUF4Qjs7QUFDQSxNQUFJO0FBQ0YsV0FBT1osSUFBSSxDQUFDYSxTQUFMLENBQWVkLEdBQWYsRUFBb0IsQ0FBQ2UsR0FBRCxFQUFNcEMsS0FBTixLQUFnQjtBQUN6QyxZQUFNcUMsWUFBWSxHQUFHTCxNQUFNLENBQUNNLFFBQVAsQ0FBZ0J0QyxLQUFoQixJQUNqQkEsS0FBSyxDQUFDdUMsUUFBTixDQUFlLE1BQWYsQ0FEaUIsR0FFakJ2QyxLQUZKO0FBR0EsYUFBTzBCLFFBQVEsQ0FBQ1UsR0FBRCxFQUFNQyxZQUFOLENBQWY7QUFDRCxLQUxNLEVBS0pWLEtBTEksQ0FBUDtBQU1ELEdBUEQsU0FPVTtBQUVSSyxJQUFBQSxNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLE1BQWpCLEdBQTBCSCxZQUExQjtBQUNEO0FBQ0Y7O0FBT0QsU0FBU1MsYUFBVCxDQUF3QkMsRUFBeEIsRUFBNEI7QUFDMUIsT0FBSyxNQUFNQyxRQUFYLElBQXVCLENBQUM3RSwwQkFBRCxFQUE2QixTQUE3QixDQUF2QixFQUFnRTtBQUM5RCxRQUFJTSxnQkFBRXdFLEdBQUYsQ0FBTUYsRUFBTixFQUFVQyxRQUFWLENBQUosRUFBeUI7QUFDdkIsYUFBT0QsRUFBRSxDQUFDQyxRQUFELENBQVQ7QUFDRDtBQUNGOztBQUNELFNBQU9ELEVBQVA7QUFDRDs7QUFFRCxTQUFTRyxXQUFULENBQXNCQyxTQUF0QixFQUFpQztBQUMvQixTQUFPO0FBQ0xDLElBQUFBLE9BQU8sRUFBRUQsU0FESjtBQUVMLEtBQUNoRiwwQkFBRCxHQUE4QmdGO0FBRnpCLEdBQVA7QUFJRDs7QUFVRCxTQUFTRSxZQUFULENBQXVCMUIsR0FBdkIsRUFBNEIyQixTQUE1QixFQUF1QztBQUNyQyxNQUFJQyxNQUFNLEdBQUc5RSxnQkFBRStFLEtBQUYsQ0FBUTdCLEdBQVIsQ0FBYjs7QUFDQSxNQUFJbEQsZ0JBQUVNLFdBQUYsQ0FBY3VFLFNBQWQsQ0FBSixFQUE4QjtBQUU1QkEsSUFBQUEsU0FBUyxHQUFJbEIsQ0FBRCxJQUFPLENBQUMzRCxnQkFBRU0sV0FBRixDQUFjcUQsQ0FBZCxDQUFwQjtBQUNELEdBSEQsTUFHTyxJQUFJLENBQUMzRCxnQkFBRXlELFVBQUYsQ0FBYW9CLFNBQWIsQ0FBTCxFQUE4QjtBQUVuQyxVQUFNRyxjQUFjLEdBQUdILFNBQXZCOztBQUNBQSxJQUFBQSxTQUFTLEdBQUlsQixDQUFELElBQU9BLENBQUMsS0FBS3FCLGNBQXpCO0FBQ0Q7O0FBQ0QsT0FBSyxNQUFNZixHQUFYLElBQWtCZ0IsTUFBTSxDQUFDQyxJQUFQLENBQVloQyxHQUFaLENBQWxCLEVBQW9DO0FBQ2xDLFFBQUksQ0FBQzJCLFNBQVMsQ0FBQzNCLEdBQUcsQ0FBQ2UsR0FBRCxDQUFKLEVBQVdmLEdBQVgsQ0FBZCxFQUErQjtBQUM3QixhQUFPNEIsTUFBTSxDQUFDYixHQUFELENBQWI7QUFDRDtBQUNGOztBQUNELFNBQU9hLE1BQVA7QUFDRDs7QUFXRCxTQUFTSyxvQkFBVCxDQUErQkMsS0FBL0IsRUFBc0M7QUFDcEMsUUFBTUMsUUFBUSxHQUFHQyxRQUFRLENBQUNGLEtBQUQsRUFBUSxFQUFSLENBQXpCOztBQUNBLE1BQUkvRSxLQUFLLENBQUNnRixRQUFELENBQUwsSUFBbUJBLFFBQVEsR0FBRyxDQUFsQyxFQUFxQztBQUNuQyxVQUFNLElBQUlFLEtBQUosQ0FBVyxtQkFBa0JILEtBQU0sNkJBQW5DLENBQU47QUFDRDs7QUFDRCxNQUFJQyxRQUFRLElBQUl4RixHQUFoQixFQUFxQjtBQUNuQixXQUFRLEdBQUUyRixVQUFVLENBQUNILFFBQVEsSUFBSXhGLEdBQUcsR0FBRyxHQUFWLENBQVQsQ0FBVixDQUFtQzRGLE9BQW5DLENBQTJDLENBQTNDLENBQThDLEtBQXhEO0FBQ0QsR0FGRCxNQUVPLElBQUlKLFFBQVEsSUFBSXpGLEdBQWhCLEVBQXFCO0FBQzFCLFdBQVEsR0FBRTRGLFVBQVUsQ0FBQ0gsUUFBUSxJQUFJekYsR0FBRyxHQUFHLEdBQVYsQ0FBVCxDQUFWLENBQW1DNkYsT0FBbkMsQ0FBMkMsQ0FBM0MsQ0FBOEMsS0FBeEQ7QUFDRCxHQUZNLE1BRUEsSUFBSUosUUFBUSxJQUFJMUYsR0FBaEIsRUFBcUI7QUFDMUIsV0FBUSxHQUFFNkYsVUFBVSxDQUFDSCxRQUFRLElBQUkxRixHQUFHLEdBQUcsR0FBVixDQUFULENBQVYsQ0FBbUM4RixPQUFuQyxDQUEyQyxDQUEzQyxDQUE4QyxLQUF4RDtBQUNEOztBQUNELFNBQVEsR0FBRUosUUFBUyxJQUFuQjtBQUNEOztBQVlELFNBQVNLLFNBQVQsQ0FBb0JDLFlBQXBCLEVBQWtDNUMsSUFBbEMsRUFBd0M2QyxVQUFVLEdBQUcsSUFBckQsRUFBMkQ7QUFDekQsUUFBTUMsT0FBTyxHQUFHRCxVQUFVLEdBQUc1QyxjQUFLOEMsS0FBUixHQUFnQjlDLGFBQTFDOztBQUNBLE9BQUssTUFBTStDLENBQVgsSUFBZ0IsQ0FBQ0osWUFBRCxFQUFlNUMsSUFBZixDQUFoQixFQUFzQztBQUNwQyxRQUFJLENBQUM4QyxPQUFPLENBQUNHLFVBQVIsQ0FBbUJELENBQW5CLENBQUwsRUFBNEI7QUFDMUIsWUFBTSxJQUFJUixLQUFKLENBQVcsSUFBR1EsQ0FBRSxzQ0FBaEIsQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0QsUUFBTUUsY0FBYyxHQUFHSixPQUFPLENBQUNLLFNBQVIsQ0FBa0JuRCxJQUFsQixDQUF2QjtBQUNBLFFBQU1vRCxjQUFjLEdBQUdOLE9BQU8sQ0FBQ0ssU0FBUixDQUFrQlAsWUFBbEIsQ0FBdkI7QUFDQSxTQUFPUSxjQUFjLENBQUNDLFVBQWYsQ0FBMEJILGNBQTFCLENBQVA7QUFDRDs7QUFXRCxlQUFlSSxpQkFBZixDQUFrQ0MsS0FBbEMsRUFBeUNDLEtBQXpDLEVBQWdELEdBQUdDLEtBQW5ELEVBQTBEO0FBQ3hELFFBQU1DLFFBQVEsR0FBRyxDQUFDSCxLQUFELEVBQVFDLEtBQVIsRUFBZSxHQUFHQyxLQUFsQixDQUFqQjs7QUFDQSxNQUFJLEVBQUMsTUFBTXBFLGtCQUFFc0UsTUFBRixDQUFTRCxRQUFULEVBQW1CLE9BQU9FLENBQVAsRUFBVUMsQ0FBVixLQUFnQkQsQ0FBQyxLQUFJLE1BQU1FLFlBQUdDLE1BQUgsQ0FBVUYsQ0FBVixDQUFWLENBQXBDLEVBQTRELElBQTVELENBQVAsQ0FBSixFQUE4RTtBQUM1RSxXQUFPLEtBQVA7QUFDRDs7QUFFRCxRQUFNRyxnQkFBZ0IsR0FBSUMsR0FBRCxJQUFTLENBQUMsQ0FBQ0EsR0FBRyxDQUFDTixNQUFKLENBQVcsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEtBQVVELENBQUMsS0FBS0MsQ0FBTixHQUFVRCxDQUFWLEdBQWNNLEdBQW5DLENBQXBDOztBQUNBLE1BQUlGLGdCQUFnQixDQUFDTixRQUFELENBQXBCLEVBQWdDO0FBQzlCLFdBQU8sSUFBUDtBQUNEOztBQUtELE1BQUlTLEtBQUssR0FBRyxNQUFPQyxDQUFQLElBQWEsTUFBTU4sWUFBR08sSUFBSCxDQUFRRCxDQUFSLEVBQVc7QUFDeENFLElBQUFBLE1BQU0sRUFBRTtBQURnQyxHQUFYLEVBRTVCQyxHQUZIOztBQUdBLE1BQUlDLGdCQUFPQyxFQUFQLENBQVVDLE9BQU8sQ0FBQ0MsT0FBbEIsRUFBMkIsUUFBM0IsQ0FBSixFQUEwQztBQUN4Q1IsSUFBQUEsS0FBSyxHQUFHLE1BQU9DLENBQVAsSUFBYSxNQUFNTixZQUFHTyxJQUFILENBQVFELENBQVIsRUFBV0csR0FBdEM7QUFDRDs7QUFDRCxTQUFPUCxnQkFBZ0IsQ0FBQyxNQUFNM0Usa0JBQUVULEdBQUYsQ0FBTThFLFFBQU4sRUFBZ0JTLEtBQWhCLENBQVAsQ0FBdkI7QUFDRDs7QUFZRCxTQUFTUyxhQUFULENBQXdCQyxHQUF4QixFQUE2QkMsTUFBTSxHQUFHLElBQXRDLEVBQTRDO0FBQzFDLFFBQU1DLE1BQU0sR0FBR1AsZ0JBQU9RLEtBQVAsQ0FBYVIsZ0JBQU9TLE1BQVAsQ0FBZSxHQUFFSixHQUFJLEVBQXJCLENBQWIsQ0FBZjs7QUFDQSxNQUFJQyxNQUFNLElBQUksQ0FBQ0MsTUFBZixFQUF1QjtBQUNyQixVQUFNLElBQUl2QyxLQUFKLENBQVcsSUFBR3FDLEdBQUksK0NBQWxCLENBQU47QUFDRDs7QUFDRCxTQUFPRSxNQUFQO0FBQ0Q7O0FBRUQsTUFBTUcsbUJBQW1CLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhLEdBQWIsRUFBa0IsR0FBbEIsRUFBdUIsSUFBdkIsRUFBNkIsSUFBN0IsRUFBbUMsR0FBbkMsQ0FBNUI7O0FBZUEsU0FBU0MsZUFBVCxDQUEwQkMsSUFBMUIsRUFBZ0NDLFFBQWhDLEVBQTBDQyxJQUExQyxFQUFnRDtBQUM5QyxNQUFJLENBQUNKLG1CQUFtQixDQUFDSyxRQUFwQixDQUE2QkYsUUFBN0IsQ0FBTCxFQUE2QztBQUMzQyxVQUFNLElBQUk3QyxLQUFKLENBQVcsUUFBTzZDLFFBQVMsMENBQWpCLEdBQ2IsU0FBUWpGLElBQUksQ0FBQ2EsU0FBTCxDQUFlaUUsbUJBQWYsQ0FBb0MsMkJBRHpDLENBQU47QUFFRDs7QUFFRCxRQUFNTSxjQUFjLEdBQUcsQ0FBQyxJQUFELEVBQU8sSUFBUCxFQUFhRCxRQUFiLENBQXNCRixRQUF0QixJQUFrQyxHQUFsQyxHQUF3Q0EsUUFBL0Q7O0FBQ0EsUUFBTU4sTUFBTSxHQUFHUCxnQkFBT2lCLFNBQVAsQ0FBaUJiLGFBQWEsQ0FBQ1EsSUFBRCxDQUE5QixFQUF1QyxHQUFFSSxjQUFlLEdBQUVaLGFBQWEsQ0FBQ1UsSUFBRCxDQUFPLEVBQTlFLENBQWY7O0FBQ0EsU0FBT0QsUUFBUSxLQUFLLElBQWIsR0FBb0IsQ0FBQ04sTUFBckIsR0FBOEJBLE1BQXJDO0FBQ0Q7O0FBU0QsU0FBU1csS0FBVCxDQUFnQjNGLElBQWhCLEVBQXNCO0FBQ3BCLFNBQU8sdUJBQVdBLElBQVgsQ0FBUDtBQUNEOztBQVVELFNBQVM0RixZQUFULENBQXVCQyxDQUF2QixFQUEwQjtBQUN4QixTQUFRLElBQUdBLENBQUUsRUFBTixDQUFRQyxNQUFSLENBQWUsQ0FBZixDQUFQO0FBQ0Q7O0FBaUJELFNBQVNDLFNBQVQsQ0FBb0JDLElBQXBCLEVBQTBCQyxLQUExQixFQUFpQ0MsT0FBTyxHQUFHLEVBQTNDLEVBQStDO0FBQzdDLE1BQUlDLFNBQVMsR0FBRyxLQUFoQjs7QUFDQSxNQUFJakosZ0JBQUVrSixTQUFGLENBQVlGLE9BQVosQ0FBSixFQUEwQjtBQUV4QkMsSUFBQUEsU0FBUyxHQUFHRCxPQUFaO0FBQ0QsR0FIRCxNQUdPLElBQUloSixnQkFBRWtKLFNBQUYsQ0FBWUYsT0FBWixhQUFZQSxPQUFaLHVCQUFZQSxPQUFPLENBQUVDLFNBQXJCLENBQUosRUFBcUM7QUFFMUNBLElBQUFBLFNBQVMsR0FBR0QsT0FBTyxDQUFDQyxTQUFwQjtBQUNEOztBQUNELFNBQU8sd0JBQWFILElBQWIsRUFBbUJDLEtBQW5CLEVBQTBCRSxTQUExQixDQUFQO0FBQ0Q7O0FBc0JELGVBQWVFLGdCQUFmLENBQWlDQyxPQUFqQyxFQUEwQ0MsSUFBSSxHQUFHLEVBQWpELEVBQXFEO0FBQ25ELE1BQUksRUFBRSxNQUFNeEMsWUFBR0MsTUFBSCxDQUFVc0MsT0FBVixDQUFSLEtBQStCLENBQUMsTUFBTXZDLFlBQUdPLElBQUgsQ0FBUWdDLE9BQVIsQ0FBUCxFQUF5QkUsV0FBekIsRUFBbkMsRUFBMkU7QUFDekUsVUFBTSxJQUFJL0QsS0FBSixDQUFXLGlCQUFnQjZELE9BQVEsRUFBbkMsQ0FBTjtBQUNEOztBQUVELFFBQU07QUFDSkcsSUFBQUEsT0FBTyxHQUFHLElBQUkxSjtBQURWLE1BRUZ3SixJQUZKO0FBR0EsUUFBTUcsYUFBYSxHQUFHLEVBQXRCO0FBQ0EsTUFBSUMsaUJBQWlCLEdBQUcsQ0FBeEI7QUFDQSxRQUFNQyxpQkFBaUIsR0FBRyxJQUFJQyxnQkFBT0MsUUFBWCxDQUFvQjtBQUM1Q0MsSUFBQUEsS0FBSyxFQUFFLENBQUNDLE1BQUQsRUFBU0MsUUFBVCxFQUFtQkMsSUFBbkIsS0FBNEI7QUFDakNSLE1BQUFBLGFBQWEsQ0FBQ1MsSUFBZCxDQUFtQkgsTUFBbkI7QUFDQUwsTUFBQUEsaUJBQWlCLElBQUlLLE1BQU0sQ0FBQ0ksTUFBNUI7O0FBQ0EsVUFBSVgsT0FBTyxHQUFHLENBQVYsSUFBZUUsaUJBQWlCLEdBQUdGLE9BQXZDLEVBQWdEO0FBQzlDRyxRQUFBQSxpQkFBaUIsQ0FBQ1MsSUFBbEIsQ0FBdUIsT0FBdkIsRUFBZ0MsSUFBSTVFLEtBQUosQ0FBVyw0QkFBRCxHQUN2QyxtQ0FBa0NKLG9CQUFvQixDQUFDb0UsT0FBRCxDQUFVLEVBRG5DLENBQWhDO0FBRUQ7O0FBQ0RTLE1BQUFBLElBQUk7QUFDTDtBQVQyQyxHQUFwQixDQUExQjs7QUFZQSxRQUFNSSxZQUFZLEdBQUd2RCxZQUFHd0QsZ0JBQUgsQ0FBb0JqQixPQUFwQixDQUFyQjs7QUFDQSxRQUFNa0IsbUJBQW1CLEdBQUcsSUFBSUMsMEJBQUosRUFBNUI7QUFDQSxRQUFNQyx3QkFBd0IsR0FBRyxJQUFJcEksaUJBQUosQ0FBTSxDQUFDSCxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDMUR3SCxJQUFBQSxpQkFBaUIsQ0FBQ2UsSUFBbEIsQ0FBdUIsT0FBdkIsRUFBaUNDLENBQUQsSUFBTztBQUNyQ04sTUFBQUEsWUFBWSxDQUFDTyxNQUFiLENBQW9CTCxtQkFBcEI7QUFDQUEsTUFBQUEsbUJBQW1CLENBQUNLLE1BQXBCLENBQTJCakIsaUJBQTNCO0FBQ0FVLE1BQUFBLFlBQVksQ0FBQ1EsT0FBYjtBQUNBMUksTUFBQUEsTUFBTSxDQUFDd0ksQ0FBRCxDQUFOO0FBQ0QsS0FMRDtBQU1BaEIsSUFBQUEsaUJBQWlCLENBQUNlLElBQWxCLENBQXVCLFFBQXZCLEVBQWlDeEksT0FBakM7QUFDRCxHQVJnQyxDQUFqQztBQVNBLFFBQU00SSxpQkFBaUIsR0FBRyxJQUFJekksaUJBQUosQ0FBTSxDQUFDSCxPQUFELEVBQVVDLE1BQVYsS0FBcUI7QUFDbkRrSSxJQUFBQSxZQUFZLENBQUNLLElBQWIsQ0FBa0IsT0FBbEIsRUFBMkJ4SSxPQUEzQjtBQUNBbUksSUFBQUEsWUFBWSxDQUFDSyxJQUFiLENBQWtCLE9BQWxCLEVBQTRCQyxDQUFELElBQU94SSxNQUFNLENBQ3RDLElBQUlxRCxLQUFKLENBQVcsbUJBQWtCNkQsT0FBUSxNQUFLc0IsQ0FBQyxDQUFDSSxPQUFRLEVBQXBELENBRHNDLENBQXhDO0FBRUQsR0FKeUIsQ0FBMUI7QUFLQVYsRUFBQUEsWUFBWSxDQUFDVyxJQUFiLENBQWtCVCxtQkFBbEI7QUFDQUEsRUFBQUEsbUJBQW1CLENBQUNTLElBQXBCLENBQXlCckIsaUJBQXpCO0FBRUEsUUFBTXRILGtCQUFFNEksR0FBRixDQUFNLENBQUNILGlCQUFELEVBQW9CTCx3QkFBcEIsQ0FBTixDQUFOO0FBQ0EsU0FBTzNHLE1BQU0sQ0FBQ29ILE1BQVAsQ0FBY3pCLGFBQWQsQ0FBUDtBQUNEOztBQW1CRCxTQUFTMEIsZ0JBQVQsQ0FBMkJDLFFBQTNCLEVBQXFDOUIsSUFBSSxHQUFHLEVBQTVDLEVBQWdEO0FBQzlDLFFBQU07QUFDSitCLElBQUFBLE9BQU8sR0FBRyxHQUROO0FBRUpDLElBQUFBLFdBQVcsR0FBRztBQUZWLE1BR0ZoQyxJQUhKOztBQUtBLFFBQU1pQyxJQUFJLEdBQUdsSixrQkFBRW1KLFNBQUYsQ0FBWUMsbUJBQVVGLElBQXRCLENBQWI7O0FBQ0EsUUFBTUcsS0FBSyxHQUFHckosa0JBQUVtSixTQUFGLENBQVlDLG1CQUFVQyxLQUF0QixDQUFkOztBQUNBLFFBQU1DLE1BQU0sR0FBR3RKLGtCQUFFbUosU0FBRixDQUFZQyxtQkFBVUUsTUFBdEIsQ0FBZjs7QUFFQSxRQUFNQyxLQUFLLEdBQUcsTUFBT0MsUUFBUCxJQUFvQjtBQUNoQyxRQUFJQyxhQUFhLEdBQUcsS0FBcEI7O0FBQ0EsT0FBRztBQUNELFVBQUk7QUFJRixZQUFJTCxtQkFBVU0sU0FBVixDQUFvQlgsUUFBcEIsQ0FBSixFQUFtQztBQUNqQyxnQkFBTUcsSUFBSSxDQUFDSCxRQUFELEVBQVc7QUFBQ1ksWUFBQUEsSUFBSSxFQUFFWCxPQUFPLEdBQUc7QUFBakIsV0FBWCxDQUFWO0FBQ0QsU0FGRCxNQUVPO0FBQ0xJLDZCQUFVUSxRQUFWLENBQW1CYixRQUFuQjtBQUNEOztBQUNEO0FBQ0QsT0FWRCxDQVVFLE9BQU9ULENBQVAsRUFBVTtBQUNWLFlBQUkxSyxnQkFBRXNJLFFBQUYsQ0FBV29DLENBQUMsQ0FBQ0ksT0FBYixFQUFzQixRQUF0QixLQUFtQ08sV0FBbkMsSUFBa0QsQ0FBQ1EsYUFBdkQsRUFBc0U7QUFHcEVMLDZCQUFVUyxVQUFWLENBQXFCZCxRQUFyQjs7QUFDQVUsVUFBQUEsYUFBYSxHQUFHLElBQWhCO0FBQ0E7QUFDRDs7QUFDRCxjQUFNLElBQUl0RyxLQUFKLENBQVcsOEJBQTZCNEYsUUFBUyxXQUFVQyxPQUFRLEtBQXpELEdBQ2IsbUJBQWtCVixDQUFDLENBQUNJLE9BQVEsRUFEekIsQ0FBTjtBQUVEO0FBRUYsS0F2QkQsUUF1QlMsSUF2QlQ7O0FBd0JBLFFBQUk7QUFDRixhQUFPLE1BQU1jLFFBQVEsRUFBckI7QUFDRCxLQUZELFNBRVU7QUFFUixZQUFNRixNQUFNLENBQUNQLFFBQUQsQ0FBWjtBQUNEO0FBQ0YsR0FoQ0Q7O0FBa0NBUSxFQUFBQSxLQUFLLENBQUNGLEtBQU4sR0FBYyxZQUFZLE1BQU1BLEtBQUssQ0FBQ04sUUFBRCxDQUFyQzs7QUFFQSxTQUFPUSxLQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG9zIGZyb20gJ29zJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHtcbiAgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc2hlbGwtcXVvdGVcbiAgcXVvdGUgYXMgc2hlbGxRdW90ZSxcbiAgcGFyc2UgYXMgc2hlbGxQYXJzZSxcbn0gZnJvbSAnc2hlbGwtcXVvdGUnO1xuaW1wb3J0IHBsdXJhbGl6ZUxpYiBmcm9tICdwbHVyYWxpemUnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgQmFzZTY0RW5jb2RlIH0gZnJvbSAnYmFzZTY0LXN0cmVhbSc7XG5pbXBvcnQge1xuICAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS91dWlkXG4gIHYxIGFzIHV1aWRWMSwgdjMgYXMgdXVpZFYzLFxuICB2NCBhcyB1dWlkVjQsIHY1IGFzIHV1aWRWNVxufSBmcm9tICd1dWlkJztcbmltcG9ydCBfbG9ja2ZpbGUgZnJvbSAnbG9ja2ZpbGUnO1xuXG5cbmNvbnN0IFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSID0gJ2VsZW1lbnQtNjA2Ni0xMWU0LWE1MmUtNGY3MzU0NjZjZWNmJztcbmNvbnN0IEtpQiA9IDEwMjQ7XG5jb25zdCBNaUIgPSBLaUIgKiAxMDI0O1xuY29uc3QgR2lCID0gTWlCICogMTAyNDtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0NvbnRlbnQgKHZhbCkge1xuICByZXR1cm4gXy5pc1N0cmluZyh2YWwpICYmIHZhbCAhPT0gJyc7XG59XG5cbi8vIHJldHVybiB0cnVlIGlmIHRoZSB0aGUgdmFsdWUgaXMgbm90IHVuZGVmaW5lZCwgbnVsbCwgb3IgTmFOLlxuZnVuY3Rpb24gaGFzVmFsdWUgKHZhbCkge1xuICBsZXQgaGFzVmFsID0gZmFsc2U7XG4gIC8vIGF2b2lkIGluY29ycmVjdGx5IGV2YWx1YXRpbmcgYDBgIGFzIGZhbHNlXG4gIGlmIChfLmlzTnVtYmVyKHZhbCkpIHtcbiAgICBoYXNWYWwgPSAhXy5pc05hTih2YWwpO1xuICB9IGVsc2Uge1xuICAgIGhhc1ZhbCA9ICFfLmlzVW5kZWZpbmVkKHZhbCkgJiYgIV8uaXNOdWxsKHZhbCk7XG4gIH1cblxuICByZXR1cm4gaGFzVmFsO1xufVxuXG4vLyBlc2NhcGUgc3BhY2VzIGluIHN0cmluZywgZm9yIGNvbW1hbmRsaW5lIGNhbGxzXG5mdW5jdGlvbiBlc2NhcGVTcGFjZSAoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoLyAvKS5qb2luKCdcXFxcICcpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTcGVjaWFsQ2hhcnMgKHN0ciwgcXVvdGVFc2NhcGUpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBpZiAodHlwZW9mIHF1b3RlRXNjYXBlID09PSAndW5kZWZpbmVkJykge1xuICAgIHF1b3RlRXNjYXBlID0gZmFsc2U7XG4gIH1cbiAgc3RyID0gc3RyXG4gICAgLnJlcGxhY2UoL1tcXFxcXS9nLCAnXFxcXFxcXFwnKVxuICAgIC5yZXBsYWNlKC9bXFwvXS9nLCAnXFxcXC8nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgLnJlcGxhY2UoL1tcXGJdL2csICdcXFxcYicpXG4gICAgLnJlcGxhY2UoL1tcXGZdL2csICdcXFxcZicpXG4gICAgLnJlcGxhY2UoL1tcXG5dL2csICdcXFxcbicpXG4gICAgLnJlcGxhY2UoL1tcXHJdL2csICdcXFxccicpXG4gICAgLnJlcGxhY2UoL1tcXHRdL2csICdcXFxcdCcpXG4gICAgLnJlcGxhY2UoL1tcXFwiXS9nLCAnXFxcXFwiJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgIC5yZXBsYWNlKC9cXFxcJy9nLCBcIlxcXFwnXCIpO1xuICBpZiAocXVvdGVFc2NhcGUpIHtcbiAgICBsZXQgcmUgPSBuZXcgUmVnRXhwKHF1b3RlRXNjYXBlLCAnZycpO1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKHJlLCBgXFxcXCR7cXVvdGVFc2NhcGV9YCk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuZnVuY3Rpb24gbG9jYWxJcCAoKSB7XG4gIGxldCBpcCA9IF8uY2hhaW4ob3MubmV0d29ya0ludGVyZmFjZXMoKSlcbiAgICAudmFsdWVzKClcbiAgICAuZmxhdHRlbigpXG4gICAgLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gKHZhbC5mYW1pbHkgPT09ICdJUHY0JyAmJiB2YWwuaW50ZXJuYWwgPT09IGZhbHNlKTtcbiAgICB9KVxuICAgIC5tYXAoJ2FkZHJlc3MnKVxuICAgIC5maXJzdCgpXG4gICAgLnZhbHVlKCk7XG4gIHJldHVybiBpcDtcbn1cblxuLypcbiAqIENyZWF0ZXMgYSBwcm9taXNlIHRoYXQgaXMgY2FuY2VsbGFibGUsIGFuZCB3aWxsIHRpbWVvdXRcbiAqIGFmdGVyIGBtc2AgZGVsYXlcbiAqL1xuZnVuY3Rpb24gY2FuY2VsbGFibGVEZWxheSAobXMpIHtcbiAgbGV0IHRpbWVyO1xuICBsZXQgcmVzb2x2ZTtcbiAgbGV0IHJlamVjdDtcblxuICBjb25zdCBkZWxheSA9IG5ldyBCLlByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9LCBtcyk7XG4gIH0pO1xuXG4gIC8vIG92ZXJyaWRlIEJsdWViaXJkJ3MgYGNhbmNlbGAsIHdoaWNoIGRvZXMgbm90IHdvcmsgd2hlbiB1c2luZyBgYXdhaXRgIG9uXG4gIC8vIGEgcHJvbWlzZSwgc2luY2UgYHJlc29sdmVgL2ByZWplY3RgIGFyZSBuZXZlciBjYWxsZWRcbiAgZGVsYXkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgcmVqZWN0KG5ldyBCLkNhbmNlbGxhdGlvbkVycm9yKCkpO1xuICB9O1xuICByZXR1cm4gZGVsYXk7XG59XG5cbmZ1bmN0aW9uIG11bHRpUmVzb2x2ZSAocm9vdHMsIC4uLmFyZ3MpIHtcbiAgcmV0dXJuIHJvb3RzLm1hcCgocm9vdCkgPT4gcGF0aC5yZXNvbHZlKHJvb3QsIC4uLmFyZ3MpKTtcbn1cblxuLypcbiAqIFBhcnNlcyBhbiBvYmplY3QgaWYgcG9zc2libGUuIE90aGVyd2lzZSByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCBwYXJzaW5nLlxuICovXG5mdW5jdGlvbiBzYWZlSnNvblBhcnNlIChvYmopIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShvYmopO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICAvLyBpZ25vcmU6IHRoaXMgaXMgbm90IGpzb24gcGFyc2FibGVcbiAgICByZXR1cm4gb2JqO1xuICB9XG59XG5cbi8qXG4gKiBTdHJpbmdpZmllcyB0aGUgb2JqZWN0IHBhc3NlZCBpbiwgY29udmVydGluZyBCdWZmZXJzIGludG8gU3RyaW5ncyBmb3IgYmV0dGVyXG4gKiBkaXNwbGF5LiBUaGlzIG1pbWljcyBKU09OLnN0cmluZ2lmeSAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vc3RyaW5naWZ5KVxuICogZXhjZXB0IHRoZSBgcmVwbGFjZXJgIGFyZ3VtZW50IGNhbiBvbmx5IGJlIGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHs/ZnVuY3Rpb259IHJlcGxhY2VyIC0gZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBwcm9wZXJ0aWVzIGFkZGVkIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCBvYmplY3RcbiAqIEBwYXJhbSB7P251bWJlcnxzdHJpbmd9IHNwYWNlIC0gdXNlZCB0byBpbnNlcnQgd2hpdGUgc3BhY2UgaW50byB0aGUgb3V0cHV0IEpTT05cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGZvciByZWFkYWJpbGl0eSBwdXJwb3Nlcy4gRGVmYXVsdHMgdG8gMlxuICogcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBKU09OIG9iamVjdCBzZXJpYWxpemVkIGFzIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGpzb25TdHJpbmdpZnkgKG9iaiwgcmVwbGFjZXIsIHNwYWNlID0gMikge1xuICAvLyBpZiBubyByZXBsYWNlciBpcyBwYXNzZWQsIG9yIGl0IGlzIG5vdCBhIGZ1bmN0aW9uLCBqdXN0IHVzZSBhIHBhc3MtdGhyb3VnaFxuICBpZiAoIV8uaXNGdW5jdGlvbihyZXBsYWNlcikpIHtcbiAgICByZXBsYWNlciA9IChrLCB2KSA9PiB2O1xuICB9XG5cbiAgLy8gQnVmZmVycyBjYW5ub3QgYmUgc2VyaWFsaXplZCBpbiBhIHJlYWRhYmxlIHdheVxuICBjb25zdCBidWZmZXJUb0pTT04gPSBCdWZmZXIucHJvdG90eXBlLnRvSlNPTjtcbiAgZGVsZXRlIEJ1ZmZlci5wcm90b3R5cGUudG9KU09OO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSBCdWZmZXIuaXNCdWZmZXIodmFsdWUpXG4gICAgICAgID8gdmFsdWUudG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgICA6IHZhbHVlO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyKGtleSwgdXBkYXRlZFZhbHVlKTtcbiAgICB9LCBzcGFjZSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gcmVzdG9yZSB0aGUgZnVuY3Rpb24sIHNvIGFzIHRvIG5vdCBicmVhayBmdXJ0aGVyIHNlcmlhbGl6YXRpb25cbiAgICBCdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGJ1ZmZlclRvSlNPTjtcbiAgfVxufVxuXG4vKlxuICogUmVtb3ZlcyB0aGUgd3JhcHBlciBmcm9tIGVsZW1lbnQsIGlmIGl0IGV4aXN0cy5cbiAqICAgeyBFTEVNRU5UOiA0IH0gYmVjb21lcyA0XG4gKiAgIHsgZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2Y6IDUgfSBiZWNvbWVzIDVcbiAqL1xuZnVuY3Rpb24gdW53cmFwRWxlbWVudCAoZWwpIHtcbiAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIsICdFTEVNRU5UJ10pIHtcbiAgICBpZiAoXy5oYXMoZWwsIHByb3BOYW1lKSkge1xuICAgICAgcmV0dXJuIGVsW3Byb3BOYW1lXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsO1xufVxuXG5mdW5jdGlvbiB3cmFwRWxlbWVudCAoZWxlbWVudElkKSB7XG4gIHJldHVybiB7XG4gICAgRUxFTUVOVDogZWxlbWVudElkLFxuICAgIFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl06IGVsZW1lbnRJZCxcbiAgfTtcbn1cblxuLypcbiAqIFJldHVybnMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgYWxsIHByb3BlcnRpZXMgaW4gdGhlIG9yaWdpbmFsIGVsZW1lbnRcbiAqIHdoaWNoIHdlcmUgdHJ1dGh5IGdpdmVuIHRoZSBwcmVkaWNhdGUuXG4gKiBJZiB0aGUgcHJlZGljYXRlIGlzXG4gKiAgICogbWlzc2luZyAtIGl0IHdpbGwgcmVtb3ZlIGFsbCBwcm9wZXJ0aWVzIHdob3NlIHZhbHVlcyBhcmUgYHVuZGVmaW5lZGBcbiAqICAgKiBhIHNjYWxhciAtIGl0IHdpbGwgdGVzdCBhbGwgcHJvcGVydGllcycgdmFsdWVzIGFnYWluc3QgdGhhdCB2YWx1ZVxuICogICAqIGEgZnVuY3Rpb24gLSBpdCB3aWxsIHBhc3MgZWFjaCB2YWx1ZSBhbmQgdGhlIG9yaWdpbmFsIG9iamVjdCBpbnRvIHRoZSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBmaWx0ZXJPYmplY3QgKG9iaiwgcHJlZGljYXRlKSB7XG4gIGxldCBuZXdPYmogPSBfLmNsb25lKG9iaik7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHByZWRpY2F0ZSkpIHtcbiAgICAvLyByZW1vdmUgYW55IGVsZW1lbnQgZnJvbSB0aGUgb2JqZWN0IHdob3NlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgIHByZWRpY2F0ZSA9ICh2KSA9PiAhXy5pc1VuZGVmaW5lZCh2KTtcbiAgfSBlbHNlIGlmICghXy5pc0Z1bmN0aW9uKHByZWRpY2F0ZSkpIHtcbiAgICAvLyBtYWtlIHByZWRpY2F0ZSBpbnRvIGEgZnVuY3Rpb25cbiAgICBjb25zdCB2YWx1ZVByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICBwcmVkaWNhdGUgPSAodikgPT4gdiA9PT0gdmFsdWVQcmVkaWNhdGU7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgIGlmICghcHJlZGljYXRlKG9ialtrZXldLCBvYmopKSB7XG4gICAgICBkZWxldGUgbmV3T2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPYmo7XG59XG5cbi8qKlxuICogQ29udmVydHMgbnVtYmVyIG9mIGJ5dGVzIHRvIGEgcmVhZGFibGUgc2l6ZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBieXRlcyAtIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGZvciBleGFtcGxlXG4gKiAgICAgICAgICAgICAgICAgICAnMS4wMCBLQicgZm9yICcxMDI0IEInXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYnl0ZXMgY291bnQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIG9yXG4gKiAgICAgICAgICAgICAgICAgaWYgaXQgaXMgbGVzcyB0aGFuIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHRvUmVhZGFibGVTaXplU3RyaW5nIChieXRlcykge1xuICBjb25zdCBpbnRCeXRlcyA9IHBhcnNlSW50KGJ5dGVzLCAxMCk7XG4gIGlmIChpc05hTihpbnRCeXRlcykgfHwgaW50Qnl0ZXMgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAnJHtieXRlc30nIHRvIGEgcmVhZGFibGUgc2l6ZSBmb3JtYXRgKTtcbiAgfVxuICBpZiAoaW50Qnl0ZXMgPj0gR2lCKSB7XG4gICAgcmV0dXJuIGAke3BhcnNlRmxvYXQoaW50Qnl0ZXMgLyAoR2lCICogMS4wKSkudG9GaXhlZCgyKX0gR0JgO1xuICB9IGVsc2UgaWYgKGludEJ5dGVzID49IE1pQikge1xuICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KGludEJ5dGVzIC8gKE1pQiAqIDEuMCkpLnRvRml4ZWQoMil9IE1CYDtcbiAgfSBlbHNlIGlmIChpbnRCeXRlcyA+PSBLaUIpIHtcbiAgICByZXR1cm4gYCR7cGFyc2VGbG9hdChpbnRCeXRlcyAvIChLaUIgKiAxLjApKS50b0ZpeGVkKDIpfSBLQmA7XG4gIH1cbiAgcmV0dXJuIGAke2ludEJ5dGVzfSBCYDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgZ2l2ZW4gcGF0aCBpcyBhIHN1YnBhdGggb2YgdGhlXG4gKiBwYXJ0aWN1bGFyIHJvb3QgZm9sZGVyLiBCb3RoIHBhdGhzIGNhbiBpbmNsdWRlIC4uIGFuZCAuIHNwZWNpZmllcnNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxQYXRoIFRoZSBhYnNvbHV0ZSBmaWxlL2ZvbGRlciBwYXRoXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9vdCBUaGUgYWJzb2x1dGUgcm9vdCBmb2xkZXIgcGF0aFxuICogQHBhcmFtIHs/Ym9vbGVhbn0gZm9yY2VQb3NpeCBTZXQgaXQgdG8gdHJ1ZSBpZiBwYXRocyBtdXN0IGJlIGludGVycHJldGVkIGluIFBPU0lYIGZvcm1hdFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgdGhlIGdpdmVuIG9yaWdpbmFsIHBhdGggaXMgdGhlIHN1YnBhdGggb2YgdGhlIHJvb3QgZm9sZGVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW55IG9mIHRoZSBnaXZlbiBwYXRocyBpcyBub3QgYWJzb2x1dGVcbiAqL1xuZnVuY3Rpb24gaXNTdWJQYXRoIChvcmlnaW5hbFBhdGgsIHJvb3QsIGZvcmNlUG9zaXggPSBudWxsKSB7XG4gIGNvbnN0IHBhdGhPYmogPSBmb3JjZVBvc2l4ID8gcGF0aC5wb3NpeCA6IHBhdGg7XG4gIGZvciAoY29uc3QgcCBvZiBbb3JpZ2luYWxQYXRoLCByb290XSkge1xuICAgIGlmICghcGF0aE9iai5pc0Fic29sdXRlKHApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3B9JyBpcyBleHBlY3RlZCB0byBiZSBhbiBhYnNvbHV0ZSBwYXRoYCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290ID0gcGF0aE9iai5ub3JtYWxpemUocm9vdCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aE9iai5ub3JtYWxpemUob3JpZ2luYWxQYXRoKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgobm9ybWFsaXplZFJvb3QpO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYXRocyBhcmUgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZSBzeXN0ZW1cbiAqIGRlc3RpbmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoMSAtIEFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGggdG8gYSBmaWxlL2ZvbGRlclxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGgyIC0gQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBhIGZpbGUvZm9sZGVyXG4gKiBAcGFyYW0gey4uLnN0cmluZ30gcGF0aE4gLSBaZXJvIG9yIG1vcmUgYWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aHMgdG8gZmlsZXMvZm9sZGVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYWxsIHBhdGhzIGFyZSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlIHN5c3RlbSBpdGVtXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzU2FtZURlc3RpbmF0aW9uIChwYXRoMSwgcGF0aDIsIC4uLnBhdGhOKSB7XG4gIGNvbnN0IGFsbFBhdGhzID0gW3BhdGgxLCBwYXRoMiwgLi4ucGF0aE5dO1xuICBpZiAoIWF3YWl0IEIucmVkdWNlKGFsbFBhdGhzLCBhc3luYyAoYSwgYikgPT4gYSAmJiBhd2FpdCBmcy5leGlzdHMoYiksIHRydWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYXJlQWxsSXRlbXNFcXVhbCA9IChhcnIpID0+ICEhYXJyLnJlZHVjZSgoYSwgYikgPT4gYSA9PT0gYiA/IGEgOiBOYU4pO1xuICBpZiAoYXJlQWxsSXRlbXNFcXVhbChhbGxQYXRocykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIE5vZGUgMTAuNS4wIGludHJvZHVjZWQgYmlnaW50IHN1cHBvcnQgaW4gc3RhdCwgd2hpY2ggYWxsb3dzIGZvciBtb3JlIHByZWNpc2lvblxuICAvLyBob3dldmVyIGJlbG93IHRoYXQgdGhlIG9wdGlvbnMgZ2V0IGludGVycHJldGVkIGFzIHRoZSBjYWxsYmFja1xuICAvLyBUT0RPOiByZW1vdmUgd2hlbiBOb2RlIDEwIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcbiAgbGV0IG1hcENiID0gYXN5bmMgKHgpID0+IGF3YWl0IGZzLnN0YXQoeCwge1xuICAgIGJpZ2ludDogdHJ1ZSxcbiAgfSkuaW5vO1xuICBpZiAoc2VtdmVyLmx0KHByb2Nlc3MudmVyc2lvbiwgJzEwLjUuMCcpKSB7XG4gICAgbWFwQ2IgPSBhc3luYyAoeCkgPT4gYXdhaXQgZnMuc3RhdCh4KS5pbm87XG4gIH1cbiAgcmV0dXJuIGFyZUFsbEl0ZW1zRXF1YWwoYXdhaXQgQi5tYXAoYWxsUGF0aHMsIG1hcENiKSk7XG59XG5cbi8qKlxuICogQ29lcmNlcyB0aGUgZ2l2ZW4gbnVtYmVyL3N0cmluZyB0byBhIHZhbGlkIHZlcnNpb24gc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSB2ZXIgLSBWZXJzaW9uIHN0cmluZyB0byBjb2VyY2VcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RyaWN0IFt0cnVlXSAtIElmIHRydWUgdGhlbiBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd25cbiAqIGlmIGB2ZXJgIGNhbm5vdCBiZSBjb2VyY2VkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBDb2VyY2VkIHZlcnNpb24gbnVtYmVyIG9yIG51bGwgaWYgdGhlIHN0cmluZyBjYW5ub3QgYmVcbiAqIGNvZXJjZWQgYW5kIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgc3RyaWN0IG1vZGUgaXMgZW5hYmxlZCBhbmQgYHZlcmAgY2Fubm90IGJlIGNvZXJjZWRcbiAqL1xuZnVuY3Rpb24gY29lcmNlVmVyc2lvbiAodmVyLCBzdHJpY3QgPSB0cnVlKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNlbXZlci52YWxpZChzZW12ZXIuY29lcmNlKGAke3Zlcn1gKSk7XG4gIGlmIChzdHJpY3QgJiYgIXJlc3VsdCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJyR7dmVyfScgY2Fubm90IGJlIGNvZXJjZWQgdG8gYSB2YWxpZCB2ZXJzaW9uIG51bWJlcmApO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IFNVUFBPUlRFRF9PUEVSQVRPUlMgPSBbJz09JywgJyE9JywgJz4nLCAnPCcsICc+PScsICc8PScsICc9J107XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIHZlcnNpb24gc3RyaW5nc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gdmVyMSAtIFRoZSBmaXJzdCB2ZXJzaW9uIG51bWJlciB0byBjb21wYXJlLiBTaG91bGQgYmUgYSB2YWxpZFxuICogdmVyc2lvbiBudW1iZXIgc3VwcG9ydGVkIGJ5IHNlbXZlciBwYXJzZXIuXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHZlcjIgLSBUaGUgc2Vjb25kIHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUuIFNob3VsZCBiZSBhIHZhbGlkXG4gKiB2ZXJzaW9uIG51bWJlciBzdXBwb3J0ZWQgYnkgc2VtdmVyIHBhcnNlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciAtIE9uZSBvZiBzdXBwb3J0ZWQgdmVyc2lvbiBudW1iZXIgb3BlcmF0b3JzOlxuICogPT0sICE9LCA+LCA8LCA8PSwgPj0sID1cbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIG9yIGZhbHNlIGRlcGVuZGluZyBvbiB0aGUgYWN0dWFsIGNvbXBhcmlzb24gcmVzdWx0XG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgYW4gdW5zdXBwb3J0ZWQgb3BlcmF0b3IgaXMgc3VwcGxpZWQgb3IgYW55IG9mIHRoZSBzdXBwbGllZFxuICogdmVyc2lvbiBzdHJpbmdzIGNhbm5vdCBiZSBjb2VyY2VkXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyAodmVyMSwgb3BlcmF0b3IsIHZlcjIpIHtcbiAgaWYgKCFTVVBQT1JURURfT1BFUkFUT1JTLmluY2x1ZGVzKG9wZXJhdG9yKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke29wZXJhdG9yfScgY29tcGFyaXNvbiBvcGVyYXRvciBpcyBub3Qgc3VwcG9ydGVkLiBgICtcbiAgICAgIGBPbmx5ICcke0pTT04uc3RyaW5naWZ5KFNVUFBPUlRFRF9PUEVSQVRPUlMpfScgb3BlcmF0b3JzIGFyZSBzdXBwb3J0ZWRgKTtcbiAgfVxuXG4gIGNvbnN0IHNlbXZlck9wZXJhdG9yID0gWyc9PScsICchPSddLmluY2x1ZGVzKG9wZXJhdG9yKSA/ICc9JyA6IG9wZXJhdG9yO1xuICBjb25zdCByZXN1bHQgPSBzZW12ZXIuc2F0aXNmaWVzKGNvZXJjZVZlcnNpb24odmVyMSksIGAke3NlbXZlck9wZXJhdG9yfSR7Y29lcmNlVmVyc2lvbih2ZXIyKX1gKTtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSAnIT0nID8gIXJlc3VsdCA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBZGQgYXBwcm9wcmlhdGUgcXVvdGVzIHRvIGNvbW1hbmQgYXJndW1lbnRzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1YnN0YWNrL25vZGUtc2hlbGwtcXVvdGVcbiAqIGZvciBtb3JlIGRldGFpbHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmc+fSAtIFRoZSBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhcnNlZFxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgYXJndW1lbnRzLCBxdW90ZWRcbiAqL1xuZnVuY3Rpb24gcXVvdGUgKGFyZ3MpIHtcbiAgcmV0dXJuIHNoZWxsUXVvdGUoYXJncyk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBuZWNlc3NhcnkgdG8gd29ya2Fyb3VuZCB1bmV4cGVjdGVkIG1lbW9yeSBsZWFrc1xuICogY2F1c2VkIGJ5IE5vZGVKUyBzdHJpbmcgaW50ZXJuaW5nXG4gKiBiZWhhdmlvciBkZXNjcmliZWQgaW4gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Mjg2OVxuICpcbiAqIEBwYXJhbSB7Kn0gcyAtIFRoZSBzdHJpbmcgdG8gdW5sZWFrXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEVpdGhlciB0aGUgdW5sZWFrZWQgc3RyaW5nIG9yIHRoZSBvcmlnaW5hbCBvYmplY3QgY29udmVydGVkIHRvIHN0cmluZ1xuICovXG5mdW5jdGlvbiB1bmxlYWtTdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGAgJHtzfWAuc3Vic3RyKDEpO1xufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUGx1cmFsaXplT3B0aW9uc1xuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gaW5jbHVzaXZlIFtmYWxzZV0gLSBXaGV0aGVyIHRvIHByZWZpeCB3aXRoIHRoZSBudW1iZXIgKGUuZy4sIDMgZHVja3MpXG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIGZvcm0gb2YgYSB3b3JkIGFwcHJvcHJpYXRlIHRvIHRoZSBjb3VudFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkIC0gVGhlIHdvcmQgdG8gcGx1cmFsaXplXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgLSBIb3cgbWFueSBvZiB0aGUgd29yZCBleGlzdFxuICogQHBhcmFtIHs/UGx1cmFsaXplT3B0aW9uc3xib29sZWFufSBvcHRpb25zfGluY2x1c2l2ZSAtIG9wdGlvbnMgZm9yIHdvcmQgcGx1cmFsaXphdGlvbixcbiAqICAgb3IgYSBib29sZWFuIGluZGljYXRpbmcgdGhlIG9wdGlvbnMuaW5jbHVzaXZlIHByb3BlcnR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgd29yZCBwbHVyYWxpemVkIGFjY29yZGluZyB0byB0aGUgbnVtYmVyXG4gKi9cbmZ1bmN0aW9uIHBsdXJhbGl6ZSAod29yZCwgY291bnQsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgaW5jbHVzaXZlID0gZmFsc2U7XG4gIGlmIChfLmlzQm9vbGVhbihvcHRpb25zKSkge1xuICAgIC8vIGlmIHBhc3NlZCBpbiBhcyBhIGJvb2xlYW5cbiAgICBpbmNsdXNpdmUgPSBvcHRpb25zO1xuICB9IGVsc2UgaWYgKF8uaXNCb29sZWFuKG9wdGlvbnM/LmluY2x1c2l2ZSkpIHtcbiAgICAvLyBpZiBwYXNzZWQgaW4gYXMgYW4gb3B0aW9ucyBoYXNoXG4gICAgaW5jbHVzaXZlID0gb3B0aW9ucy5pbmNsdXNpdmU7XG4gIH1cbiAgcmV0dXJuIHBsdXJhbGl6ZUxpYih3b3JkLCBjb3VudCwgaW5jbHVzaXZlKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbmNvZGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXhTaXplIFsxMDczNzQxODI0XSBUaGUgbWF4aW11bSBzaXplIG9mXG4gKiB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBpbiBieXRlcy4gVGhpcyBpcyBzZXQgdG8gMUdCIGJ5IGRlZmF1bHQsIGJlY2F1c2VcbiAqIEFwcGl1bSBsaW1pdHMgdGhlIG1heGltdW0gSFRUUCBib2R5IHNpemUgdG8gMUdCLiBBbHNvLCB0aGUgTm9kZUpTIGhlYXBcbiAqIHNpemUgbXVzdCBiZSBlbm91Z2ggdG8ga2VlcCB0aGUgcmVzdWx0aW5nIG9iamVjdCAodXN1YWxseSB0aGlzIHNpemUgaXNcbiAqIGxpbWl0ZWQgdG8gMS40IEdCKVxuICovXG5cbi8qKlxuICogQ29udmVydHMgY29udGVudHMgb2YgYSBsb2NhbCBmaWxlIHRvIGFuIGluLW1lbW9yeSBiYXNlLTY0IGVuY29kZWQgYnVmZmVyLlxuICogVGhlIG9wZXJhdGlvbiBpcyBtZW1vcnktdXNhZ2UgZnJpZW5kbHkgYW5kIHNob3VsZCBiZSB1c2VkIHdoaWxlIGVuY29kaW5nXG4gKiBsYXJnZSBmaWxlcyB0byBiYXNlNjRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlIGJlaW5nIGVuY29kZWRcbiAqIEBwYXJhbSB7RW5jb2RpbmdPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBiYXNlNjQtZW5jb2RlZCBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZSBhcyBtZW1vcnkgYnVmZmVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIHNvdXJjZSBmaWxlXG4gKiBvciB0aGUgc291cmNlIGZpbGUgaXMgdG9vXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvSW5NZW1vcnlCYXNlNjQgKHNyY1BhdGgsIG9wdHMgPSB7fSkge1xuICBpZiAoIShhd2FpdCBmcy5leGlzdHMoc3JjUGF0aCkpIHx8IChhd2FpdCBmcy5zdGF0KHNyY1BhdGgpKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWNoIGZpbGU6ICR7c3JjUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBtYXhTaXplID0gMSAqIEdpQixcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHJlc3VsdEJ1ZmZlcnMgPSBbXTtcbiAgbGV0IHJlc3VsdEJ1ZmZlcnNTaXplID0gMDtcbiAgY29uc3QgcmVzdWx0V3JpdGVTdHJlYW0gPSBuZXcgc3RyZWFtLldyaXRhYmxlKHtcbiAgICB3cml0ZTogKGJ1ZmZlciwgZW5jb2RpbmcsIG5leHQpID0+IHtcbiAgICAgIHJlc3VsdEJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgcmVzdWx0QnVmZmVyc1NpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmIChtYXhTaXplID4gMCAmJiByZXN1bHRCdWZmZXJzU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgcmVzdWx0V3JpdGVTdHJlYW0uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgYCArXG4gICAgICAgICAgYGJ1ZmZlciBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhtYXhTaXplKX1gKSk7XG4gICAgICB9XG4gICAgICBuZXh0KCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVhZGVyU3RyZWFtID0gZnMuY3JlYXRlUmVhZFN0cmVhbShzcmNQYXRoKTtcbiAgY29uc3QgYmFzZTY0RW5jb2RlclN0cmVhbSA9IG5ldyBCYXNlNjRFbmNvZGUoKTtcbiAgY29uc3QgcmVzdWx0V3JpdGVTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlc3VsdFdyaXRlU3RyZWFtLm9uY2UoJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgIHJlYWRlclN0cmVhbS51bnBpcGUoYmFzZTY0RW5jb2RlclN0cmVhbSk7XG4gICAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnVucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gICAgICByZWFkZXJTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICAgIHJlc3VsdFdyaXRlU3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICB9KTtcbiAgY29uc3QgcmVhZFN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVhZGVyU3RyZWFtLm9uY2UoJ2Nsb3NlJywgcmVzb2x2ZSk7XG4gICAgcmVhZGVyU3RyZWFtLm9uY2UoJ2Vycm9yJywgKGUpID0+IHJlamVjdChcbiAgICAgIG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgJyR7c3JjUGF0aH0nOiAke2UubWVzc2FnZX1gKSkpO1xuICB9KTtcbiAgcmVhZGVyU3RyZWFtLnBpcGUoYmFzZTY0RW5jb2RlclN0cmVhbSk7XG4gIGJhc2U2NEVuY29kZXJTdHJlYW0ucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG5cbiAgYXdhaXQgQi5hbGwoW3JlYWRTdHJlYW1Qcm9taXNlLCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2VdKTtcbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQocmVzdWx0QnVmZmVycyk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9ja0ZpbGVPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbMTIwXSBUaGUgbWF4IHRpbWUgaW4gc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgbG9ja1xuICogQHByb3BlcnR5IHtib29sZWFufSB0cnlSZWNvdmVyeSBbZmFsc2VdIFdoZXRoZXIgdG8gdHJ5IGxvY2sgcmVjb3ZlcnkgaWZcbiAqIHRoZSBmaXJzdCBhdHRlbXB0IHRvIGFjcXVpcmUgaXQgdGltZWQgb3V0LlxuICovXG5cbi8qKlxuICogQ3JlYXRlIGFuIGFzeW5jIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGNhbGxlZCwgd2lsbCBub3QgcHJvY2VlZCB1bnRpbCBhIGNlcnRhaW4gZmlsZSBpcyBub1xuICogbG9uZ2VyIHByZXNlbnQgb24gdGhlIHN5c3RlbS4gVGhpcyBhbGxvd3MgZm9yIHByZXZlbnRpbmcgY29uY3VycmVudCBiZWhhdmlvciBhY3Jvc3MgcHJvY2Vzc2VzXG4gKiB1c2luZyBhIGtub3duIGxvY2tmaWxlIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2tGaWxlIFRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUgdXNlZCBmb3IgdGhlIGxvY2tcbiAqIEBwYXJhbSB7TG9ja0ZpbGVPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7QXN5bmNGdW5jdGlvbn0gYXN5bmMgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbm90aGVyIGFzeW5jIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBsb2NrZWRcbiAqIGJlaGF2aW9yXG4gKi9cbmZ1bmN0aW9uIGdldExvY2tGaWxlR3VhcmQgKGxvY2tGaWxlLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSAxMjAsXG4gICAgdHJ5UmVjb3ZlcnkgPSBmYWxzZSxcbiAgfSA9IG9wdHM7XG5cbiAgY29uc3QgbG9jayA9IEIucHJvbWlzaWZ5KF9sb2NrZmlsZS5sb2NrKTtcbiAgY29uc3QgY2hlY2sgPSBCLnByb21pc2lmeShfbG9ja2ZpbGUuY2hlY2spO1xuICBjb25zdCB1bmxvY2sgPSBCLnByb21pc2lmeShfbG9ja2ZpbGUudW5sb2NrKTtcblxuICBjb25zdCBndWFyZCA9IGFzeW5jIChiZWhhdmlvcikgPT4ge1xuICAgIGxldCB0cmllZFJlY292ZXJ5ID0gZmFsc2U7XG4gICAgZG8ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gaWYgdGhlIGxvY2tmaWxlIGRvZXNuJ3QgZXhpc3QsIGxvY2sgaXQgc3luY2hyb25vdXNseSB0byBtYWtlIHN1cmUgbm8gb3RoZXIgY2FsbFxuICAgICAgICAvLyBvbiB0aGUgc2FtZSBzcGluIG9mIHRoZSBldmVudCBsb29wIGNhbiBhbHNvIGluaXRpYXRlIGEgbG9jay4gSWYgdGhlIGxvY2tmaWxlIGRvZXMgZXhpc3RcbiAgICAgICAgLy8gdGhlbiBqdXN0IHVzZSB0aGUgcmVndWxhciBhc3luYyAnbG9jaycgbWV0aG9kIHdoaWNoIHdpbGwgd2FpdCBvbiB0aGUgbG9jay5cbiAgICAgICAgaWYgKF9sb2NrZmlsZS5jaGVja1N5bmMobG9ja0ZpbGUpKSB7XG4gICAgICAgICAgYXdhaXQgbG9jayhsb2NrRmlsZSwge3dhaXQ6IHRpbWVvdXQgKiAxMDAwfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX2xvY2tmaWxlLmxvY2tTeW5jKGxvY2tGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKF8uaW5jbHVkZXMoZS5tZXNzYWdlLCAnRUVYSVNUJykgJiYgdHJ5UmVjb3ZlcnkgJiYgIXRyaWVkUmVjb3ZlcnkpIHtcbiAgICAgICAgICAvLyBUaGVyZSBjb3VsZCBiZSBjYXNlcyB3aGVyZSBhIHByb2Nlc3MgaGFzIGJlZW4gZm9yY2VmdWxseSB0ZXJtaW5hdGVkXG4gICAgICAgICAgLy8gd2l0aG91dCBhIGNoYW5jZSB0byBjbGVhbiB1cCBwZW5kaW5nIGxvY2tzOiBodHRwczovL2dpdGh1Yi5jb20vbnBtL2xvY2tmaWxlL2lzc3Vlcy8yNlxuICAgICAgICAgIF9sb2NrZmlsZS51bmxvY2tTeW5jKGxvY2tGaWxlKTtcbiAgICAgICAgICB0cmllZFJlY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBhY3F1aXJlIGxvY2sgb24gJyR7bG9ja0ZpbGV9JyBhZnRlciAke3RpbWVvdXR9cy4gYCArXG4gICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBiZWhhdmlvcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyB3aGV0aGVyIHRoZSBiZWhhdmlvciBzdWNjZWVkZWQgb3Igbm90LCBnZXQgcmlkIG9mIHRoZSBsb2NrXG4gICAgICBhd2FpdCB1bmxvY2sobG9ja0ZpbGUpO1xuICAgIH1cbiAgfTtcblxuICBndWFyZC5jaGVjayA9IGFzeW5jICgpID0+IGF3YWl0IGNoZWNrKGxvY2tGaWxlKTtcblxuICByZXR1cm4gZ3VhcmQ7XG59XG5cbmV4cG9ydCB7XG4gIGhhc1ZhbHVlLCBlc2NhcGVTcGFjZSwgZXNjYXBlU3BlY2lhbENoYXJzLCBsb2NhbElwLCBjYW5jZWxsYWJsZURlbGF5LFxuICBtdWx0aVJlc29sdmUsIHNhZmVKc29uUGFyc2UsIHdyYXBFbGVtZW50LCB1bndyYXBFbGVtZW50LCBmaWx0ZXJPYmplY3QsXG4gIHRvUmVhZGFibGVTaXplU3RyaW5nLCBpc1N1YlBhdGgsIFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSLFxuICBpc1NhbWVEZXN0aW5hdGlvbiwgY29tcGFyZVZlcnNpb25zLCBjb2VyY2VWZXJzaW9uLCBxdW90ZSwgdW5sZWFrU3RyaW5nLFxuICBqc29uU3RyaW5naWZ5LCBwbHVyYWxpemUsIEdpQiwgTWlCLCBLaUIsIHRvSW5NZW1vcnlCYXNlNjQsXG4gIHV1aWRWMSwgdXVpZFYzLCB1dWlkVjQsIHV1aWRWNSwgc2hlbGxQYXJzZSwgZ2V0TG9ja0ZpbGVHdWFyZFxufTtcbiJdLCJmaWxlIjoibGliL3V0aWwuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
424
+ }
425
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlsLmpzIl0sIm5hbWVzIjpbIlczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSIiwiS2lCIiwiTWlCIiwiR2lCIiwiaGFzQ29udGVudCIsInZhbCIsIl8iLCJpc1N0cmluZyIsImhhc1ZhbHVlIiwiaGFzVmFsIiwiaXNOdW1iZXIiLCJpc05hTiIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiZXNjYXBlU3BhY2UiLCJzdHIiLCJzcGxpdCIsImpvaW4iLCJlc2NhcGVTcGVjaWFsQ2hhcnMiLCJxdW90ZUVzY2FwZSIsInJlcGxhY2UiLCJyZSIsIlJlZ0V4cCIsImxvY2FsSXAiLCJpcCIsImNoYWluIiwib3MiLCJuZXR3b3JrSW50ZXJmYWNlcyIsInZhbHVlcyIsImZsYXR0ZW4iLCJmaWx0ZXIiLCJmYW1pbHkiLCJpbnRlcm5hbCIsIm1hcCIsImZpcnN0IiwidmFsdWUiLCJjYW5jZWxsYWJsZURlbGF5IiwibXMiLCJ0aW1lciIsInJlc29sdmUiLCJyZWplY3QiLCJkZWxheSIsIkIiLCJQcm9taXNlIiwiX3Jlc29sdmUiLCJfcmVqZWN0Iiwic2V0VGltZW91dCIsImNhbmNlbCIsImNsZWFyVGltZW91dCIsIkNhbmNlbGxhdGlvbkVycm9yIiwibXVsdGlSZXNvbHZlIiwicm9vdHMiLCJhcmdzIiwicm9vdCIsInBhdGgiLCJzYWZlSnNvblBhcnNlIiwib2JqIiwiSlNPTiIsInBhcnNlIiwiaWduIiwianNvblN0cmluZ2lmeSIsInJlcGxhY2VyIiwic3BhY2UiLCJpc0Z1bmN0aW9uIiwiayIsInYiLCJidWZmZXJUb0pTT04iLCJCdWZmZXIiLCJwcm90b3R5cGUiLCJ0b0pTT04iLCJzdHJpbmdpZnkiLCJrZXkiLCJ1cGRhdGVkVmFsdWUiLCJpc0J1ZmZlciIsInRvU3RyaW5nIiwidW53cmFwRWxlbWVudCIsImVsIiwicHJvcE5hbWUiLCJoYXMiLCJ3cmFwRWxlbWVudCIsImVsZW1lbnRJZCIsIkVMRU1FTlQiLCJmaWx0ZXJPYmplY3QiLCJwcmVkaWNhdGUiLCJuZXdPYmoiLCJjbG9uZSIsInZhbHVlUHJlZGljYXRlIiwiT2JqZWN0Iiwia2V5cyIsInRvUmVhZGFibGVTaXplU3RyaW5nIiwiYnl0ZXMiLCJpbnRCeXRlcyIsInBhcnNlSW50IiwiU3RyaW5nIiwiRXJyb3IiLCJ0b0ZpeGVkIiwiaXNTdWJQYXRoIiwib3JpZ2luYWxQYXRoIiwiZm9yY2VQb3NpeCIsInBhdGhPYmoiLCJwb3NpeCIsInAiLCJpc0Fic29sdXRlIiwibm9ybWFsaXplZFJvb3QiLCJub3JtYWxpemUiLCJub3JtYWxpemVkUGF0aCIsInN0YXJ0c1dpdGgiLCJpc1NhbWVEZXN0aW5hdGlvbiIsInBhdGgxIiwicGF0aDIiLCJwYXRoTiIsImFsbFBhdGhzIiwicmVkdWNlIiwiYSIsImIiLCJmcyIsImV4aXN0cyIsImFyZUFsbEl0ZW1zRXF1YWwiLCJhcnIiLCJOYU4iLCJtYXBDYiIsIngiLCJzdGF0IiwiYmlnaW50IiwiaW5vIiwic2VtdmVyIiwibHQiLCJwcm9jZXNzIiwidmVyc2lvbiIsImNvZXJjZVZlcnNpb24iLCJ2ZXIiLCJzdHJpY3QiLCJyZXN1bHQiLCJ2YWxpZCIsImNvZXJjZSIsIlNVUFBPUlRFRF9PUEVSQVRPUlMiLCJjb21wYXJlVmVyc2lvbnMiLCJ2ZXIxIiwib3BlcmF0b3IiLCJ2ZXIyIiwiaW5jbHVkZXMiLCJzZW12ZXJPcGVyYXRvciIsInNhdGlzZmllcyIsInF1b3RlIiwidW5sZWFrU3RyaW5nIiwicyIsInN1YnN0ciIsInBsdXJhbGl6ZSIsIndvcmQiLCJjb3VudCIsIm9wdGlvbnMiLCJpbmNsdXNpdmUiLCJpc0Jvb2xlYW4iLCJ0b0luTWVtb3J5QmFzZTY0Iiwic3JjUGF0aCIsIm9wdHMiLCJpc0RpcmVjdG9yeSIsIm1heFNpemUiLCJyZXN1bHRCdWZmZXJzIiwicmVzdWx0QnVmZmVyc1NpemUiLCJyZXN1bHRXcml0ZVN0cmVhbSIsInN0cmVhbSIsIldyaXRhYmxlIiwid3JpdGUiLCJidWZmZXIiLCJlbmNvZGluZyIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwiZW1pdCIsInJlYWRlclN0cmVhbSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJiYXNlNjRFbmNvZGVyU3RyZWFtIiwiQmFzZTY0RW5jb2RlIiwicmVzdWx0V3JpdGVTdHJlYW1Qcm9taXNlIiwib25jZSIsImUiLCJ1bnBpcGUiLCJkZXN0cm95IiwicmVhZFN0cmVhbVByb21pc2UiLCJtZXNzYWdlIiwicGlwZSIsImFsbCIsImNvbmNhdCIsImdldExvY2tGaWxlR3VhcmQiLCJsb2NrRmlsZSIsInRpbWVvdXQiLCJ0cnlSZWNvdmVyeSIsImxvY2siLCJwcm9taXNpZnkiLCJfbG9ja2ZpbGUiLCJjaGVjayIsInVubG9jayIsImd1YXJkIiwiYmVoYXZpb3IiLCJ0cmllZFJlY292ZXJ5IiwiY2hlY2tTeW5jIiwid2FpdCIsImxvY2tTeW5jIiwidW5sb2NrU3luYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBR0EsTUFBTUEsMEJBQTBCLEdBQUcscUNBQW5DOztBQUNBLE1BQU1DLEdBQUcsR0FBRyxJQUFaOztBQUNBLE1BQU1DLEdBQUcsR0FBR0QsR0FBRyxHQUFHLElBQWxCOztBQUNBLE1BQU1FLEdBQUcsR0FBR0QsR0FBRyxHQUFHLElBQWxCOzs7QUFFTyxTQUFTRSxVQUFULENBQXFCQyxHQUFyQixFQUEwQjtBQUMvQixTQUFPQyxnQkFBRUMsUUFBRixDQUFXRixHQUFYLEtBQW1CQSxHQUFHLEtBQUssRUFBbEM7QUFDRDs7QUFHRCxTQUFTRyxRQUFULENBQW1CSCxHQUFuQixFQUF3QjtBQUN0QixNQUFJSSxNQUFNLEdBQUcsS0FBYjs7QUFFQSxNQUFJSCxnQkFBRUksUUFBRixDQUFXTCxHQUFYLENBQUosRUFBcUI7QUFDbkJJLElBQUFBLE1BQU0sR0FBRyxDQUFDSCxnQkFBRUssS0FBRixD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bmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgb3MgZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnLi9mcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge1xuICAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9zaGVsbC1xdW90ZVxuICBxdW90ZSBhcyBzaGVsbFF1b3RlLFxuICBwYXJzZSBhcyBzaGVsbFBhcnNlLFxufSBmcm9tICdzaGVsbC1xdW90ZSc7XG5pbXBvcnQgcGx1cmFsaXplTGliIGZyb20gJ3BsdXJhbGl6ZSc7XG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBCYXNlNjRFbmNvZGUgfSBmcm9tICdiYXNlNjQtc3RyZWFtJztcbmltcG9ydCB7XG4gIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL3V1aWRcbiAgdjEgYXMgdXVpZFYxLCB2MyBhcyB1dWlkVjMsXG4gIHY0IGFzIHV1aWRWNCwgdjUgYXMgdXVpZFY1XG59IGZyb20gJ3V1aWQnO1xuaW1wb3J0IF9sb2NrZmlsZSBmcm9tICdsb2NrZmlsZSc7XG5cblxuY29uc3QgVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIgPSAnZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YnO1xuY29uc3QgS2lCID0gMTAyNDtcbmNvbnN0IE1pQiA9IEtpQiAqIDEwMjQ7XG5jb25zdCBHaUIgPSBNaUIgKiAxMDI0O1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzQ29udGVudCAodmFsKSB7XG4gIHJldHVybiBfLmlzU3RyaW5nKHZhbCkgJiYgdmFsICE9PSAnJztcbn1cblxuLy8gcmV0dXJuIHRydWUgaWYgdGhlIHRoZSB2YWx1ZSBpcyBub3QgdW5kZWZpbmVkLCBudWxsLCBvciBOYU4uXG5mdW5jdGlvbiBoYXNWYWx1ZSAodmFsKSB7XG4gIGxldCBoYXNWYWwgPSBmYWxzZTtcbiAgLy8gYXZvaWQgaW5jb3JyZWN0bHkgZXZhbHVhdGluZyBgMGAgYXMgZmFsc2VcbiAgaWYgKF8uaXNOdW1iZXIodmFsKSkge1xuICAgIGhhc1ZhbCA9ICFfLmlzTmFOKHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgaGFzVmFsID0gIV8uaXNVbmRlZmluZWQodmFsKSAmJiAhXy5pc051bGwodmFsKTtcbiAgfVxuXG4gIHJldHVybiBoYXNWYWw7XG59XG5cbi8vIGVzY2FwZSBzcGFjZXMgaW4gc3RyaW5nLCBmb3IgY29tbWFuZGxpbmUgY2FsbHNcbmZ1bmN0aW9uIGVzY2FwZVNwYWNlIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvIC8pLmpvaW4oJ1xcXFwgJyk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZVNwZWNpYWxDaGFycyAoc3RyLCBxdW90ZUVzY2FwZSkge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGlmICh0eXBlb2YgcXVvdGVFc2NhcGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcXVvdGVFc2NhcGUgPSBmYWxzZTtcbiAgfVxuICBzdHIgPSBzdHJcbiAgICAucmVwbGFjZSgvW1xcXFxdL2csICdcXFxcXFxcXCcpXG4gICAgLnJlcGxhY2UoL1tcXC9dL2csICdcXFxcLycpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAucmVwbGFjZSgvW1xcZl0vZywgJ1xcXFxmJylcbiAgICAucmVwbGFjZSgvW1xcbl0vZywgJ1xcXFxuJylcbiAgICAucmVwbGFjZSgvW1xccl0vZywgJ1xcXFxyJylcbiAgICAucmVwbGFjZSgvW1xcdF0vZywgJ1xcXFx0JylcbiAgICAucmVwbGFjZSgvW1xcXCJdL2csICdcXFxcXCInKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgLnJlcGxhY2UoL1xcXFwnL2csIFwiXFxcXCdcIik7XG4gIGlmIChxdW90ZUVzY2FwZSkge1xuICAgIGxldCByZSA9IG5ldyBSZWdFeHAocXVvdGVFc2NhcGUsICdnJyk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UocmUsIGBcXFxcJHtxdW90ZUVzY2FwZX1gKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiBsb2NhbElwICgpIHtcbiAgbGV0IGlwID0gXy5jaGFpbihvcy5uZXR3b3JrSW50ZXJmYWNlcygpKVxuICAgIC52YWx1ZXMoKVxuICAgIC5mbGF0dGVuKClcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gKHZhbC5mYW1pbHkgPT09ICdJUHY0JyAmJiB2YWwuaW50ZXJuYWwgPT09IGZhbHNlKTtcbiAgICB9KVxuICAgIC5tYXAoJ2FkZHJlc3MnKVxuICAgIC5maXJzdCgpXG4gICAgLnZhbHVlKCk7XG4gIHJldHVybiBpcDtcbn1cblxuLypcbiAqIENyZWF0ZXMgYSBwcm9taXNlIHRoYXQgaXMgY2FuY2VsbGFibGUsIGFuZCB3aWxsIHRpbWVvdXRcbiAqIGFmdGVyIGBtc2AgZGVsYXlcbiAqL1xuZnVuY3Rpb24gY2FuY2VsbGFibGVEZWxheSAobXMpIHtcbiAgbGV0IHRpbWVyO1xuICBsZXQgcmVzb2x2ZTtcbiAgbGV0IHJlamVjdDtcblxuICBjb25zdCBkZWxheSA9IG5ldyBCLlByb21pc2UoKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgcmVzb2x2ZSA9IF9yZXNvbHZlO1xuICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9LCBtcyk7XG4gIH0pO1xuXG4gIC8vIG92ZXJyaWRlIEJsdWViaXJkJ3MgYGNhbmNlbGAsIHdoaWNoIGRvZXMgbm90IHdvcmsgd2hlbiB1c2luZyBgYXdhaXRgIG9uXG4gIC8vIGEgcHJvbWlzZSwgc2luY2UgYHJlc29sdmVgL2ByZWplY3RgIGFyZSBuZXZlciBjYWxsZWRcbiAgZGVsYXkuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgcmVqZWN0KG5ldyBCLkNhbmNlbGxhdGlvbkVycm9yKCkpO1xuICB9O1xuICByZXR1cm4gZGVsYXk7XG59XG5cbmZ1bmN0aW9uIG11bHRpUmVzb2x2ZSAocm9vdHMsIC4uLmFyZ3MpIHtcbiAgcmV0dXJuIHJvb3RzLm1hcCgocm9vdCkgPT4gcGF0aC5yZXNvbHZlKHJvb3QsIC4uLmFyZ3MpKTtcbn1cblxuLypcbiAqIFBhcnNlcyBhbiBvYmplY3QgaWYgcG9zc2libGUuIE90aGVyd2lzZSByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCBwYXJzaW5nLlxuICovXG5mdW5jdGlvbiBzYWZlSnNvblBhcnNlIChvYmopIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShvYmopO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICAvLyBpZ25vcmU6IHRoaXMgaXMgbm90IGpzb24gcGFyc2FibGVcbiAgICByZXR1cm4gb2JqO1xuICB9XG59XG5cbi8qXG4gKiBTdHJpbmdpZmllcyB0aGUgb2JqZWN0IHBhc3NlZCBpbiwgY29udmVydGluZyBCdWZmZXJzIGludG8gU3RyaW5ncyBmb3IgYmV0dGVyXG4gKiBkaXNwbGF5LiBUaGlzIG1pbWljcyBKU09OLnN0cmluZ2lmeSAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0pTT04vc3RyaW5naWZ5KVxuICogZXhjZXB0IHRoZSBgcmVwbGFjZXJgIGFyZ3VtZW50IGNhbiBvbmx5IGJlIGEgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iaiAtIHRoZSBvYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHs/ZnVuY3Rpb259IHJlcGxhY2VyIC0gZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHRoZSBwcm9wZXJ0aWVzIGFkZGVkIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCBvYmplY3RcbiAqIEBwYXJhbSB7P251bWJlcnxzdHJpbmd9IHNwYWNlIC0gdXNlZCB0byBpbnNlcnQgd2hpdGUgc3BhY2UgaW50byB0aGUgb3V0cHV0IEpTT05cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGZvciByZWFkYWJpbGl0eSBwdXJwb3Nlcy4gRGVmYXVsdHMgdG8gMlxuICogcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBKU09OIG9iamVjdCBzZXJpYWxpemVkIGFzIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGpzb25TdHJpbmdpZnkgKG9iaiwgcmVwbGFjZXIsIHNwYWNlID0gMikge1xuICAvLyBpZiBubyByZXBsYWNlciBpcyBwYXNzZWQsIG9yIGl0IGlzIG5vdCBhIGZ1bmN0aW9uLCBqdXN0IHVzZSBhIHBhc3MtdGhyb3VnaFxuICBpZiAoIV8uaXNGdW5jdGlvbihyZXBsYWNlcikpIHtcbiAgICByZXBsYWNlciA9IChrLCB2KSA9PiB2O1xuICB9XG5cbiAgLy8gQnVmZmVycyBjYW5ub3QgYmUgc2VyaWFsaXplZCBpbiBhIHJlYWRhYmxlIHdheVxuICBjb25zdCBidWZmZXJUb0pTT04gPSBCdWZmZXIucHJvdG90eXBlLnRvSlNPTjtcbiAgZGVsZXRlIEJ1ZmZlci5wcm90b3R5cGUudG9KU09OO1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkVmFsdWUgPSBCdWZmZXIuaXNCdWZmZXIodmFsdWUpXG4gICAgICAgID8gdmFsdWUudG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgICA6IHZhbHVlO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyKGtleSwgdXBkYXRlZFZhbHVlKTtcbiAgICB9LCBzcGFjZSk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gcmVzdG9yZSB0aGUgZnVuY3Rpb24sIHNvIGFzIHRvIG5vdCBicmVhayBmdXJ0aGVyIHNlcmlhbGl6YXRpb25cbiAgICBCdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGJ1ZmZlclRvSlNPTjtcbiAgfVxufVxuXG4vKlxuICogUmVtb3ZlcyB0aGUgd3JhcHBlciBmcm9tIGVsZW1lbnQsIGlmIGl0IGV4aXN0cy5cbiAqICAgeyBFTEVNRU5UOiA0IH0gYmVjb21lcyA0XG4gKiAgIHsgZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2Y6IDUgfSBiZWNvbWVzIDVcbiAqL1xuZnVuY3Rpb24gdW53cmFwRWxlbWVudCAoZWwpIHtcbiAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBbVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIsICdFTEVNRU5UJ10pIHtcbiAgICBpZiAoXy5oYXMoZWwsIHByb3BOYW1lKSkge1xuICAgICAgcmV0dXJuIGVsW3Byb3BOYW1lXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsO1xufVxuXG5mdW5jdGlvbiB3cmFwRWxlbWVudCAoZWxlbWVudElkKSB7XG4gIHJldHVybiB7XG4gICAgRUxFTUVOVDogZWxlbWVudElkLFxuICAgIFtXM0NfV0VCX0VMRU1FTlRfSURFTlRJRklFUl06IGVsZW1lbnRJZCxcbiAgfTtcbn1cblxuLypcbiAqIFJldHVybnMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgYWxsIHByb3BlcnRpZXMgaW4gdGhlIG9yaWdpbmFsIGVsZW1lbnRcbiAqIHdoaWNoIHdlcmUgdHJ1dGh5IGdpdmVuIHRoZSBwcmVkaWNhdGUuXG4gKiBJZiB0aGUgcHJlZGljYXRlIGlzXG4gKiAgICogbWlzc2luZyAtIGl0IHdpbGwgcmVtb3ZlIGFsbCBwcm9wZXJ0aWVzIHdob3NlIHZhbHVlcyBhcmUgYHVuZGVmaW5lZGBcbiAqICAgKiBhIHNjYWxhciAtIGl0IHdpbGwgdGVzdCBhbGwgcHJvcGVydGllcycgdmFsdWVzIGFnYWluc3QgdGhhdCB2YWx1ZVxuICogICAqIGEgZnVuY3Rpb24gLSBpdCB3aWxsIHBhc3MgZWFjaCB2YWx1ZSBhbmQgdGhlIG9yaWdpbmFsIG9iamVjdCBpbnRvIHRoZSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBmaWx0ZXJPYmplY3QgKG9iaiwgcHJlZGljYXRlKSB7XG4gIGxldCBuZXdPYmogPSBfLmNsb25lKG9iaik7XG4gIGlmIChfLmlzVW5kZWZpbmVkKHByZWRpY2F0ZSkpIHtcbiAgICAvLyByZW1vdmUgYW55IGVsZW1lbnQgZnJvbSB0aGUgb2JqZWN0IHdob3NlIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgIHByZWRpY2F0ZSA9ICh2KSA9PiAhXy5pc1VuZGVmaW5lZCh2KTtcbiAgfSBlbHNlIGlmICghXy5pc0Z1bmN0aW9uKHByZWRpY2F0ZSkpIHtcbiAgICAvLyBtYWtlIHByZWRpY2F0ZSBpbnRvIGEgZnVuY3Rpb25cbiAgICBjb25zdCB2YWx1ZVByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICBwcmVkaWNhdGUgPSAodikgPT4gdiA9PT0gdmFsdWVQcmVkaWNhdGU7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgIGlmICghcHJlZGljYXRlKG9ialtrZXldLCBvYmopKSB7XG4gICAgICBkZWxldGUgbmV3T2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPYmo7XG59XG5cbi8qKlxuICogQ29udmVydHMgbnVtYmVyIG9mIGJ5dGVzIHRvIGEgcmVhZGFibGUgc2l6ZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBieXRlcyAtIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzLlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGZvciBleGFtcGxlXG4gKiAgICAgICAgICAgICAgICAgICAnMS4wMCBLQicgZm9yICcxMDI0IEInXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYnl0ZXMgY291bnQgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIG9yXG4gKiAgICAgICAgICAgICAgICAgaWYgaXQgaXMgbGVzcyB0aGFuIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHRvUmVhZGFibGVTaXplU3RyaW5nIChieXRlcykge1xuICBjb25zdCBpbnRCeXRlcyA9IHBhcnNlSW50KFN0cmluZyhieXRlcyksIDEwKTtcbiAgaWYgKGlzTmFOKGludEJ5dGVzKSB8fCBpbnRCeXRlcyA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0ICcke2J5dGVzfScgdG8gYSByZWFkYWJsZSBzaXplIGZvcm1hdGApO1xuICB9XG4gIGlmIChpbnRCeXRlcyA+PSBHaUIpIHtcbiAgICByZXR1cm4gYCR7KGludEJ5dGVzIC8gKEdpQiAqIDEuMCkpLnRvRml4ZWQoMil9IEdCYDtcbiAgfSBlbHNlIGlmIChpbnRCeXRlcyA+PSBNaUIpIHtcbiAgICByZXR1cm4gYCR7KGludEJ5dGVzIC8gKE1pQiAqIDEuMCkpLnRvRml4ZWQoMil9IE1CYDtcbiAgfSBlbHNlIGlmIChpbnRCeXRlcyA+PSBLaUIpIHtcbiAgICByZXR1cm4gYCR7KGludEJ5dGVzIC8gKEtpQiAqIDEuMCkpLnRvRml4ZWQoMil9IEtCYDtcbiAgfVxuICByZXR1cm4gYCR7aW50Qnl0ZXN9IEJgO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBwYXRoIGlzIGEgc3VicGF0aCBvZiB0aGVcbiAqIHBhcnRpY3VsYXIgcm9vdCBmb2xkZXIuIEJvdGggcGF0aHMgY2FuIGluY2x1ZGUgLi4gYW5kIC4gc3BlY2lmaWVyc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcmlnaW5hbFBhdGggVGhlIGFic29sdXRlIGZpbGUvZm9sZGVyIHBhdGhcbiAqIEBwYXJhbSB7c3RyaW5nfSByb290IFRoZSBhYnNvbHV0ZSByb290IGZvbGRlciBwYXRoXG4gKiBAcGFyYW0gez9ib29sZWFufSBmb3JjZVBvc2l4IFNldCBpdCB0byB0cnVlIGlmIHBhdGhzIG11c3QgYmUgaW50ZXJwcmV0ZWQgaW4gUE9TSVggZm9ybWF0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZ2l2ZW4gb3JpZ2luYWwgcGF0aCBpcyB0aGUgc3VicGF0aCBvZiB0aGUgcm9vdCBmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBhbnkgb2YgdGhlIGdpdmVuIHBhdGhzIGlzIG5vdCBhYnNvbHV0ZVxuICovXG5mdW5jdGlvbiBpc1N1YlBhdGggKG9yaWdpbmFsUGF0aCwgcm9vdCwgZm9yY2VQb3NpeCA9IG51bGwpIHtcbiAgY29uc3QgcGF0aE9iaiA9IGZvcmNlUG9zaXggPyBwYXRoLnBvc2l4IDogcGF0aDtcbiAgZm9yIChjb25zdCBwIG9mIFtvcmlnaW5hbFBhdGgsIHJvb3RdKSB7XG4gICAgaWYgKCFwYXRoT2JqLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7cH0nIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFic29sdXRlIHBhdGhgKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSBwYXRoT2JqLm5vcm1hbGl6ZShyb290KTtcbiAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoT2JqLm5vcm1hbGl6ZShvcmlnaW5hbFBhdGgpO1xuICByZXR1cm4gbm9ybWFsaXplZFBhdGguc3RhcnRzV2l0aChub3JtYWxpemVkUm9vdCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHBhdGhzIGFyZSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlIHN5c3RlbVxuICogZGVzdGluYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGgxIC0gQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCB0byBhIGZpbGUvZm9sZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aDIgLSBBYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHRvIGEgZmlsZS9mb2xkZXJcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwYXRoTiAtIFplcm8gb3IgbW9yZSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRocyB0byBmaWxlcy9mb2xkZXJzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gdHJ1ZSBpZiBhbGwgcGF0aHMgYXJlIHBvaW50aW5nIHRvIHRoZSBzYW1lIGZpbGUgc3lzdGVtIGl0ZW1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNTYW1lRGVzdGluYXRpb24gKHBhdGgxLCBwYXRoMiwgLi4ucGF0aE4pIHtcbiAgY29uc3QgYWxsUGF0aHMgPSBbcGF0aDEsIHBhdGgyLCAuLi5wYXRoTl07XG4gIGlmICghYXdhaXQgQi5yZWR1Y2UoYWxsUGF0aHMsIGFzeW5jIChhLCBiKSA9PiBhICYmIGF3YWl0IGZzLmV4aXN0cyhiKSwgdHJ1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBhcmVBbGxJdGVtc0VxdWFsID0gKGFycikgPT4gISFhcnIucmVkdWNlKChhLCBiKSA9PiBhID09PSBiID8gYSA6IE5hTik7XG4gIGlmIChhcmVBbGxJdGVtc0VxdWFsKGFsbFBhdGhzKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gTm9kZSAxMC41LjAgaW50cm9kdWNlZCBiaWdpbnQgc3VwcG9ydCBpbiBzdGF0LCB3aGljaCBhbGxvd3MgZm9yIG1vcmUgcHJlY2lzaW9uXG4gIC8vIGhvd2V2ZXIgYmVsb3cgdGhhdCB0aGUgb3B0aW9ucyBnZXQgaW50ZXJwcmV0ZWQgYXMgdGhlIGNhbGxiYWNrXG4gIC8vIFRPRE86IHJlbW92ZSB3aGVuIE5vZGUgMTAgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZFxuICBsZXQgbWFwQ2IgPSBhc3luYyAoeCkgPT4gYXdhaXQgZnMuc3RhdCh4LCB7XG4gICAgYmlnaW50OiB0cnVlLFxuICB9KS5pbm87XG4gIGlmIChzZW12ZXIubHQocHJvY2Vzcy52ZXJzaW9uLCAnMTAuNS4wJykpIHtcbiAgICBtYXBDYiA9IGFzeW5jICh4KSA9PiBhd2FpdCBmcy5zdGF0KHgpLmlubztcbiAgfVxuICByZXR1cm4gYXJlQWxsSXRlbXNFcXVhbChhd2FpdCBCLm1hcChhbGxQYXRocywgbWFwQ2IpKTtcbn1cblxuLyoqXG4gKiBDb2VyY2VzIHRoZSBnaXZlbiBudW1iZXIvc3RyaW5nIHRvIGEgdmFsaWQgdmVyc2lvbiBzdHJpbmdcbiAqXG4gKiBAdGVtcGxhdGUge2Jvb2xlYW59IFtTdHJpY3Q9dHJ1ZV1cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXIgLSBWZXJzaW9uIHN0cmluZyB0byBjb2VyY2VcbiAqIEBwYXJhbSB7U3RyaWN0fSBbc3RyaWN0XSAtIElmIGB0cnVlYCB0aGVuIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93blxuICogaWYgYHZlcmAgY2Fubm90IGJlIGNvZXJjZWRcbiAqIEByZXR1cm5zIHtTdHJpY3QgZXh0ZW5kcyB0cnVlID8gc3RyaW5nIDogc3RyaW5nfG51bGx9IENvZXJjZWQgdmVyc2lvbiBudW1iZXIgb3IgbnVsbCBpZiB0aGUgc3RyaW5nIGNhbm5vdCBiZVxuICogY29lcmNlZCBhbmQgc3RyaWN0IG1vZGUgaXMgZGlzYWJsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBzdHJpY3QgbW9kZSBpcyBlbmFibGVkIGFuZCBgdmVyYCBjYW5ub3QgYmUgY29lcmNlZFxuICovXG5mdW5jdGlvbiBjb2VyY2VWZXJzaW9uICh2ZXIsIHN0cmljdCA9IC8qKiBAdHlwZSB7U3RyaWN0fSAqLyh0cnVlKSkge1xuICBjb25zdCByZXN1bHQgPSBzZW12ZXIudmFsaWQoc2VtdmVyLmNvZXJjZShgJHt2ZXJ9YCkpO1xuICBpZiAoc3RyaWN0ICYmICFyZXN1bHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke3Zlcn0nIGNhbm5vdCBiZSBjb2VyY2VkIHRvIGEgdmFsaWQgdmVyc2lvbiBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gLyoqIEB0eXBlIHtTdHJpY3QgZXh0ZW5kcyB0cnVlID8gc3RyaW5nIDogc3RyaW5nfG51bGx9ICovKHJlc3VsdCk7XG59XG5cbmNvbnN0IFNVUFBPUlRFRF9PUEVSQVRPUlMgPSBbJz09JywgJyE9JywgJz4nLCAnPCcsICc+PScsICc8PScsICc9J107XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIHZlcnNpb24gc3RyaW5nc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXIxIC0gVGhlIGZpcnN0IHZlcnNpb24gbnVtYmVyIHRvIGNvbXBhcmUuIFNob3VsZCBiZSBhIHZhbGlkXG4gKiB2ZXJzaW9uIG51bWJlciBzdXBwb3J0ZWQgYnkgc2VtdmVyIHBhcnNlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2ZXIyIC0gVGhlIHNlY29uZCB2ZXJzaW9uIG51bWJlciB0byBjb21wYXJlLiBTaG91bGQgYmUgYSB2YWxpZFxuICogdmVyc2lvbiBudW1iZXIgc3VwcG9ydGVkIGJ5IHNlbXZlciBwYXJzZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0b3IgLSBPbmUgb2Ygc3VwcG9ydGVkIHZlcnNpb24gbnVtYmVyIG9wZXJhdG9yczpcbiAqID09LCAhPSwgPiwgPCwgPD0sID49LCA9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBvciBmYWxzZSBkZXBlbmRpbmcgb24gdGhlIGFjdHVhbCBjb21wYXJpc29uIHJlc3VsdFxuICogQHRocm93cyB7RXJyb3J9IGlmIGFuIHVuc3VwcG9ydGVkIG9wZXJhdG9yIGlzIHN1cHBsaWVkIG9yIGFueSBvZiB0aGUgc3VwcGxpZWRcbiAqIHZlcnNpb24gc3RyaW5ncyBjYW5ub3QgYmUgY29lcmNlZFxuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnMgKHZlcjEsIG9wZXJhdG9yLCB2ZXIyKSB7XG4gIGlmICghU1VQUE9SVEVEX09QRVJBVE9SUy5pbmNsdWRlcyhvcGVyYXRvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtvcGVyYXRvcn0nIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZC4gYCArXG4gICAgICBgT25seSAnJHtKU09OLnN0cmluZ2lmeShTVVBQT1JURURfT1BFUkFUT1JTKX0nIG9wZXJhdG9ycyBhcmUgc3VwcG9ydGVkYCk7XG4gIH1cblxuICBjb25zdCBzZW12ZXJPcGVyYXRvciA9IFsnPT0nLCAnIT0nXS5pbmNsdWRlcyhvcGVyYXRvcikgPyAnPScgOiBvcGVyYXRvcjtcbiAgY29uc3QgcmVzdWx0ID0gc2VtdmVyLnNhdGlzZmllcyhjb2VyY2VWZXJzaW9uKHZlcjEpLCBgJHtzZW12ZXJPcGVyYXRvcn0ke2NvZXJjZVZlcnNpb24odmVyMil9YCk7XG4gIHJldHVybiBvcGVyYXRvciA9PT0gJyE9JyA/ICFyZXN1bHQgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQWRkIGFwcHJvcHJpYXRlIHF1b3RlcyB0byBjb21tYW5kIGFyZ3VtZW50cy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9ub2RlLXNoZWxsLXF1b3RlXG4gKiBmb3IgbW9yZSBkZXRhaWxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRoYXQgd2lsbCBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGFyZ3VtZW50cywgcXVvdGVkXG4gKi9cbmZ1bmN0aW9uIHF1b3RlIChhcmdzKSB7XG4gIHJldHVybiBzaGVsbFF1b3RlKGFyZ3MpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IHRvIHdvcmthcm91bmQgdW5leHBlY3RlZCBtZW1vcnkgbGVha3NcbiAqIGNhdXNlZCBieSBOb2RlSlMgc3RyaW5nIGludGVybmluZ1xuICogYmVoYXZpb3IgZGVzY3JpYmVkIGluIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTI4NjlcbiAqXG4gKiBAcGFyYW0geyp9IHMgLSBUaGUgc3RyaW5nIHRvIHVubGVha1xuICogQHJldHVybiB7c3RyaW5nfSBFaXRoZXIgdGhlIHVubGVha2VkIHN0cmluZyBvciB0aGUgb3JpZ2luYWwgb2JqZWN0IGNvbnZlcnRlZCB0byBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdW5sZWFrU3RyaW5nIChzKSB7XG4gIHJldHVybiBgICR7c31gLnN1YnN0cigxKTtcbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIFBsdXJhbGl6ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2luY2x1c2l2ZT1mYWxzZV0gLSBXaGV0aGVyIHRvIHByZWZpeCB3aXRoIHRoZSBudW1iZXIgKGUuZy4sIDMgZHVja3MpXG4gKi9cblxuLyoqXG4gKiBHZXQgdGhlIGZvcm0gb2YgYSB3b3JkIGFwcHJvcHJpYXRlIHRvIHRoZSBjb3VudFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkIC0gVGhlIHdvcmQgdG8gcGx1cmFsaXplXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgLSBIb3cgbWFueSBvZiB0aGUgd29yZCBleGlzdFxuICogQHBhcmFtIHtQbHVyYWxpemVPcHRpb25zfGJvb2xlYW59IG9wdGlvbnMgLSBvcHRpb25zIGZvciB3b3JkIHBsdXJhbGl6YXRpb24sXG4gKiAgIG9yIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoZSBvcHRpb25zLmluY2x1c2l2ZSBwcm9wZXJ0eVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHdvcmQgcGx1cmFsaXplZCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlclxuICovXG5mdW5jdGlvbiBwbHVyYWxpemUgKHdvcmQsIGNvdW50LCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGluY2x1c2l2ZSA9IGZhbHNlO1xuICBpZiAoXy5pc0Jvb2xlYW4ob3B0aW9ucykpIHtcbiAgICAvLyBpZiBwYXNzZWQgaW4gYXMgYSBib29sZWFuXG4gICAgaW5jbHVzaXZlID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbihvcHRpb25zPy5pbmNsdXNpdmUpKSB7XG4gICAgLy8gaWYgcGFzc2VkIGluIGFzIGFuIG9wdGlvbnMgaGFzaFxuICAgIGluY2x1c2l2ZSA9IG9wdGlvbnMuaW5jbHVzaXZlO1xuICB9XG4gIHJldHVybiBwbHVyYWxpemVMaWIod29yZCwgY291bnQsIGluY2x1c2l2ZSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgRW5jb2RpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21heFNpemU9MTA3Mzc0MTgyNF0gVGhlIG1heGltdW0gc2l6ZSBvZlxuICogdGhlIHJlc3VsdGluZyBidWZmZXIgaW4gYnl0ZXMuIFRoaXMgaXMgc2V0IHRvIDFHQiBieSBkZWZhdWx0LCBiZWNhdXNlXG4gKiBBcHBpdW0gbGltaXRzIHRoZSBtYXhpbXVtIEhUVFAgYm9keSBzaXplIHRvIDFHQi4gQWxzbywgdGhlIE5vZGVKUyBoZWFwXG4gKiBzaXplIG11c3QgYmUgZW5vdWdoIHRvIGtlZXAgdGhlIHJlc3VsdGluZyBvYmplY3QgKHVzdWFsbHkgdGhpcyBzaXplIGlzXG4gKiBsaW1pdGVkIHRvIDEuNCBHQilcbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGNvbnRlbnRzIG9mIGEgbG9jYWwgZmlsZSB0byBhbiBpbi1tZW1vcnkgYmFzZS02NCBlbmNvZGVkIGJ1ZmZlci5cbiAqIFRoZSBvcGVyYXRpb24gaXMgbWVtb3J5LXVzYWdlIGZyaWVuZGx5IGFuZCBzaG91bGQgYmUgdXNlZCB3aGlsZSBlbmNvZGluZ1xuICogbGFyZ2UgZmlsZXMgdG8gYmFzZTY0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNyY1BhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSBiZWluZyBlbmNvZGVkXG4gKiBAcGFyYW0ge0VuY29kaW5nT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge1Byb21pc2U8QnVmZmVyPn0gYmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgc291cmNlIGZpbGUgYXMgbWVtb3J5IGJ1ZmZlclxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSByZWFkaW5nIHRoZSBzb3VyY2UgZmlsZVxuICogb3IgdGhlIHNvdXJjZSBmaWxlIGlzIHRvb1xuICovXG5hc3luYyBmdW5jdGlvbiB0b0luTWVtb3J5QmFzZTY0IChzcmNQYXRoLCBvcHRzID0ge30pIHtcbiAgaWYgKCEoYXdhaXQgZnMuZXhpc3RzKHNyY1BhdGgpKSB8fCAoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlOiAke3NyY1BhdGh9YCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbWF4U2l6ZSA9IDEgKiBHaUIsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHRCdWZmZXJzID0gW107XG4gIGxldCByZXN1bHRCdWZmZXJzU2l6ZSA9IDA7XG4gIGNvbnN0IHJlc3VsdFdyaXRlU3RyZWFtID0gbmV3IHN0cmVhbS5Xcml0YWJsZSh7XG4gICAgd3JpdGU6IChidWZmZXIsIGVuY29kaW5nLCBuZXh0KSA9PiB7XG4gICAgICByZXN1bHRCdWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgIHJlc3VsdEJ1ZmZlcnNTaXplICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZiAobWF4U2l6ZSA+IDAgJiYgcmVzdWx0QnVmZmVyc1NpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIHJlc3VsdFdyaXRlU3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKGBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIGAgK1xuICAgICAgICAgIGBidWZmZXIgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YCkpO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHJlYWRlclN0cmVhbSA9IGZzLmNyZWF0ZVJlYWRTdHJlYW0oc3JjUGF0aCk7XG4gIGNvbnN0IGJhc2U2NEVuY29kZXJTdHJlYW0gPSBuZXcgQmFzZTY0RW5jb2RlKCk7XG4gIGNvbnN0IHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXN1bHRXcml0ZVN0cmVhbS5vbmNlKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICByZWFkZXJTdHJlYW0udW5waXBlKGJhc2U2NEVuY29kZXJTdHJlYW0pO1xuICAgICAgYmFzZTY0RW5jb2RlclN0cmVhbS51bnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICAgICAgcmVhZGVyU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgICByZXN1bHRXcml0ZVN0cmVhbS5vbmNlKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgfSk7XG4gIGNvbnN0IHJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlYWRlclN0cmVhbS5vbmNlKCdjbG9zZScsIHJlc29sdmUpO1xuICAgIHJlYWRlclN0cmVhbS5vbmNlKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICBuZXcgRXJyb3IoYEZhaWxlZCB0byByZWFkICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgfSk7XG4gIHJlYWRlclN0cmVhbS5waXBlKGJhc2U2NEVuY29kZXJTdHJlYW0pO1xuICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuXG4gIGF3YWl0IEIuYWxsKFtyZWFkU3RyZWFtUHJvbWlzZSwgcmVzdWx0V3JpdGVTdHJlYW1Qcm9taXNlXSk7XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJlc3VsdEJ1ZmZlcnMpO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIExvY2tGaWxlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0PTEyMF0gVGhlIG1heCB0aW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIGxvY2tcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyeVJlY292ZXJ5PWZhbHNlXSBXaGV0aGVyIHRvIHRyeSBsb2NrIHJlY292ZXJ5IGlmXG4gKiB0aGUgZmlyc3QgYXR0ZW1wdCB0byBhY3F1aXJlIGl0IHRpbWVkIG91dC5cbiAqL1xuXG4vKipcbiAqIENyZWF0ZSBhbiBhc3luYyBmdW5jdGlvbiB3aGljaCwgd2hlbiBjYWxsZWQsIHdpbGwgbm90IHByb2NlZWQgdW50aWwgYSBjZXJ0YWluIGZpbGUgaXMgbm9cbiAqIGxvbmdlciBwcmVzZW50IG9uIHRoZSBzeXN0ZW0uIFRoaXMgYWxsb3dzIGZvciBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgYmVoYXZpb3IgYWNyb3NzIHByb2Nlc3Nlc1xuICogdXNpbmcgYSBrbm93biBsb2NrZmlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NrRmlsZSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmaWxlIHVzZWQgZm9yIHRoZSBsb2NrXG4gKiBAcGFyYW0ge0xvY2tGaWxlT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMgeyhiZWhhdmlvcjogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4gUHJvbWlzZTx2b2lkPn0gYXN5bmMgZnVuY3Rpb24gdGhhdCB0YWtlcyBhbm90aGVyIGFzeW5jIGZ1bmN0aW9uIGRlZmluaW5nIHRoZSBsb2NrZWRcbiAqIGJlaGF2aW9yXG4gKi9cbmZ1bmN0aW9uIGdldExvY2tGaWxlR3VhcmQgKGxvY2tGaWxlLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRpbWVvdXQgPSAxMjAsXG4gICAgdHJ5UmVjb3ZlcnkgPSBmYWxzZSxcbiAgfSA9IG9wdHM7XG5cbiAgY29uc3QgbG9jayA9IC8qKiBAdHlwZSB7KGxvY2tmaWxlOiBzdHJpbmcsIG9wdHM6IGltcG9ydCgnbG9ja2ZpbGUnKS5PcHRpb25zKT0+Qjx2b2lkPn0gKi8oQi5wcm9taXNpZnkoX2xvY2tmaWxlLmxvY2spKTtcbiAgY29uc3QgY2hlY2sgPSBCLnByb21pc2lmeShfbG9ja2ZpbGUuY2hlY2spO1xuICBjb25zdCB1bmxvY2sgPSBCLnByb21pc2lmeShfbG9ja2ZpbGUudW5sb2NrKTtcblxuICBjb25zdCBndWFyZCA9IGFzeW5jIChiZWhhdmlvcikgPT4ge1xuICAgIGxldCB0cmllZFJlY292ZXJ5ID0gZmFsc2U7XG4gICAgZG8ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gaWYgdGhlIGxvY2tmaWxlIGRvZXNuJ3QgZXhpc3QsIGxvY2sgaXQgc3luY2hyb25vdXNseSB0byBtYWtlIHN1cmUgbm8gb3RoZXIgY2FsbFxuICAgICAgICAvLyBvbiB0aGUgc2FtZSBzcGluIG9mIHRoZSBldmVudCBsb29wIGNhbiBhbHNvIGluaXRpYXRlIGEgbG9jay4gSWYgdGhlIGxvY2tmaWxlIGRvZXMgZXhpc3RcbiAgICAgICAgLy8gdGhlbiBqdXN0IHVzZSB0aGUgcmVndWxhciBhc3luYyAnbG9jaycgbWV0aG9kIHdoaWNoIHdpbGwgd2FpdCBvbiB0aGUgbG9jay5cbiAgICAgICAgaWYgKF9sb2NrZmlsZS5jaGVja1N5bmMobG9ja0ZpbGUpKSB7XG4gICAgICAgICAgYXdhaXQgbG9jayhsb2NrRmlsZSwge3dhaXQ6IHRpbWVvdXQgKiAxMDAwfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX2xvY2tmaWxlLmxvY2tTeW5jKGxvY2tGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKF8uaW5jbHVkZXMoZS5tZXNzYWdlLCAnRUVYSVNUJykgJiYgdHJ5UmVjb3ZlcnkgJiYgIXRyaWVkUmVjb3ZlcnkpIHtcbiAgICAgICAgICAvLyBUaGVyZSBjb3VsZCBiZSBjYXNlcyB3aGVyZSBhIHByb2Nlc3MgaGFzIGJlZW4gZm9yY2VmdWxseSB0ZXJtaW5hdGVkXG4gICAgICAgICAgLy8gd2l0aG91dCBhIGNoYW5jZSB0byBjbGVhbiB1cCBwZW5kaW5nIGxvY2tzOiBodHRwczovL2dpdGh1Yi5jb20vbnBtL2xvY2tmaWxlL2lzc3Vlcy8yNlxuICAgICAgICAgIF9sb2NrZmlsZS51bmxvY2tTeW5jKGxvY2tGaWxlKTtcbiAgICAgICAgICB0cmllZFJlY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBhY3F1aXJlIGxvY2sgb24gJyR7bG9ja0ZpbGV9JyBhZnRlciAke3RpbWVvdXR9cy4gYCArXG4gICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBiZWhhdmlvcigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyB3aGV0aGVyIHRoZSBiZWhhdmlvciBzdWNjZWVkZWQgb3Igbm90LCBnZXQgcmlkIG9mIHRoZSBsb2NrXG4gICAgICBhd2FpdCB1bmxvY2sobG9ja0ZpbGUpO1xuICAgIH1cbiAgfTtcblxuICBndWFyZC5jaGVjayA9IGFzeW5jICgpID0+IGF3YWl0IGNoZWNrKGxvY2tGaWxlKTtcblxuICByZXR1cm4gZ3VhcmQ7XG59XG5cbmV4cG9ydCB7XG4gIGhhc1ZhbHVlLCBlc2NhcGVTcGFjZSwgZXNjYXBlU3BlY2lhbENoYXJzLCBsb2NhbElwLCBjYW5jZWxsYWJsZURlbGF5LFxuICBtdWx0aVJlc29sdmUsIHNhZmVKc29uUGFyc2UsIHdyYXBFbGVtZW50LCB1bndyYXBFbGVtZW50LCBmaWx0ZXJPYmplY3QsXG4gIHRvUmVhZGFibGVTaXplU3RyaW5nLCBpc1N1YlBhdGgsIFczQ19XRUJfRUxFTUVOVF9JREVOVElGSUVSLFxuICBpc1NhbWVEZXN0aW5hdGlvbiwgY29tcGFyZVZlcnNpb25zLCBjb2VyY2VWZXJzaW9uLCBxdW90ZSwgdW5sZWFrU3RyaW5nLFxuICBqc29uU3RyaW5naWZ5LCBwbHVyYWxpemUsIEdpQiwgTWlCLCBLaUIsIHRvSW5NZW1vcnlCYXNlNjQsXG4gIHV1aWRWMSwgdXVpZFYzLCB1dWlkVjQsIHV1aWRWNSwgc2hlbGxQYXJzZSwgZ2V0TG9ja0ZpbGVHdWFyZFxufTtcbiJdfQ==
package/build/lib/zip.js CHANGED
@@ -27,8 +27,6 @@ var _fs = require("fs");
27
27
 
28
28
  var _path = _interopRequireDefault(require("path"));
29
29
 
30
- var _mkdirp = require("../lib/mkdirp");
31
-
32
30
  var _stream = _interopRequireDefault(require("stream"));
33
31
 
34
32
  var _fs2 = _interopRequireDefault(require("./fs"));
@@ -247,12 +245,12 @@ async function _extractEntryTo(zipFile, entry, destDir) {
247
245
 
248
246
  if (/\/$/.test(entry.fileName)) {
249
247
  if (!(await _fs2.default.exists(dstPath))) {
250
- await (0, _mkdirp.mkdirp)(dstPath);
248
+ await _fs2.default.mkdirp(dstPath);
251
249
  }
252
250
 
253
251
  return;
254
252
  } else if (!(await _fs2.default.exists(_path.default.dirname(dstPath)))) {
255
- await (0, _mkdirp.mkdirp)(_path.default.dirname(dstPath));
253
+ await _fs2.default.mkdirp(_path.default.dirname(dstPath));
256
254
  }
257
255
 
258
256
  const writeStream = (0, _fs.createWriteStream)(dstPath, {
@@ -455,7 +453,5 @@ var _default = {
455
453
  assertValidZip,
456
454
  toArchive
457
455
  };
458
- exports.default = _default;require('source-map-support').install();
459
-
460
-
461
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi96aXAuanMiXSwibmFtZXMiOlsib3BlblppcCIsIkIiLCJwcm9taXNpZnkiLCJ5YXV6bCIsIm9wZW4iLCJwaXBlbGluZSIsInN0cmVhbSIsIlpJUF9NQUdJQyIsIklGTVQiLCJJRkRJUiIsIklGTE5LIiwiWmlwRXh0cmFjdG9yIiwiY29uc3RydWN0b3IiLCJzb3VyY2VQYXRoIiwib3B0cyIsInppcFBhdGgiLCJjYW5jZWxlZCIsImV4dHJhY3RGaWxlTmFtZSIsImVudHJ5IiwiXyIsImlzQnVmZmVyIiwiZmlsZU5hbWUiLCJ0b1N0cmluZyIsImZpbGVOYW1lc0VuY29kaW5nIiwiZXh0cmFjdCIsImRpciIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsImRlY29kZVN0cmluZ3MiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJlcnIiLCJyZWFkRW50cnkiLCJzdGFydHNXaXRoIiwiZGVzdERpciIsInBhdGgiLCJkaXJuYW1lIiwiam9pbiIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJjYW5vbmljYWxEZXN0RGlyIiwicmVhbHBhdGgiLCJyZWxhdGl2ZURlc3REaXIiLCJyZWxhdGl2ZSIsInNwbGl0Iiwic2VwIiwiaW5jbHVkZXMiLCJFcnJvciIsImV4dHJhY3RFbnRyeSIsImNsb3NlIiwiZGVzdCIsIm1vZGUiLCJleHRlcm5hbEZpbGVBdHRyaWJ1dGVzIiwiaXNTeW1saW5rIiwiaXNEaXIiLCJlbmRzV2l0aCIsInZlcnNpb25NYWRlQnkiLCJwcm9jTW9kZSIsImdldEV4dHJhY3RlZE1vZGUiLCJta2Rpck9wdGlvbnMiLCJyZWFkU3RyZWFtIiwib3BlblJlYWRTdHJlYW0iLCJiaW5kIiwibGluayIsInN5bWxpbmsiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImVudHJ5TW9kZSIsImRlZmF1bHREaXJNb2RlIiwiZGVmYXVsdEZpbGVNb2RlIiwicGFyc2VJbnQiLCJleHRyYWN0QWxsVG8iLCJ6aXBGaWxlUGF0aCIsImlzQWJzb2x1dGUiLCJ1c2VTeXN0ZW1VbnppcCIsImV4dHJhY3RXaXRoU3lzdGVtVW56aXAiLCJsb2ciLCJ3YXJuIiwic3RkZXJyIiwibWVzc2FnZSIsImV4dHJhY3RvciIsImlzV2luZG93c0hvc3QiLCJleGVjdXRhYmxlUGF0aCIsImdldEV4ZWN1dGFibGVQYXRoIiwiZSIsIl9leHRyYWN0RW50cnlUbyIsInppcEZpbGUiLCJkc3RQYXRoIiwidGVzdCIsImV4aXN0cyIsIndyaXRlU3RyZWFtIiwiZmxhZ3MiLCJ3cml0ZVN0cmVhbVByb21pc2UiLCJvbmNlIiwiemlwUmVhZFN0cmVhbSIsInppcFJlYWRTdHJlYW1Qcm9taXNlIiwicGlwZSIsImFsbCIsInJlYWRFbnRyaWVzIiwib25FbnRyeSIsInJlcyIsImV4dHJhY3RFbnRyeVRvIiwiZW1pdCIsInRvSW5NZW1vcnlaaXAiLCJzcmNQYXRoIiwiaXNNZXRlcmVkIiwiZW5jb2RlVG9CYXNlNjQiLCJtYXhTaXplIiwiR2lCIiwibGV2ZWwiLCJyZXN1bHRCdWZmZXJzIiwicmVzdWx0QnVmZmVyc1NpemUiLCJyZXN1bHRXcml0ZVN0cmVhbSIsIldyaXRhYmxlIiwid3JpdGUiLCJidWZmZXIiLCJlbmNvZGluZyIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwiYXJjaGl2ZSIsInpsaWIiLCJzcmNTaXplIiwiYmFzZTY0RW5jb2RlclN0cmVhbSIsIkJhc2U2NEVuY29kZSIsInJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSIsInVucGlwZSIsImFib3J0IiwiZGVzdHJveSIsInBvaW50ZXIiLCJhcmNoaXZlU3RyZWFtUHJvbWlzZSIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImRpcmVjdG9yeSIsImZpbGUiLCJuYW1lIiwiYmFzZW5hbWUiLCJmaW5hbGl6ZSIsImRlYnVnIiwiZ2V0RHVyYXRpb24iLCJhc1NlY29uZHMiLCJ0b0ZpeGVkIiwiQnVmZmVyIiwiY29uY2F0IiwiYXNzZXJ0VmFsaWRaaXAiLCJmaWxlUGF0aCIsInNpemUiLCJmZCIsImFsbG9jIiwicmVhZCIsInNpZ25hdHVyZSIsInRvQXJjaGl2ZSIsInNyYyIsInBhdHRlcm4iLCJjd2QiLCJpZ25vcmUiLCJnbG9iIiwibWVtb2l6ZSIsImJpbmFyeU5hbWUiLCJmdWxsUGF0aCIsIndoaWNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBR0Msa0JBQUVDLFNBQUYsQ0FBWUMsZUFBTUMsSUFBbEIsQ0FBaEI7O0FBQ0EsTUFBTUMsUUFBUSxHQUFHSixrQkFBRUMsU0FBRixDQUFZSSxnQkFBT0QsUUFBbkIsQ0FBakI7O0FBQ0EsTUFBTUUsU0FBUyxHQUFHLElBQWxCO0FBQ0EsTUFBTUMsSUFBSSxHQUFHLEtBQWI7QUFDQSxNQUFNQyxLQUFLLEdBQUcsS0FBZDtBQUNBLE1BQU1DLEtBQUssR0FBRyxLQUFkOztBQUdBLE1BQU1DLFlBQU4sQ0FBbUI7QUFDakJDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxJQUFJLEdBQUcsRUFBckIsRUFBeUI7QUFDbEMsU0FBS0MsT0FBTCxHQUFlRixVQUFmO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQixLQUFoQjtBQUNEOztBQUVEQyxFQUFBQSxlQUFlLENBQUVDLEtBQUYsRUFBUztBQUN0QixXQUFPQyxnQkFBRUMsUUFBRixDQUFXRixLQUFLLENBQUNHLFFBQWpCLElBQTZCSCxLQUFLLENBQUNHLFFBQU4sQ0FBZUMsUUFBZixDQUF3QixLQUFLUixJQUFMLENBQVVTLGlCQUFsQyxDQUE3QixHQUFvRkwsS0FBSyxDQUFDRyxRQUFqRztBQUNEOztBQUVZLFFBQVBHLE9BQU8sR0FBSTtBQUNmLFVBQU07QUFDSkMsTUFBQUEsR0FESTtBQUVKRixNQUFBQTtBQUZJLFFBR0YsS0FBS1QsSUFIVDtBQUlBLFNBQUtZLE9BQUwsR0FB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ZXpILE1BQWY7QUFDQW1ILE1BQUFBLE9BQU8sQ0FBQ08sS0FBUjtBQUNBUCxNQUFBQSxPQUFPLENBQUNRLE9BQVI7QUFDQW5HLE1BQUFBLE1BQU0sQ0FBQ3VELENBQUQsQ0FBTjtBQUNELEtBTkgsRUFPR3RELEVBUEgsQ0FPTSxRQVBOLEVBT2dCRixPQVBoQjtBQVFBNEYsSUFBQUEsT0FBTyxDQUFDb0IsUUFBUjtBQUNELEdBakJZLENBQWI7QUFrQkQ7O0FBTUQsTUFBTXpELGlCQUFpQixHQUFHakUsZ0JBQUU4SSxPQUFGLENBSXhCLGVBQWU3RSxpQkFBZixDQUFrQzhFLFVBQWxDLEVBQThDO0FBQzVDLFFBQU1DLFFBQVEsR0FBRyxNQUFNNUgsYUFBRzZILEtBQUgsQ0FBU0YsVUFBVCxDQUF2Qjs7QUFDQXJGLGtCQUFJaUUsS0FBSixDQUFXLG9CQUFYLEVBQWdDb0IsVUFBaEMsRUFBNENDLFFBQTVDOztBQUNBLFNBQU9BLFFBQVA7QUFDRCxDQVJ1QixDQUExQjs7ZUFhZTtBQUFFM0YsRUFBQUEsWUFBRjtBQUFnQjJCLEVBQUFBLFdBQWhCO0FBQTZCSyxFQUFBQSxhQUE3QjtBQUE0QzRDLEVBQUFBLGNBQTVDO0FBQTRETyxFQUFBQTtBQUE1RCxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB5YXV6bCBmcm9tICd5YXV6bCc7XG5pbXBvcnQgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0gfSBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IG1rZGlycCB9IGZyb20gJy4uL2xpYi9ta2RpcnAnO1xuaW1wb3J0IHN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IGZzIGZyb20gJy4vZnMnO1xuaW1wb3J0IHsgaXNXaW5kb3dzIH0gZnJvbSAnLi9zeXN0ZW0nO1xuaW1wb3J0IHsgQmFzZTY0RW5jb2RlIH0gZnJvbSAnYmFzZTY0LXN0cmVhbSc7XG5pbXBvcnQgeyB0b1JlYWRhYmxlU2l6ZVN0cmluZywgR2lCIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCBUaW1lciBmcm9tICcuL3RpbWluZyc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBnZXRTdHJlYW0gZnJvbSAnZ2V0LXN0cmVhbSc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcblxuY29uc3Qgb3BlblppcCA9IEIucHJvbWlzaWZ5KHlhdXpsLm9wZW4pO1xuY29uc3QgcGlwZWxpbmUgPSBCLnByb21pc2lmeShzdHJlYW0ucGlwZWxpbmUpO1xuY29uc3QgWklQX01BR0lDID0gJ1BLJztcbmNvbnN0IElGTVQgPSA2MTQ0MDtcbmNvbnN0IElGRElSID0gMTYzODQ7XG5jb25zdCBJRkxOSyA9IDQwOTYwO1xuXG4vLyBUaGlzIGNsYXNzIGlzIG1vc3RseSBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWF4b2dkZW4vZXh0cmFjdC16aXAvYmxvYi9tYXN0ZXIvaW5kZXguanNcbmNsYXNzIFppcEV4dHJhY3RvciB7XG4gIGNvbnN0cnVjdG9yIChzb3VyY2VQYXRoLCBvcHRzID0ge30pIHtcbiAgICB0aGlzLnppcFBhdGggPSBzb3VyY2VQYXRoO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICB9XG5cbiAgZXh0cmFjdEZpbGVOYW1lIChlbnRyeSkge1xuICAgIHJldHVybiBfLmlzQnVmZmVyKGVudHJ5LmZpbGVOYW1lKSA/IGVudHJ5LmZpbGVOYW1lLnRvU3RyaW5nKHRoaXMub3B0cy5maWxlTmFtZXNFbmNvZGluZykgOiBlbnRyeS5maWxlTmFtZTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3QgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRpcixcbiAgICAgIGZpbGVOYW1lc0VuY29kaW5nLFxuICAgIH0gPSB0aGlzLm9wdHM7XG4gICAgdGhpcy56aXBmaWxlID0gYXdhaXQgb3BlblppcCh0aGlzLnppcFBhdGgsIHtcbiAgICAgIGxhenlFbnRyaWVzOiB0cnVlLFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RoZWpvc2h3b2xmZS95YXV6bC9jb21taXQvY2M3NDU1YWM3ODliYTg0OTczMTg0ZTVlYmRlMDU4MWNkYzRjM2IzOSNkaWZmLTA0YzZlOTBmYWFjMjY3NWFhODllMjE3NmQyZWVjN2Q4Ujk1XG4gICAgICBkZWNvZGVTdHJpbmdzOiAhZmlsZU5hbWVzRW5jb2RpbmcsXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuemlwZmlsZS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy56aXBmaWxlLnJlYWRFbnRyeSgpO1xuXG4gICAgICB0aGlzLnppcGZpbGUub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsZWQpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnppcGZpbGUub24oJ2VudHJ5JywgYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgICAgIGlmIChmaWxlTmFtZS5zdGFydHNXaXRoKCdfX01BQ09TWC8nKSkge1xuICAgICAgICAgIHRoaXMuemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXN0RGlyID0gcGF0aC5kaXJuYW1lKHBhdGguam9pbihkaXIsIGZpbGVOYW1lKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZnMubWtkaXIoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgICAgY29uc3QgY2Fub25pY2FsRGVzdERpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICAgICAgICAgIGNvbnN0IHJlbGF0aXZlRGVzdERpciA9IHBhdGgucmVsYXRpdmUoZGlyLCBjYW5vbmljYWxEZXN0RGlyKTtcblxuICAgICAgICAgIGlmIChyZWxhdGl2ZURlc3REaXIuc3BsaXQocGF0aC5zZXApLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgICAgICAgICBuZXcgRXJyb3IoYE91dCBvZiBib3VuZCBwYXRoIFwiJHtjYW5vbmljYWxEZXN0RGlyfVwiIGZvdW5kIHdoaWxlIHByb2Nlc3NpbmcgZmlsZSAke2ZpbGVOYW1lfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IHRoaXMuZXh0cmFjdEVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB0aGlzLnppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuemlwZmlsZS5jbG9zZSgpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGV4dHJhY3RFbnRyeSAoZW50cnkpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGRpcixcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmV4dHJhY3RGaWxlTmFtZShlbnRyeSk7XG4gICAgY29uc3QgZGVzdCA9IHBhdGguam9pbihkaXIsIGZpbGVOYW1lKTtcblxuICAgIC8vIGNvbnZlcnQgZXh0ZXJuYWwgZmlsZSBhdHRyIGludCBpbnRvIGEgZnMgc3RhdCBtb2RlIGludFxuICAgIGNvbnN0IG1vZGUgPSAoZW50cnkuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyA+PiAxNikgJiAweEZGRkY7XG4gICAgLy8gY2hlY2sgaWYgaXQncyBhIHN5bWxpbmsgb3IgZGlyICh1c2luZyBzdGF0IG1vZGUgY29uc3RhbnRzKVxuICAgIGNvbnN0IGlzU3ltbGluayA9IChtb2RlICYgSUZNVCkgPT09IElGTE5LO1xuICAgIGNvbnN0IGlzRGlyID0gKG1vZGUgJiBJRk1UKSA9PT0gSUZESVJcbiAgICAgIC8vIEZhaWxzYWZlLCBib3Jyb3dlZCBmcm9tIGpzWmlwXG4gICAgICB8fCBmaWxlTmFtZS5lbmRzV2l0aCgnLycpXG4gICAgICAvLyBjaGVjayBmb3Igd2luZG93cyB3ZWlyZCB3YXkgb2Ygc3BlY2lmeWluZyBhIGRpcmVjdG9yeVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21heG9nZGVuL2V4dHJhY3QtemlwL2lzc3Vlcy8xMyNpc3N1ZWNvbW1lbnQtMTU0NDk0NTY2XG4gICAgICB8fCAoZW50cnkudmVyc2lvbk1hZGVCeSA+PiA4ID09PSAwICYmIGVudHJ5LmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMgPT09IDE2KTtcbiAgICBjb25zdCBwcm9jTW9kZSA9IHRoaXMuZ2V0RXh0cmFjdGVkTW9kZShtb2RlLCBpc0RpcikgJiAwbzc3NztcbiAgICAvLyBhbHdheXMgZW5zdXJlIGZvbGRlcnMgYXJlIGNyZWF0ZWRcbiAgICBjb25zdCBkZXN0RGlyID0gaXNEaXIgPyBkZXN0IDogcGF0aC5kaXJuYW1lKGRlc3QpO1xuICAgIGNvbnN0IG1rZGlyT3B0aW9ucyA9IHsgcmVjdXJzaXZlOiB0cnVlIH07XG4gICAgaWYgKGlzRGlyKSB7XG4gICAgICBta2Rpck9wdGlvbnMubW9kZSA9IHByb2NNb2RlO1xuICAgIH1cbiAgICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCBta2Rpck9wdGlvbnMpO1xuICAgIGlmIChpc0Rpcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBhd2FpdCBCLnByb21pc2lmeSh0aGlzLnppcGZpbGUub3BlblJlYWRTdHJlYW0uYmluZCh0aGlzLnppcGZpbGUpKShlbnRyeSk7XG4gICAgaWYgKGlzU3ltbGluaykge1xuICAgICAgY29uc3QgbGluayA9IGF3YWl0IGdldFN0cmVhbShyZWFkU3RyZWFtKTtcbiAgICAgIGF3YWl0IGZzLnN5bWxpbmsobGluaywgZGVzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHBpcGVsaW5lKHJlYWRTdHJlYW0sIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRlc3QsIHsgbW9kZTogcHJvY01vZGUgfSkpO1xuICAgIH1cbiAgfVxuXG4gIGdldEV4dHJhY3RlZE1vZGUgKGVudHJ5TW9kZSwgaXNEaXIpIHtcbiAgICBjb25zdCB7XG4gICAgICBkZWZhdWx0RGlyTW9kZSxcbiAgICAgIGRlZmF1bHRGaWxlTW9kZSxcbiAgICB9ID0gdGhpcy5vcHRzO1xuXG4gICAgbGV0IG1vZGUgPSBlbnRyeU1vZGU7XG4gICAgLy8gU2V0IGRlZmF1bHRzLCBpZiBuZWNlc3NhcnlcbiAgICBpZiAobW9kZSA9PT0gMCkge1xuICAgICAgaWYgKGlzRGlyKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RGlyTW9kZSkge1xuICAgICAgICAgIG1vZGUgPSBwYXJzZUludChkZWZhdWx0RGlyTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNzU1O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbGVNb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IHBhcnNlSW50KGRlZmF1bHRGaWxlTW9kZSwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFtb2RlKSB7XG4gICAgICAgICAgbW9kZSA9IDBvNjQ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGU7XG4gIH1cbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEV4dHJhY3RBbGxPcHRpb25zXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IGZpbGVOYW1lc0VuY29kaW5nIFRoZSBlbmNvZGluZyB0byB1c2UgZm9yIGV4dHJhY3RlZCBmaWxlIG5hbWVzLlxuICogRm9yIFpJUCBhcmNoaXZlcyBjcmVhdGVkIG9uIE1hY09TIGl0IGlzIHVzdWFsbHkgZXhwZWN0ZWQgdG8gYmUgYHV0ZjhgLlxuICogQnkgZGVmYXVsdCBpdCBpcyBhdXRvZGV0ZWN0ZWQgYmFzZWQgb24gdGhlIGVudHJ5IG1ldGFkYXRhIGFuZCBpcyBvbmx5IG5lZWRlZCB0byBiZSBzZXQgZXhwbGljaXRseVxuICogaWYgdGhlIHBhcnRpY3VsYXIgYXJjaGl2ZSBkb2VzIG5vdCBjb21wbHkgdG8gdGhlIHN0YW5kYXJkcywgd2hpY2ggbGVhZHMgdG8gY29ycnVwdGVkIGZpbGUgbmFtZXNcbiAqIGFmdGVyIGV4dHJhY3Rpb24uIE9ubHkgYXBwbGljYWJsZSBpZiBzeXN0ZW0gdW56aXAgYmluYXJ5IGlzIE5PVCBiZWluZyB1c2VkLlxuICogQHByb3BlcnR5IHs/Ym9vbGVhbn0gdXNlU3lzdGVtVW56aXAgW2ZhbHNlXSBJZiB0cnVlLCBhdHRlbXB0IHRvIHVzZSBzeXN0ZW0gdW56aXA7IGlmIHRoaXMgZmFpbHMsXG4gKiBmYWxsYmFjayB0byB0aGUgSlMgdW56aXAgaW1wbGVtZW50YXRpb24uXG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IHppcGZpbGUgdG8gYSBkaXJlY3RvcnlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqIEBwYXJhbSB7P0V4dHJhY3RBbGxPcHRpb25zfSBvcHRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RBbGxUbyAoemlwRmlsZVBhdGgsIGRlc3REaXIsIG9wdHMgPSB7fSkge1xuICBpZiAoIXBhdGguaXNBYnNvbHV0ZShkZXN0RGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFyZ2V0IHBhdGggJyR7ZGVzdERpcn0nIGlzIGV4cGVjdGVkIHRvIGJlIGFic29sdXRlYCk7XG4gIH1cblxuICBhd2FpdCBmcy5ta2RpcihkZXN0RGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIGNvbnN0IGRpciA9IGF3YWl0IGZzLnJlYWxwYXRoKGRlc3REaXIpO1xuICBpZiAob3B0cy51c2VTeXN0ZW1VbnppcCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleHRyYWN0V2l0aFN5c3RlbVVuemlwKHppcEZpbGVQYXRoLCBkaXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLndhcm4oJ3VuemlwIGZhaWxlZDsgZmFsbGluZyBiYWNrIHRvIEpTOiAlcycsIGVyci5zdGRlcnIgfHwgZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBjb25zdCBleHRyYWN0b3IgPSBuZXcgWmlwRXh0cmFjdG9yKHppcEZpbGVQYXRoLCB7XG4gICAgLi4ub3B0cyxcbiAgICBkaXIsXG4gIH0pO1xuICBhd2FpdCBleHRyYWN0b3IuZXh0cmFjdCgpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHN5c3RlbSB1bnppcCAoZS5nLiwgYC91c3IvYmluL3VuemlwYCkuIElmIGF2YWlsYWJsZSwgaXQgaXNcbiAqIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4gdGhlIEpTIGltcGxlbWVudGF0aW9uLlxuICogQnkgZGVmYXVsdCBhbGwgZmlsZXMgaW4gdGhlIGRlc3REaXIgZ2V0IG92ZXJyaWRkZW4gaWYgYWxyZWFkeSBleGlzdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIuXG4gKiBUaGlzIGZvbGRlciBpcyBleHBlY3RlZCB0byBhbHJlYWR5IGV4aXN0IGJlZm9yZSBleHRyYWN0aW5nIHRoZSBhcmNoaXZlLlxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0V2l0aFN5c3RlbVVuemlwICh6aXBGaWxlUGF0aCwgZGVzdERpcikge1xuICBjb25zdCBpc1dpbmRvd3NIb3N0ID0gaXNXaW5kb3dzKCk7XG4gIGxldCBleGVjdXRhYmxlUGF0aDtcbiAgdHJ5IHtcbiAgICBleGVjdXRhYmxlUGF0aCA9IGF3YWl0IGdldEV4ZWN1dGFibGVQYXRoKFxuICAgICAgaXNXaW5kb3dzSG9zdCA/ICdwb3dlcnNoZWxsLmV4ZScgOiAndW56aXAnXG4gICAgKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgc3lzdGVtIHVuemlwJyk7XG4gIH1cblxuICBpZiAoaXNXaW5kb3dzSG9zdCkge1xuICAgIC8vIG9uIFdpbmRvd3Mgd2UgdXNlIFBvd2VyU2hlbGwgdG8gdW56aXAgZmlsZXNcbiAgICBhd2FpdCBleGVjKGV4ZWN1dGFibGVQYXRoLCBbXG4gICAgICAnLWNvbW1hbmQnLCAnRXhwYW5kLUFyY2hpdmUnLFxuICAgICAgJy1MaXRlcmFsUGF0aCcsIHppcEZpbGVQYXRoLFxuICAgICAgJy1EZXN0aW5hdGlvblBhdGgnLCBkZXN0RGlyLFxuICAgICAgJy1Gb3JjZSdcbiAgICBdKTtcbiAgfSBlbHNlIHtcbiAgICAvLyAtcSBtZWFucyBxdWlldCAobm8gc3Rkb3V0KVxuICAgIC8vIC1vIG1lYW5zIG92ZXJ3cml0ZVxuICAgIC8vIC1kIGlzIHRoZSBkZXN0IGRpclxuICAgIGF3YWl0IGV4ZWMoZXhlY3V0YWJsZVBhdGgsIFtcbiAgICAgICctcScsXG4gICAgICAnLW8nLCB6aXBGaWxlUGF0aCxcbiAgICAgICctZCcsIGRlc3REaXJcbiAgICBdKTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgemlwIGVudHJ5IHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtTdHJlYW1hYmxlfSB6aXBGaWxlIFRoZSBzb3VyY2UgWklQIHN0cmVhbVxuICogQHBhcmFtIHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGVudHJ5IGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdERpciBUaGUgZnVsbCBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gX2V4dHJhY3RFbnRyeVRvICh6aXBGaWxlLCBlbnRyeSwgZGVzdERpcikge1xuICBjb25zdCBkc3RQYXRoID0gcGF0aC5yZXNvbHZlKGRlc3REaXIsIGVudHJ5LmZpbGVOYW1lKTtcblxuICAvLyBDcmVhdGUgZGVzdCBkaXJlY3RvcnkgaWYgZG9lc24ndCBleGlzdCBhbHJlYWR5XG4gIGlmICgvXFwvJC8udGVzdChlbnRyeS5maWxlTmFtZSkpIHtcbiAgICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhkc3RQYXRoKSkge1xuICAgICAgYXdhaXQgbWtkaXJwKGRzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoIWF3YWl0IGZzLmV4aXN0cyhwYXRoLmRpcm5hbWUoZHN0UGF0aCkpKSB7XG4gICAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZShkc3RQYXRoKSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSB3cml0ZSBzdHJlYW1cbiAgY29uc3Qgd3JpdGVTdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShkc3RQYXRoLCB7ZmxhZ3M6ICd3J30pO1xuICBjb25zdCB3cml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgd3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCByZWplY3QpO1xuICB9KTtcblxuICAvLyBDcmVhdGUgemlwUmVhZFN0cmVhbSBhbmQgcGlwZSBkYXRhIHRvIHRoZSB3cml0ZSBzdHJlYW1cbiAgLy8gKGZvciBzb21lIG9kZCByZWFzb24gQi5wcm9taXNpZnkgZG9lc24ndCB3b3JrIG9uIHppcGZpbGUub3BlblJlYWRTdHJlYW0sIGl0IGNhdXNlcyBhbiBlcnJvciAnY2xvc2VkJylcbiAgY29uc3QgemlwUmVhZFN0cmVhbSA9IGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBGaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCAoZXJyLCByZWFkU3RyZWFtKSA9PiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUocmVhZFN0cmVhbSkpO1xuICB9KTtcbiAgY29uc3QgemlwUmVhZFN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgemlwUmVhZFN0cmVhbS5vbmNlKCdlbmQnLCByZXNvbHZlKTtcbiAgICB6aXBSZWFkU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG4gIHppcFJlYWRTdHJlYW0ucGlwZSh3cml0ZVN0cmVhbSk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIHppcFJlYWRTdHJlYW0gYW5kIHdyaXRlU3RyZWFtIHRvIGVuZCBiZWZvcmUgcmV0dXJuaW5nXG4gIHJldHVybiBhd2FpdCBCLmFsbChbXG4gICAgemlwUmVhZFN0cmVhbVByb21pc2UsXG4gICAgd3JpdGVTdHJlYW1Qcm9taXNlLFxuICBdKTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBaaXBFbnRyeVxuICogQHByb3BlcnR5IHt5YXV6bC5aaXBFbnRyeX0gZW50cnkgVGhlIGFjdHVhbCBlbnRyeSBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtmdW5jdGlvbn0gZXh0cmFjdEVudHJ5VG8gQW4gYXN5bmMgZnVuY3Rpb24sIHdoaWNoIGFjY2VwdHMgb25lIHBhcmFtZXRlci5cbiAqIFRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBkZXN0aW5hdGlvbiBmb2xkZXIgcGF0aCB0byB3aGljaCB0aGlzIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGV4dHJhY3QgdGhlIGVudHJ5LlxuICovXG5cbi8qKlxuICogR2V0IGVudHJpZXMgZm9yIGEgemlwIGZvbGRlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB6aXBGaWxlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgWklQIGZpbGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uRW50cnkgQ2FsbGJhY2sgd2hlbiBlbnRyeSBpcyByZWFkLlxuICogVGhlIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvIGFjY2VwdCBvbmUgYXJndW1lbnQgb2YgWmlwRW50cnkgdHlwZS5cbiAqIFRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aGUgc291cmNlIHppcCBmaWxlIHdpbGwgYmkgdGVybWluYXRlZCBhcyBzb29uIGFzXG4gKiB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gZXF1YWxzIHRvIGBmYWxzZWAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlYWRFbnRyaWVzICh6aXBGaWxlUGF0aCwgb25FbnRyeSkge1xuICAvLyBPcGVuIGEgemlwIGZpbGUgYW5kIHN0YXJ0IHJlYWRpbmcgZW50cmllc1xuICBjb25zdCB6aXBmaWxlID0gYXdhaXQgb3BlblppcCh6aXBGaWxlUGF0aCwge2xhenlFbnRyaWVzOiB0cnVlfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcGZpbGUub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwZmlsZS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICAvLyBPbiBlYWNoIGVudHJ5LCBjYWxsICdvbkVudHJ5JyBhbmQgdGhlbiByZWFkIHRoZSBuZXh0IGVudHJ5XG4gICAgemlwZmlsZS5vbignZW50cnknLCBhc3luYyAoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IG9uRW50cnkoe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgZXh0cmFjdEVudHJ5VG86IGFzeW5jIChkZXN0RGlyKSA9PiBhd2FpdCBfZXh0cmFjdEVudHJ5VG8oemlwZmlsZSwgZW50cnksIGRlc3REaXIpXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXMgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB6aXBmaWxlLmVtaXQoJ2VuZCcpO1xuICAgICAgfVxuICAgICAgemlwZmlsZS5yZWFkRW50cnkoKTtcbiAgICB9KTtcbiAgfSk7XG4gIHppcGZpbGUucmVhZEVudHJ5KCk7XG5cbiAgLy8gV2FpdCBmb3IgdGhlIGVudHJpZXMgdG8gZmluaXNoIGJlaW5nIGl0ZXJhdGVkIHRocm91Z2hcbiAgcmV0dXJuIGF3YWl0IHppcFJlYWRTdHJlYW1Qcm9taXNlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZW5jb2RlVG9CYXNlNjQgW2ZhbHNlXSBXaGV0aGVyIHRvIGVuY29kZVxuICogdGhlIHJlc3VsdGluZyBhcmNoaXZlIHRvIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzTWV0ZXJlZCBbdHJ1ZV0gV2hldGhlciB0byBsb2cgdGhlIGFjdHVhbFxuICogYXJjaGl2ZXIgcGVyZm9ybWFuY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXhTaXplIFsxMDczNzQxODI0XSBUaGUgbWF4aW11bSBzaXplIG9mXG4gKiB0aGUgcmVzdWx0aW5nIGFyY2hpdmUgaW4gYnl0ZXMuIFRoaXMgaXMgc2V0IHRvIDFHQiBieSBkZWZhdWx0LCBiZWNhdXNlXG4gKiBBcHBpdW0gbGltaXRzIHRoZSBtYXhpbXVtIEhUVFAgYm9keSBzaXplIHRvIDFHQi4gQWxzbywgdGhlIE5vZGVKUyBoZWFwXG4gKiBzaXplIG11c3QgYmUgZW5vdWdoIHRvIGtlZXAgdGhlIHJlc3VsdGluZyBvYmplY3QgKHVzdWFsbHkgdGhpcyBzaXplIGlzXG4gKiBsaW1pdGVkIHRvIDEuNCBHQilcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCBbOV0gVGhlIGNvbXByZXNzaW9uIGxldmVsLiBUaGUgbWF4aW11bVxuICogbGV2ZWwgaXMgOSAodGhlIGJlc3QgY29tcHJlc3Npb24sIHdvcnN0IHBlcmZvcm1hbmNlKS4gVGhlIG1pbmltdW1cbiAqIGNvbXByZXNzaW9uIGxldmVsIGlzIDAgKG5vIGNvbXByZXNzaW9uKS5cbiAqL1xuXG4vKipcbiAqIENvbnZlcnRzIGNvbnRlbnRzIG9mIGxvY2FsIGRpcmVjdG9yeSB0byBhbiBpbi1tZW1vcnkgLnppcCBidWZmZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSBmb2xkZXIgb3IgZmlsZSBiZWluZyB6aXBwZWRcbiAqIEBwYXJhbSB7WmlwT3B0aW9uc30gb3B0cyBaaXBwaW5nIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFppcHBlZCAoYW5kIGVuY29kZWQgaWYgYGVuY29kZVRvQmFzZTY0YCBpcyB0cnV0aHkpXG4gKiBjb250ZW50IG9mIHRoZSBzb3VyY2UgcGF0aCBhcyBtZW1vcnkgYnVmZmVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJlYWRpbmcgdGhlIHNvdXJjZVxuICogb3IgdGhlIHNvdXJjZSBpcyB0b28gYmlnXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvSW5NZW1vcnlaaXAgKHNyY1BhdGgsIG9wdHMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhzcmNQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VjaCBmaWxlIG9yIGZvbGRlcjogJHtzcmNQYXRofWApO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTWV0ZXJlZCA9IHRydWUsXG4gICAgZW5jb2RlVG9CYXNlNjQgPSBmYWxzZSxcbiAgICBtYXhTaXplID0gMSAqIEdpQixcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHRCdWZmZXJzID0gW107XG4gIGxldCByZXN1bHRCdWZmZXJzU2l6ZSA9IDA7XG4gIC8vIENyZWF0ZSBhIHdyaXRhYmxlIHN0cmVhbSB0aGF0IHppcCBidWZmZXJzIHdpbGwgYmUgc3RyZWFtZWQgdG9cbiAgY29uc3QgcmVzdWx0V3JpdGVTdHJlYW0gPSBuZXcgc3RyZWFtLldyaXRhYmxlKHtcbiAgICB3cml0ZTogKGJ1ZmZlciwgZW5jb2RpbmcsIG5leHQpID0+IHtcbiAgICAgIHJlc3VsdEJ1ZmZlcnMucHVzaChidWZmZXIpO1xuICAgICAgcmVzdWx0QnVmZmVyc1NpemUgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmIChtYXhTaXplID4gMCAmJiByZXN1bHRCdWZmZXJzU2l6ZSA+IG1heFNpemUpIHtcbiAgICAgICAgcmVzdWx0V3JpdGVTdHJlYW0uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgYCArXG4gICAgICAgICAgYGFyY2hpdmUgbXVzdCBub3QgYmUgZ3JlYXRlciB0aGFuICR7dG9SZWFkYWJsZVNpemVTdHJpbmcobWF4U2l6ZSl9YCkpO1xuICAgICAgfVxuICAgICAgbmV4dCgpO1xuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFppcCAnc3JjRGlyJyBhbmQgc3RyZWFtIGl0IHRvIHRoZSBhYm92ZSB3cml0YWJsZSBzdHJlYW1cbiAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnLCB7XG4gICAgemxpYjoge2xldmVsfVxuICB9KTtcbiAgbGV0IHNyY1NpemUgPSBudWxsO1xuICBjb25zdCBiYXNlNjRFbmNvZGVyU3RyZWFtID0gZW5jb2RlVG9CYXNlNjQgPyBuZXcgQmFzZTY0RW5jb2RlKCkgOiBudWxsO1xuICBjb25zdCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzdWx0V3JpdGVTdHJlYW0ub25jZSgnZXJyb3InLCAoZSkgPT4ge1xuICAgICAgaWYgKGJhc2U2NEVuY29kZXJTdHJlYW0pIHtcbiAgICAgICAgYXJjaGl2ZS51bnBpcGUoYmFzZTY0RW5jb2RlclN0cmVhbSk7XG4gICAgICAgIGJhc2U2NEVuY29kZXJTdHJlYW0udW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyY2hpdmUudW5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgICAgIH1cbiAgICAgIGFyY2hpdmUuYWJvcnQoKTtcbiAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KGUpO1xuICAgIH0pO1xuICAgIHJlc3VsdFdyaXRlU3RyZWFtLm9uY2UoJ2ZpbmlzaCcsICgpID0+IHtcbiAgICAgIHNyY1NpemUgPSBhcmNoaXZlLnBvaW50ZXIoKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG4gIGNvbnN0IGFyY2hpdmVTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFyY2hpdmUub25jZSgnZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgYXJjaGl2ZS5vbmNlKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICBuZXcgRXJyb3IoYEZhaWxlZCB0byBhcmNoaXZlICcke3NyY1BhdGh9JzogJHtlLm1lc3NhZ2V9YCkpKTtcbiAgfSk7XG4gIGNvbnN0IHRpbWVyID0gaXNNZXRlcmVkID8gbmV3IFRpbWVyKCkuc3RhcnQoKSA6IG51bGw7XG4gIGlmICgoYXdhaXQgZnMuc3RhdChzcmNQYXRoKSkuaXNEaXJlY3RvcnkoKSkge1xuICAgIGFyY2hpdmUuZGlyZWN0b3J5KHNyY1BhdGgsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBhcmNoaXZlLmZpbGUoc3JjUGF0aCwge1xuICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZShzcmNQYXRoKSxcbiAgICB9KTtcbiAgfVxuICBpZiAoYmFzZTY0RW5jb2RlclN0cmVhbSkge1xuICAgIGFyY2hpdmUucGlwZShiYXNlNjRFbmNvZGVyU3RyZWFtKTtcbiAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICB9IGVsc2Uge1xuICAgIGFyY2hpdmUucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gIH1cbiAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBzdHJlYW1zIHRvIGZpbmlzaFxuICBhd2FpdCBCLmFsbChbYXJjaGl2ZVN0cmVhbVByb21pc2UsIHJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZV0pO1xuXG4gIGlmICh0aW1lcikge1xuICAgIGxvZy5kZWJ1ZyhgWmlwcGVkICR7ZW5jb2RlVG9CYXNlNjQgPyAnYW5kIGJhc2U2NC1lbmNvZGVkICcgOiAnJ31gICtcbiAgICAgIGAnJHtwYXRoLmJhc2VuYW1lKHNyY1BhdGgpfScgYCArXG4gICAgICAoc3JjU2l6ZSA/IGAoJHt0b1JlYWRhYmxlU2l6ZVN0cmluZyhzcmNTaXplKX0pIGAgOiAnJykgK1xuICAgICAgYGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc1NlY29uZHMudG9GaXhlZCgzKX1zIGAgK1xuICAgICAgYChjb21wcmVzc2lvbiBsZXZlbDogJHtsZXZlbH0pYCk7XG4gIH1cbiAgLy8gUmV0dXJuIHRoZSBhcnJheSBvZiB6aXAgYnVmZmVycyBjb25jYXRlbmF0ZWQgaW50byBvbmUgYnVmZmVyXG4gIHJldHVybiBCdWZmZXIuY29uY2F0KHJlc3VsdEJ1ZmZlcnMpO1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGUgaXMgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZ1bGwgcGF0aCB0byB0aGUgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhIHZhbGlkIFpJUCBhcmNoaXZlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFzc2VydFZhbGlkWmlwIChmaWxlUGF0aCkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgZG9lcyBub3QgZXhpc3RgKTtcbiAgfVxuXG4gIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQoZmlsZVBhdGgpO1xuICBpZiAoc2l6ZSA8IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2ZpbGVQYXRofScgaXMgdG9vIHNtYWxsIHRvIGJlIGEgWklQIGFyY2hpdmVgKTtcbiAgfVxuICBjb25zdCBmZCA9IGF3YWl0IGZzLm9wZW4oZmlsZVBhdGgsICdyJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jKFpJUF9NQUdJQy5sZW5ndGgpO1xuICAgIGF3YWl0IGZzLnJlYWQoZmQsIGJ1ZmZlciwgMCwgWklQX01BR0lDLmxlbmd0aCwgMCk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYnVmZmVyLnRvU3RyaW5nKCdhc2NpaScpO1xuICAgIGlmIChzaWduYXR1cmUgIT09IFpJUF9NQUdJQykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBzaWduYXR1cmUgJyR7c2lnbmF0dXJlfScgb2YgJyR7ZmlsZVBhdGh9JyBgICtcbiAgICAgICAgYGlzIG5vdCBlcXVhbCB0byB0aGUgZXhwZWN0ZWQgWklQIGFyY2hpdmUgc2lnbmF0dXJlICcke1pJUF9NQUdJQ30nYCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLmNsb3NlKGZkKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFppcENvbXByZXNzaW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxldmVsIFs5XSAtIENvbXByZXNzaW9uIGxldmVsIGluIHJhbmdlIDAuLjlcbiAqIChncmVhdGVyIG51bWJlcnMgbWVhbiBiZXR0ZXIgY29tcHJlc3Npb24sIGJ1dCBsb25nZXIgcHJvY2Vzc2luZyB0aW1lKVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gWmlwU291cmNlT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBwYXR0ZXJuIFsnKipcXC8qJ10gLSBHTE9CIHBhdHRlcm4gZm9yIGNvbXByZXNzaW9uXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGN3ZCAtIFRoZSBzb3VyY2Ugcm9vdCBmb2xkZXIgKHRoZSBwYXJlbnQgZm9sZGVyIG9mXG4gKiB0aGUgZGVzdGluYXRpb24gZmlsZSBieSBkZWZhdWx0KVxuICogQHByb3BlcnR5IHs/QXJyYXk8c3RyaW5nPn0gaWdub3JlIC0gVGhlIGxpc3Qgb2YgaWdub3JlZCBwYXR0ZXJuc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcmNoaXZlIGJhc2VkIG9uIHRoZSBnaXZlbiBnbG9iIHBhdHRlcm5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZHN0UGF0aCAtIFRoZSByZXN1bHRpbmcgYXJjaGl2ZSBwYXRoXG4gKiBAcGFyYW0ge1ppcFNvdXJjZU9wdGlvbnN9IHNyYyAtIFNvdXJjZSBvcHRpb25zXG4gKiBAcGFyYW0ge1ppcENvbXByZXNzaW9uT3B0aW9uc30gb3B0cyAtIENvbXByZXNzaW9uIG9wdGlvbnNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGFyY2hpdmVcbiAqL1xuYXN5bmMgZnVuY3Rpb24gdG9BcmNoaXZlIChkc3RQYXRoLCBzcmMgPSB7fSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBsZXZlbCA9IDksXG4gIH0gPSBvcHRzO1xuICBjb25zdCB7XG4gICAgcGF0dGVybiA9ICcqKi8qJyxcbiAgICBjd2QgPSBwYXRoLmRpcm5hbWUoZHN0UGF0aCksXG4gICAgaWdub3JlID0gW10sXG4gIH0gPSBzcmM7XG4gIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcignemlwJywgeyB6bGliOiB7IGxldmVsIH19KTtcbiAgY29uc3Qgc3RyZWFtID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCk7XG4gIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXJjaGl2ZVxuICAgICAgLmdsb2IocGF0dGVybiwge1xuICAgICAgICBjd2QsXG4gICAgICAgIGlnbm9yZSxcbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgcmVqZWN0KVxuICAgICAgLnBpcGUoc3RyZWFtKTtcbiAgICBzdHJlYW1cbiAgICAgIC5vbignZXJyb3InLCAoZSkgPT4ge1xuICAgICAgICBhcmNoaXZlLnVucGlwZShzdHJlYW0pO1xuICAgICAgICBhcmNoaXZlLmFib3J0KCk7XG4gICAgICAgIGFyY2hpdmUuZGVzdHJveSgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9KVxuICAgICAgLm9uKCdmaW5pc2gnLCByZXNvbHZlKTtcbiAgICBhcmNoaXZlLmZpbmFsaXplKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIGFuZCBtZW1vaXplcyB0aGUgZnVsbCBwYXRoIHRvIHRoZSBnaXZlbiBleGVjdXRhYmxlLlxuICogUmVqZWN0cyBpZiBpdCBpcyBub3QgZm91bmQuXG4gKi9cbmNvbnN0IGdldEV4ZWN1dGFibGVQYXRoID0gXy5tZW1vaXplKFxuICAvKipcbiAgICogQHJldHVybnMge0I8c3RyaW5nPn0gRnVsbCBQYXRoIHRvIHRoZSBleGVjdXRhYmxlXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBnZXRFeGVjdXRhYmxlUGF0aCAoYmluYXJ5TmFtZSkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYXdhaXQgZnMud2hpY2goYmluYXJ5TmFtZSk7XG4gICAgbG9nLmRlYnVnKGBGb3VuZCAnJXMnIGF0ICclcydgLCBiaW5hcnlOYW1lLCBmdWxsUGF0aCk7XG4gICAgcmV0dXJuIGZ1bGxQYXRoO1xuICB9XG4pO1xuXG5leHBvcnQgeyBleHRyYWN0QWxsVG8sIHJlYWRFbnRyaWVzLCB0b0luTWVtb3J5WmlwLCBfZXh0cmFjdEVudHJ5VG8sXG4gIGFzc2VydFZhbGlkWmlwLCB0b0FyY2hpdmUgfTtcbmV4cG9ydCBkZWZhdWx0IHsgZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgYXNzZXJ0VmFsaWRaaXAsIHRvQXJjaGl2ZSB9O1xuIl0sImZpbGUiOiJsaWIvemlwLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uIn0=
456
+ exports.default = _default;
457
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi96aXAuanMiXSwibmFtZXMiOlsib3BlblppcCIsIkIiLCJwcm9taXNpZnkiLCJ5YXV6bCIsIm9wZW4iLCJwaXBlbGluZSIsInN0cmVhbSIsIlpJUF9NQUdJQyIsIklGTVQiLCJJRkRJUiIsIklGTE5LIiwiWmlwRXh0cmFjdG9yIiwiY29uc3RydWN0b3IiLCJzb3VyY2VQYXRoIiwib3B0cyIsInppcFBhdGgiLCJjYW5jZWxlZCIsImV4dHJhY3RGaWxlTmFtZSIsImVudHJ5IiwiXyIsImlzQnVmZmVyIiwiZmlsZU5hbWUiLCJ0b1N0cmluZyIsImZpbGVOYW1lc0VuY29kaW5nIiwiZXh0cmFjdCIsImRpciIsInppcGZpbGUiLCJsYXp5RW50cmllcyIsImRlY29kZVN0cmluZ3MiLCJyZXNvbHZlIiwicmVqZWN0Iiwib24iLCJlcnIiLCJyZWFkRW50cnkiLCJzdGFydHNXaXRoIiwiZGVzdERpciIsInBhdGgiLCJkaXJuYW1lIiwiam9pbiIsImZzIiwibWtkaXIiLCJyZWN1cnNpdmUiLCJjYW5vbmljYWxEZXN0RGlyIiwicmVhbHBhdGgiLCJyZWxhdGl2ZURlc3REaXIiLCJyZWxhdGl2ZSIsInNwbGl0Iiwic2VwIiwiaW5jbHVkZXMiLCJFcnJvciIsImV4dHJhY3RFbnRyeSIsImNsb3NlIiwiZGVzdCIsIm1vZGUiLCJleHRlcm5hbEZpbGVBdHRyaWJ1dGVzIiwiaXNTeW1saW5rIiwiaXNEaXIiLCJlbmRzV2l0aCIsInZlcnNpb25NYWRlQnkiLCJwcm9jTW9kZSIsImdldEV4dHJhY3RlZE1vZGUiLCJta2Rpck9wdGlvbnMiLCJyZWFkU3RyZWFtIiwib3BlblJlYWRTdHJlYW0iLCJiaW5kIiwibGluayIsInN5bWxpbmsiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImVudHJ5TW9kZSIsImRlZmF1bHREaXJNb2RlIiwiZGVmYXVsdEZpbGVNb2RlIiwicGFyc2VJbnQiLCJleHRyYWN0QWxsVG8iLCJ6aXBGaWxlUGF0aCIsImlzQWJzb2x1dGUiLCJ1c2VTeXN0ZW1VbnppcCIsImV4dHJhY3RXaXRoU3lzdGVtVW56aXAiLCJsb2ciLCJ3YXJuIiwic3RkZXJyIiwibWVzc2FnZSIsImV4dHJhY3RvciIsImlzV2luZG93c0hvc3QiLCJleGVjdXRhYmxlUGF0aCIsImdldEV4ZWN1dGFibGVQYXRoIiwiZSIsIl9leHRyYWN0RW50cnlUbyIsInppcEZpbGUiLCJkc3RQYXRoIiwidGVzdCIsImV4aXN0cyIsIm1rZGlycCIsIndyaXRlU3RyZWFtIiwiZmxhZ3MiLCJ3cml0ZVN0cmVhbVByb21pc2UiLCJvbmNlIiwiemlwUmVhZFN0cmVhbSIsInppcFJlYWRTdHJlYW1Qcm9taXNlIiwicGlwZSIsImFsbCIsInJlYWRFbnRyaWVzIiwib25FbnRyeSIsInJlcyIsImV4dHJhY3RFbnRyeVRvIiwiZW1pdCIsInRvSW5NZW1vcnlaaXAiLCJzcmNQYXRoIiwiaXNNZXRlcmVkIiwiZW5jb2RlVG9CYXNlNjQiLCJtYXhTaXplIiwiR2lCIiwibGV2ZWwiLCJyZXN1bHRCdWZmZXJzIiwicmVzdWx0QnVmZmVyc1NpemUiLCJyZXN1bHRXcml0ZVN0cmVhbSIsIldyaXRhYmxlIiwid3JpdGUiLCJidWZmZXIiLCJlbmNvZGluZyIsIm5leHQiLCJwdXNoIiwibGVuZ3RoIiwiYXJjaGl2ZSIsInpsaWIiLCJzcmNTaXplIiwiYmFzZTY0RW5jb2RlclN0cmVhbSIsIkJhc2U2NEVuY29kZSIsInJlc3VsdFdyaXRlU3RyZWFtUHJvbWlzZSIsInVucGlwZSIsImFib3J0IiwiZGVzdHJveSIsInBvaW50ZXIiLCJhcmNoaXZlU3RyZWFtUHJvbWlzZSIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsInN0YXQiLCJpc0RpcmVjdG9yeSIsImRpcmVjdG9yeSIsImZpbGUiLCJuYW1lIiwiYmFzZW5hbWUiLCJmaW5hbGl6ZSIsImRlYnVnIiwiZ2V0RHVyYXRpb24iLCJhc1NlY29uZHMiLCJ0b0ZpeGVkIiwiQnVmZmVyIiwiY29uY2F0IiwiYXNzZXJ0VmFsaWRaaXAiLCJmaWxlUGF0aCIsInNpemUiLCJmZCIsImFsbG9jIiwicmVhZCIsInNpZ25hdHVyZSIsInRvQXJjaGl2ZSIsInNyYyIsInBhdHRlcm4iLCJjd2QiLCJpZ25vcmUiLCJnbG9iIiwibWVtb2l6ZSIsImJpbmFyeU5hbWUiLCJmdWxsUGF0aCIsIndoaWNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLE9BQU8sR0FBR0Msa0JBQUVDLFNBQUYsQ0FBWUMsZUFBTUMsSUFBbEIsQ0FBaEI7O0FBQ0EsTUFBTUMsUUFBUSxHQUFHSixrQkFBRUMsU0FBRixDQUFZSSxnQkFBT0QsUUFBbkIsQ0FBakI7O0FBQ0EsTUFBTUUsU0FBUyxHQUFHLElBQWxCO0FBQ0EsTUFBTUMsSUFBSSxHQUFHLEtBQWI7QUFDQSxNQUFNQyxLQUFLLEdBQUcsS0FBZDtBQUNBLE1BQU1DLEtBQUssR0FBRyxLQUFkOztBQUdBLE1BQU1DLFlBQU4sQ0FBbUI7QUFDakJDLEVBQUFBLFdBQVcsQ0FBRUMsVUFBRixFQUFjQyxJQUFJLEdBQUcsRUFBckIsRUFBeUI7QUFDbEMsU0FBS0MsT0FBTCxHQUFlRixVQUFmO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0UsUUFBTCxHQUFnQixLQUFoQjtBQUNEOztBQUVEQyxFQUFBQSxlQUFlLENBQUVDLEtBQUYsRUFBUztBQUN0QixXQUFPQyxnQkFBRUMsUUFBRixDQUFXRixLQUFLLENBQUNHLFFBQWpCLElBQTZCSCxLQUFLLENBQUNHLFFBQU4sQ0FBZUMsUUFBZixDQUF3QixLQUFLUixJQUFMLENBQVVTLGlCQUFsQyxDQUE3QixHQUFvRkwsS0FBSyxDQUFDRyxRQUFqRztBQUNEOztBQUVZLFFBQVBHLE9BQU8sR0FBSTtBQUNmLFVBQU07QUFDSkMsTUFBQUEsR0FESTtBQUVKRixNQUFBQTtBQUZJLFFBR0YsS0FBS1QsSUFIVDtBQUlBLFNBQUtZ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QU87QUFDbEJxQyxNQUFBQSxPQUFPLENBQUNNLE1BQVIsQ0FBZTFILE1BQWY7QUFDQW9ILE1BQUFBLE9BQU8sQ0FBQ08sS0FBUjtBQUNBUCxNQUFBQSxPQUFPLENBQUNRLE9BQVI7QUFDQXBHLE1BQUFBLE1BQU0sQ0FBQ3VELENBQUQsQ0FBTjtBQUNELEtBTkgsRUFPR3RELEVBUEgsQ0FPTSxRQVBOLEVBT2dCRixPQVBoQjtBQVFBNkYsSUFBQUEsT0FBTyxDQUFDb0IsUUFBUjtBQUNELEdBakJZLENBQWI7QUFrQkQ7O0FBTUQsTUFBTTFELGlCQUFpQixHQUFHakUsZ0JBQUUrSSxPQUFGLENBSXhCLGVBQWU5RSxpQkFBZixDQUFrQytFLFVBQWxDLEVBQThDO0FBQzVDLFFBQU1DLFFBQVEsR0FBRyxNQUFNN0gsYUFBRzhILEtBQUgsQ0FBU0YsVUFBVCxDQUF2Qjs7QUFDQXRGLGtCQUFJa0UsS0FBSixDQUFXLG9CQUFYLEVBQWdDb0IsVUFBaEMsRUFBNENDLFFBQTVDOztBQUNBLFNBQU9BLFFBQVA7QUFDRCxDQVJ1QixDQUExQjs7ZUFhZTtBQUFFNUYsRUFBQUEsWUFBRjtBQUFnQjRCLEVBQUFBLFdBQWhCO0FBQTZCSyxFQUFBQSxhQUE3QjtBQUE0QzRDLEVBQUFBLGNBQTVDO0FBQTRETyxFQUFBQTtBQUE1RCxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB5YXV6bCBmcm9tICd5YXV6bCc7XG5pbXBvcnQgYXJjaGl2ZXIgZnJvbSAnYXJjaGl2ZXInO1xuaW1wb3J0IHsgY3JlYXRlV3JpdGVTdHJlYW0gfSBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBzdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCBmcyBmcm9tICcuL2ZzJztcbmltcG9ydCB7IGlzV2luZG93cyB9IGZyb20gJy4vc3lzdGVtJztcbmltcG9ydCB7IEJhc2U2NEVuY29kZSB9IGZyb20gJ2Jhc2U2NC1zdHJlYW0nO1xuaW1wb3J0IHsgdG9SZWFkYWJsZVNpemVTdHJpbmcsIEdpQiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi90aW1pbmcnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgZ2V0U3RyZWFtIGZyb20gJ2dldC1zdHJlYW0nO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5cbmNvbnN0IG9wZW5aaXAgPSBCLnByb21pc2lmeSh5YXV6bC5vcGVuKTtcbmNvbnN0IHBpcGVsaW5lID0gQi5wcm9taXNpZnkoc3RyZWFtLnBpcGVsaW5lKTtcbmNvbnN0IFpJUF9NQUdJQyA9ICdQSyc7XG5jb25zdCBJRk1UID0gNjE0NDA7XG5jb25zdCBJRkRJUiA9IDE2Mzg0O1xuY29uc3QgSUZMTksgPSA0MDk2MDtcblxuLy8gVGhpcyBjbGFzcyBpcyBtb3N0bHkgY29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21heG9nZGVuL2V4dHJhY3QtemlwL2Jsb2IvbWFzdGVyL2luZGV4LmpzXG5jbGFzcyBaaXBFeHRyYWN0b3Ige1xuICBjb25zdHJ1Y3RvciAoc291cmNlUGF0aCwgb3B0cyA9IHt9KSB7XG4gICAgdGhpcy56aXBQYXRoID0gc291cmNlUGF0aDtcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGV4dHJhY3RGaWxlTmFtZSAoZW50cnkpIHtcbiAgICByZXR1cm4gXy5pc0J1ZmZlcihlbnRyeS5maWxlTmFtZSkgPyBlbnRyeS5maWxlTmFtZS50b1N0cmluZyh0aGlzLm9wdHMuZmlsZU5hbWVzRW5jb2RpbmcpIDogZW50cnkuZmlsZU5hbWU7XG4gIH1cblxuICBhc3luYyBleHRyYWN0ICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBkaXIsXG4gICAgICBmaWxlTmFtZXNFbmNvZGluZyxcbiAgICB9ID0gdGhpcy5vcHRzO1xuICAgIHRoaXMuemlwZmlsZSA9IGF3YWl0IG9wZW5aaXAodGhpcy56aXBQYXRoLCB7XG4gICAgICBsYXp5RW50cmllczogdHJ1ZSxcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVqb3Nod29sZmUveWF1emwvY29tbWl0L2NjNzQ1NWFjNzg5YmE4NDk3MzE4NGU1ZWJkZTA1ODFjZGM0YzNiMzkjZGlmZi0wNGM2ZTkwZmFhYzI2NzVhYTg5ZTIxNzZkMmVlYzdkOFI5NVxuICAgICAgZGVjb2RlU3RyaW5nczogIWZpbGVOYW1lc0VuY29kaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcblxuICAgIHJldHVybiBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnppcGZpbGUub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuemlwZmlsZS5yZWFkRW50cnkoKTtcblxuICAgICAgdGhpcy56aXBmaWxlLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbGVkKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy56aXBmaWxlLm9uKCdlbnRyeScsIGFzeW5jIChlbnRyeSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5leHRyYWN0RmlsZU5hbWUoZW50cnkpO1xuICAgICAgICBpZiAoZmlsZU5hbWUuc3RhcnRzV2l0aCgnX19NQUNPU1gvJykpIHtcbiAgICAgICAgICB0aGlzLnppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzdERpciA9IHBhdGguZGlybmFtZShwYXRoLmpvaW4oZGlyLCBmaWxlTmFtZSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZzLm1rZGlyKGRlc3REaXIsIHtyZWN1cnNpdmU6IHRydWV9KTtcblxuICAgICAgICAgIGNvbnN0IGNhbm9uaWNhbERlc3REaXIgPSBhd2FpdCBmcy5yZWFscGF0aChkZXN0RGlyKTtcbiAgICAgICAgICBjb25zdCByZWxhdGl2ZURlc3REaXIgPSBwYXRoLnJlbGF0aXZlKGRpciwgY2Fub25pY2FsRGVzdERpcik7XG5cbiAgICAgICAgICBpZiAocmVsYXRpdmVEZXN0RGlyLnNwbGl0KHBhdGguc2VwKS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgICAgICAgbmV3IEVycm9yKGBPdXQgb2YgYm91bmQgcGF0aCBcIiR7Y2Fub25pY2FsRGVzdERpcn1cIiBmb3VuZCB3aGlsZSBwcm9jZXNzaW5nIGZpbGUgJHtmaWxlTmFtZX1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCB0aGlzLmV4dHJhY3RFbnRyeShlbnRyeSk7XG4gICAgICAgICAgdGhpcy56aXBmaWxlLnJlYWRFbnRyeSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnppcGZpbGUuY2xvc2UoKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBleHRyYWN0RW50cnkgKGVudHJ5KSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBkaXIsXG4gICAgfSA9IHRoaXMub3B0cztcblxuICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5leHRyYWN0RmlsZU5hbWUoZW50cnkpO1xuICAgIGNvbnN0IGRlc3QgPSBwYXRoLmpvaW4oZGlyLCBmaWxlTmFtZSk7XG5cbiAgICAvLyBjb252ZXJ0IGV4dGVybmFsIGZpbGUgYXR0ciBpbnQgaW50byBhIGZzIHN0YXQgbW9kZSBpbnRcbiAgICBjb25zdCBtb2RlID0gKGVudHJ5LmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMgPj4gMTYpICYgMHhGRkZGO1xuICAgIC8vIGNoZWNrIGlmIGl0J3MgYSBzeW1saW5rIG9yIGRpciAodXNpbmcgc3RhdCBtb2RlIGNvbnN0YW50cylcbiAgICBjb25zdCBpc1N5bWxpbmsgPSAobW9kZSAmIElGTVQpID09PSBJRkxOSztcbiAgICBjb25zdCBpc0RpciA9IChtb2RlICYgSUZNVCkgPT09IElGRElSXG4gICAgICAvLyBGYWlsc2FmZSwgYm9ycm93ZWQgZnJvbSBqc1ppcFxuICAgICAgfHwgZmlsZU5hbWUuZW5kc1dpdGgoJy8nKVxuICAgICAgLy8gY2hlY2sgZm9yIHdpbmRvd3Mgd2VpcmQgd2F5IG9mIHNwZWNpZnlpbmcgYSBkaXJlY3RvcnlcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXhvZ2Rlbi9leHRyYWN0LXppcC9pc3N1ZXMvMTMjaXNzdWVjb21tZW50LTE1NDQ5NDU2NlxuICAgICAgfHwgKGVudHJ5LnZlcnNpb25NYWRlQnkgPj4gOCA9PT0gMCAmJiBlbnRyeS5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzID09PSAxNik7XG4gICAgY29uc3QgcHJvY01vZGUgPSB0aGlzLmdldEV4dHJhY3RlZE1vZGUobW9kZSwgaXNEaXIpICYgMG83Nzc7XG4gICAgLy8gYWx3YXlzIGVuc3VyZSBmb2xkZXJzIGFyZSBjcmVhdGVkXG4gICAgY29uc3QgZGVzdERpciA9IGlzRGlyID8gZGVzdCA6IHBhdGguZGlybmFtZShkZXN0KTtcbiAgICBjb25zdCBta2Rpck9wdGlvbnMgPSB7IHJlY3Vyc2l2ZTogdHJ1ZSB9O1xuICAgIGlmIChpc0Rpcikge1xuICAgICAgbWtkaXJPcHRpb25zLm1vZGUgPSBwcm9jTW9kZTtcbiAgICB9XG4gICAgYXdhaXQgZnMubWtkaXIoZGVzdERpciwgbWtkaXJPcHRpb25zKTtcbiAgICBpZiAoaXNEaXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWFkU3RyZWFtID0gYXdhaXQgQi5wcm9taXNpZnkodGhpcy56aXBmaWxlLm9wZW5SZWFkU3RyZWFtLmJpbmQodGhpcy56aXBmaWxlKSkoZW50cnkpO1xuICAgIGlmIChpc1N5bWxpbmspIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBhd2FpdCBnZXRTdHJlYW0ocmVhZFN0cmVhbSk7XG4gICAgICBhd2FpdCBmcy5zeW1saW5rKGxpbmssIGRlc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBwaXBlbGluZShyZWFkU3RyZWFtLCBmcy5jcmVhdGVXcml0ZVN0cmVhbShkZXN0LCB7IG1vZGU6IHByb2NNb2RlIH0pKTtcbiAgICB9XG4gIH1cblxuICBnZXRFeHRyYWN0ZWRNb2RlIChlbnRyeU1vZGUsIGlzRGlyKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGVmYXVsdERpck1vZGUsXG4gICAgICBkZWZhdWx0RmlsZU1vZGUsXG4gICAgfSA9IHRoaXMub3B0cztcblxuICAgIGxldCBtb2RlID0gZW50cnlNb2RlO1xuICAgIC8vIFNldCBkZWZhdWx0cywgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKG1vZGUgPT09IDApIHtcbiAgICAgIGlmIChpc0Rpcikge1xuICAgICAgICBpZiAoZGVmYXVsdERpck1vZGUpIHtcbiAgICAgICAgICBtb2RlID0gcGFyc2VJbnQoZGVmYXVsdERpck1vZGUsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgIG1vZGUgPSAwbzc1NTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGRlZmF1bHRGaWxlTW9kZSkge1xuICAgICAgICAgIG1vZGUgPSBwYXJzZUludChkZWZhdWx0RmlsZU1vZGUsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgIG1vZGUgPSAwbzY0NDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlO1xuICB9XG59XG5cblxuLyoqXG4gKiBAdHlwZWRlZiBFeHRyYWN0QWxsT3B0aW9uc1xuICogQHByb3BlcnR5IHs/c3RyaW5nfSBmaWxlTmFtZXNFbmNvZGluZyBUaGUgZW5jb2RpbmcgdG8gdXNlIGZvciBleHRyYWN0ZWQgZmlsZSBuYW1lcy5cbiAqIEZvciBaSVAgYXJjaGl2ZXMgY3JlYXRlZCBvbiBNYWNPUyBpdCBpcyB1c3VhbGx5IGV4cGVjdGVkIHRvIGJlIGB1dGY4YC5cbiAqIEJ5IGRlZmF1bHQgaXQgaXMgYXV0b2RldGVjdGVkIGJhc2VkIG9uIHRoZSBlbnRyeSBtZXRhZGF0YSBhbmQgaXMgb25seSBuZWVkZWQgdG8gYmUgc2V0IGV4cGxpY2l0bHlcbiAqIGlmIHRoZSBwYXJ0aWN1bGFyIGFyY2hpdmUgZG9lcyBub3QgY29tcGx5IHRvIHRoZSBzdGFuZGFyZHMsIHdoaWNoIGxlYWRzIHRvIGNvcnJ1cHRlZCBmaWxlIG5hbWVzXG4gKiBhZnRlciBleHRyYWN0aW9uLiBPbmx5IGFwcGxpY2FibGUgaWYgc3lzdGVtIHVuemlwIGJpbmFyeSBpcyBOT1QgYmVpbmcgdXNlZC5cbiAqIEBwcm9wZXJ0eSB7P2Jvb2xlYW59IHVzZVN5c3RlbVVuemlwIFtmYWxzZV0gSWYgdHJ1ZSwgYXR0ZW1wdCB0byB1c2Ugc3lzdGVtIHVuemlwOyBpZiB0aGlzIGZhaWxzLFxuICogZmFsbGJhY2sgdG8gdGhlIEpTIHVuemlwIGltcGxlbWVudGF0aW9uLlxuICovXG5cbi8qKlxuICogRXh0cmFjdCB6aXBmaWxlIHRvIGEgZGlyZWN0b3J5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHppcEZpbGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHNvdXJjZSBaSVAgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3REaXIgVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZm9sZGVyXG4gKiBAcGFyYW0gez9FeHRyYWN0QWxsT3B0aW9uc30gb3B0c1xuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0QWxsVG8gKHppcEZpbGVQYXRoLCBkZXN0RGlyLCBvcHRzID0ge30pIHtcbiAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoZGVzdERpcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRhcmdldCBwYXRoICcke2Rlc3REaXJ9JyBpcyBleHBlY3RlZCB0byBiZSBhYnNvbHV0ZWApO1xuICB9XG5cbiAgYXdhaXQgZnMubWtkaXIoZGVzdERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICBjb25zdCBkaXIgPSBhd2FpdCBmcy5yZWFscGF0aChkZXN0RGlyKTtcbiAgaWYgKG9wdHMudXNlU3lzdGVtVW56aXApIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXh0cmFjdFdpdGhTeXN0ZW1VbnppcCh6aXBGaWxlUGF0aCwgZGlyKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKCd1bnppcCBmYWlsZWQ7IGZhbGxpbmcgYmFjayB0byBKUzogJXMnLCBlcnIuc3RkZXJyIHx8IGVyci5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZXh0cmFjdG9yID0gbmV3IFppcEV4dHJhY3Rvcih6aXBGaWxlUGF0aCwge1xuICAgIC4uLm9wdHMsXG4gICAgZGlyLFxuICB9KTtcbiAgYXdhaXQgZXh0cmFjdG9yLmV4dHJhY3QoKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBzeXN0ZW0gdW56aXAgKGUuZy4sIGAvdXNyL2Jpbi91bnppcGApLiBJZiBhdmFpbGFibGUsIGl0IGlzXG4gKiBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBKUyBpbXBsZW1lbnRhdGlvbi5cbiAqIEJ5IGRlZmF1bHQgYWxsIGZpbGVzIGluIHRoZSBkZXN0RGlyIGdldCBvdmVycmlkZGVuIGlmIGFscmVhZHkgZXhpc3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHppcEZpbGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHNvdXJjZSBaSVAgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3REaXIgVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZm9sZGVyLlxuICogVGhpcyBmb2xkZXIgaXMgZXhwZWN0ZWQgdG8gYWxyZWFkeSBleGlzdCBiZWZvcmUgZXh0cmFjdGluZyB0aGUgYXJjaGl2ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFdpdGhTeXN0ZW1VbnppcCAoemlwRmlsZVBhdGgsIGRlc3REaXIpIHtcbiAgY29uc3QgaXNXaW5kb3dzSG9zdCA9IGlzV2luZG93cygpO1xuICBsZXQgZXhlY3V0YWJsZVBhdGg7XG4gIHRyeSB7XG4gICAgZXhlY3V0YWJsZVBhdGggPSBhd2FpdCBnZXRFeGVjdXRhYmxlUGF0aChcbiAgICAgIGlzV2luZG93c0hvc3QgPyAncG93ZXJzaGVsbC5leGUnIDogJ3VuemlwJ1xuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHN5c3RlbSB1bnppcCcpO1xuICB9XG5cbiAgaWYgKGlzV2luZG93c0hvc3QpIHtcbiAgICAvLyBvbiBXaW5kb3dzIHdlIHVzZSBQb3dlclNoZWxsIHRvIHVuemlwIGZpbGVzXG4gICAgYXdhaXQgZXhlYyhleGVjdXRhYmxlUGF0aCwgW1xuICAgICAgJy1jb21tYW5kJywgJ0V4cGFuZC1BcmNoaXZlJyxcbiAgICAgICctTGl0ZXJhbFBhdGgnLCB6aXBGaWxlUGF0aCxcbiAgICAgICctRGVzdGluYXRpb25QYXRoJywgZGVzdERpcixcbiAgICAgICctRm9yY2UnXG4gICAgXSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gLXEgbWVhbnMgcXVpZXQgKG5vIHN0ZG91dClcbiAgICAvLyAtbyBtZWFucyBvdmVyd3JpdGVcbiAgICAvLyAtZCBpcyB0aGUgZGVzdCBkaXJcbiAgICBhd2FpdCBleGVjKGV4ZWN1dGFibGVQYXRoLCBbXG4gICAgICAnLXEnLFxuICAgICAgJy1vJywgemlwRmlsZVBhdGgsXG4gICAgICAnLWQnLCBkZXN0RGlyXG4gICAgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHRyYWN0IGEgc2luZ2xlIHppcCBlbnRyeSB0byBhIGRpcmVjdG9yeVxuICpcbiAqIEBwYXJhbSB7U3RyZWFtYWJsZX0gemlwRmlsZSBUaGUgc291cmNlIFpJUCBzdHJlYW1cbiAqIEBwYXJhbSB7eWF1emwuWmlwRW50cnl9IGVudHJ5IFRoZSBlbnRyeSBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3REaXIgVGhlIGZ1bGwgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gZm9sZGVyXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIF9leHRyYWN0RW50cnlUbyAoemlwRmlsZSwgZW50cnksIGRlc3REaXIpIHtcbiAgY29uc3QgZHN0UGF0aCA9IHBhdGgucmVzb2x2ZShkZXN0RGlyLCBlbnRyeS5maWxlTmFtZSk7XG5cbiAgLy8gQ3JlYXRlIGRlc3QgZGlyZWN0b3J5IGlmIGRvZXNuJ3QgZXhpc3QgYWxyZWFkeVxuICBpZiAoL1xcLyQvLnRlc3QoZW50cnkuZmlsZU5hbWUpKSB7XG4gICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoZHN0UGF0aCkpIHtcbiAgICAgIGF3YWl0IGZzLm1rZGlycChkc3RQYXRoKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCFhd2FpdCBmcy5leGlzdHMocGF0aC5kaXJuYW1lKGRzdFBhdGgpKSkge1xuICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUoZHN0UGF0aCkpO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgd3JpdGUgc3RyZWFtXG4gIGNvbnN0IHdyaXRlU3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0oZHN0UGF0aCwge2ZsYWdzOiAndyd9KTtcbiAgY29uc3Qgd3JpdGVTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHdyaXRlU3RyZWFtLm9uY2UoJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgIHdyaXRlU3RyZWFtLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgfSk7XG5cbiAgLy8gQ3JlYXRlIHppcFJlYWRTdHJlYW0gYW5kIHBpcGUgZGF0YSB0byB0aGUgd3JpdGUgc3RyZWFtXG4gIC8vIChmb3Igc29tZSBvZGQgcmVhc29uIEIucHJvbWlzaWZ5IGRvZXNuJ3Qgd29yayBvbiB6aXBmaWxlLm9wZW5SZWFkU3RyZWFtLCBpdCBjYXVzZXMgYW4gZXJyb3IgJ2Nsb3NlZCcpXG4gIGNvbnN0IHppcFJlYWRTdHJlYW0gPSBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgemlwRmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgKGVyciwgcmVhZFN0cmVhbSkgPT4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlYWRTdHJlYW0pKTtcbiAgfSk7XG4gIGNvbnN0IHppcFJlYWRTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHppcFJlYWRTdHJlYW0ub25jZSgnZW5kJywgcmVzb2x2ZSk7XG4gICAgemlwUmVhZFN0cmVhbS5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gIH0pO1xuICB6aXBSZWFkU3RyZWFtLnBpcGUod3JpdGVTdHJlYW0pO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSB6aXBSZWFkU3RyZWFtIGFuZCB3cml0ZVN0cmVhbSB0byBlbmQgYmVmb3JlIHJldHVybmluZ1xuICByZXR1cm4gYXdhaXQgQi5hbGwoW1xuICAgIHppcFJlYWRTdHJlYW1Qcm9taXNlLFxuICAgIHdyaXRlU3RyZWFtUHJvbWlzZSxcbiAgXSk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgWmlwRW50cnlcbiAqIEBwcm9wZXJ0eSB7eWF1emwuWmlwRW50cnl9IGVudHJ5IFRoZSBhY3R1YWwgZW50cnkgaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGV4dHJhY3RFbnRyeVRvIEFuIGFzeW5jIGZ1bmN0aW9uLCB3aGljaCBhY2NlcHRzIG9uZSBwYXJhbWV0ZXIuXG4gKiBUaGlzIHBhcmFtZXRlciBjb250YWlucyB0aGUgZGVzdGluYXRpb24gZm9sZGVyIHBhdGggdG8gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBleHRyYWN0IHRoZSBlbnRyeS5cbiAqL1xuXG4vKipcbiAqIEdldCBlbnRyaWVzIGZvciBhIHppcCBmb2xkZXJcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gemlwRmlsZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgc291cmNlIFpJUCBmaWxlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbkVudHJ5IENhbGxiYWNrIHdoZW4gZW50cnkgaXMgcmVhZC5cbiAqIFRoZSBjYWxsYmFjayBpcyBleHBlY3RlZCB0byBhY2NlcHQgb25lIGFyZ3VtZW50IG9mIFppcEVudHJ5IHR5cGUuXG4gKiBUaGUgaXRlcmF0aW9uIHRocm91Z2ggdGhlIHNvdXJjZSB6aXAgZmlsZSB3aWxsIGJpIHRlcm1pbmF0ZWQgYXMgc29vbiBhc1xuICogdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGVxdWFscyB0byBgZmFsc2VgLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkRW50cmllcyAoemlwRmlsZVBhdGgsIG9uRW50cnkpIHtcbiAgLy8gT3BlbiBhIHppcCBmaWxlIGFuZCBzdGFydCByZWFkaW5nIGVudHJpZXNcbiAgY29uc3QgemlwZmlsZSA9IGF3YWl0IG9wZW5aaXAoemlwRmlsZVBhdGgsIHtsYXp5RW50cmllczogdHJ1ZX0pO1xuICBjb25zdCB6aXBSZWFkU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB6aXBmaWxlLm9uY2UoJ2VuZCcsIHJlc29sdmUpO1xuICAgIHppcGZpbGUub25jZSgnZXJyb3InLCByZWplY3QpO1xuXG4gICAgLy8gT24gZWFjaCBlbnRyeSwgY2FsbCAnb25FbnRyeScgYW5kIHRoZW4gcmVhZCB0aGUgbmV4dCBlbnRyeVxuICAgIHppcGZpbGUub24oJ2VudHJ5JywgYXN5bmMgKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBvbkVudHJ5KHtcbiAgICAgICAgZW50cnksXG4gICAgICAgIGV4dHJhY3RFbnRyeVRvOiBhc3luYyAoZGVzdERpcikgPT4gYXdhaXQgX2V4dHJhY3RFbnRyeVRvKHppcGZpbGUsIGVudHJ5LCBkZXN0RGlyKVxuICAgICAgfSk7XG4gICAgICBpZiAocmVzID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gemlwZmlsZS5lbWl0KCdlbmQnKTtcbiAgICAgIH1cbiAgICAgIHppcGZpbGUucmVhZEVudHJ5KCk7XG4gICAgfSk7XG4gIH0pO1xuICB6aXBmaWxlLnJlYWRFbnRyeSgpO1xuXG4gIC8vIFdhaXQgZm9yIHRoZSBlbnRyaWVzIHRvIGZpbmlzaCBiZWluZyBpdGVyYXRlZCB0aHJvdWdoXG4gIHJldHVybiBhd2FpdCB6aXBSZWFkU3RyZWFtUHJvbWlzZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBaaXBPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVuY29kZVRvQmFzZTY0IFtmYWxzZV0gV2hldGhlciB0byBlbmNvZGVcbiAqIHRoZSByZXN1bHRpbmcgYXJjaGl2ZSB0byBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICogQHByb3BlcnR5IHtib29sZWFufSBpc01ldGVyZWQgW3RydWVdIFdoZXRoZXIgdG8gbG9nIHRoZSBhY3R1YWxcbiAqIGFyY2hpdmVyIHBlcmZvcm1hbmNlXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4U2l6ZSBbMTA3Mzc0MTgyNF0gVGhlIG1heGltdW0gc2l6ZSBvZlxuICogdGhlIHJlc3VsdGluZyBhcmNoaXZlIGluIGJ5dGVzLiBUaGlzIGlzIHNldCB0byAxR0IgYnkgZGVmYXVsdCwgYmVjYXVzZVxuICogQXBwaXVtIGxpbWl0cyB0aGUgbWF4aW11bSBIVFRQIGJvZHkgc2l6ZSB0byAxR0IuIEFsc28sIHRoZSBOb2RlSlMgaGVhcFxuICogc2l6ZSBtdXN0IGJlIGVub3VnaCB0byBrZWVwIHRoZSByZXN1bHRpbmcgb2JqZWN0ICh1c3VhbGx5IHRoaXMgc2l6ZSBpc1xuICogbGltaXRlZCB0byAxLjQgR0IpXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGV2ZWwgWzldIFRoZSBjb21wcmVzc2lvbiBsZXZlbC4gVGhlIG1heGltdW1cbiAqIGxldmVsIGlzIDkgKHRoZSBiZXN0IGNvbXByZXNzaW9uLCB3b3JzdCBwZXJmb3JtYW5jZSkuIFRoZSBtaW5pbXVtXG4gKiBjb21wcmVzc2lvbiBsZXZlbCBpcyAwIChubyBjb21wcmVzc2lvbikuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyBjb250ZW50cyBvZiBsb2NhbCBkaXJlY3RvcnkgdG8gYW4gaW4tbWVtb3J5IC56aXAgYnVmZmVyXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNyY1BhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgZm9sZGVyIG9yIGZpbGUgYmVpbmcgemlwcGVkXG4gKiBAcGFyYW0ge1ppcE9wdGlvbnN9IG9wdHMgWmlwcGluZyBvcHRpb25zXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBaaXBwZWQgKGFuZCBlbmNvZGVkIGlmIGBlbmNvZGVUb0Jhc2U2NGAgaXMgdHJ1dGh5KVxuICogY29udGVudCBvZiB0aGUgc291cmNlIHBhdGggYXMgbWVtb3J5IGJ1ZmZlclxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSByZWFkaW5nIHRoZSBzb3VyY2VcbiAqIG9yIHRoZSBzb3VyY2UgaXMgdG9vIGJpZ1xuICovXG5hc3luYyBmdW5jdGlvbiB0b0luTWVtb3J5WmlwIChzcmNQYXRoLCBvcHRzID0ge30pIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoc3JjUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1Y2ggZmlsZSBvciBmb2xkZXI6ICR7c3JjUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBpc01ldGVyZWQgPSB0cnVlLFxuICAgIGVuY29kZVRvQmFzZTY0ID0gZmFsc2UsXG4gICAgbWF4U2l6ZSA9IDEgKiBHaUIsXG4gICAgbGV2ZWwgPSA5LFxuICB9ID0gb3B0cztcbiAgY29uc3QgcmVzdWx0QnVmZmVycyA9IFtdO1xuICBsZXQgcmVzdWx0QnVmZmVyc1NpemUgPSAwO1xuICAvLyBDcmVhdGUgYSB3cml0YWJsZSBzdHJlYW0gdGhhdCB6aXAgYnVmZmVycyB3aWxsIGJlIHN0cmVhbWVkIHRvXG4gIGNvbnN0IHJlc3VsdFdyaXRlU3RyZWFtID0gbmV3IHN0cmVhbS5Xcml0YWJsZSh7XG4gICAgd3JpdGU6IChidWZmZXIsIGVuY29kaW5nLCBuZXh0KSA9PiB7XG4gICAgICByZXN1bHRCdWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgIHJlc3VsdEJ1ZmZlcnNTaXplICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICBpZiAobWF4U2l6ZSA+IDAgJiYgcmVzdWx0QnVmZmVyc1NpemUgPiBtYXhTaXplKSB7XG4gICAgICAgIHJlc3VsdFdyaXRlU3RyZWFtLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKGBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIGAgK1xuICAgICAgICAgIGBhcmNoaXZlIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiAke3RvUmVhZGFibGVTaXplU3RyaW5nKG1heFNpemUpfWApKTtcbiAgICAgIH1cbiAgICAgIG5leHQoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBaaXAgJ3NyY0RpcicgYW5kIHN0cmVhbSBpdCB0byB0aGUgYWJvdmUgd3JpdGFibGUgc3RyZWFtXG4gIGNvbnN0IGFyY2hpdmUgPSBhcmNoaXZlcignemlwJywge1xuICAgIHpsaWI6IHtsZXZlbH1cbiAgfSk7XG4gIGxldCBzcmNTaXplID0gbnVsbDtcbiAgY29uc3QgYmFzZTY0RW5jb2RlclN0cmVhbSA9IGVuY29kZVRvQmFzZTY0ID8gbmV3IEJhc2U2NEVuY29kZSgpIDogbnVsbDtcbiAgY29uc3QgcmVzdWx0V3JpdGVTdHJlYW1Qcm9taXNlID0gbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlc3VsdFdyaXRlU3RyZWFtLm9uY2UoJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgIGlmIChiYXNlNjRFbmNvZGVyU3RyZWFtKSB7XG4gICAgICAgIGFyY2hpdmUudW5waXBlKGJhc2U2NEVuY29kZXJTdHJlYW0pO1xuICAgICAgICBiYXNlNjRFbmNvZGVyU3RyZWFtLnVucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmNoaXZlLnVucGlwZShyZXN1bHRXcml0ZVN0cmVhbSk7XG4gICAgICB9XG4gICAgICBhcmNoaXZlLmFib3J0KCk7XG4gICAgICBhcmNoaXZlLmRlc3Ryb3koKTtcbiAgICAgIHJlamVjdChlKTtcbiAgICB9KTtcbiAgICByZXN1bHRXcml0ZVN0cmVhbS5vbmNlKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBzcmNTaXplID0gYXJjaGl2ZS5wb2ludGVyKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xuICBjb25zdCBhcmNoaXZlU3RyZWFtUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhcmNoaXZlLm9uY2UoJ2ZpbmlzaCcsIHJlc29sdmUpO1xuICAgIGFyY2hpdmUub25jZSgnZXJyb3InLCAoZSkgPT4gcmVqZWN0KFxuICAgICAgbmV3IEVycm9yKGBGYWlsZWQgdG8gYXJjaGl2ZSAnJHtzcmNQYXRofSc6ICR7ZS5tZXNzYWdlfWApKSk7XG4gIH0pO1xuICBjb25zdCB0aW1lciA9IGlzTWV0ZXJlZCA/IG5ldyBUaW1lcigpLnN0YXJ0KCkgOiBudWxsO1xuICBpZiAoKGF3YWl0IGZzLnN0YXQoc3JjUGF0aCkpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBhcmNoaXZlLmRpcmVjdG9yeShzcmNQYXRoLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgYXJjaGl2ZS5maWxlKHNyY1BhdGgsIHtcbiAgICAgIG5hbWU6IHBhdGguYmFzZW5hbWUoc3JjUGF0aCksXG4gICAgfSk7XG4gIH1cbiAgaWYgKGJhc2U2NEVuY29kZXJTdHJlYW0pIHtcbiAgICBhcmNoaXZlLnBpcGUoYmFzZTY0RW5jb2RlclN0cmVhbSk7XG4gICAgYmFzZTY0RW5jb2RlclN0cmVhbS5waXBlKHJlc3VsdFdyaXRlU3RyZWFtKTtcbiAgfSBlbHNlIHtcbiAgICBhcmNoaXZlLnBpcGUocmVzdWx0V3JpdGVTdHJlYW0pO1xuICB9XG4gIGFyY2hpdmUuZmluYWxpemUoKTtcblxuICAvLyBXYWl0IGZvciB0aGUgc3RyZWFtcyB0byBmaW5pc2hcbiAgYXdhaXQgQi5hbGwoW2FyY2hpdmVTdHJlYW1Qcm9taXNlLCByZXN1bHRXcml0ZVN0cmVhbVByb21pc2VdKTtcblxuICBpZiAodGltZXIpIHtcbiAgICBsb2cuZGVidWcoYFppcHBlZCAke2VuY29kZVRvQmFzZTY0ID8gJ2FuZCBiYXNlNjQtZW5jb2RlZCAnIDogJyd9YCArXG4gICAgICBgJyR7cGF0aC5iYXNlbmFtZShzcmNQYXRoKX0nIGAgK1xuICAgICAgKHNyY1NpemUgPyBgKCR7dG9SZWFkYWJsZVNpemVTdHJpbmcoc3JjU2l6ZSl9KSBgIDogJycpICtcbiAgICAgIGBpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNTZWNvbmRzLnRvRml4ZWQoMyl9cyBgICtcbiAgICAgIGAoY29tcHJlc3Npb24gbGV2ZWw6ICR7bGV2ZWx9KWApO1xuICB9XG4gIC8vIFJldHVybiB0aGUgYXJyYXkgb2YgemlwIGJ1ZmZlcnMgY29uY2F0ZW5hdGVkIGludG8gb25lIGJ1ZmZlclxuICByZXR1cm4gQnVmZmVyLmNvbmNhdChyZXN1bHRCdWZmZXJzKTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGlzIGEgdmFsaWQgWklQIGFyY2hpdmVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGdWxsIHBhdGggdG8gdGhlIGZpbGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSB2YWxpZCBaSVAgYXJjaGl2ZVxuICovXG5hc3luYyBmdW5jdGlvbiBhc3NlcnRWYWxpZFppcCAoZmlsZVBhdGgpIHtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtmaWxlUGF0aH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gIH1cblxuICBjb25zdCB7c2l6ZX0gPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgaWYgKHNpemUgPCA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtmaWxlUGF0aH0nIGlzIHRvbyBzbWFsbCB0byBiZSBhIFpJUCBhcmNoaXZlYCk7XG4gIH1cbiAgY29uc3QgZmQgPSBhd2FpdCBmcy5vcGVuKGZpbGVQYXRoLCAncicpO1xuICB0cnkge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhaSVBfTUFHSUMubGVuZ3RoKTtcbiAgICBhd2FpdCBmcy5yZWFkKGZkLCBidWZmZXIsIDAsIFpJUF9NQUdJQy5sZW5ndGgsIDApO1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGJ1ZmZlci50b1N0cmluZygnYXNjaWknKTtcbiAgICBpZiAoc2lnbmF0dXJlICE9PSBaSVBfTUFHSUMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgc2lnbmF0dXJlICcke3NpZ25hdHVyZX0nIG9mICcke2ZpbGVQYXRofScgYCArXG4gICAgICAgIGBpcyBub3QgZXF1YWwgdG8gdGhlIGV4cGVjdGVkIFpJUCBhcmNoaXZlIHNpZ25hdHVyZSAnJHtaSVBfTUFHSUN9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5jbG9zZShmZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBaaXBDb21wcmVzc2lvbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsZXZlbCBbOV0gLSBDb21wcmVzc2lvbiBsZXZlbCBpbiByYW5nZSAwLi45XG4gKiAoZ3JlYXRlciBudW1iZXJzIG1lYW4gYmV0dGVyIGNvbXByZXNzaW9uLCBidXQgbG9uZ2VyIHByb2Nlc3NpbmcgdGltZSlcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFppcFNvdXJjZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gcGF0dGVybiBbJyoqXFwvKiddIC0gR0xPQiBwYXR0ZXJuIGZvciBjb21wcmVzc2lvblxuICogQHByb3BlcnR5IHshc3RyaW5nfSBjd2QgLSBUaGUgc291cmNlIHJvb3QgZm9sZGVyICh0aGUgcGFyZW50IGZvbGRlciBvZlxuICogdGhlIGRlc3RpbmF0aW9uIGZpbGUgYnkgZGVmYXVsdClcbiAqIEBwcm9wZXJ0eSB7P0FycmF5PHN0cmluZz59IGlnbm9yZSAtIFRoZSBsaXN0IG9mIGlnbm9yZWQgcGF0dGVybnNcbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJjaGl2ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZ2xvYiBwYXR0ZXJuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGRzdFBhdGggLSBUaGUgcmVzdWx0aW5nIGFyY2hpdmUgcGF0aFxuICogQHBhcmFtIHtaaXBTb3VyY2VPcHRpb25zfSBzcmMgLSBTb3VyY2Ugb3B0aW9uc1xuICogQHBhcmFtIHtaaXBDb21wcmVzc2lvbk9wdGlvbnN9IG9wdHMgLSBDb21wcmVzc2lvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBhcmNoaXZlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRvQXJjaGl2ZSAoZHN0UGF0aCwgc3JjID0ge30sIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgbGV2ZWwgPSA5LFxuICB9ID0gb3B0cztcbiAgY29uc3Qge1xuICAgIHBhdHRlcm4gPSAnKiovKicsXG4gICAgY3dkID0gcGF0aC5kaXJuYW1lKGRzdFBhdGgpLFxuICAgIGlnbm9yZSA9IFtdLFxuICB9ID0gc3JjO1xuICBjb25zdCBhcmNoaXZlID0gYXJjaGl2ZXIoJ3ppcCcsIHsgemxpYjogeyBsZXZlbCB9fSk7XG4gIGNvbnN0IHN0cmVhbSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRzdFBhdGgpO1xuICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFyY2hpdmVcbiAgICAgIC5nbG9iKHBhdHRlcm4sIHtcbiAgICAgICAgY3dkLFxuICAgICAgICBpZ25vcmUsXG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIHJlamVjdClcbiAgICAgIC5waXBlKHN0cmVhbSk7XG4gICAgc3RyZWFtXG4gICAgICAub24oJ2Vycm9yJywgKGUpID0+IHtcbiAgICAgICAgYXJjaGl2ZS51bnBpcGUoc3RyZWFtKTtcbiAgICAgICAgYXJjaGl2ZS5hYm9ydCgpO1xuICAgICAgICBhcmNoaXZlLmRlc3Ryb3koKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfSlcbiAgICAgIC5vbignZmluaXNoJywgcmVzb2x2ZSk7XG4gICAgYXJjaGl2ZS5maW5hbGl6ZSgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhbmQgbWVtb2l6ZXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZ2l2ZW4gZXhlY3V0YWJsZS5cbiAqIFJlamVjdHMgaWYgaXQgaXMgbm90IGZvdW5kLlxuICovXG5jb25zdCBnZXRFeGVjdXRhYmxlUGF0aCA9IF8ubWVtb2l6ZShcbiAgLyoqXG4gICAqIEByZXR1cm5zIHtCPHN0cmluZz59IEZ1bGwgUGF0aCB0byB0aGUgZXhlY3V0YWJsZVxuICAgKi9cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0RXhlY3V0YWJsZVBhdGggKGJpbmFyeU5hbWUpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGF3YWl0IGZzLndoaWNoKGJpbmFyeU5hbWUpO1xuICAgIGxvZy5kZWJ1ZyhgRm91bmQgJyVzJyBhdCAnJXMnYCwgYmluYXJ5TmFtZSwgZnVsbFBhdGgpO1xuICAgIHJldHVybiBmdWxsUGF0aDtcbiAgfVxuKTtcblxuZXhwb3J0IHsgZXh0cmFjdEFsbFRvLCByZWFkRW50cmllcywgdG9Jbk1lbW9yeVppcCwgX2V4dHJhY3RFbnRyeVRvLFxuICBhc3NlcnRWYWxpZFppcCwgdG9BcmNoaXZlIH07XG5leHBvcnQgZGVmYXVsdCB7IGV4dHJhY3RBbGxUbywgcmVhZEVudHJpZXMsIHRvSW5NZW1vcnlaaXAsIGFzc2VydFZhbGlkWmlwLCB0b0FyY2hpdmUgfTtcbiJdfQ==
package/lib/env.js ADDED
@@ -0,0 +1,162 @@
1
+ // @ts-check
2
+ import _ from 'lodash';
3
+ import { homedir } from 'os';
4
+ import path from 'path';
5
+ import pkgDir from 'pkg-dir';
6
+ import readPkg from 'read-pkg';
7
+ import { npm } from './npm';
8
+
9
+ /**
10
+ * Path to the default `APPIUM_HOME` dir (`~/.appium`).
11
+ * @type {string}
12
+ */
13
+ export const DEFAULT_APPIUM_HOME = path.resolve(homedir(), '.appium');
14
+
15
+ /**
16
+ * Basename of extension manifest file.
17
+ * @type {string}
18
+ */
19
+ export const MANIFEST_BASENAME = 'extensions.yaml';
20
+
21
+ /**
22
+ * Relative path to extension manifest file from `APPIUM_HOME`.
23
+ * @type {string}
24
+ */
25
+ export const MANIFEST_RELATIVE_PATH = path.join(
26
+ 'node_modules',
27
+ '.cache',
28
+ 'appium',
29
+ MANIFEST_BASENAME,
30
+ );
31
+
32
+ /**
33
+ * Returns `true` if appium is installed as a dependency of a local package at `cwd`.
34
+ *
35
+ * The following special cases are considered:
36
+ *
37
+ * - If `resolved` starts with `file:`, then `cwd` likely points to `appium-monorepo`, and (for now) we expect `APPIUM_HOME` to be the default.
38
+ * - If the `version` begins with `0` or `1`, we're looking at an old version of `appium` (not this one!)
39
+ *
40
+ * Note that we are _not_ performing the check "is the currently running Appium the same one as found in the list of dependencies", because I'm not sure it actually matters (assuming the versions are compatible).
41
+ * Regardless we may want to make this more robust in the future, as we hit edge cases.
42
+ *
43
+ * _Also_ note that if `appium` appears as a dependency in `package.json` _but it is not yet installed_ this function will resolve `false`. This may not be exactly what we want.
44
+ *
45
+ * @param {string} cwd
46
+ * @returns {Promise<boolean>}
47
+ */
48
+ export async function hasAppiumDependency (cwd) {
49
+ /**
50
+ * @todo type this
51
+ * @type {object}
52
+ */
53
+ let listResult;
54
+ /** @type {string|undefined} */
55
+ let resolved;
56
+ /** @type {string|undefined} */
57
+ let version;
58
+ try {
59
+ listResult = await npm.list(cwd, 'appium');
60
+ // if "resolved" is empty, then `appium` is in dependencies, but `npm install` has not been run.
61
+ // in other words, this function can resolve `true` even if `resolved` is empty...
62
+ resolved = listResult?.dependencies?.appium?.resolved ?? '';
63
+ // ...however, it cannot do so unless `version` is nonempty.
64
+ version = listResult?.dependencies?.appium?.version ?? '';
65
+ } catch {
66
+ try {
67
+ const pkg = await readPackageInDir(cwd);
68
+ // we're only going to look at these three fields for now, but we can change it later if need be.
69
+ version = resolved =
70
+ pkg?.dependencies?.appium ??
71
+ pkg?.devDependencies?.appium ??
72
+ pkg?.optionalDependencies?.appium;
73
+ } catch {}
74
+ }
75
+ return Boolean(
76
+ version &&
77
+ (!resolved || (resolved && !resolved.startsWith('file:'))) &&
78
+ // doing any further checking here may be a fool's errand, because you can pin the version
79
+ // to a _lot_ of different things (tags, URLs, etc).
80
+ !version.startsWith('1') &&
81
+ !version.startsWith('0'),
82
+ );
83
+ }
84
+
85
+ /**
86
+ * Read a `package.json` in dir `cwd`. If none found, return `undefined`.
87
+ */
88
+ export const readPackageInDir = _.memoize(
89
+ /**
90
+ *
91
+ * @param {string} cwd - Directory ostensibly having a `package.json`
92
+ * @returns {Promise<import('read-pkg').NormalizedPackageJson|undefined>}
93
+ */
94
+ async function _readPackageInDir (cwd) {
95
+ return await readPkg({cwd, normalize: true});
96
+ },
97
+ );
98
+
99
+ /**
100
+ * Determines location of Appium's "home" dir
101
+ *
102
+ * - If `APPIUM_HOME` is set in the environment, use that
103
+ * - If we have an `extensions.yaml` in {@linkcode DEFAULT_APPIUM_HOME}, then use that.
104
+ * - If we find a `package.json` in or above `cwd` and {@linkcode shouldUseCwdForAppiumHome} returns `true`, then use the directory containing the `package.json`.
105
+ */
106
+ export const resolveAppiumHome = _.memoize(
107
+ /**
108
+ * @param {string} [cwd] - Current working directory. _Must_ be absolute, if specified.
109
+ * @returns {Promise<string>}
110
+ */
111
+ async function _resolveAppiumHome (cwd = process.cwd()) {
112
+ if (process.env.APPIUM_HOME) {
113
+ return process.env.APPIUM_HOME;
114
+ }
115
+
116
+ if (!path.isAbsolute(cwd)) {
117
+ throw new TypeError('`cwd` parameter must be an absolute path');
118
+ }
119
+
120
+ /** @type {string|undefined} */
121
+ let currentPkgDir;
122
+
123
+ try {
124
+ currentPkgDir = await pkgDir(cwd);
125
+
126
+ // if we can't find a `package.json`, use the default
127
+ if (!currentPkgDir) {
128
+ return DEFAULT_APPIUM_HOME;
129
+ }
130
+ } catch {
131
+ // unclear if this can actually happen
132
+ /* istanbul ignore next */
133
+ return DEFAULT_APPIUM_HOME;
134
+ }
135
+
136
+ return (await hasAppiumDependency(currentPkgDir))
137
+ ? currentPkgDir
138
+ : DEFAULT_APPIUM_HOME;
139
+ },
140
+ );
141
+
142
+ /**
143
+ * Figure out manifest path based on `appiumHome`.
144
+ *
145
+ * The assumption is that, if `appiumHome` has been provided, it was resolved via {@link resolveAppiumHome `resolveAppiumHome()`}! If unsure,
146
+ * don't pass a parameter and let `resolveAppiumHome()` handle it.
147
+ */
148
+ export const resolveManifestPath = _.memoize(
149
+ /**
150
+ * @param {string} [appiumHome] - Appium home directory
151
+ * @returns {Promise<string>}
152
+ */
153
+ async function _resolveManifestPath (appiumHome) {
154
+ // can you "await" in a default parameter? is that a good idea?
155
+ appiumHome = appiumHome ?? (await resolveAppiumHome());
156
+ return path.join(appiumHome, MANIFEST_RELATIVE_PATH);
157
+ },
158
+ );
159
+
160
+ /**
161
+ * @typedef {import('read-pkg').NormalizedPackageJson} NormalizedPackageJson
162
+ */