oxygen-cli 1.20.2 → 1.21.0-beta.12

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 (33) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/build/core/OxygenCore.js +4 -3
  3. package/build/errors/OxygenError.js +9 -5
  4. package/build/errors/helper.js +10 -5
  5. package/build/lib/util.js +5 -2
  6. package/build/ox_modules/module-db.js +2 -2
  7. package/build/ox_modules/module-email.js +97 -49
  8. package/build/ox_modules/module-eyes.js +4 -21
  9. package/build/ox_modules/module-http.js +148 -62
  10. package/build/ox_modules/module-mailinator.js +25 -32
  11. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +4 -11
  12. package/build/ox_modules/module-mob/commands/selectWindow.js +4 -7
  13. package/build/ox_modules/module-mob/commands/sendKeys.js +2 -2
  14. package/build/ox_modules/module-mob.js +65 -52
  15. package/build/ox_modules/module-pdf.js +12 -32
  16. package/build/ox_modules/module-proxy.js +9 -9
  17. package/build/ox_modules/module-serial.js +14 -12
  18. package/build/ox_modules/module-soap.js +113 -77
  19. package/build/ox_modules/module-twilio.js +27 -27
  20. package/build/ox_modules/module-utils.js +43 -5
  21. package/build/ox_modules/module-web/commands/fullscreenWindow.js +24 -0
  22. package/build/ox_modules/module-web/commands/index.js +25 -1
  23. package/build/ox_modules/module-web/commands/isSelected.js +2 -2
  24. package/build/ox_modules/module-web/commands/maximizeWindow.js +24 -0
  25. package/build/ox_modules/module-web/commands/minimizeWindow.js +24 -0
  26. package/build/ox_modules/module-web/commands/selectWindow.js +4 -7
  27. package/build/ox_modules/module-web/commands/waitForNotExist.js +2 -3
  28. package/build/ox_modules/module-web.js +87 -64
  29. package/build/ox_modules/utils.js +40 -4
  30. package/build/ox_services/service-devtools/submodule-network.js +8 -8
  31. package/build/ox_services/service-devtools.js +3 -3
  32. package/build/runners/WorkerProcess.js +22 -20
  33. package/package.json +8 -5
@@ -13,8 +13,6 @@ var _events = require("events");
13
13
 
14
14
  var _when = require("when");
15
15
 
16
- var _deasync = _interopRequireDefault(require("deasync"));
17
-
18
16
  var _logger = _interopRequireDefault(require("../lib/logger"));
19
17
 
20
18
  var _debugger = _interopRequireDefault(require("../lib/debugger"));
