appium-android-driver 5.0.15 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/build/index.js +2 -28
  2. package/build/lib/android-helpers.js +2 -2
  3. package/build/lib/bootstrap.js +6 -6
  4. package/build/lib/commands/actions.js +2 -2
  5. package/build/lib/commands/alert.js +6 -6
  6. package/build/lib/commands/app-management.js +4 -4
  7. package/build/lib/commands/context.js +4 -4
  8. package/build/lib/commands/element.js +2 -2
  9. package/build/lib/commands/emu-console.js +3 -3
  10. package/build/lib/commands/execute.js +5 -5
  11. package/build/lib/commands/file-actions.js +7 -7
  12. package/build/lib/commands/find.js +5 -5
  13. package/build/lib/commands/general.js +7 -7
  14. package/build/lib/commands/ime.js +3 -3
  15. package/build/lib/commands/intent.js +7 -7
  16. package/build/lib/commands/log.js +5 -5
  17. package/build/lib/commands/network.js +3 -3
  18. package/build/lib/commands/recordscreen.js +2 -2
  19. package/build/lib/commands/shell.js +4 -4
  20. package/build/lib/commands/streamscreen.js +2 -2
  21. package/build/lib/commands/touch.js +4 -4
  22. package/build/lib/driver.js +5 -5
  23. package/build/lib/logger.js +2 -2
  24. package/build/lib/uiautomator.js +2 -2
  25. package/build/lib/unlock-helpers.js +2 -2
  26. package/build/lib/webview-helpers.js +2 -2
  27. package/index.js +1 -26
  28. package/lib/android-helpers.js +1 -1
  29. package/lib/bootstrap.js +2 -2
  30. package/lib/commands/actions.js +1 -1
  31. package/lib/commands/alert.js +1 -1
  32. package/lib/commands/app-management.js +2 -2
  33. package/lib/commands/context.js +2 -2
  34. package/lib/commands/element.js +1 -1
  35. package/lib/commands/emu-console.js +1 -1
  36. package/lib/commands/execute.js +1 -1
  37. package/lib/commands/file-actions.js +2 -2
  38. package/lib/commands/find.js +2 -2
  39. package/lib/commands/general.js +2 -2
  40. package/lib/commands/ime.js +1 -1
  41. package/lib/commands/intent.js +1 -1
  42. package/lib/commands/log.js +1 -1
  43. package/lib/commands/network.js +1 -1
  44. package/lib/commands/recordscreen.js +1 -1
  45. package/lib/commands/shell.js +2 -2
  46. package/lib/commands/streamscreen.js +1 -1
  47. package/lib/commands/touch.js +2 -2
  48. package/lib/driver.js +2 -2
  49. package/lib/logger.js +1 -1
  50. package/lib/uiautomator.js +1 -1
  51. package/lib/unlock-helpers.js +1 -1
  52. package/lib/webview-helpers.js +1 -1
  53. package/package.json +5 -3
  54. package/build/lib/server.js +0 -34
  55. package/lib/server.js +0 -14
package/build/index.js CHANGED
@@ -4,14 +4,10 @@
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.webviewHelpers = exports.startServer = exports.default = exports.commonCapConstraints = exports.androidHelpers = exports.androidCommands = exports.WEBVIEW_WIN = exports.WEBVIEW_BASE = exports.SETTINGS_HELPER_PKG_ID = exports.NATIVE_WIN = exports.CHROMIUM_WIN = exports.AndroidDriver = void 0;
7
+ exports.webviewHelpers = exports.default = exports.commonCapConstraints = exports.androidHelpers = exports.androidCommands = exports.WEBVIEW_WIN = exports.WEBVIEW_BASE = exports.SETTINGS_HELPER_PKG_ID = exports.NATIVE_WIN = exports.CHROMIUM_WIN = exports.AndroidDriver = void 0;
8
8
 
9
9
  require("source-map-support/register");
10
10
 
11
- var _asyncbox = require("asyncbox");
12
-
13
- var server = _interopRequireWildcard(require("./lib/server"));
14
-
15
11
  var driver = _interopRequireWildcard(require("./lib/driver"));
16
12
 
17
13
  var androidHelperIndex = _interopRequireWildcard(require("./lib/android-helpers"));
@@ -26,28 +22,6 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
26
22
 
27
23
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
24
 
29
- const {
30
- startServer
31
- } = server;
32
- exports.startServer = startServer;
33
- const DEFAULT_HOST = 'localhost';
34
- const DEFAULT_PORT = 4723;
35
-
36
- async function main() {
37
- const getArgValue = argName => {
38
- const argIndex = process.argv.indexOf(argName);
39
- return argIndex > 0 ? process.argv[argIndex + 1] : null;
40
- };
41
-
42
- const port = parseInt(getArgValue('--port'), 10) || DEFAULT_PORT;
43
- const host = getArgValue('--host') || DEFAULT_HOST;
44
- return await startServer(port, host);
45
- }
46
-
47
- if (require.main === module) {
48
- (0, _asyncbox.asyncify)(main);
49
- }
50
-
51
25
  const {
52
26
  AndroidDriver
53
27
  } = driver;
@@ -82,4 +56,4 @@ var _default = AndroidDriver;
82
56
  exports.default = _default;require('source-map-support').install();
83
57
 
84
58
 
85
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJzdGFydFNlcnZlciIsInNlcnZlciIsIkRFRkFVTFRfSE9TVCIsIkRFRkFVTFRfUE9SVCIsIm1haW4iLCJnZXRBcmdWYWx1ZSIsImFyZ05hbWUiLCJhcmdJbmRleCIsInByb2Nlc3MiLCJhcmd2IiwiaW5kZXhPZiIsInBvcnQiLCJwYXJzZUludCIsImhvc3QiLCJyZXF1aXJlIiwibW9kdWxlIiwiYXN5bmNpZnkiLCJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sInNvdXJjZVJvb3QiOiIuLiIsInNvdXJjZXMiOlsiaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLy8gdHJhbnNwaWxlOm1haW5cblxuaW1wb3J0IHsgYXN5bmNpZnkgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSAnLi9saWIvc2VydmVyJztcblxuXG5jb25zdCB7IHN0YXJ0U2VydmVyIH0gPSBzZXJ2ZXI7XG5cbmNvbnN0IERFRkFVTFRfSE9TVCA9ICdsb2NhbGhvc3QnO1xuY29uc3QgREVGQVVMVF9QT1JUID0gNDcyMztcblxuYXN5bmMgZnVuY3Rpb24gbWFpbiAoKSB7XG4gIGNvbnN0IGdldEFyZ1ZhbHVlID0gKGFyZ05hbWUpID0+IHtcbiAgICBjb25zdCBhcmdJbmRleCA9IHByb2Nlc3MuYXJndi5pbmRleE9mKGFyZ05hbWUpO1xuICAgIHJldHVybiBhcmdJbmRleCA+IDAgPyBwcm9jZXNzLmFyZ3ZbYXJnSW5kZXggKyAxXSA6IG51bGw7XG4gIH07XG4gIGNvbnN0IHBvcnQgPSBwYXJzZUludChnZXRBcmdWYWx1ZSgnLS1wb3J0JyksIDEwKSB8fCBERUZBVUxUX1BPUlQ7XG4gIGNvbnN0IGhvc3QgPSBnZXRBcmdWYWx1ZSgnLS1ob3N0JykgfHwgREVGQVVMVF9IT1NUO1xuICByZXR1cm4gYXdhaXQgc3RhcnRTZXJ2ZXIocG9ydCwgaG9zdCk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShtYWluKTtcbn1cblxuXG5pbXBvcnQgKiBhcyBkcml2ZXIgZnJvbSAnLi9saWIvZHJpdmVyJztcbmltcG9ydCAqIGFzIGFuZHJvaWRIZWxwZXJJbmRleCBmcm9tICcuL2xpYi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0ICogYXMgY29tbWFuZEluZGV4IGZyb20gJy4vbGliL2NvbW1hbmRzL2luZGV4JztcbmltcG9ydCAqIGFzIHdlYnZpZXcgZnJvbSAnLi9saWIvd2Vidmlldy1oZWxwZXJzJztcbmltcG9ydCAqIGFzIGNhcHMgZnJvbSAnLi9saWIvZGVzaXJlZC1jYXBzJztcblxuXG5jb25zdCB7IEFuZHJvaWREcml2ZXIgfSA9IGRyaXZlcjtcbmNvbnN0IHsgaGVscGVyczogd2Vidmlld0hlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLCBXRUJWSUVXX0JBU0UsXG4gICAgICAgIENIUk9NSVVNX1dJTiB9ID0gd2VidmlldztcbmNvbnN0IHsgY29tbW9uQ2FwQ29uc3RyYWludHMgfSA9IGNhcHM7XG5jb25zdCB7IGNvbW1hbmRzOiBhbmRyb2lkQ29tbWFuZHMgfSA9IGNvbW1hbmRJbmRleDtcbmNvbnN0IHsgaGVscGVyczogYW5kcm9pZEhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgfSA9IGFuZHJvaWRIZWxwZXJJbmRleDtcblxuXG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkRHJpdmVyO1xuZXhwb3J0IHtcbiAgYW5kcm9pZEhlbHBlcnMsIGFuZHJvaWRDb21tYW5kcywgQW5kcm9pZERyaXZlciwgc3RhcnRTZXJ2ZXIsXG4gIGNvbW1vbkNhcENvbnN0cmFpbnRzLCB3ZWJ2aWV3SGVscGVycywgTkFUSVZFX1dJTiwgV0VCVklFV19XSU4sXG4gIFdFQlZJRVdfQkFTRSwgQ0hST01JVU1fV0lOLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELFxufTtcbiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUF1QkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQXhCQSxNQUFNO0VBQUVBO0FBQUYsSUFBa0JDLE1BQXhCOztBQUVBLE1BQU1DLFlBQVksR0FBRyxXQUFyQjtBQUNBLE1BQU1DLFlBQVksR0FBRyxJQUFyQjs7QUFFQSxlQUFlQyxJQUFmLEdBQXVCO0VBQ3JCLE1BQU1DLFdBQVcsR0FBSUMsT0FBRCxJQUFhO0lBQy9CLE1BQU1DLFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxJQUFSLENBQWFDLE9BQWIsQ0FBcUJKLE9BQXJCLENBQWpCO0lBQ0EsT0FBT0MsUUFBUSxHQUFHLENBQVgsR0FBZUMsT0FBTyxDQUFDQyxJQUFSLENBQWFGLFFBQVEsR0FBRyxDQUF4QixDQUFmLEdBQTRDLElBQW5EO0VBQ0QsQ0FIRDs7RUFJQSxNQUFNSSxJQUFJLEdBQUdDLFFBQVEsQ0FBQ1AsV0FBVyxDQUFDLFFBQUQsQ0FBWixFQUF3QixFQUF4QixDQUFSLElBQXVDRixZQUFwRDtFQUNBLE1BQU1VLElBQUksR0FBR1IsV0FBVyxDQUFDLFFBQUQsQ0FBWCxJQUF5QkgsWUFBdEM7RUFDQSxPQUFPLE1BQU1GLFdBQVcsQ0FBQ1csSUFBRCxFQUFPRSxJQUFQLENBQXhCO0FBQ0Q7O0FBRUQsSUFBSUMsT0FBTyxDQUFDVixJQUFSLEtBQWlCVyxNQUFyQixFQUE2QjtFQUMzQixJQUFBQyxrQkFBQSxFQUFTWixJQUFUO0FBQ0Q7O0FBVUQsTUFBTTtFQUFFYTtBQUFGLElBQW9CQyxNQUExQjs7QUFDQSxNQUFNO0VBQUVDLE9BQU8sRUFBRUMsY0FBWDtFQUEyQkMsVUFBM0I7RUFBdUNDLFdBQXZDO0VBQW9EQyxZQUFwRDtFQUNFQztBQURGLElBQ21CQyxPQUR6Qjs7Ozs7O0FBRUEsTUFBTTtFQUFFQztBQUFGLElBQTJCQyxJQUFqQzs7QUFDQSxNQUFNO0VBQUVDLFFBQVEsRUFBRUM7QUFBWixJQUFnQ0MsWUFBdEM7O0FBQ0EsTUFBTTtFQUFFWCxPQUFPLEVBQUVZLGNBQVg7RUFBMkJDO0FBQTNCLElBQXNEQyxrQkFBNUQ7OztlQUdlaEIsYSJ9
59
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6WyJBbmRyb2lkRHJpdmVyIiwiZHJpdmVyIiwiaGVscGVycyIsIndlYnZpZXdIZWxwZXJzIiwiTkFUSVZFX1dJTiIsIldFQlZJRVdfV0lOIiwiV0VCVklFV19CQVNFIiwiQ0hST01JVU1fV0lOIiwid2VidmlldyIsImNvbW1vbkNhcENvbnN0cmFpbnRzIiwiY2FwcyIsImNvbW1hbmRzIiwiYW5kcm9pZENvbW1hbmRzIiwiY29tbWFuZEluZGV4IiwiYW5kcm9pZEhlbHBlcnMiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiYW5kcm9pZEhlbHBlckluZGV4Il0sInNvdXJjZVJvb3QiOiIuLiIsInNvdXJjZXMiOlsiaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLy8gdHJhbnNwaWxlOm1haW5cbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9kcml2ZXInO1xuaW1wb3J0ICogYXMgYW5kcm9pZEhlbHBlckluZGV4IGZyb20gJy4vbGliL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgKiBhcyBjb21tYW5kSW5kZXggZnJvbSAnLi9saWIvY29tbWFuZHMvaW5kZXgnO1xuaW1wb3J0ICogYXMgd2VidmlldyBmcm9tICcuL2xpYi93ZWJ2aWV3LWhlbHBlcnMnO1xuaW1wb3J0ICogYXMgY2FwcyBmcm9tICcuL2xpYi9kZXNpcmVkLWNhcHMnO1xuXG5cbmNvbnN0IHsgQW5kcm9pZERyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBoZWxwZXJzOiB3ZWJ2aWV3SGVscGVycywgTkFUSVZFX1dJTiwgV0VCVklFV19XSU4sIFdFQlZJRVdfQkFTRSxcbiAgICAgICAgQ0hST01JVU1fV0lOIH0gPSB3ZWJ2aWV3O1xuY29uc3QgeyBjb21tb25DYXBDb25zdHJhaW50cyB9ID0gY2FwcztcbmNvbnN0IHsgY29tbWFuZHM6IGFuZHJvaWRDb21tYW5kcyB9ID0gY29tbWFuZEluZGV4O1xuY29uc3QgeyBoZWxwZXJzOiBhbmRyb2lkSGVscGVycywgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9ID0gYW5kcm9pZEhlbHBlckluZGV4O1xuXG5cbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWREcml2ZXI7XG5leHBvcnQge1xuICBhbmRyb2lkSGVscGVycywgYW5kcm9pZENvbW1hbmRzLCBBbmRyb2lkRHJpdmVyLFxuICBjb21tb25DYXBDb25zdHJhaW50cywgd2Vidmlld0hlbHBlcnMsIE5BVElWRV9XSU4sIFdFQlZJRVdfV0lOLFxuICBXRUJWSUVXX0JBU0UsIENIUk9NSVVNX1dJTiwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCxcbn07XG4iXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUdBLE1BQU07RUFBRUE7QUFBRixJQUFvQkMsTUFBMUI7O0FBQ0EsTUFBTTtFQUFFQyxPQUFPLEVBQUVDLGNBQVg7RUFBMkJDLFVBQTNCO0VBQXVDQyxXQUF2QztFQUFvREMsWUFBcEQ7RUFDRUM7QUFERixJQUNtQkMsT0FEekI7Ozs7OztBQUVBLE1BQU07RUFBRUM7QUFBRixJQUEyQkMsSUFBakM7O0FBQ0EsTUFBTTtFQUFFQyxRQUFRLEVBQUVDO0FBQVosSUFBZ0NDLFlBQXRDOztBQUNBLE1BQU07RUFBRVgsT0FBTyxFQUFFWSxjQUFYO0VBQTJCQztBQUEzQixJQUFzREMsa0JBQTVEOzs7ZUFHZWhCLGEifQ==
@@ -20,7 +20,7 @@ var _asyncbox = require("asyncbox");
20
20
 
21
21
  var _logger = _interopRequireDefault(require("./logger"));
22
22
 
23
- var _support = require("@appium/support");
23
+ var _support = require("appium/support");
24
24
 
25
25
  var _ioAppium = require("io.appium.settings");
26
26
 
@@ -901,4 +901,4 @@ var _default = helpers;
901
901
  exports.default = _default;require('source-map-support').install();
902
902
 
903
903
 
