appium 2.0.0-beta.35 → 2.0.0-beta.39

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 (122) hide show
  1. package/build/lib/appium.d.ts +41 -52
  2. package/build/lib/appium.d.ts.map +1 -1
  3. package/build/lib/appium.js +32 -15
  4. package/build/lib/cli/args.d.ts +1 -1
  5. package/build/lib/cli/args.d.ts.map +1 -1
  6. package/build/lib/cli/args.js +1 -1
  7. package/build/lib/cli/driver-command.d.ts +3 -3
  8. package/build/lib/cli/driver-command.d.ts.map +1 -1
  9. package/build/lib/cli/driver-command.js +1 -1
  10. package/build/lib/cli/extension-command.d.ts +60 -38
  11. package/build/lib/cli/extension-command.d.ts.map +1 -1
  12. package/build/lib/cli/extension-command.js +115 -59
  13. package/build/lib/cli/extension.d.ts +9 -5
  14. package/build/lib/cli/extension.d.ts.map +1 -1
  15. package/build/lib/cli/extension.js +5 -7
  16. package/build/lib/cli/parser.d.ts +3 -3
  17. package/build/lib/cli/parser.d.ts.map +1 -1
  18. package/build/lib/cli/parser.js +1 -1
  19. package/build/lib/cli/plugin-command.d.ts +1 -1
  20. package/build/lib/cli/plugin-command.d.ts.map +1 -1
  21. package/build/lib/cli/plugin-command.js +1 -1
  22. package/build/lib/cli/utils.js +1 -1
  23. package/build/lib/config-file.d.ts.map +1 -1
  24. package/build/lib/config-file.js +1 -1
  25. package/build/lib/config.d.ts +4 -4
  26. package/build/lib/config.d.ts.map +1 -1
  27. package/build/lib/config.js +1 -1
  28. package/build/lib/constants.d.ts.map +1 -1
  29. package/build/lib/constants.js +1 -1
  30. package/build/lib/extension/driver-config.d.ts +29 -32
  31. package/build/lib/extension/driver-config.d.ts.map +1 -1
  32. package/build/lib/extension/driver-config.js +7 -20
  33. package/build/lib/extension/extension-config.d.ts +108 -36
  34. package/build/lib/extension/extension-config.d.ts.map +1 -1
  35. package/build/lib/extension/extension-config.js +199 -60
  36. package/build/lib/extension/index.d.ts +16 -7
  37. package/build/lib/extension/index.d.ts.map +1 -1
  38. package/build/lib/extension/index.js +15 -18
  39. package/build/lib/extension/manifest.d.ts +12 -12
  40. package/build/lib/extension/manifest.d.ts.map +1 -1
  41. package/build/lib/extension/manifest.js +13 -3
  42. package/build/lib/extension/package-changed.d.ts.map +1 -1
  43. package/build/lib/extension/package-changed.js +1 -1
  44. package/build/lib/extension/plugin-config.d.ts +19 -24
  45. package/build/lib/extension/plugin-config.d.ts.map +1 -1
  46. package/build/lib/extension/plugin-config.js +9 -18
  47. package/build/lib/grid-register.d.ts.map +1 -1
  48. package/build/lib/grid-register.js +1 -1
  49. package/build/lib/logger.d.ts +1 -1
  50. package/build/lib/logger.d.ts.map +1 -1
  51. package/build/lib/logger.js +1 -1
  52. package/build/lib/logsink.d.ts.map +1 -1
  53. package/build/lib/logsink.js +3 -2
  54. package/build/lib/main.d.ts +13 -12
  55. package/build/lib/main.d.ts.map +1 -1
  56. package/build/lib/main.js +4 -4
  57. package/build/lib/schema/arg-spec.d.ts +4 -4
  58. package/build/lib/schema/arg-spec.d.ts.map +1 -1
  59. package/build/lib/schema/arg-spec.js +1 -1
  60. package/build/lib/schema/cli-args.d.ts.map +1 -1
  61. package/build/lib/schema/cli-args.js +1 -1
  62. package/build/lib/schema/cli-transformers.d.ts.map +1 -1
  63. package/build/lib/schema/cli-transformers.js +1 -1
  64. package/build/lib/schema/keywords.d.ts.map +1 -1
  65. package/build/lib/schema/keywords.js +1 -1
  66. package/build/lib/schema/schema.d.ts +2 -2
  67. package/build/lib/schema/schema.d.ts.map +1 -1
  68. package/build/lib/schema/schema.js +1 -1
  69. package/build/lib/utils.d.ts.map +1 -1
  70. package/build/lib/utils.js +1 -1
  71. package/build/tsconfig.tsbuildinfo +1 -1
  72. package/build/types/appium-manifest.d.ts +23 -4
  73. package/build/types/appium-manifest.d.ts.map +1 -1
  74. package/build/types/cli.d.ts.map +1 -1
  75. package/build/types/{external-manifest.d.ts → extension-manifest.d.ts} +15 -7
  76. package/build/types/extension-manifest.d.ts.map +1 -0
  77. package/build/types/index.d.ts +6 -5
  78. package/build/types/index.d.ts.map +1 -1
  79. package/driver.d.ts +1 -0
  80. package/driver.js +14 -0
  81. package/lib/appium.js +208 -124
  82. package/lib/cli/args.js +143 -93
  83. package/lib/cli/driver-command.js +10 -15
  84. package/lib/cli/extension-command.js +226 -175
  85. package/lib/cli/extension.js +15 -19
  86. package/lib/cli/parser.js +19 -31
  87. package/lib/cli/plugin-command.js +8 -8
  88. package/lib/cli/utils.js +8 -14
  89. package/lib/config-file.js +21 -25
  90. package/lib/config.js +82 -64
  91. package/lib/constants.js +4 -13
  92. package/lib/extension/driver-config.js +171 -171
  93. package/lib/extension/extension-config.js +347 -126
  94. package/lib/extension/index.js +72 -58
  95. package/lib/extension/manifest.js +48 -57
  96. package/lib/extension/package-changed.js +9 -8
  97. package/lib/extension/plugin-config.js +62 -62
  98. package/lib/grid-register.js +29 -18
  99. package/lib/logger.js +1 -2
  100. package/lib/logsink.js +29 -31
  101. package/lib/main.js +111 -73
  102. package/lib/schema/arg-spec.js +10 -13
  103. package/lib/schema/cli-args.js +14 -37
  104. package/lib/schema/cli-transformers.js +7 -14
  105. package/lib/schema/keywords.js +15 -13
  106. package/lib/schema/schema.js +58 -75
  107. package/lib/utils.js +50 -25
  108. package/package.json +25 -18
  109. package/plugin.d.ts +1 -0
  110. package/plugin.js +13 -0
  111. package/scripts/autoinstall-extensions.js +177 -0
  112. package/support.d.ts +1 -0
  113. package/support.js +13 -0
  114. package/types/appium-manifest.ts +27 -15
  115. package/types/cli.ts +2 -9
  116. package/types/{external-manifest.ts → extension-manifest.ts} +21 -15
  117. package/types/index.ts +12 -5
  118. package/build/types/extension.d.ts +0 -43
  119. package/build/types/extension.d.ts.map +0 -1
  120. package/build/types/external-manifest.d.ts.map +0 -1
  121. package/scripts/postinstall.js +0 -71
  122. package/types/extension.ts +0 -56
@@ -23,21 +23,17 @@ var _manifest = require("./manifest");
23
23
 
24
24
  var _pluginConfig = require("./plugin-config");
25
25
 
