appium-xcode 4.0.0 → 4.0.1

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.
package/README.md CHANGED
@@ -2,14 +2,12 @@ appium-xcode
2
2
  ===================
3
3
  [![NPM version](http://img.shields.io/npm/v/appium-xcode.svg)](https://npmjs.org/package/appium-xcode)
4
4
  [![Downloads](http://img.shields.io/npm/dm/appium-xcode.svg)](https://npmjs.org/package/appium-xcode)
5
- [![Dependency Status](https://david-dm.org/appium/appium-xcode.svg)](https://david-dm.org/appium/appium-xcode)
6
- [![devDependency Status](https://david-dm.org/appium/appium-xcode/dev-status.svg)](https://david-dm.org/appium/appium-xcode#info=devDependencies)
5
+
6
+ [![Release](https://github.com/appium/appium-xcode/actions/workflows/publish.js.yml/badge.svg?branch=master)](https://github.com/appium/appium-xcode/actions/workflows/publish.js.yml)
7
7
 
8
8
  ES7 module for interacting with Xcode and Xcode-related functions.
9
9
  Used by [Appium](github.com/appium/appium)
10
10
 
11
- *Note*: Issue tracking for this repo has been disabled. Please use the [main Appium issue tracker](https://github.com/appium/appium/issues) instead.
12
-
13
11
  API
14
12
  ===
15
13
 
@@ -66,16 +64,11 @@ clears the internal cache used for memoizing functions.
66
64
  Develop
67
65
  =======
68
66
 
69
- ## Watch
70
-
71
- ```
72
- npm run watch
73
- ```
74
-
75
67
  ## Test
76
68
 
77
69
  ```
78
70
  npm test
71
+ npm e2e-test
79
72
  ```
80
73
 
81
74
  Debug
@@ -83,4 +76,5 @@ Debug
83
76
 
84
77
  After cloning appium-xcode, execute `npm link` in the appium-xcode directory. Next run `npm link appium-xcode` from the appium directory. This will symlink appium-xcode to node_modules/appium-xcode. If the clone becomes out of date remember to unlink or delete node_modules and reinstall.
85
78
 
86
- For quick debugging you could cd into the node_modules/appium-xcode folder and run `npm install` followed by `gulp transpile`.
79
+ For quick debugging you could cd into the node_modules/appium-xcode folder and run `npm install` followed by `npm run build`.
80
+
package/build/index.js CHANGED
@@ -42,7 +42,5 @@ exports.getAutomationTraceTemplatePath = getAutomationTraceTemplatePath;
42
42
  exports.getVersion = getVersion;
43
43
  exports.getPath = getPath;
44
44
  var _default = xcode;
45
- exports.default = _default;require('source-map-support').install();
46
-
47
-
48
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbImdldFBhdGgiLCJnZXRWZXJzaW9uIiwiZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoIiwiZ2V0TWF4SU9TU0RLIiwiZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5IiwiZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5IiwiZ2V0Q29ubmVjdGVkRGV2aWNlcyIsImNsZWFySW50ZXJuYWxDYWNoZSIsImdldEluc3RydW1lbnRzUGF0aCIsImdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uIiwiZ2V0TWF4VFZPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJnZXRDbGFuZ1ZlcnNpb24iLCJ4Y29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUE7Ozs7OztBQUdBLE1BQU07QUFDSkEsRUFBQUEsT0FESTtBQUNLQyxFQUFBQSxVQURMO0FBQ2lCQyxFQUFBQSw4QkFEakI7QUFDaURDLEVBQUFBLFlBRGpEO0FBRUpDLEVBQUFBLDBDQUZJO0FBRXdDQyxFQUFBQSx3QkFGeEM7QUFHSkMsRUFBQUEsbUJBSEk7QUFHaUJDLEVBQUFBLGtCQUhqQjtBQUdxQ0MsRUFBQUEsa0JBSHJDO0FBSUpDLEVBQUFBLDBCQUpJO0FBSXdCQyxFQUFBQSxhQUp4QjtBQUl1Q0MsRUFBQUEseUJBSnZDO0FBS0pDLEVBQUFBO0FBTEksSUFNRkMsS0FOSjs7Ozs7Ozs7Ozs7Ozs7ZUFlZUEsSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptYWluXG5cbmltcG9ydCAqIGFzIHhjb2RlIGZyb20gJy4vbGliL3hjb2RlJztcblxuXG5jb25zdCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59ID0geGNvZGU7XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59O1xuZXhwb3J0IGRlZmF1bHQgeGNvZGU7XG4iXSwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlUm9vdCI6Ii4uIn0=
45
+ exports.default = _default;
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQYXRoIiwiZ2V0VmVyc2lvbiIsImdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCIsImdldE1heElPU1NESyIsImdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSIsImdldE1heElPU1NES1dpdGhvdXRSZXRyeSIsImdldENvbm5lY3RlZERldmljZXMiLCJjbGVhckludGVybmFsQ2FjaGUiLCJnZXRJbnN0cnVtZW50c1BhdGgiLCJnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiIsImdldE1heFRWT1NTREsiLCJnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5IiwiZ2V0Q2xhbmdWZXJzaW9uIiwieGNvZGUiXSwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG5pbXBvcnQgKiBhcyB4Y29kZSBmcm9tICcuL2xpYi94Y29kZSc7XG5cblxuY29uc3Qge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufSA9IHhjb2RlO1xuXG5leHBvcnQge1xuICBnZXRQYXRoLCBnZXRWZXJzaW9uLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5LCBnZXRNYXhJT1NTREtXaXRob3V0UmV0cnksXG4gIGdldENvbm5lY3RlZERldmljZXMsIGNsZWFySW50ZXJuYWxDYWNoZSwgZ2V0SW5zdHJ1bWVudHNQYXRoLFxuICBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiwgZ2V0TWF4VFZPU1NESywgZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q2xhbmdWZXJzaW9uLFxufTtcbmV4cG9ydCBkZWZhdWx0IHhjb2RlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7Ozs7O0FBR0EsTUFBTTtFQUNKQSxPQURJO0VBQ0tDLFVBREw7RUFDaUJDLDhCQURqQjtFQUNpREMsWUFEakQ7RUFFSkMsMENBRkk7RUFFd0NDLHdCQUZ4QztFQUdKQyxtQkFISTtFQUdpQkMsa0JBSGpCO0VBR3FDQyxrQkFIckM7RUFJSkMsMEJBSkk7RUFJd0JDLGFBSnhCO0VBSXVDQyx5QkFKdkM7RUFLSkM7QUFMSSxJQU1GQyxLQU5KOzs7Ozs7Ozs7Ozs7OztlQWVlQSxLIn0=
@@ -117,7 +117,13 @@ async function getPathFromXcodeSelect(timeout = XCRUN_TIMEOUT) {
117
117
  }
118
118
 
119
119
  const getPath = _lodash.default.memoize(function getPath(timeout = XCRUN_TIMEOUT) {
120
- return getPathFromXcodeSelect(timeout).catch(getPathFromSymlink);
120
+ return (async () => {
121
+ try {
122
+ return await getPathFromXcodeSelect(timeout);
123
+ } catch (e) {
124
+ return await getPathFromSymlink(e.message);
125
+ }
126
+ })();
121
127
  });
122
128
 
123
129
  exports.getPath = getPath;
@@ -353,7 +359,5 @@ function clearInternalCache() {
353
359
  f.cache = new _lodash.default.memoize.Cache();
354
360
  }
355
361
  });
356
- }require('source-map-support').install();
357
-
358
-
359
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi94Y29kZS5qcyJdLCJuYW1lcyI6WyJlbnYiLCJwcm9jZXNzIiwiWENSVU5fVElNRU9VVCIsIlhDT0RFX1NVQkRJUiIsIkRFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJoYXNFeHBlY3RlZFN1YkRpciIsInBhdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJydW5YY3J1bkNvbW1hbmQiLCJhcmdzIiwidGltZW91dCIsInJlcyIsIl8iLCJpc1VuZGVmaW5lZCIsIkVycm9yIiwiam9pbiIsImVyciIsInN0ZGVyciIsIm1lc3NhZ2UiLCJnZXRQYXRoRnJvbVN5bWxpbmsiLCJmYWlsTWVzc2FnZSIsIndhcm4iLCJzeW1saW5rUGF0aCIsImxlZ2FjeVN5bWxpbmtQYXRoIiwieGNvZGVQYXRoIiwidXRpbCIsImhhc0NvbnRlbnQiLCJERVZFTE9QRVJfRElSIiwiY3VzdG9tUGF0aCIsImZzIiwiZXhpc3RzIiwibWVzZyIsInJlYWRsaW5rIiwicmVwbGFjZSIsIlJlZ0V4cCIsInRyaW0iLCJtc2ciLCJnZXRQYXRoRnJvbVhjb2RlU2VsZWN0Iiwic3Rkb3V0IiwieGNvZGVGb2xkZXJQYXRoIiwiZXJyb3JBbmRUaHJvdyIsImdldFBhdGgiLCJtZW1vaXplIiwiY2F0Y2giLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwicGxpc3RQYXRoIiwicmVzb2x2ZSIsInZlcnNpb24iLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwic2VtdmVyIiwiY29lcmNlIiwiQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmciLCJnZXRWZXJzaW9uTWVtb2l6ZWQiLCJyZXRyaWVzIiwiZ2V0VmVyc2lvbiIsInBhcnNlIiwidmVyc2lvblN0cmluZyIsInBhdGNoIiwibWFqb3IiLCJtaW5vciIsInZlcnNpb25GbG9hdCIsInBhcnNlRmxvYXQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsImdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uIiwiZ2V0VmVyc2lvbkZ1bmN0aW9ucyIsInBrZyIsImlnbiIsIm1hdGNoIiwiZXhlYyIsImdldENsYW5nVmVyc2lvbiIsIndoaWNoIiwiZSIsImluZm8iLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnkiLCJleHRlbnNpb25zIiwicGF0aFByZWZpeCIsInBhdGhTdWZmaXgiLCJhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzIiwiZXJyb3IiLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgiLCJnZXRNYXhJT1NTREtXaXRob3V0UmV0cnkiLCJzZGtWZXJzaW9uIiwiZ2V0TWF4SU9TU0RLRnJvbVhjb2RlVmVyc2lvbiIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJpc05hTiIsImdldE1heFRWT1NTREsiLCJnZXRDb25uZWN0ZWREZXZpY2VzIiwiY21kIiwicGxpc3RDb250ZW50IiwiZGV2aWNlc0ZvdW5kIiwiZW50cmllc1RvU2VhcmNoIiwiY3VycmVudEVudHJ5IiwicG9wIiwiQXJyYXkiLCJjb25jYXQiLCJfbmFtZSIsImluY2x1ZGVzIiwiZGV2aWNlSW5mbyIsIm5hbWUiLCJ1ZGlkIiwic2VyaWFsX251bSIsInByb2R1Y3RJZCIsInByb2R1Y3RfaWQiLCJkZXZpY2VWZXJzaW9uIiwiYmNkX2RldmljZSIsInB1c2giLCJfaXRlbXMiLCJnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkiLCJpbnN0cnVtZW50c1BhdGgiLCJnZXRJbnN0cnVtZW50c1BhdGgiLCJjbGVhckludGVybmFsQ2FjaGUiLCJtZW1vaXplZCIsImZvckVhY2giLCJmIiwiY2FjaGUiLCJDYWNoZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsT0FBTyxDQUFDRCxHQUFwQjtBQUVBLE1BQU1FLGFBQWEsR0FBRyxLQUF0QjtBQUNBLE1BQU1DLFlBQVksR0FBRyxxQkFBckI7QUFDQSxNQUFNQyx5QkFBeUIsR0FBRyxDQUFsQzs7QUFFQSxNQUFNQyxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLE9BQWpCLENBQVo7O0FBR0EsU0FBU0MsaUJBQVQsQ0FBNEJDLElBQTVCLEVBQWtDO0FBQ2hDLFNBQU9BLElBQUksQ0FBQ0MsU0FBTCxDQUFlRCxJQUFJLENBQUNFLE1BQUwsR0FBY1IsWUFBWSxDQUFDUSxNQUExQyxNQUFzRFIsWUFBN0Q7QUFDRDs7QUFFRCxlQUFlUyxlQUFmLENBQWdDQyxJQUFoQyxFQUFzQ0MsT0FBTyxHQUFHWixhQUFoRCxFQUErRDtBQUM3RCxNQUFJO0FBQ0YsVUFBTWEsR0FBRyxHQUFHLE1BQU0sd0JBQUssT0FBTCxFQUFjRixJQUFkLEVBQW9CO0FBQUNDLE1BQUFBO0FBQUQsS0FBcEIsQ0FBbEI7O0FBQ0EsUUFBSUUsZ0JBQUVDLFdBQUYsQ0FBY0YsR0FBZCxDQUFKLEVBQXdCO0FBQ3RCLFlBQU0sSUFBSUcsS0FBSixDQUFXLDhDQUE2Q0wsSUFBSSxDQUFDTSxJQUFMLENBQVUsR0FBVixDQUFlLEdBQXZFLENBQU47QUFDRDs7QUFDRCxXQUFPSixHQUFQO0FBQ0QsR0FORCxDQU1FLE9BQU9LLEdBQVAsRUFBWTtBQUVaLFFBQUlBLEdBQUcsQ0FBQ0MsTUFBUixFQUFnQjtBQUNkRCxNQUFBQSxHQUFHLENBQUNFLE9BQUosR0FBZSxHQUFFRixHQUFHLENBQUNFLE9BQVEsS0FBSUYsR0FBRyxDQUFDQyxNQUFPLEVBQTVDO0FBQ0Q7O0FBRUQsVUFBTUQsR0FBTjtBQUNEO0FBQ0Y7O0FBRUQsZUFBZUcsa0JBQWYsQ0FBbUNDLFdBQW5DLEVBQWdEO0FBTTlDbkIsRUFBQUEsR0FBRyxDQUFDb0IsSUFBSixDQUFVLHdDQUF1Q0QsV0FBWSxFQUE3RDtBQUVBLFFBQU1FLFdBQVcsR0FBRywyQkFBcEI7QUFDQSxRQUFNQyxpQkFBaUIsR0FBRyx3Q0FBMUI7QUFDQSxNQUFJQyxTQUFTLEdBQUcsSUFBaEI7O0FBSUEsTUFBSUMsY0FBS0MsVUFBTCxDQUFnQjlCLEdBQUcsQ0FBQytCLGFBQXBCLENBQUosRUFBd0M7QUFDdEMsVUFBTUMsVUFBVSxHQUFHeEIsaUJBQWlCLENBQUNSLEdBQUcsQ0FBQytCLGFBQUwsQ0FBakIsR0FDZi9CLEdBQUcsQ0FBQytCLGFBRFcsR0FFZi9CLEdBQUcsQ0FBQytCLGFBQUosR0FBb0I1QixZQUZ4Qjs7QUFJQSxRQUFJLE1BQU04QixZQUFHQyxNQUFILENBQVVGLFVBQVYsQ0FBVixFQUFpQztBQUMvQkosTUFBQUEsU0FBUyxHQUFHSSxVQUFaO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsVUFBSUcsSUFBSSxHQUFJLHFEQUFELEdBQ0MseUJBQXdCbkMsR0FBRyxDQUFDK0IsYUFBYyxHQUQzQyxHQUVDLG9CQUZaO0FBR0ExQixNQUFBQSxHQUFHLENBQUNvQixJQUFKLENBQVNVLElBQVQ7QUFDQSxZQUFNLElBQUlqQixLQUFKLENBQVVpQixJQUFWLENBQU47QUFDRDtBQUNGLEdBZEQsTUFjTyxJQUFJLE1BQU1GLFlBQUdDLE1BQUgsQ0FBVVIsV0FBVixDQUFWLEVBQWtDO0FBQ3ZDRSxJQUFBQSxTQUFTLEdBQUcsTUFBTUssWUFBR0csUUFBSCxDQUFZVixXQUFaLENBQWxCO0FBQ0QsR0FGTSxNQUVBLElBQUksTUFBTU8sWUFBR0MsTUFBSCxDQUFVUCxpQkFBVixDQUFWLEVBQXdDO0FBQzdDQyxJQUFBQSxTQUFTLEdBQUcsTUFBTUssWUFBR0csUUFBSCxDQUFZVCxpQkFBWixDQUFsQjtBQUNEOztBQUVELE1BQUlDLFNBQUosRUFBZTtBQUNiLFdBQU9BLFNBQVMsQ0FBQ1MsT0FBVixDQUFrQixJQUFJQyxNQUFKLENBQVcsSUFBWCxDQUFsQixFQUFvQyxFQUFwQyxFQUF3Q0MsSUFBeEMsRUFBUDtBQUNEOztBQU1ELE1BQUlDLEdBQUcsR0FBSSx1REFBc0RkLFdBQVksUUFBT0MsaUJBQWtCLEVBQXRHO0FBQ0F0QixFQUFBQSxHQUFHLENBQUNvQixJQUFKLENBQVNlLEdBQVQ7QUFDQSxRQUFNLElBQUl0QixLQUFKLENBQVVzQixHQUFWLENBQU47QUFDRDs7QUFFRCxlQUFlQyxzQkFBZixDQUF1QzNCLE9BQU8sR0FBR1osYUFBakQsRUFBZ0U7QUFDOUQsTUFBSTtBQUFDd0MsSUFBQUE7QUFBRCxNQUFXLE1BQU0sd0JBQUssY0FBTCxFQUFxQixDQUFDLGNBQUQsQ0FBckIsRUFBdUM7QUFBQzVCLElBQUFBO0FBQUQsR0FBdkMsQ0FBckI7QUFHQSxRQUFNNkIsZUFBZSxHQUFHRCxNQUFNLENBQUNMLE9BQVAsQ0FBZSxLQUFmLEVBQXNCLEVBQXRCLEVBQTBCRSxJQUExQixFQUF4Qjs7QUFFQSxNQUFJLENBQUNWLGNBQUtDLFVBQUwsQ0FBZ0JhLGVBQWhCLENBQUwsRUFBdUM7QUFDckN0QyxJQUFBQSxHQUFHLENBQUN1QyxhQUFKLENBQWtCLHVDQUFsQjtBQUNEOztBQUVELE1BQUksTUFBTVgsWUFBR0MsTUFBSCxDQUFVUyxlQUFWLENBQVYsRUFBc0M7QUFDcEMsV0FBT0EsZUFBUDtBQUNELEdBRkQsTUFFTztBQUNMLFVBQU1ILEdBQUcsR0FBSSw0Q0FBMkNHLGVBQWdCLG1CQUF4RTtBQUNBdEMsSUFBQUEsR0FBRyxDQUFDdUMsYUFBSixDQUFrQkosR0FBbEI7QUFDRDtBQUNGOztBQUVELE1BQU1LLE9BQU8sR0FBRzdCLGdCQUFFOEIsT0FBRixDQUFVLFNBQVNELE9BQVQsQ0FBa0IvQixPQUFPLEdBQUdaLGFBQTVCLEVBQTJDO0FBR25FLFNBQU91QyxzQkFBc0IsQ0FBQzNCLE9BQUQsQ0FBdEIsQ0FBZ0NpQyxLQUFoQyxDQUFzQ3hCLGtCQUF0QyxDQUFQO0FBQ0QsQ0FKZSxDQUFoQjs7OztBQVFBLGVBQWV5QixzQkFBZixDQUF1Q2xDLE9BQU8sR0FBR1osYUFBakQsRUFBZ0U7QUFDOUQsUUFBTTBCLFNBQVMsR0FBRyxNQUFNaUIsT0FBTyxDQUFDL0IsT0FBRCxDQUEvQjs7QUFJQSxRQUFNbUMsU0FBUyxHQUFHeEMsY0FBS3lDLE9BQUwsQ0FBYXRCLFNBQWIsRUFBd0IsSUFBeEIsRUFBOEIsWUFBOUIsQ0FBbEI7O0FBRUEsTUFBSSxFQUFDLE1BQU1LLFlBQUdDLE1BQUgsQ0FBVWUsU0FBVixDQUFQLENBQUosRUFBaUM7QUFDL0IsVUFBTSxJQUFJL0IsS0FBSixDQUFXLGdDQUErQitCLFNBQVUsMEJBQXBELENBQU47QUFDRDs7QUFFRCxRQUFNRSxPQUFPLEdBQUcsTUFBTUMsZUFBTUMsY0FBTixDQUFxQkosU0FBckIsQ0FBdEI7QUFDQSxTQUFPSyxnQkFBT0MsTUFBUCxDQUFjSixPQUFPLENBQUNLLDBCQUF0QixDQUFQO0FBQ0Q7O0FBRUQsTUFBTUMsa0JBQWtCLEdBQUd6QyxnQkFBRThCLE9BQUYsQ0FDekIsU0FBU1csa0JBQVQsQ0FBNkJDLE9BQU8sR0FBR3RELHlCQUF2QyxFQUFrRVUsT0FBTyxHQUFHWixhQUE1RSxFQUEyRjtBQUN6RixTQUFPLHFCQUFNd0QsT0FBTixFQUFlVixzQkFBZixFQUF1Q2xDLE9BQXZDLENBQVA7QUFDRCxDQUh3QixDQUEzQjs7QUFNQSxlQUFlNkMsVUFBZixDQUEyQkMsS0FBSyxHQUFHLEtBQW5DLEVBQTBDRixPQUFPLEdBQUd0RCx5QkFBcEQsRUFBK0VVLE9BQU8sR0FBR1osYUFBekYsRUFBd0c7QUFDdEcsUUFBTWlELE9BQU8sR0FBRyxNQUFNTSxrQkFBa0IsQ0FBQ0MsT0FBRCxFQUFVNUMsT0FBVixDQUF4QztBQUdBLFFBQU0rQyxhQUFhLEdBQUdWLE9BQU8sQ0FBQ1csS0FBUixHQUFnQixDQUFoQixHQUFvQlgsT0FBTyxDQUFDQSxPQUE1QixHQUF1QyxHQUFFQSxPQUFPLENBQUNZLEtBQU0sSUFBR1osT0FBTyxDQUFDYSxLQUFNLEVBQTlGOztBQUNBLE1BQUksQ0FBQ0osS0FBTCxFQUFZO0FBQ1YsV0FBT0MsYUFBUDtBQUNEOztBQUVELFNBQU87QUFDTEEsSUFBQUEsYUFESztBQUVMSSxJQUFBQSxZQUFZLEVBQUVDLFVBQVUsQ0FBQ0wsYUFBRCxDQUZuQjtBQUdMRSxJQUFBQSxLQUFLLEVBQUVaLE9BQU8sQ0FBQ1ksS0FIVjtBQUlMQyxJQUFBQSxLQUFLLEVBQUViLE9BQU8sQ0FBQ2EsS0FKVjtBQUtMRixJQUFBQSxLQUFLLEVBQUVYLE9BQU8sQ0FBQ1csS0FBUixHQUFnQixDQUFoQixHQUFvQlgsT0FBTyxDQUFDVyxLQUE1QixHQUFvQ0ssU0FMdEM7O0FBTUxDLElBQUFBLFFBQVEsR0FBSTtBQUNWLGFBQU9QLGFBQVA7QUFDRDs7QUFSSSxHQUFQO0FBVUQ7O0FBRUQsZUFBZVEsMEJBQWYsR0FBNkM7QUFHM0MsUUFBTUMsbUJBQW1CLEdBQUcsQ0FDMUIsWUFBWTtBQUNWLFFBQUlDLEdBQUcsR0FBRyxDQUFDLE1BQU0sd0JBQUssU0FBTCxFQUFnQixDQUFDLGdDQUFELENBQWhCLENBQVAsRUFBNEQ3QixNQUF0RTtBQUNBLFdBQU8sQ0FBQyxNQUFNLHdCQUFLLFNBQUwsRUFBZ0IsQ0FBRSxjQUFhNkIsR0FBRyxDQUFDaEMsSUFBSixFQUFXLEVBQTFCLENBQWhCLENBQVAsRUFBc0RHLE1BQTdEO0FBQ0QsR0FKeUIsRUFLMUIsWUFBWSxDQUFDLE1BQU0sd0JBQUssU0FBTCxFQUFnQixDQUFFLDhDQUFGLENBQWhCLENBQVAsRUFBMEVBLE1BTDVELEVBTTFCLFlBQVksQ0FBQyxNQUFNLHdCQUFLLFNBQUwsRUFBZ0IsQ0FBRSw0Q0FBRixDQUFoQixDQUFQLEVBQXdFQSxNQU4xRCxDQUE1QjtBQVFBLE1BQUlBLE1BQUo7O0FBQ0EsT0FBSyxJQUFJaUIsVUFBVCxJQUF1QlcsbUJBQXZCLEVBQTRDO0FBQzFDLFFBQUk7QUFDRjVCLE1BQUFBLE1BQU0sR0FBRyxNQUFNaUIsVUFBVSxFQUF6QjtBQUNBO0FBQ0QsS0FIRCxDQUdFLE9BQU9hLEdBQVAsRUFBWTtBQUNaOUIsTUFBQUEsTUFBTSxHQUFHLEVBQVQ7QUFDRDtBQUNGOztBQUdELE1BQUkrQixLQUFLLEdBQUcsbUJBQW1CQyxJQUFuQixDQUF3QmhDLE1BQXhCLENBQVo7QUFDQSxTQUFPK0IsS0FBSyxHQUFHQSxLQUFLLENBQUMsQ0FBRCxDQUFSLEdBQWNOLFNBQTFCO0FBQ0Q7O0FBVUQsZUFBZVEsZUFBZixHQUFrQztBQUNoQyxNQUFJO0FBQ0YsVUFBTTFDLFlBQUcyQyxLQUFILENBQVMsT0FBVCxDQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLENBQVAsRUFBVTtBQUNWeEUsSUFBQUEsR0FBRyxDQUFDeUUsSUFBSixDQUFTLHVEQUNQLHlDQURGO0FBRUEsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsUUFBTTtBQUFDcEMsSUFBQUE7QUFBRCxNQUFXLE1BQU0sd0JBQUssT0FBTCxFQUFjLENBQUMsV0FBRCxDQUFkLENBQXZCO0FBQ0EsUUFBTStCLEtBQUssR0FBRyxrQkFBa0JDLElBQWxCLENBQXVCaEMsTUFBdkIsQ0FBZDs7QUFDQSxNQUFJLENBQUMrQixLQUFMLEVBQVk7QUFDVnBFLElBQUFBLEdBQUcsQ0FBQ3lFLElBQUosQ0FBVSxtQ0FBa0NwQyxNQUFPLEVBQW5EO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7O0FBQ0QsU0FBTytCLEtBQUssQ0FBQyxDQUFELENBQVo7QUFDRDs7QUFFRCxlQUFlTSwwQ0FBZixDQUEyRGpFLE9BQU8sR0FBR1osYUFBckUsRUFBb0Y7QUFDbEYsUUFBTTBCLFNBQVMsR0FBRyxNQUFNaUIsT0FBTyxDQUFDL0IsT0FBRCxDQUEvQjtBQUlBLFFBQU1rRSxVQUFVLEdBQUcsQ0FBQyxVQUFELEVBQWEsUUFBYixDQUFuQjs7QUFDQSxRQUFNQyxVQUFVLEdBQUd4RSxjQUFLeUMsT0FBTCxDQUFhdEIsU0FBYixFQUF3QixrREFBeEIsQ0FBbkI7O0FBQ0EsUUFBTXNELFVBQVUsR0FBRyw2Q0FBbkI7QUFDQSxNQUFJQyw0QkFBNEIsR0FBRyxDQUNqQzFFLGNBQUt5QyxPQUFMLENBQWErQixVQUFiLEVBQTBCLHdCQUF1QkQsVUFBVSxDQUFDLENBQUQsQ0FBSSxFQUEvRCxFQUFrRUUsVUFBbEUsQ0FEaUMsRUFFakN6RSxjQUFLeUMsT0FBTCxDQUFhK0IsVUFBYixFQUEwQix3QkFBdUJELFVBQVUsQ0FBQyxDQUFELENBQUksRUFBL0QsRUFBa0VFLFVBQWxFLENBRmlDLENBQW5DOztBQUtBLE1BQUksTUFBTWpELFlBQUdDLE1BQUgsQ0FBVWlELDRCQUE0QixDQUFDLENBQUQsQ0FBdEMsQ0FBVixFQUFzRDtBQUNwRCxXQUFPQSw0QkFBNEIsQ0FBQyxDQUFELENBQW5DO0FBQ0Q7O0FBRUQsTUFBSSxNQUFNbEQsWUFBR0MsTUFBSCxDQUFVaUQsNEJBQTRCLENBQUMsQ0FBRCxDQUF0QyxDQUFWLEVBQXNEO0FBQ3BELFdBQU9BLDRCQUE0QixDQUFDLENBQUQsQ0FBbkM7QUFDRDs7QUFFRCxRQUFNM0MsR0FBRyxHQUFHLG9FQUNDLGFBQVkyQyw0QkFBNEIsQ0FBQ2YsUUFBN0IsRUFBd0MsRUFEakU7QUFFQS9ELEVBQUFBLEdBQUcsQ0FBQytFLEtBQUosQ0FBVTVDLEdBQVY7QUFDQSxRQUFNLElBQUl0QixLQUFKLENBQVVzQixHQUFWLENBQU47QUFFRDs7QUFFRCxNQUFNNkMsOEJBQThCLEdBQUdyRSxnQkFBRThCLE9BQUYsQ0FDckMsU0FBU3VDLDhCQUFULENBQXlDM0IsT0FBTyxHQUFHdEQseUJBQW5ELEVBQThFVSxPQUFPLEdBQUdaLGFBQXhGLEVBQXVHO0FBQ3JHLFNBQU8scUJBQU13RCxPQUFOLEVBQWVxQiwwQ0FBZixFQUEyRGpFLE9BQTNELENBQVA7QUFDRCxDQUhvQyxDQUF2Qzs7OztBQU1BLGVBQWV3RSx3QkFBZixDQUF5Q3hFLE9BQU8sR0FBR1osYUFBbkQsRUFBa0U7QUFDaEUsUUFBTWlELE9BQU8sR0FBRyxNQUFNUSxVQUFVLENBQUMsS0FBRCxFQUFRdkQseUJBQVIsRUFBbUNVLE9BQW5DLENBQWhDOztBQUNBLE1BQUlxQyxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsR0FBbkIsRUFBd0I7QUFDdEIsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsUUFBTXRDLElBQUksR0FBRyxDQUFDLE9BQUQsRUFBVSxpQkFBVixFQUE2QixvQkFBN0IsQ0FBYjtBQUNBLFFBQU07QUFBQzZCLElBQUFBO0FBQUQsTUFBVyxNQUFNOUIsZUFBZSxDQUFDQyxJQUFELEVBQU9DLE9BQVAsQ0FBdEM7QUFFQSxRQUFNeUUsVUFBVSxHQUFHN0MsTUFBTSxDQUFDSCxJQUFQLEVBQW5CO0FBQ0EsUUFBTWtDLEtBQUssR0FBRyxRQUFRQyxJQUFSLENBQWFoQyxNQUFiLENBQWQ7O0FBRUEsTUFBSSxDQUFDK0IsS0FBTCxFQUFZO0FBQ1YsVUFBTSxJQUFJdkQsS0FBSixDQUFXLGtEQUFpRHFFLFVBQVcsR0FBdkUsQ0FBTjtBQUNEOztBQUVELFNBQU9BLFVBQVA7QUFDRDs7QUFFRCxlQUFlQyw0QkFBZixDQUE2QzFFLE9BQU8sR0FBR1osYUFBdkQsRUFBc0U7QUFDcEUsUUFBTWlELE9BQU8sR0FBRyxNQUFNUSxVQUFVLENBQUMsSUFBRCxFQUFPdkQseUJBQVAsRUFBa0NVLE9BQWxDLENBQWhDO0FBR0EsU0FBUSxHQUFFcUMsT0FBTyxDQUFDWSxLQUFSLEdBQWdCLENBQUUsSUFBR1osT0FBTyxDQUFDYSxLQUFNLEVBQTdDO0FBQ0Q7O0FBRUQsTUFBTXlCLFlBQVksR0FBR3pFLGdCQUFFOEIsT0FBRixDQUNuQixTQUFTMkMsWUFBVCxDQUF1Qi9CLE9BQU8sR0FBR3RELHlCQUFqQyxFQUE0RFUsT0FBTyxHQUFHWixhQUF0RSxFQUFxRjtBQUNuRixNQUFJO0FBQ0YsV0FBTyxxQkFBTXdELE9BQU4sRUFBZTRCLHdCQUFmLEVBQXlDeEUsT0FBekMsQ0FBUDtBQUNELEdBRkQsQ0FFRSxPQUFPTSxHQUFQLEVBQVk7QUFDWmYsSUFBQUEsR0FBRyxDQUFDb0IsSUFBSixDQUFVLDJDQUEwQ0wsR0FBRyxDQUFDRSxPQUFRLEVBQWhFO0FBQ0FqQixJQUFBQSxHQUFHLENBQUNvQixJQUFKLENBQVMsNkJBQVQ7QUFDQSxXQUFPK0QsNEJBQTRCLENBQUMxRSxPQUFELENBQW5DO0FBQ0Q7QUFDRixDQVRrQixDQUFyQjs7OztBQVlBLGVBQWU0RSx5QkFBZixDQUEwQzVFLE9BQU8sR0FBR1osYUFBcEQsRUFBbUU7QUFDakUsUUFBTVcsSUFBSSxHQUFHLENBQUMsT0FBRCxFQUFVLGtCQUFWLEVBQThCLG9CQUE5QixDQUFiO0FBQ0EsUUFBTTtBQUFDNkIsSUFBQUE7QUFBRCxNQUFXLE1BQU05QixlQUFlLENBQUNDLElBQUQsRUFBT0MsT0FBUCxDQUF0QztBQUVBLFFBQU15RSxVQUFVLEdBQUc3QyxNQUFNLENBQUNILElBQVAsRUFBbkI7O0FBRUEsTUFBSW9ELEtBQUssQ0FBQ3pCLFVBQVUsQ0FBQ3FCLFVBQUQsQ0FBWCxDQUFULEVBQW1DO0FBQ2pDLFVBQU0sSUFBSXJFLEtBQUosQ0FBVyxtREFBa0RxRSxVQUFXLEdBQXhFLENBQU47QUFDRDs7QUFFRCxTQUFPQSxVQUFQO0FBQ0Q7O0FBRUQsTUFBTUssYUFBYSxHQUFHNUUsZ0JBQUU4QixPQUFGLENBQ3BCLFNBQVM4QyxhQUFULENBQXdCbEMsT0FBTyxHQUFHdEQseUJBQWxDLEVBQTZEVSxPQUFPLEdBQUdaLGFBQXZFLEVBQXNGO0FBQ3BGLFNBQU8scUJBQU13RCxPQUFOLEVBQWVnQyx5QkFBZixFQUEwQzVFLE9BQTFDLENBQVA7QUFDRCxDQUhtQixDQUF0Qjs7OztBQU1BLGVBQWUrRSxtQkFBZixDQUFvQy9FLE9BQU8sR0FBR1osYUFBOUMsRUFBNkQ7QUFDM0QsUUFBTTRGLEdBQUcsR0FBRywyQkFBWjtBQUNBLFFBQU1qRixJQUFJLEdBQUcsQ0FBQyxNQUFELEVBQVMsZUFBVCxDQUFiO0FBQ0EsTUFBSTtBQUFDNkIsSUFBQUE7QUFBRCxNQUFXLE1BQU0sd0JBQUtvRCxHQUFMLEVBQVVqRixJQUFWLEVBQWdCO0FBQUNDLElBQUFBO0FBQUQsR0FBaEIsQ0FBckI7QUFDQSxNQUFJaUYsWUFBWSxHQUFHLGtCQUFlckQsTUFBZixDQUFuQjtBQUVBLE1BQUlzRCxZQUFZLEdBQUcsRUFBbkI7QUFDQSxNQUFJQyxlQUFlLEdBQUcsQ0FBQ0YsWUFBWSxDQUFDLENBQUQsQ0FBYixDQUF0Qjs7QUFDQSxTQUFPRSxlQUFlLENBQUN0RixNQUFoQixHQUF5QixDQUFoQyxFQUFtQztBQUNqQyxRQUFJdUYsWUFBWSxHQUFHRCxlQUFlLENBQUNFLEdBQWhCLEVBQW5COztBQUNBLFFBQUlELFlBQVksWUFBWUUsS0FBNUIsRUFBbUM7QUFDakNILE1BQUFBLGVBQWUsR0FBR0EsZUFBZSxDQUFDSSxNQUFoQixDQUF1QkgsWUFBdkIsQ0FBbEI7QUFDRCxLQUZELE1BRU8sSUFBS0EsWUFBWSxDQUFDSSxLQUFiLElBQ0FKLFlBQVksQ0FBQ0ksS0FBYixDQUFtQjVGLFNBQW5CLENBQTZCLENBQTdCLEVBQWdDLENBQWhDLE1BQXVDLE1BRHhDLElBRUN3RixZQUFZLENBQUNJLEtBQWIsSUFDQUosWUFBWSxDQUFDSSxLQUFiLENBQW1CNUYsU0FBbkIsQ0FBNkIsQ0FBN0IsRUFBZ0MsQ0FBaEMsTUFBdUMsUUFIeEMsSUFJQ3dGLFlBQVksQ0FBQ0ksS0FBYixJQUFzQnRGLGdCQUFFdUYsUUFBRixDQUFXTCxZQUFZLENBQUNJLEtBQXhCLEVBQStCLFVBQS9CLENBSjNCLEVBSXdFO0FBQzdFLFVBQUlFLFVBQVUsR0FBRztBQUNmQyxRQUFBQSxJQUFJLEVBQUVQLFlBQVksQ0FBQ0ksS0FESjtBQUVmSSxRQUFBQSxJQUFJLEVBQUVSLFlBQVksQ0FBQ1MsVUFGSjtBQUdmQyxRQUFBQSxTQUFTLEVBQUVWLFlBQVksQ0FBQ1csVUFIVDtBQUlmQyxRQUFBQSxhQUFhLEVBQUVaLFlBQVksQ0FBQ2E7QUFKYixPQUFqQjtBQU1BZixNQUFBQSxZQUFZLENBQUNnQixJQUFiLENBQWtCUixVQUFsQjtBQUNELEtBWk0sTUFZQSxJQUFJTixZQUFZLENBQUNlLE1BQWpCLEVBQXlCO0FBQzlCaEIsTUFBQUEsZUFBZSxHQUFHQSxlQUFlLENBQUNJLE1BQWhCLENBQXVCSCxZQUFZLENBQUNlLE1BQXBDLENBQWxCO0FBQ0Q7QUFDRjs7QUFDRCxTQUFPakIsWUFBUDtBQUNEOztBQUVELGVBQWVrQiw4QkFBZixDQUErQ3BHLE9BQU8sR0FBR1osYUFBekQsRUFBd0U7QUFDdEUsUUFBTVcsSUFBSSxHQUFHLENBQUMsT0FBRCxFQUFVLGFBQVYsQ0FBYjtBQUNBLE1BQUk7QUFBQzZCLElBQUFBO0FBQUQsTUFBVyxNQUFNOUIsZUFBZSxDQUFDQyxJQUFELEVBQU9DLE9BQVAsQ0FBcEM7O0FBRUEsTUFBSSxDQUFDNEIsTUFBTCxFQUFhO0FBQ1hBLElBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0Q7O0FBRUQsTUFBSXlFLGVBQWUsR0FBR3pFLE1BQU0sQ0FBQ0gsSUFBUCxFQUF0Qjs7QUFFQSxNQUFJLENBQUM0RSxlQUFMLEVBQXNCO0FBQ3BCLFVBQU0sSUFBSWpHLEtBQUosQ0FBVywwREFBeURMLElBQUksQ0FBQ00sSUFBTCxDQUFVLEdBQVYsQ0FBZSxHQUFuRixDQUFOO0FBQ0Q7O0FBRUQsU0FBT2dHLGVBQVA7QUFDRDs7QUFFRCxNQUFNQyxrQkFBa0IsR0FBR3BHLGdCQUFFOEIsT0FBRixDQUN6QixTQUFTc0Usa0JBQVQsQ0FBNkIxRCxPQUFPLEdBQUd0RCx5QkFBdkMsRUFBa0VVLE9BQU8sR0FBR1osYUFBNUUsRUFBMkY7QUFDekYsU0FBTyxxQkFBTXdELE9BQU4sRUFBZXdELDhCQUFmLEVBQStDcEcsT0FBL0MsQ0FBUDtBQUNELENBSHdCLENBQTNCOzs7O0FBTUEsU0FBU3VHLGtCQUFULEdBQStCO0FBRzdCLFFBQU1DLFFBQVEsR0FBRyxDQUNmekUsT0FEZSxFQUNOWSxrQkFETSxFQUNjNEIsOEJBRGQsRUFDOENJLFlBRDlDLEVBRWZHLGFBRmUsRUFFQXdCLGtCQUZBLENBQWpCO0FBS0FFLEVBQUFBLFFBQVEsQ0FBQ0MsT0FBVCxDQUFrQkMsQ0FBRCxJQUFPO0FBQ3RCLFFBQUlBLENBQUMsQ0FBQ0MsS0FBTixFQUFhO0FBQ1hELE1BQUFBLENBQUMsQ0FBQ0MsS0FBRixHQUFVLElBQUl6RyxnQkFBRThCLE9BQUYsQ0FBVTRFLEtBQWQsRUFBVjtBQUNEO0FBQ0YsR0FKRDtBQUtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXRpbCwgZnMsIHBsaXN0LCBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZVBsaXN0RGF0YSB9IGZyb20gJ3BsaXN0JztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5jb25zdCBYQ1JVTl9USU1FT1VUID0gMTUwMDA7XG5jb25zdCBYQ09ERV9TVUJESVIgPSAnL0NvbnRlbnRzL0RldmVsb3Blcic7XG5jb25zdCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTID0gMztcblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignWGNvZGUnKTtcblxuXG5mdW5jdGlvbiBoYXNFeHBlY3RlZFN1YkRpciAocGF0aCkge1xuICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocGF0aC5sZW5ndGggLSBYQ09ERV9TVUJESVIubGVuZ3RoKSA9PT0gWENPREVfU1VCRElSO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5YY3J1bkNvbW1hbmQgKGFyZ3MsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZXhlYygneGNydW4nLCBhcmdzLCB7dGltZW91dH0pO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHJlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm90aGluZyByZXR1cm5lZCBmcm9tIHRyeWluZyB0byBydW4gJ3hjcnVuICR7YXJncy5qb2luKCcgJyl9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyB0aGUgdHJ1ZSBlcnJvciBjYW4gYmUgaGlkZGVuIHdpdGhpbiB0aGUgc3RkZXJyXG4gICAgaWYgKGVyci5zdGRlcnIpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYCR7ZXJyLm1lc3NhZ2V9OiAke2Vyci5zdGRlcnJ9YDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UGF0aEZyb21TeW1saW5rIChmYWlsTWVzc2FnZSkge1xuICAvLyBOb2RlJ3MgaW52b2NhdGlvbiBvZiB4Y29kZS1zZWxlY3Qgc29tZXRpbWVzIGZsYWtlcyBhbmQgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gIC8vIE5vdCBjbGVhciB3aHkuIEFzIGEgd29ya2Fyb3VuZCwgQXBwaXVtIGNhbiByZWxpYWJseSBkZWR1Y2UgdGhlIHZlcnNpb24gaW4gdXNlIGJ5IGNoZWNraW5nXG4gIC8vIHRoZSBsb2NhdGlvbnMgeGNvZGUtc2VsZWN0IHVzZXMgdG8gc3RvcmUgdGhlIHNlbGVjdGVkIHZlcnNpb24ncyBwYXRoLiBUaGlzIHNob3VsZCBiZSAxMDAlXG4gIC8vIHJlbGlhYmxlIHNvIGxvbmcgYXMgdGhlIGxpbmsgbG9jYXRpb25zIHJlbWFpbiB0aGUgc2FtZS4gSG93ZXZlciwgc2luY2Ugd2UncmUgcmVseWluZyBvblxuICAvLyBoYXJkY29kZWQgcGF0aHMsIHRoaXMgYXBwcm9hY2ggd2lsbCBicmVhayB0aGUgbmV4dCB0aW1lIEFwcGxlIGNoYW5nZXMgdGhlIHN5bWxpbmsgbG9jYXRpb24uXG4gIGxvZy53YXJuKGBGaW5kaW5nIFhjb2RlUGF0aCBieSBzeW1saW5rIGJlY2F1c2UgJHtmYWlsTWVzc2FnZX1gKTtcblxuICBjb25zdCBzeW1saW5rUGF0aCA9ICcvdmFyL2RiL3hjb2RlX3NlbGVjdF9saW5rJztcbiAgY29uc3QgbGVnYWN5U3ltbGlua1BhdGggPSAnL3Vzci9zaGFyZS94Y29kZS1zZWxlY3QveGNvZGVfZGlyX2xpbmsnOyAvLyAgWGNvZGUgPCA1LnhcbiAgbGV0IHhjb2RlUGF0aCA9IG51bGw7XG5cbiAgLy8geGNvZGUtc2VsZWN0IGFsbG93cyB1c2VycyB0byBvdmVycmlkZSBpdHMgc2V0dGluZ3Mgd2l0aCB0aGUgREVWRUxPUEVSX0RJUiBlbnYgdmFyLFxuICAvLyBzbyBjaGVjayB0aGF0IGZpcnN0XG4gIGlmICh1dGlsLmhhc0NvbnRlbnQoZW52LkRFVkVMT1BFUl9ESVIpKSB7XG4gICAgY29uc3QgY3VzdG9tUGF0aCA9IGhhc0V4cGVjdGVkU3ViRGlyKGVudi5ERVZFTE9QRVJfRElSKVxuICAgICAgPyBlbnYuREVWRUxPUEVSX0RJUlxuICAgICAgOiBlbnYuREVWRUxPUEVSX0RJUiArIFhDT0RFX1NVQkRJUjtcblxuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoY3VzdG9tUGF0aCkpIHtcbiAgICAgIHhjb2RlUGF0aCA9IGN1c3RvbVBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBtZXNnID0gYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gWGNvZGUsIGVudmlyb25tZW50IHZhcmlhYmxlIGAgK1xuICAgICAgICAgICAgICAgICBgREVWRUxPUEVSX0RJUiBzZXQgdG86ICR7ZW52LkRFVkVMT1BFUl9ESVJ9IGAgK1xuICAgICAgICAgICAgICAgICBgYnV0IG5vIFhjb2RlIGZvdW5kYDtcbiAgICAgIGxvZy53YXJuKG1lc2cpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc2cpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhd2FpdCBmcy5leGlzdHMoc3ltbGlua1BhdGgpKSB7XG4gICAgeGNvZGVQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsoc3ltbGlua1BhdGgpO1xuICB9IGVsc2UgaWYgKGF3YWl0IGZzLmV4aXN0cyhsZWdhY3lTeW1saW5rUGF0aCkpIHtcbiAgICB4Y29kZVBhdGggPSBhd2FpdCBmcy5yZWFkbGluayhsZWdhY3lTeW1saW5rUGF0aCk7XG4gIH1cblxuICBpZiAoeGNvZGVQYXRoKSB7XG4gICAgcmV0dXJuIHhjb2RlUGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoJy8kJyksICcnKS50cmltKCk7XG4gIH1cblxuICAvLyBXZSBzaG91bGQgb25seSBnZXQgaGVyZSBpcyB3ZSBmYWlsZWQgdG8gY2FwdHVyZSB4Y29kZS1zZWxlY3QncyBzdGRvdXQgYW5kIG91clxuICAvLyBvdGhlciBjaGVja3MgZmFpbGVkLiBFaXRoZXIgQXBwbGUgaGFzIG1vdmVkIHRoZSBzeW1saW5rIHRvIGEgbmV3IGxvY2F0aW9uIG9yIHRoZSB1c2VyXG4gIC8vIGlzIG5vdCB1c2luZyB0aGUgZGVmYXVsdCBpbnN0YWxsLiA5OS45OTklIGNoYW5jZSBpdCdzIHRoZSBsYXR0ZXIsIHNvIGlzc3VlIGEgd2FybmluZ1xuICAvLyBzaG91bGQgd2UgZXZlciBoaXQgdGhlIGVkZ2UgY2FzZS5cbiAgbGV0IG1zZyA9IGBDb3VsZCBub3QgZmluZCBwYXRoIHRvIFhjb2RlIGJ5IHN5bWxpbmtzIGxvY2F0ZWQgaW4gJHtzeW1saW5rUGF0aH0sIG9yICR7bGVnYWN5U3ltbGlua1BhdGh9YDtcbiAgbG9nLndhcm4obXNnKTtcbiAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tWGNvZGVTZWxlY3QgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoJ3hjb2RlLXNlbGVjdCcsIFsnLS1wcmludC1wYXRoJ10sIHt0aW1lb3V0fSk7XG5cbiAgLy8gdHJpbSBhbmQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gIGNvbnN0IHhjb2RlRm9sZGVyUGF0aCA9IHN0ZG91dC5yZXBsYWNlKC9cXC8kLywgJycpLnRyaW0oKTtcblxuICBpZiAoIXV0aWwuaGFzQ29udGVudCh4Y29kZUZvbGRlclBhdGgpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ3hjb2RlLXNlbGVjdCByZXR1cm5lZCBhbiBlbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChhd2FpdCBmcy5leGlzdHMoeGNvZGVGb2xkZXJQYXRoKSkge1xuICAgIHJldHVybiB4Y29kZUZvbGRlclBhdGg7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbXNnID0gYHhjb2RlLXNlbGVjdCBjb3VsZCBub3QgZmluZCB4Y29kZS4gUGF0aCAnJHt4Y29kZUZvbGRlclBhdGh9JyBkb2VzIG5vdCBleGlzdC5gO1xuICAgIGxvZy5lcnJvckFuZFRocm93KG1zZyk7XG4gIH1cbn1cblxuY29uc3QgZ2V0UGF0aCA9IF8ubWVtb2l6ZShmdW5jdGlvbiBnZXRQYXRoICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAvLyBmaXJzdCB3ZSB0cnkgdXNpbmcgeGNvZGUtc2VsZWN0IHRvIGZpbmQgdGhlIHBhdGhcbiAgLy8gdGhlbiB3ZSB0cnkgdXNpbmcgdGhlIHN5bWxpbmtzIHRoYXQgQXBwbGUgaGFzIGJ5IGRlZmF1bHRcbiAgcmV0dXJuIGdldFBhdGhGcm9tWGNvZGVTZWxlY3QodGltZW91dCkuY2F0Y2goZ2V0UGF0aEZyb21TeW1saW5rKTtcbn0pO1xuXG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgeGNvZGVQYXRoID0gYXdhaXQgZ2V0UGF0aCh0aW1lb3V0KTtcblxuICAvLyB3ZSB3YW50IHRvIHJlYWQgdGhlIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIGZyb20gWGNvZGUncyBwbGlzdC5cbiAgLy8gSXQgc2hvdWxkIGJlIGluIC9bcm9vdF0vWENvZGUuYXBwL0NvbnRlbnRzL1xuICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4nLCAnSW5mby5wbGlzdCcpO1xuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBsaXN0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgWGNvZGUgdmVyc2lvbi4gJHtwbGlzdFBhdGh9IGRvZXMgbm90IGV4aXN0IG9uIGRpc2suYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKTtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UodmVyc2lvbi5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyk7XG59XG5cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24gKHBhcnNlID0gZmFsc2UsIHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbk1lbW9pemVkKHJldHJpZXMsIHRpbWVvdXQpO1xuICAvLyB4Y29kZSB2ZXJzaW9uIHN0cmluZ3MgYXJlIG5vdCBleGFjdGx5IHNlbXZlciBzdHJpbmc6IHBhdGNoIHZlcnNpb25zIG9mIDBcbiAgLy8gYXJlIHJlbW92ZWQgKGUuZy4sICcxMC4wLjAnID0+ICcxMC4wJylcbiAgY29uc3QgdmVyc2lvblN0cmluZyA9IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi52ZXJzaW9uIDogYCR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfWA7XG4gIGlmICghcGFyc2UpIHtcbiAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvblN0cmluZyxcbiAgICB2ZXJzaW9uRmxvYXQ6IHBhcnNlRmxvYXQodmVyc2lvblN0cmluZyksXG4gICAgbWFqb3I6IHZlcnNpb24ubWFqb3IsXG4gICAgbWlub3I6IHZlcnNpb24ubWlub3IsXG4gICAgcGF0Y2g6IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi5wYXRjaCA6IHVuZGVmaW5lZCxcbiAgICB0b1N0cmluZyAoKSB7XG4gICAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiAoKSB7XG4gIC8vIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5cyB0aGF0IHRoZSBDTEkgdG9vbHMgdmVyc2lvbiBoYXMgYmVlblxuICAvLyByZXByZXNlbnRlZC4gVHJ5IHRoZW0gZnJvbSBtb3N0IHJlbGlhYmxlIHRvIGxlYXN0LCBmYWxsaW5nIGRvd24gdGhlIGNoYWluXG4gIGNvbnN0IGdldFZlcnNpb25GdW5jdGlvbnMgPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHBrZyA9IChhd2FpdCBleGVjKCdwa2d1dGlsJywgWyctLXBrZ3M9Y29tLmFwcGxlLnBrZy5EZXZTREtfLionXSkpLnN0ZG91dDtcbiAgICAgIHJldHVybiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz0ke3BrZy50cmltKCl9YF0pKS5zdGRvdXQ7XG4gICAgfSxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkNMVG9vbHNfRXhlY3V0YWJsZXNgXSkpLnN0ZG91dCxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkRldmVsb3BlclRvb2xzQ0xJYF0pKS5zdGRvdXQsXG4gIF07XG4gIGxldCBzdGRvdXQ7XG4gIGZvciAobGV0IGdldFZlcnNpb24gb2YgZ2V0VmVyc2lvbkZ1bmN0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBzdGRvdXQgPSBhd2FpdCBnZXRWZXJzaW9uKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIHN0ZG91dCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0ZG91dCBzaG91bGQgaGF2ZSBhIGxpbmUgbGlrZSBgdmVyc2lvbjogOC4wLjAuMC4xLjE0NzI0MzU4ODFgXG4gIGxldCBtYXRjaCA9IC9edmVyc2lvbjogKC4rKSQvbS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvSFYzeDRkLzFcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy93aWtpL1hjb2RlVmVyc2lvbkluZm9cbiAqIHRvIHNlZSB0aGUgYWN0dWFsIG1hcHBpbmcgYmV0d2VlbiBjbGFuZyBhbmQgb3RoZXIgY29tcG9uZW50cy5cbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBDbGFuZyB2ZXJzaW9uIGluIHgueC54Lnggb3IgeC54LnggZm9ybWF0LFxuICogd2hpY2ggaXMgc3VwcGxpZWQgd2l0aCBDb21tYW5kIExpbmUgVG9vbHMuIGBudWxsYCBpcyByZXR1cm5lZFxuICogaWYgQ0xUIGFyZSBub3QgaW5zdGFsbGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDbGFuZ1ZlcnNpb24gKCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdjbGFuZycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmluZm8oJ0Nhbm5vdCBmaW5kIGNsYW5nIGV4ZWN1dGFibGUgb24gdGhlIGxvY2FsIHN5c3RlbS4gJyArXG4gICAgICAnQXJlIFhjb2RlIENvbW1hbmQgTGluZSBUb29scyBpbnN0YWxsZWQ/Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdjbGFuZycsIFsnLS12ZXJzaW9uJ10pO1xuICBjb25zdCBtYXRjaCA9IC9jbGFuZy0oWzAtOS5dKykvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIGxvZy5pbmZvKGBDYW5ub3QgcGFyc2UgY2xhbmcgdmVyc2lvbiBmcm9tICR7c3Rkb3V0fWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB4Y29kZVBhdGggPSBhd2FpdCBnZXRQYXRoKHRpbWVvdXQpO1xuXG4gIC8vIGZvciBpb3MgOCBhbmQgdXAsIHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgQXV0aW9tYXRpb25JbnN0cnVtZW50IGNoYW5nZWQuXG4gIC8vIHJhdGhlciB0aGFuIHdhc3RlIHRpbWUgZ2V0dGluZyB0aGUgaU9TU0RLVmVyc2lvbiwganVzdCBnZXQgYm90aCBwYXRocyBhbmQgc2VlIHdoaWNoIG9uZSBleGlzdHNcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsneHJwbHVnaW4nLCAnYnVuZGxlJ107XG4gIGNvbnN0IHBhdGhQcmVmaXggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4vQXBwbGljYXRpb25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9QbHVnSW5zJyk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSAnQ29udGVudHMvUmVzb3VyY2VzL0F1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSc7XG4gIGxldCBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzID0gW1xuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzBdfWAsIHBhdGhTdWZmaXgpLFxuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzFdfWAsIHBhdGhTdWZmaXgpXG4gIF07XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdO1xuICB9XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdO1xuICB9XG5cbiAgY29uc3QgbXNnID0gJ0NvdWxkIG5vdCBmaW5kIEF1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZycgK1xuICAgICAgICAgICAgICBgbG9jYXRpb25zICR7YXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRocy50b1N0cmluZygpfWA7XG4gIGxvZy5lcnJvcihtc2cpO1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcblxufVxuXG5jb25zdCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGggPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCAocmV0cmllcyA9IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHJldHJ5KHJldHJpZXMsIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb24oZmFsc2UsIERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQpO1xuICBpZiAodmVyc2lvblswXSA9PT0gJzQnKSB7XG4gICAgcmV0dXJuICc2LjEnO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBjb25zdCBzZGtWZXJzaW9uID0gc3Rkb3V0LnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSAvXFxkLlxcZC8uZXhlYyhzdGRvdXQpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHhjcnVuIHJldHVybmVkIGEgbm9uLW51bWVyaWMgaU9TIFNESyB2ZXJzaW9uOiAnJHtzZGtWZXJzaW9ufSdgKTtcbiAgfVxuXG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbih0cnVlLCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0KTtcbiAgLy8gYXMgb2Ygbm93LCB0aGUgaU9TIHZlcnNpb24gYXNzb2NpYXRlZCB3aXRoIGFuIFhjb2RlIHZlcnNpb24gaXNcbiAgLy8ganVzdCB0aGUgWGNvZGUgdmVyc2lvbiArIDJcbiAgcmV0dXJuIGAke3ZlcnNpb24ubWFqb3IgKyAyfS4ke3ZlcnNpb24ubWlub3J9YDtcbn1cblxuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmV0cmlldmUgbWF4aW11bSBpT1MgdmVyc2lvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdHdWVzc2luZyBmcm9tIFhjb2RlIHZlcnNpb24nKTtcbiAgICAgIHJldHVybiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uKHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnYXBwbGV0dnNpbXVsYXRvcicsICctLXNob3ctc2RrLXZlcnNpb24nXTtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBydW5YY3J1bkNvbW1hbmQoYXJncywgdGltZW91dCk7XG5cbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoc2RrVmVyc2lvbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB4Y3J1biByZXR1cm5lZCBhIG5vbi1udW1lcmljIHR2T1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG5cbiAgcmV0dXJuIHNka1ZlcnNpb247XG59XG5cbmNvbnN0IGdldE1heFRWT1NTREsgPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldE1heFRWT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkRGV2aWNlcyAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgY21kID0gJy91c3Ivc2Jpbi9zeXN0ZW1fcHJvZmlsZXInO1xuICBjb25zdCBhcmdzID0gWycteG1sJywgJ1NQVVNCRGF0YVR5cGUnXTtcbiAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhjbWQsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIGxldCBwbGlzdENvbnRlbnQgPSBwYXJzZVBsaXN0RGF0YShzdGRvdXQpO1xuXG4gIGxldCBkZXZpY2VzRm91bmQgPSBbXTtcbiAgbGV0IGVudHJpZXNUb1NlYXJjaCA9IFtwbGlzdENvbnRlbnRbMF1dO1xuICB3aGlsZSAoZW50cmllc1RvU2VhcmNoLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgY3VycmVudEVudHJ5ID0gZW50cmllc1RvU2VhcmNoLnBvcCgpO1xuICAgIGlmIChjdXJyZW50RW50cnkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZW50cmllc1RvU2VhcmNoID0gZW50cmllc1RvU2VhcmNoLmNvbmNhdChjdXJyZW50RW50cnkpO1xuICAgIH0gZWxzZSBpZiAoKGN1cnJlbnRFbnRyeS5fbmFtZSAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbnRyeS5fbmFtZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdpUGFkJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50RW50cnkuX25hbWUuc3Vic3RyaW5nKDAsIDYpID09PSAnaVBob25lJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiYgXy5pbmNsdWRlcyhjdXJyZW50RW50cnkuX25hbWUsICdBcHBsZSBUVicpKSkge1xuICAgICAgbGV0IGRldmljZUluZm8gPSB7XG4gICAgICAgIG5hbWU6IGN1cnJlbnRFbnRyeS5fbmFtZSxcbiAgICAgICAgdWRpZDogY3VycmVudEVudHJ5LnNlcmlhbF9udW0sXG4gICAgICAgIHByb2R1Y3RJZDogY3VycmVudEVudHJ5LnByb2R1Y3RfaWQsXG4gICAgICAgIGRldmljZVZlcnNpb246IGN1cnJlbnRFbnRyeS5iY2RfZGV2aWNlXG4gICAgICB9O1xuICAgICAgZGV2aWNlc0ZvdW5kLnB1c2goZGV2aWNlSW5mbyk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50RW50cnkuX2l0ZW1zKSB7XG4gICAgICBlbnRyaWVzVG9TZWFyY2ggPSBlbnRyaWVzVG9TZWFyY2guY29uY2F0KGN1cnJlbnRFbnRyeS5faXRlbXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGV2aWNlc0ZvdW5kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGNvbnN0IGFyZ3MgPSBbJy1maW5kJywgJ2luc3RydW1lbnRzJ107XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBpZiAoIXN0ZG91dCkge1xuICAgIHN0ZG91dCA9ICcnO1xuICB9XG5cbiAgbGV0IGluc3RydW1lbnRzUGF0aCA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKCFpbnN0cnVtZW50c1BhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gaW5zdHJ1bWVudHMgYmluYXJ5IHVzaW5nICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgfVxuXG4gIHJldHVybiBpbnN0cnVtZW50c1BhdGg7XG59XG5cbmNvbnN0IGdldEluc3RydW1lbnRzUGF0aCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0SW5zdHJ1bWVudHNQYXRoIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0SW5zdHJ1bWVudHNQYXRoV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuZnVuY3Rpb24gY2xlYXJJbnRlcm5hbENhY2hlICgpIHtcblxuICAvLyBtZW1vaXplZCBmdW5jdGlvbnNcbiAgY29uc3QgbWVtb2l6ZWQgPSBbXG4gICAgZ2V0UGF0aCwgZ2V0VmVyc2lvbk1lbW9pemVkLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgICBnZXRNYXhUVk9TU0RLLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIF07XG5cbiAgbWVtb2l6ZWQuZm9yRWFjaCgoZikgPT4ge1xuICAgIGlmIChmLmNhY2hlKSB7XG4gICAgICBmLmNhY2hlID0gbmV3IF8ubWVtb2l6ZS5DYWNoZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59O1xuIl0sImZpbGUiOiJsaWIveGNvZGUuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
362
+ }
363
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnYiLCJwcm9jZXNzIiwiWENSVU5fVElNRU9VVCIsIlhDT0RFX1NVQkRJUiIsIkRFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMiLCJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJoYXNFeHBlY3RlZFN1YkRpciIsInBhdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJydW5YY3J1bkNvbW1hbmQiLCJhcmdzIiwidGltZW91dCIsInJlcyIsImV4ZWMiLCJfIiwiaXNVbmRlZmluZWQiLCJFcnJvciIsImpvaW4iLCJlcnIiLCJzdGRlcnIiLCJtZXNzYWdlIiwiZ2V0UGF0aEZyb21TeW1saW5rIiwiZmFpbE1lc3NhZ2UiLCJ3YXJuIiwic3ltbGlua1BhdGgiLCJsZWdhY3lTeW1saW5rUGF0aCIsInhjb2RlUGF0aCIsInV0aWwiLCJoYXNDb250ZW50IiwiREVWRUxPUEVSX0RJUiIsImN1c3RvbVBhdGgiLCJmcyIsImV4aXN0cyIsIm1lc2ciLCJyZWFkbGluayIsInJlcGxhY2UiLCJSZWdFeHAiLCJ0cmltIiwibXNnIiwiZ2V0UGF0aEZyb21YY29kZVNlbGVjdCIsInN0ZG91dCIsInhjb2RlRm9sZGVyUGF0aCIsImVycm9yQW5kVGhyb3ciLCJnZXRQYXRoIiwibWVtb2l6ZSIsImUiLCJnZXRWZXJzaW9uV2l0aG91dFJldHJ5IiwicGxpc3RQYXRoIiwicmVzb2x2ZSIsInZlcnNpb24iLCJwbGlzdCIsInBhcnNlUGxpc3RGaWxlIiwic2VtdmVyIiwiY29lcmNlIiwiQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmciLCJnZXRWZXJzaW9uTWVtb2l6ZWQiLCJyZXRyaWVzIiwicmV0cnkiLCJnZXRWZXJzaW9uIiwicGFyc2UiLCJ2ZXJzaW9uU3RyaW5nIiwicGF0Y2giLCJtYWpvciIsIm1pbm9yIiwidmVyc2lvbkZsb2F0IiwicGFyc2VGbG9hdCIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwiZ2V0Q29tbWFuZExpbmVUb29sc1ZlcnNpb24iLCJnZXRWZXJzaW9uRnVuY3Rpb25zIiwicGtnIiwiaWduIiwibWF0Y2giLCJnZXRDbGFuZ1ZlcnNpb24iLCJ3aGljaCIsImluZm8iLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnkiLCJleHRlbnNpb25zIiwicGF0aFByZWZpeCIsInBhdGhTdWZmaXgiLCJhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzIiwiZXJyb3IiLCJnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgiLCJnZXRNYXhJT1NTREtXaXRob3V0UmV0cnkiLCJzZGtWZXJzaW9uIiwiZ2V0TWF4SU9TU0RLRnJvbVhjb2RlVmVyc2lvbiIsImdldE1heElPU1NESyIsImdldE1heFRWT1NTREtXaXRob3V0UmV0cnkiLCJpc05hTiIsImdldE1heFRWT1NTREsiLCJnZXRDb25uZWN0ZWREZXZpY2VzIiwiY21kIiwicGxpc3RDb250ZW50IiwicGFyc2VQbGlzdERhdGEiLCJkZXZpY2VzRm91bmQiLCJlbnRyaWVzVG9TZWFyY2giLCJjdXJyZW50RW50cnkiLCJwb3AiLCJBcnJheSIsImNvbmNhdCIsIl9uYW1lIiwiaW5jbHVkZXMiLCJkZXZpY2VJbmZvIiwibmFtZSIsInVkaWQiLCJzZXJpYWxfbnVtIiwicHJvZHVjdElkIiwicHJvZHVjdF9pZCIsImRldmljZVZlcnNpb24iLCJiY2RfZGV2aWNlIiwicHVzaCIsIl9pdGVtcyIsImdldEluc3RydW1lbnRzUGF0aFdpdGhvdXRSZXRyeSIsImluc3RydW1lbnRzUGF0aCIsImdldEluc3RydW1lbnRzUGF0aCIsImNsZWFySW50ZXJuYWxDYWNoZSIsIm1lbW9pemVkIiwiZm9yRWFjaCIsImYiLCJjYWNoZSIsIkNhY2hlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3hjb2RlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHV0aWwsIGZzLCBwbGlzdCwgbG9nZ2VyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmV0cnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VQbGlzdERhdGEgfSBmcm9tICdwbGlzdCc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuXG5jb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcblxuY29uc3QgWENSVU5fVElNRU9VVCA9IDE1MDAwO1xuY29uc3QgWENPREVfU1VCRElSID0gJy9Db250ZW50cy9EZXZlbG9wZXInO1xuY29uc3QgREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUyA9IDM7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ1hjb2RlJyk7XG5cblxuZnVuY3Rpb24gaGFzRXhwZWN0ZWRTdWJEaXIgKHBhdGgpIHtcbiAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKHBhdGgubGVuZ3RoIC0gWENPREVfU1VCRElSLmxlbmd0aCkgPT09IFhDT0RFX1NVQkRJUjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuWGNydW5Db21tYW5kIChhcmdzLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICB0cnkge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGV4ZWMoJ3hjcnVuJywgYXJncywge3RpbWVvdXR9KTtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChyZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdGhpbmcgcmV0dXJuZWQgZnJvbSB0cnlpbmcgdG8gcnVuICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gdGhlIHRydWUgZXJyb3IgY2FuIGJlIGhpZGRlbiB3aXRoaW4gdGhlIHN0ZGVyclxuICAgIGlmIChlcnIuc3RkZXJyKSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2Vyci5tZXNzYWdlfTogJHtlcnIuc3RkZXJyfWA7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFBhdGhGcm9tU3ltbGluayAoZmFpbE1lc3NhZ2UpIHtcbiAgLy8gTm9kZSdzIGludm9jYXRpb24gb2YgeGNvZGUtc2VsZWN0IHNvbWV0aW1lcyBmbGFrZXMgYW5kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLlxuICAvLyBOb3QgY2xlYXIgd2h5LiBBcyBhIHdvcmthcm91bmQsIEFwcGl1bSBjYW4gcmVsaWFibHkgZGVkdWNlIHRoZSB2ZXJzaW9uIGluIHVzZSBieSBjaGVja2luZ1xuICAvLyB0aGUgbG9jYXRpb25zIHhjb2RlLXNlbGVjdCB1c2VzIHRvIHN0b3JlIHRoZSBzZWxlY3RlZCB2ZXJzaW9uJ3MgcGF0aC4gVGhpcyBzaG91bGQgYmUgMTAwJVxuICAvLyByZWxpYWJsZSBzbyBsb25nIGFzIHRoZSBsaW5rIGxvY2F0aW9ucyByZW1haW4gdGhlIHNhbWUuIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIHJlbHlpbmcgb25cbiAgLy8gaGFyZGNvZGVkIHBhdGhzLCB0aGlzIGFwcHJvYWNoIHdpbGwgYnJlYWsgdGhlIG5leHQgdGltZSBBcHBsZSBjaGFuZ2VzIHRoZSBzeW1saW5rIGxvY2F0aW9uLlxuICBsb2cud2FybihgRmluZGluZyBYY29kZVBhdGggYnkgc3ltbGluayBiZWNhdXNlICR7ZmFpbE1lc3NhZ2V9YCk7XG5cbiAgY29uc3Qgc3ltbGlua1BhdGggPSAnL3Zhci9kYi94Y29kZV9zZWxlY3RfbGluayc7XG4gIGNvbnN0IGxlZ2FjeVN5bWxpbmtQYXRoID0gJy91c3Ivc2hhcmUveGNvZGUtc2VsZWN0L3hjb2RlX2Rpcl9saW5rJzsgLy8gIFhjb2RlIDwgNS54XG4gIGxldCB4Y29kZVBhdGggPSBudWxsO1xuXG4gIC8vIHhjb2RlLXNlbGVjdCBhbGxvd3MgdXNlcnMgdG8gb3ZlcnJpZGUgaXRzIHNldHRpbmdzIHdpdGggdGhlIERFVkVMT1BFUl9ESVIgZW52IHZhcixcbiAgLy8gc28gY2hlY2sgdGhhdCBmaXJzdFxuICBpZiAodXRpbC5oYXNDb250ZW50KGVudi5ERVZFTE9QRVJfRElSKSkge1xuICAgIGNvbnN0IGN1c3RvbVBhdGggPSBoYXNFeHBlY3RlZFN1YkRpcihlbnYuREVWRUxPUEVSX0RJUilcbiAgICAgID8gZW52LkRFVkVMT1BFUl9ESVJcbiAgICAgIDogZW52LkRFVkVMT1BFUl9ESVIgKyBYQ09ERV9TVUJESVI7XG5cbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGN1c3RvbVBhdGgpKSB7XG4gICAgICB4Y29kZVBhdGggPSBjdXN0b21QYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWVzZyA9IGBDb3VsZCBub3QgZmluZCBwYXRoIHRvIFhjb2RlLCBlbnZpcm9ubWVudCB2YXJpYWJsZSBgICtcbiAgICAgICAgICAgICAgICAgYERFVkVMT1BFUl9ESVIgc2V0IHRvOiAke2Vudi5ERVZFTE9QRVJfRElSfSBgICtcbiAgICAgICAgICAgICAgICAgYGJ1dCBubyBYY29kZSBmb3VuZGA7XG4gICAgICBsb2cud2FybihtZXNnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXdhaXQgZnMuZXhpc3RzKHN5bWxpbmtQYXRoKSkge1xuICAgIHhjb2RlUGF0aCA9IGF3YWl0IGZzLnJlYWRsaW5rKHN5bWxpbmtQYXRoKTtcbiAgfSBlbHNlIGlmIChhd2FpdCBmcy5leGlzdHMobGVnYWN5U3ltbGlua1BhdGgpKSB7XG4gICAgeGNvZGVQYXRoID0gYXdhaXQgZnMucmVhZGxpbmsobGVnYWN5U3ltbGlua1BhdGgpO1xuICB9XG5cbiAgaWYgKHhjb2RlUGF0aCkge1xuICAgIHJldHVybiB4Y29kZVBhdGgucmVwbGFjZShuZXcgUmVnRXhwKCcvJCcpLCAnJykudHJpbSgpO1xuICB9XG5cbiAgLy8gV2Ugc2hvdWxkIG9ubHkgZ2V0IGhlcmUgaXMgd2UgZmFpbGVkIHRvIGNhcHR1cmUgeGNvZGUtc2VsZWN0J3Mgc3Rkb3V0IGFuZCBvdXJcbiAgLy8gb3RoZXIgY2hlY2tzIGZhaWxlZC4gRWl0aGVyIEFwcGxlIGhhcyBtb3ZlZCB0aGUgc3ltbGluayB0byBhIG5ldyBsb2NhdGlvbiBvciB0aGUgdXNlclxuICAvLyBpcyBub3QgdXNpbmcgdGhlIGRlZmF1bHQgaW5zdGFsbC4gOTkuOTk5JSBjaGFuY2UgaXQncyB0aGUgbGF0dGVyLCBzbyBpc3N1ZSBhIHdhcm5pbmdcbiAgLy8gc2hvdWxkIHdlIGV2ZXIgaGl0IHRoZSBlZGdlIGNhc2UuXG4gIGxldCBtc2cgPSBgQ291bGQgbm90IGZpbmQgcGF0aCB0byBYY29kZSBieSBzeW1saW5rcyBsb2NhdGVkIGluICR7c3ltbGlua1BhdGh9LCBvciAke2xlZ2FjeVN5bWxpbmtQYXRofWA7XG4gIGxvZy53YXJuKG1zZyk7XG4gIHRocm93IG5ldyBFcnJvcihtc2cpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQYXRoRnJvbVhjb2RlU2VsZWN0ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBsZXQge3N0ZG91dH0gPSBhd2FpdCBleGVjKCd4Y29kZS1zZWxlY3QnLCBbJy0tcHJpbnQtcGF0aCddLCB7dGltZW91dH0pO1xuXG4gIC8vIHRyaW0gYW5kIHJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICBjb25zdCB4Y29kZUZvbGRlclBhdGggPSBzdGRvdXQucmVwbGFjZSgvXFwvJC8sICcnKS50cmltKCk7XG5cbiAgaWYgKCF1dGlsLmhhc0NvbnRlbnQoeGNvZGVGb2xkZXJQYXRoKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCd4Y29kZS1zZWxlY3QgcmV0dXJuZWQgYW4gZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAoYXdhaXQgZnMuZXhpc3RzKHhjb2RlRm9sZGVyUGF0aCkpIHtcbiAgICByZXR1cm4geGNvZGVGb2xkZXJQYXRoO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1zZyA9IGB4Y29kZS1zZWxlY3QgY291bGQgbm90IGZpbmQgeGNvZGUuIFBhdGggJyR7eGNvZGVGb2xkZXJQYXRofScgZG9lcyBub3QgZXhpc3QuYDtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhtc2cpO1xuICB9XG59XG5cbmNvbnN0IGdldFBhdGggPSBfLm1lbW9pemUoZnVuY3Rpb24gZ2V0UGF0aCAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgLy8gZmlyc3Qgd2UgdHJ5IHVzaW5nIHhjb2RlLXNlbGVjdCB0byBmaW5kIHRoZSBwYXRoXG4gIC8vIHRoZW4gd2UgdHJ5IHVzaW5nIHRoZSBzeW1saW5rcyB0aGF0IEFwcGxlIGhhcyBieSBkZWZhdWx0XG4gIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0UGF0aEZyb21YY29kZVNlbGVjdCh0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0UGF0aEZyb21TeW1saW5rKGUubWVzc2FnZSk7XG4gICAgfVxuICB9KSgpO1xufSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgeGNvZGVQYXRoID0gYXdhaXQgZ2V0UGF0aCh0aW1lb3V0KTtcblxuICAvLyB3ZSB3YW50IHRvIHJlYWQgdGhlIENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nIGZyb20gWGNvZGUncyBwbGlzdC5cbiAgLy8gSXQgc2hvdWxkIGJlIGluIC9bcm9vdF0vWENvZGUuYXBwL0NvbnRlbnRzL1xuICBjb25zdCBwbGlzdFBhdGggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4nLCAnSW5mby5wbGlzdCcpO1xuXG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKHBsaXN0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBnZXQgWGNvZGUgdmVyc2lvbi4gJHtwbGlzdFBhdGh9IGRvZXMgbm90IGV4aXN0IG9uIGRpc2suYCk7XG4gIH1cblxuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgcGxpc3QucGFyc2VQbGlzdEZpbGUocGxpc3RQYXRoKTtcbiAgcmV0dXJuIHNlbXZlci5jb2VyY2UodmVyc2lvbi5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyk7XG59XG5cbmNvbnN0IGdldFZlcnNpb25NZW1vaXplZCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0VmVyc2lvbk1lbW9pemVkIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0VmVyc2lvbldpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFZlcnNpb24gKHBhcnNlID0gZmFsc2UsIHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbk1lbW9pemVkKHJldHJpZXMsIHRpbWVvdXQpO1xuICAvLyB4Y29kZSB2ZXJzaW9uIHN0cmluZ3MgYXJlIG5vdCBleGFjdGx5IHNlbXZlciBzdHJpbmc6IHBhdGNoIHZlcnNpb25zIG9mIDBcbiAgLy8gYXJlIHJlbW92ZWQgKGUuZy4sICcxMC4wLjAnID0+ICcxMC4wJylcbiAgY29uc3QgdmVyc2lvblN0cmluZyA9IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi52ZXJzaW9uIDogYCR7dmVyc2lvbi5tYWpvcn0uJHt2ZXJzaW9uLm1pbm9yfWA7XG4gIGlmICghcGFyc2UpIHtcbiAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvblN0cmluZyxcbiAgICB2ZXJzaW9uRmxvYXQ6IHBhcnNlRmxvYXQodmVyc2lvblN0cmluZyksXG4gICAgbWFqb3I6IHZlcnNpb24ubWFqb3IsXG4gICAgbWlub3I6IHZlcnNpb24ubWlub3IsXG4gICAgcGF0Y2g6IHZlcnNpb24ucGF0Y2ggPiAwID8gdmVyc2lvbi5wYXRjaCA6IHVuZGVmaW5lZCxcbiAgICB0b1N0cmluZyAoKSB7XG4gICAgICByZXR1cm4gdmVyc2lvblN0cmluZztcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDb21tYW5kTGluZVRvb2xzVmVyc2lvbiAoKSB7XG4gIC8vIHRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgd2F5cyB0aGF0IHRoZSBDTEkgdG9vbHMgdmVyc2lvbiBoYXMgYmVlblxuICAvLyByZXByZXNlbnRlZC4gVHJ5IHRoZW0gZnJvbSBtb3N0IHJlbGlhYmxlIHRvIGxlYXN0LCBmYWxsaW5nIGRvd24gdGhlIGNoYWluXG4gIGNvbnN0IGdldFZlcnNpb25GdW5jdGlvbnMgPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHBrZyA9IChhd2FpdCBleGVjKCdwa2d1dGlsJywgWyctLXBrZ3M9Y29tLmFwcGxlLnBrZy5EZXZTREtfLionXSkpLnN0ZG91dDtcbiAgICAgIHJldHVybiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz0ke3BrZy50cmltKCl9YF0pKS5zdGRvdXQ7XG4gICAgfSxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkNMVG9vbHNfRXhlY3V0YWJsZXNgXSkpLnN0ZG91dCxcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgZXhlYygncGtndXRpbCcsIFtgLS1wa2ctaW5mbz1jb20uYXBwbGUucGtnLkRldmVsb3BlclRvb2xzQ0xJYF0pKS5zdGRvdXQsXG4gIF07XG4gIGxldCBzdGRvdXQ7XG4gIGZvciAobGV0IGdldFZlcnNpb24gb2YgZ2V0VmVyc2lvbkZ1bmN0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICBzdGRvdXQgPSBhd2FpdCBnZXRWZXJzaW9uKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoIChpZ24pIHtcbiAgICAgIHN0ZG91dCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8vIHN0ZG91dCBzaG91bGQgaGF2ZSBhIGxpbmUgbGlrZSBgdmVyc2lvbjogOC4wLjAuMC4xLjE0NzI0MzU4ODFgXG4gIGxldCBtYXRjaCA9IC9edmVyc2lvbjogKC4rKSQvbS5leGVjKHN0ZG91dCk7IC8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvSFYzeDRkLzFcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy93aWtpL1hjb2RlVmVyc2lvbkluZm9cbiAqIHRvIHNlZSB0aGUgYWN0dWFsIG1hcHBpbmcgYmV0d2VlbiBjbGFuZyBhbmQgb3RoZXIgY29tcG9uZW50cy5cbiAqXG4gKiBAcmV0dXJucyB7P3N0cmluZ30gVGhlIGFjdHVhbCBDbGFuZyB2ZXJzaW9uIGluIHgueC54Lnggb3IgeC54LnggZm9ybWF0LFxuICogd2hpY2ggaXMgc3VwcGxpZWQgd2l0aCBDb21tYW5kIExpbmUgVG9vbHMuIGBudWxsYCBpcyByZXR1cm5lZFxuICogaWYgQ0xUIGFyZSBub3QgaW5zdGFsbGVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRDbGFuZ1ZlcnNpb24gKCkge1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndoaWNoKCdjbGFuZycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmluZm8oJ0Nhbm5vdCBmaW5kIGNsYW5nIGV4ZWN1dGFibGUgb24gdGhlIGxvY2FsIHN5c3RlbS4gJyArXG4gICAgICAnQXJlIFhjb2RlIENvbW1hbmQgTGluZSBUb29scyBpbnN0YWxsZWQ/Jyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKCdjbGFuZycsIFsnLS12ZXJzaW9uJ10pO1xuICBjb25zdCBtYXRjaCA9IC9jbGFuZy0oWzAtOS5dKykvLmV4ZWMoc3Rkb3V0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIGxvZy5pbmZvKGBDYW5ub3QgcGFyc2UgY2xhbmcgdmVyc2lvbiBmcm9tICR7c3Rkb3V0fWApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBtYXRjaFsxXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRoV2l0aG91dFJldHJ5ICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB4Y29kZVBhdGggPSBhd2FpdCBnZXRQYXRoKHRpbWVvdXQpO1xuXG4gIC8vIGZvciBpb3MgOCBhbmQgdXAsIHRoZSBmaWxlIGV4dGVuc2lvbiBmb3IgQXV0aW9tYXRpb25JbnN0cnVtZW50IGNoYW5nZWQuXG4gIC8vIHJhdGhlciB0aGFuIHdhc3RlIHRpbWUgZ2V0dGluZyB0aGUgaU9TU0RLVmVyc2lvbiwganVzdCBnZXQgYm90aCBwYXRocyBhbmQgc2VlIHdoaWNoIG9uZSBleGlzdHNcbiAgY29uc3QgZXh0ZW5zaW9ucyA9IFsneHJwbHVnaW4nLCAnYnVuZGxlJ107XG4gIGNvbnN0IHBhdGhQcmVmaXggPSBwYXRoLnJlc29sdmUoeGNvZGVQYXRoLCAnLi4vQXBwbGljYXRpb25zL0luc3RydW1lbnRzLmFwcC9Db250ZW50cy9QbHVnSW5zJyk7XG4gIGNvbnN0IHBhdGhTdWZmaXggPSAnQ29udGVudHMvUmVzb3VyY2VzL0F1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSc7XG4gIGxldCBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzID0gW1xuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzBdfWAsIHBhdGhTdWZmaXgpLFxuICAgIHBhdGgucmVzb2x2ZShwYXRoUHJlZml4LCBgQXV0b21hdGlvbkluc3RydW1lbnQuJHtleHRlbnNpb25zWzFdfWAsIHBhdGhTdWZmaXgpXG4gIF07XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzBdO1xuICB9XG5cbiAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdKSkge1xuICAgIHJldHVybiBhdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhzWzFdO1xuICB9XG5cbiAgY29uc3QgbXNnID0gJ0NvdWxkIG5vdCBmaW5kIEF1dG9tYXRpb24udHJhY2V0ZW1wbGF0ZSBpbiBhbnkgb2YgdGhlIGZvbGxvd2luZycgK1xuICAgICAgICAgICAgICBgbG9jYXRpb25zICR7YXV0b21hdGlvblRyYWNlVGVtcGxhdGVQYXRocy50b1N0cmluZygpfWA7XG4gIGxvZy5lcnJvcihtc2cpO1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcblxufVxuXG5jb25zdCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGggPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCAocmV0cmllcyA9IERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gICAgcmV0dXJuIHJldHJ5KHJldHJpZXMsIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aFdpdGhvdXRSZXRyeSwgdGltZW91dCk7XG4gIH1cbik7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGdldFZlcnNpb24oZmFsc2UsIERFRkFVTFRfTlVNQkVSX09GX1JFVFJJRVMsIHRpbWVvdXQpO1xuICBpZiAodmVyc2lvblswXSA9PT0gJzQnKSB7XG4gICAgcmV0dXJuICc2LjEnO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnaXBob25lc2ltdWxhdG9yJywgJy0tc2hvdy1zZGstdmVyc2lvbiddO1xuICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBjb25zdCBzZGtWZXJzaW9uID0gc3Rkb3V0LnRyaW0oKTtcbiAgY29uc3QgbWF0Y2ggPSAvXFxkLlxcZC8uZXhlYyhzdGRvdXQpO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHhjcnVuIHJldHVybmVkIGEgbm9uLW51bWVyaWMgaU9TIFNESyB2ZXJzaW9uOiAnJHtzZGtWZXJzaW9ufSdgKTtcbiAgfVxuXG4gIHJldHVybiBzZGtWZXJzaW9uO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uICh0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgZ2V0VmVyc2lvbih0cnVlLCBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0KTtcbiAgLy8gYXMgb2Ygbm93LCB0aGUgaU9TIHZlcnNpb24gYXNzb2NpYXRlZCB3aXRoIGFuIFhjb2RlIHZlcnNpb24gaXNcbiAgLy8ganVzdCB0aGUgWGNvZGUgdmVyc2lvbiArIDJcbiAgcmV0dXJuIGAke3ZlcnNpb24ubWFqb3IgKyAyfS4ke3ZlcnNpb24ubWlub3J9YDtcbn1cblxuY29uc3QgZ2V0TWF4SU9TU0RLID0gXy5tZW1vaXplKFxuICBmdW5jdGlvbiBnZXRNYXhJT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0TWF4SU9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZy53YXJuKGBVbmFibGUgdG8gcmV0cmlldmUgbWF4aW11bSBpT1MgdmVyc2lvbjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgIGxvZy53YXJuKCdHdWVzc2luZyBmcm9tIFhjb2RlIHZlcnNpb24nKTtcbiAgICAgIHJldHVybiBnZXRNYXhJT1NTREtGcm9tWGNvZGVWZXJzaW9uKHRpbWVvdXQpO1xuICAgIH1cbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TWF4VFZPU1NES1dpdGhvdXRSZXRyeSAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgYXJncyA9IFsnLS1zZGsnLCAnYXBwbGV0dnNpbXVsYXRvcicsICctLXNob3ctc2RrLXZlcnNpb24nXTtcbiAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBydW5YY3J1bkNvbW1hbmQoYXJncywgdGltZW91dCk7XG5cbiAgY29uc3Qgc2RrVmVyc2lvbiA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoc2RrVmVyc2lvbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB4Y3J1biByZXR1cm5lZCBhIG5vbi1udW1lcmljIHR2T1MgU0RLIHZlcnNpb246ICcke3Nka1ZlcnNpb259J2ApO1xuICB9XG5cbiAgcmV0dXJuIHNka1ZlcnNpb247XG59XG5cbmNvbnN0IGdldE1heFRWT1NTREsgPSBfLm1lbW9pemUoXG4gIGZ1bmN0aW9uIGdldE1heFRWT1NTREsgKHJldHJpZXMgPSBERUZBVUxUX05VTUJFUl9PRl9SRVRSSUVTLCB0aW1lb3V0ID0gWENSVU5fVElNRU9VVCkge1xuICAgIHJldHVybiByZXRyeShyZXRyaWVzLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q29ubmVjdGVkRGV2aWNlcyAodGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgY29uc3QgY21kID0gJy91c3Ivc2Jpbi9zeXN0ZW1fcHJvZmlsZXInO1xuICBjb25zdCBhcmdzID0gWycteG1sJywgJ1NQVVNCRGF0YVR5cGUnXTtcbiAgbGV0IHtzdGRvdXR9ID0gYXdhaXQgZXhlYyhjbWQsIGFyZ3MsIHt0aW1lb3V0fSk7XG4gIGxldCBwbGlzdENvbnRlbnQgPSBwYXJzZVBsaXN0RGF0YShzdGRvdXQpO1xuXG4gIGxldCBkZXZpY2VzRm91bmQgPSBbXTtcbiAgbGV0IGVudHJpZXNUb1NlYXJjaCA9IFtwbGlzdENvbnRlbnRbMF1dO1xuICB3aGlsZSAoZW50cmllc1RvU2VhcmNoLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgY3VycmVudEVudHJ5ID0gZW50cmllc1RvU2VhcmNoLnBvcCgpO1xuICAgIGlmIChjdXJyZW50RW50cnkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgZW50cmllc1RvU2VhcmNoID0gZW50cmllc1RvU2VhcmNoLmNvbmNhdChjdXJyZW50RW50cnkpO1xuICAgIH0gZWxzZSBpZiAoKGN1cnJlbnRFbnRyeS5fbmFtZSAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRFbnRyeS5fbmFtZS5zdWJzdHJpbmcoMCwgNCkgPT09ICdpUGFkJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50RW50cnkuX25hbWUuc3Vic3RyaW5nKDAsIDYpID09PSAnaVBob25lJykgfHxcbiAgICAgICAgICAgICAgIChjdXJyZW50RW50cnkuX25hbWUgJiYgXy5pbmNsdWRlcyhjdXJyZW50RW50cnkuX25hbWUsICdBcHBsZSBUVicpKSkge1xuICAgICAgbGV0IGRldmljZUluZm8gPSB7XG4gICAgICAgIG5hbWU6IGN1cnJlbnRFbnRyeS5fbmFtZSxcbiAgICAgICAgdWRpZDogY3VycmVudEVudHJ5LnNlcmlhbF9udW0sXG4gICAgICAgIHByb2R1Y3RJZDogY3VycmVudEVudHJ5LnByb2R1Y3RfaWQsXG4gICAgICAgIGRldmljZVZlcnNpb246IGN1cnJlbnRFbnRyeS5iY2RfZGV2aWNlXG4gICAgICB9O1xuICAgICAgZGV2aWNlc0ZvdW5kLnB1c2goZGV2aWNlSW5mbyk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50RW50cnkuX2l0ZW1zKSB7XG4gICAgICBlbnRyaWVzVG9TZWFyY2ggPSBlbnRyaWVzVG9TZWFyY2guY29uY2F0KGN1cnJlbnRFbnRyeS5faXRlbXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGV2aWNlc0ZvdW5kO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJbnN0cnVtZW50c1BhdGhXaXRob3V0UmV0cnkgKHRpbWVvdXQgPSBYQ1JVTl9USU1FT1VUKSB7XG4gIGNvbnN0IGFyZ3MgPSBbJy1maW5kJywgJ2luc3RydW1lbnRzJ107XG4gIGxldCB7c3Rkb3V0fSA9IGF3YWl0IHJ1blhjcnVuQ29tbWFuZChhcmdzLCB0aW1lb3V0KTtcblxuICBpZiAoIXN0ZG91dCkge1xuICAgIHN0ZG91dCA9ICcnO1xuICB9XG5cbiAgbGV0IGluc3RydW1lbnRzUGF0aCA9IHN0ZG91dC50cmltKCk7XG5cbiAgaWYgKCFpbnN0cnVtZW50c1BhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHBhdGggdG8gaW5zdHJ1bWVudHMgYmluYXJ5IHVzaW5nICd4Y3J1biAke2FyZ3Muam9pbignICcpfSdgKTtcbiAgfVxuXG4gIHJldHVybiBpbnN0cnVtZW50c1BhdGg7XG59XG5cbmNvbnN0IGdldEluc3RydW1lbnRzUGF0aCA9IF8ubWVtb2l6ZShcbiAgZnVuY3Rpb24gZ2V0SW5zdHJ1bWVudHNQYXRoIChyZXRyaWVzID0gREVGQVVMVF9OVU1CRVJfT0ZfUkVUUklFUywgdGltZW91dCA9IFhDUlVOX1RJTUVPVVQpIHtcbiAgICByZXR1cm4gcmV0cnkocmV0cmllcywgZ2V0SW5zdHJ1bWVudHNQYXRoV2l0aG91dFJldHJ5LCB0aW1lb3V0KTtcbiAgfVxuKTtcblxuZnVuY3Rpb24gY2xlYXJJbnRlcm5hbENhY2hlICgpIHtcblxuICAvLyBtZW1vaXplZCBmdW5jdGlvbnNcbiAgY29uc3QgbWVtb2l6ZWQgPSBbXG4gICAgZ2V0UGF0aCwgZ2V0VmVyc2lvbk1lbW9pemVkLCBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGgsIGdldE1heElPU1NESyxcbiAgICBnZXRNYXhUVk9TU0RLLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIF07XG5cbiAgbWVtb2l6ZWQuZm9yRWFjaCgoZikgPT4ge1xuICAgIGlmIChmLmNhY2hlKSB7XG4gICAgICBmLmNhY2hlID0gbmV3IF8ubWVtb2l6ZS5DYWNoZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7XG4gIGdldFBhdGgsIGdldFZlcnNpb24sIGdldEF1dG9tYXRpb25UcmFjZVRlbXBsYXRlUGF0aCwgZ2V0TWF4SU9TU0RLLFxuICBnZXRBdXRvbWF0aW9uVHJhY2VUZW1wbGF0ZVBhdGhXaXRob3V0UmV0cnksIGdldE1heElPU1NES1dpdGhvdXRSZXRyeSxcbiAgZ2V0Q29ubmVjdGVkRGV2aWNlcywgY2xlYXJJbnRlcm5hbENhY2hlLCBnZXRJbnN0cnVtZW50c1BhdGgsXG4gIGdldENvbW1hbmRMaW5lVG9vbHNWZXJzaW9uLCBnZXRNYXhUVk9TU0RLLCBnZXRNYXhUVk9TU0RLV2l0aG91dFJldHJ5LFxuICBnZXRDbGFuZ1ZlcnNpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxPQUFPLENBQUNELEdBQXBCO0FBRUEsTUFBTUUsYUFBYSxHQUFHLEtBQXRCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLHFCQUFyQjtBQUNBLE1BQU1DLHlCQUF5QixHQUFHLENBQWxDOztBQUVBLE1BQU1DLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLE9BQWpCLENBQVo7O0FBR0EsU0FBU0MsaUJBQVQsQ0FBNEJDLElBQTVCLEVBQWtDO0VBQ2hDLE9BQU9BLElBQUksQ0FBQ0MsU0FBTCxDQUFlRCxJQUFJLENBQUNFLE1BQUwsR0FBY1IsWUFBWSxDQUFDUSxNQUExQyxNQUFzRFIsWUFBN0Q7QUFDRDs7QUFFRCxlQUFlUyxlQUFmLENBQWdDQyxJQUFoQyxFQUFzQ0MsT0FBTyxHQUFHWixhQUFoRCxFQUErRDtFQUM3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
package/lib/xcode.js CHANGED
@@ -105,11 +105,16 @@ async function getPathFromXcodeSelect (timeout = XCRUN_TIMEOUT) {
105
105
  const getPath = _.memoize(function getPath (timeout = XCRUN_TIMEOUT) {
106
106
  // first we try using xcode-select to find the path
107
107
  // then we try using the symlinks that Apple has by default
108
- return getPathFromXcodeSelect(timeout).catch(getPathFromSymlink);
108
+ return (async () => {
109
+ try {
110
+ return await getPathFromXcodeSelect(timeout);
111
+ } catch (e) {
112
+ return await getPathFromSymlink(e.message);
113
+ }
114
+ })();
109
115
  });
110
116
 
111
117
 
112
-
113
118
  async function getVersionWithoutRetry (timeout = XCRUN_TIMEOUT) {
114
119
  const xcodePath = await getPath(timeout);
115
120
 
package/package.json CHANGED
@@ -6,8 +6,8 @@
6
6
  "ios",
7
7
  "xcode"
8
8
  ],
9
- "version": "4.0.0",
10
- "author": "appium",
9
+ "version": "4.0.1",
10
+ "author": "Appium Contributors",
11
11
  "license": "Apache-2.0",
12
12
  "repository": {
13
13
  "type": "git",
@@ -16,9 +16,10 @@
16
16
  "bugs": {
17
17
  "url": "https://github.com/appium/appium-xcode/issues"
18
18
  },
19
- "engines": [
20
- "node"
21
- ],
19
+ "engines": {
20
+ "node": ">=14",
21
+ "npm": ">=8"
22
+ },
22
23
  "main": "./build/index.js",
23
24
  "bin": {},
24
25
  "directories": {
@@ -38,32 +39,54 @@
38
39
  "plist": "^3.0.1",
39
40
  "semver": "^7.0.0",
40
41
  "source-map-support": "^0.x",
41
- "teen_process": "^1.3.0"
42
+ "teen_process": "^2.0.0"
42
43
  },
43
44
  "scripts": {
44
- "clean": "rm -rf node_modules && rm -f package-lock.json && npm install",
45
- "prepare": "gulp prepublish",
46
- "test": "gulp once",
47
- "watch": "gulp watch",
48
- "mocha": "mocha",
49
- "build": "gulp transpile",
50
- "e2e-test": "gulp e2e-test",
51
- "coverage": "gulp coveralls",
45
+ "build": "rm -rf build && babel --out-dir=build/lib lib && babel --out-dir=build index.js",
46
+ "dev": "npm run build -- --watch",
47
+ "lint": "eslint .",
48
+ "lint:fix": "npm run lint -- --fix",
49
+ "precommit-lint": "lint-staged",
52
50
  "precommit-msg": "echo 'Pre-commit checks...' && exit 0",
53
- "lint": "gulp lint",
54
- "lint:fix": "gulp eslint --fix"
51
+ "prepare": "npm run build",
52
+ "test": "mocha --exit --timeout 1m \"./test/unit/**/*-specs.js\"",
53
+ "e2e-test": "mocha --exit --timeout 5m \"./test/e2e/**/*-specs.js\""
55
54
  },
56
55
  "pre-commit": [
57
56
  "precommit-msg",
58
- "test"
57
+ "precommit-lint"
59
58
  ],
59
+ "lint-staged": {
60
+ "*.js": [
61
+ "eslint --fix"
62
+ ]
63
+ },
64
+ "prettier": {
65
+ "bracketSpacing": false,
66
+ "printWidth": 100,
67
+ "singleQuote": true
68
+ },
60
69
  "devDependencies": {
61
- "@appium/gulp-plugins": "^6.0.0",
62
- "@appium/eslint-config-appium": "^5.0.0",
70
+ "@appium/eslint-config-appium": "^6.0.0",
71
+ "@babel/cli": "^7.18.10",
72
+ "@babel/core": "^7.18.10",
73
+ "@babel/eslint-parser": "^7.18.9",
74
+ "@babel/plugin-transform-runtime": "^7.18.10",
75
+ "@babel/preset-env": "^7.18.10",
76
+ "@babel/register": "^7.18.9",
77
+ "@semantic-release/git": "^10.0.1",
78
+ "babel-plugin-source-map-support": "^2.2.0",
63
79
  "chai": "^4.1.2",
64
80
  "chai-as-promised": "^7.1.1",
65
- "gulp": "^4.0.0",
66
- "mocha": "^9.0.0",
67
- "pre-commit": "^1.1.3"
81
+ "eslint": "^7.32.0",
82
+ "eslint-config-prettier": "^8.5.0",
83
+ "eslint-plugin-import": "^2.26.0",
84
+ "eslint-plugin-mocha": "^9.0.0",
85
+ "eslint-plugin-promise": "^6.0.0",
86
+ "lint-staged": "^13.0.3",
87
+ "mocha": "^10.0.0",
88
+ "pre-commit": "^1.1.3",
89
+ "prettier": "^2.7.1",
90
+ "semantic-release": "^19.0.2"
68
91
  }
69
92
  }