904
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2FuZHJvaWQtaGVscGVycy5qcyIsIm5hbWVzIjpbIlBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUIiwiQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSIsImNocm9tZSIsInBrZyIsImFjdGl2aXR5IiwiY2hyb21pdW0iLCJjaHJvbWViZXRhIiwiYnJvd3NlciIsImRlZmF1bHQiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSIsIkVNVUxBVE9SX1BBVFRFUk4iLCJBUFBfU1RBVEUiLCJPYmplY3QiLCJmcmVlemUiLCJOT1RfSU5TVEFMTEVEIiwiTk9UX1JVTk5JTkciLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJhZGIiLCJuZXR3b3JrU3BlZWQiLCJfIiwidmFsdWVzIiwiTkVUV09SS19TUEVFRCIsImluY2x1ZGVzIiwibG9nZ2VyIiwid2FybiIsIkZVTEwiLCJwcmVwYXJlQXZkQXJncyIsIm9wdHMiLCJpc0hlYWRsZXNzIiwiYXZkQXJncyIsInJlc3VsdCIsImlzQXJyYXkiLCJwdXNoIiwidXRpbCIsInNoZWxsUGFyc2UiLCJ0b0NyZWRlbnRpYWxUeXBlIiwidW5sb2NrVHlwZSIsIlBJTl9VTkxPQ0siLCJQSU5fVU5MT0NLX0tFWV9FVkVOVCIsIlBBU1NXT1JEX1VOTE9DSyIsIlBBVFRFUk5fVU5MT0NLIiwiRXJyb3IiLCJoZWxwZXJzIiwiY3JlYXRlQmFzZUFEQiIsImFkYlBvcnQiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNyZWF0ZUFEQiIsInByZXBhcmVFbXVsYXRvciIsImF2ZCIsImF2ZEVudiIsImVudiIsImxhbmd1YWdlIiwibG9jYWxlIiwiY291bnRyeSIsImF2ZExhdW5jaFRpbWVvdXQiLCJsYXVuY2hUaW1lb3V0IiwiYXZkUmVhZHlUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwiYXZkTmFtZSIsInJlcGxhY2UiLCJydW5uaW5nQVZEIiwiZ2V0UnVubmluZ0FWRCIsImFyZ3MiLCJkZWJ1ZyIsImtpbGxFbXVsYXRvciIsImxhdW5jaEFWRCIsImVuc3VyZURldmljZUxvY2FsZSIsInNjcmlwdCIsImlzU3RyaW5nIiwic2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IiwiZW5zdXJlQ3VycmVudExvY2FsZSIsIm1lc3NhZ2UiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJ1ZGlkIiwiZW1Qb3J0IiwiY3VyRGV2aWNlSWQiLCJlbXVsYXRvclBvcnQiLCJpbmZvIiwiZGV2aWNlcyIsImdldERldmljZXNXaXRoUmV0cnkiLCJtYXAiLCJlcnJvckFuZFRocm93IiwiZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyIsInBsYXRmb3JtVmVyc2lvbiIsInRyaW0iLCJzZW12ZXIiLCJjb2VyY2UiLCJhdmFpbERldmljZXMiLCJwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUiLCJkZXZpY2UiLCJzZXREZXZpY2VJZCIsInJhd0RldmljZU9TIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwiZGV2aWNlT1MiLCJib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQiLCJ2YWxpZCIsImJvdGhWZXJzaW9uc0FyZVN0cmluZ3MiLCJ2ZXJzaW9uIiwidG9Mb3dlciIsIm1ham9yIiwibWlub3IiLCJndCIsImtleXMiLCJqb2luIiwic2V0RW11bGF0b3JQb3J0IiwidmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyIsImtleSIsIm5hbWUiLCJtYXRjaCIsImV4ZWMiLCJpbmRleCIsInN1YnN0cmluZyIsImdldExhdW5jaEluZm8iLCJhcHAiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXRBY3Rpdml0eSIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsInJlc2V0QXBwIiwiZmFzdFJlc2V0IiwiZnVsbFJlc2V0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiYXV0b0dyYW50UGVybWlzc2lvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsImlzSW5zdGFsbGVkIiwiaXNBcHBJbnN0YWxsZWQiLCJmb3JjZVN0b3AiLCJpZ24iLCJvdXRwdXQiLCJjbGVhciIsInRvTG93ZXJDYXNlIiwiZ3JhbnRBbGxQZXJtaXNzaW9ucyIsImVycm9yIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbCIsImdyYW50UGVybWlzc2lvbnMiLCJ0aW1lb3V0IiwiaW5zdGFsbEFwayIsImVuZm9yY2VBcHBJbnN0YWxsIiwiYXBwU3RhdGUiLCJ3YXNVbmluc3RhbGxlZCIsImluc3RhbGxPclVwZ3JhZGUiLCJlbmZvcmNlQ3VycmVudEJ1aWxkIiwiaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsImluc3RhbGxPdGhlckFwa3MiLCJvdGhlckFwcHMiLCJCIiwiYWxsIiwib3RoZXJBcHAiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYXBwUGFja2FnZXMiLCJmaWx0ZXJQYWNrYWdlcyIsImdldFRoaXJkUGFydHlQYWNrYWdlcyIsInBhY2thZ2VzU3RyaW5nIiwic2hlbGwiLCJhcHBQYWNrYWdlc0FycmF5Iiwic3BsaXQiLCJFT0wiLCJkaWZmZXJlbmNlIiwiZXJyIiwiaW5pdFVuaWNvZGVLZXlib2FyZCIsImRlZmF1bHRJTUUiLCJhcHBpdW1JTUUiLCJlbmFibGVJTUUiLCJzZXRJTUUiLCJzZXRNb2NrTG9jYXRpb25BcHAiLCJnZXRBcGlMZXZlbCIsImluc3RhbGxIZWxwZXJBcHAiLCJhcGtQYXRoIiwicGFja2FnZUlkIiwicmV0cnkiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJwdXNoU3RyaW5ncyIsInJlbW90ZURpciIsInN0cmluZ3NKc29uIiwicmVtb3RlRmlsZSIsInBhdGgiLCJwb3NpeCIsInJlc29sdmUiLCJyaW1yYWYiLCJwdWxsQXBrIiwidG1wRGlyIiwiaXNFbXB0eSIsImZzIiwiZXhpc3RzIiwic3RyaW5nc1RtcERpciIsImFwa1N0cmluZ3MiLCJsb2NhbFBhdGgiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJ1bmxvY2tXaXRoSGVscGVyQXBwIiwiZmlyc3RSdW4iLCJsYXVuY2hIZWxwZXIiLCJpc1NjcmVlbkxvY2tlZCIsImUiLCJkZWxheSIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsInVubG9ja0tleSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiLCJ1bmxvY2tlciIsInZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzIiwiRklOR0VSUFJJTlRfVU5MT0NLIiwiaXNOaWwiLCJpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwiZmFzdFVubG9jayIsImNyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsInVubG9ja01ldGhvZCIsInBpblVubG9jayIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBhc3N3b3JkVW5sb2NrIiwicGF0dGVyblVubG9jayIsImZpbmdlcnByaW50VW5sb2NrIiwidmVyaWZ5VW5sb2NrIiwidGltZW91dE1zIiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJpbml0RGV2aWNlIiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwibG9jYWxlU2NyaXB0IiwidW5pY29kZUtleWJvYXJkIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInNraXBVbmxvY2siLCJtb2NrTG9jYXRpb25BcHAiLCJza2lwTG9nY2F0Q2FwdHVyZSIsImxvZ2NhdEZvcm1hdCIsImxvZ2NhdEZpbHRlclNwZWNzIiwid2FpdEZvckRldmljZSIsInNob3VsZFRocm93RXJyb3IiLCJpc0VtdWxhdG9yIiwiaXNVbmRlZmluZWQiLCJzdGFydExvZ2NhdCIsImZvcm1hdCIsImZpbHRlclNwZWNzIiwicmVtb3ZlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJpc051bGwiLCJ0cnVuY2F0ZURlY2ltYWxzIiwibnVtYmVyIiwiZGlnaXRzIiwibXVsdGlwbGllciIsIk1hdGgiLCJwb3ciLCJhZGp1c3RlZE51bSIsInRydW5jYXRlZE51bSIsImlzQ2hyb21lQnJvd3NlciIsImdldENocm9tZVBrZyIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsInNlc3Npb25JZCIsImlzRnVuY3Rpb24iLCJnZXRXZWJTb2NrZXRIYW5kbGVycyIsImFjdGl2ZUhhbmRsZXJzIiwicGF0aG5hbWUiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwicGFyc2VBcnJheSIsImNhcCIsInBhcnNlZENhcHMiLCJKU09OIiwicGFyc2UiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiY2FwcyIsImJyb3dzZXJOYW1lIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwic3RyaW5naWZ5IiwicG9zc2libGVOYW1lcyIsInNvbWUiLCJ0ZXN0IiwiYm9vdHN0cmFwIiwiQm9vdHN0cmFwIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2FuZHJvaWQtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeSwgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZnMsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHsgcGF0aCBhcyBzZXR0aW5nc0Fwa1BhdGggfSBmcm9tICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuaW1wb3J0IEJvb3RzdHJhcCBmcm9tICcuL2Jvb3RzdHJhcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgQURCIGZyb20gJ2FwcGl1bS1hZGInO1xuaW1wb3J0IHtcbiAgZGVmYXVsdCBhcyB1bmxvY2tlciwgUElOX1VOTE9DSywgUElOX1VOTE9DS19LRVlfRVZFTlQsXG4gIFBBU1NXT1JEX1VOTE9DSywgUEFUVEVSTl9VTkxPQ0ssIEZJTkdFUlBSSU5UX1VOTE9DS1xufSBmcm9tICcuL3VubG9jay1oZWxwZXJzJztcbmltcG9ydCB7IEVPTCB9IGZyb20gJ29zJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuY29uc3QgUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQgPSA5MDAwMDsgLy8gbWlsbGlzZWNvbmRzXG4vLyBodHRwczovL2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvY2hyb21lL2Jyb3dzZXIvZGV2dG9vbHMvZGV2aWNlL2FuZHJvaWRfZGV2aWNlX2luZm9fcXVlcnkuY2NcbmNvbnN0IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkgPSB7XG4gIGNocm9tZToge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGNocm9taXVtOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICcuQ2hyb21lU2hlbGxBY3Rpdml0eScsXG4gIH0sXG4gIGNocm9tZWJldGE6IHtcbiAgICBwa2c6ICdjb20uY2hyb21lLmJldGEnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICBicm93c2VyOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuYnJvd3NlcicsXG4gICAgYWN0aXZpdHk6ICdjb20uYW5kcm9pZC5icm93c2VyLkJyb3dzZXJBY3Rpdml0eScsXG4gIH0sXG4gICdjaHJvbWl1bS1icm93c2VyJzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgIGFjdGl2aXR5OiAnY29tLmdvb2dsZS5hbmRyb2lkLmFwcHMuY2hyb21lLk1haW4nLFxuICB9LFxuICAnY2hyb21pdW0td2Vidmlldyc6IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gICAgYWN0aXZpdHk6ICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbC5XZWJWaWV3QnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIHBrZzogJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG59O1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1BLR19JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSA9ICcuVW5sb2NrJztcbmNvbnN0IEVNVUxBVE9SX1BBVFRFUk4gPSAvXFxiZW11bGF0b3JcXGIvaTtcbi8vIFRoZXNlIGNvbnN0YW50cyBhcmUgaW4gc3luYyB3aXRoXG4vLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi94Y3Rlc3QveGN1aWFwcGxpY2F0aW9uc3RhdGUveGN1aWFwcGxpY2F0aW9uc3RhdGVydW5uaW5nYmFja2dyb3VuZD9sYW5ndWFnZT1vYmpjXG5jb25zdCBBUFBfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgTk9UX0lOU1RBTExFRDogMCxcbiAgTk9UX1JVTk5JTkc6IDEsXG4gIFJVTk5JTkdfSU5fQkFDS0dST1VORDogMyxcbiAgUlVOTklOR19JTl9GT1JFR1JPVU5EOiA0XG59KTtcblxuXG5mdW5jdGlvbiBlbnN1cmVOZXR3b3JrU3BlZWQgKGFkYiwgbmV0d29ya1NwZWVkKSB7XG4gIGlmIChfLnZhbHVlcyhhZGIuTkVUV09SS19TUEVFRCkuaW5jbHVkZXMobmV0d29ya1NwZWVkKSkge1xuICAgIHJldHVybiBuZXR3b3JrU3BlZWQ7XG4gIH1cbiAgbG9nZ2VyLndhcm4oYFdyb25nIG5ldHdvcmsgc3BlZWQgcGFyYW0gJyR7bmV0d29ya1NwZWVkfScsIHVzaW5nIGRlZmF1bHQ6ICR7YWRiLk5FVFdPUktfU1BFRUQuRlVMTH0uIGAgK1xuICAgIGBTdXBwb3J0ZWQgdmFsdWVzOiAke18udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKX1gKTtcbiAgcmV0dXJuIGFkYi5ORVRXT1JLX1NQRUVELkZVTEw7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVBdmRBcmdzIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtTcGVlZCxcbiAgICBpc0hlYWRsZXNzLFxuICAgIGF2ZEFyZ3MsXG4gIH0gPSBvcHRzO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgaWYgKGF2ZEFyZ3MpIHtcbiAgICBpZiAoXy5pc0FycmF5KGF2ZEFyZ3MpKSB7XG4gICAgICByZXN1bHQucHVzaCguLi5hdmRBcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goLi4uKHV0aWwuc2hlbGxQYXJzZShgJHthdmRBcmdzfWApKSk7XG4gICAgfVxuICB9XG4gIGlmIChuZXR3b3JrU3BlZWQpIHtcbiAgICByZXN1bHQucHVzaCgnLW5ldHNwZWVkJywgZW5zdXJlTmV0d29ya1NwZWVkKGFkYiwgbmV0d29ya1NwZWVkKSk7XG4gIH1cbiAgaWYgKGlzSGVhZGxlc3MpIHtcbiAgICByZXN1bHQucHVzaCgnLW5vLXdpbmRvdycpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRvQ3JlZGVudGlhbFR5cGUgKHVubG9ja1R5cGUpIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFtQSU5fVU5MT0NLXTogJ3BpbicsXG4gICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogJ3BpbicsXG4gICAgW1BBU1NXT1JEX1VOTE9DS106ICdwYXNzd29yZCcsXG4gICAgW1BBVFRFUk5fVU5MT0NLXTogJ3BhdHRlcm4nLFxuICB9W3VubG9ja1R5cGVdO1xuICBpZiAocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVubG9jayB0eXBlICcke3VubG9ja1R5cGV9JyBpcyBub3Qga25vd25gKTtcbn1cblxuXG5jb25zdCBoZWxwZXJzID0ge307XG5cbmhlbHBlcnMuY3JlYXRlQmFzZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJhc2VBREIgKG9wdHMgPSB7fSkge1xuICAvLyBmaWx0ZXIgb3V0IGFueSB1bndhbnRlZCBvcHRpb25zIHNlbnQgaW5cbiAgLy8gdGhpcyBsaXN0IHNob3VsZCBiZSB1cGRhdGVkIGFzIEFEQiB0YWtlcyBtb3JlIGFyZ3VtZW50c1xuICBjb25zdCB7XG4gICAgYWRiUG9ydCxcbiAgICBzdXBwcmVzc0tpbGxTZXJ2ZXIsXG4gICAgcmVtb3RlQWRiSG9zdCxcbiAgICBjbGVhckRldmljZUxvZ3NPblN0YXJ0LFxuICAgIGFkYkV4ZWNUaW1lb3V0LFxuICAgIHVzZUtleXN0b3JlLFxuICAgIGtleXN0b3JlUGF0aCxcbiAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgIGtleUFsaWFzLFxuICAgIGtleVBhc3N3b3JkLFxuICAgIHJlbW90ZUFwcHNDYWNoZUxpbWl0LFxuICAgIGJ1aWxkVG9vbHNWZXJzaW9uLFxuICAgIGFsbG93T2ZmbGluZURldmljZXMsXG4gICAgYWxsb3dEZWxheUFkYixcbiAgfSA9IG9wdHM7XG4gIHJldHVybiBhd2FpdCBBREIuY3JlYXRlQURCKHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9KTtcbn07XG5cbmhlbHBlcnMucHJlcGFyZUVtdWxhdG9yID0gYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUVtdWxhdG9yIChhZGIsIG9wdHMpIHtcbiAgY29uc3Qge1xuICAgIGF2ZCxcbiAgICBhdmRFbnY6IGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGU6IGNvdW50cnksXG4gICAgYXZkTGF1bmNoVGltZW91dDogbGF1bmNoVGltZW91dCxcbiAgICBhdmRSZWFkeVRpbWVvdXQ6IHJlYWR5VGltZW91dCxcbiAgfSA9IG9wdHM7XG4gIGlmICghYXZkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbGF1bmNoIEFWRCB3aXRob3V0IEFWRCBuYW1lJyk7XG4gIH1cblxuICBjb25zdCBhdmROYW1lID0gYXZkLnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGNvbnN0IHJ1bm5pbmdBVkQgPSBhd2FpdCBhZGIuZ2V0UnVubmluZ0FWRChhdmROYW1lKTtcbiAgY29uc3QgYXJncyA9IHByZXBhcmVBdmRBcmdzKGFkYiwgb3B0cyk7XG4gIGlmIChydW5uaW5nQVZEKSB7XG4gICAgaWYgKGFyZ3MuaW5jbHVkZXMoJy13aXBlLWRhdGEnKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBLaWxsaW5nICcke2F2ZE5hbWV9JyBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIHdpcGVkIGF0IHN0YXJ0LmApO1xuICAgICAgYXdhaXQgYWRiLmtpbGxFbXVsYXRvcihhdmROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgbGF1bmNoaW5nIEFWRCBiZWNhdXNlIGl0IGlzIGFscmVhZHkgcnVubmluZy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgYXdhaXQgYWRiLmxhdW5jaEFWRChhdmQsIHtcbiAgICBhcmdzLFxuICAgIGVudixcbiAgICBsYW5ndWFnZSxcbiAgICBjb3VudHJ5LFxuICAgIGxhdW5jaFRpbWVvdXQsXG4gICAgcmVhZHlUaW1lb3V0LFxuICB9KTtcbn07XG5cbi8qKlxuICogU2V0IGFuZCBlbnN1cmUgdGhlIGxvY2FsZSBuYW1lIG9mIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBMYW5ndWFnZS4gVGhlIGxhbmd1YWdlIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gbG93ZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Miw4fS4gZS5nLiBlbiwgamEgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIFRoZSBjb3VudHJ5IChyZWdpb24pIGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUsIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdXBwZXIgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17Mn0gfCBbMC05XXszfS4gZS5nLiBVUywgSlAgOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gVGhlIHNjcmlwdCBmaWVsZCBpcyBjYXNlIGluc2Vuc2l0aXZlIGJ1dCBMb2NhbGUgYWx3YXlzIGNhbm9uaWNhbGl6ZXMgdG8gdGl0bGUgY2FzZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogW2EtekEtWl17NH0uIGUuZy4gSGFucyBpbiB6aC1IYW5zLUNOIDogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogQHRocm93cyB7RXJyb3J9IElmIGl0IGZhaWxlZCB0byBzZXQgbG9jYWxlIHByb3Blcmx5XG4gKi9cbmhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlID0gYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGV2aWNlTG9jYWxlIChhZGIsIGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGlmICghXy5pc1N0cmluZyhsYW5ndWFnZSkgJiYgIV8uaXNTdHJpbmcoY291bnRyeSkpIHtcbiAgICBsb2dnZXIud2Fybihgc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IHJlcXVpcmVzIGxhbmd1YWdlIG9yIGNvdW50cnkuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEdvdCBsYW5ndWFnZTogJyR7bGFuZ3VhZ2V9JyBhbmQgY291bnRyeTogJyR7Y291bnRyeX0nYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgYWRiLnNldERldmljZUxhbmd1YWdlQ291bnRyeShsYW5ndWFnZSwgY291bnRyeSwgc2NyaXB0KTtcblxuICBpZiAoIWF3YWl0IGFkYi5lbnN1cmVDdXJyZW50TG9jYWxlKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNjcmlwdCA/IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0sIGNvdW50cnk6ICR7Y291bnRyeX0gYW5kIHNjcmlwdDogJHtzY3JpcHR9YCA6IGBsYW5ndWFnZTogJHtsYW5ndWFnZX0gYW5kIGNvdW50cnk6ICR7Y291bnRyeX1gO1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCAke21lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0RGV2aWNlSW5mb0Zyb21DYXBzID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGV2aWNlSW5mb0Zyb21DYXBzIChvcHRzID0ge30pIHtcbiAgLy8gd2UgY2FuIGNyZWF0ZSBhIHRocm93YXdheSBBREIgaW5zdGFuY2UgaGVyZSwgc28gdGhlcmUgaXMgbm8gZGVwZW5kZW5jeVxuICAvLyBvbiBpbnN0YW50aWF0aW5nIG9uIGVhcmxpZXIgKGF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgbm8gdWRpZClcbiAgLy8gd2UgY2FuIG9ubHkgdXNlIHRoaXMgQURCIG9iamVjdCBmb3IgY29tbWFuZHMgdGhhdCB3b3VsZCBub3QgYmUgY29uZnVzZWRcbiAgLy8gaWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgY29ubmVjdGVkXG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgbGV0IHVkaWQgPSBvcHRzLnVkaWQ7XG4gIGxldCBlbVBvcnQgPSBudWxsO1xuXG4gIC8vIGEgc3BlY2lmaWMgYXZkIG5hbWUgd2FzIGdpdmVuLiB0cnkgdG8gaW5pdGlhbGl6ZSB3aXRoIHRoYXRcbiAgaWYgKG9wdHMuYXZkKSB7XG4gICAgYXdhaXQgaGVscGVycy5wcmVwYXJlRW11bGF0b3IoYWRiLCBvcHRzKTtcbiAgICB1ZGlkID0gYWRiLmN1ckRldmljZUlkO1xuICAgIGVtUG9ydCA9IGFkYi5lbXVsYXRvclBvcnQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm8gYXZkIGdpdmVuLiBsZXRzIHRyeSB3aGF0ZXZlcidzIHBsdWdnZWQgaW4gZGV2aWNlcy9lbXVsYXRvcnNcbiAgICBsb2dnZXIuaW5mbygnUmV0cmlldmluZyBkZXZpY2UgbGlzdCcpO1xuICAgIGxldCBkZXZpY2VzID0gYXdhaXQgYWRiLmdldERldmljZXNXaXRoUmV0cnkoKTtcblxuICAgIC8vIHVkaWQgd2FzIGdpdmVuLCBsZXRzIHRyeSB0byBpbml0IHdpdGggdGhhdCBkZXZpY2VcbiAgICBpZiAodWRpZCkge1xuICAgICAgaWYgKCFfLmluY2x1ZGVzKF8ubWFwKGRldmljZXMsICd1ZGlkJyksIHVkaWQpKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBEZXZpY2UgJHt1ZGlkfSB3YXMgbm90IGluIHRoZSBsaXN0IG9mIGNvbm5lY3RlZCBkZXZpY2VzYCk7XG4gICAgICB9XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2UgaWYgKG9wdHMucGxhdGZvcm1WZXJzaW9uKSB7XG4gICAgICBvcHRzLnBsYXRmb3JtVmVyc2lvbiA9IGAke29wdHMucGxhdGZvcm1WZXJzaW9ufWAudHJpbSgpO1xuXG4gICAgICAvLyBhIHBsYXRmb3JtIHZlcnNpb24gd2FzIGdpdmVuLiBsZXRzIHRyeSB0byBmaW5kIGEgZGV2aWNlIHdpdGggdGhlIHNhbWUgb3NcbiAgICAgIGNvbnN0IHBsYXRmb3JtVmVyc2lvbiA9IHNlbXZlci5jb2VyY2Uob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHx8IG9wdHMucGxhdGZvcm1WZXJzaW9uO1xuICAgICAgbG9nZ2VyLmluZm8oYExvb2tpbmcgZm9yIGEgZGV2aWNlIHdpdGggQW5kcm9pZCAnJHtwbGF0Zm9ybVZlcnNpb259J2ApO1xuXG4gICAgICAvLyBpbiBjYXNlIHdlIGZhaWwgdG8gZmluZCBzb21ldGhpbmcsIGdpdmUgdGhlIHVzZXIgYSB1c2VmdWwgbG9nIHRoYXQgaGFzXG4gICAgICAvLyB0aGUgZGV2aWNlIHVkaWRzIGFuZCBvcyB2ZXJzaW9ucyBzbyB0aGV5IGtub3cgd2hhdCdzIGF2YWlsYWJsZVxuICAgICAgY29uc3QgYXZhaWxEZXZpY2VzID0gW107XG4gICAgICBsZXQgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIC8vIGZpcnN0IHRyeSBzdGFydGVkIGRldmljZXMvZW11bGF0b3JzXG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIC8vIGRpcmVjdCBhZGIgY2FsbHMgdG8gdGhlIHNwZWNpZmljIGRldmljZVxuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQoZGV2aWNlLnVkaWQpO1xuICAgICAgICBjb25zdCByYXdEZXZpY2VPUyA9IGF3YWl0IGFkYi5nZXRQbGF0Zm9ybVZlcnNpb24oKTtcbiAgICAgICAgLy8gVGhlIGRldmljZSBPUyBjb3VsZCBlaXRoZXIgYmUgYSBudW1iZXIsIGxpa2UgYDYuMGBcbiAgICAgICAgLy8gb3IgYW4gYWJicmV2aWF0aW9uLCBsaWtlIGBSYFxuICAgICAgICBhdmFpbERldmljZXMucHVzaChgJHtkZXZpY2UudWRpZH0gKCR7cmF3RGV2aWNlT1N9KWApO1xuICAgICAgICBjb25zdCBkZXZpY2VPUyA9IHNlbXZlci5jb2VyY2UocmF3RGV2aWNlT1MpIHx8IHJhd0RldmljZU9TO1xuICAgICAgICBpZiAoIWRldmljZU9TKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgPSBzZW12ZXIudmFsaWQoZGV2aWNlT1MpICYmIHNlbXZlci52YWxpZChwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBjb25zdCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzID0gXy5pc1N0cmluZyhkZXZpY2VPUykgJiYgXy5pc1N0cmluZyhwbGF0Zm9ybVZlcnNpb24pO1xuICAgICAgICBpZiAoYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkICYmIGRldmljZU9TLnZlcnNpb24gPT09IHBsYXRmb3JtVmVyc2lvbi52ZXJzaW9uXG4gICAgICAgICAgICB8fCBib3RoVmVyc2lvbnNBcmVTdHJpbmdzICYmIF8udG9Mb3dlcihkZXZpY2VPUykgPT09IF8udG9Mb3dlcihwbGF0Zm9ybVZlcnNpb24pKSB7XG4gICAgICAgICAgLy8gR290IGFuIGV4YWN0IG1hdGNoIC0gcHJvY2VlZCBpbW1lZGlhdGVseVxuICAgICAgICAgIHVkaWQgPSBkZXZpY2UudWRpZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICghYm90aFZlcnNpb25zQ2FuQmVDb2VyY2VkKSB7XG4gICAgICAgICAgLy8gVGhlcmUgaXMgbm8gcG9pbnQgdG8gY2hlY2sgZm9yIHBhcnRpYWwgbWF0Y2ggaWYgZWl0aGVyIG9mIHZlcnNpb24gbnVtYmVycyBpcyBub3QgY29lcmNpYmxlXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFfLmluY2x1ZGVzKG9wdHMucGxhdGZvcm1WZXJzaW9uLCAnLicpICYmIHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3JcbiAgICAgICAgICAgIHx8IHBsYXRmb3JtVmVyc2lvbi5tYWpvciA9PT0gZGV2aWNlT1MubWFqb3IgJiYgcGxhdGZvcm1WZXJzaW9uLm1pbm9yID09PSBkZXZpY2VPUy5taW5vcilcbiAgICAgICAgICAgIC8vIEdvdCBhIHBhcnRpYWwgbWF0Y2ggLSBtYWtlIHN1cmUgd2UgY29uc2lkZXIgdGhlIG1vc3QgcmVjZW50XG4gICAgICAgICAgICAvLyBkZXZpY2UgdmVyc2lvbiBhdmFpbGFibGUgb24gdGhlIGhvc3Qgc3lzdGVtXG4gICAgICAgICAgICAmJiAocGFydGlhbE1hdGNoQ2FuZGlkYXRlICYmIHNlbXZlci5ndChkZXZpY2VPUywgXy52YWx1ZXMocGFydGlhbE1hdGNoQ2FuZGlkYXRlKVswXSlcbiAgICAgICAgICAgICAgICB8fCAhcGFydGlhbE1hdGNoQ2FuZGlkYXRlKSkge1xuICAgICAgICAgIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSA9IHtbZGV2aWNlLnVkaWRdOiBkZXZpY2VPU307XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdWRpZCAmJiBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpIHtcbiAgICAgICAgdWRpZCA9IF8ua2V5cyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdO1xuICAgICAgICBhd2FpdCBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdWRpZCkge1xuICAgICAgICAvLyB3ZSBjb3VsZG4ndCBmaW5kIGFueXRoaW5nISBxdWl0XG4gICAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBVbmFibGUgdG8gZmluZCBhbiBhY3RpdmUgZGV2aWNlIG9yIGVtdWxhdG9yIGAgK1xuICAgICAgICAgIGB3aXRoIE9TICR7b3B0cy5wbGF0Zm9ybVZlcnNpb259LiBUaGUgZm9sbG93aW5nIGFyZSBhdmFpbGFibGU6IGAgK1xuICAgICAgICAgIGF2YWlsRGV2aWNlcy5qb2luKCcsICcpKTtcbiAgICAgIH1cblxuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGEgdWRpZCB3YXMgbm90IGdpdmVuLCBncmFiIHRoZSBmaXJzdCBkZXZpY2Ugd2Ugc2VlXG4gICAgICB1ZGlkID0gZGV2aWNlc1swXS51ZGlkO1xuICAgICAgZW1Qb3J0ID0gYWRiLmdldFBvcnRGcm9tRW11bGF0b3JTdHJpbmcodWRpZCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oYFVzaW5nIGRldmljZTogJHt1ZGlkfWApO1xuICByZXR1cm4ge3VkaWQsIGVtUG9ydH07XG59O1xuXG4vLyByZXR1cm5zIGEgbmV3IGFkYiBpbnN0YW5jZSB3aXRoIGRldmljZUlkIHNldFxuaGVscGVycy5jcmVhdGVBREIgPSBhc3luYyBmdW5jdGlvbiBjcmVhdGVBREIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7dWRpZCwgZW1Qb3J0fSA9IG9wdHM7XG4gIGNvbnN0IGFkYiA9IGF3YWl0IGhlbHBlcnMuY3JlYXRlQmFzZUFEQihvcHRzKTtcbiAgYWRiLnNldERldmljZUlkKHVkaWQpO1xuICBpZiAoZW1Qb3J0KSB7XG4gICAgYWRiLnNldEVtdWxhdG9yUG9ydChlbVBvcnQpO1xuICB9XG5cbiAgcmV0dXJuIGFkYjtcbn07XG5cbmhlbHBlcnMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMgKG9wdHMpIHtcbiAgZm9yIChjb25zdCBrZXkgb2YgWydhcHBQYWNrYWdlJywgJ2FwcEFjdGl2aXR5JywgJ2FwcFdhaXRQYWNrYWdlJywgJ2FwcFdhaXRBY3Rpdml0eSddKSB7XG4gICAgY29uc3QgbmFtZSA9IG9wdHNba2V5XTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gLyhbXlxcdy4qLF0pKy8uZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgQ2FwYWJpbGl0eSAnJHtrZXl9JyBpcyBleHBlY3RlZCB0byBvbmx5IGluY2x1ZGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCB1bmRlcnNjb3JlLCBkb3QsIGNvbW1hIGFuZCBhc3RlcmlzayBjaGFyYWN0ZXJzLmApO1xuICAgIGxvZ2dlci53YXJuKGBDdXJyZW50IHZhbHVlICcke25hbWV9JyBoYXMgbm9uLW1hdGNoaW5nIGNoYXJhY3RlciBhdCBpbmRleCAke21hdGNoLmluZGV4fTogJyR7bmFtZS5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyAxKX0nYCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuZ2V0TGF1bmNoSW5mbyA9IGFzeW5jIGZ1bmN0aW9uIGdldExhdW5jaEluZm8gKGFkYiwgb3B0cykge1xuICBsZXQge2FwcCwgYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHl9ID0gb3B0cztcbiAgaWYgKCFhcHApIHtcbiAgICBsb2dnZXIud2FybignTm8gYXBwIHNlbnQgaW4sIG5vdCBwYXJzaW5nIHBhY2thZ2UvYWN0aXZpdHknKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLnZhbGlkYXRlUGFja2FnZUFjdGl2aXR5TmFtZXMob3B0cyk7XG5cbiAgaWYgKGFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuZGVidWcoJ1BhcnNpbmcgcGFja2FnZSBhbmQgYWN0aXZpdHkgZnJvbSBhcHAgbWFuaWZlc3QnKTtcbiAgbGV0IHthcGtQYWNrYWdlLCBhcGtBY3Rpdml0eX0gPVxuICAgIGF3YWl0IGFkYi5wYWNrYWdlQW5kTGF1bmNoQWN0aXZpdHlGcm9tTWFuaWZlc3QoYXBwKTtcbiAgaWYgKGFwa1BhY2thZ2UgJiYgIWFwcFBhY2thZ2UpIHtcbiAgICBhcHBQYWNrYWdlID0gYXBrUGFja2FnZTtcbiAgfVxuICBpZiAoIWFwcFdhaXRQYWNrYWdlKSB7XG4gICAgYXBwV2FpdFBhY2thZ2UgPSBhcHBQYWNrYWdlO1xuICB9XG4gIGlmIChhcGtBY3Rpdml0eSAmJiAhYXBwQWN0aXZpdHkpIHtcbiAgICBhcHBBY3Rpdml0eSA9IGFwa0FjdGl2aXR5O1xuICB9XG4gIGlmICghYXBwV2FpdEFjdGl2aXR5KSB7XG4gICAgYXBwV2FpdEFjdGl2aXR5ID0gYXBwQWN0aXZpdHk7XG4gIH1cbiAgbG9nZ2VyLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBhbmQgYWN0aXZpdHkgYXJlOiAke2Fwa1BhY2thZ2V9LyR7YXBrQWN0aXZpdHl9YCk7XG4gIHJldHVybiB7YXBwUGFja2FnZSwgYXBwV2FpdFBhY2thZ2UsIGFwcEFjdGl2aXR5LCBhcHBXYWl0QWN0aXZpdHl9O1xufTtcblxuaGVscGVycy5yZXNldEFwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0QXBwIChhZGIsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGFwcFBhY2thZ2UsXG4gICAgZmFzdFJlc2V0LFxuICAgIGZ1bGxSZXNldCxcbiAgICBhbmRyb2lkSW5zdGFsbFRpbWVvdXQgPSBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCxcbiAgICBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICBhbGxvd1Rlc3RQYWNrYWdlc1xuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcFBhY2thZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInYXBwUGFja2FnZScgb3B0aW9uIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCBhZGIuaXNBcHBJbnN0YWxsZWQoYXBwUGFja2FnZSk7XG5cbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5mb3JjZVN0b3AoYXBwUGFja2FnZSk7XG4gICAgfSBjYXRjaCAoaWduKSB7fVxuICAgIC8vIGZ1bGxSZXNldCBoYXMgcHJpb3JpdHkgb3ZlciBmYXN0UmVzZXRcbiAgICBpZiAoIWZ1bGxSZXNldCAmJiBmYXN0UmVzZXQpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGFkYi5jbGVhcihhcHBQYWNrYWdlKTtcbiAgICAgIGlmIChfLmlzU3RyaW5nKG91dHB1dCkgJiYgb3V0cHV0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2ZhaWxlZCcpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNsZWFyIHRoZSBhcHBsaWNhdGlvbiBkYXRhIG9mICcke2FwcFBhY2thZ2V9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7b3V0cHV0fWApO1xuICAgICAgfVxuICAgICAgLy8gZXhlY3V0aW5nIGBzaGVsbCBwbSBjbGVhcmAgcmVzZXRzIHByZXZpb3VzbHkgYXNzaWduZWQgYXBwbGljYXRpb24gcGVybWlzc2lvbnMgYXMgd2VsbFxuICAgICAgaWYgKGF1dG9HcmFudFBlcm1pc3Npb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYWRiLmdyYW50QWxsUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gZ3JhbnQgcGVybWlzc2lvbnMgcmVxdWVzdGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuZGVidWcoYFBlcmZvcm1lZCBmYXN0IHJlc2V0IG9uIHRoZSBpbnN0YWxsZWQgJyR7YXBwUGFja2FnZX0nIGFwcGxpY2F0aW9uIChzdG9wIGFuZCBjbGVhcilgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWFwcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgcmVpbnN0YWxsXCIpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBSdW5uaW5nIGZ1bGwgcmVzZXQgb24gJyR7YXBwUGFja2FnZX0nIChyZWluc3RhbGwpYCk7XG4gIGlmIChpc0luc3RhbGxlZCkge1xuICAgIGF3YWl0IGFkYi51bmluc3RhbGxBcGsoYXBwUGFja2FnZSk7XG4gIH1cbiAgYXdhaXQgYWRiLmluc3RhbGwoYXBwLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICB9KTtcbn07XG5cbmhlbHBlcnMuaW5zdGFsbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxBcGsgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9ID0gb3B0cztcblxuICBpZiAoIWFwcCB8fCAhYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHAnIGFuZCAnYXBwUGFja2FnZScgb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIH1cblxuICBpZiAoZnVsbFJlc2V0KSB7XG4gICAgYXdhaXQgdGhpcy5yZXNldEFwcChhZGIsIG9wdHMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBhcHBTdGF0ZSxcbiAgICB3YXNVbmluc3RhbGxlZFxuICB9ID0gYXdhaXQgYWRiLmluc3RhbGxPclVwZ3JhZGUoYXBwLCBhcHBQYWNrYWdlLCB7XG4gICAgZ3JhbnRQZXJtaXNzaW9uczogYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIGVuZm9yY2VDdXJyZW50QnVpbGQ6IGVuZm9yY2VBcHBJbnN0YWxsLFxuICB9KTtcblxuICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IHRoZSBuZXdseSBpbnN0YWxsZWQgYXBwXG4gIGNvbnN0IGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwID0gIXdhc1VuaW5zdGFsbGVkXG4gICAgJiYgYXBwU3RhdGUgIT09IGFkYi5BUFBfSU5TVEFMTF9TVEFURS5OT1RfSU5TVEFMTEVEO1xuICBpZiAoZmFzdFJlc2V0ICYmIGlzSW5zdGFsbGVkT3ZlckV4aXN0aW5nQXBwKSB7XG4gICAgbG9nZ2VyLmluZm8oYFBlcmZvcm1pbmcgZmFzdCByZXNldCBvbiAnJHthcHBQYWNrYWdlfSdgKTtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gIH1cbn07XG5cbi8qKlxuICogSW5zdGFsbHMgYW4gYXJyYXkgb2YgYXBrc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0cyBkZWZpbmVkIGluIGRyaXZlci5qc1xuICovXG5oZWxwZXJzLmluc3RhbGxPdGhlckFwa3MgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsT3RoZXJBcGtzIChvdGhlckFwcHMsIGFkYiwgb3B0cykge1xuICBsZXQge1xuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIC8vIEluc3RhbGwgYWxsIG9mIHRoZSBBUEsncyBhc3luY2hyb25vdXNseVxuICBhd2FpdCBCLmFsbChvdGhlckFwcHMubWFwKChvdGhlckFwcCkgPT4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSW5zdGFsbGluZyBhcHA6ICR7b3RoZXJBcHB9YCk7XG4gICAgcmV0dXJuIGFkYi5pbnN0YWxsT3JVcGdyYWRlKG90aGVyQXBwLCBudWxsLCB7XG4gICAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICAgIHRpbWVvdXQ6IGFuZHJvaWRJbnN0YWxsVGltZW91dCxcbiAgICAgIGFsbG93VGVzdFBhY2thZ2VzLFxuICAgIH0pO1xuICB9KSk7XG59O1xuXG4vKipcbiAqIFVuaW5zdGFsbCBhbiBhcnJheSBvZiBwYWNrYWdlc1xuICogQHBhcmFtIHtBREJ9IGFkYiBJbnN0YW5jZSBvZiBBcHBpdW0gQURCIG9iamVjdFxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhcHBQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlIG5hbWVzIHRvIHVuaW5zdGFsbC4gSWYgdGhpcyBpbmNsdWRlcyBgJyonYCwgdW5pbnN0YWxsIGFsbCBvZiAzcmQgcGFydHkgYXBwc1xuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBmaWx0ZXJQYWNrYWdlcyBBbiBhcnJheSBvZiBwYWNrYWdlcyBkb2VzIG5vdCB1bmluc3RhbGwgd2hlbiBgKmAgaXMgcHJvdmlkZWQgYXMgYGFwcFBhY2thZ2VzYFxuICovXG5oZWxwZXJzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiB1bmluc3RhbGxPdGhlclBhY2thZ2VzIChhZGIsIGFwcFBhY2thZ2VzLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIGlmIChhcHBQYWNrYWdlcy5pbmNsdWRlcygnKicpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKCdVbmluc3RhbGwgdGhpcmQgcGFydHkgcGFja2FnZXMnKTtcbiAgICBhcHBQYWNrYWdlcyA9IGF3YWl0IHRoaXMuZ2V0VGhpcmRQYXJ0eVBhY2thZ2VzKGFkYiwgZmlsdGVyUGFja2FnZXMpO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKGBVbmluc3RhbGxpbmcgcGFja2FnZXM6ICR7YXBwUGFja2FnZXN9YCk7XG4gIGF3YWl0IEIuYWxsKGFwcFBhY2thZ2VzLm1hcCgoYXBwUGFja2FnZSkgPT4gYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKSkpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhpcmQgcGFydHkgcGFja2FnZXMgZmlsdGVyZWQgd2l0aCBgZmlsdGVyUGFja2FnZXNgXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gQW4gYXJyYXkgb2YgaW5zdGFsbGVkIHRoaXJkIHBhcnkgcGFja2FnZXNcbiAqL1xuaGVscGVycy5nZXRUaGlyZFBhcnR5UGFja2FnZXMgPSBhc3luYyBmdW5jdGlvbiBnZXRUaGlyZFBhcnR5UGFja2FnZXMgKGFkYiwgZmlsdGVyUGFja2FnZXMgPSBbXSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VzU3RyaW5nID0gYXdhaXQgYWRiLnNoZWxsKFsncG0nLCAnbGlzdCcsICdwYWNrYWdlcycsICctMyddKTtcbiAgICBjb25zdCBhcHBQYWNrYWdlc0FycmF5ID0gcGFja2FnZXNTdHJpbmcudHJpbSgpLnJlcGxhY2UoL3BhY2thZ2U6L2csICcnKS5zcGxpdChFT0wpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgJyR7YXBwUGFja2FnZXNBcnJheX0nIGZpbHRlcmVkIHdpdGggJyR7ZmlsdGVyUGFja2FnZXN9J2ApO1xuICAgIHJldHVybiBfLmRpZmZlcmVuY2UoYXBwUGFja2FnZXNBcnJheSwgZmlsdGVyUGFja2FnZXMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGdldCBwYWNrYWdlcyB3aXRoICdhZGIgc2hlbGwgcG0gbGlzdCBwYWNrYWdlcyAtMyc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5oZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBpbml0VW5pY29kZUtleWJvYXJkIChhZGIpIHtcbiAgbG9nZ2VyLmRlYnVnKCdFbmFibGluZyBVbmljb2RlIGtleWJvYXJkIHN1cHBvcnQnKTtcblxuICAvLyBnZXQgdGhlIGRlZmF1bHQgSU1FIHNvIHdlIGNhbiByZXR1cm4gYmFjayB0byBpdCBsYXRlciBpZiB3ZSB3YW50XG4gIGxldCBkZWZhdWx0SU1FID0gYXdhaXQgYWRiLmRlZmF1bHRJTUUoKTtcblxuICBsb2dnZXIuZGVidWcoYFVuc2V0dGluZyBwcmV2aW91cyBJTUUgJHtkZWZhdWx0SU1FfWApO1xuICBjb25zdCBhcHBpdW1JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8uVW5pY29kZUlNRWA7XG4gIGxvZ2dlci5kZWJ1ZyhgU2V0dGluZyBJTUUgdG8gJyR7YXBwaXVtSU1FfSdgKTtcbiAgYXdhaXQgYWRiLmVuYWJsZUlNRShhcHBpdW1JTUUpO1xuICBhd2FpdCBhZGIuc2V0SU1FKGFwcGl1bUlNRSk7XG4gIHJldHVybiBkZWZhdWx0SU1FO1xufTtcblxuaGVscGVycy5zZXRNb2NrTG9jYXRpb25BcHAgPSBhc3luYyBmdW5jdGlvbiBzZXRNb2NrTG9jYXRpb25BcHAgKGFkYiwgYXBwKSB7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpIDwgMjMpIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3NldHRpbmdzJywgJ3B1dCcsICdzZWN1cmUnLCAnbW9ja19sb2NhdGlvbicsICcxJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydhcHBvcHMnLCAnc2V0JywgYXBwLCAnYW5kcm9pZDptb2NrX2xvY2F0aW9uJywgJ2FsbG93J10pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYFVuYWJsZSB0byBzZXQgbW9jayBsb2NhdGlvbiBmb3IgYXBwICcke2FwcH0nOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLmluc3RhbGxIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSGVscGVyQXBwIChhZGIsIGFwa1BhdGgsIHBhY2thZ2VJZCkge1xuICAvLyBTb21ldGltZXMgYWRiIHB1c2ggb3IgYWRiIGluc3RhbCB0YWtlIG1vcmUgdGltZSB0aGFuIGV4cGVjdGVkIHRvIGluc3RhbGwgYW4gYXBwXG4gIC8vIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MvaXNzdWVzLzQwI2lzc3VlY29tbWVudC00NzY1OTMxNzRcbiAgYXdhaXQgcmV0cnkoMiwgYXN5bmMgZnVuY3Rpb24gcmV0cnlJbnN0YWxsSGVscGVyQXBwICgpIHtcbiAgICBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcGtQYXRoLCBwYWNrYWdlSWQsIHtncmFudFBlcm1pc3Npb25zOiB0cnVlfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBQdXNoZXMgYW5kIGluc3RhbGxzIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHNldHRpbmcgYXBwIGlzIHJlcXVpcmVkXG4gKlxuICogQHBhcmFtIHtBZGJ9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtib29sZWFufSB0aHJvd0Vycm9yW2ZhbHNlXSAtIFdoZXRoZXIgdGhyb3cgZXJyb3Igb3Igbm90XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhyb3dFcnJvciBpcyB0cnVlIGFuZCBzb21ldGhpbmcgaGFwcGVucyBpbiBpbnN0YWxsYXRpb24gc3RlcFxuICovXG5oZWxwZXJzLnB1c2hTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTZXR0aW5nc0FwcCAoYWRiLCB0aHJvd0Vycm9yID0gZmFsc2UpIHtcbiAgbG9nZ2VyLmRlYnVnKCdQdXNoaW5nIHNldHRpbmdzIGFwayB0byBkZXZpY2UuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcChhZGIsIHNldHRpbmdzQXBrUGF0aCwgU0VUVElOR1NfSEVMUEVSX1BLR19JRCwgdGhyb3dFcnJvcik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgbG9nZ2VyLndhcm4oYElnbm9yZWQgZXJyb3Igd2hpbGUgaW5zdGFsbGluZyAnJHtzZXR0aW5nc0Fwa1BhdGh9JzogYCArXG4gICAgICAgICAgICAgICAgYCcke2Vyci5tZXNzYWdlfScuIEZlYXR1cmVzIHRoYXQgcmVseSBvbiB0aGlzIGhlbHBlciBgICtcbiAgICAgICAgICAgICAgICAncmVxdWlyZSB0aGUgYXBrIHN1Y2ggYXMgdG9nZ2xlIFdpRmkgYW5kIGdldHRpbmcgbG9jYXRpb24gJyArXG4gICAgICAgICAgICAgICAgJ3dpbGwgcmFpc2UgYW4gZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbS4nKTtcbiAgfVxuXG4gIC8vIFJlaW5zdGFsbCB3aWxsIHN0b3AgdGhlIHNldHRpbmdzIGhlbHBlciBwcm9jZXNzIGFueXdheSwgc29cbiAgLy8gdGhlcmUgaXMgbm8gbmVlZCB0byBjb250aW51ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgc3RpbGwgcnVubmluZ1xuICBpZiAoYXdhaXQgYWRiLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX1BLR19JRCkpIHtcbiAgICBsb2dnZXIuZGVidWcoYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0gaXMgYWxyZWFkeSBydW5uaW5nLiBgICtcbiAgICAgIGBUaGVyZSBpcyBubyBuZWVkIHRvIHJlc2V0IGl0cyBwZXJtaXNzaW9ucy5gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPD0gMjMpIHsgLy8gQW5kcm9pZCA2LSBkZXZpY2VzIHNob3VsZCBoYXZlIGdyYW50ZWQgcGVybWlzc2lvbnNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9wdWxsLzExNjQwI2lzc3VlY29tbWVudC00MzgyNjA0NzdcbiAgICBjb25zdCBwZXJtcyA9IFsnU0VUX0FOSU1BVElPTl9TQ0FMRScsICdDSEFOR0VfQ09ORklHVVJBVElPTicsICdBQ0NFU1NfRklORV9MT0NBVElPTiddO1xuICAgIGxvZ2dlci5pbmZvKGBHcmFudGluZyBwZXJtaXNzaW9ucyAke3Blcm1zfSB0byAnJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSdgKTtcbiAgICBhd2FpdCBhZGIuZ3JhbnRQZXJtaXNzaW9ucyhTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBwZXJtcy5tYXAoKHgpID0+IGBhbmRyb2lkLnBlcm1pc3Npb24uJHt4fWApKTtcbiAgfVxuXG4gIC8vIGxhdW5jaCBpby5hcHBpdW0uc2V0dGluZ3MgYXBwIGR1ZSB0byBzZXR0aW5ncyBmYWlsaW5nIHRvIGJlIHNldFxuICAvLyBpZiB0aGUgYXBwIGlzIG5vdCBsYXVuY2hlZCBwcmlvciB0byBzdGFydCB0aGUgc2Vzc2lvbiBvbiBhbmRyb2lkIDcrXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvODk1N1xuICB0cnkge1xuICAgIGF3YWl0IGFkYi5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhlcnIpO1xuICAgIGlmICh0aHJvd0Vycm9yKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV4dHJhY3RzIHN0cmluZy54bWwgYW5kIGNvbnZlcnRzIGl0IHRvIHN0cmluZy5qc29uIGFuZCBwdXNoZXNcbiAqIGl0IHRvIC9kYXRhL2xvY2FsL3RtcC9zdHJpbmcuanNvbiBvbiBmb3IgdXNlIG9mIGJvb3RzdHJhcFxuICogSWYgYXBwIGlzIG5vdCBwcmVzZW50IHRvIGV4dHJhY3Qgc3RyaW5nLnhtbCBpdCBkZWxldGVzIHJlbW90ZSBzdHJpbmdzLmpzb25cbiAqIElmIGFwcCBkb2VzIG5vdCBoYXZlIHN0cmluZ3MueG1sIHdlIHB1c2ggYW4gZW1wdHkganNvbiBvYmplY3QgdG8gcmVtb3RlXG4gKlxuICogQHBhcmFtIHs/c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlIGFiYnJldmlhdGlvbiwgZm9yIGV4YW1wbGUgJ2ZyJy4gVGhlIGRlZmF1bHQgbGFuZ3VhZ2VcbiAqIGlzIHVzZWQgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgZGVmaW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gRHJpdmVyIG9wdGlvbnMgZGljdGlvbmFyeS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkaWN0aW9uYXJ5LCB3aGVyZSBzdHJpbmcgcmVzb3VyY2UgaWRlbnRpZmllcnMgYXJlIGtleXNcbiAqIGFsb25nIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBvciBhbiBlbXB0eSBvYmplY3RcbiAqIGlmIG5vIG1hdGNoaW5nIHJlc291cmNlcyB3ZXJlIGV4dHJhY3RlZC5cbiAqL1xuaGVscGVycy5wdXNoU3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hTdHJpbmdzIChsYW5ndWFnZSwgYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHJlbW90ZURpciA9ICcvZGF0YS9sb2NhbC90bXAnO1xuICBjb25zdCBzdHJpbmdzSnNvbiA9ICdzdHJpbmdzLmpzb24nO1xuICBjb25zdCByZW1vdGVGaWxlID0gcGF0aC5wb3NpeC5yZXNvbHZlKHJlbW90ZURpciwgc3RyaW5nc0pzb24pO1xuXG4gIC8vIGNsZWFuIHVwIHJlbW90ZSBzdHJpbmcuanNvbiBpZiBwcmVzZW50XG4gIGF3YWl0IGFkYi5yaW1yYWYocmVtb3RlRmlsZSk7XG5cbiAgbGV0IGFwcDtcbiAgdHJ5IHtcbiAgICBhcHAgPSBvcHRzLmFwcCB8fCBhd2FpdCBhZGIucHVsbEFwayhvcHRzLmFwcFBhY2thZ2UsIG9wdHMudG1wRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmluZm8oYEZhaWxlZCB0byBwdWxsIGFuIGFwayBmcm9tICcke29wdHMuYXBwUGFja2FnZX0nIHRvICcke29wdHMudG1wRGlyfScuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKF8uaXNFbXB0eShvcHRzLmFwcFBhY2thZ2UpIHx8ICEoYXdhaXQgZnMuZXhpc3RzKGFwcCkpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBObyBhcHAgb3IgcGFja2FnZSBzcGVjaWZpZWQuIFJldHVybmluZyBlbXB0eSBzdHJpbmdzYCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgY29uc3Qgc3RyaW5nc1RtcERpciA9IHBhdGgucmVzb2x2ZShvcHRzLnRtcERpciwgb3B0cy5hcHBQYWNrYWdlKTtcbiAgdHJ5IHtcbiAgICBsb2dnZXIuZGVidWcoJ0V4dHJhY3Rpbmcgc3RyaW5ncyBmcm9tIGFwaycsIGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGNvbnN0IHthcGtTdHJpbmdzLCBsb2NhbFBhdGh9ID0gYXdhaXQgYWRiLmV4dHJhY3RTdHJpbmdzRnJvbUFwayhhcHAsIGxhbmd1YWdlLCBzdHJpbmdzVG1wRGlyKTtcbiAgICBhd2FpdCBhZGIucHVzaChsb2NhbFBhdGgsIHJlbW90ZURpcik7XG4gICAgcmV0dXJuIGFwa1N0cmluZ3M7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBDb3VsZCBub3QgZ2V0IHN0cmluZ3MsIGNvbnRpbnVpbmcgYW55d2F5LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBhd2FpdCBhZGIuc2hlbGwoJ2VjaG8nLCBbYCd7fScgPiAke3JlbW90ZUZpbGV9YF0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihzdHJpbmdzVG1wRGlyKTtcbiAgfVxuICByZXR1cm4ge307XG59O1xuXG5oZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2tXaXRoSGVscGVyQXBwIChhZGIpIHtcbiAgbG9nZ2VyLmluZm8oJ1VubG9ja2luZyBzY3JlZW4nKTtcblxuICAvLyBVbmxvY2sgc3VjY2VlZCB3aXRoIGEgY291cGxlIG9mIHJldHJpZXMuXG4gIGxldCBmaXJzdFJ1biA9IHRydWU7XG4gIGF3YWl0IHJldHJ5KDMsIGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEhlbHBlciAoKSB7XG4gICAgLy8gVG8gcmVkdWNlIGEgdGltZSB0byBjYWxsIGFkYi5pc1NjcmVlbkxvY2tlZCgpIHNpbmNlIGBhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dgIGlzIGVhc3kgdG8gaGFuZyBhZGIgY29tbWFuZHNcbiAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgIGZpcnN0UnVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgRXJyb3IgaW4gaXNTY3JlZW5Mb2NrZWQ6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgICBsb2dnZXIud2FybignXCJhZGIgc2hlbGwgZHVtcHN5cyB3aW5kb3dcIiBjb21tYW5kIGhhcyB0aW1lZCBvdXQuJyk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUaGUgcmVhc29uIG9mIHRoaXMgdGltZW91dCBpcyB0aGUgZGVsYXllZCBhZGIgcmVzcG9uc2UuIFJlc2V0dGluZyBhZGIgc2VydmVyIGNhbiBpbXByb3ZlIGl0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKGBMYXVuY2hpbmcgJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbChbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vJHtTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZfWAsXG4gICAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAgICctZicsICcweDEwMjAwMDAwJyxcbiAgICBdKTtcbiAgICBhd2FpdCBCLmRlbGF5KDEwMDApO1xuICB9KTtcbn07XG5cbmhlbHBlcnMudW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdW5sb2NrIChkcml2ZXIsIGFkYiwgY2FwYWJpbGl0aWVzKSB7XG4gIGlmICghKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSkge1xuICAgIGxvZ2dlci5pbmZvKCdTY3JlZW4gYWxyZWFkeSB1bmxvY2tlZCwgZG9pbmcgbm90aGluZycpO1xuICAgIHJldHVybjtcbiAgfVxuICBsb2dnZXIuZGVidWcoJ1NjcmVlbiBpcyBsb2NrZWQsIHRyeWluZyB0byB1bmxvY2snKTtcblxuICBpZiAoIWNhcGFiaWxpdGllcy51bmxvY2tUeXBlICYmICFjYXBhYmlsaXRpZXMudW5sb2NrS2V5KSB7XG4gICAgbG9nZ2VyLndhcm4oJ1VzaW5nIGFwcCB1bmxvY2ssIHRoaXMgaXMgZ29pbmcgdG8gYmUgZGVwcmVjYXRlZCEnKTtcbiAgICBhd2FpdCBoZWxwZXJzLnVubG9ja1dpdGhIZWxwZXJBcHAoYWRiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7XG4gICAgdW5sb2NrVHlwZSxcbiAgICB1bmxvY2tLZXksXG4gICAgdW5sb2NrU3RyYXRlZ3ksXG4gICAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQsXG4gIH0gPSB1bmxvY2tlci52YWxpZGF0ZVVubG9ja0NhcGFiaWxpdGllcyhjYXBhYmlsaXRpZXMpO1xuICBpZiAodW5sb2NrS2V5ICYmIHVubG9ja1R5cGUgIT09IEZJTkdFUlBSSU5UX1VOTE9DS1xuICAgICAgJiYgKF8uaXNOaWwodW5sb2NrU3RyYXRlZ3kpIHx8IF8udG9Mb3dlcih1bmxvY2tTdHJhdGVneSkgPT09ICdsb2Nrc2V0dGluZ3MnKVxuICAgICAgJiYgYXdhaXQgYWRiLmlzTG9ja01hbmFnZW1lbnRTdXBwb3J0ZWQoKSkge1xuICAgIGF3YWl0IHVubG9ja2VyLmZhc3RVbmxvY2soYWRiLCB7XG4gICAgICBjcmVkZW50aWFsOiB1bmxvY2tLZXksXG4gICAgICBjcmVkZW50aWFsVHlwZTogdG9DcmVkZW50aWFsVHlwZSh1bmxvY2tUeXBlKSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1bmxvY2tNZXRob2QgPSB7XG4gICAgICBbUElOX1VOTE9DS106IHVubG9ja2VyLnBpblVubG9jayxcbiAgICAgIFtQSU5fVU5MT0NLX0tFWV9FVkVOVF06IHVubG9ja2VyLnBpblVubG9ja1dpdGhLZXlFdmVudCxcbiAgICAgIFtQQVNTV09SRF9VTkxPQ0tdOiB1bmxvY2tlci5wYXNzd29yZFVubG9jayxcbiAgICAgIFtQQVRURVJOX1VOTE9DS106IHVubG9ja2VyLnBhdHRlcm5VbmxvY2ssXG4gICAgICBbRklOR0VSUFJJTlRfVU5MT0NLXTogdW5sb2NrZXIuZmluZ2VycHJpbnRVbmxvY2ssXG4gICAgfVt1bmxvY2tUeXBlXTtcbiAgICBhd2FpdCB1bmxvY2tNZXRob2QoYWRiLCBkcml2ZXIsIGNhcGFiaWxpdGllcyk7XG4gIH1cbiAgYXdhaXQgaGVscGVycy52ZXJpZnlVbmxvY2soYWRiLCB1bmxvY2tTdWNjZXNzVGltZW91dCk7XG59O1xuXG5oZWxwZXJzLnZlcmlmeVVubG9jayA9IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeVVubG9jayAoYWRiLCB0aW1lb3V0TXMgPSBudWxsKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiAhKGF3YWl0IGFkYi5pc1NjcmVlbkxvY2tlZCgpKSwge1xuICAgICAgd2FpdE1zOiB0aW1lb3V0TXMgPz8gMjAwMCxcbiAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoaWduKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGV2aWNlIGhhcyBmYWlsZWQgdG8gYmUgdW5sb2NrZWQnKTtcbiAgfVxuICBsb2dnZXIuaW5mbygnVGhlIGRldmljZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdW5sb2NrZWQnKTtcbn07XG5cbmhlbHBlcnMuaW5pdERldmljZSA9IGFzeW5jIGZ1bmN0aW9uIGluaXREZXZpY2UgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgc2tpcERldmljZUluaXRpYWxpemF0aW9uLFxuICAgIGxvY2FsZSxcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhbGVTY3JpcHQsXG4gICAgdW5pY29kZUtleWJvYXJkLFxuICAgIGRpc2FibGVXaW5kb3dBbmltYXRpb24sXG4gICAgc2tpcFVubG9jayxcbiAgICBtb2NrTG9jYXRpb25BcHAsXG4gICAgc2tpcExvZ2NhdENhcHR1cmUsXG4gICAgbG9nY2F0Rm9ybWF0LFxuICAgIGxvZ2NhdEZpbHRlclNwZWNzLFxuICB9ID0gb3B0cztcblxuICBpZiAoc2tpcERldmljZUluaXRpYWxpemF0aW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYCdza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24nIGlzIHNldC4gU2tpcHBpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLmApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFkYi53YWl0Rm9yRGV2aWNlKCk7XG4gICAgLy8gcHVzaFNldHRpbmdzQXBwIHJlcXVpcmVkIGJlZm9yZSBjYWxsaW5nIGVuc3VyZURldmljZUxvY2FsZSBmb3IgQVBJIExldmVsIDI0K1xuXG4gICAgLy8gU29tZSBmZWF0dXJlIHN1Y2ggYXMgbG9jYXRpb24vd2lmaSBhcmUgbm90IG5lY2Vzc2FyeSBmb3IgYWxsIHVzZXJzLFxuICAgIC8vIGJ1dCB0aGV5IHJlcXVpcmUgdGhlIHNldHRpbmdzIGFwcC4gU28sIHRyeSB0byBjb25maWd1cmUgaXQgd2hpbGUgQXBwaXVtXG4gICAgLy8gZG9lcyBub3QgdGhyb3cgZXJyb3IgZXZlbiBpZiB0aGV5IGZhaWwuXG4gICAgY29uc3Qgc2hvdWxkVGhyb3dFcnJvciA9IGxhbmd1YWdlXG4gICAgICB8fCBsb2NhbGVcbiAgICAgIHx8IGxvY2FsZVNjcmlwdFxuICAgICAgfHwgdW5pY29kZUtleWJvYXJkXG4gICAgICB8fCBkaXNhYmxlV2luZG93QW5pbWF0aW9uXG4gICAgICB8fCAhc2tpcFVubG9jaztcbiAgICBhd2FpdCBoZWxwZXJzLnB1c2hTZXR0aW5nc0FwcChhZGIsIHNob3VsZFRocm93RXJyb3IpO1xuICB9XG5cbiAgaWYgKCFoZWxwZXJzLmlzRW11bGF0b3IoYWRiLCBvcHRzKSAmJiAobW9ja0xvY2F0aW9uQXBwIHx8IF8uaXNVbmRlZmluZWQobW9ja0xvY2F0aW9uQXBwKSkpIHtcbiAgICBhd2FpdCBoZWxwZXJzLnNldE1vY2tMb2NhdGlvbkFwcChhZGIsIG1vY2tMb2NhdGlvbkFwcCB8fCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEKTtcbiAgfVxuXG4gIGlmIChsYW5ndWFnZSB8fCBsb2NhbGUpIHtcbiAgICBhd2FpdCBoZWxwZXJzLmVuc3VyZURldmljZUxvY2FsZShhZGIsIGxhbmd1YWdlLCBsb2NhbGUsIGxvY2FsZVNjcmlwdCk7XG4gIH1cblxuICBpZiAoc2tpcExvZ2NhdENhcHR1cmUpIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBMb2djYXRDYXB0dXJlJyBpcyBzZXQuIFNraXBwaW5nIHN0YXJ0aW5nIGxvZ2NhdCBjYXB0dXJlLmApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFkYi5zdGFydExvZ2NhdCh7XG4gICAgICBmb3JtYXQ6IGxvZ2NhdEZvcm1hdCxcbiAgICAgIGZpbHRlclNwZWNzOiBsb2djYXRGaWx0ZXJTcGVjcyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh1bmljb2RlS2V5Ym9hcmQpIHtcbiAgICByZXR1cm4gYXdhaXQgaGVscGVycy5pbml0VW5pY29kZUtleWJvYXJkKGFkYik7XG4gIH1cbn07XG5cbmhlbHBlcnMucmVtb3ZlTnVsbFByb3BlcnRpZXMgPSBmdW5jdGlvbiByZW1vdmVOdWxsUHJvcGVydGllcyAob2JqKSB7XG4gIGZvciAobGV0IGtleSBvZiBfLmtleXMob2JqKSkge1xuICAgIGlmIChfLmlzTnVsbChvYmpba2V5XSkgfHwgXy5pc1VuZGVmaW5lZChvYmpba2V5XSkpIHtcbiAgICAgIGRlbGV0ZSBvYmpba2V5XTtcbiAgICB9XG4gIH1cbn07XG5cbmhlbHBlcnMudHJ1bmNhdGVEZWNpbWFscyA9IGZ1bmN0aW9uIHRydW5jYXRlRGVjaW1hbHMgKG51bWJlciwgZGlnaXRzKSB7XG4gIGxldCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIGRpZ2l0cyksXG4gICAgICBhZGp1c3RlZE51bSA9IG51bWJlciAqIG11bHRpcGxpZXIsXG4gICAgICB0cnVuY2F0ZWROdW0gPSBNYXRoW2FkanVzdGVkTnVtIDwgMCA/ICdjZWlsJyA6ICdmbG9vciddKGFkanVzdGVkTnVtKTtcblxuICByZXR1cm4gdHJ1bmNhdGVkTnVtIC8gbXVsdGlwbGllcjtcbn07XG5cbmhlbHBlcnMuaXNDaHJvbWVCcm93c2VyID0gZnVuY3Rpb24gaXNDaHJvbWVCcm93c2VyIChicm93c2VyKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKE9iamVjdC5rZXlzKENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkpLCAoYnJvd3NlciB8fCAnJykudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5oZWxwZXJzLmdldENocm9tZVBrZyA9IGZ1bmN0aW9uIGdldENocm9tZVBrZyAoYnJvd3Nlcikge1xuICByZXR1cm4gQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWVticm93c2VyLnRvTG93ZXJDYXNlKCldIHx8IENIUk9NRV9CUk9XU0VSX1BBQ0tBR0VfQUNUSVZJVFkuZGVmYXVsdDtcbn07XG5cbmhlbHBlcnMucmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzID0gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQWxsU2Vzc2lvbldlYlNvY2tldEhhbmRsZXJzIChzZXJ2ZXIsIHNlc3Npb25JZCkge1xuICBpZiAoIXNlcnZlciB8fCAhXy5pc0Z1bmN0aW9uKHNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBhY3RpdmVIYW5kbGVycyA9IGF3YWl0IHNlcnZlci5nZXRXZWJTb2NrZXRIYW5kbGVycyhzZXNzaW9uSWQpO1xuICBmb3IgKGNvbnN0IHBhdGhuYW1lIG9mIF8ua2V5cyhhY3RpdmVIYW5kbGVycykpIHtcbiAgICBhd2FpdCBzZXJ2ZXIucmVtb3ZlV2ViU29ja2V0SGFuZGxlcihwYXRobmFtZSk7XG4gIH1cbn07XG5cbi8qKlxuICogVGFrZXMgYSBkZXNpcmVkIGNhcGFiaWxpdHkgYW5kIHRyaWVzIHRvIEpTT04ucGFyc2UgaXQgYXMgYW4gYXJyYXksXG4gKiBhbmQgZWl0aGVyIHJldHVybnMgdGhlIHBhcnNlZCBhcnJheSBvciBhIHNpbmdsZXRvbiBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gY2FwIEEgZGVzaXJlZCBjYXBhYmlsaXR5XG4gKi9cbmhlbHBlcnMucGFyc2VBcnJheSA9IGZ1bmN0aW9uIHBhcnNlQXJyYXkgKGNhcCkge1xuICBsZXQgcGFyc2VkQ2FwcztcbiAgdHJ5IHtcbiAgICBwYXJzZWRDYXBzID0gSlNPTi5wYXJzZShjYXApO1xuICB9IGNhdGNoIChpZ24pIHsgfVxuXG4gIGlmIChfLmlzQXJyYXkocGFyc2VkQ2FwcykpIHtcbiAgICByZXR1cm4gcGFyc2VkQ2FwcztcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKGNhcCkpIHtcbiAgICByZXR1cm4gW2NhcF07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYG11c3QgcHJvdmlkZSBhIHN0cmluZyBvciBKU09OIEFycmF5OyByZWNlaXZlZCAke2NhcH1gKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgZGVzaXJlZCBjYXBhYmlsaXRpZXMuIFJldHVybnMgdHJ1ZSBpZiBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKlxuICogQHBhcmFtIHsqfSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgY2FwYWJpbGl0eSBpcyB2YWxpZFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjYXBzIGhhcyBpbnZhbGlkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy52YWxpZGF0ZURlc2lyZWRDYXBzID0gZnVuY3Rpb24gdmFsaWRhdGVEZXNpcmVkQ2FwcyAoY2Fwcykge1xuICBpZiAoY2Fwcy5icm93c2VyTmFtZSkge1xuICAgIGlmIChjYXBzLmFwcCkge1xuICAgICAgLy8gd2FybiBpZiB0aGUgY2FwYWJpbGl0aWVzIGhhdmUgYm90aCBgYXBwYCBhbmQgYGJyb3dzZXIsIGFsdGhvdWdoIHRoaXMgaXMgY29tbW9uIHdpdGggc2VsZW5pdW0gZ3JpZFxuICAgICAgbG9nZ2VyLndhcm4oYFRoZSBkZXNpcmVkIGNhcGFiaWxpdGllcyBzaG91bGQgZ2VuZXJhbGx5IG5vdCBpbmNsdWRlIGJvdGggYW4gJ2FwcCcgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgICBpZiAoY2Fwcy5hcHBQYWNrYWdlKSB7XG4gICAgICBsb2dnZXIuZXJyb3JBbmRUaHJvdyhgVGhlIGRlc2lyZWQgc2hvdWxkIG5vdCBpbmNsdWRlIGJvdGggb2YgYW4gJ2FwcFBhY2thZ2UnIGFuZCBhICdicm93c2VyTmFtZSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2Fwcy51bmluc3RhbGxPdGhlclBhY2thZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VBcnJheShjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBDb3VsZCBub3QgcGFyc2UgXCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzXCIgY2FwYWJpbGl0eTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkanVzdCB0aGUgY2FwYWJpbGl0aWVzIGZvciBhIGJyb3dzZXIgc2Vzc2lvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYXBzIC0gQ3VycmVudCBjYXBhYmlsaXRpZXMgb2JqZWN0XG4gKiAhISEgVGhlIG9iamVjdCBpcyBtdXRhdGVkIGJ5IHRoaXMgbWV0aG9kIGNhbGwgISEhXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBwb3NzaWJseSBtdXRhdGVkIGBvcHRzYCBpbnN0YW5jZS5cbiAqIE5vIG11dGF0aW9uIGlzIGhhcHBlbmluZyBpcyB0aGUgY3VycmVudCBzZXNzaW9uIGlmXG4gKiBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvdmlkZWQuXG4gKi9cbmhlbHBlcnMuYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzID0gZnVuY3Rpb24gYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIChjYXBzID0ge30pIHtcbiAgY29uc3QgeyBicm93c2VyTmFtZSB9ID0gY2FwcztcbiAgbG9nZ2VyLmluZm8oYFRoZSBjdXJyZW50IHNlc3Npb24gaXMgY29uc2lkZXJlZCBicm93c2VyLWJhc2VkYCk7XG4gIGxvZ2dlci5pbmZvKGBTdXBwb3J0ZWQgYnJvd3NlciBuYW1lczogJHtKU09OLnN0cmluZ2lmeShfLmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSkpfWApO1xuICBpZiAoY2Fwcy5hcHBQYWNrYWdlIHx8IGNhcHMuYXBwQWN0aXZpdHkpIHtcbiAgICBsb2dnZXIuaW5mbyhgTm90IG92ZXJyaWRpbmcgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXR5IHZhbHVlcyBmb3IgJyR7YnJvd3Nlck5hbWV9JyBgICtcbiAgICAgICdiZWNhdXNlIHNvbWUgb2YgdGhlbSBoYXZlIGJlZW4gYWxyZWFkeSBwcm92aWRlZCcpO1xuICAgIHJldHVybiBjYXBzO1xuICB9XG5cbiAgY29uc3Qge3BrZywgYWN0aXZpdHl9ID0gdGhpcy5nZXRDaHJvbWVQa2coYnJvd3Nlck5hbWUpO1xuICBjYXBzLmFwcFBhY2thZ2UgPSBwa2c7XG4gIGNhcHMuYXBwQWN0aXZpdHkgPSBhY3Rpdml0eTtcbiAgbG9nZ2VyLmluZm8oYGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0aWVzIGhhdmUgYmVlbiBhdXRvbWF0aWNhbGx5IHNldCB0byAke3BrZ30vJHthY3Rpdml0eX0gYCArXG4gICAgYGZvciAnJHticm93c2VyTmFtZX0nYCk7XG4gIGxvZ2dlci5pbmZvKGBDb25zaWRlciBjaGFuZ2luZyB0aGUgYnJvd3Nlck5hbWUgdG8gdGhlIG9uZSBmcm9tIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBicm93c2VyIG5hbWVzIGAgK1xuICAgIGBvciBwcm92aWRlIGN1c3RvbSBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGlmIHRoZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIG9uZXMgZG8gYCArXG4gICAgYG5vdCBtYWtlIHNlbnNlYCk7XG4gIHJldHVybiBjYXBzO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBkZXZpY2UgdW5kZXIgdGVzdCBpcyBhbiBlbXVsYXRvclxuICpcbiAqIEBwYXJhbSB7QURCfSBhZGIgLSBhcHBpdW0tYWRiIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIGRyaXZlciBvcHRpb25zIG1hcHBpbmdcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGRldmljZSBpcyBhbiBBbmRyb2lkIGVtdWxhdG9yXG4gKi9cbmhlbHBlcnMuaXNFbXVsYXRvciA9IGZ1bmN0aW9uIGlzRW11bGF0b3IgKGFkYiwgb3B0cykge1xuICBjb25zdCBwb3NzaWJsZU5hbWVzID0gW29wdHMudWRpZCwgYWRiPy5jdXJEZXZpY2VJZF07XG4gIHJldHVybiAhIW9wdHMuYXZkIHx8IHBvc3NpYmxlTmFtZXMuc29tZSgoeCkgPT4gRU1VTEFUT1JfUEFUVEVSTi50ZXN0KHgpKTtcbn07XG5cbmhlbHBlcnMuYm9vdHN0cmFwID0gQm9vdHN0cmFwO1xuaGVscGVycy51bmxvY2tlciA9IHVubG9ja2VyO1xuXG5leHBvcnQgeyBoZWxwZXJzLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCBBUFBfU1RBVEUsIHByZXBhcmVBdmRBcmdzLCBlbnN1cmVOZXR3b3JrU3BlZWQgfTtcbmV4cG9ydCBkZWZhdWx0IGhlbHBlcnM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7Ozs7OztBQUVBLE1BQU1BLHVCQUF1QixHQUFHLEtBQWhDO0FBRUEsTUFBTUMsK0JBQStCLEdBQUc7RUFDdENDLE1BQU0sRUFBRTtJ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
904
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2FuZHJvaWQtaGVscGVycy5qcyIsIm5hbWVzIjpbIlBBQ0tBR0VfSU5TVEFMTF9USU1FT1VUIiwiQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSIsImNocm9tZSIsInBrZyIsImFjdGl2aXR5IiwiY2hyb21pdW0iLCJjaHJvbWViZXRhIiwiYnJvd3NlciIsImRlZmF1bHQiLCJTRVRUSU5HU19IRUxQRVJfUEtHX0lEIiwiU0VUVElOR1NfSEVMUEVSX1VOTE9DS19BQ1RJVklUWSIsIkVNVUxBVE9SX1BBVFRFUk4iLCJBUFBfU1RBVEUiLCJPYmplY3QiLCJmcmVlemUiLCJOT1RfSU5TVEFMTEVEIiwiTk9UX1JVTk5JTkciLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJlbnN1cmVOZXR3b3JrU3BlZWQiLCJhZGIiLCJuZXR3b3JrU3BlZWQiLCJfIiwidmFsdWVzIiwiTkVUV09SS19TUEVFRCIsImluY2x1ZGVzIiwibG9nZ2VyIiwid2FybiIsIkZVTEwiLCJwcmVwYXJlQXZkQXJncyIsIm9wdHMiLCJpc0hlYWRsZXNzIiwiYXZkQXJncyIsInJlc3VsdCIsImlzQXJyYXkiLCJwdXNoIiwidXRpbCIsInNoZWxsUGFyc2UiLCJ0b0NyZWRlbnRpYWxUeXBlIiwidW5sb2NrVHlwZSIsIlBJTl9VTkxPQ0siLCJQSU5fVU5MT0NLX0tFWV9FVkVOVCIsIlBBU1NXT1JEX1VOTE9DSyIsIlBBVFRFUk5fVU5MT0NLIiwiRXJyb3IiLCJoZWxwZXJzIiwiY3JlYXRlQmFzZUFEQiIsImFkYlBvcnQiLCJzdXBwcmVzc0tpbGxTZXJ2ZXIiLCJyZW1vdGVBZGJIb3N0IiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFkYkV4ZWNUaW1lb3V0IiwidXNlS2V5c3RvcmUiLCJrZXlzdG9yZVBhdGgiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5QWxpYXMiLCJrZXlQYXNzd29yZCIsInJlbW90ZUFwcHNDYWNoZUxpbWl0IiwiYnVpbGRUb29sc1ZlcnNpb24iLCJhbGxvd09mZmxpbmVEZXZpY2VzIiwiYWxsb3dEZWxheUFkYiIsIkFEQiIsImNyZWF0ZUFEQiIsInByZXBhcmVFbXVsYXRvciIsImF2ZCIsImF2ZEVudiIsImVudiIsImxhbmd1YWdlIiwibG9jYWxlIiwiY291bnRyeSIsImF2ZExhdW5jaFRpbWVvdXQiLCJsYXVuY2hUaW1lb3V0IiwiYXZkUmVhZHlUaW1lb3V0IiwicmVhZHlUaW1lb3V0IiwiYXZkTmFtZSIsInJlcGxhY2UiLCJydW5uaW5nQVZEIiwiZ2V0UnVubmluZ0FWRCIsImFyZ3MiLCJkZWJ1ZyIsImtpbGxFbXVsYXRvciIsImxhdW5jaEFWRCIsImVuc3VyZURldmljZUxvY2FsZSIsInNjcmlwdCIsImlzU3RyaW5nIiwic2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5IiwiZW5zdXJlQ3VycmVudExvY2FsZSIsIm1lc3NhZ2UiLCJnZXREZXZpY2VJbmZvRnJvbUNhcHMiLCJ1ZGlkIiwiZW1Qb3J0IiwiY3VyRGV2aWNlSWQiLCJlbXVsYXRvclBvcnQiLCJpbmZvIiwiZGV2aWNlcyIsImdldERldmljZXNXaXRoUmV0cnkiLCJtYXAiLCJlcnJvckFuZFRocm93IiwiZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyIsInBsYXRmb3JtVmVyc2lvbiIsInRyaW0iLCJzZW12ZXIiLCJjb2VyY2UiLCJhdmFpbERldmljZXMiLCJwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUiLCJkZXZpY2UiLCJzZXREZXZpY2VJZCIsInJhd0RldmljZU9TIiwiZ2V0UGxhdGZvcm1WZXJzaW9uIiwiZGV2aWNlT1MiLCJib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQiLCJ2YWxpZCIsImJvdGhWZXJzaW9uc0FyZVN0cmluZ3MiLCJ2ZXJzaW9uIiwidG9Mb3dlciIsIm1ham9yIiwibWlub3IiLCJndCIsImtleXMiLCJqb2luIiwic2V0RW11bGF0b3JQb3J0IiwidmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyIsImtleSIsIm5hbWUiLCJtYXRjaCIsImV4ZWMiLCJpbmRleCIsInN1YnN0cmluZyIsImdldExhdW5jaEluZm8iLCJhcHAiLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXRBY3Rpdml0eSIsImFwa1BhY2thZ2UiLCJhcGtBY3Rpdml0eSIsInBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdCIsInJlc2V0QXBwIiwiZmFzdFJlc2V0IiwiZnVsbFJlc2V0IiwiYW5kcm9pZEluc3RhbGxUaW1lb3V0IiwiYXV0b0dyYW50UGVybWlzc2lvbnMiLCJhbGxvd1Rlc3RQYWNrYWdlcyIsImlzSW5zdGFsbGVkIiwiaXNBcHBJbnN0YWxsZWQiLCJmb3JjZVN0b3AiLCJpZ24iLCJvdXRwdXQiLCJjbGVhciIsInRvTG93ZXJDYXNlIiwiZ3JhbnRBbGxQZXJtaXNzaW9ucyIsImVycm9yIiwidW5pbnN0YWxsQXBrIiwiaW5zdGFsbCIsImdyYW50UGVybWlzc2lvbnMiLCJ0aW1lb3V0IiwiaW5zdGFsbEFwayIsImVuZm9yY2VBcHBJbnN0YWxsIiwiYXBwU3RhdGUiLCJ3YXNVbmluc3RhbGxlZCIsImluc3RhbGxPclVwZ3JhZGUiLCJlbmZvcmNlQ3VycmVudEJ1aWxkIiwiaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHAiLCJBUFBfSU5TVEFMTF9TVEFURSIsImluc3RhbGxPdGhlckFwa3MiLCJvdGhlckFwcHMiLCJCIiwiYWxsIiwib3RoZXJBcHAiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYXBwUGFja2FnZXMiLCJmaWx0ZXJQYWNrYWdlcyIsImdldFRoaXJkUGFydHlQYWNrYWdlcyIsInBhY2thZ2VzU3RyaW5nIiwic2hlbGwiLCJhcHBQYWNrYWdlc0FycmF5Iiwic3BsaXQiLCJFT0wiLCJkaWZmZXJlbmNlIiwiZXJyIiwiaW5pdFVuaWNvZGVLZXlib2FyZCIsImRlZmF1bHRJTUUiLCJhcHBpdW1JTUUiLCJlbmFibGVJTUUiLCJzZXRJTUUiLCJzZXRNb2NrTG9jYXRpb25BcHAiLCJnZXRBcGlMZXZlbCIsImluc3RhbGxIZWxwZXJBcHAiLCJhcGtQYXRoIiwicGFja2FnZUlkIiwicmV0cnkiLCJyZXRyeUluc3RhbGxIZWxwZXJBcHAiLCJwdXNoU2V0dGluZ3NBcHAiLCJ0aHJvd0Vycm9yIiwic2V0dGluZ3NBcGtQYXRoIiwicHJvY2Vzc0V4aXN0cyIsInBlcm1zIiwieCIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJwdXNoU3RyaW5ncyIsInJlbW90ZURpciIsInN0cmluZ3NKc29uIiwicmVtb3RlRmlsZSIsInBhdGgiLCJwb3NpeCIsInJlc29sdmUiLCJyaW1yYWYiLCJwdWxsQXBrIiwidG1wRGlyIiwiaXNFbXB0eSIsImZzIiwiZXhpc3RzIiwic3RyaW5nc1RtcERpciIsImFwa1N0cmluZ3MiLCJsb2NhbFBhdGgiLCJleHRyYWN0U3RyaW5nc0Zyb21BcGsiLCJ1bmxvY2tXaXRoSGVscGVyQXBwIiwiZmlyc3RSdW4iLCJsYXVuY2hIZWxwZXIiLCJpc1NjcmVlbkxvY2tlZCIsImUiLCJkZWxheSIsInVubG9jayIsImRyaXZlciIsImNhcGFiaWxpdGllcyIsInVubG9ja0tleSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiLCJ1bmxvY2tlciIsInZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzIiwiRklOR0VSUFJJTlRfVU5MT0NLIiwiaXNOaWwiLCJpc0xvY2tNYW5hZ2VtZW50U3VwcG9ydGVkIiwiZmFzdFVubG9jayIsImNyZWRlbnRpYWwiLCJjcmVkZW50aWFsVHlwZSIsInVubG9ja01ldGhvZCIsInBpblVubG9jayIsInBpblVubG9ja1dpdGhLZXlFdmVudCIsInBhc3N3b3JkVW5sb2NrIiwicGF0dGVyblVubG9jayIsImZpbmdlcnByaW50VW5sb2NrIiwidmVyaWZ5VW5sb2NrIiwidGltZW91dE1zIiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJpbml0RGV2aWNlIiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwibG9jYWxlU2NyaXB0IiwidW5pY29kZUtleWJvYXJkIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsInNraXBVbmxvY2siLCJtb2NrTG9jYXRpb25BcHAiLCJza2lwTG9nY2F0Q2FwdHVyZSIsImxvZ2NhdEZvcm1hdCIsImxvZ2NhdEZpbHRlclNwZWNzIiwid2FpdEZvckRldmljZSIsInNob3VsZFRocm93RXJyb3IiLCJpc0VtdWxhdG9yIiwiaXNVbmRlZmluZWQiLCJzdGFydExvZ2NhdCIsImZvcm1hdCIsImZpbHRlclNwZWNzIiwicmVtb3ZlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJpc051bGwiLCJ0cnVuY2F0ZURlY2ltYWxzIiwibnVtYmVyIiwiZGlnaXRzIiwibXVsdGlwbGllciIsIk1hdGgiLCJwb3ciLCJhZGp1c3RlZE51bSIsInRydW5jYXRlZE51bSIsImlzQ2hyb21lQnJvd3NlciIsImdldENocm9tZVBrZyIsInJlbW92ZUFsbFNlc3Npb25XZWJTb2NrZXRIYW5kbGVycyIsInNlcnZlciIsInNlc3Npb25JZCIsImlzRnVuY3Rpb24iLCJnZXRXZWJTb2NrZXRIYW5kbGVycyIsImFjdGl2ZUhhbmRsZXJzIiwicGF0aG5hbWUiLCJyZW1vdmVXZWJTb2NrZXRIYW5kbGVyIiwicGFyc2VBcnJheSIsImNhcCIsInBhcnNlZENhcHMiLCJKU09OIiwicGFyc2UiLCJ2YWxpZGF0ZURlc2lyZWRDYXBzIiwiY2FwcyIsImJyb3dzZXJOYW1lIiwiYWRqdXN0QnJvd3NlclNlc3Npb25DYXBzIiwic3RyaW5naWZ5IiwicG9zc2libGVOYW1lcyIsInNvbWUiLCJ0ZXN0IiwiYm9vdHN0cmFwIiwiQm9vdHN0cmFwIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2FuZHJvaWQtaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXRyeSwgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZnMsIHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBwYXRoIGFzIHNldHRpbmdzQXBrUGF0aCB9IGZyb20gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5pbXBvcnQgQm9vdHN0cmFwIGZyb20gJy4vYm9vdHN0cmFwJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBBREIgZnJvbSAnYXBwaXVtLWFkYic7XG5pbXBvcnQge1xuICBkZWZhdWx0IGFzIHVubG9ja2VyLCBQSU5fVU5MT0NLLCBQSU5fVU5MT0NLX0tFWV9FVkVOVCxcbiAgUEFTU1dPUkRfVU5MT0NLLCBQQVRURVJOX1VOTE9DSywgRklOR0VSUFJJTlRfVU5MT0NLXG59IGZyb20gJy4vdW5sb2NrLWhlbHBlcnMnO1xuaW1wb3J0IHsgRU9MIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG5jb25zdCBQQUNLQUdFX0lOU1RBTExfVElNRU9VVCA9IDkwMDAwOyAvLyBtaWxsaXNlY29uZHNcbi8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9jaHJvbWUvYnJvd3Nlci9kZXZ0b29scy9kZXZpY2UvYW5kcm9pZF9kZXZpY2VfaW5mb19xdWVyeS5jY1xuY29uc3QgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSA9IHtcbiAgY2hyb21lOiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuY2hyb21lJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbiAgY2hyb21pdW06IHtcbiAgICBwa2c6ICdvcmcuY2hyb21pdW0uY2hyb21lLnNoZWxsJyxcbiAgICBhY3Rpdml0eTogJy5DaHJvbWVTaGVsbEFjdGl2aXR5JyxcbiAgfSxcbiAgY2hyb21lYmV0YToge1xuICAgIHBrZzogJ2NvbS5jaHJvbWUuYmV0YScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gIGJyb3dzZXI6IHtcbiAgICBwa2c6ICdjb20uYW5kcm9pZC5icm93c2VyJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5hbmRyb2lkLmJyb3dzZXIuQnJvd3NlckFjdGl2aXR5JyxcbiAgfSxcbiAgJ2Nocm9taXVtLWJyb3dzZXInOiB7XG4gICAgcGtnOiAnb3JnLmNocm9taXVtLmNocm9tZScsXG4gICAgYWN0aXZpdHk6ICdjb20uZ29vZ2xlLmFuZHJvaWQuYXBwcy5jaHJvbWUuTWFpbicsXG4gIH0sXG4gICdjaHJvbWl1bS13ZWJ2aWV3Jzoge1xuICAgIHBrZzogJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsJyxcbiAgICBhY3Rpdml0eTogJ29yZy5jaHJvbWl1bS53ZWJ2aWV3X3NoZWxsLldlYlZpZXdCcm93c2VyQWN0aXZpdHknLFxuICB9LFxuICBkZWZhdWx0OiB7XG4gICAgcGtnOiAnY29tLmFuZHJvaWQuY2hyb21lJyxcbiAgICBhY3Rpdml0eTogJ2NvbS5nb29nbGUuYW5kcm9pZC5hcHBzLmNocm9tZS5NYWluJyxcbiAgfSxcbn07XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfUEtHX0lEID0gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfVU5MT0NLX0FDVElWSVRZID0gJy5VbmxvY2snO1xuY29uc3QgRU1VTEFUT1JfUEFUVEVSTiA9IC9cXGJlbXVsYXRvclxcYi9pO1xuLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBpbiBzeW5jIHdpdGhcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3hjdGVzdC94Y3VpYXBwbGljYXRpb25zdGF0ZS94Y3VpYXBwbGljYXRpb25zdGF0ZXJ1bm5pbmdiYWNrZ3JvdW5kP2xhbmd1YWdlPW9iamNcbmNvbnN0IEFQUF9TVEFURSA9IE9iamVjdC5mcmVlemUoe1xuICBOT1RfSU5TVEFMTEVEOiAwLFxuICBOT1RfUlVOTklORzogMSxcbiAgUlVOTklOR19JTl9CQUNLR1JPVU5EOiAzLFxuICBSVU5OSU5HX0lOX0ZPUkVHUk9VTkQ6IDRcbn0pO1xuXG5cbmZ1bmN0aW9uIGVuc3VyZU5ldHdvcmtTcGVlZCAoYWRiLCBuZXR3b3JrU3BlZWQpIHtcbiAgaWYgKF8udmFsdWVzKGFkYi5ORVRXT1JLX1NQRUVEKS5pbmNsdWRlcyhuZXR3b3JrU3BlZWQpKSB7XG4gICAgcmV0dXJuIG5ldHdvcmtTcGVlZDtcbiAgfVxuICBsb2dnZXIud2FybihgV3JvbmcgbmV0d29yayBzcGVlZCBwYXJhbSAnJHtuZXR3b3JrU3BlZWR9JywgdXNpbmcgZGVmYXVsdDogJHthZGIuTkVUV09SS19TUEVFRC5GVUxMfS4gYCArXG4gICAgYFN1cHBvcnRlZCB2YWx1ZXM6ICR7Xy52YWx1ZXMoYWRiLk5FVFdPUktfU1BFRUQpfWApO1xuICByZXR1cm4gYWRiLk5FVFdPUktfU1BFRUQuRlVMTDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUF2ZEFyZ3MgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgbmV0d29ya1NwZWVkLFxuICAgIGlzSGVhZGxlc3MsXG4gICAgYXZkQXJncyxcbiAgfSA9IG9wdHM7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBpZiAoYXZkQXJncykge1xuICAgIGlmIChfLmlzQXJyYXkoYXZkQXJncykpIHtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmF2ZEFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCguLi4odXRpbC5zaGVsbFBhcnNlKGAke2F2ZEFyZ3N9YCkpKTtcbiAgICB9XG4gIH1cbiAgaWYgKG5ldHdvcmtTcGVlZCkge1xuICAgIHJlc3VsdC5wdXNoKCctbmV0c3BlZWQnLCBlbnN1cmVOZXR3b3JrU3BlZWQoYWRiLCBuZXR3b3JrU3BlZWQpKTtcbiAgfVxuICBpZiAoaXNIZWFkbGVzcykge1xuICAgIHJlc3VsdC5wdXNoKCctbm8td2luZG93Jyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdG9DcmVkZW50aWFsVHlwZSAodW5sb2NrVHlwZSkge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgW1BJTl9VTkxPQ0tdOiAncGluJyxcbiAgICBbUElOX1VOTE9DS19LRVlfRVZFTlRdOiAncGluJyxcbiAgICBbUEFTU1dPUkRfVU5MT0NLXTogJ3Bhc3N3b3JkJyxcbiAgICBbUEFUVEVSTl9VTkxPQ0tdOiAncGF0dGVybicsXG4gIH1bdW5sb2NrVHlwZV07XG4gIGlmIChyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgVW5sb2NrIHR5cGUgJyR7dW5sb2NrVHlwZX0nIGlzIG5vdCBrbm93bmApO1xufVxuXG5cbmNvbnN0IGhlbHBlcnMgPSB7fTtcblxuaGVscGVycy5jcmVhdGVCYXNlQURCID0gYXN5bmMgZnVuY3Rpb24gY3JlYXRlQmFzZUFEQiAob3B0cyA9IHt9KSB7XG4gIC8vIGZpbHRlciBvdXQgYW55IHVud2FudGVkIG9wdGlvbnMgc2VudCBpblxuICAvLyB0aGlzIGxpc3Qgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgQURCIHRha2VzIG1vcmUgYXJndW1lbnRzXG4gIGNvbnN0IHtcbiAgICBhZGJQb3J0LFxuICAgIHN1cHByZXNzS2lsbFNlcnZlcixcbiAgICByZW1vdGVBZGJIb3N0LFxuICAgIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQsXG4gICAgYWRiRXhlY1RpbWVvdXQsXG4gICAgdXNlS2V5c3RvcmUsXG4gICAga2V5c3RvcmVQYXRoLFxuICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAga2V5QWxpYXMsXG4gICAga2V5UGFzc3dvcmQsXG4gICAgcmVtb3RlQXBwc0NhY2hlTGltaXQsXG4gICAgYnVpbGRUb29sc1ZlcnNpb24sXG4gICAgYWxsb3dPZmZsaW5lRGV2aWNlcyxcbiAgICBhbGxvd0RlbGF5QWRiLFxuICB9ID0gb3B0cztcbiAgcmV0dXJuIGF3YWl0IEFEQi5jcmVhdGVBREIoe1xuICAgIGFkYlBvcnQsXG4gICAgc3VwcHJlc3NLaWxsU2VydmVyLFxuICAgIHJlbW90ZUFkYkhvc3QsXG4gICAgY2xlYXJEZXZpY2VMb2dzT25TdGFydCxcbiAgICBhZGJFeGVjVGltZW91dCxcbiAgICB1c2VLZXlzdG9yZSxcbiAgICBrZXlzdG9yZVBhdGgsXG4gICAga2V5c3RvcmVQYXNzd29yZCxcbiAgICBrZXlBbGlhcyxcbiAgICBrZXlQYXNzd29yZCxcbiAgICByZW1vdGVBcHBzQ2FjaGVMaW1pdCxcbiAgICBidWlsZFRvb2xzVmVyc2lvbixcbiAgICBhbGxvd09mZmxpbmVEZXZpY2VzLFxuICAgIGFsbG93RGVsYXlBZGIsXG4gIH0pO1xufTtcblxuaGVscGVycy5wcmVwYXJlRW11bGF0b3IgPSBhc3luYyBmdW5jdGlvbiBwcmVwYXJlRW11bGF0b3IgKGFkYiwgb3B0cykge1xuICBjb25zdCB7XG4gICAgYXZkLFxuICAgIGF2ZEVudjogZW52LFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZTogY291bnRyeSxcbiAgICBhdmRMYXVuY2hUaW1lb3V0OiBsYXVuY2hUaW1lb3V0LFxuICAgIGF2ZFJlYWR5VGltZW91dDogcmVhZHlUaW1lb3V0LFxuICB9ID0gb3B0cztcbiAgaWYgKCFhdmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsYXVuY2ggQVZEIHdpdGhvdXQgQVZEIG5hbWUnKTtcbiAgfVxuXG4gIGNvbnN0IGF2ZE5hbWUgPSBhdmQucmVwbGFjZSgnQCcsICcnKTtcbiAgY29uc3QgcnVubmluZ0FWRCA9IGF3YWl0IGFkYi5nZXRSdW5uaW5nQVZEKGF2ZE5hbWUpO1xuICBjb25zdCBhcmdzID0gcHJlcGFyZUF2ZEFyZ3MoYWRiLCBvcHRzKTtcbiAgaWYgKHJ1bm5pbmdBVkQpIHtcbiAgICBpZiAoYXJncy5pbmNsdWRlcygnLXdpcGUtZGF0YScpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEtpbGxpbmcgJyR7YXZkTmFtZX0nIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgd2lwZWQgYXQgc3RhcnQuYCk7XG4gICAgICBhd2FpdCBhZGIua2lsbEVtdWxhdG9yKGF2ZE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vdCBsYXVuY2hpbmcgQVZEIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBydW5uaW5nLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBhd2FpdCBhZGIubGF1bmNoQVZEKGF2ZCwge1xuICAgIGFyZ3MsXG4gICAgZW52LFxuICAgIGxhbmd1YWdlLFxuICAgIGNvdW50cnksXG4gICAgbGF1bmNoVGltZW91dCxcbiAgICByZWFkeVRpbWVvdXQsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBTZXQgYW5kIGVuc3VyZSB0aGUgbG9jYWxlIG5hbWUgb2YgdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhZGIgLSBUaGUgYWRiIG1vZHVsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBUaGUgbGFuZ3VhZ2UgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byBsb3dlciBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXsyLDh9LiBlLmcuIGVuLCBqYSA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb3VudHJ5IC0gQ291bnRyeS4gVGhlIGNvdW50cnkgKHJlZ2lvbikgZmllbGQgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB1cHBlciBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXsyfSB8IFswLTldezN9LiBlLmcuIFVTLCBKUCA6IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqIEBwYXJhbSB7P3N0cmluZ30gc2NyaXB0IC0gU2NyaXB0LiBUaGUgc2NyaXB0IGZpZWxkIGlzIGNhc2UgaW5zZW5zaXRpdmUgYnV0IExvY2FsZSBhbHdheXMgY2Fub25pY2FsaXplcyB0byB0aXRsZSBjYXNlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBbYS16QS1aXXs0fS4gZS5nLiBIYW5zIGluIHpoLUhhbnMtQ04gOiBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgaXQgZmFpbGVkIHRvIHNldCBsb2NhbGUgcHJvcGVybHlcbiAqL1xuaGVscGVycy5lbnN1cmVEZXZpY2VMb2NhbGUgPSBhc3luYyBmdW5jdGlvbiBlbnN1cmVEZXZpY2VMb2NhbGUgKGFkYiwgbGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgaWYgKCFfLmlzU3RyaW5nKGxhbmd1YWdlKSAmJiAhXy5pc1N0cmluZyhjb3VudHJ5KSkge1xuICAgIGxvZ2dlci53YXJuKGBzZXREZXZpY2VMYW5ndWFnZUNvdW50cnkgcmVxdWlyZXMgbGFuZ3VhZ2Ugb3IgY291bnRyeS5gKTtcbiAgICBsb2dnZXIud2FybihgR290IGxhbmd1YWdlOiAnJHtsYW5ndWFnZX0nIGFuZCBjb3VudHJ5OiAnJHtjb3VudHJ5fSdgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBhZGIuc2V0RGV2aWNlTGFuZ3VhZ2VDb3VudHJ5KGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQpO1xuXG4gIGlmICghYXdhaXQgYWRiLmVuc3VyZUN1cnJlbnRMb2NhbGUobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCkpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gc2NyaXB0ID8gYGxhbmd1YWdlOiAke2xhbmd1YWdlfSwgY291bnRyeTogJHtjb3VudHJ5fSBhbmQgc2NyaXB0OiAke3NjcmlwdH1gIDogYGxhbmd1YWdlOiAke2xhbmd1YWdlfSBhbmQgY291bnRyeTogJHtjb3VudHJ5fWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0ICR7bWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5nZXREZXZpY2VJbmZvRnJvbUNhcHMgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VJbmZvRnJvbUNhcHMgKG9wdHMgPSB7fSkge1xuICAvLyB3ZSBjYW4gY3JlYXRlIGEgdGhyb3dhd2F5IEFEQiBpbnN0YW5jZSBoZXJlLCBzbyB0aGVyZSBpcyBubyBkZXBlbmRlbmN5XG4gIC8vIG9uIGluc3RhbnRpYXRpbmcgb24gZWFybGllciAoYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBubyB1ZGlkKVxuICAvLyB3ZSBjYW4gb25seSB1c2UgdGhpcyBBREIgb2JqZWN0IGZvciBjb21tYW5kcyB0aGF0IHdvdWxkIG5vdCBiZSBjb25mdXNlZFxuICAvLyBpZiBtdWx0aXBsZSBkZXZpY2VzIGFyZSBjb25uZWN0ZWRcbiAgY29uc3QgYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVCYXNlQURCKG9wdHMpO1xuICBsZXQgdWRpZCA9IG9wdHMudWRpZDtcbiAgbGV0IGVtUG9ydCA9IG51bGw7XG5cbiAgLy8gYSBzcGVjaWZpYyBhdmQgbmFtZSB3YXMgZ2l2ZW4uIHRyeSB0byBpbml0aWFsaXplIHdpdGggdGhhdFxuICBpZiAob3B0cy5hdmQpIHtcbiAgICBhd2FpdCBoZWxwZXJzLnByZXBhcmVFbXVsYXRvcihhZGIsIG9wdHMpO1xuICAgIHVkaWQgPSBhZGIuY3VyRGV2aWNlSWQ7XG4gICAgZW1Qb3J0ID0gYWRiLmVtdWxhdG9yUG9ydDtcbiAgfSBlbHNlIHtcbiAgICAvLyBubyBhdmQgZ2l2ZW4uIGxldHMgdHJ5IHdoYXRldmVyJ3MgcGx1Z2dlZCBpbiBkZXZpY2VzL2VtdWxhdG9yc1xuICAgIGxvZ2dlci5pbmZvKCdSZXRyaWV2aW5nIGRldmljZSBsaXN0Jyk7XG4gICAgbGV0IGRldmljZXMgPSBhd2FpdCBhZGIuZ2V0RGV2aWNlc1dpdGhSZXRyeSgpO1xuXG4gICAgLy8gdWRpZCB3YXMgZ2l2ZW4sIGxldHMgdHJ5IHRvIGluaXQgd2l0aCB0aGF0IGRldmljZVxuICAgIGlmICh1ZGlkKSB7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoXy5tYXAoZGV2aWNlcywgJ3VkaWQnKSwgdWRpZCkpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYERldmljZSAke3VkaWR9IHdhcyBub3QgaW4gdGhlIGxpc3Qgb2YgY29ubmVjdGVkIGRldmljZXNgKTtcbiAgICAgIH1cbiAgICAgIGVtUG9ydCA9IGFkYi5nZXRQb3J0RnJvbUVtdWxhdG9yU3RyaW5nKHVkaWQpO1xuICAgIH0gZWxzZSBpZiAob3B0cy5wbGF0Zm9ybVZlcnNpb24pIHtcbiAgICAgIG9wdHMucGxhdGZvcm1WZXJzaW9uID0gYCR7b3B0cy5wbGF0Zm9ybVZlcnNpb259YC50cmltKCk7XG5cbiAgICAgIC8vIGEgcGxhdGZvcm0gdmVyc2lvbiB3YXMgZ2l2ZW4uIGxldHMgdHJ5IHRvIGZpbmQgYSBkZXZpY2Ugd2l0aCB0aGUgc2FtZSBvc1xuICAgICAgY29uc3QgcGxhdGZvcm1WZXJzaW9uID0gc2VtdmVyLmNvZXJjZShvcHRzLnBsYXRmb3JtVmVyc2lvbikgfHwgb3B0cy5wbGF0Zm9ybVZlcnNpb247XG4gICAgICBsb2dnZXIuaW5mbyhgTG9va2luZyBmb3IgYSBkZXZpY2Ugd2l0aCBBbmRyb2lkICcke3BsYXRmb3JtVmVyc2lvbn0nYCk7XG5cbiAgICAgIC8vIGluIGNhc2Ugd2UgZmFpbCB0byBmaW5kIHNvbWV0aGluZywgZ2l2ZSB0aGUgdXNlciBhIHVzZWZ1bCBsb2cgdGhhdCBoYXNcbiAgICAgIC8vIHRoZSBkZXZpY2UgdWRpZHMgYW5kIG9zIHZlcnNpb25zIHNvIHRoZXkga25vdyB3aGF0J3MgYXZhaWxhYmxlXG4gICAgICBjb25zdCBhdmFpbERldmljZXMgPSBbXTtcbiAgICAgIGxldCBwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgPSBudWxsO1xuICAgICAgLy8gZmlyc3QgdHJ5IHN0YXJ0ZWQgZGV2aWNlcy9lbXVsYXRvcnNcbiAgICAgIGZvciAoY29uc3QgZGV2aWNlIG9mIGRldmljZXMpIHtcbiAgICAgICAgLy8gZGlyZWN0IGFkYiBjYWxscyB0byB0aGUgc3BlY2lmaWMgZGV2aWNlXG4gICAgICAgIGF3YWl0IGFkYi5zZXREZXZpY2VJZChkZXZpY2UudWRpZCk7XG4gICAgICAgIGNvbnN0IHJhd0RldmljZU9TID0gYXdhaXQgYWRiLmdldFBsYXRmb3JtVmVyc2lvbigpO1xuICAgICAgICAvLyBUaGUgZGV2aWNlIE9TIGNvdWxkIGVpdGhlciBiZSBhIG51bWJlciwgbGlrZSBgNi4wYFxuICAgICAgICAvLyBvciBhbiBhYmJyZXZpYXRpb24sIGxpa2UgYFJgXG4gICAgICAgIGF2YWlsRGV2aWNlcy5wdXNoKGAke2RldmljZS51ZGlkfSAoJHtyYXdEZXZpY2VPU30pYCk7XG4gICAgICAgIGNvbnN0IGRldmljZU9TID0gc2VtdmVyLmNvZXJjZShyYXdEZXZpY2VPUykgfHwgcmF3RGV2aWNlT1M7XG4gICAgICAgIGlmICghZGV2aWNlT1MpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJvdGhWZXJzaW9uc0NhbkJlQ29lcmNlZCA9IHNlbXZlci52YWxpZChkZXZpY2VPUykgJiYgc2VtdmVyLnZhbGlkKHBsYXRmb3JtVmVyc2lvbik7XG4gICAgICAgIGNvbnN0IGJvdGhWZXJzaW9uc0FyZVN0cmluZ3MgPSBfLmlzU3RyaW5nKGRldmljZU9TKSAmJiBfLmlzU3RyaW5nKHBsYXRmb3JtVmVyc2lvbik7XG4gICAgICAgIGlmIChib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQgJiYgZGV2aWNlT1MudmVyc2lvbiA9PT0gcGxhdGZvcm1WZXJzaW9uLnZlcnNpb25cbiAgICAgICAgICAgIHx8IGJvdGhWZXJzaW9uc0FyZVN0cmluZ3MgJiYgXy50b0xvd2VyKGRldmljZU9TKSA9PT0gXy50b0xvd2VyKHBsYXRmb3JtVmVyc2lvbikpIHtcbiAgICAgICAgICAvLyBHb3QgYW4gZXhhY3QgbWF0Y2ggLSBwcm9jZWVkIGltbWVkaWF0ZWx5XG4gICAgICAgICAgdWRpZCA9IGRldmljZS51ZGlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKCFib3RoVmVyc2lvbnNDYW5CZUNvZXJjZWQpIHtcbiAgICAgICAgICAvLyBUaGVyZSBpcyBubyBwb2ludCB0byBjaGVjayBmb3IgcGFydGlhbCBtYXRjaCBpZiBlaXRoZXIgb2YgdmVyc2lvbiBudW1iZXJzIGlzIG5vdCBjb2VyY2libGVcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoIV8uaW5jbHVkZXMob3B0cy5wbGF0Zm9ybVZlcnNpb24sICcuJykgJiYgcGxhdGZvcm1WZXJzaW9uLm1ham9yID09PSBkZXZpY2VPUy5tYWpvclxuICAgICAgICAgICAgfHwgcGxhdGZvcm1WZXJzaW9uLm1ham9yID09PSBkZXZpY2VPUy5tYWpvciAmJiBwbGF0Zm9ybVZlcnNpb24ubWlub3IgPT09IGRldmljZU9TLm1pbm9yKVxuICAgICAgICAgICAgLy8gR290IGEgcGFydGlhbCBtYXRjaCAtIG1ha2Ugc3VyZSB3ZSBjb25zaWRlciB0aGUgbW9zdCByZWNlbnRcbiAgICAgICAgICAgIC8vIGRldmljZSB2ZXJzaW9uIGF2YWlsYWJsZSBvbiB0aGUgaG9zdCBzeXN0ZW1cbiAgICAgICAgICAgICYmIChwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUgJiYgc2VtdmVyLmd0KGRldmljZU9TLCBfLnZhbHVlcyhwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpWzBdKVxuICAgICAgICAgICAgICAgIHx8ICFwYXJ0aWFsTWF0Y2hDYW5kaWRhdGUpKSB7XG4gICAgICAgICAgcGFydGlhbE1hdGNoQ2FuZGlkYXRlID0ge1tkZXZpY2UudWRpZF06IGRldmljZU9TfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF1ZGlkICYmIHBhcnRpYWxNYXRjaENhbmRpZGF0ZSkge1xuICAgICAgICB1ZGlkID0gXy5rZXlzKHBhcnRpYWxNYXRjaENhbmRpZGF0ZSlbMF07XG4gICAgICAgIGF3YWl0IGFkYi5zZXREZXZpY2VJZCh1ZGlkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1ZGlkKSB7XG4gICAgICAgIC8vIHdlIGNvdWxkbid0IGZpbmQgYW55dGhpbmchIHF1aXRcbiAgICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYFVuYWJsZSB0byBmaW5kIGFuIGFjdGl2ZSBkZXZpY2Ugb3IgZW11bGF0b3IgYCArXG4gICAgICAgICAgYHdpdGggT1MgJHtvcHRzLnBsYXRmb3JtVmVyc2lvbn0uIFRoZSBmb2xsb3dpbmcgYXJlIGF2YWlsYWJsZTogYCArXG4gICAgICAgICAgYXZhaWxEZXZpY2VzLmpvaW4oJywgJykpO1xuICAgICAgfVxuXG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYSB1ZGlkIHdhcyBub3QgZ2l2ZW4sIGdyYWIgdGhlIGZpcnN0IGRldmljZSB3ZSBzZWVcbiAgICAgIHVkaWQgPSBkZXZpY2VzWzBdLnVkaWQ7XG4gICAgICBlbVBvcnQgPSBhZGIuZ2V0UG9ydEZyb21FbXVsYXRvclN0cmluZyh1ZGlkKTtcbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbyhgVXNpbmcgZGV2aWNlOiAke3VkaWR9YCk7XG4gIHJldHVybiB7dWRpZCwgZW1Qb3J0fTtcbn07XG5cbi8vIHJldHVybnMgYSBuZXcgYWRiIGluc3RhbmNlIHdpdGggZGV2aWNlSWQgc2V0XG5oZWxwZXJzLmNyZWF0ZUFEQiA9IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFEQiAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHt1ZGlkLCBlbVBvcnR9ID0gb3B0cztcbiAgY29uc3QgYWRiID0gYXdhaXQgaGVscGVycy5jcmVhdGVCYXNlQURCKG9wdHMpO1xuICBhZGIuc2V0RGV2aWNlSWQodWRpZCk7XG4gIGlmIChlbVBvcnQpIHtcbiAgICBhZGIuc2V0RW11bGF0b3JQb3J0KGVtUG9ydCk7XG4gIH1cblxuICByZXR1cm4gYWRiO1xufTtcblxuaGVscGVycy52YWxpZGF0ZVBhY2thZ2VBY3Rpdml0eU5hbWVzID0gZnVuY3Rpb24gdmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyAob3B0cykge1xuICBmb3IgKGNvbnN0IGtleSBvZiBbJ2FwcFBhY2thZ2UnLCAnYXBwQWN0aXZpdHknLCAnYXBwV2FpdFBhY2thZ2UnLCAnYXBwV2FpdEFjdGl2aXR5J10pIHtcbiAgICBjb25zdCBuYW1lID0gb3B0c1trZXldO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSAvKFteXFx3LiosXSkrLy5leGVjKG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGxvZ2dlci53YXJuKGBDYXBhYmlsaXR5ICcke2tleX0nIGlzIGV4cGVjdGVkIHRvIG9ubHkgaW5jbHVkZSBsYXRpbiBsZXR0ZXJzLCBkaWdpdHMsIHVuZGVyc2NvcmUsIGRvdCwgY29tbWEgYW5kIGFzdGVyaXNrIGNoYXJhY3RlcnMuYCk7XG4gICAgbG9nZ2VyLndhcm4oYEN1cnJlbnQgdmFsdWUgJyR7bmFtZX0nIGhhcyBub24tbWF0Y2hpbmcgY2hhcmFjdGVyIGF0IGluZGV4ICR7bWF0Y2guaW5kZXh9OiAnJHtuYW1lLnN1YnN0cmluZygwLCBtYXRjaC5pbmRleCArIDEpfSdgKTtcbiAgfVxufTtcblxuaGVscGVycy5nZXRMYXVuY2hJbmZvID0gYXN5bmMgZnVuY3Rpb24gZ2V0TGF1bmNoSW5mbyAoYWRiLCBvcHRzKSB7XG4gIGxldCB7YXBwLCBhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eX0gPSBvcHRzO1xuICBpZiAoIWFwcCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBhcHAgc2VudCBpbiwgbm90IHBhcnNpbmcgcGFja2FnZS9hY3Rpdml0eScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMudmFsaWRhdGVQYWNrYWdlQWN0aXZpdHlOYW1lcyhvcHRzKTtcblxuICBpZiAoYXBwUGFja2FnZSAmJiBhcHBBY3Rpdml0eSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZygnUGFyc2luZyBwYWNrYWdlIGFuZCBhY3Rpdml0eSBmcm9tIGFwcCBtYW5pZmVzdCcpO1xuICBsZXQge2Fwa1BhY2thZ2UsIGFwa0FjdGl2aXR5fSA9XG4gICAgYXdhaXQgYWRiLnBhY2thZ2VBbmRMYXVuY2hBY3Rpdml0eUZyb21NYW5pZmVzdChhcHApO1xuICBpZiAoYXBrUGFja2FnZSAmJiAhYXBwUGFja2FnZSkge1xuICAgIGFwcFBhY2thZ2UgPSBhcGtQYWNrYWdlO1xuICB9XG4gIGlmICghYXBwV2FpdFBhY2thZ2UpIHtcbiAgICBhcHBXYWl0UGFja2FnZSA9IGFwcFBhY2thZ2U7XG4gIH1cbiAgaWYgKGFwa0FjdGl2aXR5ICYmICFhcHBBY3Rpdml0eSkge1xuICAgIGFwcEFjdGl2aXR5ID0gYXBrQWN0aXZpdHk7XG4gIH1cbiAgaWYgKCFhcHBXYWl0QWN0aXZpdHkpIHtcbiAgICBhcHBXYWl0QWN0aXZpdHkgPSBhcHBBY3Rpdml0eTtcbiAgfVxuICBsb2dnZXIuZGVidWcoYFBhcnNlZCBwYWNrYWdlIGFuZCBhY3Rpdml0eSBhcmU6ICR7YXBrUGFja2FnZX0vJHthcGtBY3Rpdml0eX1gKTtcbiAgcmV0dXJuIHthcHBQYWNrYWdlLCBhcHBXYWl0UGFja2FnZSwgYXBwQWN0aXZpdHksIGFwcFdhaXRBY3Rpdml0eX07XG59O1xuXG5oZWxwZXJzLnJlc2V0QXBwID0gYXN5bmMgZnVuY3Rpb24gcmVzZXRBcHAgKGFkYiwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXBwUGFja2FnZSxcbiAgICBmYXN0UmVzZXQsXG4gICAgZnVsbFJlc2V0LFxuICAgIGFuZHJvaWRJbnN0YWxsVGltZW91dCA9IFBBQ0tBR0VfSU5TVEFMTF9USU1FT1VULFxuICAgIGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgIGFsbG93VGVzdFBhY2thZ2VzXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghYXBwUGFja2FnZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidhcHBQYWNrYWdlJyBvcHRpb24gaXMgcmVxdWlyZWRcIik7XG4gIH1cblxuICBjb25zdCBpc0luc3RhbGxlZCA9IGF3YWl0IGFkYi5pc0FwcEluc3RhbGxlZChhcHBQYWNrYWdlKTtcblxuICBpZiAoaXNJbnN0YWxsZWQpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLmZvcmNlU3RvcChhcHBQYWNrYWdlKTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgLy8gZnVsbFJlc2V0IGhhcyBwcmlvcml0eSBvdmVyIGZhc3RSZXNldFxuICAgIGlmICghZnVsbFJlc2V0ICYmIGZhc3RSZXNldCkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgYWRiLmNsZWFyKGFwcFBhY2thZ2UpO1xuICAgICAgaWYgKF8uaXNTdHJpbmcob3V0cHV0KSAmJiBvdXRwdXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZmFpbGVkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY2xlYXIgdGhlIGFwcGxpY2F0aW9uIGRhdGEgb2YgJyR7YXBwUGFja2FnZX0nLiBPcmlnaW5hbCBlcnJvcjogJHtvdXRwdXR9YCk7XG4gICAgICB9XG4gICAgICAvLyBleGVjdXRpbmcgYHNoZWxsIHBtIGNsZWFyYCByZXNldHMgcHJldmlvdXNseSBhc3NpZ25lZCBhcHBsaWNhdGlvbiBwZXJtaXNzaW9ucyBhcyB3ZWxsXG4gICAgICBpZiAoYXV0b0dyYW50UGVybWlzc2lvbnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBhZGIuZ3JhbnRBbGxQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoYFVuYWJsZSB0byBncmFudCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQuIE9yaWdpbmFsIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgUGVyZm9ybWVkIGZhc3QgcmVzZXQgb24gdGhlIGluc3RhbGxlZCAnJHthcHBQYWNrYWdlfScgYXBwbGljYXRpb24gKHN0b3AgYW5kIGNsZWFyKWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghYXBwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcCcgb3B0aW9uIGlzIHJlcXVpcmVkIGZvciByZWluc3RhbGxcIik7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYFJ1bm5pbmcgZnVsbCByZXNldCBvbiAnJHthcHBQYWNrYWdlfScgKHJlaW5zdGFsbClgKTtcbiAgaWYgKGlzSW5zdGFsbGVkKSB7XG4gICAgYXdhaXQgYWRiLnVuaW5zdGFsbEFwayhhcHBQYWNrYWdlKTtcbiAgfVxuICBhd2FpdCBhZGIuaW5zdGFsbChhcHAsIHtcbiAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gIH0pO1xufTtcblxuaGVscGVycy5pbnN0YWxsQXBrID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwayAoYWRiLCBvcHRzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhcHBQYWNrYWdlLFxuICAgIGZhc3RSZXNldCxcbiAgICBmdWxsUmVzZXQsXG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgZW5mb3JjZUFwcEluc3RhbGwsXG4gIH0gPSBvcHRzO1xuXG4gIGlmICghYXBwIHx8ICFhcHBQYWNrYWdlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2FwcCcgYW5kICdhcHBQYWNrYWdlJyBvcHRpb25zIGFyZSByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGlmIChmdWxsUmVzZXQpIHtcbiAgICBhd2FpdCB0aGlzLnJlc2V0QXBwKGFkYiwgb3B0cyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGFwcFN0YXRlLFxuICAgIHdhc1VuaW5zdGFsbGVkXG4gIH0gPSBhd2FpdCBhZGIuaW5zdGFsbE9yVXBncmFkZShhcHAsIGFwcFBhY2thZ2UsIHtcbiAgICBncmFudFBlcm1pc3Npb25zOiBhdXRvR3JhbnRQZXJtaXNzaW9ucyxcbiAgICB0aW1lb3V0OiBhbmRyb2lkSW5zdGFsbFRpbWVvdXQsXG4gICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgZW5mb3JjZUN1cnJlbnRCdWlsZDogZW5mb3JjZUFwcEluc3RhbGwsXG4gIH0pO1xuXG4gIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gcmVzZXQgdGhlIG5ld2x5IGluc3RhbGxlZCBhcHBcbiAgY29uc3QgaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHAgPSAhd2FzVW5pbnN0YWxsZWRcbiAgICAmJiBhcHBTdGF0ZSAhPT0gYWRiLkFQUF9JTlNUQUxMX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIGlmIChmYXN0UmVzZXQgJiYgaXNJbnN0YWxsZWRPdmVyRXhpc3RpbmdBcHApIHtcbiAgICBsb2dnZXIuaW5mbyhgUGVyZm9ybWluZyBmYXN0IHJlc2V0IG9uICcke2FwcFBhY2thZ2V9J2ApO1xuICAgIGF3YWl0IHRoaXMucmVzZXRBcHAoYWRiLCBvcHRzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBJbnN0YWxscyBhbiBhcnJheSBvZiBhcGtzXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRzIGRlZmluZWQgaW4gZHJpdmVyLmpzXG4gKi9cbmhlbHBlcnMuaW5zdGFsbE90aGVyQXBrcyA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxPdGhlckFwa3MgKG90aGVyQXBwcywgYWRiLCBvcHRzKSB7XG4gIGxldCB7XG4gICAgYW5kcm9pZEluc3RhbGxUaW1lb3V0ID0gUEFDS0FHRV9JTlNUQUxMX1RJTUVPVVQsXG4gICAgYXV0b0dyYW50UGVybWlzc2lvbnMsXG4gICAgYWxsb3dUZXN0UGFja2FnZXNcbiAgfSA9IG9wdHM7XG5cbiAgLy8gSW5zdGFsbCBhbGwgb2YgdGhlIEFQSydzIGFzeW5jaHJvbm91c2x5XG4gIGF3YWl0IEIuYWxsKG90aGVyQXBwcy5tYXAoKG90aGVyQXBwKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBJbnN0YWxsaW5nIGFwcDogJHtvdGhlckFwcH1gKTtcbiAgICByZXR1cm4gYWRiLmluc3RhbGxPclVwZ3JhZGUob3RoZXJBcHAsIG51bGwsIHtcbiAgICAgIGdyYW50UGVybWlzc2lvbnM6IGF1dG9HcmFudFBlcm1pc3Npb25zLFxuICAgICAgdGltZW91dDogYW5kcm9pZEluc3RhbGxUaW1lb3V0LFxuICAgICAgYWxsb3dUZXN0UGFja2FnZXMsXG4gICAgfSk7XG4gIH0pKTtcbn07XG5cbi8qKlxuICogVW5pbnN0YWxsIGFuIGFycmF5IG9mIHBhY2thZ2VzXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEluc3RhbmNlIG9mIEFwcGl1bSBBREIgb2JqZWN0XG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGFwcFBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2UgbmFtZXMgdG8gdW5pbnN0YWxsLiBJZiB0aGlzIGluY2x1ZGVzIGAnKidgLCB1bmluc3RhbGwgYWxsIG9mIDNyZCBwYXJ0eSBhcHBzXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGZpbHRlclBhY2thZ2VzIEFuIGFycmF5IG9mIHBhY2thZ2VzIGRvZXMgbm90IHVuaW5zdGFsbCB3aGVuIGAqYCBpcyBwcm92aWRlZCBhcyBgYXBwUGFja2FnZXNgXG4gKi9cbmhlbHBlcnMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyA9IGFzeW5jIGZ1bmN0aW9uIHVuaW5zdGFsbE90aGVyUGFja2FnZXMgKGFkYiwgYXBwUGFja2FnZXMsIGZpbHRlclBhY2thZ2VzID0gW10pIHtcbiAgaWYgKGFwcFBhY2thZ2VzLmluY2x1ZGVzKCcqJykpIHtcbiAgICBsb2dnZXIuZGVidWcoJ1VuaW5zdGFsbCB0aGlyZCBwYXJ0eSBwYWNrYWdlcycpO1xuICAgIGFwcFBhY2thZ2VzID0gYXdhaXQgdGhpcy5nZXRUaGlyZFBhcnR5UGFja2FnZXMoYWRiLCBmaWx0ZXJQYWNrYWdlcyk7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoYFVuaW5zdGFsbGluZyBwYWNrYWdlczogJHthcHBQYWNrYWdlc31gKTtcbiAgYXdhaXQgQi5hbGwoYXBwUGFja2FnZXMubWFwKChhcHBQYWNrYWdlKSA9PiBhZGIudW5pbnN0YWxsQXBrKGFwcFBhY2thZ2UpKSk7XG59O1xuXG4vKipcbiAqIEdldCB0aGlyZCBwYXJ0eSBwYWNrYWdlcyBmaWx0ZXJlZCB3aXRoIGBmaWx0ZXJQYWNrYWdlc2BcbiAqIEBwYXJhbSB7QURCfSBhZGIgSW5zdGFuY2Ugb2YgQXBwaXVtIEFEQiBvYmplY3RcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmlsdGVyUGFja2FnZXMgQW4gYXJyYXkgb2YgcGFja2FnZXMgZG9lcyBub3QgdW5pbnN0YWxsIHdoZW4gYCpgIGlzIHByb3ZpZGVkIGFzIGBhcHBQYWNrYWdlc2BcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSBvZiBpbnN0YWxsZWQgdGhpcmQgcGFyeSBwYWNrYWdlc1xuICovXG5oZWxwZXJzLmdldFRoaXJkUGFydHlQYWNrYWdlcyA9IGFzeW5jIGZ1bmN0aW9uIGdldFRoaXJkUGFydHlQYWNrYWdlcyAoYWRiLCBmaWx0ZXJQYWNrYWdlcyA9IFtdKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZXNTdHJpbmcgPSBhd2FpdCBhZGIuc2hlbGwoWydwbScsICdsaXN0JywgJ3BhY2thZ2VzJywgJy0zJ10pO1xuICAgIGNvbnN0IGFwcFBhY2thZ2VzQXJyYXkgPSBwYWNrYWdlc1N0cmluZy50cmltKCkucmVwbGFjZSgvcGFja2FnZTovZywgJycpLnNwbGl0KEVPTCk7XG4gICAgbG9nZ2VyLmRlYnVnKGAnJHthcHBQYWNrYWdlc0FycmF5fScgZmlsdGVyZWQgd2l0aCAnJHtmaWx0ZXJQYWNrYWdlc30nYCk7XG4gICAgcmV0dXJuIF8uZGlmZmVyZW5jZShhcHBQYWNrYWdlc0FycmF5LCBmaWx0ZXJQYWNrYWdlcyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKGBVbmFibGUgdG8gZ2V0IHBhY2thZ2VzIHdpdGggJ2FkYiBzaGVsbCBwbSBsaXN0IHBhY2thZ2VzIC0zJzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmhlbHBlcnMuaW5pdFVuaWNvZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGluaXRVbmljb2RlS2V5Ym9hcmQgKGFkYikge1xuICBsb2dnZXIuZGVidWcoJ0VuYWJsaW5nIFVuaWNvZGUga2V5Ym9hcmQgc3VwcG9ydCcpO1xuXG4gIC8vIGdldCB0aGUgZGVmYXVsdCBJTUUgc28gd2UgY2FuIHJldHVybiBiYWNrIHRvIGl0IGxhdGVyIGlmIHdlIHdhbnRcbiAgbGV0IGRlZmF1bHRJTUUgPSBhd2FpdCBhZGIuZGVmYXVsdElNRSgpO1xuXG4gIGxvZ2dlci5kZWJ1ZyhgVW5zZXR0aW5nIHByZXZpb3VzIElNRSAke2RlZmF1bHRJTUV9YCk7XG4gIGNvbnN0IGFwcGl1bUlNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9Ly5Vbmljb2RlSU1FYDtcbiAgbG9nZ2VyLmRlYnVnKGBTZXR0aW5nIElNRSB0byAnJHthcHBpdW1JTUV9J2ApO1xuICBhd2FpdCBhZGIuZW5hYmxlSU1FKGFwcGl1bUlNRSk7XG4gIGF3YWl0IGFkYi5zZXRJTUUoYXBwaXVtSU1FKTtcbiAgcmV0dXJuIGRlZmF1bHRJTUU7XG59O1xuXG5oZWxwZXJzLnNldE1vY2tMb2NhdGlvbkFwcCA9IGFzeW5jIGZ1bmN0aW9uIHNldE1vY2tMb2NhdGlvbkFwcCAoYWRiLCBhcHApIHtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgYWRiLmdldEFwaUxldmVsKCkgPCAyMykge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsnc2V0dGluZ3MnLCAncHV0JywgJ3NlY3VyZScsICdtb2NrX2xvY2F0aW9uJywgJzEnXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ2FwcG9wcycsICdzZXQnLCBhcHAsICdhbmRyb2lkOm1vY2tfbG9jYXRpb24nLCAnYWxsb3cnXSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHNldCBtb2NrIGxvY2F0aW9uIGZvciBhcHAgJyR7YXBwfSc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmhlbHBlcnMuaW5zdGFsbEhlbHBlckFwcCA9IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxIZWxwZXJBcHAgKGFkYiwgYXBrUGF0aCwgcGFja2FnZUlkKSB7XG4gIC8vIFNvbWV0aW1lcyBhZGIgcHVzaCBvciBhZGIgaW5zdGFsIHRha2UgbW9yZSB0aW1lIHRoYW4gZXhwZWN0ZWQgdG8gaW5zdGFsbCBhbiBhcHBcbiAgLy8gZS5nLiBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2lvLmFwcGl1bS5zZXR0aW5ncy9pc3N1ZXMvNDAjaXNzdWVjb21tZW50LTQ3NjU5MzE3NFxuICBhd2FpdCByZXRyeSgyLCBhc3luYyBmdW5jdGlvbiByZXRyeUluc3RhbGxIZWxwZXJBcHAgKCkge1xuICAgIGF3YWl0IGFkYi5pbnN0YWxsT3JVcGdyYWRlKGFwa1BhdGgsIHBhY2thZ2VJZCwge2dyYW50UGVybWlzc2lvbnM6IHRydWV9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIFB1c2hlcyBhbmQgaW5zdGFsbHMgaW8uYXBwaXVtLnNldHRpbmdzIGFwcC5cbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgc2V0dGluZyBhcHAgaXMgcmVxdWlyZWRcbiAqXG4gKiBAcGFyYW0ge0FkYn0gYWRiIC0gVGhlIGFkYiBtb2R1bGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHRocm93RXJyb3JbZmFsc2VdIC0gV2hldGhlciB0aHJvdyBlcnJvciBvciBub3RcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aHJvd0Vycm9yIGlzIHRydWUgYW5kIHNvbWV0aGluZyBoYXBwZW5zIGluIGluc3RhbGxhdGlvbiBzdGVwXG4gKi9cbmhlbHBlcnMucHVzaFNldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcHVzaFNldHRpbmdzQXBwIChhZGIsIHRocm93RXJyb3IgPSBmYWxzZSkge1xuICBsb2dnZXIuZGVidWcoJ1B1c2hpbmcgc2V0dGluZ3MgYXBrIHRvIGRldmljZS4uLicpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgaGVscGVycy5pbnN0YWxsSGVscGVyQXBwKGFkYiwgc2V0dGluZ3NBcGtQYXRoLCBTRVRUSU5HU19IRUxQRVJfUEtHX0lELCB0aHJvd0Vycm9yKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihgSWdub3JlZCBlcnJvciB3aGlsZSBpbnN0YWxsaW5nICcke3NldHRpbmdzQXBrUGF0aH0nOiBgICtcbiAgICAgICAgICAgICAgICBgJyR7ZXJyLm1lc3NhZ2V9Jy4gRmVhdHVyZXMgdGhhdCByZWx5IG9uIHRoaXMgaGVscGVyIGAgK1xuICAgICAgICAgICAgICAgICdyZXF1aXJlIHRoZSBhcGsgc3VjaCBhcyB0b2dnbGUgV2lGaSBhbmQgZ2V0dGluZyBsb2NhdGlvbiAnICtcbiAgICAgICAgICAgICAgICAnd2lsbCByYWlzZSBhbiBlcnJvciBpZiB5b3UgdHJ5IHRvIHVzZSB0aGVtLicpO1xuICB9XG5cbiAgLy8gUmVpbnN0YWxsIHdpbGwgc3RvcCB0aGUgc2V0dGluZ3MgaGVscGVyIHByb2Nlc3MgYW55d2F5LCBzb1xuICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbnRpbnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBzdGlsbCBydW5uaW5nXG4gIGlmIChhd2FpdCBhZGIucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfUEtHX0lEKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfSBpcyBhbHJlYWR5IHJ1bm5pbmcuIGAgK1xuICAgICAgYFRoZXJlIGlzIG5vIG5lZWQgdG8gcmVzZXQgaXRzIHBlcm1pc3Npb25zLmApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA8PSAyMykgeyAvLyBBbmRyb2lkIDYtIGRldmljZXMgc2hvdWxkIGhhdmUgZ3JhbnRlZCBwZXJtaXNzaW9uc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL3B1bGwvMTE2NDAjaXNzdWVjb21tZW50LTQzODI2MDQ3N1xuICAgIGNvbnN0IHBlcm1zID0gWydTRVRfQU5JTUFUSU9OX1NDQUxFJywgJ0NIQU5HRV9DT05GSUdVUkFUSU9OJywgJ0FDQ0VTU19GSU5FX0xPQ0FUSU9OJ107XG4gICAgbG9nZ2VyLmluZm8oYEdyYW50aW5nIHBlcm1pc3Npb25zICR7cGVybXN9IHRvICcke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9J2ApO1xuICAgIGF3YWl0IGFkYi5ncmFudFBlcm1pc3Npb25zKFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIHBlcm1zLm1hcCgoeCkgPT4gYGFuZHJvaWQucGVybWlzc2lvbi4ke3h9YCkpO1xuICB9XG5cbiAgLy8gbGF1bmNoIGlvLmFwcGl1bS5zZXR0aW5ncyBhcHAgZHVlIHRvIHNldHRpbmdzIGZhaWxpbmcgdG8gYmUgc2V0XG4gIC8vIGlmIHRoZSBhcHAgaXMgbm90IGxhdW5jaGVkIHByaW9yIHRvIHN0YXJ0IHRoZSBzZXNzaW9uIG9uIGFuZHJvaWQgNytcbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy84OTU3XG4gIHRyeSB7XG4gICAgYXdhaXQgYWRiLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGVycik7XG4gICAgaWYgKHRocm93RXJyb3IpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogRXh0cmFjdHMgc3RyaW5nLnhtbCBhbmQgY29udmVydHMgaXQgdG8gc3RyaW5nLmpzb24gYW5kIHB1c2hlc1xuICogaXQgdG8gL2RhdGEvbG9jYWwvdG1wL3N0cmluZy5qc29uIG9uIGZvciB1c2Ugb2YgYm9vdHN0cmFwXG4gKiBJZiBhcHAgaXMgbm90IHByZXNlbnQgdG8gZXh0cmFjdCBzdHJpbmcueG1sIGl0IGRlbGV0ZXMgcmVtb3RlIHN0cmluZ3MuanNvblxuICogSWYgYXBwIGRvZXMgbm90IGhhdmUgc3RyaW5ncy54bWwgd2UgcHVzaCBhbiBlbXB0eSBqc29uIG9iamVjdCB0byByZW1vdGVcbiAqXG4gKiBAcGFyYW0gez9zdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UgYWJicmV2aWF0aW9uLCBmb3IgZXhhbXBsZSAnZnInLiBUaGUgZGVmYXVsdCBsYW5ndWFnZVxuICogaXMgdXNlZCBpZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBkZWZpbmVkLlxuICogQHBhcmFtIHtPYmplY3R9IGFkYiAtIFRoZSBhZGIgbW9kdWxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBEcml2ZXIgb3B0aW9ucyBkaWN0aW9uYXJ5LlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGRpY3Rpb25hcnksIHdoZXJlIHN0cmluZyByZXNvdXJjZSBpZGVudGlmaWVycyBhcmUga2V5c1xuICogYWxvbmcgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIG9yIGFuIGVtcHR5IG9iamVjdFxuICogaWYgbm8gbWF0Y2hpbmcgcmVzb3VyY2VzIHdlcmUgZXh0cmFjdGVkLlxuICovXG5oZWxwZXJzLnB1c2hTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gcHVzaFN0cmluZ3MgKGxhbmd1YWdlLCBhZGIsIG9wdHMpIHtcbiAgY29uc3QgcmVtb3RlRGlyID0gJy9kYXRhL2xvY2FsL3RtcCc7XG4gIGNvbnN0IHN0cmluZ3NKc29uID0gJ3N0cmluZ3MuanNvbic7XG4gIGNvbnN0IHJlbW90ZUZpbGUgPSBwYXRoLnBvc2l4LnJlc29sdmUocmVtb3RlRGlyLCBzdHJpbmdzSnNvbik7XG5cbiAgLy8gY2xlYW4gdXAgcmVtb3RlIHN0cmluZy5qc29uIGlmIHByZXNlbnRcbiAgYXdhaXQgYWRiLnJpbXJhZihyZW1vdGVGaWxlKTtcblxuICBsZXQgYXBwO1xuICB0cnkge1xuICAgIGFwcCA9IG9wdHMuYXBwIHx8IGF3YWl0IGFkYi5wdWxsQXBrKG9wdHMuYXBwUGFja2FnZSwgb3B0cy50bXBEaXIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuaW5mbyhgRmFpbGVkIHRvIHB1bGwgYW4gYXBrIGZyb20gJyR7b3B0cy5hcHBQYWNrYWdlfScgdG8gJyR7b3B0cy50bXBEaXJ9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAoXy5pc0VtcHR5KG9wdHMuYXBwUGFja2FnZSkgfHwgIShhd2FpdCBmcy5leGlzdHMoYXBwKSkpIHtcbiAgICBsb2dnZXIuZGVidWcoYE5vIGFwcCBvciBwYWNrYWdlIHNwZWNpZmllZC4gUmV0dXJuaW5nIGVtcHR5IHN0cmluZ3NgKTtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBzdHJpbmdzVG1wRGlyID0gcGF0aC5yZXNvbHZlKG9wdHMudG1wRGlyLCBvcHRzLmFwcFBhY2thZ2UpO1xuICB0cnkge1xuICAgIGxvZ2dlci5kZWJ1ZygnRXh0cmFjdGluZyBzdHJpbmdzIGZyb20gYXBrJywgYXBwLCBsYW5ndWFnZSwgc3RyaW5nc1RtcERpcik7XG4gICAgY29uc3Qge2Fwa1N0cmluZ3MsIGxvY2FsUGF0aH0gPSBhd2FpdCBhZGIuZXh0cmFjdFN0cmluZ3NGcm9tQXBrKGFwcCwgbGFuZ3VhZ2UsIHN0cmluZ3NUbXBEaXIpO1xuICAgIGF3YWl0IGFkYi5wdXNoKGxvY2FsUGF0aCwgcmVtb3RlRGlyKTtcbiAgICByZXR1cm4gYXBrU3RyaW5ncztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oYENvdWxkIG5vdCBnZXQgc3RyaW5ncywgY29udGludWluZyBhbnl3YXkuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIGF3YWl0IGFkYi5zaGVsbCgnZWNobycsIFtgJ3t9JyA+ICR7cmVtb3RlRmlsZX1gXSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHN0cmluZ3NUbXBEaXIpO1xuICB9XG4gIHJldHVybiB7fTtcbn07XG5cbmhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcCA9IGFzeW5jIGZ1bmN0aW9uIHVubG9ja1dpdGhIZWxwZXJBcHAgKGFkYikge1xuICBsb2dnZXIuaW5mbygnVW5sb2NraW5nIHNjcmVlbicpO1xuXG4gIC8vIFVubG9jayBzdWNjZWVkIHdpdGggYSBjb3VwbGUgb2YgcmV0cmllcy5cbiAgbGV0IGZpcnN0UnVuID0gdHJ1ZTtcbiAgYXdhaXQgcmV0cnkoMywgYXN5bmMgZnVuY3Rpb24gbGF1bmNoSGVscGVyICgpIHtcbiAgICAvLyBUbyByZWR1Y2UgYSB0aW1lIHRvIGNhbGwgYWRiLmlzU2NyZWVuTG9ja2VkKCkgc2luY2UgYGFkYiBzaGVsbCBkdW1wc3lzIHdpbmRvd2AgaXMgZWFzeSB0byBoYW5nIGFkYiBjb21tYW5kc1xuICAgIGlmIChmaXJzdFJ1bikge1xuICAgICAgZmlyc3RSdW4gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBFcnJvciBpbiBpc1NjcmVlbkxvY2tlZDogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdcImFkYiBzaGVsbCBkdW1wc3lzIHdpbmRvd1wiIGNvbW1hbmQgaGFzIHRpbWVkIG91dC4nKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1RoZSByZWFzb24gb2YgdGhpcyB0aW1lb3V0IGlzIHRoZSBkZWxheWVkIGFkYiByZXNwb25zZS4gUmVzZXR0aW5nIGFkYiBzZXJ2ZXIgY2FuIGltcHJvdmUgaXQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oYExhdW5jaGluZyAke1NFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFl9YCk7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAgICdhbScsICdzdGFydCcsXG4gICAgICAnLW4nLCBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS8ke1NFVFRJTkdTX0hFTFBFUl9VTkxPQ0tfQUNUSVZJVFl9YCxcbiAgICAgICctYycsICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgICAnLWEnLCAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgICAgJy1mJywgJzB4MTAyMDAwMDAnLFxuICAgIF0pO1xuICAgIGF3YWl0IEIuZGVsYXkoMTAwMCk7XG4gIH0pO1xufTtcblxuaGVscGVycy51bmxvY2sgPSBhc3luYyBmdW5jdGlvbiB1bmxvY2sgKGRyaXZlciwgYWRiLCBjYXBhYmlsaXRpZXMpIHtcbiAgaWYgKCEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1NjcmVlbiBhbHJlYWR5IHVubG9ja2VkLCBkb2luZyBub3RoaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxvZ2dlci5kZWJ1ZygnU2NyZWVuIGlzIGxvY2tlZCwgdHJ5aW5nIHRvIHVubG9jaycpO1xuXG4gIGlmICghY2FwYWJpbGl0aWVzLnVubG9ja1R5cGUgJiYgIWNhcGFiaWxpdGllcy51bmxvY2tLZXkpIHtcbiAgICBsb2dnZXIud2FybignVXNpbmcgYXBwIHVubG9jaywgdGhpcyBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkIScpO1xuICAgIGF3YWl0IGhlbHBlcnMudW5sb2NrV2l0aEhlbHBlckFwcChhZGIpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICB1bmxvY2tUeXBlLFxuICAgIHVubG9ja0tleSxcbiAgICB1bmxvY2tTdHJhdGVneSxcbiAgICB1bmxvY2tTdWNjZXNzVGltZW91dCxcbiAgfSA9IHVubG9ja2VyLnZhbGlkYXRlVW5sb2NrQ2FwYWJpbGl0aWVzKGNhcGFiaWxpdGllcyk7XG4gIGlmICh1bmxvY2tLZXkgJiYgdW5sb2NrVHlwZSAhPT0gRklOR0VSUFJJTlRfVU5MT0NLXG4gICAgICAmJiAoXy5pc05pbCh1bmxvY2tTdHJhdGVneSkgfHwgXy50b0xvd2VyKHVubG9ja1N0cmF0ZWd5KSA9PT0gJ2xvY2tzZXR0aW5ncycpXG4gICAgICAmJiBhd2FpdCBhZGIuaXNMb2NrTWFuYWdlbWVudFN1cHBvcnRlZCgpKSB7XG4gICAgYXdhaXQgdW5sb2NrZXIuZmFzdFVubG9jayhhZGIsIHtcbiAgICAgIGNyZWRlbnRpYWw6IHVubG9ja0tleSxcbiAgICAgIGNyZWRlbnRpYWxUeXBlOiB0b0NyZWRlbnRpYWxUeXBlKHVubG9ja1R5cGUpLFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHVubG9ja01ldGhvZCA9IHtcbiAgICAgIFtQSU5fVU5MT0NLXTogdW5sb2NrZXIucGluVW5sb2NrLFxuICAgICAgW1BJTl9VTkxPQ0tfS0VZX0VWRU5UXTogdW5sb2NrZXIucGluVW5sb2NrV2l0aEtleUV2ZW50LFxuICAgICAgW1BBU1NXT1JEX1VOTE9DS106IHVubG9ja2VyLnBhc3N3b3JkVW5sb2NrLFxuICAgICAgW1BBVFRFUk5fVU5MT0NLXTogdW5sb2NrZXIucGF0dGVyblVubG9jayxcbiAgICAgIFtGSU5HRVJQUklOVF9VTkxPQ0tdOiB1bmxvY2tlci5maW5nZXJwcmludFVubG9jayxcbiAgICB9W3VubG9ja1R5cGVdO1xuICAgIGF3YWl0IHVubG9ja01ldGhvZChhZGIsIGRyaXZlciwgY2FwYWJpbGl0aWVzKTtcbiAgfVxuICBhd2FpdCBoZWxwZXJzLnZlcmlmeVVubG9jayhhZGIsIHVubG9ja1N1Y2Nlc3NUaW1lb3V0KTtcbn07XG5cbmhlbHBlcnMudmVyaWZ5VW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gdmVyaWZ5VW5sb2NrIChhZGIsIHRpbWVvdXRNcyA9IG51bGwpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+ICEoYXdhaXQgYWRiLmlzU2NyZWVuTG9ja2VkKCkpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXRNcyA/PyAyMDAwLFxuICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgIH0pO1xuICB9IGNhdGNoIChpZ24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBkZXZpY2UgaGFzIGZhaWxlZCB0byBiZSB1bmxvY2tlZCcpO1xuICB9XG4gIGxvZ2dlci5pbmZvKCdUaGUgZGV2aWNlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmxvY2tlZCcpO1xufTtcblxuaGVscGVycy5pbml0RGV2aWNlID0gYXN5bmMgZnVuY3Rpb24gaW5pdERldmljZSAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHtcbiAgICBza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24sXG4gICAgbG9jYWxlLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2FsZVNjcmlwdCxcbiAgICB1bmljb2RlS2V5Ym9hcmQsXG4gICAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbixcbiAgICBza2lwVW5sb2NrLFxuICAgIG1vY2tMb2NhdGlvbkFwcCxcbiAgICBza2lwTG9nY2F0Q2FwdHVyZSxcbiAgICBsb2djYXRGb3JtYXQsXG4gICAgbG9nY2F0RmlsdGVyU3BlY3MsXG4gIH0gPSBvcHRzO1xuXG4gIGlmIChza2lwRGV2aWNlSW5pdGlhbGl6YXRpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgJ3NraXBEZXZpY2VJbml0aWFsaXphdGlvbicgaXMgc2V0LiBTa2lwcGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24uYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLndhaXRGb3JEZXZpY2UoKTtcbiAgICAvLyBwdXNoU2V0dGluZ3NBcHAgcmVxdWlyZWQgYmVmb3JlIGNhbGxpbmcgZW5zdXJlRGV2aWNlTG9jYWxlIGZvciBBUEkgTGV2ZWwgMjQrXG5cbiAgICAvLyBTb21lIGZlYXR1cmUgc3VjaCBhcyBsb2NhdGlvbi93aWZpIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhbGwgdXNlcnMsXG4gICAgLy8gYnV0IHRoZXkgcmVxdWlyZSB0aGUgc2V0dGluZ3MgYXBwLiBTbywgdHJ5IHRvIGNvbmZpZ3VyZSBpdCB3aGlsZSBBcHBpdW1cbiAgICAvLyBkb2VzIG5vdCB0aHJvdyBlcnJvciBldmVuIGlmIHRoZXkgZmFpbC5cbiAgICBjb25zdCBzaG91bGRUaHJvd0Vycm9yID0gbGFuZ3VhZ2VcbiAgICAgIHx8IGxvY2FsZVxuICAgICAgfHwgbG9jYWxlU2NyaXB0XG4gICAgICB8fCB1bmljb2RlS2V5Ym9hcmRcbiAgICAgIHx8IGRpc2FibGVXaW5kb3dBbmltYXRpb25cbiAgICAgIHx8ICFza2lwVW5sb2NrO1xuICAgIGF3YWl0IGhlbHBlcnMucHVzaFNldHRpbmdzQXBwKGFkYiwgc2hvdWxkVGhyb3dFcnJvcik7XG4gIH1cblxuICBpZiAoIWhlbHBlcnMuaXNFbXVsYXRvcihhZGIsIG9wdHMpICYmIChtb2NrTG9jYXRpb25BcHAgfHwgXy5pc1VuZGVmaW5lZChtb2NrTG9jYXRpb25BcHApKSkge1xuICAgIGF3YWl0IGhlbHBlcnMuc2V0TW9ja0xvY2F0aW9uQXBwKGFkYiwgbW9ja0xvY2F0aW9uQXBwIHx8IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQpO1xuICB9XG5cbiAgaWYgKGxhbmd1YWdlIHx8IGxvY2FsZSkge1xuICAgIGF3YWl0IGhlbHBlcnMuZW5zdXJlRGV2aWNlTG9jYWxlKGFkYiwgbGFuZ3VhZ2UsIGxvY2FsZSwgbG9jYWxlU2NyaXB0KTtcbiAgfVxuXG4gIGlmIChza2lwTG9nY2F0Q2FwdHVyZSkge1xuICAgIGxvZ2dlci5pbmZvKGAnc2tpcExvZ2NhdENhcHR1cmUnIGlzIHNldC4gU2tpcHBpbmcgc3RhcnRpbmcgbG9nY2F0IGNhcHR1cmUuYCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnN0YXJ0TG9nY2F0KHtcbiAgICAgIGZvcm1hdDogbG9nY2F0Rm9ybWF0LFxuICAgICAgZmlsdGVyU3BlY3M6IGxvZ2NhdEZpbHRlclNwZWNzLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHVuaWNvZGVLZXlib2FyZCkge1xuICAgIHJldHVybiBhd2FpdCBoZWxwZXJzLmluaXRVbmljb2RlS2V5Ym9hcmQoYWRiKTtcbiAgfVxufTtcblxuaGVscGVycy5yZW1vdmVOdWxsUHJvcGVydGllcyA9IGZ1bmN0aW9uIHJlbW92ZU51bGxQcm9wZXJ0aWVzIChvYmopIHtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhvYmopKSB7XG4gICAgaWYgKF8uaXNOdWxsKG9ialtrZXldKSB8fCBfLmlzVW5kZWZpbmVkKG9ialtrZXldKSkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuaGVscGVycy50cnVuY2F0ZURlY2ltYWxzID0gZnVuY3Rpb24gdHJ1bmNhdGVEZWNpbWFscyAobnVtYmVyLCBkaWdpdHMpIHtcbiAgbGV0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgZGlnaXRzKSxcbiAgICAgIGFkanVzdGVkTnVtID0gbnVtYmVyICogbXVsdGlwbGllcixcbiAgICAgIHRydW5jYXRlZE51bSA9IE1hdGhbYWRqdXN0ZWROdW0gPCAwID8gJ2NlaWwnIDogJ2Zsb29yJ10oYWRqdXN0ZWROdW0pO1xuXG4gIHJldHVybiB0cnVuY2F0ZWROdW0gLyBtdWx0aXBsaWVyO1xufTtcblxuaGVscGVycy5pc0Nocm9tZUJyb3dzZXIgPSBmdW5jdGlvbiBpc0Nocm9tZUJyb3dzZXIgKGJyb3dzZXIpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXMoT2JqZWN0LmtleXMoQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWSksIChicm93c2VyIHx8ICcnKS50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmhlbHBlcnMuZ2V0Q2hyb21lUGtnID0gZnVuY3Rpb24gZ2V0Q2hyb21lUGtnIChicm93c2VyKSB7XG4gIHJldHVybiBDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZW2Jyb3dzZXIudG9Mb3dlckNhc2UoKV0gfHwgQ0hST01FX0JST1dTRVJfUEFDS0FHRV9BQ1RJVklUWS5kZWZhdWx0O1xufTtcblxuaGVscGVycy5yZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBbGxTZXNzaW9uV2ViU29ja2V0SGFuZGxlcnMgKHNlcnZlciwgc2Vzc2lvbklkKSB7XG4gIGlmICghc2VydmVyIHx8ICFfLmlzRnVuY3Rpb24oc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0gYXdhaXQgc2VydmVyLmdldFdlYlNvY2tldEhhbmRsZXJzKHNlc3Npb25JZCk7XG4gIGZvciAoY29uc3QgcGF0aG5hbWUgb2YgXy5rZXlzKGFjdGl2ZUhhbmRsZXJzKSkge1xuICAgIGF3YWl0IHNlcnZlci5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKHBhdGhuYW1lKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUYWtlcyBhIGRlc2lyZWQgY2FwYWJpbGl0eSBhbmQgdHJpZXMgdG8gSlNPTi5wYXJzZSBpdCBhcyBhbiBhcnJheSxcbiAqIGFuZCBlaXRoZXIgcmV0dXJucyB0aGUgcGFyc2VkIGFycmF5IG9yIGEgc2luZ2xldG9uIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7YW55fSBjYXAgQSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAqL1xuaGVscGVycy5wYXJzZUFycmF5ID0gZnVuY3Rpb24gcGFyc2VBcnJheSAoY2FwKSB7XG4gIGxldCBwYXJzZWRDYXBzO1xuICB0cnkge1xuICAgIHBhcnNlZENhcHMgPSBKU09OLnBhcnNlKGNhcCk7XG4gIH0gY2F0Y2ggKGlnbikgeyB9XG5cbiAgaWYgKF8uaXNBcnJheShwYXJzZWRDYXBzKSkge1xuICAgIHJldHVybiBwYXJzZWRDYXBzO1xuICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY2FwKSkge1xuICAgIHJldHVybiBbY2FwXTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgbXVzdCBwcm92aWRlIGEgc3RyaW5nIG9yIEpTT04gQXJyYXk7IHJlY2VpdmVkICR7Y2FwfWApO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBkZXNpcmVkIGNhcGFiaWxpdGllcy4gUmV0dXJucyB0cnVlIGlmIGNhcGFiaWxpdHkgaXMgdmFsaWRcbiAqXG4gKiBAcGFyYW0geyp9IGNhcCBBIGRlc2lyZWQgY2FwYWJpbGl0eVxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIHRoZSBjYXBhYmlsaXR5IGlzIHZhbGlkXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGNhcHMgaGFzIGludmFsaWQgY2FwYWJpbGl0eVxuICovXG5oZWxwZXJzLnZhbGlkYXRlRGVzaXJlZENhcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZURlc2lyZWRDYXBzIChjYXBzKSB7XG4gIGlmIChjYXBzLmJyb3dzZXJOYW1lKSB7XG4gICAgaWYgKGNhcHMuYXBwKSB7XG4gICAgICAvLyB3YXJuIGlmIHRoZSBjYXBhYmlsaXRpZXMgaGF2ZSBib3RoIGBhcHBgIGFuZCBgYnJvd3NlciwgYWx0aG91Z2ggdGhpcyBpcyBjb21tb24gd2l0aCBzZWxlbml1bSBncmlkXG4gICAgICBsb2dnZXIud2FybihgVGhlIGRlc2lyZWQgY2FwYWJpbGl0aWVzIHNob3VsZCBnZW5lcmFsbHkgbm90IGluY2x1ZGUgYm90aCBhbiAnYXBwJyBhbmQgYSAnYnJvd3Nlck5hbWUnYCk7XG4gICAgfVxuICAgIGlmIChjYXBzLmFwcFBhY2thZ2UpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBUaGUgZGVzaXJlZCBzaG91bGQgbm90IGluY2x1ZGUgYm90aCBvZiBhbiAnYXBwUGFja2FnZScgYW5kIGEgJ2Jyb3dzZXJOYW1lJ2ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBzLnVuaW5zdGFsbE90aGVyUGFja2FnZXMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5wYXJzZUFycmF5KGNhcHMudW5pbnN0YWxsT3RoZXJQYWNrYWdlcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yQW5kVGhyb3coYENvdWxkIG5vdCBwYXJzZSBcInVuaW5zdGFsbE90aGVyUGFja2FnZXNcIiBjYXBhYmlsaXR5OiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQWRqdXN0IHRoZSBjYXBhYmlsaXRpZXMgZm9yIGEgYnJvd3NlciBzZXNzaW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNhcHMgLSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3RcbiAqICEhISBUaGUgb2JqZWN0IGlzIG11dGF0ZWQgYnkgdGhpcyBtZXRob2QgY2FsbCAhISFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIHBvc3NpYmx5IG11dGF0ZWQgYG9wdHNgIGluc3RhbmNlLlxuICogTm8gbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlzIHRoZSBjdXJyZW50IHNlc3Npb24gaWZcbiAqIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwcyBoYXZlIGFscmVhZHkgYmVlbiBwcm92aWRlZC5cbiAqL1xuaGVscGVycy5hZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgPSBmdW5jdGlvbiBhZGp1c3RCcm93c2VyU2Vzc2lvbkNhcHMgKGNhcHMgPSB7fSkge1xuICBjb25zdCB7IGJyb3dzZXJOYW1lIH0gPSBjYXBzO1xuICBsb2dnZXIuaW5mbyhgVGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGJyb3dzZXItYmFzZWRgKTtcbiAgbG9nZ2VyLmluZm8oYFN1cHBvcnRlZCBicm93c2VyIG5hbWVzOiAke0pTT04uc3RyaW5naWZ5KF8ua2V5cyhDSFJPTUVfQlJPV1NFUl9QQUNLQUdFX0FDVElWSVRZKSl9YCk7XG4gIGlmIChjYXBzLmFwcFBhY2thZ2UgfHwgY2Fwcy5hcHBBY3Rpdml0eSkge1xuICAgIGxvZ2dlci5pbmZvKGBOb3Qgb3ZlcnJpZGluZyBhcHBQYWNrYWdlL2FwcEFjdGl2aXR5IGNhcGFiaWxpdHkgdmFsdWVzIGZvciAnJHticm93c2VyTmFtZX0nIGAgK1xuICAgICAgJ2JlY2F1c2Ugc29tZSBvZiB0aGVtIGhhdmUgYmVlbiBhbHJlYWR5IHByb3ZpZGVkJyk7XG4gICAgcmV0dXJuIGNhcHM7XG4gIH1cblxuICBjb25zdCB7cGtnLCBhY3Rpdml0eX0gPSB0aGlzLmdldENocm9tZVBrZyhicm93c2VyTmFtZSk7XG4gIGNhcHMuYXBwUGFja2FnZSA9IHBrZztcbiAgY2Fwcy5hcHBBY3Rpdml0eSA9IGFjdGl2aXR5O1xuICBsb2dnZXIuaW5mbyhgYXBwUGFja2FnZS9hcHBBY3Rpdml0eSBjYXBhYmlsaXRpZXMgaGF2ZSBiZWVuIGF1dG9tYXRpY2FsbHkgc2V0IHRvICR7cGtnfS8ke2FjdGl2aXR5fSBgICtcbiAgICBgZm9yICcke2Jyb3dzZXJOYW1lfSdgKTtcbiAgbG9nZ2VyLmluZm8oYENvbnNpZGVyIGNoYW5naW5nIHRoZSBicm93c2VyTmFtZSB0byB0aGUgb25lIGZyb20gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGJyb3dzZXIgbmFtZXMgYCArXG4gICAgYG9yIHByb3ZpZGUgY3VzdG9tIGFwcFBhY2thZ2UvYXBwQWN0aXZpdHkgY2FwYWJpbGl0eSB2YWx1ZXMgaWYgdGhlIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgb25lcyBkbyBgICtcbiAgICBgbm90IG1ha2Ugc2Vuc2VgKTtcbiAgcmV0dXJuIGNhcHM7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGRldmljZSB1bmRlciB0ZXN0IGlzIGFuIGVtdWxhdG9yXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiAtIGFwcGl1bS1hZGIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gZHJpdmVyIG9wdGlvbnMgbWFwcGluZ1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZGV2aWNlIGlzIGFuIEFuZHJvaWQgZW11bGF0b3JcbiAqL1xuaGVscGVycy5pc0VtdWxhdG9yID0gZnVuY3Rpb24gaXNFbXVsYXRvciAoYWRiLCBvcHRzKSB7XG4gIGNvbnN0IHBvc3NpYmxlTmFtZXMgPSBbb3B0cy51ZGlkLCBhZGI/LmN1ckRldmljZUlkXTtcbiAgcmV0dXJuICEhb3B0cy5hdmQgfHwgcG9zc2libGVOYW1lcy5zb21lKCh4KSA9PiBFTVVMQVRPUl9QQVRURVJOLnRlc3QoeCkpO1xufTtcblxuaGVscGVycy5ib290c3RyYXAgPSBCb290c3RyYXA7XG5oZWxwZXJzLnVubG9ja2VyID0gdW5sb2NrZXI7XG5cbmV4cG9ydCB7IGhlbHBlcnMsIFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQsIEFQUF9TVEFURSwgcHJlcGFyZUF2ZEFyZ3MsIGVuc3VyZU5ldHdvcmtTcGVlZCB9O1xuZXhwb3J0IGRlZmF1bHQgaGVscGVycztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7QUFDQTs7Ozs7O0FBRUEsTUFBTUEsdUJBQXVCLEdBQUcsS0FBaEM7QUFFQSxNQUFNQywrQkFBK0IsR0FBRztFQUN0Q0MsTUFBTSxFQUFFO0lB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
@@ -17,11 +17,11 @@ var _path = _interopRequireDefault(require("path"));
17
17
 