26
+ var _bluebird = _interopRequireDefault(require("bluebird"));
27
+
26
28
  async function loadExtensions(appiumHome) {
27
29
  var _DriverConfig$getInst, _PluginConfig$getInst;
28
30
 
29
31
  const manifest = _manifest.Manifest.getInstance(appiumHome);
30
32
 
31
- const {
32
- drivers,
33
- plugins
34
- } = await manifest.read();
35
- const driverConfig = (_DriverConfig$getInst = _driverConfig.DriverConfig.getInstance(manifest)) !== null && _DriverConfig$getInst !== void 0 ? _DriverConfig$getInst : _driverConfig.DriverConfig.create(manifest, {
36
- extData: drivers
37
- });
38
- const pluginConfig = (_PluginConfig$getInst = _pluginConfig.PluginConfig.getInstance(manifest)) !== null && _PluginConfig$getInst !== void 0 ? _PluginConfig$getInst : _pluginConfig.PluginConfig.create(manifest, {
39
- extData: plugins
40
- });
33
+ await manifest.read();
34
+ const driverConfig = (_DriverConfig$getInst = _driverConfig.DriverConfig.getInstance(manifest)) !== null && _DriverConfig$getInst !== void 0 ? _DriverConfig$getInst : _driverConfig.DriverConfig.create(manifest);
35
+ const pluginConfig = (_PluginConfig$getInst = _pluginConfig.PluginConfig.getInstance(manifest)) !== null && _PluginConfig$getInst !== void 0 ? _PluginConfig$getInst : _pluginConfig.PluginConfig.create(manifest);
36
+ await _bluebird.default.all([driverConfig.validate(), pluginConfig.validate()]);
41
37
  return {
42
38
  driverConfig,
43
39
  pluginConfig
@@ -45,33 +41,34 @@ async function loadExtensions(appiumHome) {
45
41
  }
46
42
 
47
43
  function getActivePlugins(pluginConfig, usePlugins = []) {
48
- return _lodash.default.compact(Object.keys(pluginConfig.installedExtensions).filter(pluginName => _lodash.default.includes(usePlugins, pluginName) || usePlugins.length === 1 && usePlugins[0] === _constants.USE_ALL_PLUGINS).map(pluginName => {
44
+ return new Map(_lodash.default.compact(Object.keys(pluginConfig.installedExtensions).filter(pluginName => _lodash.default.includes(usePlugins, pluginName) || usePlugins.length === 1 && usePlugins[0] === _constants.USE_ALL_PLUGINS).map(pluginName => {
49
45
  try {
50
46
  _logger.default.info(`Attempting to load plugin ${pluginName}...`);
51
47
 
52
48
  const PluginClass = pluginConfig.require(pluginName);
53
49
 
54
- PluginClass.pluginName = pluginName;
55
- return PluginClass;
50
+ return [PluginClass, pluginName];
56
51
  } catch (err) {
57
52
  _logger.default.error(`Could not load plugin '${pluginName}', so it will not be available. Error ` + `in loading the plugin was: ${err.message}`);
58
53
 
59
54
  _logger.default.debug(err.stack);
60
55
  }
61
- }));
56
+ })));
62
57
  }
63
58
 
64
59
  function getActiveDrivers(driverConfig, useDrivers = []) {
65
- return _lodash.default.compact(Object.keys(driverConfig.installedExtensions).filter(driverName => _lodash.default.includes(useDrivers, driverName) || useDrivers.length === 0).map(driverName => {
60
+ return new Map(_lodash.default.compact(Object.keys(driverConfig.installedExtensions).filter(driverName => _lodash.default.includes(useDrivers, driverName) || useDrivers.length === 0).map(driverName => {
66
61
  try {
67
62
  _logger.default.info(`Attempting to load driver ${driverName}...`);
68
63
 
69
- return driverConfig.require(driverName);
64
+ const DriverClass = driverConfig.require(driverName);
65
+
66
+ return [DriverClass, driverName];
70
67
  } catch (err) {
71
68
  _logger.default.error(`Could not load driver '${driverName}', so it will not be available. Error ` + `in loading the driver was: ${err.message}`);
72
69
 
73
70
  _logger.default.debug(err.stack);
74
71
  }
75
- }));
72
+ })));
76
73
  }
77
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2FkRXh0ZW5zaW9ucyIsImFwcGl1bUhvbWUiLCJtYW5pZmVzdCIsIk1hbmlmZXN0IiwiZ2V0SW5zdGFuY2UiLCJkcml2ZXJzIiwicGx1Z2lucyIsInJlYWQiLCJkcml2ZXJDb25maWciLCJEcml2ZXJDb25maWciLCJjcmVhdGUiLCJleHREYXRhIiwicGx1Z2luQ29uZmlnIiwiUGx1Z2luQ29uZmlnIiwiZ2V0QWN0aXZlUGx1Z2lucyIsInVzZVBsdWdpbnMiLCJfIiwiY29tcGFjdCIsIk9iamVjdCIsImtleXMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiZmlsdGVyIiwicGx1Z2luTmFtZSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiVVNFX0FMTF9QTFVHSU5TIiwibWFwIiwibG9nIiwiaW5mbyIsIlBsdWdpbkNsYXNzIiwicmVxdWlyZSIsImVyciIsImVycm9yIiwibWVzc2FnZSIsImRlYnVnIiwic3RhY2siLCJnZXRBY3RpdmVEcml2ZXJzIiwidXNlRHJpdmVycyIsImRyaXZlck5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFVTRV9BTExfUExVR0lOUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBEcml2ZXJDb25maWcgfSBmcm9tICcuL2RyaXZlci1jb25maWcnO1xuaW1wb3J0IHsgTWFuaWZlc3QgfSBmcm9tICcuL21hbmlmZXN0JztcbmltcG9ydCB7IFBsdWdpbkNvbmZpZyB9IGZyb20gJy4vcGx1Z2luLWNvbmZpZyc7XG5cbi8qKlxuICogTG9hZHMgZXh0ZW5zaW9ucyBhbmQgY3JlYXRlcyBgRXh0ZW5zaW9uQ29uZmlnYCBpbnN0YW5jZXMuXG4gKlxuICogLSBSZWFkcyB0aGUgbWFuaWZlc3QgZmlsZSwgY3JlYXRpbmcgaWYgbmVjZXNzYXJ5XG4gKiAtIFVzaW5nIHRoZSBwYXJzZWQgZXh0ZW5zaW9uIGRhdGEsIGNyZWF0ZXMvZ2V0cyB0aGUgYEV4dGVuc2lvbkNvbmZpZ2Agc3ViY2xhc3MgaW5zdGFuY2VzXG4gKiAtIFJldHVybnMgdGhlc2UgaW5zdGFuY2VzXG4gKlxuICogSWYgYGFwcGl1bUhvbWVgIGlzIG5lZWRlZCwgdXNlIGByZXNvbHZlQXBwaXVtSG9tZWAgZnJvbSB0aGUgYGVudmAgbW9kdWxlIGluIGBAYXBwaXVtL3N1cHBvcnRgLlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPEV4dGVuc2lvbkNvbmZpZ3M+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEV4dGVuc2lvbnMgKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgbWFuaWZlc3QgPSBNYW5pZmVzdC5nZXRJbnN0YW5jZShhcHBpdW1Ib21lKTtcbiAgY29uc3Qge2RyaXZlcnMsIHBsdWdpbnN9ID0gYXdhaXQgbWFuaWZlc3QucmVhZCgpO1xuICBjb25zdCBkcml2ZXJDb25maWcgPVxuICAgIERyaXZlckNvbmZpZy5nZXRJbnN0YW5jZShtYW5pZmVzdCkgPz9cbiAgICBEcml2ZXJDb25maWcuY3JlYXRlKG1hbmlmZXN0LCB7ZXh0RGF0YTogZHJpdmVyc30pO1xuICBjb25zdCBwbHVnaW5Db25maWcgPVxuICAgIFBsdWdpbkNvbmZpZy5nZXRJbnN0YW5jZShtYW5pZmVzdCkgPz9cbiAgICBQbHVnaW5Db25maWcuY3JlYXRlKG1hbmlmZXN0LCB7ZXh0RGF0YTogcGx1Z2luc30pO1xuICByZXR1cm4ge2RyaXZlckNvbmZpZywgcGx1Z2luQ29uZmlnfTtcbn1cblxuLyoqXG4gKiBGaW5kIGFueSBwbHVnaW4gbmFtZSB3aGljaCBoYXMgYmVlbiBpbnN0YWxsZWQsIGFuZCB3aGljaCBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIGFjdGl2YXRpb24gYnlcbiAqIHVzaW5nIHRoZSAtLXVzZS1wbHVnaW5zIGZsYWcsIGFuZCB0dXJuIGVhY2ggb25lIGludG8gaXRzIGNsYXNzLCBzbyB3ZSBjYW4gc2VuZCB0aGVtIGFzIG9iamVjdHNcbiAqIHRvIHRoZSBzZXJ2ZXIgaW5pdC4gV2UgYWxzbyB3YW50IHRvIHNlbmQvYXNzaWduIHRoZW0gdG8gdGhlIHVtYnJlbGxhIGRyaXZlciBzbyBpdCBjYW4gdXNlIHRoZW1cbiAqIHRvIHdyYXAgY29tbWFuZCBleGVjdXRpb25cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9wbHVnaW4tY29uZmlnJykuUGx1Z2luQ29uZmlnfSBwbHVnaW5Db25maWcgLSBhIHBsdWdpbiBleHRlbnNpb24gY29uZmlnXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSB1c2VQbHVnaW5zXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi8uLi90eXBlcycpLlBsdWdpbkNsYXNzW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmVQbHVnaW5zIChwbHVnaW5Db25maWcsIHVzZVBsdWdpbnMgPSBbXSkge1xuICByZXR1cm4gXy5jb21wYWN0KFxuICAgIE9iamVjdC5rZXlzKHBsdWdpbkNvbmZpZy5pbnN0YWxsZWRFeHRlbnNpb25zKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHBsdWdpbk5hbWUpID0+XG4gICAgICAgICAgXy5pbmNsdWRlcyh1c2VQbHVnaW5zLCBwbHVnaW5OYW1lKSB8fFxuICAgICAgICAgICh1c2VQbHVnaW5zLmxlbmd0aCA9PT0gMSAmJiB1c2VQbHVnaW5zWzBdID09PSBVU0VfQUxMX1BMVUdJTlMpLFxuICAgICAgKVxuICAgICAgLm1hcCgocGx1Z2luTmFtZSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvZy5pbmZvKGBBdHRlbXB0aW5nIHRvIGxvYWQgcGx1Z2luICR7cGx1Z2luTmFtZX0uLi5gKTtcbiAgICAgICAgICBjb25zdCBQbHVnaW5DbGFzcyA9IHBsdWdpbkNvbmZpZy5yZXF1aXJlKHBsdWdpbk5hbWUpO1xuXG4gICAgICAgICAgUGx1Z2luQ2xhc3MucGx1Z2luTmFtZSA9IHBsdWdpbk5hbWU7IC8vIHN0b3JlIHRoZSBwbHVnaW4gbmFtZSBvbiB0aGUgY2xhc3Mgc28gaXQgY2FuIGJlIHVzZWQgbGF0ZXJcbiAgICAgICAgICByZXR1cm4gUGx1Z2luQ2xhc3M7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5lcnJvcihcbiAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBwbHVnaW4gJyR7cGx1Z2luTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICBgaW4gbG9hZGluZyB0aGUgcGx1Z2luIHdhczogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nLmRlYnVnKGVyci5zdGFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgYW55IGRyaXZlciBuYW1lIHdoaWNoIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHR1cm4gZWFjaCBvbmUgaW50byBpdHMgY2xhc3MsIHNvIHdlIGNhbiBzZW5kXG4gKiB0aGVtIGFzIG9iamVjdHMgdG8gdGhlIHNlcnZlciBpbml0IGluIGNhc2UgdGhleSBuZWVkIHRvIGFkZCBtZXRob2RzL3JvdXRlcyBvciB1cGRhdGUgdGhlIHNlcnZlci5cbiAqIElmIHRoZSAtLWRyaXZlcnMgZmxhZyB3YXMgZ2l2ZW4sIHRoaXMgbWV0aG9kIG9ubHkgbG9hZHMgdGhlIGdpdmVuIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vZHJpdmVyLWNvbmZpZycpLkRyaXZlckNvbmZpZ30gZHJpdmVyQ29uZmlnIC0gYSBkcml2ZXIgZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gW3VzZURyaXZlcnNdIC0gb3B0aW9uYWwgbGlzdCBvZiBkcml2ZXJzIHRvIGxvYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZURyaXZlcnMgKGRyaXZlckNvbmZpZywgdXNlRHJpdmVycyA9IFtdKSB7XG4gIHJldHVybiBfLmNvbXBhY3QoXG4gICAgT2JqZWN0LmtleXMoZHJpdmVyQ29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnMpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoZHJpdmVyTmFtZSkgPT5cbiAgICAgICAgICBfLmluY2x1ZGVzKHVzZURyaXZlcnMsIGRyaXZlck5hbWUpIHx8IHVzZURyaXZlcnMubGVuZ3RoID09PSAwLFxuICAgICAgKVxuICAgICAgLm1hcCgoZHJpdmVyTmFtZSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvZy5pbmZvKGBBdHRlbXB0aW5nIHRvIGxvYWQgZHJpdmVyICR7ZHJpdmVyTmFtZX0uLi5gKTtcbiAgICAgICAgICByZXR1cm4gZHJpdmVyQ29uZmlnLnJlcXVpcmUoZHJpdmVyTmFtZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGxvZy5lcnJvcihcbiAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBkcml2ZXIgJyR7ZHJpdmVyTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICBgaW4gbG9hZGluZyB0aGUgZHJpdmVyIHdhczogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nLmRlYnVnKGVyci5zdGFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIEV4dGVuc2lvbkNvbmZpZ3NcbiAqIEBwcm9wZXJ0eSB7RHJpdmVyQ29uZmlnfSBkcml2ZXJDb25maWdcbiAqIEBwcm9wZXJ0eSB7UGx1Z2luQ29uZmlnfSBwbHVnaW5Db25maWdcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBYU8sZUFBZUEsY0FBZixDQUErQkMsVUFBL0IsRUFBMkM7RUFBQTs7RUFDaEQsTUFBTUMsUUFBUSxHQUFHQyxtQkFBU0MsV0FBVCxDQUFxQkgsVUFBckIsQ0FBakI7O0VBQ0EsTUFBTTtJQUFDSSxPQUFEO0lBQVVDO0VBQVYsSUFBcUIsTUFBTUosUUFBUSxDQUFDSyxJQUFULEVBQWpDO0VBQ0EsTUFBTUMsWUFBWSw0QkFDaEJDLDJCQUFhTCxXQUFiLENBQXlCRixRQUF6QixDQURnQix5RUFFaEJPLDJCQUFhQyxNQUFiLENBQW9CUixRQUFwQixFQUE4QjtJQUFDUyxPQUFPLEVBQUVOO0VBQVYsQ0FBOUIsQ0FGRjtFQUdBLE1BQU1PLFlBQVksNEJBQ2hCQywyQkFBYVQsV0FBYixDQUF5QkYsUUFBekIsQ0FEZ0IseUVBRWhCVywyQkFBYUgsTUFBYixDQUFvQlIsUUFBcEIsRUFBOEI7SUFBQ1MsT0FBTyxFQUFFTDtFQUFWLENBQTlCLENBRkY7RUFHQSxPQUFPO0lBQUNFLFlBQUQ7SUFBZUk7RUFBZixDQUFQO0FBQ0Q7O0FBWU0sU0FBU0UsZ0JBQVQsQ0FBMkJGLFlBQTNCLEVBQXlDRyxVQUFVLEdBQUcsRUFBdEQsRUFBMEQ7RUFDL0QsT0FBT0MsZ0JBQUVDLE9BQUYsQ0FDTEMsTUFBTSxDQUFDQyxJQUFQLENBQVlQLFlBQVksQ0FBQ1EsbUJBQXpCLEVBQ0dDLE1BREgsQ0FFS0MsVUFBRCxJQUNFTixnQkFBRU8sUUFBRixDQUFXUixVQUFYLEVBQXVCTyxVQUF2QixLQUNDUCxVQUFVLENBQUNTLE1BQVgsS0FBc0IsQ0FBdEIsSUFBMkJULFVBQVUsQ0FBQyxDQUFELENBQVYsS0FBa0JVLDBCQUpwRCxFQU1HQyxHQU5ILENBTVFKLFVBQUQsSUFBZ0I7SUFDbkIsSUFBSTtNQUNGSyxnQkFBSUMsSUFBSixDQUFVLDZCQUE0Qk4sVUFBVyxLQUFqRDs7TUFDQSxNQUFNTyxXQUFXLEdBQUdqQixZQUFZLENBQUNrQixPQUFiLENBQXFCUixVQUFyQixDQUFwQjs7TUFFQU8sV0FBVyxDQUFDUCxVQUFaLEdBQXlCQSxVQUF6QjtNQUNBLE9BQU9PLFdBQVA7SUFDRCxDQU5ELENBTUUsT0FBT0UsR0FBUCxFQUFZO01BQ1pKLGdCQUFJSyxLQUFKLENBQ0csMEJBQXlCVixVQUFXLHdDQUFyQyxHQUNHLDhCQUE2QlMsR0FBRyxDQUFDRSxPQUFRLEVBRjlDOztNQUlBTixnQkFBSU8sS0FBSixDQUFVSCxHQUFHLENBQUNJLEtBQWQ7SUFDRDtFQUNGLENBcEJILENBREssQ0FBUDtBQXVCRDs7QUFVTSxTQUFTQyxnQkFBVCxDQUEyQjVCLFlBQTNCLEVBQXlDNkIsVUFBVSxHQUFHLEVBQXRELEVBQTBEO0VBQy9ELE9BQU9yQixnQkFBRUMsT0FBRixDQUNMQyxNQUFNLENBQUNDLElBQVAsQ0FBWVgsWUFBWSxDQUFDWSxtQkFBekIsRUFDR0MsTUFESCxDQUVLaUIsVUFBRCxJQUNFdEIsZ0JBQUVPLFFBQUYsQ0FBV2MsVUFBWCxFQUF1QkMsVUFBdkIsS0FBc0NELFVBQVUsQ0FBQ2IsTUFBWCxLQUFzQixDQUhsRSxFQUtHRSxHQUxILENBS1FZLFVBQUQsSUFBZ0I7SUFDbkIsSUFBSTtNQUNGWCxnQkFBSUMsSUFBSixDQUFVLDZCQUE0QlUsVUFBVyxLQUFqRDs7TUFDQSxPQUFPOUIsWUFBWSxDQUFDc0IsT0FBYixDQUFxQlEsVUFBckIsQ0FBUDtJQUNELENBSEQsQ0FHRSxPQUFPUCxHQUFQLEVBQVk7TUFDWkosZ0JBQUlLLEtBQUosQ0FDRywwQkFBeUJNLFVBQVcsd0NBQXJDLEdBQ0csOEJBQTZCUCxHQUFHLENBQUNFLE9BQVEsRUFGOUM7O01BSUFOLGdCQUFJTyxLQUFKLENBQVVILEdBQUcsQ0FBQ0ksS0FBZDtJQUNEO0VBQ0YsQ0FoQkgsQ0FESyxDQUFQO0FBbUJEIn0=
74
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2FkRXh0ZW5zaW9ucyIsImFwcGl1bUhvbWUiLCJtYW5pZmVzdCIsIk1hbmlmZXN0IiwiZ2V0SW5zdGFuY2UiLCJyZWFkIiwiZHJpdmVyQ29uZmlnIiwiRHJpdmVyQ29uZmlnIiwiY3JlYXRlIiwicGx1Z2luQ29uZmlnIiwiUGx1Z2luQ29uZmlnIiwiQiIsImFsbCIsInZhbGlkYXRlIiwiZ2V0QWN0aXZlUGx1Z2lucyIsInVzZVBsdWdpbnMiLCJNYXAiLCJfIiwiY29tcGFjdCIsIk9iamVjdCIsImtleXMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiZmlsdGVyIiwicGx1Z2luTmFtZSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiVVNFX0FMTF9QTFVHSU5TIiwibWFwIiwibG9nIiwiaW5mbyIsIlBsdWdpbkNsYXNzIiwicmVxdWlyZSIsImVyciIsImVycm9yIiwibWVzc2FnZSIsImRlYnVnIiwic3RhY2siLCJnZXRBY3RpdmVEcml2ZXJzIiwidXNlRHJpdmVycyIsImRyaXZlck5hbWUiLCJEcml2ZXJDbGFzcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7VVNFX0FMTF9QTFVHSU5TfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtEcml2ZXJDb25maWd9IGZyb20gJy4vZHJpdmVyLWNvbmZpZyc7XG5pbXBvcnQge01hbmlmZXN0fSBmcm9tICcuL21hbmlmZXN0JztcbmltcG9ydCB7UGx1Z2luQ29uZmlnfSBmcm9tICcuL3BsdWdpbi1jb25maWcnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG4vKipcbiAqIExvYWRzIGV4dGVuc2lvbnMgYW5kIGNyZWF0ZXMgYEV4dGVuc2lvbkNvbmZpZ2AgaW5zdGFuY2VzLlxuICpcbiAqIC0gUmVhZHMgdGhlIG1hbmlmZXN0IGZpbGUsIGNyZWF0aW5nIGlmIG5lY2Vzc2FyeVxuICogLSBVc2luZyB0aGUgcGFyc2VkIGV4dGVuc2lvbiBkYXRhLCBjcmVhdGVzL2dldHMgdGhlIGBFeHRlbnNpb25Db25maWdgIHN1YmNsYXNzIGluc3RhbmNlc1xuICogLSBSZXR1cm5zIHRoZXNlIGluc3RhbmNlc1xuICpcbiAqIElmIGBhcHBpdW1Ib21lYCBpcyBuZWVkZWQsIHVzZSBgcmVzb2x2ZUFwcGl1bUhvbWVgIGZyb20gdGhlIGBlbnZgIG1vZHVsZSBpbiBgQGFwcGl1bS9zdXBwb3J0YC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxFeHRlbnNpb25Db25maWdzPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRFeHRlbnNpb25zKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgbWFuaWZlc3QgPSBNYW5pZmVzdC5nZXRJbnN0YW5jZShhcHBpdW1Ib21lKTtcbiAgYXdhaXQgbWFuaWZlc3QucmVhZCgpO1xuICBjb25zdCBkcml2ZXJDb25maWcgPSBEcml2ZXJDb25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpID8/IERyaXZlckNvbmZpZy5jcmVhdGUobWFuaWZlc3QpO1xuICBjb25zdCBwbHVnaW5Db25maWcgPSBQbHVnaW5Db25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpID8/IFBsdWdpbkNvbmZpZy5jcmVhdGUobWFuaWZlc3QpO1xuXG4gIGF3YWl0IEIuYWxsKFtkcml2ZXJDb25maWcudmFsaWRhdGUoKSwgcGx1Z2luQ29uZmlnLnZhbGlkYXRlKCldKTtcbiAgcmV0dXJuIHtkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ307XG59XG5cbi8qKlxuICogRmluZCBhbnkgcGx1Z2luIG5hbWUgd2hpY2ggaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgd2hpY2ggaGFzIGJlZW4gcmVxdWVzdGVkIGZvciBhY3RpdmF0aW9uIGJ5XG4gKiB1c2luZyB0aGUgLS11c2UtcGx1Z2lucyBmbGFnLCBhbmQgdHVybiBlYWNoIG9uZSBpbnRvIGl0cyBjbGFzcywgc28gd2UgY2FuIHNlbmQgdGhlbSBhcyBvYmplY3RzXG4gKiB0byB0aGUgc2VydmVyIGluaXQuIFdlIGFsc28gd2FudCB0byBzZW5kL2Fzc2lnbiB0aGVtIHRvIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIHVzZSB0aGVtXG4gKiB0byB3cmFwIGNvbW1hbmQgZXhlY3V0aW9uXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vcGx1Z2luLWNvbmZpZycpLlBsdWdpbkNvbmZpZ30gcGx1Z2luQ29uZmlnIC0gYSBwbHVnaW4gZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gdXNlUGx1Z2luc1xuICogQHJldHVybnMge1BsdWdpbk5hbWVNYXB9IE1hcHBpbmcgb2YgUGx1Z2luQ2xhc3MgdG8gbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlUGx1Z2lucyhwbHVnaW5Db25maWcsIHVzZVBsdWdpbnMgPSBbXSkge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBfLmNvbXBhY3QoXG4gICAgICBPYmplY3Qua2V5cyhwbHVnaW5Db25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocGx1Z2luTmFtZSkgPT5cbiAgICAgICAgICAgIF8uaW5jbHVkZXModXNlUGx1Z2lucywgcGx1Z2luTmFtZSkgfHxcbiAgICAgICAgICAgICh1c2VQbHVnaW5zLmxlbmd0aCA9PT0gMSAmJiB1c2VQbHVnaW5zWzBdID09PSBVU0VfQUxMX1BMVUdJTlMpXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgocGx1Z2luTmFtZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBsb2FkIHBsdWdpbiAke3BsdWdpbk5hbWV9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBQbHVnaW5DbGFzcyA9IHBsdWdpbkNvbmZpZy5yZXF1aXJlKHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtQbHVnaW5DbGFzcywgcGx1Z2luTmFtZV07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBwbHVnaW4gJyR7cGx1Z2luTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBwbHVnaW4gd2FzOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgYW55IGRyaXZlciBuYW1lIHdoaWNoIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHR1cm4gZWFjaCBvbmUgaW50byBpdHMgY2xhc3MsIHNvIHdlIGNhbiBzZW5kXG4gKiB0aGVtIGFzIG9iamVjdHMgdG8gdGhlIHNlcnZlciBpbml0IGluIGNhc2UgdGhleSBuZWVkIHRvIGFkZCBtZXRob2RzL3JvdXRlcyBvciB1cGRhdGUgdGhlIHNlcnZlci5cbiAqIElmIHRoZSAtLWRyaXZlcnMgZmxhZyB3YXMgZ2l2ZW4sIHRoaXMgbWV0aG9kIG9ubHkgbG9hZHMgdGhlIGdpdmVuIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vZHJpdmVyLWNvbmZpZycpLkRyaXZlckNvbmZpZ30gZHJpdmVyQ29uZmlnIC0gYSBkcml2ZXIgZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gW3VzZURyaXZlcnNdIC0gb3B0aW9uYWwgbGlzdCBvZiBkcml2ZXJzIHRvIGxvYWRcbiAqIEByZXR1cm5zIHtEcml2ZXJOYW1lTWFwfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRHJpdmVycyhkcml2ZXJDb25maWcsIHVzZURyaXZlcnMgPSBbXSkge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBfLmNvbXBhY3QoXG4gICAgICBPYmplY3Qua2V5cyhkcml2ZXJDb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgICAgLmZpbHRlcigoZHJpdmVyTmFtZSkgPT4gXy5pbmNsdWRlcyh1c2VEcml2ZXJzLCBkcml2ZXJOYW1lKSB8fCB1c2VEcml2ZXJzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgLm1hcCgoZHJpdmVyTmFtZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBsb2FkIGRyaXZlciAke2RyaXZlck5hbWV9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBEcml2ZXJDbGFzcyA9IGRyaXZlckNvbmZpZy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtEcml2ZXJDbGFzcywgZHJpdmVyTmFtZV07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBkcml2ZXIgJyR7ZHJpdmVyTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBkcml2ZXIgd2FzOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEEgbWFwcGluZyBvZiB7QGxpbmtjb2RlIFBsdWdpbkNsYXNzfSBjbGFzc2VzIHRvIHRoZWlyIG5hbWVzLlxuICogQHR5cGVkZWYge01hcDxQbHVnaW5DbGFzcyxzdHJpbmc+fSBQbHVnaW5OYW1lTWFwXG4gKi9cblxuLyoqXG4gKiBBIG1hcHBpbmcgb2Yge0BsaW5rY29kZSBEcml2ZXJDbGFzc30gY2xhc3NlcyB0byB0aGVpciBuYW1lcy5cbiAqIEB0eXBlZGVmIHtNYXA8RHJpdmVyQ2xhc3Msc3RyaW5nPn0gRHJpdmVyTmFtZU1hcFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRXh0ZW5zaW9uQ29uZmlnc1xuICogQHByb3BlcnR5IHtpbXBvcnQoJy4vZHJpdmVyLWNvbmZpZycpLkRyaXZlckNvbmZpZ30gZHJpdmVyQ29uZmlnXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi9wbHVnaW4tY29uZmlnJykuUGx1Z2luQ29uZmlnfSBwbHVnaW5Db25maWdcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBYU8sZUFBZUEsY0FBZixDQUE4QkMsVUFBOUIsRUFBMEM7RUFBQTs7RUFDL0MsTUFBTUMsUUFBUSxHQUFHQyxrQkFBQSxDQUFTQyxXQUFULENBQXFCSCxVQUFyQixDQUFqQjs7RUFDQSxNQUFNQyxRQUFRLENBQUNHLElBQVQsRUFBTjtFQUNBLE1BQU1DLFlBQVksNEJBQUdDLDBCQUFBLENBQWFILFdBQWIsQ0FBeUJGLFFBQXpCLENBQUgseUVBQXlDSywwQkFBQSxDQUFhQyxNQUFiLENBQW9CTixRQUFwQixDQUEzRDtFQUNBLE1BQU1PLFlBQVksNEJBQUdDLDBCQUFBLENBQWFOLFdBQWIsQ0FBeUJGLFFBQXpCLENBQUgseUVBQXlDUSwwQkFBQSxDQUFhRixNQUFiLENBQW9CTixRQUFwQixDQUEzRDtFQUVBLE1BQU1TLGlCQUFBLENBQUVDLEdBQUYsQ0FBTSxDQUFDTixZQUFZLENBQUNPLFFBQWIsRUFBRCxFQUEwQkosWUFBWSxDQUFDSSxRQUFiLEVBQTFCLENBQU4sQ0FBTjtFQUNBLE9BQU87SUFBQ1AsWUFBRDtJQUFlRztFQUFmLENBQVA7QUFDRDs7QUFZTSxTQUFTSyxnQkFBVCxDQUEwQkwsWUFBMUIsRUFBd0NNLFVBQVUsR0FBRyxFQUFyRCxFQUF5RDtFQUM5RCxPQUFPLElBQUlDLEdBQUosQ0FDTEMsZUFBQSxDQUFFQyxPQUFGLENBQ0VDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZWCxZQUFZLENBQUNZLG1CQUF6QixFQUNHQyxNQURILENBRUtDLFVBQUQsSUFDRU4sZUFBQSxDQUFFTyxRQUFGLENBQVdULFVBQVgsRUFBdUJRLFVBQXZCLEtBQ0NSLFVBQVUsQ0FBQ1UsTUFBWCxLQUFzQixDQUF0QixJQUEyQlYsVUFBVSxDQUFDLENBQUQsQ0FBVixLQUFrQlcsMEJBSnBELEVBTUdDLEdBTkgsQ0FNUUosVUFBRCxJQUFnQjtJQUNuQixJQUFJO01BQ0ZLLGVBQUEsQ0FBSUMsSUFBSixDQUFVLDZCQUE0Qk4sVUFBVyxLQUFqRDs7TUFDQSxNQUFNTyxXQUFXLEdBQUdyQixZQUFZLENBQUNzQixPQUFiLENBQXFCUixVQUFyQixDQUFwQjs7TUFDQSxPQUFPLENBQUNPLFdBQUQsRUFBY1AsVUFBZCxDQUFQO0lBQ0QsQ0FKRCxDQUlFLE9BQU9TLEdBQVAsRUFBWTtNQUNaSixlQUFBLENBQUlLLEtBQUosQ0FDRywwQkFBeUJWLFVBQVcsd0NBQXJDLEdBQ0csOEJBQTZCUyxHQUFHLENBQUNFLE9BQVEsRUFGOUM7O01BSUFOLGVBQUEsQ0FBSU8sS0FBSixDQUFVSCxHQUFHLENBQUNJLEtBQWQ7SUFDRDtFQUNGLENBbEJILENBREYsQ0FESyxDQUFQO0FBdUJEOztBQVdNLFNBQVNDLGdCQUFULENBQTBCL0IsWUFBMUIsRUFBd0NnQyxVQUFVLEdBQUcsRUFBckQsRUFBeUQ7RUFDOUQsT0FBTyxJQUFJdEIsR0FBSixDQUNMQyxlQUFBLENBQUVDLE9BQUYsQ0FDRUMsTUFBTSxDQUFDQyxJQUFQLENBQVlkLFlBQVksQ0FBQ2UsbUJBQXpCLEVBQ0dDLE1BREgsQ0FDV2lCLFVBQUQsSUFBZ0J0QixlQUFBLENBQUVPLFFBQUYsQ0FBV2MsVUFBWCxFQUF1QkMsVUFBdkIsS0FBc0NELFVBQVUsQ0FBQ2IsTUFBWCxLQUFzQixDQUR0RixFQUVHRSxHQUZILENBRVFZLFVBQUQsSUFBZ0I7SUFDbkIsSUFBSTtNQUNGWCxlQUFBLENBQUlDLElBQUosQ0FBVSw2QkFBNEJVLFVBQVcsS0FBakQ7O01BQ0EsTUFBTUMsV0FBVyxHQUFHbEMsWUFBWSxDQUFDeUIsT0FBYixDQUFxQlEsVUFBckIsQ0FBcEI7O01BQ0EsT0FBTyxDQUFDQyxXQUFELEVBQWNELFVBQWQsQ0FBUDtJQUNELENBSkQsQ0FJRSxPQUFPUCxHQUFQLEVBQVk7TUFDWkosZUFBQSxDQUFJSyxLQUFKLENBQ0csMEJBQXlCTSxVQUFXLHdDQUFyQyxHQUNHLDhCQUE2QlAsR0FBRyxDQUFDRSxPQUFRLEVBRjlDOztNQUlBTixlQUFBLENBQUlPLEtBQUosQ0FBVUgsR0FBRyxDQUFDSSxLQUFkO0lBQ0Q7RUFDRixDQWRILENBREYsQ0FESyxDQUFQO0FBbUJEIn0=
@@ -89,7 +89,7 @@ export class Manifest {
89
89
  * @param {string} pkgPath
90
90
  * @returns {boolean} - `true` upon success, `false` if the extension is already registered.
91
91
  */
92
- addExtensionFromPackage<ExtType extends import("../../types").ExtensionType>(pkgJson: ExtPackageJson<ExtType>, pkgPath: string): boolean;
92
+ addExtensionFromPackage<ExtType extends import("@appium/types").ExtensionType>(pkgJson: ExtPackageJson<ExtType>, pkgPath: string): boolean;
93
93
  /**
94
94
  * Adds an extension to the manifest as was installed by the `appium` CLI. The
95
95
  * `extData`, `extType`, and `extName` have already been determined.
@@ -99,9 +99,9 @@ export class Manifest {
99
99
  * @param {ExtType} extType - `driver` or `plugin`
100
100
  * @param {string} extName - Name of extension
101
101
  * @param {ExtManifest<ExtType>} extData - Extension metadata
102
- * @returns {void}
102
+ * @returns {ExtManifest<ExtType>} A clone of `extData`, potentially with a mutated `appiumVersion` field
103
103
  */
104
- addExtension<ExtType_1 extends import("../../types").ExtensionType>(extType: ExtType_1, extName: string, extData: ExtManifest<ExtType_1>): void;
104
+ addExtension<ExtType_1 extends import("@appium/types").ExtensionType>(extType: ExtType_1, extName: string, extData: ExtManifest<ExtType_1>): ExtManifest<ExtType_1>;
105
105
  /**
106
106
  * Returns the APPIUM_HOME path
107
107
  */
@@ -117,7 +117,7 @@ export class Manifest {
117
117
  * @param {ExtType} extType
118
118
  * @returns {ExtRecord<ExtType>}
119
119
  */
120
- getExtensionData<ExtType_2 extends import("../../types").ExtensionType>(extType: ExtType_2): ExtRecord<ExtType_2>;
120
+ getExtensionData<ExtType_2 extends import("@appium/types").ExtensionType>(extType: ExtType_2): ExtRecord<ExtType_2>;
121
121
  /**
122
122
  * Reads manifest from disk and _overwrites_ the internal data.
123
123
  *
@@ -150,25 +150,25 @@ export class Manifest {
150
150
  /**
151
151
  * Type of the string referring to a driver (typically as a key or type string)
152
152
  */
153
- export type DriverType = import('../../types').DriverType;
153
+ export type DriverType = import('@appium/types').DriverType;
154
154
  /**
155
155
  * Type of the string referring to a plugin (typically as a key or type string)
156
156
  */
157
- export type PluginType = import('../../types').PluginType;
157
+ export type PluginType = import('@appium/types').PluginType;
158
158
  export type SyncWithInstalledExtensionsOpts = {
159
159
  /**
160
160
  * - Maximum depth to recurse into subdirectories
161
161
  */
162
162
  depthLimit?: number | undefined;
163
163
  };
164
- export type ManifestData = import('../../types/appium-manifest').ManifestData;
165
- export type InternalMetadata = import('../../types/appium-manifest').InternalMetadata;
166
- export type ExtPackageJson<T> = import('../../types/external-manifest').ExtPackageJson<T>;
167
- export type ExtManifest<T> = import('../../types/appium-manifest').ExtManifest<T>;
168
- export type ExtRecord<T> = import('../../types/appium-manifest').ExtRecord<T>;
164
+ export type ManifestData = import('appium/types').ManifestData;
165
+ export type InternalMetadata = import('appium/types').InternalMetadata;
166
+ export type ExtPackageJson<T> = import('appium/types').ExtPackageJson<T>;
167
+ export type ExtManifest<T> = import('appium/types').ExtManifest<T>;
168
+ export type ExtRecord<T> = import('appium/types').ExtRecord<T>;
169
169
  /**
170
170
  * Either `driver` or `plugin` rn
171
171
  */
172
- export type ExtensionType = import('../../types').ExtensionType;
172
+ export type ExtensionType = import('@appium/types').ExtensionType;
173
173
  import _ from "lodash";
174
174
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest.js"],"names":[],"mappings":"AAmGA;;;;GAIG;AACH;IA4DE;;;;;;OAMG;IACH,yEAIG;IAvBH;;;;;;OAMG;IACH,sBAGC;IAzDD;;;;;;OAMG;IACH,cAAM;IAEN;;;;OAIG;IACH,oBAAY;IAEZ;;;;OAIG;IACH,eAHU,MAAM,CAGF;IAEd;;;;;;;;;OASG;IACH,iBAAS;IAET;;;;;;;;;OASG;IACH,iBAAS;IA2BT;;;;OAIG;IACH,6CAHW,+BAA+B,GAC7B,QAAQ,OAAO,CAAC,CA0B5B;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;OAQG;IACH,wHAHW,MAAM,GACJ,OAAO,CAsCnB;IAED;;;;;;;;;;OAUG;IACH,iGAJW,MAAM,oCAEJ,IAAI,CAIhB;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;;;OAMG;IACH,kHAEC;IAED;;;;;;;;;OASG;IACH,QAFa,QAAQ,YAAY,CAAC,CAsDjC;IAED;;;;;;OAMG;IACH,yBAaC;IAED;;;;;;;OAOG;IACH,SAFa,QAAQ,OAAO,CAAC,CAoC5B;CACF;;;;yBAIY,OAAO,aAAa,EAAE,UAAU;;;;yBAKhC,OAAO,aAAa,EAAE,UAAU;;;;;;;2BAShC,OAAO,6BAA6B,EAAE,YAAY;+BAClD,OAAO,6BAA6B,EAAE,gBAAgB;gCAKtD,OAAO,+BAA+B,EAAE,cAAc,CAAC,CAAC,CAAC;6BAKzD,OAAO,6BAA6B,EAAE,WAAW,CAAC,CAAC,CAAC;2BAKpD,OAAO,6BAA6B,EAAE,SAAS,CAAC,CAAC,CAAC;;;;4BAKlD,OAAO,aAAa,EAAE,aAAa"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest.js"],"names":[],"mappings":"AAmGA;;;;GAIG;AACH;IA4DE;;;;;;OAMG;IACH,yEAEG;IArBH;;;;;;OAMG;IACH,sBAGC;IAzDD;;;;;;OAMG;IACH,cAAM;IAEN;;;;OAIG;IACH,oBAAY;IAEZ;;;;OAIG;IACH,eAHU,MAAM,CAGF;IAEd;;;;;;;;;OASG;IACH,iBAAS;IAET;;;;;;;;;OASG;IACH,iBAAS;IAyBT;;;;OAIG;IACH,6CAHW,+BAA+B,GAC7B,QAAQ,OAAO,CAAC,CAoB5B;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;OAQG;IACH,0HAHW,MAAM,GACJ,OAAO,CAuCnB;IAED;;;;;;;;;;OAUG;IACH,mGAJW,MAAM,2DAQhB;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;;;OAMG;IACH,oHAEC;IAED;;;;;;;;;OASG;IACH,QAFa,QAAQ,YAAY,CAAC,CAuDjC;IAED;;;;;;OAMG;IACH,yBAaC;IAED;;;;;;;OAOG;IACH,SAFa,QAAQ,OAAO,CAAC,CAgC5B;CACF;;;;yBAIY,OAAO,eAAe,EAAE,UAAU;;;;yBAKlC,OAAO,eAAe,EAAE,UAAU;;;;;;;2BASlC,OAAO,cAAc,EAAE,YAAY;+BACnC,OAAO,cAAc,EAAE,gBAAgB;gCAKvC,OAAO,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;6BAKxC,OAAO,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;2BAKrC,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;;;;4BAKnC,OAAO,eAAe,EAAE,aAAa"}
@@ -104,9 +104,14 @@ class Manifest {
104
104
  }
105
105
 
106
106
  addExtensionFromPackage(pkgJson, pkgPath) {
107
+ var _pkgJson$peerDependen;
108
+
109
+ const extensionPath = _path.default.dirname(pkgPath);
110
+
107
111
  const internal = {
108
112
  pkgName: pkgJson.name,
109
113
  version: pkgJson.version,
114
+ appiumVersion: (_pkgJson$peerDependen = pkgJson.peerDependencies) === null || _pkgJson$peerDependen === void 0 ? void 0 : _pkgJson$peerDependen.appium,
110
115
  installType: _extensionConfig.INSTALL_TYPE_NPM,
111
116
  installSpec: `${pkgJson.name}@${pkgJson.version}`
112
117
  };
@@ -130,12 +135,15 @@ class Manifest {
130
135
 
131
136
  return false;
132
137
  } else {
133
- throw new TypeError(`The extension in ${_path.default.dirname(pkgPath)} is neither a valid driver nor a valid plugin.`);
138
+ throw new TypeError(`The extension in ${extensionPath} is neither a valid driver nor a valid plugin.`);
134
139
  }
135
140
  }
136
141
 
137
142
  addExtension(extType, extName, extData) {
138
- this._data[`${extType}s`][extName] = extData;
143
+ const data = _lodash.default.clone(extData);
144
+
145
+ this._data[`${extType}s`][extName] = data;
146
+ return data;
139
147
  }
140
148
 
141
149
  get appiumHome() {
@@ -166,6 +174,8 @@ class Manifest {
166
174
 
167
175
  const yaml = await _support.fs.readFile(this._manifestPath, 'utf8');
168
176
  data = _yaml.default.parse(yaml);
177
+
178
+ _logger.default.debug(`Parsed manifest file: ${JSON.stringify(data, null, 2)}`);
169
179
  } catch (err) {
170
180
  if (err.code === 'ENOENT') {
171
181
  data = _lodash.default.cloneDeep(INITIAL_MANIFEST_DATA);
@@ -243,4 +253,4 @@ class Manifest {
243
253
  }
244
254
 
245
255
  exports.Manifest = Manifest;
246
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NFQVJDSF9ERVBUSCIsIkRFRkFVTFRfRklORF9FWFRFTlNJT05TX09QVFMiLCJPYmplY3QiLCJmcmVlemUiLCJkZXB0aExpbWl0IiwiZmlsdGVyIiwiZmlsZXBhdGgiLCJwYXRoIiwiYmFzZW5hbWUiLCJzdGFydHNXaXRoIiwiQ09ORklHX1NDSEVNQV9SRVYiLCJDT05GSUdfREFUQV9EUklWRVJfS0VZIiwiRFJJVkVSX1RZUEUiLCJDT05GSUdfREFUQV9QTFVHSU5fS0VZIiwiUExVR0lOX1RZUEUiLCJJTklUSUFMX01BTklGRVNUX0RBVEEiLCJzY2hlbWFSZXYiLCJpc0V4dGVuc2lvbiIsInZhbHVlIiwiXyIsImlzUGxhaW5PYmplY3QiLCJhcHBpdW0iLCJpc1N0cmluZyIsIm5hbWUiLCJ2ZXJzaW9uIiwiaXNEcml2ZXIiLCJnZXQiLCJpc0FycmF5IiwiaXNQbHVnaW4iLCJNYW5pZmVzdCIsIl9kYXRhIiwiX2FwcGl1bUhvbWUiLCJfbWFuaWZlc3RQYXRoIiwiX3dyaXRpbmciLCJfcmVhZGluZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImNsb25lRGVlcCIsImdldEluc3RhbmNlIiwibWVtb2l6ZSIsIl9nZXRJbnN0YW5jZSIsInN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9ucyIsIndhbGtPcHRzIiwiZGVmYXVsdHMiLCJkaWRDaGFuZ2UiLCJzdGF0cyIsImZzIiwid2FsayIsImlzRGlyZWN0b3J5IiwicGtnIiwiZW52IiwicmVhZFBhY2thZ2VJbkRpciIsImFkZGVkIiwiYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2UiLCJqb2luIiwiaGFzRHJpdmVyIiwiQm9vbGVhbiIsImRyaXZlcnMiLCJoYXNQbHVnaW4iLCJwbHVnaW5zIiwicGtnSnNvbiIsInBrZ1BhdGgiLCJpbnRlcm5hbCIsInBrZ05hbWUiLCJpbnN0YWxsVHlwZSIsIklOU1RBTExfVFlQRV9OUE0iLCJpbnN0YWxsU3BlYyIsImRyaXZlck5hbWUiLCJhZGRFeHRlbnNpb24iLCJvbWl0IiwicGx1Z2luTmFtZSIsIlR5cGVFcnJvciIsImRpcm5hbWUiLCJleHRUeXBlIiwiZXh0TmFtZSIsImV4dERhdGEiLCJtYW5pZmVzdFBhdGgiLCJnZXRFeHRlbnNpb25EYXRhIiwicmVhZCIsImRhdGEiLCJpc05ld0ZpbGUiLCJfc2V0TWFuaWZlc3RQYXRoIiwibG9nIiwiZGVidWciLCJ5YW1sIiwicmVhZEZpbGUiLCJZQU1MIiwicGFyc2UiLCJlcnIiLCJjb2RlIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQiLCJoYXNBcHBpdW1EZXBlbmRlbmN5Iiwid3JpdGUiLCJ1bmRlZmluZWQiLCJyZXNvbHZlTWFuaWZlc3RQYXRoIiwicmVsYXRpdmUiLCJta2RpcnAiLCJ3cml0ZUZpbGUiLCJzdHJpbmdpZnkiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL21hbmlmZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kdWxlIGNvbnRhaW5pbmcge0BsaW5rIE1hbmlmZXN0fSB3aGljaCBoYW5kbGVzIHJlYWRpbmcgJiB3cml0aW5nIG9mIGV4dGVuc2lvbiBjb25maWcgZmlsZXMuXG4gKi9cblxuaW1wb3J0IHsgZW52LCBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgWUFNTCBmcm9tICd5YW1sJztcbmltcG9ydCB7IERSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBJTlNUQUxMX1RZUEVfTlBNIH0gZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCB7IHBhY2thZ2VEaWRDaGFuZ2UgfSBmcm9tICcuL3BhY2thZ2UtY2hhbmdlZCc7XG5cbi8qKlxuICogRGVmYXVsdCBkZXB0aCB0byBzZWFyY2ggaW4gZGlyZWN0b3J5IHRyZWUgZm9yIHdoYXRldmVyIGl0IGlzIHdlJ3JlIGxvb2tpbmcgZm9yLlxuICpcbiAqIEl0J3MgNCBiZWNhdXNlIHNtYWxsZXIgbnVtYmVycyBkaWRuJ3Qgd29yay5cbiAqL1xuY29uc3QgREVGQVVMVF9TRUFSQ0hfREVQVEggPSA0O1xuXG4vKipcbiAqIERlZmF1bHQgb3B0aW9ucyBmb3Ige0BsaW5rIGZpbmRFeHRlbnNpb25zfS5cbiAqIEB0eXBlIHtSZWFkb25seTxpbXBvcnQoJ2tsYXcnKS5PcHRpb25zPn1cbiAqL1xuY29uc3QgREVGQVVMVF9GSU5EX0VYVEVOU0lPTlNfT1BUUyA9IE9iamVjdC5mcmVlemUoe1xuICBkZXB0aExpbWl0OiBERUZBVUxUX1NFQVJDSF9ERVBUSCxcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZmlsdGVyOiAoZmlsZXBhdGgpID0+ICFwYXRoLmJhc2VuYW1lKGZpbGVwYXRoKS5zdGFydHNXaXRoKCcuJyksXG59KTtcblxuLyoqXG4gKiBDdXJyZW50IGNvbmZpZ3VyYXRpb24gc2NoZW1hIHJldmlzaW9uIVxuICovXG5jb25zdCBDT05GSUdfU0NIRU1BX1JFViA9IDI7XG5cbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHByb3AgKGBkcml2ZXJzYCkgdXNlZCBpbiBgZXh0ZW5zaW9ucy55YW1sYCBmb3IgZHJpdmVycy5cbiAqIEB0eXBlIHtgJHt0eXBlb2YgRFJJVkVSX1RZUEV9c2B9XG4gKi9cbmNvbnN0IENPTkZJR19EQVRBX0RSSVZFUl9LRVkgPSBgJHtEUklWRVJfVFlQRX1zYDtcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvcCAoYHBsdWdpbnNgKSB1c2VkIGluIGBleHRlbnNpb25zLnlhbWxgIGZvciBwbHVnaW5zLlxuICogQHR5cGUge2Ake3R5cGVvZiBQTFVHSU5fVFlQRX1zYH1cbiAqL1xuY29uc3QgQ09ORklHX0RBVEFfUExVR0lOX0tFWSA9IGAke1BMVUdJTl9UWVBFfXNgO1xuXG4vKipcbiAqIEB0eXBlIHtSZWFkb25seTxNYW5pZmVzdERhdGE+fVxuICovXG5jb25zdCBJTklUSUFMX01BTklGRVNUX0RBVEEgPSBPYmplY3QuZnJlZXplKHtcbiAgW0NPTkZJR19EQVRBX0RSSVZFUl9LRVldOiBPYmplY3QuZnJlZXplKHt9KSxcbiAgW0NPTkZJR19EQVRBX1BMVUdJTl9LRVldOiBPYmplY3QuZnJlZXplKHt9KSxcbiAgc2NoZW1hUmV2OiBDT05GSUdfU0NIRU1BX1JFVixcbn0pO1xuXG4vKipcbiAqIEdpdmVuIGEgYHBhY2thZ2UuanNvbmAgcmV0dXJuIGB0cnVlYCBpZiBpdCByZXByZXNlbnRzIGFuIEFwcGl1bSBFeHRlbnNpb24gKGVpdGhlciBhIGRyaXZlciBvciBwbHVnaW4pLlxuICpcbiAqIFRoZSBgcGFja2FnZS5qc29uYCBtdXN0IGhhdmUgYW4gYGFwcGl1bWAgcHJvcGVydHkgd2hpY2ggaXMgYW4gb2JqZWN0LlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgRXh0UGFja2FnZUpzb248RXh0ZW5zaW9uVHlwZT59XG4gKi9cbmZ1bmN0aW9uIGlzRXh0ZW5zaW9uICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIF8uaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiZcbiAgICBfLmlzUGxhaW5PYmplY3QodmFsdWUuYXBwaXVtKSAmJlxuICAgIF8uaXNTdHJpbmcodmFsdWUubmFtZSkgJiZcbiAgICBfLmlzU3RyaW5nKHZhbHVlLnZlcnNpb24pXG4gICk7XG59XG4vKipcbiAqIEdpdmVuIGEgYHBhY2thZ2UuanNvbmAsIHJldHVybiBgdHJ1ZWAgaWYgaXQgcmVwcmVzZW50cyBhbiBBcHBpdW0gRHJpdmVyLlxuICpcbiAqIFRvIGJlIGNvbnNpZGVyZWQgYSBkcml2ZXIsIGEgYHBhY2thZ2UuanNvbmAgbXVzdCBoYXZlIGEgZmllbGRzXG4gKiBgYXBwaXVtLmRyaXZlck5hbWVgLCBgYXBwaXVtLmF1dG9tYXRpb25OYW1lYCBhbmQgYGFwcGl1bS5wbGF0Zm9ybU5hbWVzYC5cbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxEcml2ZXJUeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNEcml2ZXIgKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgaXNFeHRlbnNpb24odmFsdWUpICYmXG4gICAgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5kcml2ZXJOYW1lJykpICYmXG4gICAgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5hdXRvbWF0aW9uTmFtZScpKSAmJlxuICAgIF8uaXNBcnJheShfLmdldCh2YWx1ZSwgJ2FwcGl1bS5wbGF0Zm9ybU5hbWVzJykpXG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCwgcmV0dXJuIGB0cnVlYCBpZiBpdCByZXByZXNlbnRzIGFuIEFwcGl1bSBQbHVnaW4uXG4gKlxuICogVG8gYmUgY29uc2lkZXJlZCBhIHBsdWdpbiwgYSBgcGFja2FnZS5qc29uYCBtdXN0IGhhdmUgYW4gYGFwcGl1bS5wbHVnaW5OYW1lYCBmaWVsZC5cbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxQbHVnaW5UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNQbHVnaW4gKHZhbHVlKSB7XG4gIHJldHVybiBpc0V4dGVuc2lvbih2YWx1ZSkgJiYgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5wbHVnaW5OYW1lJykpO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgcmVhZGluZyAmIHdyaXRpbmcgb2YgZXh0ZW5zaW9uIGNvbmZpZyBmaWxlcy5cbiAqXG4gKiBPbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGV4aXN0cyBwZXIgdmFsdWUgb2YgYEFQUElVTV9IT01FYC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmlmZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBlbnRpcmUgY29udGVudHMgb2YgYSBwYXJzZWQgWUFNTCBleHRlbnNpb24gY29uZmlnIGZpbGUuXG4gICAqXG4gICAqIENvbnRhaW5zIHByb3hpZXMgZm9yIGF1dG9tYXRpYyBwZXJzaXN0ZW5jZSBvbiBkaXNrXG4gICAqIEB0eXBlIHtNYW5pZmVzdERhdGF9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZGF0YTtcblxuICAvKipcbiAgICogUGF0aCB0byBgQVBQSVVNX0hPTUVgLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UmVhZG9ubHk8c3RyaW5nPn1cbiAgICovXG4gIF9hcHBpdW1Ib21lO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGBleHRlbnNpb25zLnlhbWxgXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIE5vdCBzZXQgdW50aWwge0BsaW5rIE1hbmlmZXN0LnJlYWR9IGlzIGNhbGxlZC5cbiAgICovXG4gIF9tYW5pZmVzdFBhdGg7XG5cbiAgLyoqXG4gICAqIEhlbHBzIGF2b2lkIHdyaXRpbmcgbXVsdGlwbGUgdGltZXMuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYHVuZGVmaW5lZGAsIGNhbGxpbmcge0BsaW5rIE1hbmlmZXN0LndyaXRlfSB3aWxsIGNhdXNlIGl0IHRvIGJlXG4gICAqIHNldCB0byBhIGBQcm9taXNlYC4gV2hlbiB0aGUgY2FsbCB0byBgd3JpdGUoKWAgaXMgY29tcGxldGUsIHRoZSBgUHJvbWlzZWBcbiAgICogd2lsbCByZXNvbHZlIGFuZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAuICBDb25jdXJyZW50IGNhbGxzXG4gICAqIG1hZGUgd2hpbGUgdGhpcyB2YWx1ZSBpcyBhIGBQcm9taXNlYCB3aWxsIHJldHVybiB0aGUgYFByb21pc2VgIGl0c2VsZi5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1Byb21pc2U8Ym9vbGVhbj58dW5kZWZpbmVkfVxuICAgKi9cbiAgX3dyaXRpbmc7XG5cbiAgLyoqXG4gICAqIEhlbHBzIGF2b2lkIHJlYWRpbmcgbXVsdGlwbGUgdGltZXMuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYHVuZGVmaW5lZGAsIGNhbGxpbmcge0BsaW5rIE1hbmlmZXN0LnJlYWR9IHdpbGwgY2F1c2UgaXQgdG8gYmVcbiAgICogc2V0IHRvIGEgYFByb21pc2VgLiBXaGVuIHRoZSBjYWxsIHRvIGByZWFkKClgIGlzIGNvbXBsZXRlLCB0aGUgYFByb21pc2VgXG4gICAqIHdpbGwgcmVzb2x2ZSBhbmQgdGhlbiB0aGlzIHZhbHVlIHdpbGwgYmUgc2V0IHRvIGB1bmRlZmluZWRgLiAgQ29uY3VycmVudCBjYWxsc1xuICAgKiBtYWRlIHdoaWxlIHRoaXMgdmFsdWUgaXMgYSBgUHJvbWlzZWAgd2lsbCByZXR1cm4gdGhlIGBQcm9taXNlYCBpdHNlbGYuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtQcm9taXNlPHZvaWQ+fHVuZGVmaW5lZH1cbiAgICovXG4gIF9yZWFkaW5nO1xuXG4gIC8qKlxuICAgKiBTZXRzIGludGVybmFsIGRhdGEgdG8gYSBmcmVzaCBjbG9uZSBvZiB7QGxpbmsgSU5JVElBTF9NQU5JRkVTVF9EQVRBfVxuICAgKlxuICAgKiBVc2Uge0BsaW5rIE1hbmlmZXN0LmdldEluc3RhbmNlfSBpbnN0ZWFkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGFwcGl1bUhvbWUpIHtcbiAgICB0aGlzLl9hcHBpdW1Ib21lID0gYXBwaXVtSG9tZTtcbiAgICB0aGlzLl9kYXRhID0gXy5jbG9uZURlZXAoSU5JVElBTF9NQU5JRkVTVF9EQVRBKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IG9yIGV4aXN0aW5nIHtAbGluayBNYW5pZmVzdH0gaW5zdGFuY2UsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBgYXBwaXVtSG9tZWAuXG4gICAqXG4gICAqIE1haW50YWlucyBvbmUgaW5zdGFuY2UgcGVyIHZhbHVlIG9mIGBhcHBpdW1Ib21lYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHJldHVybnMge01hbmlmZXN0fVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlID0gXy5tZW1vaXplKGZ1bmN0aW9uIF9nZXRJbnN0YW5jZSAoXG4gICAgYXBwaXVtSG9tZSxcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdChhcHBpdW1Ib21lKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGBBUFBJVU1fSE9NRWAgZm9yIGluc3RhbGxlZCBleHRlbnNpb25zIGFuZCBhZGRzIHRoZW0gdG8gdGhlIG1hbmlmZXN0LlxuICAgKiBAcGFyYW0ge1N5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9uc09wdHN9IG9wdHNcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IGB0cnVlYCBpZiBhbnkgZXh0ZW5zaW9ucyB3ZXJlIGFkZGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIHN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9ucyAoe2RlcHRoTGltaXQgPSBERUZBVUxUX1NFQVJDSF9ERVBUSH0gPSB7fSkge1xuICAgIGNvbnN0IHdhbGtPcHRzID0gXy5kZWZhdWx0cyh7ZGVwdGhMaW1pdH0sIERFRkFVTFRfRklORF9FWFRFTlNJT05TX09QVFMpO1xuICAgIC8vIHRoaXMgY291bGQgYmUgcGFyYWxsZWxpemVkLCBidXQgd2UgY2FuJ3QgdXNlIGZzLndhbGsgYXMgYW4gYXN5bmMgaXRlcmF0b3JcbiAgICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gICAgZm9yIGF3YWl0IChjb25zdCB7c3RhdHMsIHBhdGg6IGZpbGVwYXRofSBvZiBmcy53YWxrKFxuICAgICAgdGhpcy5fYXBwaXVtSG9tZSxcbiAgICAgIHdhbGtPcHRzLFxuICAgICkpIHtcbiAgICAgIGlmIChmaWxlcGF0aCAhPT0gdGhpcy5fYXBwaXVtSG9tZSAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGtnID0gYXdhaXQgZW52LnJlYWRQYWNrYWdlSW5EaXIoZmlsZXBhdGgpO1xuICAgICAgICAgIGlmIChwa2cgJiYgaXNFeHRlbnNpb24ocGtnKSkge1xuICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgZXh0ZW5zaW9uIGFscmVhZHkgZXhpc3RzIGluIHRoZSBtYW5pZmVzdCxcbiAgICAgICAgICAgIC8vIHNvIG9ubHkgdXBkYXRlIGBkaWRDaGFuZ2VgIGlmIGl0J3MgbmV3LlxuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLmFkZEV4dGVuc2lvbkZyb21QYWNrYWdlKFxuICAgICAgICAgICAgICBwa2csXG4gICAgICAgICAgICAgIHBhdGguam9pbihmaWxlcGF0aCwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRpZENoYW5nZSA9IGRpZENoYW5nZSB8fCBhZGRlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpZENoYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBkcml2ZXIgd2l0aCBuYW1lIGBuYW1lYCBpcyByZWdpc3RlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIERyaXZlciBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzRHJpdmVyIChuYW1lKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZGF0YS5kcml2ZXJzW25hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBwbHVnaW4gd2l0aCBuYW1lIGBuYW1lYCBpcyByZWdpc3RlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFBsdWdpbiBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzUGx1Z2luIChuYW1lKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZGF0YS5wbHVnaW5zW25hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIHBhdGggdG8gYSBgcGFja2FnZS5qc29uYCwgYWRkIGl0IGFzIGVpdGhlciBhIGRyaXZlciBvciBwbHVnaW4gdG8gdGhlIG1hbmlmZXN0LlxuICAgKlxuICAgKiBXaWxsIF9ub3RfIG92ZXJ3cml0ZSBleGlzdGluZyBlbnRyaWVzLlxuICAgKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAgICogQHBhcmFtIHtFeHRQYWNrYWdlSnNvbjxFeHRUeXBlPn0gcGtnSnNvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnUGF0aFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBgdHJ1ZWAgdXBvbiBzdWNjZXNzLCBgZmFsc2VgIGlmIHRoZSBleHRlbnNpb24gaXMgYWxyZWFkeSByZWdpc3RlcmVkLlxuICAgKi9cbiAgYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2UgKHBrZ0pzb24sIHBrZ1BhdGgpIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7SW50ZXJuYWxNZXRhZGF0YX1cbiAgICAgKi9cbiAgICBjb25zdCBpbnRlcm5hbCA9IHtcbiAgICAgIHBrZ05hbWU6IHBrZ0pzb24ubmFtZSxcbiAgICAgIHZlcnNpb246IHBrZ0pzb24udmVyc2lvbixcbiAgICAgIGluc3RhbGxUeXBlOiBJTlNUQUxMX1RZUEVfTlBNLFxuICAgICAgaW5zdGFsbFNwZWM6IGAke3BrZ0pzb24ubmFtZX1AJHtwa2dKc29uLnZlcnNpb259YCxcbiAgICB9O1xuXG4gICAgaWYgKGlzRHJpdmVyKHBrZ0pzb24pKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzRHJpdmVyKHBrZ0pzb24uYXBwaXVtLmRyaXZlck5hbWUpKSB7XG4gICAgICAgIHRoaXMuYWRkRXh0ZW5zaW9uKERSSVZFUl9UWVBFLCBwa2dKc29uLmFwcGl1bS5kcml2ZXJOYW1lLCB7XG4gICAgICAgICAgLi4uXy5vbWl0KHBrZ0pzb24uYXBwaXVtLCAnZHJpdmVyTmFtZScpLFxuICAgICAgICAgIC4uLmludGVybmFsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGlzUGx1Z2luKHBrZ0pzb24pKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzUGx1Z2luKHBrZ0pzb24uYXBwaXVtLnBsdWdpbk5hbWUpKSB7XG4gICAgICAgIHRoaXMuYWRkRXh0ZW5zaW9uKFBMVUdJTl9UWVBFLCBwa2dKc29uLmFwcGl1bS5wbHVnaW5OYW1lLCB7XG4gICAgICAgICAgLi4uXy5vbWl0KHBrZ0pzb24uYXBwaXVtLCAncGx1Z2luTmFtZScpLFxuICAgICAgICAgIC4uLmludGVybmFsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGBUaGUgZXh0ZW5zaW9uIGluICR7cGF0aC5kaXJuYW1lKFxuICAgICAgICAgIHBrZ1BhdGgsXG4gICAgICAgICl9IGlzIG5laXRoZXIgYSB2YWxpZCBkcml2ZXIgbm9yIGEgdmFsaWQgcGx1Z2luLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV4dGVuc2lvbiB0byB0aGUgbWFuaWZlc3QgYXMgd2FzIGluc3RhbGxlZCBieSB0aGUgYGFwcGl1bWAgQ0xJLiAgVGhlXG4gICAqIGBleHREYXRhYCwgYGV4dFR5cGVgLCBhbmQgYGV4dE5hbWVgIGhhdmUgYWxyZWFkeSBiZWVuIGRldGVybWluZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgTWFuaWZlc3QuYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2V9IGZvciBhZGRpbmcgYW4gZXh0ZW5zaW9uIGZyb20gYW4gb24tZGlzayBwYWNrYWdlLlxuICAgKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAgICogQHBhcmFtIHtFeHRUeXBlfSBleHRUeXBlIC0gYGRyaXZlcmAgb3IgYHBsdWdpbmBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lIG9mIGV4dGVuc2lvblxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PEV4dFR5cGU+fSBleHREYXRhIC0gRXh0ZW5zaW9uIG1ldGFkYXRhXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgYWRkRXh0ZW5zaW9uIChleHRUeXBlLCBleHROYW1lLCBleHREYXRhKSB7XG4gICAgdGhpcy5fZGF0YVtgJHtleHRUeXBlfXNgXVtleHROYW1lXSA9IGV4dERhdGE7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgQVBQSVVNX0hPTUUgcGF0aFxuICAgKi9cbiAgZ2V0IGFwcGl1bUhvbWUgKCkge1xuICAgIHJldHVybiB0aGlzLl9hcHBpdW1Ib21lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhdGggdG8gdGhlIG1hbmlmZXN0IGZpbGVcbiAgICovXG4gIGdldCBtYW5pZmVzdFBhdGggKCkge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBleHRlbnNpb24gZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIHR5cGUuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFR5cGV9IGV4dFR5cGVcbiAgICogQHJldHVybnMge0V4dFJlY29yZDxFeHRUeXBlPn1cbiAgICovXG4gIGdldEV4dGVuc2lvbkRhdGEgKGV4dFR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVsvKiogQHR5cGUge3N0cmluZ30gKi8gKGAke2V4dFR5cGV9c2ApXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBtYW5pZmVzdCBmcm9tIGRpc2sgYW5kIF9vdmVyd3JpdGVzXyB0aGUgaW50ZXJuYWwgZGF0YS5cbiAgICpcbiAgICogSWYgdGhlIG1hbmlmZXN0IGRvZXMgbm90IGV4aXN0IG9uIGRpc2ssIGFuIHtAbGluayBJTklUSUFMX01BTklGRVNUX0RBVEEgXCJlbXB0eVwifSBtYW5pZmVzdCBmaWxlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogSWYgYEFQUElVTV9IT01FYCBjb250YWlucyBhIGBwYWNrYWdlLmpzb25gIHdpdGggYW4gYGFwcGl1bWAgZGVwZW5kZW5jeSwgdGhlbiBhIGhhc2ggb2YgdGhlIGBwYWNrYWdlLmpzb25gIHdpbGwgYmUgdGFrZW4uIElmIHRoaXMgaGFzaCBkaWZmZXJzIGZyb20gdGhlIGxhc3QgaGFzaCwgdGhlIGNvbnRlbnRzIG9mIGBBUFBJVU1fSE9NRS9ub2RlX21vZHVsZXNgIHdpbGwgYmUgc2Nhbm5lZCBmb3IgZXh0ZW5zaW9ucyB0aGF0IG1heSBoYXZlIGJlZW4gaW5zdGFsbGVkIG91dHNpZGUgb2YgdGhlIGBhcHBpdW1gIENMSS4gIEFueSBmb3VuZCBleHRlbnNpb25zIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hbmlmZXN0IGZpbGUsIGFuZCBpZiBzbywgdGhlIG1hbmlmZXN0IGZpbGUgd2lsbCBiZSB3cml0dGVuIHRvIGRpc2suXG4gICAqXG4gICAqIE9ubHkgb25lIHJlYWQgb3BlcmF0aW9uIHNob3VsZCBoYXBwZW4gYXQgYSB0aW1lLiAgVGhpcyBpcyBjb250cm9sbGVkIHZpYSB0aGUge0BsaW5rIE1hbmlmZXN0Ll9yZWFkaW5nfSBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8TWFuaWZlc3REYXRhPn0gVGhlIGRhdGFcbiAgICovXG4gIGFzeW5jIHJlYWQgKCkge1xuICAgIGlmICh0aGlzLl9yZWFkaW5nKSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWFkaW5nO1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVhZGluZyA9IChhc3luYyAoKSA9PiB7XG4gICAgICAvKiogQHR5cGUge01hbmlmZXN0RGF0YX0gKi9cbiAgICAgIGxldCBkYXRhO1xuICAgICAgbGV0IGlzTmV3RmlsZSA9IGZhbHNlO1xuICAgICAgYXdhaXQgdGhpcy5fc2V0TWFuaWZlc3RQYXRoKCk7XG4gICAgICB0cnkge1xuICAgICAgICBsb2cuZGVidWcoYFJlYWRpbmcgJHt0aGlzLl9tYW5pZmVzdFBhdGh9Li4uYCk7XG4gICAgICAgIGNvbnN0IHlhbWwgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLl9tYW5pZmVzdFBhdGgsICd1dGY4Jyk7XG4gICAgICAgIGRhdGEgPSBZQU1MLnBhcnNlKHlhbWwpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICBkYXRhID0gXy5jbG9uZURlZXAoSU5JVElBTF9NQU5JRkVTVF9EQVRBKTtcbiAgICAgICAgICBpc05ld0ZpbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLl9tYW5pZmVzdFBhdGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEFwcGl1bSBoYWQgdHJvdWJsZSBsb2FkaW5nIHRoZSBleHRlbnNpb24gaW5zdGFsbGF0aW9uIGAgK1xuICAgICAgICAgICAgICAgIGBjYWNoZSBmaWxlICgke3RoaXMuX21hbmlmZXN0UGF0aH0pLiBJdCBtYXkgYmUgaW52YWxpZCBZQU1MLiBTcGVjaWZpYyBlcnJvcjogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQXBwaXVtIGVuY291bnRlcmVkIGFuIHVua25vd24gcHJvYmxlbS4gU3BlY2lmaWMgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgbGV0IGluc3RhbGxlZEV4dGVuc2lvbnNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICBpZiAoXG4gICAgICAgIGF3YWl0IGVudi5oYXNBcHBpdW1EZXBlbmRlbmN5KHRoaXMuYXBwaXVtSG9tZSkgJiZcbiAgICAgICAgKGF3YWl0IHBhY2thZ2VEaWRDaGFuZ2UodGhpcy5hcHBpdW1Ib21lKSlcbiAgICAgICkge1xuICAgICAgICBpbnN0YWxsZWRFeHRlbnNpb25zQ2hhbmdlZCA9IGF3YWl0IHRoaXMuc3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc05ld0ZpbGUgfHwgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy53cml0ZSgpO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3JlYWRpbmc7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fcmVhZGluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB7QGxpbmsgTWFuaWZlc3QuX21hbmlmZXN0UGF0aH0gaXMgc2V0LlxuICAgKlxuICAgKiBDcmVhdGVzIHRoZSBkaXJlY3RvcnkgaWYgbmVjZXNzYXJ5LlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICAgKi9cbiAgYXN5bmMgX3NldE1hbmlmZXN0UGF0aCAoKSB7XG4gICAgaWYgKCF0aGlzLl9tYW5pZmVzdFBhdGgpIHtcbiAgICAgIHRoaXMuX21hbmlmZXN0UGF0aCA9IGF3YWl0IGVudi5yZXNvbHZlTWFuaWZlc3RQYXRoKHRoaXMuX2FwcGl1bUhvbWUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChwYXRoLnJlbGF0aXZlKHRoaXMuX2FwcGl1bUhvbWUsIHRoaXMuX21hbmlmZXN0UGF0aCkuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTWlzbWF0Y2ggYmV0d2VlbiBsb2NhdGlvbiBvZiBBUFBJVU1fSE9NRSBhbmQgbWFuaWZlc3QgZmlsZS4gQVBQSVVNX0hPTUU6ICR7dGhpcy5hcHBpdW1Ib21lfSwgbWFuaWZlc3QgZmlsZTogJHt0aGlzLl9tYW5pZmVzdFBhdGh9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fbWFuaWZlc3RQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyB0aGUgZGF0YSBpZiBpdCBuZWVkIHMgd3JpdGluZy5cbiAgICpcbiAgICogSWYgdGhlIGBzY2hlbWFSZXZgIHByb3AgbmVlZHMgdXBkYXRpbmcsIHRoZSBmaWxlIHdpbGwgYmUgd3JpdHRlbi5cbiAgICpcbiAgICogQHRvZG8gSWYgdGhpcyBiZWNvbWVzIHRvbyBtdWNoIG9mIGEgYm90dGxlbmVjaywgdGhyb3R0bGUgaXQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBXaGV0aGVyIHRoZSBkYXRhIHdhcyB3cml0dGVuXG4gICAqL1xuICBhc3luYyB3cml0ZSAoKSB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLl93cml0aW5nO1xuICAgIH1cbiAgICB0aGlzLl93cml0aW5nID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuX3NldE1hbmlmZXN0UGF0aCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMubWtkaXJwKHBhdGguZGlybmFtZSh0aGlzLl9tYW5pZmVzdFBhdGgpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEFwcGl1bSBjb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBtYW5pZmVzdCBmaWxlOiAke3BhdGguZGlybmFtZShcbiAgICAgICAgICAgIHRoaXMuX21hbmlmZXN0UGF0aCxcbiAgICAgICAgICApfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgICAgICB0aGlzLl9tYW5pZmVzdFBhdGgsXG4gICAgICAgICAgWUFNTC5zdHJpbmdpZnkodGhpcy5fZGF0YSksXG4gICAgICAgICAgJ3V0ZjgnLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEFwcGl1bSBjb3VsZCBub3Qgd3JpdGUgdG8gbWFuaWZlc3QgYXQgJHt0aGlzLl9tYW5pZmVzdFBhdGh9IHVzaW5nIEFQUElVTV9IT01FICR7dGhpcy5fYXBwaXVtSG9tZX0uIGAgK1xuICAgICAgICAgICAgYFBsZWFzZSBlbnN1cmUgaXQgaXMgd3JpdGFibGUuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dyaXRpbmc7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3dyaXRpbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHlwZSBvZiB0aGUgc3RyaW5nIHJlZmVycmluZyB0byBhIGRyaXZlciAodHlwaWNhbGx5IGFzIGEga2V5IG9yIHR5cGUgc3RyaW5nKVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBzdHJpbmcgcmVmZXJyaW5nIHRvIGEgcGx1Z2luICh0eXBpY2FsbHkgYXMgYSBrZXkgb3IgdHlwZSBzdHJpbmcpXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9uc09wdHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGVwdGhMaW1pdF0gLSBNYXhpbXVtIGRlcHRoIHRvIHJlY3Vyc2UgaW50byBzdWJkaXJlY3Rvcmllc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuTWFuaWZlc3REYXRhfSBNYW5pZmVzdERhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwcGl1bS1tYW5pZmVzdCcpLkludGVybmFsTWV0YWRhdGF9IEludGVybmFsTWV0YWRhdGFcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9leHRlcm5hbC1tYW5pZmVzdCcpLkV4dFBhY2thZ2VKc29uPFQ+fSBFeHRQYWNrYWdlSnNvblxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwcGl1bS1tYW5pZmVzdCcpLkV4dE1hbmlmZXN0PFQ+fSBFeHRNYW5pZmVzdFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwcGl1bS1tYW5pZmVzdCcpLkV4dFJlY29yZDxUPn0gRXh0UmVjb3JkXG4gKi9cblxuLyoqXG4gKiBFaXRoZXIgYGRyaXZlcmAgb3IgYHBsdWdpbmAgcm5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzJykuRXh0ZW5zaW9uVHlwZX0gRXh0ZW5zaW9uVHlwZVxuICovXG5cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQSxNQUFNQSxvQkFBb0IsR0FBRyxDQUE3QjtBQU1BLE1BQU1DLDRCQUE0QixHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUNqREMsVUFBVSxFQUFFSixvQkFEcUM7RUFHakRLLE1BQU0sRUFBR0MsUUFBRCxJQUFjLENBQUNDLGNBQUtDLFFBQUwsQ0FBY0YsUUFBZCxFQUF3QkcsVUFBeEIsQ0FBbUMsR0FBbkM7QUFIMEIsQ0FBZCxDQUFyQztBQVNBLE1BQU1DLGlCQUFpQixHQUFHLENBQTFCO0FBTUEsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUMsc0JBQVksR0FBOUM7QUFNQSxNQUFNQyxzQkFBc0IsR0FBSSxHQUFFQyxzQkFBWSxHQUE5QztBQUtBLE1BQU1DLHFCQUFxQixHQUFHYixNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUMxQyxDQUFDUSxzQkFBRCxHQUEwQlQsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxDQURnQjtFQUUxQyxDQUFDVSxzQkFBRCxHQUEwQlgsTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxDQUZnQjtFQUcxQ2EsU0FBUyxFQUFFTjtBQUgrQixDQUFkLENBQTlCOztBQWFBLFNBQVNPLFdBQVQsQ0FBc0JDLEtBQXRCLEVBQTZCO0VBQzNCLE9BQ0VDLGdCQUFFQyxhQUFGLENBQWdCRixLQUFoQixLQUNBQyxnQkFBRUMsYUFBRixDQUFnQkYsS0FBSyxDQUFDRyxNQUF0QixDQURBLElBRUFGLGdCQUFFRyxRQUFGLENBQVdKLEtBQUssQ0FBQ0ssSUFBakIsQ0FGQSxJQUdBSixnQkFBRUcsUUFBRixDQUFXSixLQUFLLENBQUNNLE9BQWpCLENBSkY7QUFNRDs7QUFTRCxTQUFTQyxRQUFULENBQW1CUCxLQUFuQixFQUEwQjtFQUN4QixPQUNFRCxXQUFXLENBQUNDLEtBQUQsQ0FBWCxJQUNBQyxnQkFBRUcsUUFBRixDQUFXSCxnQkFBRU8sR0FBRixDQUFNUixLQUFOLEVBQWEsbUJBQWIsQ0FBWCxDQURBLElBRUFDLGdCQUFFRyxRQUFGLENBQVdILGdCQUFFTyxHQUFGLENBQU1SLEtBQU4sRUFBYSx1QkFBYixDQUFYLENBRkEsSUFHQUMsZ0JBQUVRLE9BQUYsQ0FBVVIsZ0JBQUVPLEdBQUYsQ0FBTVIsS0FBTixFQUFhLHNCQUFiLENBQVYsQ0FKRjtBQU1EOztBQVNELFNBQVNVLFFBQVQsQ0FBbUJWLEtBQW5CLEVBQTBCO0VBQ3hCLE9BQU9ELFdBQVcsQ0FBQ0MsS0FBRCxDQUFYLElBQXNCQyxnQkFBRUcsUUFBRixDQUFXSCxnQkFBRU8sR0FBRixDQUFNUixLQUFOLEVBQWEsbUJBQWIsQ0FBWCxDQUE3QjtBQUNEOztBQU9NLE1BQU1XLFFBQU4sQ0FBZTtFQVFwQkMsS0FBSztFQU9MQyxXQUFXO0VBT1hDLGFBQWE7RUFZYkMsUUFBUTtFQVlSQyxRQUFROztFQVNSQyxXQUFXLENBQUVDLFVBQUYsRUFBYztJQUN2QixLQUFLTCxXQUFMLEdBQW1CSyxVQUFuQjtJQUNBLEtBQUtOLEtBQUwsR0FBYVgsZ0JBQUVrQixTQUFGLENBQVl0QixxQkFBWixDQUFiO0VBQ0Q7O0VBU2lCLE9BQVh1QixXQUFXLEdBQUduQixnQkFBRW9CLE9BQUYsQ0FBVSxTQUFTQyxZQUFULENBQzdCSixVQUQ2QixFQUU3QjtJQUNBLE9BQU8sSUFBSVAsUUFBSixDQUFhTyxVQUFiLENBQVA7RUFDRCxDQUpvQixDQUFIOztFQVdlLE1BQTNCSywyQkFBMkIsQ0FBRTtJQUFDckMsVUFBVSxHQUFHSjtFQUFkLElBQXNDLEVBQXhDLEVBQTRDO0lBQzNFLE1BQU0wQyxRQUFRLEdBQUd2QixnQkFBRXdCLFFBQUYsQ0FBVztNQUFDdkM7SUFBRCxDQUFYLEVBQXlCSCw0QkFBekIsQ0FBakI7O0lBRUEsSUFBSTJDLFNBQVMsR0FBRyxLQUFoQjs7SUFDQSxXQUFXLE1BQU07TUFBQ0MsS0FBRDtNQUFRdEMsSUFBSSxFQUFFRDtJQUFkLENBQWpCLElBQTRDd0MsWUFBR0MsSUFBSCxDQUMxQyxLQUFLaEIsV0FEcUMsRUFFMUNXLFFBRjBDLENBQTVDLEVBR0c7TUFDRCxJQUFJcEMsUUFBUSxLQUFLLEtBQUt5QixXQUFsQixJQUFpQ2MsS0FBSyxDQUFDRyxXQUFOLEVBQXJDLEVBQTBEO1FBQ3hELElBQUk7VUFDRixNQUFNQyxHQUFHLEdBQUcsTUFBTUMsYUFBSUMsZ0JBQUosQ0FBcUI3QyxRQUFyQixDQUFsQjs7VUFDQSxJQUFJMkMsR0FBRyxJQUFJaEMsV0FBVyxDQUFDZ0MsR0FBRCxDQUF0QixFQUE2QjtZQUczQixNQUFNRyxLQUFLLEdBQUcsS0FBS0MsdUJBQUwsQ0FDWkosR0FEWSxFQUVaMUMsY0FBSytDLElBQUwsQ0FBVWhELFFBQVYsRUFBb0IsY0FBcEIsQ0FGWSxDQUFkO1lBSUFzQyxTQUFTLEdBQUdBLFNBQVMsSUFBSVEsS0FBekI7VUFDRDtRQUNGLENBWEQsQ0FXRSxNQUFNLENBQUU7TUFDWDtJQUNGOztJQUNELE9BQU9SLFNBQVA7RUFDRDs7RUFPRFcsU0FBUyxDQUFFaEMsSUFBRixFQUFRO0lBQ2YsT0FBT2lDLE9BQU8sQ0FBQyxLQUFLMUIsS0FBTCxDQUFXMkIsT0FBWCxDQUFtQmxDLElBQW5CLENBQUQsQ0FBZDtFQUNEOztFQU9EbUMsU0FBUyxDQUFFbkMsSUFBRixFQUFRO0lBQ2YsT0FBT2lDLE9BQU8sQ0FBQyxLQUFLMUIsS0FBTCxDQUFXNkIsT0FBWCxDQUFtQnBDLElBQW5CLENBQUQsQ0FBZDtFQUNEOztFQVdEOEIsdUJBQXVCLENBQUVPLE9BQUYsRUFBV0MsT0FBWCxFQUFvQjtJQUl6QyxNQUFNQyxRQUFRLEdBQUc7TUFDZkMsT0FBTyxFQUFFSCxPQUFPLENBQUNyQyxJQURGO01BRWZDLE9BQU8sRUFBRW9DLE9BQU8sQ0FBQ3BDLE9BRkY7TUFHZndDLFdBQVcsRUFBRUMsaUNBSEU7TUFJZkMsV0FBVyxFQUFHLEdBQUVOLE9BQU8sQ0FBQ3JDLElBQUssSUFBR3FDLE9BQU8sQ0FBQ3BDLE9BQVE7SUFKakMsQ0FBakI7O0lBT0EsSUFBSUMsUUFBUSxDQUFDbUMsT0FBRCxDQUFaLEVBQXVCO01BQ3JCLElBQUksQ0FBQyxLQUFLTCxTQUFMLENBQWVLLE9BQU8sQ0FBQ3ZDLE1BQVIsQ0FBZThDLFVBQTlCLENBQUwsRUFBZ0Q7UUFDOUMsS0FBS0MsWUFBTCxDQUFrQnhELHNCQUFsQixFQUErQmdELE9BQU8sQ0FBQ3ZDLE1BQVIsQ0FBZThDLFVBQTlDLEVBQTBELEVBQ3hELEdBQUdoRCxnQkFBRWtELElBQUYsQ0FBT1QsT0FBTyxDQUFDdkMsTUFBZixFQUF1QixZQUF2QixDQURxRDtVQUV4RCxHQUFHeUM7UUFGcUQsQ0FBMUQ7UUFJQSxPQUFPLElBQVA7TUFDRDs7TUFDRCxPQUFPLEtBQVA7SUFDRCxDQVRELE1BU08sSUFBSWxDLFFBQVEsQ0FBQ2dDLE9BQUQsQ0FBWixFQUF1QjtNQUM1QixJQUFJLENBQUMsS0FBS0YsU0FBTCxDQUFlRSxPQUFPLENBQUN2QyxNQUFSLENBQWVpRCxVQUE5QixDQUFMLEVBQWdEO1FBQzlDLEtBQUtGLFlBQUwsQ0FBa0J0RCxzQkFBbEIsRUFBK0I4QyxPQUFPLENBQUN2QyxNQUFSLENBQWVpRCxVQUE5QyxFQUEwRCxFQUN4RCxHQUFHbkQsZ0JBQUVrRCxJQUFGLENBQU9ULE9BQU8sQ0FBQ3ZDLE1BQWYsRUFBdUIsWUFBdkIsQ0FEcUQ7VUFFeEQsR0FBR3lDO1FBRnFELENBQTFEO1FBSUEsT0FBTyxJQUFQO01BQ0Q7O01BQ0QsT0FBTyxLQUFQO0lBQ0QsQ0FUTSxNQVNBO01BQ0wsTUFBTSxJQUFJUyxTQUFKLENBQ0gsb0JBQW1CaEUsY0FBS2lFLE9BQUwsQ0FDbEJYLE9BRGtCLENBRWxCLGdEQUhFLENBQU47SUFLRDtFQUNGOztFQWFETyxZQUFZLENBQUVLLE9BQUYsRUFBV0MsT0FBWCxFQUFvQkMsT0FBcEIsRUFBNkI7SUFDdkMsS0FBSzdDLEtBQUwsQ0FBWSxHQUFFMkMsT0FBUSxHQUF0QixFQUEwQkMsT0FBMUIsSUFBcUNDLE9BQXJDO0VBQ0Q7O0VBS2EsSUFBVnZDLFVBQVUsR0FBSTtJQUNoQixPQUFPLEtBQUtMLFdBQVo7RUFDRDs7RUFLZSxJQUFaNkMsWUFBWSxHQUFJO0lBQ2xCLE9BQU8sS0FBSzVDLGFBQVo7RUFDRDs7RUFTRDZDLGdCQUFnQixDQUFFSixPQUFGLEVBQVc7SUFDekIsT0FBTyxLQUFLM0MsS0FBTCxDQUFtQyxHQUFFMkMsT0FBUSxHQUE3QyxDQUFQO0VBQ0Q7O0VBWVMsTUFBSkssSUFBSSxHQUFJO0lBQ1osSUFBSSxLQUFLNUMsUUFBVCxFQUFtQjtNQUNqQixNQUFNLEtBQUtBLFFBQVg7TUFDQSxPQUFPLEtBQUtKLEtBQVo7SUFDRDs7SUFFRCxLQUFLSSxRQUFMLEdBQWdCLENBQUMsWUFBWTtNQUUzQixJQUFJNkMsSUFBSjtNQUNBLElBQUlDLFNBQVMsR0FBRyxLQUFoQjtNQUNBLE1BQU0sS0FBS0MsZ0JBQUwsRUFBTjs7TUFDQSxJQUFJO1FBQ0ZDLGdCQUFJQyxLQUFKLENBQVcsV0FBVSxLQUFLbkQsYUFBYyxLQUF4Qzs7UUFDQSxNQUFNb0QsSUFBSSxHQUFHLE1BQU10QyxZQUFHdUMsUUFBSCxDQUFZLEtBQUtyRCxhQUFqQixFQUFnQyxNQUFoQyxDQUFuQjtRQUNBK0MsSUFBSSxHQUFHTyxjQUFLQyxLQUFMLENBQVdILElBQVgsQ0FBUDtNQUNELENBSkQsQ0FJRSxPQUFPSSxHQUFQLEVBQVk7UUFDWixJQUFJQSxHQUFHLENBQUNDLElBQUosS0FBYSxRQUFqQixFQUEyQjtVQUN6QlYsSUFBSSxHQUFHNUQsZ0JBQUVrQixTQUFGLENBQVl0QixxQkFBWixDQUFQO1VBQ0FpRSxTQUFTLEdBQUcsSUFBWjtRQUNELENBSEQsTUFHTztVQUNMLElBQUksS0FBS2hELGFBQVQsRUFBd0I7WUFDdEIsTUFBTSxJQUFJMEQsS0FBSixDQUNILHdEQUFELEdBQ0csZUFBYyxLQUFLMUQsYUFBYyw4Q0FBNkN3RCxHQUFHLENBQUNHLE9BQVEsRUFGekYsQ0FBTjtVQUlELENBTEQsTUFLTztZQUNMLE1BQU0sSUFBSUQsS0FBSixDQUNILDBEQUF5REYsR0FBRyxDQUFDRyxPQUFRLEVBRGxFLENBQU47VUFHRDtRQUNGO01BQ0Y7O01BRUQsS0FBSzdELEtBQUwsR0FBYWlELElBQWI7TUFDQSxJQUFJYSwwQkFBMEIsR0FBRyxLQUFqQzs7TUFDQSxJQUNFLE9BQU0xQyxhQUFJMkMsbUJBQUosQ0FBd0IsS0FBS3pELFVBQTdCLENBQU4sTUFDQyxNQUFNLHNDQUFpQixLQUFLQSxVQUF0QixDQURQLENBREYsRUFHRTtRQUNBd0QsMEJBQTBCLEdBQUcsTUFBTSxLQUFLbkQsMkJBQUwsRUFBbkM7TUFDRDs7TUFFRCxJQUFJdUMsU0FBUyxJQUFJWSwwQkFBakIsRUFBNkM7UUFDM0MsTUFBTSxLQUFLRSxLQUFMLEVBQU47TUFDRDtJQUNGLENBdkNlLEdBQWhCOztJQXdDQSxJQUFJO01BQ0YsTUFBTSxLQUFLNUQsUUFBWDtNQUNBLE9BQU8sS0FBS0osS0FBWjtJQUNELENBSEQsU0FHVTtNQUNSLEtBQUtJLFFBQUwsR0FBZ0I2RCxTQUFoQjtJQUNEO0VBQ0Y7O0VBU3FCLE1BQWhCZCxnQkFBZ0IsR0FBSTtJQUN4QixJQUFJLENBQUMsS0FBS2pELGFBQVYsRUFBeUI7TUFDdkIsS0FBS0EsYUFBTCxHQUFxQixNQUFNa0IsYUFBSThDLG1CQUFKLENBQXdCLEtBQUtqRSxXQUE3QixDQUEzQjs7TUFHQSxJQUFJeEIsY0FBSzBGLFFBQUwsQ0FBYyxLQUFLbEUsV0FBbkIsRUFBZ0MsS0FBS0MsYUFBckMsRUFBb0R2QixVQUFwRCxDQUErRCxHQUEvRCxDQUFKLEVBQXlFO1FBQ3ZFLE1BQU0sSUFBSWlGLEtBQUosQ0FDSCw0RUFBMkUsS0FBS3RELFVBQVcsb0JBQW1CLEtBQUtKLGFBQWMsRUFEOUgsQ0FBTjtNQUdEO0lBQ0Y7O0lBRUQsT0FBTyxLQUFLQSxhQUFaO0VBQ0Q7O0VBVVUsTUFBTDhELEtBQUssR0FBSTtJQUNiLElBQUksS0FBSzdELFFBQVQsRUFBbUI7TUFDakIsT0FBTyxLQUFLQSxRQUFaO0lBQ0Q7O0lBQ0QsS0FBS0EsUUFBTCxHQUFnQixDQUFDLFlBQVk7TUFDM0IsTUFBTSxLQUFLZ0QsZ0JBQUwsRUFBTjs7TUFDQSxJQUFJO1FBQ0YsTUFBTW5DLFlBQUdvRCxNQUFILENBQVUzRixjQUFLaUUsT0FBTCxDQUFhLEtBQUt4QyxhQUFsQixDQUFWLENBQU47TUFDRCxDQUZELENBRUUsT0FBT3dELEdBQVAsRUFBWTtRQUNaLE1BQU0sSUFBSUUsS0FBSixDQUNILGdFQUErRG5GLGNBQUtpRSxPQUFMLENBQzlELEtBQUt4QyxhQUR5RCxDQUU5RCxxQkFBb0J3RCxHQUFHLENBQUNHLE9BQVEsRUFIOUIsQ0FBTjtNQUtEOztNQUNELElBQUk7UUFDRixNQUFNN0MsWUFBR3FELFNBQUgsQ0FDSixLQUFLbkUsYUFERCxFQUVKc0QsY0FBS2MsU0FBTCxDQUFlLEtBQUt0RSxLQUFwQixDQUZJLEVBR0osTUFISSxDQUFOO1FBS0EsT0FBTyxJQUFQO01BQ0QsQ0FQRCxDQU9FLE9BQU8wRCxHQUFQLEVBQVk7UUFDWixNQUFNLElBQUlFLEtBQUosQ0FDSCx5Q0FBd0MsS0FBSzFELGFBQWMsc0JBQXFCLEtBQUtELFdBQVksSUFBbEcsR0FDRyxpREFBZ0R5RCxHQUFHLENBQUNHLE9BQVEsRUFGM0QsQ0FBTjtNQUlEO0lBQ0YsQ0F4QmUsR0FBaEI7O0lBeUJBLElBQUk7TUFDRixPQUFPLE1BQU0sS0FBSzFELFFBQWxCO0lBQ0QsQ0FGRCxTQUVVO01BQ1IsS0FBS0EsUUFBTCxHQUFnQjhELFNBQWhCO0lBQ0Q7RUFDRjs7QUFqVm1CIn0=
256
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJERUZBVUxUX1NFQVJDSF9ERVBUSCIsIkRFRkFVTFRfRklORF9FWFRFTlNJT05TX09QVFMiLCJPYmplY3QiLCJmcmVlemUiLCJkZXB0aExpbWl0IiwiZmlsdGVyIiwiZmlsZXBhdGgiLCJwYXRoIiwiYmFzZW5hbWUiLCJzdGFydHNXaXRoIiwiQ09ORklHX1NDSEVNQV9SRVYiLCJDT05GSUdfREFUQV9EUklWRVJfS0VZIiwiRFJJVkVSX1RZUEUiLCJDT05GSUdfREFUQV9QTFVHSU5fS0VZIiwiUExVR0lOX1RZUEUiLCJJTklUSUFMX01BTklGRVNUX0RBVEEiLCJzY2hlbWFSZXYiLCJpc0V4dGVuc2lvbiIsInZhbHVlIiwiXyIsImlzUGxhaW5PYmplY3QiLCJhcHBpdW0iLCJpc1N0cmluZyIsIm5hbWUiLCJ2ZXJzaW9uIiwiaXNEcml2ZXIiLCJnZXQiLCJpc0FycmF5IiwiaXNQbHVnaW4iLCJNYW5pZmVzdCIsIl9kYXRhIiwiX2FwcGl1bUhvbWUiLCJfbWFuaWZlc3RQYXRoIiwiX3dyaXRpbmciLCJfcmVhZGluZyIsImNvbnN0cnVjdG9yIiwiYXBwaXVtSG9tZSIsImNsb25lRGVlcCIsImdldEluc3RhbmNlIiwibWVtb2l6ZSIsIl9nZXRJbnN0YW5jZSIsInN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9ucyIsIndhbGtPcHRzIiwiZGVmYXVsdHMiLCJkaWRDaGFuZ2UiLCJzdGF0cyIsImZzIiwid2FsayIsImlzRGlyZWN0b3J5IiwicGtnIiwiZW52IiwicmVhZFBhY2thZ2VJbkRpciIsImFkZGVkIiwiYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2UiLCJqb2luIiwiaGFzRHJpdmVyIiwiQm9vbGVhbiIsImRyaXZlcnMiLCJoYXNQbHVnaW4iLCJwbHVnaW5zIiwicGtnSnNvbiIsInBrZ1BhdGgiLCJleHRlbnNpb25QYXRoIiwiZGlybmFtZSIsImludGVybmFsIiwicGtnTmFtZSIsImFwcGl1bVZlcnNpb24iLCJwZWVyRGVwZW5kZW5jaWVzIiwiaW5zdGFsbFR5cGUiLCJJTlNUQUxMX1RZUEVfTlBNIiwiaW5zdGFsbFNwZWMiLCJkcml2ZXJOYW1lIiwiYWRkRXh0ZW5zaW9uIiwib21pdCIsInBsdWdpbk5hbWUiLCJUeXBlRXJyb3IiLCJleHRUeXBlIiwiZXh0TmFtZSIsImV4dERhdGEiLCJkYXRhIiwiY2xvbmUiLCJtYW5pZmVzdFBhdGgiLCJnZXRFeHRlbnNpb25EYXRhIiwicmVhZCIsImlzTmV3RmlsZSIsIl9zZXRNYW5pZmVzdFBhdGgiLCJsb2ciLCJkZWJ1ZyIsInlhbWwiLCJyZWFkRmlsZSIsIllBTUwiLCJwYXJzZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJlcnIiLCJjb2RlIiwiRXJyb3IiLCJtZXNzYWdlIiwiaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQiLCJoYXNBcHBpdW1EZXBlbmRlbmN5IiwicGFja2FnZURpZENoYW5nZSIsIndyaXRlIiwidW5kZWZpbmVkIiwicmVzb2x2ZU1hbmlmZXN0UGF0aCIsInJlbGF0aXZlIiwibWtkaXJwIiwid3JpdGVGaWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2V4dGVuc2lvbi9tYW5pZmVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vZHVsZSBjb250YWluaW5nIHtAbGluayBNYW5pZmVzdH0gd2hpY2ggaGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICovXG5cbmltcG9ydCB7ZW52LCBmc30gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBZQU1MIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHtEUklWRVJfVFlQRSwgUExVR0lOX1RZUEV9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQge0lOU1RBTExfVFlQRV9OUE19IGZyb20gJy4vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge3BhY2thZ2VEaWRDaGFuZ2V9IGZyb20gJy4vcGFja2FnZS1jaGFuZ2VkJztcblxuLyoqXG4gKiBEZWZhdWx0IGRlcHRoIHRvIHNlYXJjaCBpbiBkaXJlY3RvcnkgdHJlZSBmb3Igd2hhdGV2ZXIgaXQgaXMgd2UncmUgbG9va2luZyBmb3IuXG4gKlxuICogSXQncyA0IGJlY2F1c2Ugc21hbGxlciBudW1iZXJzIGRpZG4ndCB3b3JrLlxuICovXG5jb25zdCBERUZBVUxUX1NFQVJDSF9ERVBUSCA9IDQ7XG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIGZvciB7QGxpbmsgZmluZEV4dGVuc2lvbnN9LlxuICogQHR5cGUge1JlYWRvbmx5PGltcG9ydCgna2xhdycpLk9wdGlvbnM+fVxuICovXG5jb25zdCBERUZBVUxUX0ZJTkRfRVhURU5TSU9OU19PUFRTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGRlcHRoTGltaXQ6IERFRkFVTFRfU0VBUkNIX0RFUFRILFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmaWx0ZXI6IChmaWxlcGF0aCkgPT4gIXBhdGguYmFzZW5hbWUoZmlsZXBhdGgpLnN0YXJ0c1dpdGgoJy4nKSxcbn0pO1xuXG4vKipcbiAqIEN1cnJlbnQgY29uZmlndXJhdGlvbiBzY2hlbWEgcmV2aXNpb24hXG4gKi9cbmNvbnN0IENPTkZJR19TQ0hFTUFfUkVWID0gMjtcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvcCAoYGRyaXZlcnNgKSB1c2VkIGluIGBleHRlbnNpb25zLnlhbWxgIGZvciBkcml2ZXJzLlxuICogQHR5cGUge2Ake3R5cGVvZiBEUklWRVJfVFlQRX1zYH1cbiAqL1xuY29uc3QgQ09ORklHX0RBVEFfRFJJVkVSX0tFWSA9IGAke0RSSVZFUl9UWVBFfXNgO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wIChgcGx1Z2luc2ApIHVzZWQgaW4gYGV4dGVuc2lvbnMueWFtbGAgZm9yIHBsdWdpbnMuXG4gKiBAdHlwZSB7YCR7dHlwZW9mIFBMVUdJTl9UWVBFfXNgfVxuICovXG5jb25zdCBDT05GSUdfREFUQV9QTFVHSU5fS0VZID0gYCR7UExVR0lOX1RZUEV9c2A7XG5cbi8qKlxuICogQHR5cGUge1JlYWRvbmx5PE1hbmlmZXN0RGF0YT59XG4gKi9cbmNvbnN0IElOSVRJQUxfTUFOSUZFU1RfREFUQSA9IE9iamVjdC5mcmVlemUoe1xuICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBbQ09ORklHX0RBVEFfUExVR0lOX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBzY2hlbWFSZXY6IENPTkZJR19TQ0hFTUFfUkVWLFxufSk7XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIEV4dGVuc2lvbiAoZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbikuXG4gKlxuICogVGhlIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhbiBgYXBwaXVtYCBwcm9wZXJ0eSB3aGljaCBpcyBhbiBvYmplY3QuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxFeHRlbnNpb25UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNFeHRlbnNpb24odmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICBfLmlzUGxhaW5PYmplY3QodmFsdWUpICYmXG4gICAgXy5pc1BsYWluT2JqZWN0KHZhbHVlLmFwcGl1bSkgJiZcbiAgICBfLmlzU3RyaW5nKHZhbHVlLm5hbWUpICYmXG4gICAgXy5pc1N0cmluZyh2YWx1ZS52ZXJzaW9uKVxuICApO1xufVxuLyoqXG4gKiBHaXZlbiBhIGBwYWNrYWdlLmpzb25gLCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIERyaXZlci5cbiAqXG4gKiBUbyBiZSBjb25zaWRlcmVkIGEgZHJpdmVyLCBhIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhIGZpZWxkc1xuICogYGFwcGl1bS5kcml2ZXJOYW1lYCwgYGFwcGl1bS5hdXRvbWF0aW9uTmFtZWAgYW5kIGBhcHBpdW0ucGxhdGZvcm1OYW1lc2AuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBWYWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgRXh0UGFja2FnZUpzb248RHJpdmVyVHlwZT59XG4gKi9cbmZ1bmN0aW9uIGlzRHJpdmVyKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgaXNFeHRlbnNpb24odmFsdWUpICYmXG4gICAgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5kcml2ZXJOYW1lJykpICYmXG4gICAgXy5pc1N0cmluZyhfLmdldCh2YWx1ZSwgJ2FwcGl1bS5hdXRvbWF0aW9uTmFtZScpKSAmJlxuICAgIF8uaXNBcnJheShfLmdldCh2YWx1ZSwgJ2FwcGl1bS5wbGF0Zm9ybU5hbWVzJykpXG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCwgcmV0dXJuIGB0cnVlYCBpZiBpdCByZXByZXNlbnRzIGFuIEFwcGl1bSBQbHVnaW4uXG4gKlxuICogVG8gYmUgY29uc2lkZXJlZCBhIHBsdWdpbiwgYSBgcGFja2FnZS5qc29uYCBtdXN0IGhhdmUgYW4gYGFwcGl1bS5wbHVnaW5OYW1lYCBmaWVsZC5cbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxQbHVnaW5UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNQbHVnaW4odmFsdWUpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaW9uKHZhbHVlKSAmJiBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLnBsdWdpbk5hbWUnKSk7XG59XG5cbi8qKlxuICogSGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICpcbiAqIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZXhpc3RzIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICovXG5leHBvcnQgY2xhc3MgTWFuaWZlc3Qge1xuICAvKipcbiAgICogVGhlIGVudGlyZSBjb250ZW50cyBvZiBhIHBhcnNlZCBZQU1MIGV4dGVuc2lvbiBjb25maWcgZmlsZS5cbiAgICpcbiAgICogQ29udGFpbnMgcHJveGllcyBmb3IgYXV0b21hdGljIHBlcnNpc3RlbmNlIG9uIGRpc2tcbiAgICogQHR5cGUge01hbmlmZXN0RGF0YX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kYXRhO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGBBUFBJVU1fSE9NRWAuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgX2FwcGl1bUhvbWU7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYGV4dGVuc2lvbnMueWFtbGBcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogTm90IHNldCB1bnRpbCB7QGxpbmsgTWFuaWZlc3QucmVhZH0gaXMgY2FsbGVkLlxuICAgKi9cbiAgX21hbmlmZXN0UGF0aDtcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgd3JpdGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3Qud3JpdGV9IHdpbGwgY2F1c2UgaXQgdG8gYmVcbiAgICogc2V0IHRvIGEgYFByb21pc2VgLiBXaGVuIHRoZSBjYWxsIHRvIGB3cml0ZSgpYCBpcyBjb21wbGV0ZSwgdGhlIGBQcm9taXNlYFxuICAgKiB3aWxsIHJlc29sdmUgYW5kIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBgdW5kZWZpbmVkYC4gIENvbmN1cnJlbnQgY2FsbHNcbiAgICogbWFkZSB3aGlsZSB0aGlzIHZhbHVlIGlzIGEgYFByb21pc2VgIHdpbGwgcmV0dXJuIHRoZSBgUHJvbWlzZWAgaXRzZWxmLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UHJvbWlzZTxib29sZWFuPnx1bmRlZmluZWR9XG4gICAqL1xuICBfd3JpdGluZztcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgcmVhZGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3QucmVhZH0gd2lsbCBjYXVzZSBpdCB0byBiZVxuICAgKiBzZXQgdG8gYSBgUHJvbWlzZWAuIFdoZW4gdGhlIGNhbGwgdG8gYHJlYWQoKWAgaXMgY29tcGxldGUsIHRoZSBgUHJvbWlzZWBcbiAgICogd2lsbCByZXNvbHZlIGFuZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAuICBDb25jdXJyZW50IGNhbGxzXG4gICAqIG1hZGUgd2hpbGUgdGhpcyB2YWx1ZSBpcyBhIGBQcm9taXNlYCB3aWxsIHJldHVybiB0aGUgYFByb21pc2VgIGl0c2VsZi5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1Byb21pc2U8dm9pZD58dW5kZWZpbmVkfVxuICAgKi9cbiAgX3JlYWRpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgaW50ZXJuYWwgZGF0YSB0byBhIGZyZXNoIGNsb25lIG9mIHtAbGluayBJTklUSUFMX01BTklGRVNUX0RBVEF9XG4gICAqXG4gICAqIFVzZSB7QGxpbmsgTWFuaWZlc3QuZ2V0SW5zdGFuY2V9IGluc3RlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcHBpdW1Ib21lKSB7XG4gICAgdGhpcy5fYXBwaXVtSG9tZSA9IGFwcGl1bUhvbWU7XG4gICAgdGhpcy5fZGF0YSA9IF8uY2xvbmVEZWVwKElOSVRJQUxfTUFOSUZFU1RfREFUQSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBvciBleGlzdGluZyB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgYGFwcGl1bUhvbWVgLlxuICAgKlxuICAgKiBNYWludGFpbnMgb25lIGluc3RhbmNlIHBlciB2YWx1ZSBvZiBgYXBwaXVtSG9tZWAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gUGF0aCB0byBgQVBQSVVNX0hPTUVgXG4gICAqIEByZXR1cm5zIHtNYW5pZmVzdH1cbiAgICovXG4gIHN0YXRpYyBnZXRJbnN0YW5jZSA9IF8ubWVtb2l6ZShmdW5jdGlvbiBfZ2V0SW5zdGFuY2UoYXBwaXVtSG9tZSkge1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3QoYXBwaXVtSG9tZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBgQVBQSVVNX0hPTUVgIGZvciBpbnN0YWxsZWQgZXh0ZW5zaW9ucyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBtYW5pZmVzdC5cbiAgICogQHBhcmFtIHtTeW5jV2l0aEluc3RhbGxlZEV4dGVuc2lvbnNPcHRzfSBvcHRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fSBgdHJ1ZWAgaWYgYW55IGV4dGVuc2lvbnMgd2VyZSBhZGRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBzeW5jV2l0aEluc3RhbGxlZEV4dGVuc2lvbnMoe2RlcHRoTGltaXQgPSBERUZBVUxUX1NFQVJDSF9ERVBUSH0gPSB7fSkge1xuICAgIGNvbnN0IHdhbGtPcHRzID0gXy5kZWZhdWx0cyh7ZGVwdGhMaW1pdH0sIERFRkFVTFRfRklORF9FWFRFTlNJT05TX09QVFMpO1xuICAgIC8vIHRoaXMgY291bGQgYmUgcGFyYWxsZWxpemVkLCBidXQgd2UgY2FuJ3QgdXNlIGZzLndhbGsgYXMgYW4gYXN5bmMgaXRlcmF0b3JcbiAgICBsZXQgZGlkQ2hhbmdlID0gZmFsc2U7XG4gICAgZm9yIGF3YWl0IChjb25zdCB7c3RhdHMsIHBhdGg6IGZpbGVwYXRofSBvZiBmcy53YWxrKHRoaXMuX2FwcGl1bUhvbWUsIHdhbGtPcHRzKSkge1xuICAgICAgaWYgKGZpbGVwYXRoICE9PSB0aGlzLl9hcHBpdW1Ib21lICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwa2cgPSBhd2FpdCBlbnYucmVhZFBhY2thZ2VJbkRpcihmaWxlcGF0aCk7XG4gICAgICAgICAgaWYgKHBrZyAmJiBpc0V4dGVuc2lvbihwa2cpKSB7XG4gICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBleHRlbnNpb24gYWxyZWFkeSBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LFxuICAgICAgICAgICAgLy8gc28gb25seSB1cGRhdGUgYGRpZENoYW5nZWAgaWYgaXQncyBuZXcuXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2UocGtnLCBwYXRoLmpvaW4oZmlsZXBhdGgsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgICAgICAgICBkaWRDaGFuZ2UgPSBkaWRDaGFuZ2UgfHwgYWRkZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWRDaGFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgZHJpdmVyIHdpdGggbmFtZSBgbmFtZWAgaXMgcmVnaXN0ZXJlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBEcml2ZXIgbmFtZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc0RyaXZlcihuYW1lKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZGF0YS5kcml2ZXJzW25hbWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBwbHVnaW4gd2l0aCBuYW1lIGBuYW1lYCBpcyByZWdpc3RlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFBsdWdpbiBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzUGx1Z2luKG5hbWUpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9kYXRhLnBsdWdpbnNbbmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgcGF0aCB0byBhIGBwYWNrYWdlLmpzb25gLCBhZGQgaXQgYXMgZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbiB0byB0aGUgbWFuaWZlc3QuXG4gICAqXG4gICAqIFdpbGwgX25vdF8gb3ZlcndyaXRlIGV4aXN0aW5nIGVudHJpZXMuXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFBhY2thZ2VKc29uPEV4dFR5cGU+fSBwa2dKc29uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dQYXRoXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCB1cG9uIHN1Y2Nlc3MsIGBmYWxzZWAgaWYgdGhlIGV4dGVuc2lvbiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAqL1xuICBhZGRFeHRlbnNpb25Gcm9tUGFja2FnZShwa2dKc29uLCBwa2dQYXRoKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uUGF0aCA9IHBhdGguZGlybmFtZShwa2dQYXRoKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtJbnRlcm5hbE1ldGFkYXRhfVxuICAgICAqL1xuICAgIGNvbnN0IGludGVybmFsID0ge1xuICAgICAgcGtnTmFtZTogcGtnSnNvbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGtnSnNvbi52ZXJzaW9uLFxuICAgICAgYXBwaXVtVmVyc2lvbjogcGtnSnNvbi5wZWVyRGVwZW5kZW5jaWVzPy5hcHBpdW0sXG4gICAgICBpbnN0YWxsVHlwZTogSU5TVEFMTF9UWVBFX05QTSxcbiAgICAgIGluc3RhbGxTcGVjOiBgJHtwa2dKc29uLm5hbWV9QCR7cGtnSnNvbi52ZXJzaW9ufWAsXG4gICAgfTtcblxuICAgIGlmIChpc0RyaXZlcihwa2dKc29uKSkge1xuICAgICAgaWYgKCF0aGlzLmhhc0RyaXZlcihwa2dKc29uLmFwcGl1bS5kcml2ZXJOYW1lKSkge1xuICAgICAgICB0aGlzLmFkZEV4dGVuc2lvbihEUklWRVJfVFlQRSwgcGtnSnNvbi5hcHBpdW0uZHJpdmVyTmFtZSwge1xuICAgICAgICAgIC4uLl8ub21pdChwa2dKc29uLmFwcGl1bSwgJ2RyaXZlck5hbWUnKSxcbiAgICAgICAgICAuLi5pbnRlcm5hbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoaXNQbHVnaW4ocGtnSnNvbikpIHtcbiAgICAgIGlmICghdGhpcy5oYXNQbHVnaW4ocGtnSnNvbi5hcHBpdW0ucGx1Z2luTmFtZSkpIHtcbiAgICAgICAgdGhpcy5hZGRFeHRlbnNpb24oUExVR0lOX1RZUEUsIHBrZ0pzb24uYXBwaXVtLnBsdWdpbk5hbWUsIHtcbiAgICAgICAgICAuLi5fLm9taXQocGtnSnNvbi5hcHBpdW0sICdwbHVnaW5OYW1lJyksXG4gICAgICAgICAgLi4uaW50ZXJuYWwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFRoZSBleHRlbnNpb24gaW4gJHtleHRlbnNpb25QYXRofSBpcyBuZWl0aGVyIGEgdmFsaWQgZHJpdmVyIG5vciBhIHZhbGlkIHBsdWdpbi5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGV4dGVuc2lvbiB0byB0aGUgbWFuaWZlc3QgYXMgd2FzIGluc3RhbGxlZCBieSB0aGUgYGFwcGl1bWAgQ0xJLiAgVGhlXG4gICAqIGBleHREYXRhYCwgYGV4dFR5cGVgLCBhbmQgYGV4dE5hbWVgIGhhdmUgYWxyZWFkeSBiZWVuIGRldGVybWluZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgTWFuaWZlc3QuYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2V9IGZvciBhZGRpbmcgYW4gZXh0ZW5zaW9uIGZyb20gYW4gb24tZGlzayBwYWNrYWdlLlxuICAgKiBAdGVtcGxhdGUge0V4dGVuc2lvblR5cGV9IEV4dFR5cGVcbiAgICogQHBhcmFtIHtFeHRUeXBlfSBleHRUeXBlIC0gYGRyaXZlcmAgb3IgYHBsdWdpbmBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBOYW1lIG9mIGV4dGVuc2lvblxuICAgKiBAcGFyYW0ge0V4dE1hbmlmZXN0PEV4dFR5cGU+fSBleHREYXRhIC0gRXh0ZW5zaW9uIG1ldGFkYXRhXG4gICAqIEByZXR1cm5zIHtFeHRNYW5pZmVzdDxFeHRUeXBlPn0gQSBjbG9uZSBvZiBgZXh0RGF0YWAsIHBvdGVudGlhbGx5IHdpdGggYSBtdXRhdGVkIGBhcHBpdW1WZXJzaW9uYCBmaWVsZFxuICAgKi9cbiAgYWRkRXh0ZW5zaW9uKGV4dFR5cGUsIGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICBjb25zdCBkYXRhID0gXy5jbG9uZShleHREYXRhKTtcbiAgICB0aGlzLl9kYXRhW2Ake2V4dFR5cGV9c2BdW2V4dE5hbWVdID0gZGF0YTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBUFBJVU1fSE9NRSBwYXRoXG4gICAqL1xuICBnZXQgYXBwaXVtSG9tZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwaXVtSG9tZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBtYW5pZmVzdCBmaWxlXG4gICAqL1xuICBnZXQgbWFuaWZlc3RQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBleHRlbnNpb24gZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIHR5cGUuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFR5cGV9IGV4dFR5cGVcbiAgICogQHJldHVybnMge0V4dFJlY29yZDxFeHRUeXBlPn1cbiAgICovXG4gIGdldEV4dGVuc2lvbkRhdGEoZXh0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoYCR7ZXh0VHlwZX1zYCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIG1hbmlmZXN0IGZyb20gZGlzayBhbmQgX292ZXJ3cml0ZXNfIHRoZSBpbnRlcm5hbCBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgbWFuaWZlc3QgZG9lcyBub3QgZXhpc3Qgb24gZGlzaywgYW4ge0BsaW5rIElOSVRJQUxfTUFOSUZFU1RfREFUQSBcImVtcHR5XCJ9IG1hbmlmZXN0IGZpbGUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBJZiBgQVBQSVVNX0hPTUVgIGNvbnRhaW5zIGEgYHBhY2thZ2UuanNvbmAgd2l0aCBhbiBgYXBwaXVtYCBkZXBlbmRlbmN5LCB0aGVuIGEgaGFzaCBvZiB0aGUgYHBhY2thZ2UuanNvbmAgd2lsbCBiZSB0YWtlbi4gSWYgdGhpcyBoYXNoIGRpZmZlcnMgZnJvbSB0aGUgbGFzdCBoYXNoLCB0aGUgY29udGVudHMgb2YgYEFQUElVTV9IT01FL25vZGVfbW9kdWxlc2Agd2lsbCBiZSBzY2FubmVkIGZvciBleHRlbnNpb25zIHRoYXQgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgYGFwcGl1bWAgQ0xJLiAgQW55IGZvdW5kIGV4dGVuc2lvbnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuaWZlc3QgZmlsZSwgYW5kIGlmIHNvLCB0aGUgbWFuaWZlc3QgZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzay5cbiAgICpcbiAgICogT25seSBvbmUgcmVhZCBvcGVyYXRpb24gc2hvdWxkIGhhcHBlbiBhdCBhIHRpbWUuICBUaGlzIGlzIGNvbnRyb2xsZWQgdmlhIHRoZSB7QGxpbmsgTWFuaWZlc3QuX3JlYWRpbmd9IHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNYW5pZmVzdERhdGE+fSBUaGUgZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcmVhZGluZykge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZGluZztcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgLyoqIEB0eXBlIHtNYW5pZmVzdERhdGF9ICovXG4gICAgICBsZXQgZGF0YTtcbiAgICAgIGxldCBpc05ld0ZpbGUgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHRoaXMuX3NldE1hbmlmZXN0UGF0aCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmRlYnVnKGBSZWFkaW5nICR7dGhpcy5fbWFuaWZlc3RQYXRofS4uLmApO1xuICAgICAgICBjb25zdCB5YW1sID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5fbWFuaWZlc3RQYXRoLCAndXRmOCcpO1xuICAgICAgICBkYXRhID0gWUFNTC5wYXJzZSh5YW1sKTtcbiAgICAgICAgbG9nLmRlYnVnKGBQYXJzZWQgbWFuaWZlc3QgZmlsZTogJHtKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKX1gKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgZGF0YSA9IF8uY2xvbmVEZWVwKElOSVRJQUxfTUFOSUZFU1RfREFUQSk7XG4gICAgICAgICAgaXNOZXdGaWxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fbWFuaWZlc3RQYXRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBBcHBpdW0gaGFkIHRyb3VibGUgbG9hZGluZyB0aGUgZXh0ZW5zaW9uIGluc3RhbGxhdGlvbiBgICtcbiAgICAgICAgICAgICAgICBgY2FjaGUgZmlsZSAoJHt0aGlzLl9tYW5pZmVzdFBhdGh9KS4gSXQgbWF5IGJlIGludmFsaWQgWUFNTC4gU3BlY2lmaWMgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQXBwaXVtIGVuY291bnRlcmVkIGFuIHVua25vd24gcHJvYmxlbS4gU3BlY2lmaWMgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICBsZXQgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGlmIChcbiAgICAgICAgKGF3YWl0IGVudi5oYXNBcHBpdW1EZXBlbmRlbmN5KHRoaXMuYXBwaXVtSG9tZSkpICYmXG4gICAgICAgIChhd2FpdCBwYWNrYWdlRGlkQ2hhbmdlKHRoaXMuYXBwaXVtSG9tZSkpXG4gICAgICApIHtcbiAgICAgICAgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQgPSBhd2FpdCB0aGlzLnN5bmNXaXRoSW5zdGFsbGVkRXh0ZW5zaW9ucygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNOZXdGaWxlIHx8IGluc3RhbGxlZEV4dGVuc2lvbnNDaGFuZ2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMud3JpdGUoKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWFkaW5nO1xuICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX3JlYWRpbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMge0BsaW5rIE1hbmlmZXN0Ll9tYW5pZmVzdFBhdGh9IGlzIHNldC5cbiAgICpcbiAgICogQ3JlYXRlcyB0aGUgZGlyZWN0b3J5IGlmIG5lY2Vzc2FyeS5cbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIGFzeW5jIF9zZXRNYW5pZmVzdFBhdGgoKSB7XG4gICAgaWYgKCF0aGlzLl9tYW5pZmVzdFBhdGgpIHtcbiAgICAgIHRoaXMuX21hbmlmZXN0UGF0aCA9IGF3YWl0IGVudi5yZXNvbHZlTWFuaWZlc3RQYXRoKHRoaXMuX2FwcGl1bUhvbWUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChwYXRoLnJlbGF0aXZlKHRoaXMuX2FwcGl1bUhvbWUsIHRoaXMuX21hbmlmZXN0UGF0aCkuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTWlzbWF0Y2ggYmV0d2VlbiBsb2NhdGlvbiBvZiBBUFBJVU1fSE9NRSBhbmQgbWFuaWZlc3QgZmlsZS4gQVBQSVVNX0hPTUU6ICR7dGhpcy5hcHBpdW1Ib21lfSwgbWFuaWZlc3QgZmlsZTogJHt0aGlzLl9tYW5pZmVzdFBhdGh9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBkYXRhIGlmIGl0IG5lZWQgcyB3cml0aW5nLlxuICAgKlxuICAgKiBJZiB0aGUgYHNjaGVtYVJldmAgcHJvcCBuZWVkcyB1cGRhdGluZywgdGhlIGZpbGUgd2lsbCBiZSB3cml0dGVuLlxuICAgKlxuICAgKiBAdG9kbyBJZiB0aGlzIGJlY29tZXMgdG9vIG11Y2ggb2YgYSBib3R0bGVuZWNrLCB0aHJvdHRsZSBpdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFdoZXRoZXIgdGhlIGRhdGEgd2FzIHdyaXR0ZW5cbiAgICovXG4gIGFzeW5jIHdyaXRlKCkge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5fd3JpdGluZztcbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9zZXRNYW5pZmVzdFBhdGgoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUodGhpcy5fbWFuaWZlc3RQYXRoKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBBcHBpdW0gY291bGQgbm90IGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvciB0aGUgbWFuaWZlc3QgZmlsZTogJHtwYXRoLmRpcm5hbWUoXG4gICAgICAgICAgICB0aGlzLl9tYW5pZmVzdFBhdGhcbiAgICAgICAgICApfS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuX21hbmlmZXN0UGF0aCwgWUFNTC5zdHJpbmdpZnkodGhpcy5fZGF0YSksICd1dGY4Jyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCB3cml0ZSB0byBtYW5pZmVzdCBhdCAke3RoaXMuX21hbmlmZXN0UGF0aH0gdXNpbmcgQVBQSVVNX0hPTUUgJHt0aGlzLl9hcHBpdW1Ib21lfS4gYCArXG4gICAgICAgICAgICBgUGxlYXNlIGVuc3VyZSBpdCBpcyB3cml0YWJsZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl93cml0aW5nO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl93cml0aW5nID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFR5cGUgb2YgdGhlIHN0cmluZyByZWZlcnJpbmcgdG8gYSBkcml2ZXIgKHR5cGljYWxseSBhcyBhIGtleSBvciB0eXBlIHN0cmluZylcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKi9cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBzdHJpbmcgcmVmZXJyaW5nIHRvIGEgcGx1Z2luICh0eXBpY2FsbHkgYXMgYSBrZXkgb3IgdHlwZSBzdHJpbmcpXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zT3B0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXB0aExpbWl0XSAtIE1heGltdW0gZGVwdGggdG8gcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5NYW5pZmVzdERhdGF9IE1hbmlmZXN0RGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuSW50ZXJuYWxNZXRhZGF0YX0gSW50ZXJuYWxNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dFBhY2thZ2VKc29uPFQ+fSBFeHRQYWNrYWdlSnNvblxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PFQ+fSBFeHRNYW5pZmVzdFxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dFJlY29yZDxUPn0gRXh0UmVjb3JkXG4gKi9cblxuLyoqXG4gKiBFaXRoZXIgYGRyaXZlcmAgb3IgYHBsdWdpbmAgcm5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQSxNQUFNQSxvQkFBb0IsR0FBRyxDQUE3QjtBQU1BLE1BQU1DLDRCQUE0QixHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUNqREMsVUFBVSxFQUFFSixvQkFEcUM7RUFHakRLLE1BQU0sRUFBR0MsUUFBRCxJQUFjLENBQUNDLGFBQUEsQ0FBS0MsUUFBTCxDQUFjRixRQUFkLEVBQXdCRyxVQUF4QixDQUFtQyxHQUFuQztBQUgwQixDQUFkLENBQXJDO0FBU0EsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBMUI7QUFNQSxNQUFNQyxzQkFBc0IsR0FBSSxHQUFFQyxzQkFBWSxHQUE5QztBQU1BLE1BQU1DLHNCQUFzQixHQUFJLEdBQUVDLHNCQUFZLEdBQTlDO0FBS0EsTUFBTUMscUJBQXFCLEdBQUdiLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0VBQzFDLENBQUNRLHNCQUFELEdBQTBCVCxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLENBRGdCO0VBRTFDLENBQUNVLHNCQUFELEdBQTBCWCxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLENBRmdCO0VBRzFDYSxTQUFTLEVBQUVOO0FBSCtCLENBQWQsQ0FBOUI7O0FBYUEsU0FBU08sV0FBVCxDQUFxQkMsS0FBckIsRUFBNEI7RUFDMUIsT0FDRUMsZUFBQSxDQUFFQyxhQUFGLENBQWdCRixLQUFoQixLQUNBQyxlQUFBLENBQUVDLGFBQUYsQ0FBZ0JGLEtBQUssQ0FBQ0csTUFBdEIsQ0FEQSxJQUVBRixlQUFBLENBQUVHLFFBQUYsQ0FBV0osS0FBSyxDQUFDSyxJQUFqQixDQUZBLElBR0FKLGVBQUEsQ0FBRUcsUUFBRixDQUFXSixLQUFL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
@@ -1 +1 @@
1
- {"version":3,"file":"package-changed.d.ts","sourceRoot":"","sources":["../../../lib/extension/package-changed.js"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH,6CAHW,MAAM,GACJ,QAAQ,OAAO,CAAC,CAgD5B"}
1
+ {"version":3,"file":"package-changed.d.ts","sourceRoot":"","sources":["../../../lib/extension/package-changed.js"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,6CAHW,MAAM,GACJ,QAAQ,OAAO,CAAC,CAkD5B"}
@@ -65,4 +65,4 @@ async function packageDidChange(appiumHome) {
65
65
 
66
66
  return isChanged;
67
67
  }
68
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYWNrYWdlRGlkQ2hhbmdlIiwiYXBwaXVtSG9tZSIsImhhc2hGaWxlbmFtZSIsInBhdGgiLCJqb2luIiwiUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgiLCJpc0NoYW5nZWQiLCJ3cml0ZUhhc2giLCJoYXNoIiwib2xkSGFzaCIsImhhc2hGaWxlbmFtZURpciIsImRpcm5hbWUiLCJsb2ciLCJkZWJ1ZyIsImZzIiwibWtkaXJwIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwiY3dkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2V4dGVuc2lvbi9wYWNrYWdlLWNoYW5nZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBmcyB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBpc1BhY2thZ2VDaGFuZ2VkIH0gZnJvbSAncGFja2FnZS1jaGFuZ2VkJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgZXh0ZW5zaW9ucyBoYXZlIGNoYW5nZWQsIGFuZCB1cGRhdGVzIGEgaGFzaCB0aGUgYHBhY2thZ2UuanNvbmAgaW4gYGFwcGl1bUhvbWVgIGlmIHNvLlxuICpcbiAqIElmIHRoZXkgaGF2ZSwgd2UgbmVlZCB0byBzeW5jIHRoZW0gd2l0aCB0aGUgYGV4dGVuc2lvbnMueWFtbGAgbWFuaWZlc3QuXG4gKlxuICogX1dhcm5pbmc6IHRoaXMgbWFrZXMgYSBibG9ja2luZyBjYWxsIHRvIGB3cml0ZUZpbGVTeW5jYC5fXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZVxuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IGB0cnVlYCBpZiBgcGFja2FnZS5qc29uYCBgYXBwaXVtSG9tZWAgY2hhbmdlZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFja2FnZURpZENoYW5nZSAoYXBwaXVtSG9tZSkge1xuICBjb25zdCBoYXNoRmlsZW5hbWUgPSBwYXRoLmpvaW4oYXBwaXVtSG9tZSwgUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgpO1xuXG4gIC8vIFhYWDogdGhlIHR5cGVzIGluIGBwYWNrYWdlLWNoYW5nZWRgIHNlZW0gdG8gYmUgd3JvbmcuXG5cbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICBsZXQgaXNDaGFuZ2VkO1xuICAvKiogQHR5cGUgeygpID0+IHZvaWR9ICovXG4gIGxldCB3cml0ZUhhc2g7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBsZXQgaGFzaDtcbiAgLyoqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfSAqL1xuICBsZXQgb2xkSGFzaDtcblxuICAvLyBmaXJzdCBta2RpcnAgdGhlIHRhcmdldCBkaXIuXG4gIGNvbnN0IGhhc2hGaWxlbmFtZURpciA9IHBhdGguZGlybmFtZShoYXNoRmlsZW5hbWUpO1xuICBsb2cuZGVidWcoYENyZWF0aW5nIGhhc2ggZmlsZSBkaXJlY3Rvcnk6ICR7aGFzaEZpbGVuYW1lRGlyfWApO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLm1rZGlycChoYXNoRmlsZW5hbWVEaXIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQXBwaXVtIGNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IgaGFzaCBmaWxlOiAke2hhc2hGaWxlbmFtZURpcn0uIE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWAsXG4gICAgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgKHtpc0NoYW5nZWQsIHdyaXRlSGFzaCwgb2xkSGFzaCwgaGFzaH0gPSBhd2FpdCBpc1BhY2thZ2VDaGFuZ2VkKHtcbiAgICAgIGN3ZDogYXBwaXVtSG9tZSxcbiAgICAgIGhhc2hGaWxlbmFtZTogUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgsXG4gICAgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0cnkge1xuICAgICAgd3JpdGVIYXNoKCk7XG4gICAgICBsb2cuZGVidWcoYFVwZGF0ZWQgaGFzaCBvZiAke2FwcGl1bUhvbWV9L3BhY2thZ2UuanNvbiBmcm9tOiAke29sZEhhc2ggPz8gJyhub25lKSd9IHRvOiAke2hhc2h9YCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcHBpdW0gY291bGQgbm90IHdyaXRlIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDaGFuZ2VkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQVdPLGVBQWVBLGdCQUFmLENBQWlDQyxVQUFqQyxFQUE2QztFQUNsRCxNQUFNQyxZQUFZLEdBQUdDLGNBQUtDLElBQUwsQ0FBVUgsVUFBVixFQUFzQkkscUNBQXRCLENBQXJCOztFQUtBLElBQUlDLFNBQUo7RUFFQSxJQUFJQyxTQUFKO0VBRUEsSUFBSUMsSUFBSjtFQUVBLElBQUlDLE9BQUo7O0VBR0EsTUFBTUMsZUFBZSxHQUFHUCxjQUFLUSxPQUFMLENBQWFULFlBQWIsQ0FBeEI7O0VBQ0FVLGdCQUFJQyxLQUFKLENBQVcsaUNBQWdDSCxlQUFnQixFQUEzRDs7RUFDQSxJQUFJO0lBQ0YsTUFBTUksWUFBR0MsTUFBSCxDQUFVTCxlQUFWLENBQU47RUFDRCxDQUZELENBRUUsT0FBT00sR0FBUCxFQUFZO0lBQ1osTUFBTSxJQUFJQyxLQUFKLENBQ0gsd0RBQXVEUCxlQUFnQixxQkFBb0JNLEdBQUcsQ0FBQ0UsT0FBUSxFQURwRyxDQUFOO0VBR0Q7O0VBRUQsSUFBSTtJQUNGLENBQUM7TUFBQ1osU0FBRDtNQUFZQyxTQUFaO01BQXVCRSxPQUF2QjtNQUFnQ0Q7SUFBaEMsSUFBd0MsTUFBTSxzQ0FBaUI7TUFDOURXLEdBQUcsRUFBRWxCLFVBRHlEO01BRTlEQyxZQUFZLEVBQUVHO0lBRmdELENBQWpCLENBQS9DO0VBSUQsQ0FMRCxDQUtFLE1BQU07SUFDTixPQUFPLElBQVA7RUFDRDs7RUFFRCxJQUFJQyxTQUFKLEVBQWU7SUFDYixJQUFJO01BQUE7O01BQ0ZDLFNBQVM7O01BQ1RLLGdCQUFJQyxLQUFKLENBQVcsbUJBQWtCWixVQUFXLHVCQUE5QixZQUFvRFEsT0FBcEQsK0NBQStELFFBQVMsUUFBT0QsSUFBSyxFQUE5RjtJQUNELENBSEQsQ0FHRSxPQUFPUSxHQUFQLEVBQVk7TUFDWixNQUFNLElBQUlDLEtBQUosQ0FDSCxxQ0FBb0NQLGVBQWdCLHFCQUFvQk0sR0FBRyxDQUFDRSxPQUFRLEVBRGpGLENBQU47SUFHRDtFQUNGOztFQUVELE9BQU9aLFNBQVA7QUFDRCJ9
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYWNrYWdlRGlkQ2hhbmdlIiwiYXBwaXVtSG9tZSIsImhhc2hGaWxlbmFtZSIsInBhdGgiLCJqb2luIiwiUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgiLCJpc0NoYW5nZWQiLCJ3cml0ZUhhc2giLCJoYXNoIiwib2xkSGFzaCIsImhhc2hGaWxlbmFtZURpciIsImRpcm5hbWUiLCJsb2ciLCJkZWJ1ZyIsImZzIiwibWtkaXJwIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwiaXNQYWNrYWdlQ2hhbmdlZCIsImN3ZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vcGFja2FnZS1jaGFuZ2VkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnN9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2lzUGFja2FnZUNoYW5nZWR9IGZyb20gJ3BhY2thZ2UtY2hhbmdlZCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7UEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEh9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBleHRlbnNpb25zIGhhdmUgY2hhbmdlZCwgYW5kIHVwZGF0ZXMgYSBoYXNoIHRoZSBgcGFja2FnZS5qc29uYCBpbiBgYXBwaXVtSG9tZWAgaWYgc28uXG4gKlxuICogSWYgdGhleSBoYXZlLCB3ZSBuZWVkIHRvIHN5bmMgdGhlbSB3aXRoIHRoZSBgZXh0ZW5zaW9ucy55YW1sYCBtYW5pZmVzdC5cbiAqXG4gKiBfV2FybmluZzogdGhpcyBtYWtlcyBhIGJsb2NraW5nIGNhbGwgdG8gYHdyaXRlRmlsZVN5bmNgLl9cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gYHRydWVgIGlmIGBwYWNrYWdlLmpzb25gIGBhcHBpdW1Ib21lYCBjaGFuZ2VkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWNrYWdlRGlkQ2hhbmdlKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgaGFzaEZpbGVuYW1lID0gcGF0aC5qb2luKGFwcGl1bUhvbWUsIFBLR19IQVNIRklMRV9SRUxBVElWRV9QQVRIKTtcblxuICAvLyBYWFg6IHRoZSB0eXBlcyBpbiBgcGFja2FnZS1jaGFuZ2VkYCBzZWVtIHRvIGJlIHdyb25nLlxuXG4gIC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgbGV0IGlzQ2hhbmdlZDtcbiAgLyoqIEB0eXBlIHsoKSA9PiB2b2lkfSAqL1xuICBsZXQgd3JpdGVIYXNoO1xuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgbGV0IGhhc2g7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi9cbiAgbGV0IG9sZEhhc2g7XG5cbiAgLy8gZmlyc3QgbWtkaXJwIHRoZSB0YXJnZXQgZGlyLlxuICBjb25zdCBoYXNoRmlsZW5hbWVEaXIgPSBwYXRoLmRpcm5hbWUoaGFzaEZpbGVuYW1lKTtcbiAgbG9nLmRlYnVnKGBDcmVhdGluZyBoYXNoIGZpbGUgZGlyZWN0b3J5OiAke2hhc2hGaWxlbmFtZURpcn1gKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5ta2RpcnAoaGFzaEZpbGVuYW1lRGlyKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEFwcGl1bSBjb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgKHtpc0NoYW5nZWQsIHdyaXRlSGFzaCwgb2xkSGFzaCwgaGFzaH0gPSBhd2FpdCBpc1BhY2thZ2VDaGFuZ2VkKHtcbiAgICAgIGN3ZDogYXBwaXVtSG9tZSxcbiAgICAgIGhhc2hGaWxlbmFtZTogUEtHX0hBU0hGSUxFX1JFTEFUSVZFX1BBVEgsXG4gICAgfSkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0cnkge1xuICAgICAgd3JpdGVIYXNoKCk7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBVcGRhdGVkIGhhc2ggb2YgJHthcHBpdW1Ib21lfS9wYWNrYWdlLmpzb24gZnJvbTogJHtvbGRIYXNoID8/ICcobm9uZSknfSB0bzogJHtoYXNofWBcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcHBpdW0gY291bGQgbm90IHdyaXRlIGhhc2ggZmlsZTogJHtoYXNoRmlsZW5hbWVEaXJ9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NoYW5nZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBV08sZUFBZUEsZ0JBQWYsQ0FBZ0NDLFVBQWhDLEVBQTRDO0VBQ2pELE1BQU1DLFlBQVksR0FBR0MsYUFBQSxDQUFLQyxJQUFMLENBQVVILFVBQVYsRUFBc0JJLHFDQUF0QixDQUFyQjs7RUFLQSxJQUFJQyxTQUFKO0VBRUEsSUFBSUMsU0FBSjtFQUVBLElBQUlDLElBQUo7RUFFQSxJQUFJQyxPQUFKOztFQUdBLE1BQU1DLGVBQWUsR0FBR1AsYUFBQSxDQUFLUSxPQUFMLENBQWFULFlBQWIsQ0FBeEI7O0VBQ0FVLGVBQUEsQ0FBSUMsS0FBSixDQUFXLGlDQUFnQ0gsZUFBZ0IsRUFBM0Q7O0VBQ0EsSUFBSTtJQUNGLE1BQU1JLFdBQUEsQ0FBR0MsTUFBSCxDQUFVTCxlQUFWLENBQU47RUFDRCxDQUZELENBRUUsT0FBT00sR0FBUCxFQUFZO0lBQ1osTUFBTSxJQUFJQyxLQUFKLENBQ0gsd0RBQXVEUCxlQUFnQixxQkFBb0JNLEdBQUcsQ0FBQ0UsT0FBUSxFQURwRyxDQUFOO0VBR0Q7O0VBRUQsSUFBSTtJQUNGLENBQUM7TUFBQ1osU0FBRDtNQUFZQyxTQUFaO01BQXVCRSxPQUF2QjtNQUFnQ0Q7SUFBaEMsSUFBd0MsTUFBTSxJQUFBVyxnQ0FBQSxFQUFpQjtNQUM5REMsR0FBRyxFQUFFbkIsVUFEeUQ7TUFFOURDLFlBQVksRUFBRUc7SUFGZ0QsQ0FBakIsQ0FBL0M7RUFJRCxDQUxELENBS0UsTUFBTTtJQUNOLE9BQU8sSUFBUDtFQUNEOztFQUVELElBQUlDLFNBQUosRUFBZTtJQUNiLElBQUk7TUFBQTs7TUFDRkMsU0FBUzs7TUFDVEssZUFBQSxDQUFJQyxLQUFKLENBQ0csbUJBQWtCWixVQUFXLHVCQUE5QixZQUFvRFEsT0FBcEQsK0NBQStELFFBQVMsUUFBT0QsSUFBSyxFQUR0RjtJQUdELENBTEQsQ0FLRSxPQUFPUSxHQUFQLEVBQVk7TUFDWixNQUFNLElBQUlDLEtBQUosQ0FDSCxxQ0FBb0NQLGVBQWdCLHFCQUFvQk0sR0FBRyxDQUFDRSxPQUFRLEVBRGpGLENBQU47SUFHRDtFQUNGOztFQUVELE9BQU9aLFNBQVA7QUFDRCJ9
@@ -17,31 +17,30 @@ export class PluginConfig extends ExtensionConfig<"plugin"> {
17
17
  * Creates a new {@link PluginConfig} instance for a {@link Manifest} instance.
18
18
  *
19
19
  * @param {Manifest} manifest
20
- * @param {PluginConfigOptions} [opts]
21
20
  * @throws If `manifest` already associated with a `PluginConfig`
22
21
  * @returns {PluginConfig}
23
22
  */
24
- static create(manifest: Manifest, { extData, logFn }?: PluginConfigOptions | undefined): PluginConfig;
23
+ static create(manifest: Manifest): PluginConfig;
25
24
  /**
26
- * Returns a PluginConfig associated with a Manifest
27
- * @param {Manifest} manifest
28
- * @returns {PluginConfig|undefined}
29
- */
25
+ * Returns a PluginConfig associated with a Manifest
26
+ * @param {Manifest} manifest
27
+ * @returns {PluginConfig|undefined}
28
+ */
30
29
  static getInstance(manifest: Manifest): PluginConfig | undefined;
31
30
  /**
32
- * Call {@link PluginConfig.create} instead.
33
- *
34
- * Just calls the superclass' constructor with the correct extension type
35
- * @private
36
- * @param {Manifest} manifest - IO object
37
- * @param {PluginConfigOptions} [opts]
38
- */
31
+ * Call {@link PluginConfig.create} instead.
32
+ *
33
+ * Just calls the superclass' constructor with the correct extension type
34
+ * @private
35
+ * @param {Manifest} manifest - IO object
36
+ */
39
37
  private constructor();
38
+ validate(): Promise<import("./extension-config").ExtRecord<"plugin">>;
40
39
  /**
41
- *
42
- * @param {(keyof PluginRecord)[]} activeNames
43
- * @returns {void}
44
- */
40
+ *
41
+ * @param {(keyof PluginRecord)[]} activeNames
42
+ * @returns {void}
43
+ */
45
44
  print(activeNames: (keyof PluginRecord)[]): void;
46
45
  }
47
46
  export type PluginConfigOptions = {
@@ -49,14 +48,10 @@ export type PluginConfigOptions = {
49
48
  * - Optional logging function
50
49
  */
51
50
  logFn?: import("./extension-config").ExtensionLogFn | undefined;
52
- /**
53
- * - Extension data
54
- */
55
- extData?: import("../../types").PluginRecord | undefined;
56
51
  };
57
- export type PluginRecord = import('../../types/appium-manifest').PluginRecord;
58
- export type PluginType = import('../../types').PluginType;
59
- export type PluginMetadata = import('../../types/external-manifest').ExtMetadata<PluginType>;
52
+ export type PluginRecord = import('appium/types').PluginRecord;
53
+ export type PluginType = import('@appium/types').PluginType;
54
+ export type PluginMetadata = import('appium/types').ExtMetadata<PluginType>;
60
55
  export type Manifest = import('./manifest').Manifest;
61
56
  import { ExtensionConfig } from "./extension-config";
62
57
  //# sourceMappingURL=plugin-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/plugin-config.js"],"names":[],"mappings":"AAMA;;GAEG;AACH;IAEE;;;;;;;;;OASG;IACF,0BAAkC;IAkBlC;;;;;;;OAOG;IACH,wBALW,QAAQ,yDAGN,YAAY,CASxB;IAED;;;;QAII;IACJ,6BAHY,QAAQ,GACN,YAAY,GAAC,SAAS,CAInC;IAxCD;;;;;;;MAOE;IACF,sBAMC;IAqCD;;;;MAIE;IACF,mBAHU,CAAC,MAAM,YAAY,CAAC,EAAE,GACpB,IAAI,CAoBf;CACH;;;;;;;;;;;2BAUY,OAAO,6BAA6B,EAAE,YAAY;yBAClD,OAAO,aAAa,EAAE,UAAU;6BAChC,OAAO,+BAA+B,EAAE,WAAW,CAAC,UAAU,CAAC;uBAC/D,OAAO,YAAY,EAAE,QAAQ"}
1
+ {"version":3,"file":"plugin-config.d.ts","sourceRoot":"","sources":["../../../lib/extension/plugin-config.js"],"names":[],"mappings":"AAKA;;GAEG;AACH;IACE;;;;;;;;;OASG;IACH,0BAAkC;IAiBlC;;;;;;OAMG;IACH,wBAJW,QAAQ,GAEN,YAAY,CAWxB;IAED;;;;OAIG;IACH,6BAHW,QAAQ,GACN,YAAY,GAAC,SAAS,CAIlC;IAxCD;;;;;;OAMG;IACH,sBAEC;IAED,sEAEC;IAsCD;;;;OAIG;IACH,mBAHW,CAAC,MAAM,YAAY,CAAC,EAAE,GACpB,IAAI,CAwBhB;CACF;;;;;;;2BAQY,OAAO,cAAc,EAAE,YAAY;yBACnC,OAAO,eAAe,EAAE,UAAU;6BAClC,OAAO,cAAc,EAAE,WAAW,CAAC,UAAU,CAAC;uBAC9C,OAAO,YAAY,EAAE,QAAQ"}
@@ -20,25 +20,16 @@ var _constants = require("../constants");
20
20
  class PluginConfig extends _extensionConfig.ExtensionConfig {
21
21
  static _instances = new WeakMap();
22
22
 
23
- constructor(manifest, {
24
- extData,
25
- logFn
26
- } = {}) {
27
- super(_constants.PLUGIN_TYPE, manifest, logFn);
28
-
29
- if (extData) {
30
- this.validate(extData);
31
- }
23
+ constructor(manifest) {
24
+ super(_constants.PLUGIN_TYPE, manifest);
25
+ }
26
+
27
+ async validate() {
28
+ return await super._validate(this.manifest.getExtensionData(_constants.PLUGIN_TYPE));
32
29
  }
33
30
 
34
- static create(manifest, {
35
- extData,
36
- logFn
37
- } = {}) {
38
- const instance = new PluginConfig(manifest, {
39
- logFn,
40
- extData
41
- });
31
+ static create(manifest) {
32
+ const instance = new PluginConfig(manifest);
42
33
 
43
34
  if (PluginConfig.getInstance(manifest)) {
44
35
  throw new Error(`Manifest with APPIUM_HOME ${manifest.appiumHome} already has a PluginConfig; use PluginConfig.getInstance() to retrieve it.`);
@@ -84,4 +75,4 @@ class PluginConfig extends _extensionConfig.ExtensionConfig {
84
75
  }
85
76
 
86
77
  exports.PluginConfig = PluginConfig;
87
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbHVnaW5Db25maWciLCJFeHRlbnNpb25Db25maWciLCJfaW5zdGFuY2VzIiwiV2Vha01hcCIsImNvbnN0cnVjdG9yIiwibWFuaWZlc3QiLCJleHREYXRhIiwibG9nRm4iLCJQTFVHSU5fVFlQRSIsInZhbGlkYXRlIiwiY3JlYXRlIiwiaW5zdGFuY2UiLCJnZXRJbnN0YW5jZSIsIkVycm9yIiwiYXBwaXVtSG9tZSIsInNldCIsImdldCIsImV4dGVuc2lvbkRlc2MiLCJwbHVnaW5OYW1lIiwidmVyc2lvbiIsInByaW50IiwiYWN0aXZlTmFtZXMiLCJwbHVnaW5OYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiXyIsImlzRW1wdHkiLCJsb2ciLCJpbmZvIiwicGx1Z2luRGF0YSIsInRvUGFpcnMiLCJhY3RpdmVUeHQiLCJpbmNsdWRlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vcGx1Z2luLWNvbmZpZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge0V4dGVuc2lvbkNvbmZpZ30gZnJvbSAnLi9leHRlbnNpb24tY29uZmlnJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7UExVR0lOX1RZUEV9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbi8qKlxuICogQGV4dGVuZHMge0V4dGVuc2lvbkNvbmZpZzxQbHVnaW5UeXBlPn1cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkNvbmZpZyBleHRlbmRzIEV4dGVuc2lvbkNvbmZpZyB7XG5cbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlcyB0byB7QGxpbmsgUGx1Z2luQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIGBNYW5pZmVzdGAgYW5kIHtAbGluayBFeHRlbnNpb25Db25maWd9IGhhdmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXA7IGVhY2ggYE1hbmlmZXN0YCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgYERyaXZlckNvbmZpZ2AgYW5kIGEgYFBsdWdpbkNvbmZpZ2A7IG5vIG1vcmUsIG5vIGxlc3MuXG4gICAqXG4gICAqIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBgTWFuaWZlc3RgLXRvLWBQbHVnaW5Db25maWdgIHBvcnRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtXZWFrTWFwPE1hbmlmZXN0LFBsdWdpbkNvbmZpZz59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAgc3RhdGljIF9pbnN0YW5jZXMgPSBuZXcgV2Vha01hcCgpO1xuXG4gICAvKipcbiAgICogQ2FsbCB7QGxpbmsgUGx1Z2luQ29uZmlnLmNyZWF0ZX0gaW5zdGVhZC5cbiAgICpcbiAgICogSnVzdCBjYWxscyB0aGUgc3VwZXJjbGFzcycgY29uc3RydWN0b3Igd2l0aCB0aGUgY29ycmVjdCBleHRlbnNpb24gdHlwZVxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdCAtIElPIG9iamVjdFxuICAgKiBAcGFyYW0ge1BsdWdpbkNvbmZpZ09wdGlvbnN9IFtvcHRzXVxuICAgKi9cbiAgIGNvbnN0cnVjdG9yIChtYW5pZmVzdCwge2V4dERhdGEsIGxvZ0ZufSA9IHt9KSB7XG4gICAgIHN1cGVyKFBMVUdJTl9UWVBFLCBtYW5pZmVzdCwgbG9nRm4pO1xuXG4gICAgIGlmIChleHREYXRhKSB7XG4gICAgICAgdGhpcy52YWxpZGF0ZShleHREYXRhKTtcbiAgICAgfVxuICAgfVxuXG4gICAvKipcbiAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFBsdWdpbkNvbmZpZ30gaW5zdGFuY2UgZm9yIGEge0BsaW5rIE1hbmlmZXN0fSBpbnN0YW5jZS5cbiAgICAqXG4gICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgICogQHBhcmFtIHtQbHVnaW5Db25maWdPcHRpb25zfSBbb3B0c11cbiAgICAqIEB0aHJvd3MgSWYgYG1hbmlmZXN0YCBhbHJlYWR5IGFzc29jaWF0ZWQgd2l0aCBhIGBQbHVnaW5Db25maWdgXG4gICAgKiBAcmV0dXJucyB7UGx1Z2luQ29uZmlnfVxuICAgICovXG4gICBzdGF0aWMgY3JlYXRlIChtYW5pZmVzdCwge2V4dERhdGEsIGxvZ0ZufSA9IHt9KSB7XG4gICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFBsdWdpbkNvbmZpZyhtYW5pZmVzdCwge2xvZ0ZuLCBleHREYXRhfSk7XG4gICAgIGlmIChQbHVnaW5Db25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpKSB7XG4gICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYW5pZmVzdCB3aXRoIEFQUElVTV9IT01FICR7bWFuaWZlc3QuYXBwaXVtSG9tZX0gYWxyZWFkeSBoYXMgYSBQbHVnaW5Db25maWc7IHVzZSBQbHVnaW5Db25maWcuZ2V0SW5zdGFuY2UoKSB0byByZXRyaWV2ZSBpdC5gKTtcbiAgICAgfVxuICAgICBQbHVnaW5Db25maWcuX2luc3RhbmNlcy5zZXQobWFuaWZlc3QsIGluc3RhbmNlKTtcbiAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgfVxuXG4gICAvKipcbiAgICAgKiBSZXR1cm5zIGEgUGx1Z2luQ29uZmlnIGFzc29jaWF0ZWQgd2l0aCBhIE1hbmlmZXN0XG4gICAgICogQHBhcmFtIHtNYW5pZmVzdH0gbWFuaWZlc3RcbiAgICAgKiBAcmV0dXJucyB7UGx1Z2luQ29uZmlnfHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgIHN0YXRpYyBnZXRJbnN0YW5jZSAobWFuaWZlc3QpIHtcbiAgICAgcmV0dXJuIFBsdWdpbkNvbmZpZy5faW5zdGFuY2VzLmdldChtYW5pZmVzdCk7XG4gICB9XG5cbiAgIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2luTmFtZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuRXh0TWFuaWZlc3Q8UGx1Z2luVHlwZT59IHBsdWdpbkRhdGFcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gICBleHRlbnNpb25EZXNjIChwbHVnaW5OYW1lLCB7dmVyc2lvbn0pIHtcbiAgICAgcmV0dXJuIGAke3BsdWdpbk5hbWV9QCR7dmVyc2lvbn1gO1xuICAgfVxuXG4gICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoa2V5b2YgUGx1Z2luUmVjb3JkKVtdfSBhY3RpdmVOYW1lc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gICBwcmludCAoYWN0aXZlTmFtZXMpIHtcbiAgICAgY29uc3QgcGx1Z2luTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmluc3RhbGxlZEV4dGVuc2lvbnMpO1xuXG4gICAgIGlmIChfLmlzRW1wdHkocGx1Z2luTmFtZXMpKSB7XG4gICAgICAgbG9nLmluZm8oYE5vIHBsdWdpbnMgaGF2ZSBiZWVuIGluc3RhbGxlZC4gVXNlIHRoZSBcImFwcGl1bSBwbHVnaW5cIiBgICtcbiAgICAgICAgICAgICAgICdjb21tYW5kIHRvIGluc3RhbGwgdGhlIG9uZShzKSB5b3Ugd2FudCB0byB1c2UuJyk7XG4gICAgICAgcmV0dXJuO1xuICAgICB9XG5cbiAgICAgbG9nLmluZm8oYEF2YWlsYWJsZSBwbHVnaW5zOmApO1xuICAgICBmb3IgKGNvbnN0IFtwbHVnaW5OYW1lLCBwbHVnaW5EYXRhXSBvZiBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgIGNvbnN0IGFjdGl2ZVR4dCA9IF8uaW5jbHVkZXMoYWN0aXZlTmFtZXMsIHBsdWdpbk5hbWUpID8gJyAoQUNUSVZFKScgOiAnJztcbiAgICAgICBsb2cuaW5mbyhgICAtICR7dGhpcy5leHRlbnNpb25EZXNjKHBsdWdpbk5hbWUsIHBsdWdpbkRhdGEpfSR7YWN0aXZlVHh0fWApO1xuICAgICB9XG5cbiAgICAgaWYgKF8uaXNFbXB0eShhY3RpdmVOYW1lcykpIHtcbiAgICAgICBsb2cuaW5mbygnTm8gcGx1Z2lucyBhY3RpdmF0ZWQuIFVzZSB0aGUgLS11c2UtcGx1Z2lucyBmbGFnIHdpdGggbmFtZXMgb2YgcGx1Z2lucyB0byBhY3RpdmF0ZScpO1xuICAgICB9XG4gICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgUGx1Z2luQ29uZmlnT3B0aW9uc1xuICogQHByb3BlcnR5IHtpbXBvcnQoJy4vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dGVuc2lvbkxvZ0ZufSBbbG9nRm5dIC0gT3B0aW9uYWwgbG9nZ2luZyBmdW5jdGlvblxuICogQHByb3BlcnR5IHtpbXBvcnQoJy4uLy4uL3R5cGVzL2FwcGl1bS1tYW5pZmVzdCcpLlBsdWdpblJlY29yZH0gW2V4dERhdGFdIC0gRXh0ZW5zaW9uIGRhdGFcbiAqL1xuXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuUGx1Z2luUmVjb3JkfSBQbHVnaW5SZWNvcmRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvZXh0ZXJuYWwtbWFuaWZlc3QnKS5FeHRNZXRhZGF0YTxQbHVnaW5UeXBlPn0gUGx1Z2luTWV0YWRhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vbWFuaWZlc3QnKS5NYW5pZmVzdH0gTWFuaWZlc3RcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUtPLE1BQU1BLFlBQU4sU0FBMkJDLGdDQUEzQixDQUEyQztFQVk5QixPQUFWQyxVQUFVLEdBQUcsSUFBSUMsT0FBSixFQUFIOztFQVVqQkMsV0FBVyxDQUFFQyxRQUFGLEVBQVk7SUFBQ0MsT0FBRDtJQUFVQztFQUFWLElBQW1CLEVBQS9CLEVBQW1DO0lBQzVDLE1BQU1DLHNCQUFOLEVBQW1CSCxRQUFuQixFQUE2QkUsS0FBN0I7O0lBRUEsSUFBSUQsT0FBSixFQUFhO01BQ1gsS0FBS0csUUFBTCxDQUFjSCxPQUFkO0lBQ0Q7RUFDRjs7RUFVWSxPQUFOSSxNQUFNLENBQUVMLFFBQUYsRUFBWTtJQUFDQyxPQUFEO0lBQVVDO0VBQVYsSUFBbUIsRUFBL0IsRUFBbUM7SUFDOUMsTUFBTUksUUFBUSxHQUFHLElBQUlYLFlBQUosQ0FBaUJLLFFBQWpCLEVBQTJCO01BQUNFLEtBQUQ7TUFBUUQ7SUFBUixDQUEzQixDQUFqQjs7SUFDQSxJQUFJTixZQUFZLENBQUNZLFdBQWIsQ0FBeUJQLFFBQXpCLENBQUosRUFBd0M7TUFDdEMsTUFBTSxJQUFJUSxLQUFKLENBQVcsNkJBQTRCUixRQUFRLENBQUNTLFVBQVcsNkVBQTNELENBQU47SUFDRDs7SUFDRGQsWUFBWSxDQUFDRSxVQUFiLENBQXdCYSxHQUF4QixDQUE0QlYsUUFBNUIsRUFBc0NNLFFBQXRDOztJQUNBLE9BQU9BLFFBQVA7RUFDRDs7RUFPaUIsT0FBWEMsV0FBVyxDQUFFUCxRQUFGLEVBQVk7SUFDNUIsT0FBT0wsWUFBWSxDQUFDRSxVQUFiLENBQXdCYyxHQUF4QixDQUE0QlgsUUFBNUIsQ0FBUDtFQUNEOztFQU9EWSxhQUFhLENBQUVDLFVBQUYsRUFBYztJQUFDQztFQUFELENBQWQsRUFBeUI7SUFDcEMsT0FBUSxHQUFFRCxVQUFXLElBQUdDLE9BQVEsRUFBaEM7RUFDRDs7RUFPREMsS0FBSyxDQUFFQyxXQUFGLEVBQWU7SUFDbEIsTUFBTUMsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxLQUFLQyxtQkFBakIsQ0FBcEI7O0lBRUEsSUFBSUMsZ0JBQUVDLE9BQUYsQ0FBVUwsV0FBVixDQUFKLEVBQTRCO01BQzFCTSxnQkFBSUMsSUFBSixDQUFVLDBEQUFELEdBQ0QsZ0RBRFI7O01BRUE7SUFDRDs7SUFFREQsZ0JBQUlDLElBQUosQ0FBVSxvQkFBVjs7SUFDQSxLQUFLLE1BQU0sQ0FBQ1gsVUFBRCxFQUFhWSxVQUFiLENBQVgsSUFBdUNKLGdCQUFFSyxPQUFGLENBQVUsS0FBS04sbUJBQWYsQ0FBdkMsRUFBNEU7TUFDMUUsTUFBTU8sU0FBUyxHQUFHTixnQkFBRU8sUUFBRixDQUFXWixXQUFYLEVBQXdCSCxVQUF4QixJQUFzQyxXQUF0QyxHQUFvRCxFQUF0RTs7TUFDQVUsZ0JBQUlDLElBQUosQ0FBVSxPQUFNLEtBQUtaLGFBQUwsQ0FBbUJDLFVBQW5CLEVBQStCWSxVQUEvQixDQUEyQyxHQUFFRSxTQUFVLEVBQXZFO0lBQ0Q7O0lBRUQsSUFBSU4sZ0JBQUVDLE9BQUYsQ0FBVU4sV0FBVixDQUFKLEVBQTRCO01BQzFCTyxnQkFBSUMsSUFBSixDQUFTLG9GQUFUO0lBQ0Q7RUFDRjs7QUF4RjhDIn0=
78
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbHVnaW5Db25maWciLCJFeHRlbnNpb25Db25maWciLCJfaW5zdGFuY2VzIiwiV2Vha01hcCIsImNvbnN0cnVjdG9yIiwibWFuaWZlc3QiLCJQTFVHSU5fVFlQRSIsInZhbGlkYXRlIiwiX3ZhbGlkYXRlIiwiZ2V0RXh0ZW5zaW9uRGF0YSIsImNyZWF0ZSIsImluc3RhbmNlIiwiZ2V0SW5zdGFuY2UiLCJFcnJvciIsImFwcGl1bUhvbWUiLCJzZXQiLCJnZXQiLCJleHRlbnNpb25EZXNjIiwicGx1Z2luTmFtZSIsInZlcnNpb24iLCJwcmludCIsImFjdGl2ZU5hbWVzIiwicGx1Z2luTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwiaW5zdGFsbGVkRXh0ZW5zaW9ucyIsIl8iLCJpc0VtcHR5IiwibG9nIiwiaW5mbyIsInBsdWdpbkRhdGEiLCJ0b1BhaXJzIiwiYWN0aXZlVHh0IiwiaW5jbHVkZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXh0ZW5zaW9uL3BsdWdpbi1jb25maWcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7RXh0ZW5zaW9uQ29uZmlnfSBmcm9tICcuL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtQTFVHSU5fVFlQRX0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBAZXh0ZW5kcyB7RXh0ZW5zaW9uQ29uZmlnPFBsdWdpblR5cGU+fVxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luQ29uZmlnIGV4dGVuZHMgRXh0ZW5zaW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlcyB0byB7QGxpbmsgUGx1Z2luQ29uZmlnfSBpbnN0YW5jZXMuXG4gICAqXG4gICAqIGBNYW5pZmVzdGAgYW5kIHtAbGluayBFeHRlbnNpb25Db25maWd9IGhhdmUgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXA7IGVhY2ggYE1hbmlmZXN0YCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgYERyaXZlckNvbmZpZ2AgYW5kIGEgYFBsdWdpbkNvbmZpZ2A7IG5vIG1vcmUsIG5vIGxlc3MuXG4gICAqXG4gICAqIFRoaXMgdmFyaWFibGUgdHJhY2tzIHRoZSBgTWFuaWZlc3RgLXRvLWBQbHVnaW5Db25maWdgIHBvcnRpb24uXG4gICAqXG4gICAqIEB0eXBlIHtXZWFrTWFwPE1hbmlmZXN0LFBsdWdpbkNvbmZpZz59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgX2luc3RhbmNlcyA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgLyoqXG4gICAqIENhbGwge0BsaW5rIFBsdWdpbkNvbmZpZy5jcmVhdGV9IGluc3RlYWQuXG4gICAqXG4gICAqIEp1c3QgY2FsbHMgdGhlIHN1cGVyY2xhc3MnIGNvbnN0cnVjdG9yIHdpdGggdGhlIGNvcnJlY3QgZXh0ZW5zaW9uIHR5cGVcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtNYW5pZmVzdH0gbWFuaWZlc3QgLSBJTyBvYmplY3RcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1hbmlmZXN0KSB7XG4gICAgc3VwZXIoUExVR0lOX1RZUEUsIG1hbmlmZXN0KTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fdmFsaWRhdGUodGhpcy5tYW5pZmVzdC5nZXRFeHRlbnNpb25EYXRhKFBMVUdJTl9UWVBFKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUGx1Z2luQ29uZmlnfSBpbnN0YW5jZSBmb3IgYSB7QGxpbmsgTWFuaWZlc3R9IGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge01hbmlmZXN0fSBtYW5pZmVzdFxuICAgKiBAdGhyb3dzIElmIGBtYW5pZmVzdGAgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYSBgUGx1Z2luQ29uZmlnYFxuICAgKiBAcmV0dXJucyB7UGx1Z2luQ29uZmlnfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZShtYW5pZmVzdCkge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IFBsdWdpbkNvbmZpZyhtYW5pZmVzdCk7XG4gICAgaWYgKFBsdWdpbkNvbmZpZy5nZXRJbnN0YW5jZShtYW5pZmVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1hbmlmZXN0IHdpdGggQVBQSVVNX0hPTUUgJHttYW5pZmVzdC5hcHBpdW1Ib21lfSBhbHJlYWR5IGhhcyBhIFBsdWdpbkNvbmZpZzsgdXNlIFBsdWdpbkNvbmZpZy5nZXRJbnN0YW5jZSgpIHRvIHJldHJpZXZlIGl0LmBcbiAgICAgICk7XG4gICAgfVxuICAgIFBsdWdpbkNvbmZpZy5faW5zdGFuY2VzLnNldChtYW5pZmVzdCwgaW5zdGFuY2UpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgUGx1Z2luQ29uZmlnIGFzc29jaWF0ZWQgd2l0aCBhIE1hbmlmZXN0XG4gICAqIEBwYXJhbSB7TWFuaWZlc3R9IG1hbmlmZXN0XG4gICAqIEByZXR1cm5zIHtQbHVnaW5Db25maWd8dW5kZWZpbmVkfVxuICAgKi9cbiAgc3RhdGljIGdldEluc3RhbmNlKG1hbmlmZXN0KSB7XG4gICAgcmV0dXJuIFBsdWdpbkNvbmZpZy5faW5zdGFuY2VzLmdldChtYW5pZmVzdCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpbk5hbWVcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1hbmlmZXN0PFBsdWdpblR5cGU+fSBwbHVnaW5EYXRhXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBleHRlbnNpb25EZXNjKHBsdWdpbk5hbWUsIHt2ZXJzaW9ufSkge1xuICAgIHJldHVybiBgJHtwbHVnaW5OYW1lfUAke3ZlcnNpb259YDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyhrZXlvZiBQbHVnaW5SZWNvcmQpW119IGFjdGl2ZU5hbWVzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcHJpbnQoYWN0aXZlTmFtZXMpIHtcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuaW5zdGFsbGVkRXh0ZW5zaW9ucyk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHBsdWdpbk5hbWVzKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBObyBwbHVnaW5zIGhhdmUgYmVlbiBpbnN0YWxsZWQuIFVzZSB0aGUgXCJhcHBpdW0gcGx1Z2luXCIgYCArXG4gICAgICAgICAgJ2NvbW1hbmQgdG8gaW5zdGFsbCB0aGUgb25lKHMpIHlvdSB3YW50IHRvIHVzZS4nXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZy5pbmZvKGBBdmFpbGFibGUgcGx1Z2luczpgKTtcbiAgICBmb3IgKGNvbnN0IFtwbHVnaW5OYW1lLCBwbHVnaW5EYXRhXSBvZiBfLnRvUGFpcnModGhpcy5pbnN0YWxsZWRFeHRlbnNpb25zKSkge1xuICAgICAgY29uc3QgYWN0aXZlVHh0ID0gXy5pbmNsdWRlcyhhY3RpdmVOYW1lcywgcGx1Z2luTmFtZSkgPyAnIChBQ1RJVkUpJyA6ICcnO1xuICAgICAgbG9nLmluZm8oYCAgLSAke3RoaXMuZXh0ZW5zaW9uRGVzYyhwbHVnaW5OYW1lLCBwbHVnaW5EYXRhKX0ke2FjdGl2ZVR4dH1gKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KGFjdGl2ZU5hbWVzKSkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgICdObyBwbHVnaW5zIGFjdGl2YXRlZC4gVXNlIHRoZSAtLXVzZS1wbHVnaW5zIGZsYWcgd2l0aCBuYW1lcyBvZiBwbHVnaW5zIHRvIGFjdGl2YXRlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQbHVnaW5Db25maWdPcHRpb25zXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi9leHRlbnNpb24tY29uZmlnJykuRXh0ZW5zaW9uTG9nRm59IFtsb2dGbl0gLSBPcHRpb25hbCBsb2dnaW5nIGZ1bmN0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5QbHVnaW5SZWNvcmR9IFBsdWdpblJlY29yZFxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkV4dE1ldGFkYXRhPFBsdWdpblR5cGU+fSBQbHVnaW5NZXRhZGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9tYW5pZmVzdCcpLk1hbmlmZXN0fSBNYW5pZmVzdFxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS08sTUFBTUEsWUFBTixTQUEyQkMsZ0NBQTNCLENBQTJDO0VBVy9CLE9BQVZDLFVBQVUsR0FBRyxJQUFJQyxPQUFKLEVBQUg7O0VBU2pCQyxXQUFXLENBQUNDLFFBQUQsRUFBVztJQUNwQixNQUFNQyxzQkFBTixFQUFtQkQsUUFBbkI7RUFDRDs7RUFFYSxNQUFSRSxRQUFRLEdBQUc7SUFDZixPQUFPLE1BQU0sTUFBTUMsU0FBTixDQUFnQixLQUFLSCxRQUFMLENBQWNJLGdCQUFkLENBQStCSCxzQkFBL0IsQ0FBaEIsQ0FBYjtFQUNEOztFQVNZLE9BQU5JLE1BQU0sQ0FBQ0wsUUFBRCxFQUFXO0lBQ3RCLE1BQU1NLFFBQVEsR0FBRyxJQUFJWCxZQUFKLENBQWlCSyxRQUFqQixDQUFqQjs7SUFDQSxJQUFJTCxZQUFZLENBQUNZLFdBQWIsQ0FBeUJQLFFBQXpCLENBQUosRUFBd0M7TUFDdEMsTUFBTSxJQUFJUSxLQUFKLENBQ0gsNkJBQTRCUixRQUFRLENBQUNTLFVBQVcsNkVBRDdDLENBQU47SUFHRDs7SUFDRGQsWUFBWSxDQUFDRSxVQUFiLENBQXdCYSxHQUF4QixDQUE0QlYsUUFBNUIsRUFBc0NNLFFBQXRDOztJQUNBLE9BQU9BLFFBQVA7RUFDRDs7RUFPaUIsT0FBWEMsV0FBVyxDQUFDUCxRQUFELEVBQVc7SUFDM0IsT0FBT0wsWUFBWSxDQUFDRSxVQUFiLENBQXdCYyxHQUF4QixDQUE0QlgsUUFBNUIsQ0FBUDtFQUNEOztFQU9EWSxhQUFhLENBQUNDLFVBQUQsRUFBYTtJQUFDQztFQUFELENBQWIsRUFBd0I7SUFDbkMsT0FBUSxHQUFFRCxVQUFXLElBQUdDLE9BQVEsRUFBaEM7RUFDRDs7RUFPREMsS0FBSyxDQUFDQyxXQUFELEVBQWM7SUFDakIsTUFBTUMsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxLQUFLQyxtQkFBakIsQ0FBcEI7O0lBRUEsSUFBSUMsZUFBQSxDQUFFQyxPQUFGLENBQVVMLFdBQVYsQ0FBSixFQUE0QjtNQUMxQk0sZUFBQSxDQUFJQyxJQUFKLENBQ0csMERBQUQsR0FDRSxnREFGSjs7TUFJQTtJQUNEOztJQUVERCxlQUFBLENBQUlDLElBQUosQ0FBVSxvQkFBVjs7SUFDQSxLQUFLLE1BQU0sQ0FBQ1gsVUFBRCxFQUFhWSxVQUFiLENBQVgsSUFBdUNKLGVBQUEsQ0FBRUssT0FBRixDQUFVLEtBQUtOLG1CQUFmLENBQXZDLEVBQTRFO01BQzFFLE1BQU1PLFNBQVMsR0FBR04sZUFBQSxDQUFFTyxRQUFGLENBQVdaLFdBQVgsRUFBd0JILFVBQXhCLElBQXNDLFdBQXRDLEdBQW9ELEVBQXRFOztNQUNBVSxlQUFBLENBQUlDLElBQUosQ0FBVSxPQUFNLEtBQUtaLGFBQUwsQ0FBbUJDLFVBQW5CLEVBQStCWSxVQUEvQixDQUEyQyxHQUFFRSxTQUFVLEVBQXZFO0lBQ0Q7O0lBRUQsSUFBSU4sZUFBQSxDQUFFQyxPQUFGLENBQVVOLFdBQVYsQ0FBSixFQUE0QjtNQUMxQk8sZUFBQSxDQUFJQyxJQUFKLENBQ0Usb0ZBREY7SUFHRDtFQUNGOztBQTNGK0MifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"grid-register.d.ts","sourceRoot":"","sources":["../../lib/grid-register.js"],"names":[],"mappings":";AAWA;;;;;;GAMG;AACH,oCALW,MAAM,GAAC,MAAM,sGAwBvB"}
1
+ {"version":3,"file":"grid-register.d.ts","sourceRoot":"","sources":["../../lib/grid-register.js"],"names":[],"mappings":";AAUA;;;;;;GAMG;AACH,oCALW,MAAM,GAAC,MAAM,sGA4BvB"}
@@ -150,4 +150,4 @@ async function isAlreadyRegistered(configHolder) {
150
150
 
151
151
  var _default = registerNode;
152
152
  exports.default = _default;
153
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodWJVcmkiLCJjb25maWciLCJwcm90b2NvbCIsImh1YlByb3RvY29sIiwiaHViSG9zdCIsImh1YlBvcnQiLCJyZWdpc3Rlck5vZGUiLCJkYXRhIiwiYWRkciIsInBvcnQiLCJiYXNlUGF0aCIsImNvbmZpZ0ZpbGVQYXRoIiwiXyIsImlzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZSIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImVycm9yQW5kVGhyb3ciLCJwb3N0UmVxdWVzdCIsInJlZ2lzdGVyVG9HcmlkIiwicG9zdE9wdGlvbnMiLCJjb25maWdIb2xkZXIiLCJzdGF0dXMiLCJFcnJvciIsImRlYnVnIiwiY29uZmlndXJhdGlvbiIsImhhcyIsInByb3BlcnR5IiwidXJsIiwiaG9zdCIsImlkIiwicmVnUmVxdWVzdCIsIm1ldGhvZCIsInJlZ2lzdGVyIiwicmVnaXN0ZXJDeWNsZUludGVydmFsIiwicmVnaXN0ZXJDeWNsZSIsImlzTmFOIiwid2FybiIsImZpcnN0Iiwic2V0SW50ZXJ2YWwiLCJyZWdpc3RlclJldHJ5IiwiaXNBbHJlYWR5UmVnaXN0ZXJlZCIsInRpbWVvdXQiLCJzdWNjZXNzIiwibXNnIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2dyaWQtcmVnaXN0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuXG5jb25zdCBodWJVcmkgPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IHByb3RvY29sID0gY29uZmlnLmh1YlByb3RvY29sIHx8ICdodHRwJztcbiAgcmV0dXJuIGAke3Byb3RvY29sfTovLyR7Y29uZmlnLmh1Ykhvc3R9OiR7Y29uZmlnLmh1YlBvcnR9YDtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbmV3IG5vZGUgd2l0aCBhIHNlbGVuaXVtIGdyaWRcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gZGF0YSAtIFBhdGggb3Igb2JqZWN0IHJlcHJlc2VudGluZyBzZWxlbml1bSBncmlkIG5vZGUgY29uZmlnIGZpbGUuIElmIGEgYHN0cmluZ2AsIGFsbCBzdWJzZXF1ZW50IGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQhXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FkZHJdIC0gQmluZCB0byB0aGlzIGFkZHJlc3NcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcG9ydF0gLSBCaW5kIHRvIHRoaXMgcG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IFtiYXNlUGF0aF0gLSBCYXNlIHBhdGggZm9yIHRoZSBncmlkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyTm9kZSAoZGF0YSwgYWRkciwgcG9ydCwgYmFzZVBhdGgpIHtcbiAgbGV0IGNvbmZpZ0ZpbGVQYXRoO1xuICBpZiAoXy5pc1N0cmluZyhkYXRhKSkge1xuICAgIGNvbmZpZ0ZpbGVQYXRoID0gZGF0YTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKGRhdGEsICd1dGYtOCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBVbmFibGUgdG8gbG9hZCBub2RlIGNvbmZpZ3VyYXRpb24gZmlsZSAke2NvbmZpZ0ZpbGVQYXRofSB0byByZWdpc3RlciB3aXRoIGdyaWQ6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KGBTeW50YXggZXJyb3IgaW4gbm9kZSBjb25maWd1cmF0aW9uIGZpbGUgJHtjb25maWdGaWxlUGF0aH06ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcG9zdFJlcXVlc3QoZGF0YSwgYWRkciwgcG9ydCwgYmFzZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWdpc3RlclRvR3JpZCAocG9zdE9wdGlvbnMsIGNvbmZpZ0hvbGRlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHtzdGF0dXN9ID0gYXdhaXQgYXhpb3MocG9zdE9wdGlvbnMpO1xuICAgIGlmIChzdGF0dXMgIT09IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0IGZhaWxlZCB3aXRoIGNvZGUgJHtzdGF0dXN9YCk7XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgQXBwaXVtIHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkIHdpdGggdGhlIHRoZSBncmlkIG9uIGAgK1xuICAgICAgaHViVXJpKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgQW4gYXR0ZW1wdCB0byByZWdpc3RlciB3aXRoIHRoZSBncmlkIHdhcyB1bnN1Y2Nlc3NmdWw6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9zdFJlcXVlc3QgKGNvbmZpZ0hvbGRlciwgYWRkciwgcG9ydCwgYmFzZVBhdGgpIHtcbiAgLy8gTW92ZSBTZWxlbml1bSAzIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyB0byBjb25maWd1cmF0aW9uIG9iamVjdFxuICBpZiAoIV8uaGFzKGNvbmZpZ0hvbGRlciwgJ2NvbmZpZ3VyYXRpb24nKSkge1xuICAgIGxldCBjb25maWd1cmF0aW9uID0ge307XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBjb25maWdIb2xkZXIpIHtcbiAgICAgIGlmIChfLmhhcyhjb25maWdIb2xkZXIsIHByb3BlcnR5KSAmJiBwcm9wZXJ0eSAhPT0gJ2NhcGFiaWxpdGllcycpIHtcbiAgICAgICAgY29uZmlndXJhdGlvbltwcm9wZXJ0eV0gPSBjb25maWdIb2xkZXJbcHJvcGVydHldO1xuICAgICAgICBkZWxldGUgY29uZmlnSG9sZGVyW3Byb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgLy8gaWYgdGhlIG5vZGUgY29uZmlnIGRvZXMgbm90IGhhdmUgdGhlIGFwcGl1bS93ZWJkcml2ZXIgdXJsLCBob3N0LCBhbmQgcG9ydCxcbiAgLy8gYXV0b21hdGljYWxseSBhZGQgaXQgYmFzZWQgb24gaG93IGFwcGl1bSB3YXMgaW5pdGlhbGl6ZWRcbiAgLy8gb3RoZXJ3aXNlLCB3ZSB3aWxsIHRha2Ugd2hhdGV2ZXIgdGhlIHVzZXIgc2V0dXBcbiAgLy8gYmVjYXVzZSB3ZSB3aWxsIGFsd2F5cyBzZXQgbG9jYWxob3N0LzEyNy4wLjAuMS4gdGhpcyB3b24ndCB3b3JrIGlmIHlvdXJcbiAgLy8gbm9kZSBhbmQgZ3JpZCBhcmVuJ3QgaW4gdGhlIHNhbWUgcGxhY2VcbiAgaWYgKCFjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi51cmwgfHwgIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmhvc3QgfHwgIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLnBvcnQpIHtcbiAgICBjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi51cmwgPSBgaHR0cDovLyR7YWRkcn06JHtwb3J0fSR7YmFzZVBhdGh9YDtcbiAgICBjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5ob3N0ID0gYWRkcjtcbiAgICBjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5wb3J0ID0gcG9ydDtcbiAgfVxuICAvLyBpZiB0aGUgbm9kZSBjb25maWcgZG9lcyBub3QgaGF2ZSBpZCBhdXRvbWF0aWNhbGx5IGFkZCBpdFxuICBpZiAoIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmlkKSB7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24uaWQgPSBgaHR0cDovLyR7Y29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24uaG9zdH06JHtjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5wb3J0fWA7XG4gIH1cblxuICAvLyB0aGUgcG9zdCBvcHRpb25zXG4gIGNvbnN0IHJlZ1JlcXVlc3QgPSB7XG4gICAgdXJsOiBgJHtodWJVcmkoY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24pfS9ncmlkL3JlZ2lzdGVyYCxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBkYXRhOiBjb25maWdIb2xkZXIsXG4gIH07XG5cbiAgaWYgKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLnJlZ2lzdGVyICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBObyByZWdpc3RyYXRpb24gc2VudCAoJHtjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5yZWdpc3Rlcn0gPSBmYWxzZSlgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWdpc3RlckN5Y2xlSW50ZXJ2YWwgPSBjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5yZWdpc3RlckN5Y2xlO1xuICBpZiAoaXNOYU4ocmVnaXN0ZXJDeWNsZUludGVydmFsKSB8fCByZWdpc3RlckN5Y2xlSW50ZXJ2YWwgPD0gMCkge1xuICAgIGxvZ2dlci53YXJuKGAncmVnaXN0ZXJDeWNsZScgaXMgbm90IGEgdmFsaWQgcG9zaXRpdmUgbnVtYmVyLiBgICtcbiAgICAgIGBObyByZWdpc3RyYXRpb24gcmVxdWVzdCB3aWxsIGJlIHNlbnQgdG8gdGhlIGdyaWQuYCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGluaXRpYXRlIGEgbmV3IFRocmVhZFxuICBsZXQgZmlyc3QgPSB0cnVlO1xuICBsb2dnZXIuZGVidWcoYFN0YXJ0aW5nIGF1dG8gcmVnaXN0ZXIgdGhyZWFkIGZvciB0aGUgZ3JpZC4gYCArXG4gICAgYFdpbGwgdHJ5IHRvIHJlZ2lzdGVyIGV2ZXJ5ICR7cmVnaXN0ZXJDeWNsZUludGVydmFsfSBtcy5gKTtcbiAgc2V0SW50ZXJ2YWwoYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJSZXRyeSAoKSB7XG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgYXdhaXQgcmVnaXN0ZXJUb0dyaWQocmVnUmVxdWVzdCwgY29uZmlnSG9sZGVyKTtcbiAgICB9IGVsc2UgaWYgKCFhd2FpdCBpc0FscmVhZHlSZWdpc3RlcmVkKGNvbmZpZ0hvbGRlcikpIHtcbiAgICAgIC8vIG1ha2UgdGhlIGh0dHAgUE9TVCB0byB0aGUgZ3JpZCBmb3IgcmVnaXN0cmF0aW9uXG4gICAgICBhd2FpdCByZWdpc3RlclRvR3JpZChyZWdSZXF1ZXN0LCBjb25maWdIb2xkZXIpO1xuICAgIH1cbiAgfSwgcmVnaXN0ZXJDeWNsZUludGVydmFsKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNBbHJlYWR5UmVnaXN0ZXJlZCAoY29uZmlnSG9sZGVyKSB7XG4gIC8vY2hlY2sgaWYgbm9kZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRcbiAgY29uc3QgaWQgPSBjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5pZDtcbiAgdHJ5IHtcbiAgICBjb25zdCB7ZGF0YSwgc3RhdHVzfSA9IGF3YWl0IGF4aW9zKHtcbiAgICAgIHVybDogYCR7aHViVXJpKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uKX0vZ3JpZC9hcGkvcHJveHk/aWQ9JHtpZH1gLFxuICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgfSk7XG4gICAgaWYgKHN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggY29kZSAke3N0YXR1c31gKTtcbiAgICB9XG4gICAgaWYgKCFkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgIC8vIGlmIHJlZ2lzdGVyIGZhaWwsIHByaW50IHRoZSBkZWJ1ZyBtc2dcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgR3JpZCByZWdpc3RyYXRpb24gZXJyb3I6ICR7ZGF0YS5tc2d9YCk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhLnN1Y2Nlc3M7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhgSHViIGRvd24gb3Igbm90IHJlc3BvbmRpbmc6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCByZWdpc3Rlck5vZGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsTUFBTSxHQUFJQyxNQUFELElBQVk7RUFDekIsTUFBTUMsUUFBUSxHQUFHRCxNQUFNLENBQUNFLFdBQVAsSUFBc0IsTUFBdkM7RUFDQSxPQUFRLEdBQUVELFFBQVMsTUFBS0QsTUFBTSxDQUFDRyxPQUFRLElBQUdILE1BQU0sQ0FBQ0ksT0FBUSxFQUF6RDtBQUNELENBSEQ7O0FBWUEsZUFBZUMsWUFBZixDQUE2QkMsSUFBN0IsRUFBbUNDLElBQW5DLEVBQXlDQyxJQUF6QyxFQUErQ0MsUUFBL0MsRUFBeUQ7RUFDdkQsSUFBSUMsY0FBSjs7RUFDQSxJQUFJQyxnQkFBRUMsUUFBRixDQUFXTixJQUFYLENBQUosRUFBc0I7SUFDcEJJLGNBQWMsR0FBR0osSUFBakI7O0lBQ0EsSUFBSTtNQUNGQSxJQUFJLEdBQUcsTUFBTU8sWUFBR0MsUUFBSCxDQUFZUixJQUFaLEVBQWtCLE9BQWxCLENBQWI7SUFDRCxDQUZELENBRUUsT0FBT1MsR0FBUCxFQUFZO01BQ1pDLGdCQUFPQyxLQUFQLENBQWMsMENBQXlDUCxjQUFlLDJCQUEwQkssR0FBRyxDQUFDRyxPQUFRLEVBQTVHOztNQUNBO0lBQ0Q7O0lBQ0QsSUFBSTtNQUNGWixJQUFJLEdBQUdhLElBQUksQ0FBQ0MsS0FBTCxDQUFXZCxJQUFYLENBQVA7SUFDRCxDQUZELENBRUUsT0FBT1MsR0FBUCxFQUFZO01BQ1pDLGdCQUFPSyxhQUFQLENBQXNCLDJDQUEwQ1gsY0FBZSxLQUFJSyxHQUFHLENBQUNHLE9BQVEsRUFBL0Y7O01BQ0E7SUFDRDtFQUNGOztFQUVESSxXQUFXLENBQUNoQixJQUFELEVBQU9DLElBQVAsRUFBYUMsSUFBYixFQUFtQkMsUUFBbkIsQ0FBWDtBQUNEOztBQUVELGVBQWVjLGNBQWYsQ0FBK0JDLFdBQS9CLEVBQTRDQyxZQUE1QyxFQUEwRDtFQUN4RCxJQUFJO0lBQ0YsTUFBTTtNQUFDQztJQUFELElBQVcsTUFBTSxvQkFBTUYsV0FBTixDQUF2Qjs7SUFDQSxJQUFJRSxNQUFNLEtBQUssR0FBZixFQUFvQjtNQUNsQixNQUFNLElBQUlDLEtBQUosQ0FBVyw0QkFBMkJELE1BQU8sRUFBN0MsQ0FBTjtJQUNEOztJQUNEVixnQkFBT1ksS0FBUCxDQUFjLHNEQUFELEdBQ1g3QixNQUFNLENBQUMwQixZQUFZLENBQUNJLGFBQWQsQ0FEUjtFQUVELENBUEQsQ0FPRSxPQUFPZCxHQUFQLEVBQVk7SUFDWkMsZ0JBQU9DLEtBQVAsQ0FBYywwREFBeURGLEdBQUcsQ0FBQ0csT0FBUSxFQUFuRjtFQUNEO0FBQ0Y7O0FBRUQsU0FBU0ksV0FBVCxDQUFzQkcsWUFBdEIsRUFBb0NsQixJQUFwQyxFQUEwQ0MsSUFBMUMsRUFBZ0RDLFFBQWhELEVBQTBEO0VBRXhELElBQUksQ0FBQ0UsZ0JBQUVtQixHQUFGLENBQU1MLFlBQU4sRUFBb0IsZUFBcEIsQ0FBTCxFQUEyQztJQUN6QyxJQUFJSSxhQUFhLEdBQUcsRUFBcEI7O0lBQ0EsS0FBSyxNQUFNRSxRQUFYLElBQXVCTixZQUF2QixFQUFxQztNQUNuQyxJQUFJZCxnQkFBRW1CLEdBQUYsQ0FBTUwsWUFBTixFQUFvQk0sUUFBcEIsS0FBaUNBLFFBQVEsS0FBSyxjQUFsRCxFQUFrRTtRQUNoRUYsYUFBYSxDQUFDRSxRQUFELENBQWIsR0FBMEJOLFlBQVksQ0FBQ00sUUFBRCxDQUF0QztRQUNBLE9BQU9OLFlBQVksQ0FBQ00sUUFBRCxDQUFuQjtNQUNEO0lBQ0Y7O0lBQ0ROLFlBQVksQ0FBQ0ksYUFBYixHQUE2QkEsYUFBN0I7RUFDRDs7RUFPRCxJQUFJLENBQUNKLFlBQVksQ0FBQ0ksYUFBYixDQUEyQkcsR0FBNUIsSUFBbUMsQ0FBQ1AsWUFBWSxDQUFDSSxhQUFiLENBQTJCSSxJQUEvRCxJQUF1RSxDQUFDUixZQUFZLENBQUNJLGFBQWIsQ0FBMkJyQixJQUF2RyxFQUE2RztJQUMzR2lCLFlBQVksQ0FBQ0ksYUFBYixDQUEyQkcsR0FBM0IsR0FBa0MsVUFBU3pCLElBQUssSUFBR0MsSUFBSyxHQUFFQyxRQUFTLEVBQW5FO0lBQ0FnQixZQUFZLENBQUNJLGFBQWIsQ0FBMkJJLElBQTNCLEdBQWtDMUIsSUFBbEM7SUFDQWtCLFlBQVksQ0FBQ0ksYUFBYixDQUEyQnJCLElBQTNCLEdBQWtDQSxJQUFsQztFQUNEOztFQUVELElBQUksQ0FBQ2lCLFlBQVksQ0FBQ0ksYUFBYixDQUEyQkssRUFBaEMsRUFBb0M7SUFDbENULFlBQVksQ0FBQ0ksYUFBYixDQUEyQkssRUFBM0IsR0FBaUMsVUFBU1QsWUFBWSxDQUFDSSxhQUFiLENBQTJCSSxJQUFLLElBQUdSLFlBQVksQ0FBQ0ksYUFBYixDQUEyQnJCLElBQUssRUFBN0c7RUFDRDs7RUFHRCxNQUFNMkIsVUFBVSxHQUFHO0lBQ2pCSCxHQUFHLEVBQUcsR0FBRWpDLE1BQU0sQ0FBQzBCLFlBQVksQ0FBQ0ksYUFBZCxDQUE2QixnQkFEMUI7SUFFakJPLE1BQU0sRUFBRSxNQUZTO0lBR2pCOUIsSUFBSSxFQUFFbUI7RUFIVyxDQUFuQjs7RUFNQSxJQUFJQSxZQUFZLENBQUNJLGFBQWIsQ0FBMkJRLFFBQTNCLEtBQXdDLElBQTVDLEVBQWtEO0lBQ2hEckIsZ0JBQU9ZLEtBQVAsQ0FBYyx5QkFBd0JILFlBQVksQ0FBQ0ksYUFBYixDQUEyQlEsUUFBUyxXQUExRTs7SUFDQTtFQUNEOztFQUVELE1BQU1DLHFCQUFxQixHQUFHYixZQUFZLENBQUNJLGFBQWIsQ0FBMkJVLGFBQXpEOztFQUNBLElBQUlDLEtBQUssQ0FBQ0YscUJBQUQsQ0FBTCxJQUFnQ0EscUJBQXFCLElBQUksQ0FBN0QsRUFBZ0U7SUFDOUR0QixnQkFBT3lCLElBQVAsQ0FBYSxrREFBRCxHQUNULG1EQURIOztJQUVBO0VBQ0Q7O0VBRUQsSUFBSUMsS0FBSyxHQUFHLElBQVo7O0VBQ0ExQixnQkFBT1ksS0FBUCxDQUFjLDhDQUFELEdBQ1YsOEJBQTZCVSxxQkFBc0IsTUFEdEQ7O0VBRUFLLFdBQVcsQ0FBQyxlQUFlQyxhQUFmLEdBQWdDO0lBQzFDLElBQUlGLEtBQUosRUFBVztNQUNUQSxLQUFLLEdBQUcsS0FBUjtNQUNBLE1BQU1uQixjQUFjLENBQUNZLFVBQUQsRUFBYVYsWUFBYixDQUFwQjtJQUNELENBSEQsTUFHTyxJQUFJLEVBQUMsTUFBTW9CLG1CQUFtQixDQUFDcEIsWUFBRCxDQUExQixDQUFKLEVBQThDO01BRW5ELE1BQU1GLGNBQWMsQ0FBQ1ksVUFBRCxFQUFhVixZQUFiLENBQXBCO0lBQ0Q7RUFDRixDQVJVLEVBUVJhLHFCQVJRLENBQVg7QUFTRDs7QUFFRCxlQUFlTyxtQkFBZixDQUFvQ3BCLFlBQXBDLEVBQWtEO0VBRWhELE1BQU1TLEVBQUUsR0FBR1QsWUFBWSxDQUFDSSxhQUFiLENBQTJCSyxFQUF0Qzs7RUFDQSxJQUFJO0lBQ0YsTUFBTTtNQUFDNUIsSUFBRDtNQUFPb0I7SUFBUCxJQUFpQixNQUFNLG9CQUFNO01BQ2pDTSxHQUFHLEVBQUcsR0FBRWpDLE1BQU0sQ0FBQzBCLFlBQVksQ0FBQ0ksYUFBZCxDQUE2QixzQkFBcUJLLEVBQUcsRUFEbEM7TUFFakNZLE9BQU8sRUFBRTtJQUZ3QixDQUFOLENBQTdCOztJQUlBLElBQUlwQixNQUFNLEtBQUssR0FBZixFQUFvQjtNQUNsQixNQUFNLElBQUlDLEtBQUosQ0FBVyw0QkFBMkJELE1BQU8sRUFBN0MsQ0FBTjtJQUNEOztJQUNELElBQUksQ0FBQ3BCLElBQUksQ0FBQ3lDLE9BQVYsRUFBbUI7TUFFakIvQixnQkFBT1ksS0FBUCxDQUFjLDRCQUEyQnRCLElBQUksQ0FBQzBDLEdBQUksRUFBbEQ7SUFDRDs7SUFDRCxPQUFPMUMsSUFBSSxDQUFDeUMsT0FBWjtFQUNELENBYkQsQ0FhRSxPQUFPaEMsR0FBUCxFQUFZO0lBQ1pDLGdCQUFPWSxLQUFQLENBQWMsK0JBQThCYixHQUFHLENBQUNHLE9BQVEsRUFBeEQ7RUFDRDtBQUNGOztlQUdjYixZIn0=
153
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJodWJVcmkiLCJjb25maWciLCJwcm90b2NvbCIsImh1YlByb3RvY29sIiwiaHViSG9zdCIsImh1YlBvcnQiLCJyZWdpc3Rlck5vZGUiLCJkYXRhIiwiYWRkciIsInBvcnQiLCJiYXNlUGF0aCIsImNvbmZpZ0ZpbGVQYXRoIiwiXyIsImlzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZSIsImVyciIsImxvZ2dlciIsImVycm9yIiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImVycm9yQW5kVGhyb3ciLCJwb3N0UmVxdWVzdCIsInJlZ2lzdGVyVG9HcmlkIiwicG9zdE9wdGlvbnMiLCJjb25maWdIb2xkZXIiLCJzdGF0dXMiLCJheGlvcyIsIkVycm9yIiwiZGVidWciLCJjb25maWd1cmF0aW9uIiwiaGFzIiwicHJvcGVydHkiLCJ1cmwiLCJob3N0IiwiaWQiLCJyZWdSZXF1ZXN0IiwibWV0aG9kIiwicmVnaXN0ZXIiLCJyZWdpc3RlckN5Y2xlSW50ZXJ2YWwiLCJyZWdpc3RlckN5Y2xlIiwiaXNOYU4iLCJ3YXJuIiwiZmlyc3QiLCJzZXRJbnRlcnZhbCIsInJlZ2lzdGVyUmV0cnkiLCJpc0FscmVhZHlSZWdpc3RlcmVkIiwidGltZW91dCIsInN1Y2Nlc3MiLCJtc2ciXSwic291cmNlcyI6WyIuLi8uLi9saWIvZ3JpZC1yZWdpc3Rlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHtmc30gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgaHViVXJpID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBwcm90b2NvbCA9IGNvbmZpZy5odWJQcm90b2NvbCB8fCAnaHR0cCc7XG4gIHJldHVybiBgJHtwcm90b2NvbH06Ly8ke2NvbmZpZy5odWJIb3N0fToke2NvbmZpZy5odWJQb3J0fWA7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIG5ldyBub2RlIHdpdGggYSBzZWxlbml1bSBncmlkXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGRhdGEgLSBQYXRoIG9yIG9iamVjdCByZXByZXNlbnRpbmcgc2VsZW5pdW0gZ3JpZCBub2RlIGNvbmZpZyBmaWxlLiBJZiBhIGBzdHJpbmdgLCBhbGwgc3Vic2VxdWVudCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkIVxuICogQHBhcmFtIHtzdHJpbmd9IFthZGRyXSAtIEJpbmQgdG8gdGhpcyBhZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gW3BvcnRdIC0gQmluZCB0byB0aGlzIHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYmFzZVBhdGhdIC0gQmFzZSBwYXRoIGZvciB0aGUgZ3JpZFxuICovXG5hc3luYyBmdW5jdGlvbiByZWdpc3Rlck5vZGUoZGF0YSwgYWRkciwgcG9ydCwgYmFzZVBhdGgpIHtcbiAgbGV0IGNvbmZpZ0ZpbGVQYXRoO1xuICBpZiAoXy5pc1N0cmluZyhkYXRhKSkge1xuICAgIGNvbmZpZ0ZpbGVQYXRoID0gZGF0YTtcbiAgICB0cnkge1xuICAgICAgZGF0YSA9IGF3YWl0IGZzLnJlYWRGaWxlKGRhdGEsICd1dGYtOCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICBgVW5hYmxlIHRvIGxvYWQgbm9kZSBjb25maWd1cmF0aW9uIGZpbGUgJHtjb25maWdGaWxlUGF0aH0gdG8gcmVnaXN0ZXIgd2l0aCBncmlkOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvckFuZFRocm93KFxuICAgICAgICBgU3ludGF4IGVycm9yIGluIG5vZGUgY29uZmlndXJhdGlvbiBmaWxlICR7Y29uZmlnRmlsZVBhdGh9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcG9zdFJlcXVlc3QoZGF0YSwgYWRkciwgcG9ydCwgYmFzZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWdpc3RlclRvR3JpZChwb3N0T3B0aW9ucywgY29uZmlnSG9sZGVyKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0YXR1c30gPSBhd2FpdCBheGlvcyhwb3N0T3B0aW9ucyk7XG4gICAgaWYgKHN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggY29kZSAke3N0YXR1c31gKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEFwcGl1bSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSB0aGUgZ3JpZCBvbiBgICsgaHViVXJpKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uKVxuICAgICk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgQW4gYXR0ZW1wdCB0byByZWdpc3RlciB3aXRoIHRoZSBncmlkIHdhcyB1bnN1Y2Nlc3NmdWw6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9zdFJlcXVlc3QoY29uZmlnSG9sZGVyLCBhZGRyLCBwb3J0LCBiYXNlUGF0aCkge1xuICAvLyBNb3ZlIFNlbGVuaXVtIDMgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gIGlmICghXy5oYXMoY29uZmlnSG9sZGVyLCAnY29uZmlndXJhdGlvbicpKSB7XG4gICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGNvbmZpZ0hvbGRlcikge1xuICAgICAgaWYgKF8uaGFzKGNvbmZpZ0hvbGRlciwgcHJvcGVydHkpICYmIHByb3BlcnR5ICE9PSAnY2FwYWJpbGl0aWVzJykge1xuICAgICAgICBjb25maWd1cmF0aW9uW3Byb3BlcnR5XSA9IGNvbmZpZ0hvbGRlcltwcm9wZXJ0eV07XG4gICAgICAgIGRlbGV0ZSBjb25maWdIb2xkZXJbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICAvLyBpZiB0aGUgbm9kZSBjb25maWcgZG9lcyBub3QgaGF2ZSB0aGUgYXBwaXVtL3dlYmRyaXZlciB1cmwsIGhvc3QsIGFuZCBwb3J0LFxuICAvLyBhdXRvbWF0aWNhbGx5IGFkZCBpdCBiYXNlZCBvbiBob3cgYXBwaXVtIHdhcyBpbml0aWFsaXplZFxuICAvLyBvdGhlcndpc2UsIHdlIHdpbGwgdGFrZSB3aGF0ZXZlciB0aGUgdXNlciBzZXR1cFxuICAvLyBiZWNhdXNlIHdlIHdpbGwgYWx3YXlzIHNldCBsb2NhbGhvc3QvMTI3LjAuMC4xLiB0aGlzIHdvbid0IHdvcmsgaWYgeW91clxuICAvLyBub2RlIGFuZCBncmlkIGFyZW4ndCBpbiB0aGUgc2FtZSBwbGFjZVxuICBpZiAoXG4gICAgIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLnVybCB8fFxuICAgICFjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5ob3N0IHx8XG4gICAgIWNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLnBvcnRcbiAgKSB7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24udXJsID0gYGh0dHA6Ly8ke2FkZHJ9OiR7cG9ydH0ke2Jhc2VQYXRofWA7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24uaG9zdCA9IGFkZHI7XG4gICAgY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucG9ydCA9IHBvcnQ7XG4gIH1cbiAgLy8gaWYgdGhlIG5vZGUgY29uZmlnIGRvZXMgbm90IGhhdmUgaWQgYXV0b21hdGljYWxseSBhZGQgaXRcbiAgaWYgKCFjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5pZCkge1xuICAgIGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmlkID0gYGh0dHA6Ly8ke2NvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmhvc3R9OiR7Y29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucG9ydH1gO1xuICB9XG5cbiAgLy8gdGhlIHBvc3Qgb3B0aW9uc1xuICBjb25zdCByZWdSZXF1ZXN0ID0ge1xuICAgIHVybDogYCR7aHViVXJpKGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uKX0vZ3JpZC9yZWdpc3RlcmAsXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZGF0YTogY29uZmlnSG9sZGVyLFxuICB9O1xuXG4gIGlmIChjb25maWdIb2xkZXIuY29uZmlndXJhdGlvbi5yZWdpc3RlciAhPT0gdHJ1ZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhgTm8gcmVnaXN0cmF0aW9uIHNlbnQgKCR7Y29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJ9ID0gZmFsc2UpYCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0ZXJDeWNsZUludGVydmFsID0gY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24ucmVnaXN0ZXJDeWNsZTtcbiAgaWYgKGlzTmFOKHJlZ2lzdGVyQ3ljbGVJbnRlcnZhbCkgfHwgcmVnaXN0ZXJDeWNsZUludGVydmFsIDw9IDApIHtcbiAgICBsb2dnZXIud2FybihcbiAgICAgIGAncmVnaXN0ZXJDeWNsZScgaXMgbm90IGEgdmFsaWQgcG9zaXRpdmUgbnVtYmVyLiBgICtcbiAgICAgICAgYE5vIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHdpbGwgYmUgc2VudCB0byB0aGUgZ3JpZC5gXG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gaW5pdGlhdGUgYSBuZXcgVGhyZWFkXG4gIGxldCBmaXJzdCA9IHRydWU7XG4gIGxvZ2dlci5kZWJ1ZyhcbiAgICBgU3RhcnRpbmcgYXV0byByZWdpc3RlciB0aHJlYWQgZm9yIHRoZSBncmlkLiBgICtcbiAgICAgIGBXaWxsIHRyeSB0byByZWdpc3RlciBldmVyeSAke3JlZ2lzdGVyQ3ljbGVJbnRlcnZhbH0gbXMuYFxuICApO1xuICBzZXRJbnRlcnZhbChhc3luYyBmdW5jdGlvbiByZWdpc3RlclJldHJ5KCkge1xuICAgIGlmIChmaXJzdCkge1xuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICAgIGF3YWl0IHJlZ2lzdGVyVG9HcmlkKHJlZ1JlcXVlc3QsIGNvbmZpZ0hvbGRlcik7XG4gICAgfSBlbHNlIGlmICghKGF3YWl0IGlzQWxyZWFkeVJlZ2lzdGVyZWQoY29uZmlnSG9sZGVyKSkpIHtcbiAgICAgIC8vIG1ha2UgdGhlIGh0dHAgUE9TVCB0byB0aGUgZ3JpZCBmb3IgcmVnaXN0cmF0aW9uXG4gICAgICBhd2FpdCByZWdpc3RlclRvR3JpZChyZWdSZXF1ZXN0LCBjb25maWdIb2xkZXIpO1xuICAgIH1cbiAgfSwgcmVnaXN0ZXJDeWNsZUludGVydmFsKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNBbHJlYWR5UmVnaXN0ZXJlZChjb25maWdIb2xkZXIpIHtcbiAgLy9jaGVjayBpZiBub2RlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuICBjb25zdCBpZCA9IGNvbmZpZ0hvbGRlci5jb25maWd1cmF0aW9uLmlkO1xuICB0cnkge1xuICAgIGNvbnN0IHtkYXRhLCBzdGF0dXN9ID0gYXdhaXQgYXhpb3Moe1xuICAgICAgdXJsOiBgJHtodWJVcmkoY29uZmlnSG9sZGVyLmNvbmZpZ3VyYXRpb24pfS9ncmlkL2FwaS9wcm94eT9pZD0ke2lkfWAsXG4gICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICB9KTtcbiAgICBpZiAoc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVxdWVzdCBmYWlsZWQgd2l0aCBjb2RlICR7c3RhdHVzfWApO1xuICAgIH1cbiAgICBpZiAoIWRhdGEuc3VjY2Vzcykge1xuICAgICAgLy8gaWYgcmVnaXN0ZXIgZmFpbCwgcHJpbnQgdGhlIGRlYnVnIG1zZ1xuICAgICAgbG9nZ2VyLmRlYnVnKGBHcmlkIHJlZ2lzdHJhdGlvbiBlcnJvcjogJHtkYXRhLm1zZ31gKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuc3VjY2VzcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKGBIdWIgZG93biBvciBub3QgcmVzcG9uZGluZzogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCByZWdpc3Rlck5vZGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsTUFBTSxHQUFJQyxNQUFELElBQVk7RUFDekIsTUFBTUMsUUFBUSxHQUFHRCxNQUFNLENBQUNFLFdBQVAsSUFBc0IsTUFBdkM7RUFDQSxPQUFRLEdBQUVELFFBQVMsTUFBS0QsTUFBTSxDQUFDRyxPQUFRLElBQUdILE1BQU0sQ0FBQ0ksT0FBUSxFQUF6RDtBQUNELENBSEQ7O0FBWUEsZUFBZUMsWUFBZixDQUE0QkMsSUFBNUIsRUFBa0NDLElBQWxDLEVBQXdDQyxJQUF4QyxFQUE4Q0MsUUFBOUMsRUFBd0Q7RUFDdEQsSUFBSUMsY0FBSjs7RUFDQSxJQUFJQyxlQUFBLENBQUVDLFFBQUYsQ0FBV04sSUFBWCxDQUFKLEVBQXNCO0lBQ3BCSSxjQUFjLEdBQUdKLElBQWpCOztJQUNBLElBQUk7TUFDRkEsSUFBSSxHQUFHLE1BQU1PLFdBQUEsQ0FBR0MsUUFBSCxDQUFZUixJQUFaLEVBQWtCLE9BQWxCLENBQWI7SUFDRCxDQUZELENBRUUsT0FBT1MsR0FBUCxFQUFZO01BQ1pDLGVBQUEsQ0FBT0MsS0FBUCxDQUNHLDBDQUF5Q1AsY0FBZSwyQkFBMEJLLEdBQUcsQ0FBQ0csT0FBUSxFQURqRzs7TUFHQTtJQUNEOztJQUNELElBQUk7TUFDRlosSUFBSSxHQUFHYSxJQUFJLENBQUNDLEtBQUwsQ0FBV2QsSUFBWCxDQUFQO0lBQ0QsQ0FGRCxDQUVFLE9BQU9TLEdBQVAsRUFBWTtNQUNaQyxlQUFBLENBQU9LLGFBQVAsQ0FDRywyQ0FBMENYLGNBQWUsS0FBSUssR0FBRyxDQUFDRyxPQUFRLEVBRDVFOztNQUdBO0lBQ0Q7RUFDRjs7RUFFREksV0FBVyxDQUFDaEIsSUFBRCxFQUFPQyxJQUFQLEVBQWFDLElBQWIsRUFBbUJDLFFBQW5CLENBQVg7QUFDRDs7QUFFRCxlQUFlYyxjQUFmLENBQThCQyxXQUE5QixFQUEyQ0MsWUFBM0MsRUFBeUQ7RUFDdkQsSUFBSTtJQUNGLE1BQU07TUFBQ0M7SUFBRCxJQUFXLE1BQU0sSUFBQUMsY0FBQSxFQUFNSCxXQUFOLENBQXZCOztJQUNBLElBQUlFLE1BQU0sS0FBSyxHQUFmLEVBQW9CO01BQ2xCLE1BQU0sSUFBSUUsS0FBSixDQUFXLDRCQUEyQkYsTUFBTyxFQUE3QyxDQUFOO0lBQ0Q7O0lBQ0RWLGVBQUEsQ0FBT2EsS0FBUCxDQUNHLHNEQUFELEdBQXlEOUIsTUFBTSxDQUFDMEIsWUFBWSxDQUFDSyxhQUFkLENBRGpFO0VBR0QsQ0FSRCxDQVFFLE9BQU9mLEdBQVAsRUFBWTtJQUNaQyxlQUFBLENBQU9DLEtBQVAsQ0FBYywwREFBeURGLEdBQUcsQ0FBQ0csT0FBUSxFQUFuRjtFQUNEO0FBQ0Y7O0FBRUQsU0FBU0ksV0FBVCxDQUFxQkcsWUFBckIsRUFBbUNsQixJQUFuQyxFQUF5Q0MsSUFBekMsRUFBK0NDLFFBQS9DLEVBQXlEO0VBRXZELElBQUksQ0FBQ0UsZUFBQSxDQUFFb0IsR0FBRixDQUFNTixZQUFOLEVBQW9CLGVBQXBCLENBQUwsRUFBMkM7SUFDekMsSUFBSUssYUFBYSxHQUFHLEVBQXBCOztJQUNBLEtBQUssTUFBTUUsUUFBWCxJQUF1QlAsWUFBdkIsRUFBcUM7TUFDbkMsSUFBSWQsZUFBQSxDQUFFb0IsR0FBRixDQUFNTixZQUFOLEVBQW9CTyxRQUFwQixLQUFpQ0EsUUFBUSxLQUFLLGNBQWxELEVBQWtFO1FBQ2hFRixhQUFhLENBQUNFLFFBQUQsQ0FBYixHQUEwQlAsWUFBWSxDQUFDTyxRQUFELENBQXRDO1FBQ0EsT0FBT1AsWUFBWSxDQUFDTyxRQUFELENBQW5CO01BQ0Q7SUFDRjs7SUFDRFAsWUFBWSxDQUFDSyxhQUFiLEdBQTZCQSxhQUE3QjtFQUNEOztFQU9ELElBQ0UsQ0FBQ0wsWUFBWSxDQUFDSyxhQUFiLENBQTJCRyxHQUE1QixJQUNBLENBQUNSLFlBQVksQ0FBQ0ssYUFBYixDQUEyQkksSUFENUIsSUFFQSxDQUFDVCxZQUFZLENBQUNLLGFBQWIsQ0FBMkJ0QixJQUg5QixFQUlFO0lBQ0FpQixZQUFZLENBQUNLLGFBQWIsQ0FBMkJHLEdBQTNCLEdBQWtDLFVBQVMxQixJQUFLLElBQUdDLElBQUssR0FBRUMsUUFBUyxFQUFuRTtJQUNBZ0IsWUFBWSxDQUFDSyxhQUFiLENBQTJCSSxJQUEzQixHQUFrQzNCLElBQWxDO0lBQ0FrQixZQUFZLENBQUNLLGFBQWIsQ0FBMkJ0QixJQUEzQixHQUFrQ0EsSUFBbEM7RUFDRDs7RUFFRCxJQUFJLENBQUNpQixZQUFZLENBQUNLLGFBQWIsQ0FBMkJLLEVBQWhDLEVBQW9DO0lBQ2xDVixZQUFZLENBQUNLLGFBQWIsQ0FBMkJLLEVBQTNCLEdBQWlDLFVBQVNWLFlBQVksQ0FBQ0ssYUFBYixDQUEyQkksSUFBSyxJQUFHVCxZQUFZLENBQUNLLGFBQWIsQ0FBMkJ0QixJQUFLLEVBQTdHO0VBQ0Q7O0VBR0QsTUFBTTRCLFVBQVUsR0FBRztJQUNqQkgsR0FBRyxFQUFHLEdBQUVsQyxNQUFNLENBQUMwQixZQUFZLENBQUNLLGFBQWQsQ0FBNkIsZ0JBRDFCO0lBRWpCTyxNQUFNLEVBQUUsTUFGUztJQUdqQi9CLElBQUksRUFBRW1CO0VBSFcsQ0FBbkI7O0VBTUEsSUFBSUEsWUFBWSxDQUFDSyxhQUFiLENBQTJCUSxRQUEzQixLQUF3QyxJQUE1QyxFQUFrRDtJQUNoRHRCLGVBQUEsQ0FBT2EsS0FBUCxDQUFjLHlCQUF3QkosWUFBWSxDQUFDSyxhQUFiLENBQTJCUSxRQUFTLFdBQTFFOztJQUNBO0VBQ0Q7O0VBRUQsTUFBTUMscUJBQXFCLEdBQUdkLFlBQVksQ0FBQ0ssYUFBYixDQUEyQlUsYUFBekQ7O0VBQ0EsSUFBSUMsS0FBSyxDQUFDRixxQkFBRCxDQUFMLElBQWdDQSxxQkFBcUIsSUFBSSxDQUE3RCxFQUFnRTtJQUM5RHZCLGVBQUEsQ0FBTzBCLElBQVAsQ0FDRyxrREFBRCxHQUNHLG1EQUZMOztJQUlBO0VBQ0Q7O0VBRUQsSUFBSUMsS0FBSyxHQUFHLElBQVo7O0VBQ0EzQixlQUFBLENBQU9hLEtBQVAsQ0FDRyw4Q0FBRCxHQUNHLDhCQUE2QlUscUJBQXNCLE1BRnhEOztFQUlBSyxXQUFXLENBQUMsZUFBZUMsYUFBZixHQUErQjtJQUN6QyxJQUFJRixLQUFKLEVBQVc7TUFDVEEsS0FBSyxHQUFHLEtBQVI7TUFDQSxNQUFNcEIsY0FBYyxDQUFDYSxVQUFELEVBQWFYLFlBQWIsQ0FBcEI7SUFDRCxDQUhELE1BR08sSUFBSSxFQUFFLE1BQU1xQixtQkFBbUIsQ0FBQ3JCLFlBQUQsQ0FBM0IsQ0FBSixFQUFnRDtNQUVyRCxNQUFNRixjQUFjLENBQUNhLFVBQUQsRUFBYVgsWUFBYixDQUFwQjtJQUNEO0VBQ0YsQ0FSVSxFQVFSYyxxQkFSUSxDQUFYO0FBU0Q7O0FBRUQsZUFBZU8sbUJBQWYsQ0FBbUNyQixZQUFuQyxFQUFpRDtFQUUvQyxNQUFNVSxFQUFFLEdBQUdWLFlBQVksQ0FBQ0ssYUFBYixDQUEyQkssRUFBdEM7O0VBQ0EsSUFBSTtJQUNGLE1BQU07TUFBQzdCLElBQUQ7TUFBT29CO0lBQVAsSUFBaUIsTUFBTSxJQUFBQyxjQUFBLEVBQU07TUFDakNNLEdBQUcsRUFBRyxHQUFFbEMsTUFBTSxDQUFDMEIsWUFBWSxDQUFDSyxhQUFkLENBQTZCLHNCQUFxQkssRUFBRyxFQURsQztNQUVqQ1ksT0FBTyxFQUFFO0lBRndCLENBQU4sQ0FBN0I7O0lBSUEsSUFBSXJCLE1BQU0sS0FBSyxHQUFmLEVBQW9CO01BQ2xCLE1BQU0sSUFBSUUsS0FBSixDQUFXLDRCQUEyQkYsTUFBTyxFQUE3QyxDQUFOO0lBQ0Q7O0lBQ0QsSUFBSSxDQUFDcEIsSUFBSSxDQUFDMEMsT0FBVixFQUFtQjtNQUVqQmhDLGVBQUEsQ0FBT2EsS0FBUCxDQUFjLDRCQUEyQnZCLElBQUksQ0FBQzJDLEdBQUksRUFBbEQ7SUFDRDs7SUFDRCxPQUFPM0MsSUFBSSxDQUFDMEMsT0FBWjtFQUNELENBYkQsQ0FhRSxPQUFPakMsR0FBUCxFQUFZO0lBQ1pDLGVBQUEsQ0FBT2EsS0FBUCxDQUFjLCtCQUE4QmQsR0FBRyxDQUFDRyxPQUFRLEVBQXhEO0VBQ0Q7QUFDRjs7ZUFFY2IsWSJ9