@@ -70,23 +68,27 @@ class WorkerProcess extends _events.EventEmitter {
70
68
  let globalNpmModulesPath;
71
69
 
72
70
  if (process.platform === 'darwin') {
73
- let done = false;
74
- (0, _child_process.exec)('npm root -g', {
75
- cwd: process.cwd()
76
- }, function (err, stdout) {
77
- if (err) {
78
- console.log('darwin npm root error:', err);
79
- done = true;
80
- }
81
-
82
- if (stdout && stdout.toString) {
83
- globalNpmModulesPath = stdout.toString().trim();
84
- }
85
-
86
- done = true;
87
- });
88
-
89
- _deasync.default.loopWhile(() => !done);
71
+ await (() => {
72
+ return new Promise((resolve, reject) => {
73
+ try {
74
+ (0, _child_process.exec)('npm root -g', {
75
+ cwd: process.cwd()
76
+ }, function (err, stdout) {
77
+ if (err) {
78
+ console.log('darwin npm root error:', err);
79
+ resolve();
80
+ }
81
+
82
+ if (stdout && stdout.toString) {
83
+ globalNpmModulesPath = stdout.toString().trim();
84
+ resolve();
85
+ }
86
+ });
87
+ } catch (e) {
88
+ reject(e);
89
+ }
90
+ });
91
+ })();
90
92
  } else {
91
93
  const execResult = (0, _child_process.execSync)('npm root -g');
92
94
 
@@ -460,4 +462,4 @@ class WorkerProcess extends _events.EventEmitter {
460
462
  }
461
463
 
462
464
  exports.default = WorkerProcess;
463
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL1dvcmtlclByb2Nlc3MuanMiXSwibmFtZXMiOlsibG9nIiwic25vb3plIiwibXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJXb3JrZXJQcm9jZXNzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJ3b3JrZXJQYXRoIiwiZGVidWdNb2RlIiwiZGVidWdQb3J0IiwibmFtZSIsIm5wbUdSb290RXhlY3V0aW9uIiwiX25hbWUiLCJfaXNSdW5uaW5nIiwiX2lzSW5pdGlhbGl6ZWQiLCJfc3RvcHBlZEJ5VXNlciIsIl9waWQiLCJfY2hpbGRQcm9jIiwiX2RlYnVnTW9kZSIsIl9kZWJ1Z1BvcnQiLCJfd29ya2VyUGF0aCIsIl9ucG1HUm9vdEV4ZWN1dGlvbiIsIl9icmVha3BvaW50RXJyb3JzIiwiX2NhbGxzIiwiX2V2ZW50SGFuZGxlcnMiLCJzdGFydCIsImVudiIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJPWF9XT1JLRVIiLCJERUJVRyIsImlzTmFOIiwiTk9fVVBEQVRFX05PVElGSUVSIiwiaW5mbyIsImZvcmtPcHRzIiwiY3dkIiwiZXhlY0FyZ3YiLCJkZXRhY2hlZCIsInB1c2giLCJnbG9iYWxOcG1Nb2R1bGVzUGF0aCIsInBsYXRmb3JtIiwiZG9uZSIsImVyciIsInN0ZG91dCIsImNvbnNvbGUiLCJ0b1N0cmluZyIsInRyaW0iLCJkZWFzeW5jIiwibG9vcFdoaWxlIiwiZXhlY1Jlc3VsdCIsIk5PREVfUEFUSCIsImUiLCJfaG9va0NoaWxkUHJvY0V2ZW50cyIsInN0YXJ0RGVidWdnZXIiLCJfaW5pdGlhbGl6ZURlYnVnZ2VyIiwic3RvcCIsInN0YXR1cyIsIl9kZWJ1Z2dlciIsIl9wYXVzZWQiLCJkaXNhYmxlIiwicmVzdW1lVGVybWluYXRlIiwiaW52b2tlIiwiY2xvc2UiLCJfc2VuZCIsInR5cGUiLCJraWxsIiwiX3Jlc2V0IiwiaW5pdCIsInJpZCIsIm9wdGlvbnMiLCJjYXBzIiwiYmVmb3JlVGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiYWZ0ZXJUaW1lIiwiZHVyYXRpb24iLCJkaXNwb3NlIiwiZGlzcG9zZU1vZHVsZXMiLCJkZWJ1Z2dlciIsImlzUnVubmluZyIsImlzSW5pdGlhbGl6ZWQiLCJydW4iLCJydW5PcHRzIiwic3Vic2NyaWJlIiwiZXZlbnROYW1lIiwiaGFuZGxlciIsImV2ZW50IiwibWV0aG9kIiwiYXJncyIsIkFycmF5IiwicHJvdG90eXBlIiwic2xpY2UiLCJjYWxsIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic2hpZnQiLCJjYWxsSWQiLCJveHV0aWwiLCJnZW5lcmF0ZVVuaXF1ZUlkIiwicHJvbWlzZSIsImludm9rZVRlc3RIb29rIiwiaG9va05hbWUiLCJob29rQXJncyIsIm1lc3NhZ2UiLCJzZW5kIiwiX3doZW5PeHlnZW5EaXNwb3NlZCIsIl93aGVuT3h5Z2VuSW5pdGlhbGl6ZWQiLCJfd2hlbk1vZHVsZXNEaXNwb3NlZCIsIm9uIiwiX2hhbmRsZUNoaWxkTWVzc2FnZSIsImJpbmQiLCJfaGFuZGxlQ2hpbGRFcnJvciIsIl9oYW5kbGVDaGlsZEV4aXQiLCJfaGFuZGxlQ2hpbGREaXNjb25uZWN0IiwiX2hhbmRsZUNoaWxkVW5jYXVnaHRFeGNlcHRpb24iLCJfaGFuZGxlQ2hpbGRTaWdJbnQiLCJtc2ciLCJoYXNPd25Qcm9wZXJ0eSIsImVycm9yIiwicmVqZWN0IiwicmV0dmFsIiwiZW1pdCIsIl9oYW5kbGVXb3JrZXJFdmVudCIsImFwcGx5IiwidW5kZWZpbmVkIiwiZGVidWciLCJleGl0Q29kZSIsInNpZ25hbCIsIkRlYnVnZ2VyIiwid2hlbkRlYnVnZ2VyUmVhZHkiLCJfdGhpcyIsImNvbnRpbnVlIiwiaXNSZXNvbHZlZCIsImJyZWFrcG9pbnREYXRhIiwiYnJlYWtFcnJvciIsImluY2x1ZGVzIiwiY29ubmVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7O0FBR0E7O0FBQ0E7Ozs7QUFIQSxNQUFN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QTFYbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JrLCBleGVjU3luYywgZXhlYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5pbXBvcnQgZGVhc3luYyBmcm9tICdkZWFzeW5jJztcclxuXHJcbi8vIHNldHVwIGxvZ2dlclxyXG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xpYi9sb2dnZXInO1xyXG5jb25zdCBsb2cgPSBsb2dnZXIoJ1dvcmtlclByb2Nlc3MnKTtcclxuXHJcbmltcG9ydCBEZWJ1Z2dlciBmcm9tICcuLi9saWIvZGVidWdnZXInO1xyXG5pbXBvcnQgb3h1dGlsIGZyb20gJy4uL2xpYi91dGlsJztcclxuXHJcbi8vIHNub296ZSBmdW5jdGlvbiAtIGFzeW5jIHdyYXBwZXIgYXJvdW5kIHNldFRpbWVvdXQgZnVuY3Rpb25cclxuY29uc3Qgc25vb3plID0gbXMgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XHJcblxyXG4vKipcclxuICogV29ya2VyUHJvY2VzcyByZXNwb25zaWJsZSBmb3Igc3Bhd25pbmcgYSB3b3JrZXIgcHJvY2VzcyB0aGUgdGVzdCBpbnN0YW5jZS5cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvcmtlclByb2Nlc3MgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xyXG4gICAgY29uc3RydWN0b3IocGlkLCB3b3JrZXJQYXRoLCBkZWJ1Z01vZGUsIGRlYnVnUG9ydCwgbmFtZSA9IG51bGwsIG5wbUdSb290RXhlY3V0aW9uID0gdHJ1ZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3N0b3BwZWRCeVVzZXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3BpZCA9IHBpZDtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IGRlYnVnTW9kZTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBkZWJ1Z1BvcnQ7XHJcbiAgICAgICAgdGhpcy5fd29ya2VyUGF0aCA9IHdvcmtlclBhdGg7XHJcbiAgICAgICAgdGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24gPSBucG1HUm9vdEV4ZWN1dGlvbjtcclxuICAgICAgICB0aGlzLl9icmVha3BvaW50RXJyb3JzID0gW107XHJcbiAgICAgICAgLy8gaG9sZCB0aGUgcmVtb3RlIGludm9jYXRpb24gcHJvbWlzZVxyXG4gICAgICAgIHRoaXMuX2NhbGxzID0ge307XHJcbiAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVycyA9IHt9O1xyXG4gICAgfVxyXG4gICAgYXN5bmMgc3RhcnQoKSB7XHJcbiAgICAgICAgY29uc3QgZW52ID0gT2JqZWN0LmFzc2lnbihwcm9jZXNzLmVudiwge1xyXG4gICAgICAgICAgICBPWF9XT1JLRVI6IHRydWUsXHJcbiAgICAgICAgICAgIERFQlVHOiAhaXNOYU4odGhpcy5fZGVidWdQb3J0KSxcclxuICAgICAgICAgICAgTk9fVVBEQVRFX05PVElGSUVSOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxvZy5pbmZvKGBTdGFydGluZyB3b3JrZXIgcHJvY2VzcyAke3RoaXMuX3BpZH0uYCk7XHJcbiAgICAgICAgbGV0IGZvcmtPcHRzID0ge1xyXG4gICAgICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXHJcbiAgICAgICAgICAgIGVudixcclxuICAgICAgICAgICAgZXhlY0FyZ3Y6IFtdLFxyXG4gICAgICAgICAgICBkZXRhY2hlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIC8vc2lsZW50OiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnUG9ydCkge1xyXG4gICAgICAgICAgICAvLyBhZGQgLS1pbnNwZWN0LWJyayBhcmd1bWVudCBpZiBkZWJ1ZyBwb3J0IGlzIHNwZWNpZmllZFxyXG4gICAgICAgICAgICBmb3JrT3B0cy5leGVjQXJndiA9IE9iamVjdC5hc3NpZ24oZm9ya09wdHMuZXhlY0FyZ3YsIFsnLS1pbnNwZWN0LWJyaz0nICsgdGhpcy5fZGVidWdQb3J0XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwcmludCBtb3JlIGluZm9ybWF0aW9uIGZvciBub2RlanMgZXJyb3JzXHJcbiAgICAgICAgZm9ya09wdHMuZXhlY0FyZ3YucHVzaCgnLS10cmFjZS13YXJuaW5ncycpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fbnBtR1Jvb3RFeGVjdXRpb24pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxldCBnbG9iYWxOcG1Nb2R1bGVzUGF0aDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBleGVjKCducG0gcm9vdCAtZycsIHtjd2Q6IHByb2Nlc3MuY3dkKCl9LCBmdW5jdGlvbiAoZXJyLCBzdGRvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2RhcndpbiBucG0gcm9vdCBlcnJvcjonLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZG91dCAmJiBzdGRvdXQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE5wbU1vZHVsZXNQYXRoID0gc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBkZWFzeW5jLmxvb3BXaGlsZSgoKSA9PiAhZG9uZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBleGVjU3luYygnbnBtIHJvb3QgLWcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4ZWNSZXN1bHQgJiYgZXhlY1Jlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxOcG1Nb2R1bGVzUGF0aCA9IGV4ZWNSZXN1bHQudG9TdHJpbmcoKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxOcG1Nb2R1bGVzUGF0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ya09wdHMuZW52XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JrT3B0cy5lbnYuTk9ERV9QQVRIID0gZ2xvYmFsTnBtTW9kdWxlc1BhdGg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCducG0gcm9vdCBlcnJvcjonLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZm9yayB3b3JrZXJcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2MgPSBmb3JrKHRoaXMuX3dvcmtlclBhdGgsIGZvcmtPcHRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5faG9va0NoaWxkUHJvY0V2ZW50cygpO1xyXG4gICAgICAgIC8vIGlmIHdlIGFyZSBpbiBkZWJ1ZyBtb2RlLCBpbml0aWFsaXplIGRlYnVnZ2VyIGFuZCBvbmx5IHRoZW4gc3RhcnQgbW9kdWxlcyAnaW5pdCdcclxuXHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRQcm9jO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN0YXJ0RGVidWdnZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnTW9kZSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9pbml0aWFsaXplRGVidWdnZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RvcChzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQgJiYgdGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlciAmJiB0aGlzLl9kZWJ1Z2dlci5fcGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJ0NBTkNFTEVEJyA9PT0gc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5yZXN1bWVUZXJtaW5hdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHNub296ZSgxMDApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNub296ZSgxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NlbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiAnZXhpdCcsXHJcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMua2lsbCgpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAga2lsbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkUHJvYy5raWxsKCdTSUdJTlQnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdChyaWQsIG9wdGlvbnMsIGNhcHMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgYmVmb3JlVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnaW5pdCcsIHJpZCwgb3B0aW9ucywgY2Fwcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBhZnRlclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBhZnRlclRpbWUgLSBiZWZvcmVUaW1lO1xyXG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gJyc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMuX25hbWUrJyAnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvZy5pbmZvKHN0YXJ0KydXb3JrZXIgaW5pdGlhbGl6ZWQgaW4gJyArIGR1cmF0aW9uICsgJyBtcycpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQgJiYgdGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW52b2tlKCdkaXNwb3NlJywgc3RhdHVzKTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXhpdCcsXHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMua2lsbCgpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbmQoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmtpbGwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZU1vZHVsZXMoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWJ1Z2dlci5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fY2hpbGRQcm9jKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW52b2tlKCdkaXNwb3NlTW9kdWxlcycsIHN0YXR1cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZWJ1Z2dlciAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlYnVnZ2VyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1J1bm5pbmcgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1J1bm5pbmc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5pdGlhbGl6ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcnVuKHJ1bk9wdHMpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnZva2UoJ3J1bicsIHJ1bk9wdHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YnNjcmliZShldmVudE5hbWUsIGhhbmRsZXIpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2V2ZW50SGFuZGxlcnNbZXZlbnROYW1lXSAmJiB0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gPSBoYW5kbGVyO1xyXG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdWJzY3JpYmUnLFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IGV2ZW50TmFtZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGludm9rZShtZXRob2QpIHtcclxuICAgICAgICBsZXQgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgLy8gaWdub3JlIGZpcnN0IGFyZ3VtZW50IC0gZS5nLiBtZXRob2RcclxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGFyZ3Muc2hpZnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBjb25zdCBjYWxsSWQgPSBveHV0aWwuZ2VuZXJhdGVVbmlxdWVJZCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnZva2UnLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXHJcbiAgICAgICAgICAgICAgICBjYWxsSWQ6IGNhbGxJZCxcclxuICAgICAgICAgICAgICAgIGFyZ3M6IGFyZ3NcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxzW2NhbGxJZF0gPSBkZWZlcigpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2FsbHNbY2FsbElkXS5wcm9taXNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnZva2VUZXN0SG9vayhob29rTmFtZSwgaG9va0FyZ3MpIHtcclxuICAgICAgICBjb25zdCBjYWxsSWQgPSBveHV0aWwuZ2VuZXJhdGVVbmlxdWVJZCgpO1xyXG4gICAgICAgIHRoaXMuX3NlbmQoe1xyXG4gICAgICAgICAgICB0eXBlOiAnaW52b2tlOmhvb2snLFxyXG4gICAgICAgICAgICBtZXRob2Q6IGhvb2tOYW1lLFxyXG4gICAgICAgICAgICBjYWxsSWQ6IGNhbGxJZCxcclxuICAgICAgICAgICAgYXJnczogaG9va0FyZ3NcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9jYWxsc1tjYWxsSWRdID0gZGVmZXIoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FsbHNbY2FsbElkXS5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zZW5kKG1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5zZW5kKG1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIF9yZXNldCgpIHtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z01vZGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnUG9ydCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fd2hlbk94eWdlbkRpc3Bvc2VkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl93aGVuT3h5Z2VuSW5pdGlhbGl6ZWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3doZW5Nb2R1bGVzRGlzcG9zZWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBfaG9va0NoaWxkUHJvY0V2ZW50cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbignbWVzc2FnZScsIHRoaXMuX2hhbmRsZUNoaWxkTWVzc2FnZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ2Vycm9yJywgdGhpcy5faGFuZGxlQ2hpbGRFcnJvci5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ2V4aXQnLCB0aGlzLl9oYW5kbGVDaGlsZEV4aXQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdkaXNjb25uZWN0JywgdGhpcy5faGFuZGxlQ2hpbGREaXNjb25uZWN0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCB0aGlzLl9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbignU0lHSU5UJywgdGhpcy5faGFuZGxlQ2hpbGRTaWdJbnQuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkTWVzc2FnZShtc2cpIHtcclxuICAgICAgICBpZiAobXNnLmV2ZW50KSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobXNnLmV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdpbnZva2U6cmVzdWx0JzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAobXNnLmNhbGxJZCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fY2FsbHMsIG1zZy5jYWxsSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLl9jYWxsc1ttc2cuY2FsbElkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QobXNnLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShtc2cucmV0dmFsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2FsbHNbbXNnLmNhbGxJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAncmVwb3J0ZXInOlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtc2cubWV0aG9kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVwb3J0ZXInLCB7IHBpZDogdGhpcy5fcGlkLCBtZXRob2Q6IG1zZy5tZXRob2QsIGFyZ3M6IG1zZy5hcmdzIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2V2ZW50JzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVXb3JrZXJFdmVudChtc2cubmFtZSwgbXNnLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW1pdCgnbWVzc2FnZScsIE9iamVjdC5hc3NpZ24obXNnLCB7IHBpZDogdGhpcy5fcGlkIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaGFuZGxlV29ya2VyRXZlbnQobmFtZSwgYXJncykge1xyXG4gICAgICAgIGlmIChuYW1lICYmIHRoaXMuX2V2ZW50SGFuZGxlcnMgJiYgdGhpcy5fZXZlbnRIYW5kbGVyc1tuYW1lXSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZXZlbnRIYW5kbGVyc1tuYW1lXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoJ0Vycm9yIHRocm93biBieSB3b3JrZXIgZXZlbnQgaGFuZGxlciBcIiR7bmFtZX06JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkRXJyb3IoZXJyb3IpIHtcclxuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gdGhyb3duIGFuIGVycm9yOiAke2Vycm9yfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkRXhpdChleGl0Q29kZSwgc2lnbmFsKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IGZpbmlzaGVkIHdpdGggZXhpdCBjb2RlICR7ZXhpdENvZGV9IGFuZCBzaWduYWwgJHtzaWduYWx9LmApO1xyXG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgeyBwaWQ6IHRoaXMuX3BpZCwgZXhpdENvZGUsIHNpZ25hbCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2hpbGREaXNjb25uZWN0KCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSBkaXNjb25uZWN0ZWQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkVW5jYXVnaHRFeGNlcHRpb24oZXJyb3IpIHtcclxuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gdGhyb3duIGFuIHVuY2F1Z2h0IGVycm9yOiAke2Vycm9yfS5gKTtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBPYmplY3QuYXNzaWduKHsgZXJyb3IgOiBlcnJvciB9LCB7IHBpZDogdGhpcy5fcGlkIH0pKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2V4aXQnLCB7IHBpZDogdGhpcy5fcGlkLCBleGl0Q29kZTogMSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2hpbGRTaWdJbnQoKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHJlY2VpdmVkIFNJR0lOVCBzaWduYWwuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2luaXRpYWxpemVEZWJ1Z2dlcigpIHtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlciA9IG5ldyBEZWJ1Z2dlcih0aGlzLl9waWQpO1xyXG4gICAgICAgIGxldCB3aGVuRGVidWdnZXJSZWFkeSA9IGRlZmVyKCk7XHJcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8vIGhhbmRsZSBkZWJ1Z2dlciBldmVudHNcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbigncmVhZHknLCBmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgICAgLy8gcmVzdW1lIHRoZSBmaXJzdCBicmVha3BvaW50IHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgYnkgdGhlIGRlYnVnZ2VyXHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5fZGVidWdnZXIgJiYgX3RoaXMuX2RlYnVnZ2VyLmNvbnRpbnVlKSB7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5fZGVidWdnZXIuY29udGludWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XHJcblxyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ2RlYnVnZ2VyIG9uIGVycm9yIDonLCBlcnIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWJ1Z2dlcjplcnJvcicsIE9iamVjdC5hc3NpZ24oZXJyLCB7IHBpZDogdGhpcy5fcGlkIH0pKTtcclxuICAgICAgICAgICAgLy8gcmVqZWN0IHRoZSBwcm9taXNlIG9ubHkgaWYgd2UgZ290IGFuIGVycm9yIHJpZ2h0IGFmdGVyIF9kZWJ1Z2dlci5jb25uZWN0KCkgY2FsbCBiZWxvdyAtIHdlIG5lZWQgdGhpcyB0byBpbmRpY2F0ZSBkZWJ1Z2dlciBpbml0aWFsaXphdGlvbiBlcnJvclxyXG4gICAgICAgICAgICBpZiAoIXdoZW5EZWJ1Z2dlclJlYWR5LmlzUmVzb2x2ZWQpIHtcclxuICAgICAgICAgICAgICAgIHdoZW5EZWJ1Z2dlclJlYWR5LnJlamVjdChlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbignYnJlYWsnLCBmdW5jdGlvbihicmVha3BvaW50RGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RlYnVnZ2VyOmJyZWFrJywgYnJlYWtwb2ludERhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdicmVha0Vycm9yJywgYXN5bmMgZnVuY3Rpb24oYnJlYWtFcnJvcikge1xyXG5cclxuICAgICAgICAgICAgaWYgKGJyZWFrRXJyb3IgJiYgYnJlYWtFcnJvci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuX2JyZWFrcG9pbnRFcnJvcnMuaW5jbHVkZXMoYnJlYWtFcnJvci5tZXNzYWdlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5fYnJlYWtwb2ludEVycm9ycy5wdXNoKGJyZWFrRXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWJ1Z2dlcjpicmVha0Vycm9yJywgYnJlYWtFcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbG9nLmluZm8oYENvbm5lY3RpbmcgdG8gZGVidWdnZXIgb24gcG9ydCAke3RoaXMuX2RlYnVnUG9ydH0uLi5gKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY29ubmVjdCh0aGlzLl9kZWJ1Z1BvcnQsICcxMjcuMC4wLjEnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGxvZy5lcnJvcignQ2Fubm90IGNvbm5lY3QgdG8gdGhlIGRlYnVnZ2VyOiAnLCBlKTtcclxuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdDYW5ub3QgY29ubmVjdCB0byB0aGUgZGVidWdnZXI6ICcgKyBlLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHdoZW5EZWJ1Z2dlclJlYWR5LnJlamVjdChtZXNzYWdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB3aGVuRGVidWdnZXJSZWFkeS5wcm9taXNlO1xyXG4gICAgfVxyXG59Il19
465
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW5uZXJzL1dvcmtlclByb2Nlc3MuanMiXSwibmFtZXMiOlsibG9nIiwic25vb3plIiwibXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJXb3JrZXJQcm9jZXNzIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJwaWQiLCJ3b3JrZXJQYXRoIiwiZGVidWdNb2RlIiwiZGVidWdQb3J0IiwibmFtZSIsIm5wbUdSb290RXhlY3V0aW9uIiwiX25hbWUiLCJfaXNSdW5uaW5nIiwiX2lzSW5pdGlhbGl6ZWQiLCJfc3RvcHBlZEJ5VXNlciIsIl9waWQiLCJfY2hpbGRQcm9jIiwiX2RlYnVnTW9kZSIsIl9kZWJ1Z1BvcnQiLCJfd29ya2VyUGF0aCIsIl9ucG1HUm9vdEV4ZWN1dGlvbiIsIl9icmVha3BvaW50RXJyb3JzIiwiX2NhbGxzIiwiX2V2ZW50SGFuZGxlcnMiLCJzdGFydCIsImVudiIsIk9iamVjdCIsImFzc2lnbiIsInByb2Nlc3MiLCJPWF9XT1JLRVIiLCJERUJVRyIsImlzTmFOIiwiTk9fVVBEQVRFX05PVElGSUVSIiwiaW5mbyIsImZvcmtPcHRzIiwiY3dkIiwiZXhlY0FyZ3YiLCJkZXRhY2hlZCIsInB1c2giLCJnbG9iYWxOcG1Nb2R1bGVzUGF0aCIsInBsYXRmb3JtIiwicmVqZWN0IiwiZXJyIiwic3Rkb3V0IiwiY29uc29sZSIsInRvU3RyaW5nIiwidHJpbSIsImUiLCJleGVjUmVzdWx0IiwiTk9ERV9QQVRIIiwiX2hvb2tDaGlsZFByb2NFdmVudHMiLCJzdGFydERlYnVnZ2VyIiwiX2luaXRpYWxpemVEZWJ1Z2dlciIsInN0b3AiLCJzdGF0dXMiLCJfZGVidWdnZXIiLCJfcGF1c2VkIiwiZGlzYWJsZSIsInJlc3VtZVRlcm1pbmF0ZSIsImludm9rZSIsImNsb3NlIiwiX3NlbmQiLCJ0eXBlIiwia2lsbCIsIl9yZXNldCIsImluaXQiLCJyaWQiLCJvcHRpb25zIiwiY2FwcyIsImJlZm9yZVRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsImFmdGVyVGltZSIsImR1cmF0aW9uIiwiZGlzcG9zZSIsImRpc3Bvc2VNb2R1bGVzIiwiZGVidWdnZXIiLCJpc1J1bm5pbmciLCJpc0luaXRpYWxpemVkIiwicnVuIiwicnVuT3B0cyIsInN1YnNjcmliZSIsImV2ZW50TmFtZSIsImhhbmRsZXIiLCJldmVudCIsIm1ldGhvZCIsImFyZ3MiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsbCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNoaWZ0IiwiY2FsbElkIiwib3h1dGlsIiwiZ2VuZXJhdGVVbmlxdWVJZCIsInByb21pc2UiLCJpbnZva2VUZXN0SG9vayIsImhvb2tOYW1lIiwiaG9va0FyZ3MiLCJtZXNzYWdlIiwic2VuZCIsIl93aGVuT3h5Z2VuRGlzcG9zZWQiLCJfd2hlbk94eWdlbkluaXRpYWxpemVkIiwiX3doZW5Nb2R1bGVzRGlzcG9zZWQiLCJvbiIsIl9oYW5kbGVDaGlsZE1lc3NhZ2UiLCJiaW5kIiwiX2hhbmRsZUNoaWxkRXJyb3IiLCJfaGFuZGxlQ2hpbGRFeGl0IiwiX2hhbmRsZUNoaWxkRGlzY29ubmVjdCIsIl9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uIiwiX2hhbmRsZUNoaWxkU2lnSW50IiwibXNnIiwiaGFzT3duUHJvcGVydHkiLCJlcnJvciIsInJldHZhbCIsImVtaXQiLCJfaGFuZGxlV29ya2VyRXZlbnQiLCJhcHBseSIsInVuZGVmaW5lZCIsImRlYnVnIiwiZXhpdENvZGUiLCJzaWduYWwiLCJEZWJ1Z2dlciIsIndoZW5EZWJ1Z2dlclJlYWR5IiwiX3RoaXMiLCJjb250aW51ZSIsImlzUmVzb2x2ZWQiLCJicmVha3BvaW50RGF0YSIsImJyZWFrRXJyb3IiLCJpbmNsdWRlcyIsImNvbm5lY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdBOztBQUdBOztBQUNBOzs7O0FBSEEsTUFBTUEsR0FBRyxHQUFHLHFCQUFPLGVBQVAsQ0FBWjs7QUFNQSxN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QUFBQSxpQkFBaUIsQ0FBQ3JGLE1BQWxCLENBQXlCNEQsT0FBekI7QUFDSDs7QUFFRCxXQUFPeUIsaUJBQWlCLENBQUM3QixPQUF6QjtBQUNIOztBQTlYbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JrLCBleGVjU3luYywgZXhlYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnO1xyXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJ3doZW4nO1xyXG5cclxuLy8gc2V0dXAgbG9nZ2VyXHJcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbGliL2xvZ2dlcic7XHJcbmNvbnN0IGxvZyA9IGxvZ2dlcignV29ya2VyUHJvY2VzcycpO1xyXG5cclxuaW1wb3J0IERlYnVnZ2VyIGZyb20gJy4uL2xpYi9kZWJ1Z2dlcic7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5cclxuLy8gc25vb3plIGZ1bmN0aW9uIC0gYXN5bmMgd3JhcHBlciBhcm91bmQgc2V0VGltZW91dCBmdW5jdGlvblxyXG5jb25zdCBzbm9vemUgPSBtcyA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuXHJcbi8qKlxyXG4gKiBXb3JrZXJQcm9jZXNzIHJlc3BvbnNpYmxlIGZvciBzcGF3bmluZyBhIHdvcmtlciBwcm9jZXNzIHRoZSB0ZXN0IGluc3RhbmNlLlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyUHJvY2VzcyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihwaWQsIHdvcmtlclBhdGgsIGRlYnVnTW9kZSwgZGVidWdQb3J0LCBuYW1lID0gbnVsbCwgbnBtR1Jvb3RFeGVjdXRpb24gPSB0cnVlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fc3RvcHBlZEJ5VXNlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fcGlkID0gcGlkO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gZGVidWdNb2RlO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnUG9ydCA9IGRlYnVnUG9ydDtcclxuICAgICAgICB0aGlzLl93b3JrZXJQYXRoID0gd29ya2VyUGF0aDtcclxuICAgICAgICB0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbiA9IG5wbUdSb290RXhlY3V0aW9uO1xyXG4gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRFcnJvcnMgPSBbXTtcclxuICAgICAgICAvLyBob2xkIHRoZSByZW1vdGUgaW52b2NhdGlvbiBwcm9taXNlXHJcbiAgICAgICAgdGhpcy5fY2FsbHMgPSB7fTtcclxuICAgICAgICB0aGlzLl9ldmVudEhhbmRsZXJzID0ge307XHJcbiAgICB9XHJcbiAgICBhc3luYyBzdGFydCgpIHtcclxuICAgICAgICBjb25zdCBlbnYgPSBPYmplY3QuYXNzaWduKHByb2Nlc3MuZW52LCB7XHJcbiAgICAgICAgICAgIE9YX1dPUktFUjogdHJ1ZSxcclxuICAgICAgICAgICAgREVCVUc6ICFpc05hTih0aGlzLl9kZWJ1Z1BvcnQpLFxyXG4gICAgICAgICAgICBOT19VUERBVEVfTk9USUZJRVI6IHRydWVcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbG9nLmluZm8oYFN0YXJ0aW5nIHdvcmtlciBwcm9jZXNzICR7dGhpcy5fcGlkfS5gKTtcclxuICAgICAgICBsZXQgZm9ya09wdHMgPSB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcclxuICAgICAgICAgICAgZW52LFxyXG4gICAgICAgICAgICBleGVjQXJndjogW10sXHJcbiAgICAgICAgICAgIGRldGFjaGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgLy9zaWxlbnQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdQb3J0KSB7XHJcbiAgICAgICAgICAgIC8vIGFkZCAtLWluc3BlY3QtYnJrIGFyZ3VtZW50IGlmIGRlYnVnIHBvcnQgaXMgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgIGZvcmtPcHRzLmV4ZWNBcmd2ID0gT2JqZWN0LmFzc2lnbihmb3JrT3B0cy5leGVjQXJndiwgWyctLWluc3BlY3QtYnJrPScgKyB0aGlzLl9kZWJ1Z1BvcnRdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHByaW50IG1vcmUgaW5mb3JtYXRpb24gZm9yIG5vZGVqcyBlcnJvcnNcclxuICAgICAgICBmb3JrT3B0cy5leGVjQXJndi5wdXNoKCctLXRyYWNlLXdhcm5pbmdzJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9ucG1HUm9vdEV4ZWN1dGlvbikge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdsb2JhbE5wbU1vZHVsZXNQYXRoO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMoJ25wbSByb290IC1nJywge2N3ZDogcHJvY2Vzcy5jd2QoKX0sIGZ1bmN0aW9uIChlcnIsIHN0ZG91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGFyd2luIG5wbSByb290IGVycm9yOicsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZG91dCAmJiBzdGRvdXQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE5wbU1vZHVsZXNQYXRoID0gc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGVjUmVzdWx0ID0gZXhlY1N5bmMoJ25wbSByb290IC1nJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleGVjUmVzdWx0ICYmIGV4ZWNSZXN1bHQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggPSBleGVjUmVzdWx0LnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsTnBtTW9kdWxlc1BhdGggJiZcclxuICAgICAgICAgICAgICAgICAgICBmb3JrT3B0cyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmtPcHRzLmVudlxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ya09wdHMuZW52Lk5PREVfUEFUSCA9IGdsb2JhbE5wbU1vZHVsZXNQYXRoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbnBtIHJvb3QgZXJyb3I6JywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGZvcmsgd29ya2VyXHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gZm9yayh0aGlzLl93b3JrZXJQYXRoLCBmb3JrT3B0cyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2hvb2tDaGlsZFByb2NFdmVudHMoKTtcclxuICAgICAgICAvLyBpZiB3ZSBhcmUgaW4gZGVidWcgbW9kZSwgaW5pdGlhbGl6ZSBkZWJ1Z2dlciBhbmQgb25seSB0aGVuIHN0YXJ0IG1vZHVsZXMgJ2luaXQnXHJcblxyXG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoaWxkUHJvYztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzdGFydERlYnVnZ2VyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1Z01vZGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5faW5pdGlhbGl6ZURlYnVnZ2VyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN0b3Aoc3RhdHVzID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIgJiYgdGhpcy5fZGVidWdnZXIuX3BhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCdDQU5DRUxFRCcgPT09IHN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIucmVzdW1lVGVybWluYXRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2Rpc3Bvc2UnLCBzdGF0dXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoMTAwKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBhd2FpdCBzbm9vemUoMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxyXG4gICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmtpbGwoKTtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGtpbGwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICB0aGlzLl9jaGlsZFByb2Mua2lsbCgnU0lHSU5UJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQocmlkLCBvcHRpb25zLCBjYXBzKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnZva2UoJ2luaXQnLCByaWQsIG9wdGlvbnMsIGNhcHMpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gYWZ0ZXJUaW1lIC0gYmVmb3JlVGltZTtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgc3RhcnQgPSB0aGlzLl9uYW1lKycgJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsb2cuaW5mbyhzdGFydCsnV29ya2VyIGluaXRpYWxpemVkIGluICcgKyBkdXJhdGlvbiArICcgbXMnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9pc0luaXRpYWxpemVkICYmIHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZScsIHN0YXR1cyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbmQoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2V4aXQnLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmtpbGwoKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdleGl0JyxcclxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5raWxsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc3Bvc2VNb2R1bGVzKHN0YXR1cyA9IG51bGwpIHtcclxuICAgICAgICBpZiAodGhpcy5fZGVidWdnZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZGVidWdnZXIuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkUHJvYykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmludm9rZSgnZGlzcG9zZU1vZHVsZXMnLCBzdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGVidWdnZXIgKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWJ1Z2dlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSdW5uaW5nICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNSdW5uaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0luaXRpYWxpemVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihydW5PcHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52b2tlKCdydW4nLCBydW5PcHRzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJzY3JpYmUoZXZlbnROYW1lLCBoYW5kbGVyKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9ldmVudEhhbmRsZXJzW2V2ZW50TmFtZV0gJiYgdHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXZlbnRIYW5kbGVyc1tldmVudE5hbWVdID0gaGFuZGxlcjtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3Vic2NyaWJlJyxcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBldmVudE5hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnZva2UobWV0aG9kKSB7XHJcbiAgICAgICAgbGV0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG4gICAgICAgIC8vIGlnbm9yZSBmaXJzdCBhcmd1bWVudCAtIGUuZy4gbWV0aG9kXHJcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhcmdzLnNoaWZ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW52b2tlJyxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxyXG4gICAgICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsc1tjYWxsSWRdID0gZGVmZXIoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW52b2tlVGVzdEhvb2soaG9va05hbWUsIGhvb2tBcmdzKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbElkID0gb3h1dGlsLmdlbmVyYXRlVW5pcXVlSWQoKTtcclxuICAgICAgICB0aGlzLl9zZW5kKHtcclxuICAgICAgICAgICAgdHlwZTogJ2ludm9rZTpob29rJyxcclxuICAgICAgICAgICAgbWV0aG9kOiBob29rTmFtZSxcclxuICAgICAgICAgICAgY2FsbElkOiBjYWxsSWQsXHJcbiAgICAgICAgICAgIGFyZ3M6IGhvb2tBcmdzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fY2FsbHNbY2FsbElkXSA9IGRlZmVyKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGxzW2NhbGxJZF0ucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfc2VuZChtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Muc2VuZChtZXNzYWdlKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9kZWJ1Z1BvcnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX3doZW5PeHlnZW5EaXNwb3NlZCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fd2hlbk94eWdlbkluaXRpYWxpemVkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl93aGVuTW9kdWxlc0Rpc3Bvc2VkID0gbnVsbDtcclxuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgX2hvb2tDaGlsZFByb2NFdmVudHMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jaGlsZFByb2MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ21lc3NhZ2UnLCB0aGlzLl9oYW5kbGVDaGlsZE1lc3NhZ2UuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdlcnJvcicsIHRoaXMuX2hhbmRsZUNoaWxkRXJyb3IuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fY2hpbGRQcm9jLm9uKCdleGl0JywgdGhpcy5faGFuZGxlQ2hpbGRFeGl0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX2NoaWxkUHJvYy5vbignZGlzY29ubmVjdCcsIHRoaXMuX2hhbmRsZUNoaWxkRGlzY29ubmVjdC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgdGhpcy5faGFuZGxlQ2hpbGRVbmNhdWdodEV4Y2VwdGlvbi5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLl9jaGlsZFByb2Mub24oJ1NJR0lOVCcsIHRoaXMuX2hhbmRsZUNoaWxkU2lnSW50LmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZE1lc3NhZ2UobXNnKSB7XHJcbiAgICAgICAgaWYgKG1zZy5ldmVudCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1zZy5ldmVudCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnaW52b2tlOnJlc3VsdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5jYWxsSWQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuX2NhbGxzLCBtc2cuY2FsbElkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlID0gdGhpcy5fY2FsbHNbbXNnLmNhbGxJZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KG1zZy5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUobXNnLnJldHZhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxzW21zZy5jYWxsSWRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3JlcG9ydGVyJzpcclxuICAgICAgICAgICAgICAgICAgICBpZiAobXNnLm1ldGhvZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlcG9ydGVyJywgeyBwaWQ6IHRoaXMuX3BpZCwgbWV0aG9kOiBtc2cubWV0aG9kLCBhcmdzOiBtc2cuYXJncyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdldmVudCc6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlV29ya2VyRXZlbnQobXNnLm5hbWUsIG1zZy5hcmdzKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ21lc3NhZ2UnLCBPYmplY3QuYXNzaWduKG1zZywgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2hhbmRsZVdvcmtlckV2ZW50KG5hbWUsIGFyZ3MpIHtcclxuICAgICAgICBpZiAobmFtZSAmJiB0aGlzLl9ldmVudEhhbmRsZXJzICYmIHRoaXMuX2V2ZW50SGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2V2ZW50SGFuZGxlcnNbbmFtZV0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKCdFcnJvciB0aHJvd24gYnkgd29ya2VyIGV2ZW50IGhhbmRsZXIgXCIke25hbWV9OicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZEVycm9yKGVycm9yKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHRocm93biBhbiBlcnJvcjogJHtlcnJvcn0uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIE9iamVjdC5hc3NpZ24oeyBlcnJvciA6IGVycm9yIH0sIHsgcGlkOiB0aGlzLl9waWQgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZEV4aXQoZXhpdENvZGUsIHNpZ25hbCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSBmaW5pc2hlZCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlfSBhbmQgc2lnbmFsICR7c2lnbmFsfS5gKTtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnZXhpdCcsIHsgcGlkOiB0aGlzLl9waWQsIGV4aXRDb2RlLCBzaWduYWwgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkRGlzY29ubmVjdCgpIHtcclxuICAgICAgICBsb2cuZGVidWcoYFdvcmtlciAke3RoaXMuX3BpZH0gZGlzY29ubmVjdGVkLmApO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDaGlsZFVuY2F1Z2h0RXhjZXB0aW9uKGVycm9yKSB7XHJcbiAgICAgICAgbG9nLmRlYnVnKGBXb3JrZXIgJHt0aGlzLl9waWR9IHRocm93biBhbiB1bmNhdWdodCBlcnJvcjogJHtlcnJvcn0uYCk7XHJcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbih7IGVycm9yIDogZXJyb3IgfSwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdleGl0JywgeyBwaWQ6IHRoaXMuX3BpZCwgZXhpdENvZGU6IDEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZUNoaWxkU2lnSW50KCkge1xyXG4gICAgICAgIGxvZy5kZWJ1ZyhgV29ya2VyICR7dGhpcy5fcGlkfSByZWNlaXZlZCBTSUdJTlQgc2lnbmFsLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9pbml0aWFsaXplRGVidWdnZXIoKSB7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIgPSBuZXcgRGVidWdnZXIodGhpcy5fcGlkKTtcclxuICAgICAgICBsZXQgd2hlbkRlYnVnZ2VyUmVhZHkgPSBkZWZlcigpO1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBoYW5kbGUgZGVidWdnZXIgZXZlbnRzXHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ3JlYWR5JywgZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgICAgIC8vIHJlc3VtZSB0aGUgZmlyc3QgYnJlYWtwb2ludCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIGJ5IHRoZSBkZWJ1Z2dlclxyXG4gICAgICAgICAgICBpZiAoX3RoaXMuX2RlYnVnZ2VyICYmIF90aGlzLl9kZWJ1Z2dlci5jb250aW51ZSkge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuX2RlYnVnZ2VyLmNvbnRpbnVlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hlbkRlYnVnZ2VyUmVhZHkucmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RlYnVnZ2VyLm9uKCdlcnJvcicsIGZ1bmN0aW9uKGVycikge1xyXG5cclxuICAgICAgICAgICAgbG9nLmVycm9yKCdkZWJ1Z2dlciBvbiBlcnJvciA6JywgZXJyKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6ZXJyb3InLCBPYmplY3QuYXNzaWduKGVyciwgeyBwaWQ6IHRoaXMuX3BpZCB9KSk7XHJcbiAgICAgICAgICAgIC8vIHJlamVjdCB0aGUgcHJvbWlzZSBvbmx5IGlmIHdlIGdvdCBhbiBlcnJvciByaWdodCBhZnRlciBfZGVidWdnZXIuY29ubmVjdCgpIGNhbGwgYmVsb3cgLSB3ZSBuZWVkIHRoaXMgdG8gaW5kaWNhdGUgZGVidWdnZXIgaW5pdGlhbGl6YXRpb24gZXJyb3JcclxuICAgICAgICAgICAgaWYgKCF3aGVuRGVidWdnZXJSZWFkeS5pc1Jlc29sdmVkKSB7XHJcbiAgICAgICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGVidWdnZXIub24oJ2JyZWFrJywgZnVuY3Rpb24oYnJlYWtwb2ludERhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkZWJ1Z2dlcjpicmVhaycsIGJyZWFrcG9pbnREYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9kZWJ1Z2dlci5vbignYnJlYWtFcnJvcicsIGFzeW5jIGZ1bmN0aW9uKGJyZWFrRXJyb3IpIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChicmVha0Vycm9yICYmIGJyZWFrRXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9icmVha3BvaW50RXJyb3JzLmluY2x1ZGVzKGJyZWFrRXJyb3IubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2JyZWFrcG9pbnRFcnJvcnMucHVzaChicmVha0Vycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVidWdnZXI6YnJlYWtFcnJvcicsIGJyZWFrRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxvZy5pbmZvKGBDb25uZWN0aW5nIHRvIGRlYnVnZ2VyIG9uIHBvcnQgJHt0aGlzLl9kZWJ1Z1BvcnR9Li4uYCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlYnVnZ2VyLmNvbm5lY3QodGhpcy5fZGVidWdQb3J0LCAnMTI3LjAuMC4xJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0Nhbm5vdCBjb25uZWN0IHRvIHRoZSBkZWJ1Z2dlcjogJywgZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnQ2Fubm90IGNvbm5lY3QgdG8gdGhlIGRlYnVnZ2VyOiAnICsgZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICB3aGVuRGVidWdnZXJSZWFkeS5yZWplY3QobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gd2hlbkRlYnVnZ2VyUmVhZHkucHJvbWlzZTtcclxuICAgIH1cclxufSJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxygen-cli",
3
- "version": "1.20.2",
3
+ "version": "1.21.0-beta.12",
4
4
  "description": "Automation framework for testing modern applications",
5
5
  "main": "./build/index.js",
6
6
  "bin": {
@@ -69,22 +69,25 @@
69
69
  "fibers": "5.0.0",
70
70
  "glob": "7.1.7",
71
71
  "glob-to-regexp": "0.4.1",
72
+ "global-agent": "3.0.0",
73
+ "got": "11.8.2",
72
74
  "imap-simple": "5.1.0",
73
75
  "is-glob": "4.0.1",
74
76
  "jimp": "0.16.1",
75
77
  "junit-report-builder": "3.0.0",
76
78
  "lodash": "4.17.21",
79
+ "mailparser": "3.4.0",
77
80
  "minimist": "1.2.5",
78
81
  "mockery": "2.1.0",
79
82
  "moment": "2.29.1",
80
83
  "node-addon-api": "3.0.2",
81
84
  "objects-to-csv": "1.3.6",
82
- "pdf2json": "1.2.3",
85
+ "pdf2json": "1.2.5",
83
86
  "perfecto-reporting": "2.5.3",
84
87
  "request": "2.88.2",
85
88
  "saucelabs": "3.0.1",
86
89
  "serialport": "9.2.0",
87
- "soap": "0.40.0",
90
+ "soap": "0.43.0",
88
91
  "source-map-support": "0.5.19",
89
92
  "stacktrace-parser": "0.1.10",
90
93
  "testdouble": "3.16.1",
@@ -93,10 +96,10 @@
93
96
  "twilio": "3.66.1",
94
97
  "webdriverio": "7.9.0",
95
98
  "when": "3.7.8",
96
- "xlsx": "0.17.0"
99
+ "xlsx": "0.17.4"
97
100
  },
98
101
  "optionalDependencies": {
99
- "odbc": "2.4.0"
102
+ "odbc": "2.4.1"
100
103
  },
101
104
  "scripts": {
102
105
  "build": "run-s clean compile",