18
18
  var _lodash = _interopRequireDefault(require("lodash"));
19
19
 
20
- var _baseDriver = require("@appium/base-driver");
20
+ var _driver = require("appium/driver");
21
21
 
22
22
  var _bluebird = _interopRequireDefault(require("bluebird"));
23
23
 
24
- var _support = require("@appium/support");
24
+ var _support = require("appium/support");
25
25
 
26
26
  const log = _support.logger.getLogger('AndroidBootstrap');
27
27
 
@@ -157,12 +157,12 @@ class AndroidBootstrap {
157
157
  return resolve(streamData.value);
158
158
  }
159
159
 
160
- reject((0, _baseDriver.errorFromCode)(streamData.status, streamData.value));
160
+ reject((0, _driver.errorFromCode)(streamData.status, streamData.value));
161
161
  } catch (err) {
162
162
  if (!_lodash.default.isString(streamData)) {
163
163
  log.error('Got an unexpected error inside socket listener');
164
164
  log.error(err.stack);
165
- return reject((0, _baseDriver.errorFromCode)(13, err.message));
165
+ return reject((0, _driver.errorFromCode)(13, err.message));
166
166
  }
167
167
 
168
168
  log.debug(`Stream still not complete, waiting up to ${SEND_COMMAND_TIMEOUT}ms for the data to arrive`);
@@ -171,7 +171,7 @@ class AndroidBootstrap {
171
171
  const errMsg = `Server socket stopped responding. The recent response was '${streamData}'`;
172
172
  log.error(errMsg);
173
173
  this.socketClient.removeAllListeners('data');
174
- reject((0, _baseDriver.errorFromCode)(13, errMsg));
174
+ reject((0, _driver.errorFromCode)(13, errMsg));
175
175
  }, SEND_COMMAND_TIMEOUT);
176
176
  }
177
177
  });
@@ -228,4 +228,4 @@ var _default = AndroidBootstrap;
228
228
  exports.default = _default;require('source-map-support').install();
229
229
 
230
230
 
231
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2Jvb3RzdHJhcC5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIkNPTU1BTkRfVFlQRVMiLCJBQ1RJT04iLCJTSFVURE9XTiIsIlNFTkRfQ09NTUFORF9USU1FT1VUIiwiQW5kcm9pZEJvb3RzdHJhcCIsImNvbnN0cnVjdG9yIiwiYWRiIiwic3lzdGVtUG9ydCIsIndlYlNvY2tldCIsInVuZGVmaW5lZCIsImlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZSIsInJlamVjdCIsIkIiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJjYW5jZWwiLCJzdGFydCIsImFwcFBhY2thZ2UiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwiYWNjZXB0U3NsQ2VydHMiLCJyb290RGlyIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJzdGFydERldGVjdG9yIiwicyIsInRlc3QiLCJib290c3RyYXBKYXIiLCJpbml0IiwiZm9yd2FyZFBvcnQiLCJwcm9jZXNzIiwidWlBdXRvbWF0b3IiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsImFsZXJ0UmUiLCJkZWJ1ZyIsInNvY2tldHMiLCJlbWl0IiwibWVzc2FnZSIsInN0ZG91dExpbmVzIiwic3BsaXQiLCJ1aWF1dG9Mb2ciLCJsaW5lIiwidHJpbSIsImlubmVyTGluZSIsImV4ZWMiLCJsb2dNZXRob2QiLCJpbmZvIiwiYmluZCIsInN0ZGVyckxpbmVzIiwic29ja2V0Q2xpZW50IiwibmV0IiwiY29ubmVjdCIsImVyciIsIkVycm9yIiwib25jZSIsImVycm9yQW5kVGhyb3ciLCJzZW5kQ29tbWFuZCIsInR5cGUiLCJleHRyYSIsImNtZCIsIk9iamVjdCIsImFzc2lnbiIsImNtZEpzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiXyIsInRydW5jYXRlIiwibGVuZ3RoIiwid3JpdGUiLCJzZXRFbmNvZGluZyIsInN0cmVhbURhdGEiLCJzZW5kQ29tbWFuZFRpbWVvdXRIYW5kbGVyIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInBhcnNlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RhdHVzIiwidmFsdWUiLCJlcnJvckZyb21Db2RlIiwiaXNTdHJpbmciLCJlcnJvciIsInN0YWNrIiwic2V0VGltZW91dCIsImVyck1zZyIsInNlbmRBY3Rpb24iLCJhY3Rpb24iLCJwYXJhbXMiLCJzaHV0ZG93biIsIndhcm4iLCJVaUF1dG9tYXRvciIsIkVWRU5UX0NIQU5HRUQiLCJtc2ciLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJpZ25vcmUiLCJfaWdub3JlVW5leHBlY3RlZFNodXRkb3duIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2Jvb3RzdHJhcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVWlBdXRvbWF0b3IgZnJvbSAnLi91aWF1dG9tYXRvcic7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvckZyb21Db2RlIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0FuZHJvaWRCb290c3RyYXAnKTtcbmNvbnN0IENPTU1BTkRfVFlQRVMgPSB7XG4gIEFDVElPTjogJ2FjdGlvbicsXG4gIFNIVVRET1dOOiAnc2h1dGRvd24nXG59O1xuY29uc3QgU0VORF9DT01NQU5EX1RJTUVPVVQgPSAxICogNjAgKiAxMDAwO1xuXG5jbGFzcyBBbmRyb2lkQm9vdHN0cmFwIHtcbiAgY29uc3RydWN0b3IgKGFkYiwgc3lzdGVtUG9ydCA9IDQ3MjQsIHdlYlNvY2tldCA9IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuYWRiID0gYWRiO1xuICAgIHRoaXMuc3lzdGVtUG9ydCA9IHN5c3RlbVBvcnQ7XG4gICAgdGhpcy53ZWJTb2NrZXQgPSB3ZWJTb2NrZXQ7XG4gICAgdGhpcy5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24gPSBmYWxzZTtcbiAgfVxuXG4gIGdldCBvblVuZXhwZWN0ZWRTaHV0ZG93biAoKSB7XG4gICAgaWYgKCF0aGlzLl9vblVuZXhwZWN0ZWRTaHV0ZG93blByb21pc2UpIHtcbiAgICAgIGxldCByZWplY3Q7XG4gICAgICB0aGlzLl9vblVuZXhwZWN0ZWRTaHV0ZG93blByb21pc2UgPSBuZXcgQihmdW5jdGlvbiBfb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlIChfcmVzb2x2ZSwgX3JlamVjdCkge1xuICAgICAgICByZWplY3QgPSBfcmVqZWN0O1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9vblVuZXhwZWN0ZWRTaHV0ZG93blByb21pc2UuY2FuY2VsID0gcmVqZWN0O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fb25VbmV4cGVjdGVkU2h1dGRvd25Qcm9taXNlO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQgKGFwcFBhY2thZ2UsIGRpc2FibGVBbmRyb2lkV2F0Y2hlcnMgPSBmYWxzZSwgYWNjZXB0U3NsQ2VydHMgPSBmYWxzZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByb290RGlyID0gcGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgJy4uJywgJy4uJyk7XG4gICAgICBjb25zdCBzdGFydERldGVjdG9yID0gKHMpID0+IC9BcHBpdW0gU29ja2V0IFNlcnZlciBSZWFkeS8udGVzdChzKTtcbiAgICAgIGNvbnN0IGJvb3RzdHJhcEphciA9IHBhdGgucmVzb2x2ZShyb290RGlyLCAnYm9vdHN0cmFwJywgJ2JpbicsICdBcHBpdW1Cb290c3RyYXAuamFyJyk7XG5cbiAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgYXdhaXQgdGhpcy5hZGIuZm9yd2FyZFBvcnQodGhpcy5zeXN0ZW1Qb3J0LCA0NzI0KTtcbiAgICAgIHRoaXMucHJvY2VzcyA9IGF3YWl0IHRoaXMudWlBdXRvbWF0b3Iuc3RhcnQoXG4gICAgICAgICAgICAgICAgICAgICAgIGJvb3RzdHJhcEphciwgJ2lvLmFwcGl1bS5hbmRyb2lkLmJvb3RzdHJhcC5Cb290c3RyYXAnLFxuICAgICAgICAgICAgICAgICAgICAgICBzdGFydERldGVjdG9yLCAnLWUnLCAncGtnJywgYXBwUGFja2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgJy1lJywgJ2Rpc2FibGVBbmRyb2lkV2F0Y2hlcnMnLCBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAnLWUnLCAnYWNjZXB0U3NsQ2VydHMnLCBhY2NlcHRTc2xDZXJ0cyk7XG5cbiAgICAgIC8vIHByb2Nlc3MgdGhlIG91dHB1dFxuICAgICAgdGhpcy5wcm9jZXNzLm9uKCdvdXRwdXQnLCAoc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgY29uc3QgYWxlcnRSZSA9IC9FbWl0dGluZyBzeXN0ZW0gYWxlcnQgbWVzc2FnZS87XG4gICAgICAgIGlmIChhbGVydFJlLnRlc3Qoc3Rkb3V0KSkge1xuICAgICAgICAgIGxvZy5kZWJ1ZygnRW1pdHRpbmcgYWxlcnQgbWVzc2FnZS4uLicpO1xuICAgICAgICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy53ZWJTb2NrZXQuc29ja2V0cy5lbWl0KCdhbGVydCcsIHttZXNzYWdlOiBzdGRvdXR9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGUgYm9vdHN0cmFwIGxvZ2dlciB3cmFwcyBpdHMgb3duIGxvZyBsaW5lcyB3aXRoXG4gICAgICAgIC8vIFtBUFBJVU0tVUlBVVRPXSAuLi4gW0FQUElVTS1VSUFVVE9dXG4gICAgICAgIC8vIGFuZCBsZWF2ZXMgYWN0dWFsIFVpQXV0b21hdG9yIGxvZ3MgYXMgdGhleSBhcmVcbiAgICAgICAgbGV0IHN0ZG91dExpbmVzID0gKHN0ZG91dCB8fCAnJykuc3BsaXQoJ1xcbicpO1xuICAgICAgICBjb25zdCB1aWF1dG9Mb2cgPSAvXFxbQVBQSVVNLVVJQVVUT1xcXSguKylcXFtcXC9BUFBJVU0tVUlBVVRPXFxdLztcbiAgICAgICAgZm9yIChsZXQgbGluZSBvZiBzdGRvdXRMaW5lcykge1xuICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSkge1xuICAgICAgICAgICAgaWYgKHVpYXV0b0xvZy50ZXN0KGxpbmUpKSB7XG4gICAgICAgICAgICAgIGxldCBpbm5lckxpbmUgPSB1aWF1dG9Mb2cuZXhlYyhsaW5lKVsxXS50cmltKCk7XG4gICAgICAgICAgICAgIGxldCBsb2dNZXRob2QgPSBsb2cuaW5mby5iaW5kKGxvZyk7XG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBib290c3RyYXAgbG9nIGNvbnNpZGVycyBzb21ldGhpbmcgZGVidWcsIGxvZyB0aGF0IGFzXG4gICAgICAgICAgICAgIC8vIGRlYnVnIGFuZCBub3QgaW5mb1xuICAgICAgICAgICAgICBpZiAoL1xcW2RlYnVnXFxdLy50ZXN0KGlubmVyTGluZSkpIHtcbiAgICAgICAgICAgICAgICBsb2dNZXRob2QgPSBsb2cuZGVidWcuYmluZChsb2cpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxvZ01ldGhvZChgW0JPT1RTVFJBUCBMT0ddICR7aW5uZXJMaW5lfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbG9nLmRlYnVnKGBbVUlBVVRPIFNURE9VVF0gJHtsaW5lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGRlcnJMaW5lcyA9IChzdGRlcnIgfHwgJycpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgbGluZSBvZiBzdGRlcnJMaW5lcykge1xuICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBbVUlBVVRPIFNUREVSUl0gJHtsaW5lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIG9ubHkgcmV0dXJuIHdoZW4gdGhlIHNvY2tldCBjbGllbnQgaGFzIGNvbm5lY3RlZFxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnNvY2tldENsaWVudCA9IG5ldC5jb25uZWN0KHRoaXMuc3lzdGVtUG9ydCk7XG4gICAgICAgICAgLy8gV2luZG93czogdGhlIHNvY2tldCBlcnJvcnMgb3V0IHdoZW4gQURCIHJlc3RhcnRzLiBMZXQncyBjYXRjaCBpdCB0byBhdm9pZCBjcmFzaGluZy5cbiAgICAgICAgICB0aGlzLnNvY2tldENsaWVudC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaWdub3JlVW5leHBlY3RlZFNodXRkb3duKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQW5kcm9pZCBib290c3RyYXAgc29ja2V0IGNyYXNoZWQ6ICR7ZXJyfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc29ja2V0Q2xpZW50Lm9uY2UoJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBsb2cuaW5mbygnQW5kcm9pZCBib290c3RyYXAgc29ja2V0IGlzIG5vdyBjb25uZWN0ZWQnKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYEVycm9yIG9jY3VyZWQgd2hpbGUgc3RhcnRpbmcgQW5kcm9pZEJvb3RzdHJhcC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRDb21tYW5kICh0eXBlLCBleHRyYSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNvY2tldENsaWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb2NrZXQgY29ubmVjdGlvbiBjbG9zZWQgdW5leHBlY3RlZGx5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBjbWQgPSBPYmplY3QuYXNzaWduKHtjbWQ6IHR5cGV9LCBleHRyYSk7XG4gICAgICBsZXQgY21kSnNvbiA9IGAke0pTT04uc3RyaW5naWZ5KGNtZCl9IFxcbmA7XG4gICAgICBsb2cuZGVidWcoYFNlbmRpbmcgY29tbWFuZCB0byBhbmRyb2lkOiAke18udHJ1bmNhdGUoY21kSnNvbiwge2xlbmd0aDogMTAwMH0pLnRyaW0oKX1gKTtcbiAgICAgIHRoaXMuc29ja2V0Q2xpZW50LndyaXRlKGNtZEpzb24pO1xuICAgICAgdGhpcy5zb2NrZXRDbGllbnQuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcbiAgICAgIGxldCBzdHJlYW1EYXRhID0gJyc7XG4gICAgICBsZXQgc2VuZENvbW1hbmRUaW1lb3V0SGFuZGxlciA9IG51bGw7XG4gICAgICB0aGlzLnNvY2tldENsaWVudC5vbignZGF0YScsIChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChzZW5kQ29tbWFuZFRpbWVvdXRIYW5kbGVyKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHNlbmRDb21tYW5kVGltZW91dEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGxvZy5kZWJ1ZygnUmVjZWl2ZWQgY29tbWFuZCByZXN1bHQgZnJvbSBib290c3RyYXAnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzdHJlYW1EYXRhID0gSlNPTi5wYXJzZShzdHJlYW1EYXRhICsgZGF0YSk7XG4gICAgICAgICAgLy8gd2Ugc3VjY2Vzc2Z1bGx5IHBhcnNlZCBKU09OIHNvIHdlJ3ZlIGdvdCBhbGwgdGhlIGRhdGEsXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBzb2NrZXQgbGlzdGVuZXIgYW5kIGV2YWx1YXRlXG4gICAgICAgICAgdGhpcy5zb2NrZXRDbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJyk7XG4gICAgICAgICAgaWYgKHN0cmVhbURhdGEuc3RhdHVzID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShzdHJlYW1EYXRhLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVqZWN0KGVycm9yRnJvbUNvZGUoc3RyZWFtRGF0YS5zdGF0dXMsIHN0cmVhbURhdGEudmFsdWUpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKCFfLmlzU3RyaW5nKHN0cmVhbURhdGEpKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoJ0dvdCBhbiB1bmV4cGVjdGVkIGVycm9yIGluc2lkZSBzb2NrZXQgbGlzdGVuZXInKTtcbiAgICAgICAgICAgIGxvZy5lcnJvcihlcnIuc3RhY2spO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvckZyb21Db2RlKDEzLCBlcnIubWVzc2FnZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cuZGVidWcoYFN0cmVhbSBzdGlsbCBub3QgY29tcGxldGUsIHdhaXRpbmcgdXAgdG8gJHtTRU5EX0NPTU1BTkRfVElNRU9VVH1tcyBmb3IgdGhlIGRhdGEgdG8gYXJyaXZlYCk7XG4gICAgICAgICAgc3RyZWFtRGF0YSArPSBkYXRhO1xuICAgICAgICAgIHNlbmRDb21tYW5kVGltZW91dEhhbmRsZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVyck1zZyA9IGBTZXJ2ZXIgc29ja2V0IHN0b3BwZWQgcmVzcG9uZGluZy4gVGhlIHJlY2VudCByZXNwb25zZSB3YXMgJyR7c3RyZWFtRGF0YX0nYDtcbiAgICAgICAgICAgIGxvZy5lcnJvcihlcnJNc2cpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXRDbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJyk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3JGcm9tQ29kZSgxMywgZXJyTXNnKSk7XG4gICAgICAgICAgfSwgU0VORF9DT01NQU5EX1RJTUVPVVQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRBY3Rpb24gKGFjdGlvbiwgcGFyYW1zID0ge30pIHtcbiAgICBsZXQgZXh0cmEgPSB7YWN0aW9uLCBwYXJhbXN9O1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKENPTU1BTkRfVFlQRVMuQUNUSU9OLCBleHRyYSk7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93biAoKSB7XG4gICAgaWYgKCF0aGlzLnVpQXV0b21hdG9yKSB7XG4gICAgICBsb2cud2FybignQ2Fubm90IHNodXQgZG93biBBbmRyb2lkIGJvb3RzdHJhcDsgaXQgaGFzIGFscmVhZHkgc2h1dCBkb3duJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gcmVtb3ZlIGxpc3RuZXJzIHNvIHdlIGRvbid0IHRyaWdnZXIgdW5leHBlY3RlZCBzaHV0ZG93blxuICAgIHRoaXMudWlBdXRvbWF0b3IucmVtb3ZlQWxsTGlzdGVuZXJzKFVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQpO1xuICAgIGlmICh0aGlzLnNvY2tldENsaWVudCkge1xuICAgICAgYXdhaXQgdGhpcy5zZW5kQ29tbWFuZChDT01NQU5EX1RZUEVTLlNIVVRET1dOKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy51aUF1dG9tYXRvci5zaHV0ZG93bigpO1xuICAgIHRoaXMudWlBdXRvbWF0b3IgPSBudWxsO1xuICB9XG5cbiAgLy8gdGhpcyBoZWxwZXIgZnVuY3Rpb24gbWFrZXMgdW5pdCB0ZXN0aW5nIGVhc2llci5cbiAgYXN5bmMgaW5pdCAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVxdWlyZS1hd2FpdFxuICAgIHRoaXMudWlBdXRvbWF0b3IgPSBuZXcgVWlBdXRvbWF0b3IodGhpcy5hZGIpO1xuXG4gICAgLy8gSGFuZGxlIHVuZXhwZWN0ZWQgVWlBdXRvbWF0b3Igc2h1dGRvd25cbiAgICB0aGlzLnVpQXV0b21hdG9yLm9uKFVpQXV0b21hdG9yLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IFVpQXV0b21hdG9yLlNUQVRFX1NUT1BQRUQpIHtcbiAgICAgICAgdGhpcy51aUF1dG9tYXRvciA9IG51bGw7XG4gICAgICAgIHRoaXMub25VbmV4cGVjdGVkU2h1dGRvd24uY2FuY2VsKG5ldyBFcnJvcignVWlBVXRvbWF0b3Igc2h1dCBkb3duIHVuZXhwZWN0ZWRseScpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldCBpZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24gKGlnbm9yZSkge1xuICAgIGxvZy5kZWJ1ZyhgJHtpZ25vcmUgPyAnSWdub3JpbmcnIDogJ1dhdGNoaW5nIGZvcid9IGJvb3RzdHJhcCBkaXNjb25uZWN0YCk7XG4gICAgdGhpcy5faWdub3JlVW5leHBlY3RlZFNodXRkb3duID0gaWdub3JlO1xuICB9XG5cbiAgZ2V0IGlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93bjtcbiAgfVxufVxuXG5leHBvcnQgeyBBbmRyb2lkQm9vdHN0cmFwLCBDT01NQU5EX1RZUEVTIH07XG5leHBvcnQgZGVmYXVsdCBBbmRyb2lkQm9vdHN0cmFwO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLGtCQUFqQixDQUFaOztBQUNBLE1BQU1DLGFBQWEsR0FBRztFQUNwQkMsTUFBTSxFQUFFLFFBRFk7RUFFcEJDLFFBQVEsRUFBRTtBQUZVLENBQXRCOztBQUlBLE1BQU1DLG9CQUFvQixHQUFHLElBQUksRUFBSixHQUFTLElBQXRDOztBQUVBLE1BQU1DLGdCQUFOLENBQXVCO0VBQ3JCQyxXQUFXLENBQUVDLEdBQUYsRUFBT0MsVUFBVSxHQUFHLElBQXBCLEVBQTBCQyxTQUFTLEdBQUdDLFNBQXRDLEVBQWlEO0lBQzFELEtBQUtILEdBQUwsR0FBV0EsR0FBWDtJQUNBLEtBQUtDLFVBQUwsR0FBa0JBLFVBQWxCO0lBQ0EsS0FBS0MsU0FBTCxHQUFpQkEsU0FBakI7SUFDQSxLQUFLRSx3QkFBTCxHQUFnQyxLQUFoQztFQUNEOztFQUV1QixJQUFwQkMsb0JBQW9CLEdBQUk7SUFDMUIsSUFBSSxDQUFDLEtBQUtDLDRCQUFWLEVBQXdDO01BQ3RDLElBQUlDLE1BQUo7TUFDQSxLQUFLRCw0QkFBTCxHQUFvQyxJQUFJRSxpQkFBSixDQUFNLFNBQVNGLDRCQUFULENBQXVDRyxRQUF2QyxFQUFpREMsT0FBakQsRUFBMEQ7UUFDbEdILE1BQU0sR0FBR0csT0FBVDtNQUNELENBRm1DLENBQXBDO01BR0EsS0FBS0osNEJBQUwsQ0FBa0NLLE1BQWxDLEdBQTJDSixNQUEzQztJQUNEOztJQUNELE9BQU8sS0FBS0QsNEJBQVo7RUFDRDs7RUFFVSxNQUFMTSxLQUFLLENBQUVDLFVBQUYsRUFBY0Msc0JBQXNCLEdBQUcsS0FBdkMsRUFBOENDLGNBQWMsR0FBRyxLQUEvRCxFQUFzRTtJQUMvRSxJQUFJO01BQ0YsTUFBTUMsT0FBTyxHQUFHQyxhQUFBLENBQUtDLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixJQUF4QixFQUE4QixJQUE5QixDQUFoQjs7TUFDQSxNQUFNQyxhQUFhLEdBQUlDLENBQUQsSUFBTyw2QkFBNkJDLElBQTdCLENBQWtDRCxDQUFsQyxDQUE3Qjs7TUFDQSxNQUFNRSxZQUFZLEdBQUdOLGFBQUEsQ0FBS0MsT0FBTCxDQUFhRixPQUFiLEVBQXNCLFdBQXRCLEVBQW1DLEtBQW5DLEVBQTBDLHFCQUExQyxDQUFyQjs7TUFFQSxNQUFNLEtBQUtRLElBQUwsRUFBTjtNQUNBLE1BQU0sS0FBS3hCLEdBQUwsQ0FBU3lCLFdBQVQsQ0FBcUIsS0FBS3hCLFVBQTFCLEVBQXNDLElBQXRDLENBQU47TUFDQSxLQUFLeUIsT0FBTCxHQUFlLE1BQU0sS0FBS0MsV0FBTCxDQUFpQmYsS0FBakIsQ0FDSlcsWUFESSxFQUNVLHVDQURWLEVBRUpILGFBRkksRUFFVyxJQUZYLEVBRWlCLEtBRmpCLEVBRXdCUCxVQUZ4QixFQUdKLElBSEksRUFHRSx3QkFIRixFQUc0QkMsc0JBSDVCLEVBSUosSUFKSSxFQUlFLGdCQUpGLEVBSW9CQyxjQUpwQixDQUFyQjtNQU9BLEtBQUtXLE9BQUwsQ0FBYUUsRUFBYixDQUFnQixRQUFoQixFQUEwQixDQUFDQyxNQUFELEVBQVNDLE1BQVQsS0FBb0I7UUFDNUMsTUFBTUMsT0FBTyxHQUFHLCtCQUFoQjs7UUFDQSxJQUFJQSxPQUFPLENBQUNULElBQVIsQ0FBYU8sTUFBYixDQUFKLEVBQTBCO1VBQ3hCdEMsR0FBRyxDQUFDeUMsS0FBSixDQUFVLDJCQUFWOztVQUNBLElBQUksS0FBSzlCLFNBQVQsRUFBb0I7WUFDbEIsS0FBS0EsU0FBTCxDQUFlK0IsT0FBZixDQUF1QkMsSUFBdkIsQ0FBNEIsT0FBNUIsRUFBcUM7Y0FBQ0MsT0FBTyxFQUFFTjtZQUFWLENBQXJDO1VBQ0Q7UUFDRjs7UUFLRCxJQUFJTyxXQUFXLEdBQUcsQ0FBQ1AsTUFBTSxJQUFJLEVBQVgsRUFBZVEsS0FBZixDQUFxQixJQUFyQixDQUFsQjtRQUNBLE1BQU1DLFNBQVMsR0FBRywwQ0FBbEI7O1FBQ0EsS0FBSyxJQUFJQyxJQUFULElBQWlCSCxXQUFqQixFQUE4QjtVQUM1QixJQUFJRyxJQUFJLENBQUNDLElBQUwsRUFBSixFQUFpQjtZQUNmLElBQUlGLFNBQVMsQ0FBQ2hCLElBQVYsQ0FBZWlCLElBQWYsQ0FBSixFQUEwQjtjQUN4QixJQUFJRSxTQUFTLEdBQUdILFNBQVMsQ0FBQ0ksSUFBVixDQUFlSCxJQUFmLEVBQXFCLENBQXJCLEVBQXdCQyxJQUF4QixFQUFoQjtjQUNBLElBQUlHLFNBQVMsR0FBR3BELEdBQUcsQ0FBQ3FELElBQUosQ0FBU0MsSUFBVCxDQUFjdEQsR0FBZCxDQUFoQjs7Y0FHQSxJQUFJLFlBQVkrQixJQUFaLENBQWlCbUIsU0FBakIsQ0FBSixFQUFpQztnQkFDL0JFLFNBQVMsR0FBR3BELEdBQUcsQ0FBQ3lDLEtBQUosQ0FBVWEsSUFBVixDQUFldEQsR0FBZixDQUFaO2NBQ0Q7O2NBQ0RvRCxTQUFTLENBQUUsbUJBQWtCRixTQUFVLEVBQTlCLENBQVQ7WUFDRCxDQVRELE1BU087Y0FDTGxELEdBQUcsQ0FBQ3lDLEtBQUosQ0FBVyxtQkFBa0JPLElBQUssRUFBbEM7WUFDRDtVQUNGO1FBQ0Y7O1FBRUQsSUFBSU8sV0FBVyxHQUFHLENBQUNoQixNQUFNLElBQUksRUFBWCxFQUFlTyxLQUFmLENBQXFCLElBQXJCLENBQWxCOztRQUNBLEtBQUssSUFBSUUsSUFBVCxJQUFpQk8sV0FBakIsRUFBOEI7VUFDNUIsSUFBSVAsSUFBSSxDQUFDQyxJQUFMLEVBQUosRUFBaUI7WUFDZmpELEdBQUcsQ0FBQ3lDLEtBQUosQ0FBVyxtQkFBa0JPLElBQUssRUFBbEM7VUFDRDtRQUNGO01BQ0YsQ0FyQ0Q7TUF3Q0EsT0FBTyxNQUFNLElBQUkvQixpQkFBSixDQUFNLENBQUNVLE9BQUQsRUFBVVgsTUFBVixLQUFxQjtRQUN0QyxJQUFJO1VBQ0YsS0FBS3dDLFlBQUwsR0FBb0JDLFlBQUEsQ0FBSUMsT0FBSixDQUFZLEtBQUtoRCxVQUFqQixDQUFwQjtVQUVBLEtBQUs4QyxZQUFMLENBQWtCbkIsRUFBbEIsQ0FBcUIsT0FBckIsRUFBK0JzQixHQUFELElBQVM7WUFDckMsSUFBSSxDQUFDLEtBQUs5Qyx3QkFBVixFQUFvQztjQUNsQyxNQUFNLElBQUkrQyxLQUFKLENBQVcscUNBQW9DRCxHQUFJLEVBQW5ELENBQU47WUFDRDtVQUNGLENBSkQ7VUFLQSxLQUFLSCxZQUFMLENBQWtCSyxJQUFsQixDQUF1QixTQUF2QixFQUFrQyxNQUFNO1lBQ3RDN0QsR0FBRyxDQUFDcUQsSUFBSixDQUFTLDJDQUFUO1lBQ0ExQixPQUFPO1VBQ1IsQ0FIRDtRQUlELENBWkQsQ0FZRSxPQUFPZ0MsR0FBUCxFQUFZO1VBQ1ozQyxNQUFNLENBQUMyQyxHQUFELENBQU47UUFDRDtNQUNGLENBaEJZLENBQWI7SUFpQkQsQ0F2RUQsQ0F1RUUsT0FBT0EsR0FBUCxFQUFZO01BQ1ozRCxHQUFHLENBQUM4RCxhQUFKLENBQW1CLGtFQUFpRUgsR0FBSSxFQUF4RjtJQUNEO0VBQ0Y7O0VBRWdCLE1BQVhJLFdBQVcsQ0FBRUMsSUFBRixFQUFRQyxLQUFLLEdBQUcsRUFBaEIsRUFBb0I7SUFDbkMsSUFBSSxDQUFDLEtBQUtULFlBQVYsRUFBd0I7TUFDdEIsTUFBTSxJQUFJSSxLQUFKLENBQVUsdUNBQVYsQ0FBTjtJQUNEOztJQUVELE9BQU8sTUFBTSxJQUFJM0MsaUJBQUosQ0FBTSxDQUFDVSxPQUFELEVBQVVYLE1BQVYsS0FBcUI7TUFDdEMsSUFBSWtELEdBQUcsR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQWM7UUFBQ0YsR0FBRyxFQUFFRjtNQUFOLENBQWQsRUFBMkJDLEtBQTNCLENBQVY7TUFDQSxJQUFJSSxPQUFPLEdBQUksR0FBRUMsSUFBSSxDQUFDQyxTQUFMLENBQWVMLEdBQWYsQ0FBb0IsS0FBckM7TUFDQWxFLEdBQUcsQ0FBQ3lDLEtBQUosQ0FBVywrQkFBOEIrQixlQUFBLENBQUVDLFFBQUYsQ0FBV0osT0FBWCxFQUFvQjtRQUFDSyxNQUFNLEVBQUU7TUFBVCxDQUFwQixFQUFvQ3pCLElBQXBDLEVBQTJDLEVBQXBGO01BQ0EsS0FBS08sWUFBTCxDQUFrQm1CLEtBQWxCLENBQXdCTixPQUF4QjtNQUNBLEtBQUtiLFlBQUwsQ0FBa0JvQixXQUFsQixDQUE4QixNQUE5QjtNQUNBLElBQUlDLFVBQVUsR0FBRyxFQUFqQjtNQUNBLElBQUlDLHlCQUF5QixHQUFHLElBQWhDO01BQ0EsS0FBS3RCLFlBQUwsQ0FBa0JuQixFQUFsQixDQUFxQixNQUFyQixFQUE4QjBDLElBQUQsSUFBVTtRQUNyQyxJQUFJRCx5QkFBSixFQUErQjtVQUM3QkUsWUFBWSxDQUFDRix5QkFBRCxDQUFaO1FBQ0Q7O1FBQ0Q5RSxHQUFHLENBQUN5QyxLQUFKLENBQVUsd0NBQVY7O1FBQ0EsSUFBSTtVQUNGb0MsVUFBVSxHQUFHUCxJQUFJLENBQUNXLEtBQUwsQ0FBV0osVUFBVSxHQUFHRSxJQUF4QixDQUFiO1VBR0EsS0FBS3ZCLFlBQUwsQ0FBa0IwQixrQkFBbEIsQ0FBcUMsTUFBckM7O1VBQ0EsSUFBSUwsVUFBVSxDQUFDTSxNQUFYLEtBQXNCLENBQTFCLEVBQTZCO1lBQzNCLE9BQU94RCxPQUFPLENBQUNrRCxVQUFVLENBQUNPLEtBQVosQ0FBZDtVQUNEOztVQUNEcEUsTUFBTSxDQUFDLElBQUFxRSx5QkFBQSxFQUFjUixVQUFVLENBQUNNLE1BQXpCLEVBQWlDTixVQUFVLENBQUNPLEtBQTVDLENBQUQsQ0FBTjtRQUNELENBVEQsQ0FTRSxPQUFPekIsR0FBUCxFQUFZO1VBQ1osSUFBSSxDQUFDYSxlQUFBLENBQUVjLFFBQUYsQ0FBV1QsVUFBWCxDQUFMLEVBQTZCO1lBQzNCN0UsR0FBRyxDQUFDdUYsS0FBSixDQUFVLGdEQUFWO1lBQ0F2RixHQUFHLENBQUN1RixLQUFKLENBQVU1QixHQUFHLENBQUM2QixLQUFkO1lBQ0EsT0FBT3hFLE1BQU0sQ0FBQyxJQUFBcUUseUJBQUEsRUFBYyxFQUFkLEVBQWtCMUIsR0FBRyxDQUFDZixPQUF0QixDQUFELENBQWI7VUFDRDs7VUFDRDVDLEdBQUcsQ0FBQ3lDLEtBQUosQ0FBVyw0Q0FBMkNuQyxvQkFBcUIsMkJBQTNFO1VBQ0F1RSxVQUFVLElBQUlFLElBQWQ7VUFDQUQseUJBQXlCLEdBQUdXLFVBQVUsQ0FBQyxNQUFNO1lBQzNDLE1BQU1DLE1BQU0sR0FBSSw4REFBNkRiLFVBQVcsR0FBeEY7WUFDQTdFLEdBQUcsQ0FBQ3VGLEtBQUosQ0FBVUcsTUFBVjtZQUNBLEtBQUtsQyxZQUFMLENBQWtCMEIsa0JBQWxCLENBQXFDLE1BQXJDO1lBQ0FsRSxNQUFNLENBQUMsSUFBQXFFLHlCQUFBLEVBQWMsRUFBZCxFQUFrQkssTUFBbEIsQ0FBRCxDQUFOO1VBQ0QsQ0FMcUMsRUFLbkNwRixvQkFMbUMsQ0FBdEM7UUFNRDtNQUNGLENBN0JEO0lBOEJELENBdENZLENBQWI7RUF1Q0Q7O0VBRWUsTUFBVnFGLFVBQVUsQ0FBRUMsTUFBRixFQUFVQyxNQUFNLEdBQUcsRUFBbkIsRUFBdUI7SUFDckMsSUFBSTVCLEtBQUssR0FBRztNQUFDMkIsTUFBRDtNQUFTQztJQUFULENBQVo7SUFDQSxPQUFPLE1BQU0sS0FBSzlCLFdBQUwsQ0FBaUI1RCxhQUFhLENBQUNDLE1BQS9CLEVBQXVDNkQsS0FBdkMsQ0FBYjtFQUNEOztFQUVhLE1BQVI2QixRQUFRLEdBQUk7SUFDaEIsSUFBSSxDQUFDLEtBQUsxRCxXQUFWLEVBQXVCO01BQ3JCcEMsR0FBRyxDQUFDK0YsSUFBSixDQUFTLDhEQUFUO01BQ0E7SUFDRDs7SUFHRCxLQUFLM0QsV0FBTCxDQUFpQjhDLGtCQUFqQixDQUFvQ2Msb0JBQUEsQ0FBWUMsYUFBaEQ7O0lBQ0EsSUFBSSxLQUFLekMsWUFBVCxFQUF1QjtNQUNyQixNQUFNLEtBQUtPLFdBQUwsQ0FBaUI1RCxhQUFhLENBQUNFLFFBQS9CLENBQU47SUFDRDs7SUFDRCxNQUFNLEtBQUsrQixXQUFMLENBQWlCMEQsUUFBakIsRUFBTjtJQUNBLEtBQUsxRCxXQUFMLEdBQW1CLElBQW5CO0VBQ0Q7O0VBR1MsTUFBSkgsSUFBSSxHQUFJO0lBQ1osS0FBS0csV0FBTCxHQUFtQixJQUFJNEQsb0JBQUosQ0FBZ0IsS0FBS3ZGLEdBQXJCLENBQW5CO0lBR0EsS0FBSzJCLFdBQUwsQ0FBaUJDLEVBQWpCLENBQW9CMkQsb0JBQUEsQ0FBWUMsYUFBaEMsRUFBZ0RDLEdBQUQsSUFBUztNQUN0RCxJQUFJQSxHQUFHLENBQUNDLEtBQUosS0FBY0gsb0JBQUEsQ0FBWUksYUFBOUIsRUFBNkM7UUFDM0MsS0FBS2hFLFdBQUwsR0FBbUIsSUFBbkI7UUFDQSxLQUFLdEIsb0JBQUwsQ0FBMEJNLE1BQTFCLENBQWlDLElBQUl3QyxLQUFKLENBQVUsb0NBQVYsQ0FBakM7TUFDRDtJQUNGLENBTEQ7RUFNRDs7RUFFMkIsSUFBeEIvQyx3QkFBd0IsQ0FBRXdGLE1BQUYsRUFBVTtJQUNwQ3JHLEdBQUcsQ0FBQ3lDLEtBQUosQ0FBVyxHQUFFNEQsTUFBTSxHQUFHLFVBQUgsR0FBZ0IsY0FBZSx1QkFBbEQ7SUFDQSxLQUFLQyx5QkFBTCxHQUFpQ0QsTUFBakM7RUFDRDs7RUFFMkIsSUFBeEJ4Rix3QkFBd0IsR0FBSTtJQUM5QixPQUFPLEtBQUt5Rix5QkFBWjtFQUNEOztBQXRMb0I7OztlQTBMUi9GLGdCIn0=
231
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL2Jvb3RzdHJhcC5qcyIsIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsIkNPTU1BTkRfVFlQRVMiLCJBQ1RJT04iLCJTSFVURE9XTiIsIlNFTkRfQ09NTUFORF9USU1FT1VUIiwiQW5kcm9pZEJvb3RzdHJhcCIsImNvbnN0cnVjdG9yIiwiYWRiIiwic3lzdGVtUG9ydCIsIndlYlNvY2tldCIsInVuZGVmaW5lZCIsImlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZSIsInJlamVjdCIsIkIiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJjYW5jZWwiLCJzdGFydCIsImFwcFBhY2thZ2UiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwiYWNjZXB0U3NsQ2VydHMiLCJyb290RGlyIiwicGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJzdGFydERldGVjdG9yIiwicyIsInRlc3QiLCJib290c3RyYXBKYXIiLCJpbml0IiwiZm9yd2FyZFBvcnQiLCJwcm9jZXNzIiwidWlBdXRvbWF0b3IiLCJvbiIsInN0ZG91dCIsInN0ZGVyciIsImFsZXJ0UmUiLCJkZWJ1ZyIsInNvY2tldHMiLCJlbWl0IiwibWVzc2FnZSIsInN0ZG91dExpbmVzIiwic3BsaXQiLCJ1aWF1dG9Mb2ciLCJsaW5lIiwidHJpbSIsImlubmVyTGluZSIsImV4ZWMiLCJsb2dNZXRob2QiLCJpbmZvIiwiYmluZCIsInN0ZGVyckxpbmVzIiwic29ja2V0Q2xpZW50IiwibmV0IiwiY29ubmVjdCIsImVyciIsIkVycm9yIiwib25jZSIsImVycm9yQW5kVGhyb3ciLCJzZW5kQ29tbWFuZCIsInR5cGUiLCJleHRyYSIsImNtZCIsIk9iamVjdCIsImFzc2lnbiIsImNtZEpzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiXyIsInRydW5jYXRlIiwibGVuZ3RoIiwid3JpdGUiLCJzZXRFbmNvZGluZyIsInN0cmVhbURhdGEiLCJzZW5kQ29tbWFuZFRpbWVvdXRIYW5kbGVyIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInBhcnNlIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RhdHVzIiwidmFsdWUiLCJlcnJvckZyb21Db2RlIiwiaXNTdHJpbmciLCJlcnJvciIsInN0YWNrIiwic2V0VGltZW91dCIsImVyck1zZyIsInNlbmRBY3Rpb24iLCJhY3Rpb24iLCJwYXJhbXMiLCJzaHV0ZG93biIsIndhcm4iLCJVaUF1dG9tYXRvciIsIkVWRU5UX0NIQU5HRUQiLCJtc2ciLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJpZ25vcmUiLCJfaWdub3JlVW5leHBlY3RlZFNodXRkb3duIl0sInNvdXJjZVJvb3QiOiIuLi8uLiIsInNvdXJjZXMiOlsibGliL2Jvb3RzdHJhcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVWlBdXRvbWF0b3IgZnJvbSAnLi91aWF1dG9tYXRvcic7XG5pbXBvcnQgbmV0IGZyb20gJ25ldCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvckZyb21Db2RlIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5cblxuY29uc3QgbG9nID0gbG9nZ2VyLmdldExvZ2dlcignQW5kcm9pZEJvb3RzdHJhcCcpO1xuY29uc3QgQ09NTUFORF9UWVBFUyA9IHtcbiAgQUNUSU9OOiAnYWN0aW9uJyxcbiAgU0hVVERPV046ICdzaHV0ZG93bidcbn07XG5jb25zdCBTRU5EX0NPTU1BTkRfVElNRU9VVCA9IDEgKiA2MCAqIDEwMDA7XG5cbmNsYXNzIEFuZHJvaWRCb290c3RyYXAge1xuICBjb25zdHJ1Y3RvciAoYWRiLCBzeXN0ZW1Qb3J0ID0gNDcyNCwgd2ViU29ja2V0ID0gdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gICAgdGhpcy5zeXN0ZW1Qb3J0ID0gc3lzdGVtUG9ydDtcbiAgICB0aGlzLndlYlNvY2tldCA9IHdlYlNvY2tldDtcbiAgICB0aGlzLmlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IG9uVW5leHBlY3RlZFNodXRkb3duICgpIHtcbiAgICBpZiAoIXRoaXMuX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZSkge1xuICAgICAgbGV0IHJlamVjdDtcbiAgICAgIHRoaXMuX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZSA9IG5ldyBCKGZ1bmN0aW9uIF9vblVuZXhwZWN0ZWRTaHV0ZG93blByb21pc2UgKF9yZXNvbHZlLCBfcmVqZWN0KSB7XG4gICAgICAgIHJlamVjdCA9IF9yZWplY3Q7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX29uVW5leHBlY3RlZFNodXRkb3duUHJvbWlzZS5jYW5jZWwgPSByZWplY3Q7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vblVuZXhwZWN0ZWRTaHV0ZG93blByb21pc2U7XG4gIH1cblxuICBhc3luYyBzdGFydCAoYXBwUGFja2FnZSwgZGlzYWJsZUFuZHJvaWRXYXRjaGVycyA9IGZhbHNlLCBhY2NlcHRTc2xDZXJ0cyA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvb3REaXIgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4nLCAnLi4nKTtcbiAgICAgIGNvbnN0IHN0YXJ0RGV0ZWN0b3IgPSAocykgPT4gL0FwcGl1bSBTb2NrZXQgU2VydmVyIFJlYWR5Ly50ZXN0KHMpO1xuICAgICAgY29uc3QgYm9vdHN0cmFwSmFyID0gcGF0aC5yZXNvbHZlKHJvb3REaXIsICdib290c3RyYXAnLCAnYmluJywgJ0FwcGl1bUJvb3RzdHJhcC5qYXInKTtcblxuICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5mb3J3YXJkUG9ydCh0aGlzLnN5c3RlbVBvcnQsIDQ3MjQpO1xuICAgICAgdGhpcy5wcm9jZXNzID0gYXdhaXQgdGhpcy51aUF1dG9tYXRvci5zdGFydChcbiAgICAgICAgICAgICAgICAgICAgICAgYm9vdHN0cmFwSmFyLCAnaW8uYXBwaXVtLmFuZHJvaWQuYm9vdHN0cmFwLkJvb3RzdHJhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGV0ZWN0b3IsICctZScsICdwa2cnLCBhcHBQYWNrYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAnLWUnLCAnZGlzYWJsZUFuZHJvaWRXYXRjaGVycycsIGRpc2FibGVBbmRyb2lkV2F0Y2hlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICctZScsICdhY2NlcHRTc2xDZXJ0cycsIGFjY2VwdFNzbENlcnRzKTtcblxuICAgICAgLy8gcHJvY2VzcyB0aGUgb3V0cHV0XG4gICAgICB0aGlzLnByb2Nlc3Mub24oJ291dHB1dCcsIChzdGRvdXQsIHN0ZGVycikgPT4ge1xuICAgICAgICBjb25zdCBhbGVydFJlID0gL0VtaXR0aW5nIHN5c3RlbSBhbGVydCBtZXNzYWdlLztcbiAgICAgICAgaWYgKGFsZXJ0UmUudGVzdChzdGRvdXQpKSB7XG4gICAgICAgICAgbG9nLmRlYnVnKCdFbWl0dGluZyBhbGVydCBtZXNzYWdlLi4uJyk7XG4gICAgICAgICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLndlYlNvY2tldC5zb2NrZXRzLmVtaXQoJ2FsZXJ0Jywge21lc3NhZ2U6IHN0ZG91dH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZSBib290c3RyYXAgbG9nZ2VyIHdyYXBzIGl0cyBvd24gbG9nIGxpbmVzIHdpdGhcbiAgICAgICAgLy8gW0FQUElVTS1VSUFVVE9dIC4uLiBbQVBQSVVNLVVJQVVUT11cbiAgICAgICAgLy8gYW5kIGxlYXZlcyBhY3R1YWwgVWlBdXRvbWF0b3IgbG9ncyBhcyB0aGV5IGFyZVxuICAgICAgICBsZXQgc3Rkb3V0TGluZXMgPSAoc3Rkb3V0IHx8ICcnKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGNvbnN0IHVpYXV0b0xvZyA9IC9cXFtBUFBJVU0tVUlBVVRPXFxdKC4rKVxcW1xcL0FQUElVTS1VSUFVVE9cXF0vO1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIHN0ZG91dExpbmVzKSB7XG4gICAgICAgICAgaWYgKGxpbmUudHJpbSgpKSB7XG4gICAgICAgICAgICBpZiAodWlhdXRvTG9nLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgICAgbGV0IGlubmVyTGluZSA9IHVpYXV0b0xvZy5leGVjKGxpbmUpWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgbGV0IGxvZ01ldGhvZCA9IGxvZy5pbmZvLmJpbmQobG9nKTtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGJvb3RzdHJhcCBsb2cgY29uc2lkZXJzIHNvbWV0aGluZyBkZWJ1ZywgbG9nIHRoYXQgYXNcbiAgICAgICAgICAgICAgLy8gZGVidWcgYW5kIG5vdCBpbmZvXG4gICAgICAgICAgICAgIGlmICgvXFxbZGVidWdcXF0vLnRlc3QoaW5uZXJMaW5lKSkge1xuICAgICAgICAgICAgICAgIGxvZ01ldGhvZCA9IGxvZy5kZWJ1Zy5iaW5kKGxvZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbG9nTWV0aG9kKGBbQk9PVFNUUkFQIExPR10gJHtpbm5lckxpbmV9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2cuZGVidWcoYFtVSUFVVE8gU1RET1VUXSAke2xpbmV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0ZGVyckxpbmVzID0gKHN0ZGVyciB8fCAnJykuc3BsaXQoJ1xcbicpO1xuICAgICAgICBmb3IgKGxldCBsaW5lIG9mIHN0ZGVyckxpbmVzKSB7XG4gICAgICAgICAgaWYgKGxpbmUudHJpbSgpKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYFtVSUFVVE8gU1RERVJSXSAke2xpbmV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gb25seSByZXR1cm4gd2hlbiB0aGUgc29ja2V0IGNsaWVudCBoYXMgY29ubmVjdGVkXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuc29ja2V0Q2xpZW50ID0gbmV0LmNvbm5lY3QodGhpcy5zeXN0ZW1Qb3J0KTtcbiAgICAgICAgICAvLyBXaW5kb3dzOiB0aGUgc29ja2V0IGVycm9ycyBvdXQgd2hlbiBBREIgcmVzdGFydHMuIExldCdzIGNhdGNoIGl0IHRvIGF2b2lkIGNyYXNoaW5nLlxuICAgICAgICAgIHRoaXMuc29ja2V0Q2xpZW50Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24pIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbmRyb2lkIGJvb3RzdHJhcCBzb2NrZXQgY3Jhc2hlZDogJHtlcnJ9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zb2NrZXRDbGllbnQub25jZSgnY29ubmVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIGxvZy5pbmZvKCdBbmRyb2lkIGJvb3RzdHJhcCBzb2NrZXQgaXMgbm93IGNvbm5lY3RlZCcpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgRXJyb3Igb2NjdXJlZCB3aGlsZSBzdGFydGluZyBBbmRyb2lkQm9vdHN0cmFwLiBPcmlnaW5hbCBlcnJvcjogJHtlcnJ9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VuZENvbW1hbmQgKHR5cGUsIGV4dHJhID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc29ja2V0Q2xpZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvY2tldCBjb25uZWN0aW9uIGNsb3NlZCB1bmV4cGVjdGVkbHknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IEIoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IGNtZCA9IE9iamVjdC5hc3NpZ24oe2NtZDogdHlwZX0sIGV4dHJhKTtcbiAgICAgIGxldCBjbWRKc29uID0gYCR7SlNPTi5zdHJpbmdpZnkoY21kKX0gXFxuYDtcbiAgICAgIGxvZy5kZWJ1ZyhgU2VuZGluZyBjb21tYW5kIHRvIGFuZHJvaWQ6ICR7Xy50cnVuY2F0ZShjbWRKc29uLCB7bGVuZ3RoOiAxMDAwfSkudHJpbSgpfWApO1xuICAgICAgdGhpcy5zb2NrZXRDbGllbnQud3JpdGUoY21kSnNvbik7XG4gICAgICB0aGlzLnNvY2tldENsaWVudC5zZXRFbmNvZGluZygndXRmOCcpO1xuICAgICAgbGV0IHN0cmVhbURhdGEgPSAnJztcbiAgICAgIGxldCBzZW5kQ29tbWFuZFRpbWVvdXRIYW5kbGVyID0gbnVsbDtcbiAgICAgIHRoaXMuc29ja2V0Q2xpZW50Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHNlbmRDb21tYW5kVGltZW91dEhhbmRsZXIpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoc2VuZENvbW1hbmRUaW1lb3V0SGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgbG9nLmRlYnVnKCdSZWNlaXZlZCBjb21tYW5kIHJlc3VsdCBmcm9tIGJvb3RzdHJhcCcpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN0cmVhbURhdGEgPSBKU09OLnBhcnNlKHN0cmVhbURhdGEgKyBkYXRhKTtcbiAgICAgICAgICAvLyB3ZSBzdWNjZXNzZnVsbHkgcGFyc2VkIEpTT04gc28gd2UndmUgZ290IGFsbCB0aGUgZGF0YSxcbiAgICAgICAgICAvLyByZW1vdmUgdGhlIHNvY2tldCBsaXN0ZW5lciBhbmQgZXZhbHVhdGVcbiAgICAgICAgICB0aGlzLnNvY2tldENsaWVudC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKTtcbiAgICAgICAgICBpZiAoc3RyZWFtRGF0YS5zdGF0dXMgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHN0cmVhbURhdGEudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoZXJyb3JGcm9tQ29kZShzdHJlYW1EYXRhLnN0YXR1cywgc3RyZWFtRGF0YS52YWx1ZSkpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBpZiAoIV8uaXNTdHJpbmcoc3RyZWFtRGF0YSkpIHtcbiAgICAgICAgICAgIGxvZy5lcnJvcignR290IGFuIHVuZXhwZWN0ZWQgZXJyb3IgaW5zaWRlIHNvY2tldCBsaXN0ZW5lcicpO1xuICAgICAgICAgICAgbG9nLmVycm9yKGVyci5zdGFjayk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yRnJvbUNvZGUoMTMsIGVyci5tZXNzYWdlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZy5kZWJ1ZyhgU3RyZWFtIHN0aWxsIG5vdCBjb21wbGV0ZSwgd2FpdGluZyB1cCB0byAke1NFTkRfQ09NTUFORF9USU1FT1VUfW1zIGZvciB0aGUgZGF0YSB0byBhcnJpdmVgKTtcbiAgICAgICAgICBzdHJlYW1EYXRhICs9IGRhdGE7XG4gICAgICAgICAgc2VuZENvbW1hbmRUaW1lb3V0SGFuZGxlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyTXNnID0gYFNlcnZlciBzb2NrZXQgc3RvcHBlZCByZXNwb25kaW5nLiBUaGUgcmVjZW50IHJlc3BvbnNlIHdhcyAnJHtzdHJlYW1EYXRhfSdgO1xuICAgICAgICAgICAgbG9nLmVycm9yKGVyck1zZyk7XG4gICAgICAgICAgICB0aGlzLnNvY2tldENsaWVudC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2RhdGEnKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvckZyb21Db2RlKDEzLCBlcnJNc2cpKTtcbiAgICAgICAgICB9LCBTRU5EX0NPTU1BTkRfVElNRU9VVCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2VuZEFjdGlvbiAoYWN0aW9uLCBwYXJhbXMgPSB7fSkge1xuICAgIGxldCBleHRyYSA9IHthY3Rpb24sIHBhcmFtc307XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZENvbW1hbmQoQ09NTUFORF9UWVBFUy5BQ1RJT04sIGV4dHJhKTtcbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duICgpIHtcbiAgICBpZiAoIXRoaXMudWlBdXRvbWF0b3IpIHtcbiAgICAgIGxvZy53YXJuKCdDYW5ub3Qgc2h1dCBkb3duIEFuZHJvaWQgYm9vdHN0cmFwOyBpdCBoYXMgYWxyZWFkeSBzaHV0IGRvd24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgbGlzdG5lcnMgc28gd2UgZG9uJ3QgdHJpZ2dlciB1bmV4cGVjdGVkIHNodXRkb3duXG4gICAgdGhpcy51aUF1dG9tYXRvci5yZW1vdmVBbGxMaXN0ZW5lcnMoVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCk7XG4gICAgaWYgKHRoaXMuc29ja2V0Q2xpZW50KSB7XG4gICAgICBhd2FpdCB0aGlzLnNlbmRDb21tYW5kKENPTU1BTkRfVFlQRVMuU0hVVERPV04pO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnVpQXV0b21hdG9yLnNodXRkb3duKCk7XG4gICAgdGhpcy51aUF1dG9tYXRvciA9IG51bGw7XG4gIH1cblxuICAvLyB0aGlzIGhlbHBlciBmdW5jdGlvbiBtYWtlcyB1bml0IHRlc3RpbmcgZWFzaWVyLlxuICBhc3luYyBpbml0ICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgdGhpcy51aUF1dG9tYXRvciA9IG5ldyBVaUF1dG9tYXRvcih0aGlzLmFkYik7XG5cbiAgICAvLyBIYW5kbGUgdW5leHBlY3RlZCBVaUF1dG9tYXRvciBzaHV0ZG93blxuICAgIHRoaXMudWlBdXRvbWF0b3Iub24oVWlBdXRvbWF0b3IuRVZFTlRfQ0hBTkdFRCwgKG1zZykgPT4ge1xuICAgICAgaWYgKG1zZy5zdGF0ZSA9PT0gVWlBdXRvbWF0b3IuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICB0aGlzLnVpQXV0b21hdG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5vblVuZXhwZWN0ZWRTaHV0ZG93bi5jYW5jZWwobmV3IEVycm9yKCdVaUFVdG9tYXRvciBzaHV0IGRvd24gdW5leHBlY3RlZGx5JykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0IGlnbm9yZVVuZXhwZWN0ZWRTaHV0ZG93biAoaWdub3JlKSB7XG4gICAgbG9nLmRlYnVnKGAke2lnbm9yZSA/ICdJZ25vcmluZycgOiAnV2F0Y2hpbmcgZm9yJ30gYm9vdHN0cmFwIGRpc2Nvbm5lY3RgKTtcbiAgICB0aGlzLl9pZ25vcmVVbmV4cGVjdGVkU2h1dGRvd24gPSBpZ25vcmU7XG4gIH1cblxuICBnZXQgaWdub3JlVW5leHBlY3RlZFNodXRkb3duICgpIHtcbiAgICByZXR1cm4gdGhpcy5faWdub3JlVW5leHBlY3RlZFNodXRkb3duO1xuICB9XG59XG5cbmV4cG9ydCB7IEFuZHJvaWRCb290c3RyYXAsIENPTU1BTkRfVFlQRVMgfTtcbmV4cG9ydCBkZWZhdWx0IEFuZHJvaWRCb290c3RyYXA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsR0FBRyxHQUFHQyxlQUFBLENBQU9DLFNBQVAsQ0FBaUIsa0JBQWpCLENBQVo7O0FBQ0EsTUFBTUMsYUFBYSxHQUFHO0VBQ3BCQyxNQUFNLEVBQUUsUUFEWTtFQUVwQkMsUUFBUSxFQUFFO0FBRlUsQ0FB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