appium-android-driver 5.2.12 → 5.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,15 +19,24 @@ var _androidHelpers = require("../android-helpers");
19
19
 
20
20
  var _driver = require("appium/driver");
21
21
 
22
+ var _utils = require("../utils");
23
+
22
24
  const APP_EXTENSIONS = ['.apk', '.apks'];
23
25
  const RESOLVER_ACTIVITY_NAME = 'android/com.android.internal.app.ResolverActivity';
24
- let commands = {};
26
+ const commands = {};
25
27
  exports.commands = commands;
26
28
 
27
29
  commands.isAppInstalled = async function isAppInstalled(appId) {
28
30
  return await this.adb.isAppInstalled(appId);
29
31
  };
30
32
 
33
+ commands.mobileIsAppInstalled = async function mobileIsAppInstalled(opts = {}) {
34
+ const {
35
+ appId
36
+ } = (0, _utils.requireArgs)('appId', opts);
37
+ return await this.isAppInstalled(appId);
38
+ };
39
+
31
40
  commands.queryAppState = async function queryAppState(appId) {
32
41
  this.log.info(`Querying the state of '${appId}'`);
33
42
 
@@ -50,6 +59,13 @@ commands.queryAppState = async function queryAppState(appId) {
50
59
  return _androidHelpers.APP_STATE.RUNNING_IN_BACKGROUND;
51
60
  };
52
61
 
62
+ commands.mobileQueryAppState = async function mobileQueryAppState(opts = {}) {
63
+ const {
64
+ appId
65
+ } = (0, _utils.requireArgs)('appId', opts);
66
+ return await this.queryAppState(appId);
67
+ };
68
+
53
69
  commands.activateApp = async function activateApp(appId) {
54
70
  this.log.debug(`Activating '${appId}'`);
55
71
  const apiLevel = await this.adb.getApiLevel();
@@ -89,10 +105,24 @@ commands.activateApp = async function activateApp(appId) {
89
105
  }
90
106
  };
91
107
 
108
+ commands.mobileActivateApp = async function mobileActivateApp(opts = {}) {
109
+ const {
110
+ appId
111
+ } = (0, _utils.requireArgs)('appId', opts);
112
+ return await this.activateApp(appId);
113
+ };
114
+
92
115
  commands.removeApp = async function removeApp(appId, options = {}) {
93
116
  return await this.adb.uninstallApk(appId, options);
94
117
  };
95
118
 
119
+ commands.mobileRemoveApp = async function mobileRemoveApp(opts = {}) {
120
+ const {
121
+ appId
122
+ } = (0, _utils.requireArgs)('appId', opts);
123
+ return await this.removeApp(appId, opts);
124
+ };
125
+
96
126
  commands.terminateApp = async function terminateApp(appId, options = {}) {
97
127
  this.log.info(`Terminating '${appId}'`);
98
128
 
@@ -117,11 +147,25 @@ commands.terminateApp = async function terminateApp(appId, options = {}) {
117
147
  return true;
118
148
  };
119
149
 
150
+ commands.mobileTerminateApp = async function mobileTerminateApp(opts = {}) {
151
+ const {
152
+ appId
153
+ } = (0, _utils.requireArgs)('appId', opts);
154
+ return await this.terminateApp(appId, opts);
155
+ };
156
+
120
157
  commands.installApp = async function installApp(appPath, options = {}) {
121
158
  const localPath = await this.helpers.configureApp(appPath, APP_EXTENSIONS);
122
159
  await this.adb.install(localPath, options);
123
160
  };
124
161
 
162
+ commands.mobileInstallApp = async function mobileInstallApp(opts = {}) {
163
+ const {
164
+ appPath
165
+ } = (0, _utils.requireArgs)('appPath', opts);
166
+ return await this.installApp(appPath, opts);
167
+ };
168
+
125
169
  commands.mobileClearApp = async function mobileClearApp(opts = {}) {
126
170
  const {
127
171
  appId
@@ -136,4 +180,4 @@ commands.mobileClearApp = async function mobileClearApp(opts = {}) {
136
180
 
137
181
  var _default = commands;
138
182
  exports.default = _default;
139
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJjb21tYW5kcyIsImlzQXBwSW5zdGFsbGVkIiwiYXBwSWQiLCJhZGIiLCJxdWVyeUFwcFN0YXRlIiwibG9nIiwiaW5mbyIsIkFQUF9TVEFURSIsIk5PVF9JTlNUQUxMRUQiLCJwcm9jZXNzRXhpc3RzIiwiTk9UX1JVTk5JTkciLCJhcHBJZFJlIiwiUmVnRXhwIiwiXyIsImVzY2FwZVJlZ0V4cCIsImxpbmUiLCJkdW1wV2luZG93cyIsInNwbGl0IiwidGVzdCIsInNvbWUiLCJ4IiwiaW5jbHVkZXMiLCJSVU5OSU5HX0lOX0ZPUkVHUk9VTkQiLCJSVU5OSU5HX0lOX0JBQ0tHUk9VTkQiLCJhY3RpdmF0ZUFwcCIsImRlYnVnIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsImNtZCIsIm91dHB1dCIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwiYWN0aXZpdHlOYW1lIiwicmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eSIsInByZWZlckNtZCIsInN0ZG91dCIsIkVycm9yIiwicmVtb3ZlQXBwIiwib3B0aW9ucyIsInVuaW5zdGFsbEFwayIsInRlcm1pbmF0ZUFwcCIsImZvcmNlU3RvcCIsInRpbWVvdXQiLCJ1dGlsIiwiaGFzVmFsdWUiLCJpc05hTiIsInBhcnNlSW50Iiwid2FpdEZvckNvbmRpdGlvbiIsIndhaXRNcyIsImludGVydmFsTXMiLCJpbnN0YWxsQXBwIiwiYXBwUGF0aCIsImxvY2FsUGF0aCIsImhlbHBlcnMiLCJjb25maWd1cmVBcHAiLCJpbnN0YWxsIiwibW9iaWxlQ2xlYXJBcHAiLCJvcHRzIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJjbGVhciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9hcHAtbWFuYWdlbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgd2FpdEZvckNvbmRpdGlvbiB9IGZyb20gJ2FzeW5jYm94JztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBBUFBfU1RBVEUgfSBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IEFQUF9FWFRFTlNJT05TID0gWycuYXBrJywgJy5hcGtzJ107XG5jb25zdCBSRVNPTFZFUl9BQ1RJVklUWV9OQU1FID0gJ2FuZHJvaWQvY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLlJlc29sdmVyQWN0aXZpdHknO1xuXG5sZXQgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb3Igbm90XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZFxuICovXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChhcHBJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY29ycmVzcG9uZGluZyBjb25zdGFudCwgd2hpY2ggZGVzY3JpYmVzXG4gKiAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzdGF0ZTpcbiAqIDAgLSBpcyB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWRcbiAqIDEgLSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZCwgYnV0IGlzIG5vdCBydW5uaW5nXG4gKiAzIC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBiYWNrZ3JvdW5kXG4gKiA0IC0gaWYgdGhlIGFwcCBpcyBydW5uaW5nIGluIHRoZSBmb3JlZ3JvdW5kXG4gKi9cbmNvbW1hbmRzLnF1ZXJ5QXBwU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBxdWVyeUFwcFN0YXRlIChhcHBJZCkge1xuICB0aGlzLmxvZy5pbmZvKGBRdWVyeWluZyB0aGUgc3RhdGUgb2YgJyR7YXBwSWR9J2ApO1xuICBpZiAoIWF3YWl0IHRoaXMuYWRiLmlzQXBwSW5zdGFsbGVkKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEUuTk9UX0lOU1RBTExFRDtcbiAgfVxuICBpZiAoIWF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHMoYXBwSWQpKSB7XG4gICAgcmV0dXJuIEFQUF9TVEFURS5OT1RfUlVOTklORztcbiAgfVxuICBjb25zdCBhcHBJZFJlID0gbmV3IFJlZ0V4cChgXFxcXGIke18uZXNjYXBlUmVnRXhwKGFwcElkKX0vYCk7XG4gIGZvciAoY29uc3QgbGluZSBvZiAoYXdhaXQgdGhpcy5hZGIuZHVtcFdpbmRvd3MoKSkuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGFwcElkUmUudGVzdChsaW5lKSAmJiBbJ21DdXJyZW50Rm9jdXMnLCAnbUZvY3VzZWRBcHAnXS5zb21lKCh4KSA9PiBsaW5lLmluY2x1ZGVzKHgpKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5SVU5OSU5HX0lOX0ZPUkVHUk9VTkQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBBUFBfU1RBVEUuUlVOTklOR19JTl9CQUNLR1JPVU5EO1xufTtcblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gaXMgZG9uZSB3aXRoIG1vbmtleSB0b29sIGFuZCBsaXRlcmFsbHkgc2ltdWxhdGVzXG4gKiBjbGlja2luZyB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpY29uIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKi9cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGFwcElkKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBBY3RpdmF0aW5nICcke2FwcElkfSdgKTtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAvLyBGYWxsYmFjayB0byBNb25rZXkgaW4gb2xkZXIgQVBJc1xuICBpZiAoYXBpTGV2ZWwgPCAyNCkge1xuICAgIC8vIFRoZSBtb25rZXkgY29tbWFuZCBjb3VsZCByYWlzZSBhbiBpc3N1ZSBhcyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NDg2MDQ3NS9ob3ctdG8tdXNlLXRoZS1tb25rZXktY29tbWFuZC13aXRoLWFuLWFuZHJvaWQtc3lzdGVtLXRoYXQtZG9lc250LWhhdmUtcGh5c2ljYWxcbiAgICAvLyBidXQgJy0tcGN0LXN5c2tleXMgMCcgY291bGQgY2F1c2UgYW5vdGhlciBiYWNrZ3JvdW5kIHByb2Nlc3MgaXNzdWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjk0MSNpc3N1ZWNvbW1lbnQtMTEyOTgzNzI4NVxuICAgIGNvbnN0IGNtZCA9IFsnbW9ua2V5JyxcbiAgICAgICctcCcsIGFwcElkLFxuICAgICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICcxJ107XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIHRyeSB7XG4gICAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke291dHB1dH1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LmluY2x1ZGVzKCdtb25rZXkgYWJvcnRlZCcpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gQXJlIHlvdSBzdXJlIGl0IGlzIGluc3RhbGxlZD9gKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGFjdGl2aXR5TmFtZSA9IGF3YWl0IHRoaXMuYWRiLnJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkoYXBwSWQpO1xuICBpZiAoYWN0aXZpdHlOYW1lID09PSBSRVNPTFZFUl9BQ1RJVklUWV9OQU1FKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE3MTI4XG4gICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICBgVGhlIGxhdW5jaGFibGUgYWN0aXZpdHkgbmFtZSBvZiAnJHthcHBJZH0nIHdhcyByZXNvbHZlZCB0byAnJHthY3Rpdml0eU5hbWV9Jy4gYCArXG4gICAgICBgU3dpdGNoaW5nIHRoZSByZXNvbHZlciB0byBub3QgdXNlIGNtZGBcbiAgICApO1xuICAgIGFjdGl2aXR5TmFtZSA9IGF3YWl0IHRoaXMuYWRiLnJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkoYXBwSWQsIHtwcmVmZXJDbWQ6IGZhbHNlfSk7XG4gIH1cblxuICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgJ2FtJywgKGFwaUxldmVsIDwgMjYpID8gJ3N0YXJ0JyA6ICdzdGFydC1hY3Rpdml0eScsXG4gICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIC8vIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQjRkxBR19BQ1RJVklUWV9ORVdfVEFTS1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50I0ZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAnLWYnLCAnMHgxMDIwMDAwMCcsXG4gICAgJy1uJywgYWN0aXZpdHlOYW1lLFxuICBdKTtcbiAgdGhpcy5sb2cuZGVidWcoc3Rkb3V0KTtcbiAgaWYgKC9eZXJyb3I6L21pLnRlc3Qoc3Rkb3V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke3N0ZG91dH1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbMjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB1bmluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ga2VlcERhdGEgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGtlZXAgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkYXRhIGFuZCBjYWNoZSBmb2xkZXJzIGFmdGVyIHVuaW5zdGFsbC5cbiAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpZiBpcyBpbnN0YWxsZWQuXG4gKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGlmIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1VuaW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIHJlbW92YWwgb3B0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhY2thZ2Ugd2FzIGZvdW5kIG9uIHRoZSBkZXZpY2UgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHVuaW5zdGFsbGVkLlxuICovXG5jb21tYW5kcy5yZW1vdmVBcHAgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBcHAgKGFwcElkLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayhhcHBJZCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlcm1pbmF0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gdGltZW91dCBbNTAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB0ZXJtaW5hdGVkLlxuICovXG5cbi8qKlxuICogVGVybWluYXRlcyB0aGUgYXBwIGlmIGl0IGlzIHJ1bm5pbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcGFyYW0gez9UZXJtaW5hdGVPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiBhcHBsaWNhdGlvbiB0ZXJtaW5hdGlvbiBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgYXBwIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0ZXJtaW5hdGVkLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBhcHAgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQgd2l0aGluIHRoZSBnaXZlbiB0aW1lb3V0LlxuICovXG5jb21tYW5kcy50ZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiB0ZXJtaW5hdGVBcHAgKGFwcElkLCBvcHRpb25zID0ge30pIHtcbiAgdGhpcy5sb2cuaW5mbyhgVGVybWluYXRpbmcgJyR7YXBwSWR9J2ApO1xuICBpZiAoIShhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBUaGUgYXBwICcke2FwcElkfScgaXMgbm90IHJ1bm5pbmdgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKGFwcElkKTtcbiAgY29uc3QgdGltZW91dCA9IHV0aWwuaGFzVmFsdWUob3B0aW9ucy50aW1lb3V0KSAmJiAhaXNOYU4ob3B0aW9ucy50aW1lb3V0KSA/IHBhcnNlSW50KG9wdGlvbnMudGltZW91dCwgMTApIDogNTAwO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGFwcElkKSA8PSBBUFBfU1RBVEUuTk9UX1JVTk5JTkcsXG4gICAgICB7d2FpdE1zOiB0aW1lb3V0LCBpbnRlcnZhbE1zOiAxMDB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCcke2FwcElkfScgaXMgc3RpbGwgcnVubmluZyBhZnRlciAke3RpbWVvdXR9bXMgdGltZW91dGApO1xuICB9XG4gIHRoaXMubG9nLmluZm8oYCcke2FwcElkfScgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWRgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBsb2NhbCBhcGsgcGF0aCBvciBhIHJlbW90ZSB1cmxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiBpbnN0YWxsYXRpb24gb3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBnaXZlbiBhcGsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWNoYWJsZVxuICovXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGxvY2FsUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwUGF0aCwgQVBQX0VYVEVOU0lPTlMpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsKGxvY2FsUGF0aCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENsZWFyQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfSBhcHBJZCBUaGUgaWRlbnRpZmllciBvZiB0aGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBiZSBjbGVhcmVkXG4gKi9cblxuLyoqXG4gKiBEZWxldGVzIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHBhY2thZ2UuXG4gKlxuICogQHBhcmFtIHtDbGVhckFwcE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBjbGVhbmluZyBvZiB0aGUgYXBwIGRhdGEgZmFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2xlYXJBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDbGVhckFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHthcHBJZH0gPSBvcHRzO1xuICBpZiAoIWFwcElkKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlICdhcHBJZCcgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5jbGVhcihhcHBJZCk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsY0FBYyxHQUFHLENBQUMsTUFBRCxFQUFTLE9BQVQsQ0FBdkI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxtREFBL0I7QUFFQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjs7O0FBUUFBLFFBQVEsQ0FBQ0MsY0FBVCxHQUEwQixlQUFlQSxjQUFmLENBQStCQyxLQUEvQixFQUFzQztFQUM5RCxPQUFPLE1BQU0sS0FBS0MsR0FBTCxDQUFTRixjQUFULENBQXdCQyxLQUF4QixDQUFiO0FBQ0QsQ0FGRDs7QUFlQUYsUUFBUSxDQUFDSSxhQUFULEdBQXlCLGVBQWVBLGFBQWYsQ0FBOEJGLEtBQTlCLEVBQXFDO0VBQzVELEtBQUtHLEdBQUwsQ0FBU0MsSUFBVCxDQUFlLDBCQUF5QkosS0FBTSxHQUE5Qzs7RUFDQSxJQUFJLEVBQUMsTUFBTSxLQUFLQyxHQUFMLENBQVNGLGNBQVQsQ0FBd0JDLEtBQXhCLENBQVAsQ0FBSixFQUEyQztJQUN6QyxPQUFPSyx5QkFBQSxDQUFVQyxhQUFqQjtFQUNEOztFQUNELElBQUksRUFBQyxNQUFNLEtBQUtMLEdBQUwsQ0FBU00s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
183
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJjb21tYW5kcyIsImlzQXBwSW5zdGFsbGVkIiwiYXBwSWQiLCJhZGIiLCJtb2JpbGVJc0FwcEluc3RhbGxlZCIsIm9wdHMiLCJyZXF1aXJlQXJncyIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImFwcElkUmUiLCJSZWdFeHAiLCJfIiwiZXNjYXBlUmVnRXhwIiwibGluZSIsImR1bXBXaW5kb3dzIiwic3BsaXQiLCJ0ZXN0Iiwic29tZSIsIngiLCJpbmNsdWRlcyIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImRlYnVnIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsImNtZCIsIm91dHB1dCIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwiYWN0aXZpdHlOYW1lIiwicmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eSIsInByZWZlckNtZCIsInN0ZG91dCIsIkVycm9yIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJvcHRpb25zIiwidW5pbnN0YWxsQXBrIiwibW9iaWxlUmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiZm9yY2VTdG9wIiwidGltZW91dCIsInV0aWwiLCJoYXNWYWx1ZSIsImlzTmFOIiwicGFyc2VJbnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJhcHBQYXRoIiwibG9jYWxQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImluc3RhbGwiLCJtb2JpbGVJbnN0YWxsQXBwIiwibW9iaWxlQ2xlYXJBcHAiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsImNsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHJlcXVpcmVBcmdzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBBUFBfRVhURU5TSU9OUyA9IFsnLmFwaycsICcuYXBrcyddO1xuY29uc3QgUkVTT0xWRVJfQUNUSVZJVFlfTkFNRSA9ICdhbmRyb2lkL2NvbS5hbmRyb2lkLmludGVybmFsLmFwcC5SZXNvbHZlckFjdGl2aXR5JztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb3Igbm90XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZFxuICovXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChhcHBJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVBcHBJbnN0YWxsZWRPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7TW9iaWxlQXBwSW5zdGFsbGVkT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge2Jvb2xlYW59IFNhbWUgYXMgaW4gYGlzQXBwSW5zdGFsbGVkYFxuICovXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcbn07XG5cbi8qKlxuICogUXVlcmllcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHJldHVybnMge251bWJlcn0gVGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQsIHdoaWNoIGRlc2NyaWJlc1xuICogICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gc3RhdGU6XG4gKiAwIC0gaXMgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkXG4gKiAxIC0gaWYgdGhlIGFwcCBpcyBpbnN0YWxsZWQsIGJ1dCBpcyBub3QgcnVubmluZ1xuICogMyAtIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZFxuICogNCAtIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiB0aGUgZm9yZWdyb3VuZFxuICovXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYXBwSWQpIHtcbiAgdGhpcy5sb2cuaW5mbyhgUXVlcnlpbmcgdGhlIHN0YXRlIG9mICcke2FwcElkfSdgKTtcbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIH1cbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEUuTk9UX1JVTk5JTkc7XG4gIH1cbiAgY29uc3QgYXBwSWRSZSA9IG5ldyBSZWdFeHAoYFxcXFxiJHtfLmVzY2FwZVJlZ0V4cChhcHBJZCl9L2ApO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgKGF3YWl0IHRoaXMuYWRiLmR1bXBXaW5kb3dzKCkpLnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChhcHBJZFJlLnRlc3QobGluZSkgJiYgWydtQ3VycmVudEZvY3VzJywgJ21Gb2N1c2VkQXBwJ10uc29tZSgoeCkgPT4gbGluZS5pbmNsdWRlcyh4KSkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUlVOTklOR19JTl9GT1JFR1JPVU5EO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlUXVlcnlBcHBTdGF0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVRdWVyeUFwcFN0YXRlT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge251bWJlcn0gU2FtZSBhcyBpbiBgcXVlcnlBcHBTdGF0ZWBcbiAqL1xuY29tbWFuZHMubW9iaWxlUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVF1ZXJ5QXBwU3RhdGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCk7XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlcyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gb3IgbGF1bmNoZXMgaXQgaWYgbmVjZXNzYXJ5LlxuICogVGhlIGFjdGlvbiBsaXRlcmFsbHkgc2ltdWxhdGVzXG4gKiBjbGlja2luZyB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpY29uIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFwcCBjYW5ub3QgYmUgYWN0aXZhdGVkXG4gKi9cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGFwcElkKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBBY3RpdmF0aW5nICcke2FwcElkfSdgKTtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAvLyBGYWxsYmFjayB0byBNb25rZXkgaW4gb2xkZXIgQVBJc1xuICBpZiAoYXBpTGV2ZWwgPCAyNCkge1xuICAgIC8vIFRoZSBtb25rZXkgY29tbWFuZCBjb3VsZCByYWlzZSBhbiBpc3N1ZSBhcyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NDg2MDQ3NS9ob3ctdG8tdXNlLXRoZS1tb25rZXktY29tbWFuZC13aXRoLWFuLWFuZHJvaWQtc3lzdGVtLXRoYXQtZG9lc250LWhhdmUtcGh5c2ljYWxcbiAgICAvLyBidXQgJy0tcGN0LXN5c2tleXMgMCcgY291bGQgY2F1c2UgYW5vdGhlciBiYWNrZ3JvdW5kIHByb2Nlc3MgaXNzdWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjk0MSNpc3N1ZWNvbW1lbnQtMTEyOTgzNzI4NVxuICAgIGNvbnN0IGNtZCA9IFsnbW9ua2V5JyxcbiAgICAgICctcCcsIGFwcElkLFxuICAgICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICcxJ107XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIHRyeSB7XG4gICAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke291dHB1dH1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LmluY2x1ZGVzKCdtb25rZXkgYWJvcnRlZCcpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gQXJlIHlvdSBzdXJlIGl0IGlzIGluc3RhbGxlZD9gKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGFjdGl2aXR5TmFtZSA9IGF3YWl0IHRoaXMuYWRiLnJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkoYXBwSWQpO1xuICBpZiAoYWN0aXZpdHlOYW1lID09PSBSRVNPTFZFUl9BQ1RJVklUWV9OQU1FKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE3MTI4XG4gICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICBgVGhlIGxhdW5jaGFibGUgYWN0aXZpdHkgbmFtZSBvZiAnJHthcHBJZH0nIHdhcyByZXNvbHZlZCB0byAnJHthY3Rpdml0eU5hbWV9Jy4gYCArXG4gICAgICBgU3dpdGNoaW5nIHRoZSByZXNvbHZlciB0byBub3QgdXNlIGNtZGBcbiAgICApO1xuICAgIGFjdGl2aXR5TmFtZSA9IGF3YWl0IHRoaXMuYWRiLnJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkoYXBwSWQsIHtwcmVmZXJDbWQ6IGZhbHNlfSk7XG4gIH1cblxuICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgJ2FtJywgKGFwaUxldmVsIDwgMjYpID8gJ3N0YXJ0JyA6ICdzdGFydC1hY3Rpdml0eScsXG4gICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIC8vIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQjRkxBR19BQ1RJVklUWV9ORVdfVEFTS1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50I0ZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAnLWYnLCAnMHgxMDIwMDAwMCcsXG4gICAgJy1uJywgYWN0aXZpdHlOYW1lLFxuICBdKTtcbiAgdGhpcy5sb2cuZGVidWcoc3Rkb3V0KTtcbiAgaWYgKC9eZXJyb3I6L21pLnRlc3Qoc3Rkb3V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke3N0ZG91dH1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVBY3RpdmF0ZUFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gbGl0ZXJhbGx5IHNpbXVsYXRlc1xuICogY2xpY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWNvbiBvbiB0aGUgZGFzaGJvYXJkLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlQWN0aXZhdGVBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFwcCBjYW5ub3QgYmUgYWN0aXZhdGVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQWN0aXZhdGVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbMjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB1bmluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ga2VlcERhdGEgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGtlZXAgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkYXRhIGFuZCBjYWNoZSBmb2xkZXJzIGFmdGVyIHVuaW5zdGFsbC5cbiAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpZiBpcyBpbnN0YWxsZWQuXG4gKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGlmIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1VuaW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIHJlbW92YWwgb3B0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhY2thZ2Ugd2FzIGZvdW5kIG9uIHRoZSBkZXZpY2UgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHVuaW5zdGFsbGVkLlxuICovXG5jb21tYW5kcy5yZW1vdmVBcHAgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBcHAgKGFwcElkLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayhhcHBJZCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZVJlbW92ZUFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWYgaXMgaW5zdGFsbGVkLlxuICogVGhlIGNhbGwgaXMgaWdub3JlZCBpZiB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVSZW1vdmVBcHBPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2FtZSBhcyBpbiBgcmVtb3ZlQXBwYFxuICovXG5jb21tYW5kcy5tb2JpbGVSZW1vdmVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSZW1vdmVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucmVtb3ZlQXBwKGFwcElkLCBvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGVybWluYXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICB0aGlzLmxvZy5pbmZvKGBUZXJtaW5hdGluZyAnJHthcHBJZH0nYCk7XG4gIGlmICghKGF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHMoYXBwSWQpKSkge1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSBhcHAgJyR7YXBwSWR9JyBpcyBub3QgcnVubmluZ2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoYXBwSWQpO1xuICBjb25zdCB0aW1lb3V0ID0gdXRpbC5oYXNWYWx1ZShvcHRpb25zLnRpbWVvdXQpICYmICFpc05hTihvcHRpb25zLnRpbWVvdXQpID8gcGFyc2VJbnQob3B0aW9ucy50aW1lb3V0LCAxMCkgOiA1MDA7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoYXBwSWQpIDw9IEFQUF9TVEFURS5OT1RfUlVOTklORyxcbiAgICAgIHt3YWl0TXM6IHRpbWVvdXQsIGludGVydmFsTXM6IDEwMH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJyR7YXBwSWR9JyBpcyBzdGlsbCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgdGhpcy5sb2cuaW5mbyhgJyR7YXBwSWR9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdGVybWluYXRlZGApO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlVGVybWluYXRlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gdGltZW91dCBbNTAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB0ZXJtaW5hdGVkLlxuICovXG5cbi8qKlxuICogVGVybWluYXRlcyB0aGUgYXBwIGlmIGl0IGlzIHJ1bm5pbmcuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVUZXJtaW5hdGVBcHBPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2FtZSBhcyBpbiBgdGVybWluYXRlQXBwYFxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBhcHAgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQgd2l0aGluIHRoZSBnaXZlbiB0aW1lb3V0LlxuICovXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudGVybWluYXRlQXBwKGFwcElkLCBvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIGluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGxvY2FsIGFwayBwYXRoIG9yIGEgcmVtb3RlIHVybFxuICogQHBhcmFtIHs/SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGluc3RhbGxhdGlvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGdpdmVuIGFwayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhY2hhYmxlXG4gKi9cbmNvbW1hbmRzLmluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBwIChhcHBQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHBQYXRoLCBBUFBfRVhURU5TSU9OUyk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwobG9jYWxQYXRoLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlSW5zdGFsbEFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGxvY2FsIGFwayBwYXRoIG9yIGEgcmVtb3RlIHVybC4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge01vYmlsZUluc3RhbGxBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGdpdmVuIGFwayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhY2hhYmxlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJbnN0YWxsQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBQYXRoIH0gPSByZXF1aXJlQXJncygnYXBwUGF0aCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pbnN0YWxsQXBwKGFwcFBhdGgsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGVhckFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gYXBwSWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UgdG8gYmUgY2xlYXJlZFxuICovXG5cbi8qKlxuICogRGVsZXRlcyBhbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSB7Q2xlYXJBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgY2xlYW5pbmcgb2YgdGhlIGFwcCBkYXRhIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsZWFyQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQ2xlYXJBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YXBwSWR9ID0gb3B0cztcbiAgaWYgKCFhcHBJZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFRoZSAnYXBwSWQnIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuY2xlYXIoYXBwSWQpO1xufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGNBQWMsR0FBRyxDQUFDLE1BQUQsRUFBUyxPQUFULENBQXZCO0FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsbURBQS9CO0FBRUEsTUFBTUMsUUFBUSxHQUFHLEVBQWpCOzs7QUFRQUEsUUFBUSxDQUFDQyxjQUFULEdBQTBCLGVBQWVBLGNBQWYsQ0FBK0JDLEtBQS9CLEVBQXNDO0VBQzlELE9BQU8sTUFBTSxLQUFLQyxHQUFMLENBQVNGLGNBQVQsQ0FBd0JDLEtBQXhCLENBQWI7QUFDRCxDQUZEOztBQWVBRixRQUFRLENBQUNJLG9CQUFULEdBQWdDLGVBQWVBLG9CQUFmLENBQXFDQyxJQUFJLEdBQUcsRUFBNUMsRUFBZ0Q7RUFDOUUsTUFBTTtJQUFFSDtFQUFGLElBQVksSUFBQUksa0JBQUEsRUFBWSxPQUFaLEVBQXFCRCxJQUFyQixDQUFsQjtFQUNBLE9BQU8s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
@@ -48,7 +48,16 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
48
48
  stopScreenStreaming: 'mobileStopScreenStreaming',
49
49
  getNotifications: 'mobileGetNotifications',
50
50
  listSms: 'mobileListSms',
51
+ pushFile: 'mobilePushFile',
52
+ pullFile: 'mobilePullFile',
53
+ pullFolder: 'mobilePullFolder',
51
54
  deleteFile: 'mobileDeleteFile',
55
+ isAppInstalled: 'mobileIsAppInstalled',
56
+ queryAppState: 'mobileQueryAppState',
57
+ activateApp: 'mobileActivateApp',
58
+ removeApp: 'mobileRemoveApp',
59
+ terminateApp: 'mobileTerminateApp',
60
+ installApp: 'mobileInstallApp',
52
61
  clearApp: 'mobileClearApp',
53
62
  startService: 'mobileStartService',
54
63
  stopService: 'mobileStopService',
@@ -71,4 +80,4 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
71
80
 
72
81
  var _default = extensions;
73
82
  exports.default = _default;
74
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiZXhlY3V0ZSIsInNjcmlwdCIsImFyZ3MiLCJtYXRjaCIsImxvZyIsImluZm8iLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJfIiwiaXNBcnJheSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJlbmRwb2ludCIsImNocm9tZWRyaXZlciIsImp3cHJveHkiLCJkb3duc3RyZWFtUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiY29tbWFuZCIsIm1vYmlsZUNvbW1hbmQiLCJvcHRzIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwic2Vuc29yU2V0IiwiZ2V0RGV2aWNlVGltZSIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwiZGVsZXRlRmlsZSIsImNsZWFyQXBwIiwic3RhcnRTZXJ2aWNlIiwic3RvcFNlcnZpY2UiLCJzdGFydEFjdGl2aXR5IiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJ1bmxvY2siLCJyZWZyZXNoR3BzQ2FjaGUiLCJzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsInN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMsIFBST1RPQ09MUyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5jb25zdCBleHRlbnNpb25zID0ge307XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUgKHNjcmlwdCwgYXJncykge1xuICBpZiAoc2NyaXB0Lm1hdGNoKC9ebW9iaWxlOi8pKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgRXhlY3V0aW5nIG5hdGl2ZSBjb21tYW5kICcke3NjcmlwdH0nYCk7XG4gICAgc2NyaXB0ID0gc2NyaXB0LnJlcGxhY2UoL15tb2JpbGU6LywgJycpLnRyaW0oKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leGVjdXRlTW9iaWxlKHNjcmlwdCwgXy5pc0FycmF5KGFyZ3MpID8gYXJnc1swXSA6IGFyZ3MpO1xuICB9XG4gIGlmICghdGhpcy5pc1dlYkNvbnRleHQoKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICB9XG4gIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5kb3duc3RyZWFtUHJvdG9jb2wgPT09IFBST1RPQ09MUy5NSlNPTldQXG4gICAgPyAnL2V4ZWN1dGUnXG4gICAgOiAnL2V4ZWN1dGUvc3luYyc7XG4gIHJldHVybiBhd2FpdCB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmNvbW1hbmQoZW5kcG9pbnQsICdQT1NUJywge1xuICAgIHNjcmlwdCxcbiAgICBhcmdzLFxuICB9KTtcbn07XG5cbmV4dGVuc2lvbnMuZXhlY3V0ZU1vYmlsZSA9IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVNb2JpbGUgKG1vYmlsZUNvbW1hbmQsIG9wdHMgPSB7fSkge1xuICBjb25zdCBtb2JpbGVDb21tYW5kc01hcHBpbmcgPSB7XG4gICAgc2hlbGw6ICdtb2JpbGVTaGVsbCcsXG5cbiAgICBleGVjRW11Q29uc29sZUNvbW1hbmQ6ICdtb2JpbGVFeGVjRW11Q29uc29sZUNvbW1hbmQnLFxuXG4gICAgc3RhcnRMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RhcnRMb2dzQnJvYWRjYXN0JyxcbiAgICBzdG9wTG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0b3BMb2dzQnJvYWRjYXN0JyxcblxuICAgIGNoYW5nZVBlcm1pc3Npb25zOiAnbW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMnLFxuICAgIGdldFBlcm1pc3Npb25zOiAnbW9iaWxlR2V0UGVybWlzc2lvbnMnLFxuXG4gICAgcGVyZm9ybUVkaXRvckFjdGlvbjogJ21vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24nLFxuXG4gICAgc2Vuc29yU2V0OiAnc2Vuc29yU2V0JyxcblxuICAgIGdldERldmljZVRpbWU6ICdtb2JpbGVHZXREZXZpY2VUaW1lJyxcblxuICAgIHN0YXJ0U2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RhcnRTY3JlZW5TdHJlYW1pbmcnLFxuICAgIHN0b3BTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdG9wU2NyZWVuU3RyZWFtaW5nJyxcblxuICAgIGdldE5vdGlmaWNhdGlvbnM6ICdtb2JpbGVHZXROb3RpZmljYXRpb25zJyxcblxuICAgIGxpc3RTbXM6ICdtb2JpbGVMaXN0U21zJyxcblxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcblxuICAgIGNsZWFyQXBwOiAnbW9iaWxlQ2xlYXJBcHAnLFxuXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgYnJvYWRjYXN0OiAnbW9iaWxlQnJvYWRjYXN0JyxcblxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUFBLFVBQVUsQ0FBQ0MsT0FBWCxHQUFxQixlQUFlQSxPQUFmLENBQXdCQyxNQUF4QixFQUFnQ0MsSUFBaEMsRUFBc0M7RUFDekQsSUFBSUQsTUFBTSxDQUFDRSxLQUFQLENBQWEsVUFBYixDQUFKLEVBQThCO0lBQzVCLEtBQUtDLEdBQUwsQ0FBU0MsSUFBVCxDQUFlLDZCQUE0QkosTUFBTyxHQUFsRDtJQUNBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0ssT0FBUCxDQUFlLFVBQWYsRUFBMkIsRUFBM0IsRUFBK0JDLElBQS9CLEVBQVQ7SUFDQSxPQUFPLE1BQU0sS0FBS0MsYUFBTCxDQUFtQlAsTUFBbkIsRUFBMkJRLGVBQUEsQ0FBRUMsT0FBRixDQUFVUixJQUFWLElBQWtCQSxJQUFJLENBQUMsQ0FBRCxDQUF0QixHQUE0QkEsSUFBdkQsQ0FBYjtFQUNEOztFQUNELElBQUksQ0FBQyxLQUFLUyxZQUFMLEVBQUwsRUFBMEI7SUFDeEIsTUFBTSxJQUFJQyxjQUFBLENBQU9DLG1CQUFYLEVBQU47RUFDRDs7RUFDRCxNQUFNQyxRQUFRLEdBQUcsS0FBS0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLGtCQUExQixLQUFpREMsaUJBQUEsQ0FBVUMsT0FBM0QsR0FDYixVQURhLEdBRWIsZUFGSjtFQUdBLE9BQU8sTUFBTSxLQUFLSixZQUFMLENBQWtCQyxPQUFsQixDQUEwQkksT0FBMUIsQ0FBa0NOLFFBQWxDLEVBQTRDLE1BQTVDLEVBQW9EO0lBQy9EYixNQUQrRDtJQUUvREM7RUFGK0QsQ0FBcEQsQ0FBYjtBQUlELENBaEJEOztBQWtCQUgsVUFBVSxDQUFDUyxhQUFYLEdBQTJCLGVBQWVBLGFBQWYsQ0FBOEJhLGFBQTlCLEVBQTZDQyxJQUFJLEdBQUcsRUFBcEQsRUFBd0Q7RUFDakYsTUFBTUMscUJBQXFCLEdBQUc7SUFDNUJDLEtBQUssRUFBRSxhQURxQjtJQUc1QkMscUJBQXFCLEVBQUUsNkJBSEs7SUFLNUJDLGtCQUFrQixFQUFFLDBCQUxRO0lBTTVCQyxpQkFBaUIsRUFBRSx5QkFOUztJQVE1QkMsaUJBQWlCLEVBQUUseUJBUlM7SUFTNUJDLGNBQWMsRUFBRSxzQkFUWTtJQVc1QkMsbUJBQW1CLEVBQUUsMkJBWE87SUFhNUJDLFNBQVMsRUFBRSxXQWJpQjtJQWU1QkMsYUFBYSxFQUFFLHFCQWZhO0lBaUI1QkMsb0JBQW9CLEVBQUUsNEJBakJNO0lBa0I1QkMsbUJBQW1CLEVBQUUsMkJBbEJPO0lBb0I1QkMsZ0JBQWdCLEVBQUUsd0JBcEJVO0lBc0I1QkMsT0FBTyxFQUFFLGVBdEJtQjtJQXdCNUJDLFVBQVUsRUFBRSxrQkF4QmdCO0lBMEI1QkMsUUFBUSxFQUFFLGdCQTFCa0I7SUE0QjVCQyxZQUFZLEVBQUUsb0JBNUJjO0lBNkI1QkMsV0FBVyxFQUFFLG1CQTdCZTtJQThCNUJDLGFBQWEsRUFBRSxxQkE5QmE7SUErQjVCQyxTQUFTLEVBQUUsaUJBL0JpQjtJQWlDNUJDLFdBQVcsRUFBRSxtQkFqQ2U7SUFtQzVCQyxNQUFNLEVBQUUsY0FuQ29CO0lBcUM1QkMsZUFBZSxFQUFFLHVCQXJDVztJQXVDNUJDLDZCQUE2QixFQUFFLHFDQXZDSDtJQXdDNUJDLGlDQUFpQyxFQUFFLHlDQXhDUDtJQXlDNUJDLDRCQUE0QixFQUFFO0VBekNGLENBQTlCOztFQTRDQSxJQUFJLENBQUN2QyxlQUFBLENBQUV3QyxHQUFGLENBQU0xQixxQkFBTixFQUE2QkYsYUFBN0IsQ0FBTCxFQUFrRDtJQUNoRCxNQUFNLElBQUlULGNBQUEsQ0FBT3NDLG1CQUFYLENBQWdDLDJCQUEwQjdCLGFBQWMsS0FBekMsR0FDbEMsUUFBT1osZUFBQSxDQUFFMEMsSUFBRixDQUFPNUIscUJBQVAsQ0FBOEIsMEJBRGxDLENBQU47RUFFRDs7RUFDRCxPQUFPLE1BQU0sS0FBS0EscUJBQXFCLENBQUNGLGFBQUQsQ0FBMUIsRUFBMkNDLElBQTNDLENBQWI7QUFDRCxDQWxERDs7ZUFvRGV2QixVIn0=
83
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHRlbnNpb25zIiwiZXhlY3V0ZSIsInNjcmlwdCIsImFyZ3MiLCJtYXRjaCIsImxvZyIsImluZm8iLCJyZXBsYWNlIiwidHJpbSIsImV4ZWN1dGVNb2JpbGUiLCJfIiwiaXNBcnJheSIsImlzV2ViQ29udGV4dCIsImVycm9ycyIsIk5vdEltcGxlbWVudGVkRXJyb3IiLCJlbmRwb2ludCIsImNocm9tZWRyaXZlciIsImp3cHJveHkiLCJkb3duc3RyZWFtUHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiY29tbWFuZCIsIm1vYmlsZUNvbW1hbmQiLCJvcHRzIiwibW9iaWxlQ29tbWFuZHNNYXBwaW5nIiwic2hlbGwiLCJleGVjRW11Q29uc29sZUNvbW1hbmQiLCJzdGFydExvZ3NCcm9hZGNhc3QiLCJzdG9wTG9nc0Jyb2FkY2FzdCIsImNoYW5nZVBlcm1pc3Npb25zIiwiZ2V0UGVybWlzc2lvbnMiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwic2Vuc29yU2V0IiwiZ2V0RGV2aWNlVGltZSIsInN0YXJ0U2NyZWVuU3RyZWFtaW5nIiwic3RvcFNjcmVlblN0cmVhbWluZyIsImdldE5vdGlmaWNhdGlvbnMiLCJsaXN0U21zIiwicHVzaEZpbGUiLCJwdWxsRmlsZSIsInB1bGxGb2xkZXIiLCJkZWxldGVGaWxlIiwiaXNBcHBJbnN0YWxsZWQiLCJxdWVyeUFwcFN0YXRlIiwiYWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJ0ZXJtaW5hdGVBcHAiLCJpbnN0YWxsQXBwIiwiY2xlYXJBcHAiLCJzdGFydFNlcnZpY2UiLCJzdG9wU2VydmljZSIsInN0YXJ0QWN0aXZpdHkiLCJicm9hZGNhc3QiLCJnZXRDb250ZXh0cyIsInVubG9jayIsInJlZnJlc2hHcHNDYWNoZSIsInN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwiaXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nIiwic3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImhhcyIsIlVua25vd25Db21tYW5kRXJyb3IiLCJrZXlzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2V4ZWN1dGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycywgUFJPVE9DT0xTIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5cbmNvbnN0IGV4dGVuc2lvbnMgPSB7fTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoc2NyaXB0LCBhcmdzKSB7XG4gIGlmIChzY3JpcHQubWF0Y2goL15tb2JpbGU6LykpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBFeGVjdXRpbmcgbmF0aXZlIGNvbW1hbmQgJyR7c2NyaXB0fSdgKTtcbiAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgvXm1vYmlsZTovLCAnJykudHJpbSgpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4ZWN1dGVNb2JpbGUoc2NyaXB0LCBfLmlzQXJyYXkoYXJncykgPyBhcmdzWzBdIDogYXJncyk7XG4gIH1cbiAgaWYgKCF0aGlzLmlzV2ViQ29udGV4dCgpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cbiAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLmNocm9tZWRyaXZlci5qd3Byb3h5LmRvd25zdHJlYW1Qcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1BcbiAgICA/ICcvZXhlY3V0ZSdcbiAgICA6ICcvZXhlY3V0ZS9zeW5jJztcbiAgcmV0dXJuIGF3YWl0IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZChlbmRwb2ludCwgJ1BPU1QnLCB7XG4gICAgc2NyaXB0LFxuICAgIGFyZ3MsXG4gIH0pO1xufTtcblxuZXh0ZW5zaW9ucy5leGVjdXRlTW9iaWxlID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU1vYmlsZSAobW9iaWxlQ29tbWFuZCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG1vYmlsZUNvbW1hbmRzTWFwcGluZyA9IHtcbiAgICBzaGVsbDogJ21vYmlsZVNoZWxsJyxcblxuICAgIGV4ZWNFbXVDb25zb2xlQ29tbWFuZDogJ21vYmlsZUV4ZWNFbXVDb25zb2xlQ29tbWFuZCcsXG5cbiAgICBzdGFydExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdGFydExvZ3NCcm9hZGNhc3QnLFxuICAgIHN0b3BMb2dzQnJvYWRjYXN0OiAnbW9iaWxlU3RvcExvZ3NCcm9hZGNhc3QnLFxuXG4gICAgY2hhbmdlUGVybWlzc2lvbnM6ICdtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucycsXG4gICAgZ2V0UGVybWlzc2lvbnM6ICdtb2JpbGVHZXRQZXJtaXNzaW9ucycsXG5cbiAgICBwZXJmb3JtRWRpdG9yQWN0aW9uOiAnbW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbicsXG5cbiAgICBzZW5zb3JTZXQ6ICdzZW5zb3JTZXQnLFxuXG4gICAgZ2V0RGV2aWNlVGltZTogJ21vYmlsZUdldERldmljZVRpbWUnLFxuXG4gICAgc3RhcnRTY3JlZW5TdHJlYW1pbmc6ICdtb2JpbGVTdGFydFNjcmVlblN0cmVhbWluZycsXG4gICAgc3RvcFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0b3BTY3JlZW5TdHJlYW1pbmcnLFxuXG4gICAgZ2V0Tm90aWZpY2F0aW9uczogJ21vYmlsZUdldE5vdGlmaWNhdGlvbnMnLFxuXG4gICAgbGlzdFNtczogJ21vYmlsZUxpc3RTbXMnLFxuXG4gICAgcHVzaEZpbGU6ICdtb2JpbGVQdXNoRmlsZScsXG4gICAgcHVsbEZpbGU6ICdtb2JpbGVQdWxsRmlsZScsXG4gICAgcHVsbEZvbGRlcjogJ21vYmlsZVB1bGxGb2xkZXInLFxuICAgIGRlbGV0ZUZpbGU6ICdtb2JpbGVEZWxldGVGaWxlJyxcblxuICAgIGlzQXBwSW5zdGFsbGVkOiAnbW9iaWxlSXNBcHBJbnN0YWxsZWQnLFxuICAgIHF1ZXJ5QXBwU3RhdGU6ICdtb2JpbGVRdWVyeUFwcFN0YXRlJyxcbiAgICBhY3RpdmF0ZUFwcDogJ21vYmlsZUFjdGl2YXRlQXBwJyxcbiAgICByZW1vdmVBcHA6ICdtb2JpbGVSZW1vdmVBcHAnLFxuICAgIHRlcm1pbmF0ZUFwcDogJ21vYmlsZVRlcm1pbmF0ZUFwcCcsXG4gICAgaW5zdGFsbEFwcDogJ21vYmlsZUluc3RhbGxBcHAnLFxuICAgIGNsZWFyQXBwOiAnbW9iaWxlQ2xlYXJBcHAnLFxuXG4gICAgc3RhcnRTZXJ2aWNlOiAnbW9iaWxlU3RhcnRTZXJ2aWNlJyxcbiAgICBzdG9wU2VydmljZTogJ21vYmlsZVN0b3BTZXJ2aWNlJyxcbiAgICBzdGFydEFjdGl2aXR5OiAnbW9iaWxlU3RhcnRBY3Rpdml0eScsXG4gICAgYnJvYWRjYXN0OiAnbW9iaWxlQnJvYWRjYXN0JyxcblxuICAgIGdldENvbnRleHRzOiAnbW9iaWxlR2V0Q29udGV4dHMnLFxuXG4gICAgdW5sb2NrOiAnbW9iaWxlVW5sb2NrJyxcblxuICAgIHJlZnJlc2hHcHNDYWNoZTogJ21vYmlsZVJlZnJlc2hHcHNDYWNoZScsXG5cbiAgICBzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgICBpc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmc6ICdtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmcnLFxuICAgIHN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmc6ICdtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nJyxcbiAgfTtcblxuICBpZiAoIV8uaGFzKG1vYmlsZUNvbW1hbmRzTWFwcGluZywgbW9iaWxlQ29tbWFuZCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLlVua25vd25Db21tYW5kRXJyb3IoYFVua25vd24gbW9iaWxlIGNvbW1hbmQgXCIke21vYmlsZUNvbW1hbmR9XCIuIGAgK1xuICAgICAgYE9ubHkgJHtfLmtleXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nKX0gY29tbWFuZHMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgdGhpc1ttb2JpbGVDb21tYW5kc01hcHBpbmdbbW9iaWxlQ29tbWFuZF1dKG9wdHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUcsRUFBbkI7O0FBRUFBLFVBQVUsQ0FBQ0MsT0FBWCxHQUFxQixlQUFlQSxPQUFmLENBQXdCQyxNQUF4QixFQUFnQ0MsSUFBaEMsRUFBc0M7RUFDekQsSUFBSUQsTUFBTSxDQUFDRSxLQUFQLENBQWEsVUFBYixDQUFKLEVBQThCO0lBQzVCLEtBQUtDLEdBQUwsQ0FBU0MsSUFBVCxDQUFlLDZCQUE0QkosTUFBTyxHQUFsRDtJQUNBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0ssT0FBUCxDQUFlLFVBQWYsRUFBMkIsRUFBM0IsRUFBK0JDLElBQS9CLEVBQVQ7SUFDQSxPQUFPLE1BQU0sS0FBS0MsYUFBTCxDQUFtQlAsTUFBbkIsRUFBMkJRLGVBQUEsQ0FBRUMsT0FBRixDQUFVUixJQUFWLElBQWtCQSxJQUFJLENBQUMsQ0FBRCxDQUF0QixHQUE0QkEsSUFBdkQsQ0FBYjtFQUNEOztFQUNELElBQUksQ0FBQyxLQUFLUyxZQUFMLEVBQUwsRUFBMEI7SUFDeEIsTUFBTSxJQUFJQyxjQUFBLENBQU9DLG1CQUFYLEVBQU47RUFDRDs7RUFDRCxNQUFNQyxRQUFRLEdBQUcsS0FBS0MsWUFBTCxDQUFrQkMsT0FBbEIsQ0FBMEJDLGtCQUExQixLQUFpREMsaUJBQUEsQ0FBVUMsT0FBM0QsR0FDYixVQURhLEdBRWIsZUFGSjtFQUdBLE9BQU8sTUFBTSxLQUFLSixZQUFMLENBQWtCQyxPQUFsQixDQUEwQkksT0FBMUIsQ0FBa0NOLFFBQWxDLEVBQTRDLE1BQTVDLEVBQW9EO0lBQy9EYixNQUQrRDtJQUUvREM7RUFGK0QsQ0FBcEQsQ0FBYjtBQUlELENBaEJEOztBQWtCQUgsVUFBVSxDQUFDUyxhQUFYLEdBQTJCLGVBQWVBLGFBQWYsQ0FBOEJhLGFBQTlCLEVBQTZDQyxJQUFJLEdBQUcsRUFBcEQsRUFBd0Q7RUFDakYsTUFBTUMscUJBQXFCLEdBQUc7SUFDNUJDLEtBQUssRUFBRSxhQURxQjtJQUc1QkMscUJBQXFCLEVBQUUsNkJBSEs7SUFLNUJDLGtCQUFrQixFQUFFLDBCQUxRO0lBTTVCQyxpQkFBaUIsRUFBRSx5QkFOUztJQVE1QkMsaUJBQWlCLEVBQUUseUJBUlM7SUFTNUJDLGNBQWMsRUFBRSxzQkFUWTtJQVc1QkMsbUJBQW1CLEVBQUUsMkJBWE87SUFhNUJDLFNBQVMsRUFBRSxXQWJpQjtJQWU1QkMsYUFBYSxFQUFFLHFCQWZhO0lBaUI1QkMsb0JBQW9CLEVBQUUsNEJBakJNO0lBa0I1QkMsbUJBQW1CLEVBQUUsMkJBbEJPO0lBb0I1QkMsZ0JBQWdCLEVBQUUsd0JBcEJVO0lBc0I1QkMsT0FBTyxFQUFFLGVBdEJtQjtJQXdCNUJDLFFBQVEsRUFBRSxnQkF4QmtCO0lBeUI1QkMsUUFBUSxFQUFFLGdCQXpCa0I7SUEwQjVCQyxVQUFVLEVBQUUsa0JBMUJnQjtJQTJCNUJDLFVBQVUsRUFBRSxrQkEzQmdCO0lBNkI1QkMsY0FBYyxFQUFFLHNCQTdCWTtJQThCNUJDLGFBQWEsRUFBRSxxQkE5QmE7SUErQjVCQyxXQUFXLEVBQUUsbUJBL0JlO0lBZ0M1QkMsU0FBUyxFQUFFLGlCQWhDaUI7SUFpQzVCQyxZQUFZLEVBQUUsb0JBakNjO0lBa0M1QkMsVUFBVSxFQUFFLGtCQWxDZ0I7SUFtQzVCQyxRQUFRLEVBQUUsZ0JBbkNrQjtJQXFDNUJDLFlBQVksRUFBRSxvQkFyQ2M7SUFzQzVCQyxXQUFXLEVBQUUsbUJBdENlO0lBdUM1QkMsYUFBYSxFQUFFLHFCQXZDYTtJQXdDNUJDLFNBQVMsRUFBRSxpQkF4Q2lCO0lBMEM1QkMsV0FBVyxFQUFFLG1CQTFDZTtJQTRDNUJDLE1BQU0sRUFBRSxjQTVDb0I7SUE4QzVCQyxlQUFlLEVBQUUsdUJBOUNXO0lBZ0Q1QkMsNkJBQTZCLEVBQUUscUNBaERIO0lBaUQ1QkMsaUNBQWlDLEVBQUUseUNBakRQO0lBa0Q1QkMsNEJBQTRCLEVBQUU7RUFsREYsQ0FBOUI7O0VBcURBLElBQUksQ0FBQ2hELGVBQUEsQ0FBRWlELEdBQUYsQ0FBTW5DLHFCQUFOLEVBQTZCRixhQUE3QixDQUFMLEVBQWtEO0lBQ2hELE1BQU0sSUFBSVQsY0FBQSxDQUFPK0MsbUJBQVgsQ0FBZ0MsMkJBQTBCdEMsYUFBYyxLQUF6QyxHQUNsQyxRQUFPWixlQUFBLENBQUVtRCxJQUFGLENBQU9yQyxxQkFBUCxDQUE4QiwwQkFEbEMsQ0FBTjtFQUVEOztFQUNELE9BQU8sTUFBTSxLQUFLQSxxQkFBcUIsQ0FBQ0YsYUFBRCxDQUExQixFQUEyQ0MsSUFBM0MsQ0FBYjtBQUNELENBM0REOztlQTZEZXZCLFUifQ==
@@ -17,6 +17,8 @@ var _path = _interopRequireDefault(require("path"));
17
17
 
18
18
  var _driver = require("appium/driver");
19
19
 
20
+ var _utils = require("../utils");
21
+
20
22
  const CONTAINER_PATH_MARKER = '@';
21
23
  const CONTAINER_PATH_PATTERN = new RegExp(`^${CONTAINER_PATH_MARKER}([^/]+)/(.+)`);
22
24
  const ANDROID_MEDIA_RESCAN_INTENT = 'android.intent.action.MEDIA_SCANNER_SCAN_FILE';
@@ -90,6 +92,13 @@ commands.pullFile = async function pullFile(remotePath) {
90
92
  }
91
93
  };
92
94
 
95
+ commands.mobilePullFile = async function mobilePullFile(opts = {}) {
96
+ const {
97
+ remotePath
98
+ } = (0, _utils.requireArgs)('remotePath', opts);
99
+ return await this.pullFile(remotePath);
100
+ };
101
+
93
102
  commands.pushFile = async function pushFile(remotePath, base64Data) {
94
103
  if (remotePath.endsWith('/')) {
95
104
  throw new _driver.errors.InvalidArgumentError(`It is expected that remote path points to a file and not to a folder. ` + `'${remotePath}' is given instead`);
@@ -139,14 +148,32 @@ commands.pushFile = async function pushFile(remotePath, base64Data) {
139
148
  }
140
149
  };
141
150
 
151
+ commands.mobilePushFile = async function mobilePushFile(opts = {}) {
152
+ const {
153
+ remotePath,
154
+ payload
155
+ } = (0, _utils.requireArgs)(['remotePath', 'payload'], opts);
156
+ return await this.pushFile(remotePath, payload);
157
+ };
158
+
142
159
  commands.pullFolder = async function pullFolder(remotePath) {
143
- let localFolder = await _support.tempDir.path({
144
- prefix: 'appium'
145
- });
146
- await this.adb.pull(remotePath, localFolder);
147
- return (await _support.zip.toInMemoryZip(localFolder, {
148
- encodeToBase64: true
149
- })).toString();
160
+ const tmpRoot = await _support.tempDir.openDir();
161
+
162
+ try {
163
+ await this.adb.pull(remotePath, tmpRoot);
164
+ return (await _support.zip.toInMemoryZip(tmpRoot, {
165
+ encodeToBase64: true
166
+ })).toString();
167
+ } finally {
168
+ await _support.fs.rimraf(tmpRoot);
169
+ }
170
+ };
171
+
172
+ commands.mobilePullFolder = async function mobilePullFolder(opts = {}) {
173
+ const {
174
+ remotePath
175
+ } = (0, _utils.requireArgs)('remotePath', opts);
176
+ return await this.pullFolder(remotePath);
150
177
  };
151
178
 
152
179
  async function deleteFileOrFolder(adb, remotePath) {
@@ -230,4 +257,4 @@ commands.mobileDeleteFile = async function mobileDeleteFile(opts = {}) {
230
257
 
231
258
  var _default = commands;
232
259
  exports.default = _default;
233
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT05UQUlORVJfUEFUSF9NQVJLRVIiLCJDT05UQUlORVJfUEFUSF9QQVRURVJOIiwiUmVnRXhwIiwiQU5EUk9JRF9NRURJQV9SRVNDQU5fSU5URU5UIiwiY29tbWFuZHMiLCJwYXJzZUNvbnRhaW5lclBhdGgiLCJyZW1vdGVQYXRoIiwibWF0Y2giLCJleGVjIiwiRXJyb3IiLCJwYXRoIiwicG9zaXgiLCJyZXNvbHZlIiwic2Nhbk1lZGlhIiwiYWRiIiwibG9nIiwiZGVidWciLCJnZXRBcGlMZXZlbCIsInNoZWxsIiwiZSIsIndhcm4iLCJzdGRlcnIiLCJtZXNzYWdlIiwiZXNjYXBlUGF0aCIsInAiLCJyZXBsYWNlIiwicHVsbEZpbGUiLCJlbmRzV2l0aCIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwidG1wRGVzdGluYXRpb24iLCJzdGFydHNXaXRoIiwicGFja2FnZUlkIiwicGF0aEluQ29udGFpbmVyIiwiYmFzZW5hbWUiLCJlcnJvckFuZFRocm93IiwibG9jYWxGaWxlIiwidGVtcERpciIsInByZWZpeCIsInN1ZmZpeCIsInB1bGwiLCJ1dGlsIiwidG9Jbk1lbW9yeUJhc2U2NCIsInRvU3RyaW5nIiwiZnMiLCJleGlzdHMiLCJ1bmxpbmsiLCJwdXNoRmlsZSIsImJhc2U2NERhdGEiLCJfIiwiaXNBcnJheSIsIkJ1ZmZlciIsImZyb20iLCJjb250ZW50Iiwid3JpdGVGaWxlIiwiZGlybmFtZSIsInB1c2giLCJwdWxsRm9sZGVyIiwibG9jYWxGb2xkZXIiLCJ6aXAiLCJ0b0luTWVtb3J5WmlwIiwiZW5jb2RlVG9CYXNlNjQiLCJkZWxldGVGaWxlT3JGb2xkZXIiLCJwZXJmb3JtUmVtb3RlRnNDaGVjayIsIm9wIiwicnVuQXMiLCJwYXNzRmxhZyIsImNoZWNrQ21kIiwiZnVsbENtZCIsImluY2x1ZGVzIiwiaWduIiwiaXNGaWxlIiwiaXNEaXIiLCJpc1ByZXNlbnQiLCJkc3RQYXRoIiwicGtnSWQiLCJpbmZvIiwiZXhwZWN0c0ZpbGUiLCJtb2JpbGVEZWxldGVGaWxlIiwib3B0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9maWxlLWFjdGlvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCB1dGlsLCB6aXAsIHRlbXBEaXIgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVycm9ycyB9IGZyb20gJ2FwcGl1bS9kcml2ZXInO1xuXG5cbmNvbnN0IENPTlRBSU5FUl9QQVRIX01BUktFUiA9ICdAJztcbi8vIGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvUExkQjBHLzJcbmNvbnN0IENPTlRBSU5FUl9QQVRIX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGBeJHtDT05UQUlORVJfUEFUSF9NQVJLRVJ9KFteL10rKS8oLispYCk7XG5jb25zdCBBTkRST0lEX01FRElBX1JFU0NBTl9JTlRFTlQgPSAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1FRElBX1NDQU5ORVJfU0NBTl9GSUxFJztcblxuXG5jb25zdCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFBhcnNlcyB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIHBhdGggZnJvbSB0aGUgZ2l2ZW4gdmFsdWVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgcHJlZm9ybWF0dGVkIHJlbW90ZSBwYXRoLCB3aGljaCBsb29rcyBsaWtlXG4gKiBgQG15LmFwcC5pZC9teS9wYXRoYFxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEFuIGFycmF5LCB3aGVyZSB0aGUgZmlyc3QgaXRlbSBpcyB0aGUgcGFyc2VkIHBhY2thZ2VcbiAqIGlkZW50aWZpZXIgYW5kIHRoZSBzZWNvbmQgb25lIGlzIHRoZSBhY3R1YWwgZGVzdGluYXRpb24gcGF0aCBpbnNpZGUgdGhlIHBhY2thZ2UuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGdpdmVuIHN0cmluZyBjYW5ub3QgYmUgcGFyc2VkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29udGFpbmVyUGF0aCAocmVtb3RlUGF0aCkge1xuICBjb25zdCBtYXRjaCA9IENPTlRBSU5FUl9QQVRIX1BBVFRFUk4uZXhlYyhyZW1vdGVQYXRoKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSXQgaXMgZXhwZWN0ZWQgdGhhdCBwYWNrYWdlIGlkZW50aWZpZXIgaXMgc2VwYXJhdGVkIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggd2l0aCBhIHNpbmdsZSBzbGFzaC4gYCArXG4gICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICByZXR1cm4gW21hdGNoWzFdLCBwYXRoLnBvc2l4LnJlc29sdmUoYC9kYXRhL2RhdGEvJHttYXRjaFsxXX1gLCBtYXRjaFsyXSldO1xufVxuXG4vKipcbiAqIFNjYW5zIHRoZSBnaXZlbiBmaWxlL2ZvbGRlciBvbiB0aGUgcmVtb3RlIGRldmljZVxuICogYW5kIGFkZHMgbWF0Y2hpbmcgaXRlbXMgdG8gdGhlIGRldmljZSdzIG1lZGlhIGxpYnJhcnkuXG4gKiBFeGNlcHRpb25zIGFyZSBpZ25vcmVkIGFuZCB3cml0dGVuIGludG8gdGhlIGxvZy5cbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiIEFEQiBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3Q/fSBsb2cgTG9nZ2VyIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZmlsZS9mb2xkZXIgcGF0aCBvbiB0aGUgcmVtb3RlIGRldmljZVxuICovXG5hc3luYyBmdW5jdGlvbiBzY2FuTWVkaWEgKGFkYiwgcmVtb3RlUGF0aCwgbG9nID0gbnVsbCkge1xuICBsb2c/LmRlYnVnKGBQZXJmb3JtaW5nIG1lZGlhIHNjYW4gb2YgJyR7cmVtb3RlUGF0aH0nYCk7XG4gIHRyeSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE2MTg0XG4gICAgaWYgKGF3YWl0IGFkYi5nZXRBcGlMZXZlbCgpID49IDI5KSB7XG4gICAgICBhd2FpdCBhZGIuc2Nhbk1lZGlhKHJlbW90ZVBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoW1xuICAgICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICAgJy1hJywgQU5EUk9JRF9NRURJQV9SRVNDQU5fSU5URU5ULFxuICAgICAgICAnLWQnLCBgZmlsZTovLyR7cmVtb3RlUGF0aH1gXG4gICAgICBdKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2c/Lndhcm4oYElnbm9yaW5nIGFuIHVuZXhwZWN0ZWQgZXJyb3IgdXBvbiBtZWRpYSBzY2FubmluZyBvZiAnJHtyZW1vdGVQYXRofSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogQSBzbWFsbCBoZWxwZXIsIHdoaWNoIGVzY2FwZXMgc2luZ2xlIHF1b3RlcyBpbiBwYXRocyxcbiAqIHNvIHRoZXkgYXJlIHNhZmUgdG8gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBvZiBzaGVsbCBjb21tYW5kc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwIFRoZSBpbml0aWFsIHJlbW90ZSBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZXNjYXBlZCBwYXRoIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVBhdGggKHApIHtcbiAgcmV0dXJuIHAucmVwbGFjZSgvJy9nLCBgXFxcXCdgKTtcbn1cblxuLyoqXG4gKiBQdWxscyBhIHJlbW90ZSBmaWxlIGZyb20gdGhlIGRldmljZS5cbiAqIEl0IGlzIHJlcXVpcmVkLCB0aGF0IGEgcGFja2FnZSBoYXMgZGVidWdnaW5nIGZsYWcgZW5hYmxlZFxuICogaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZmlsZVxuICogb3IgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIHBhdGgsIHdoaWNoIHBvaW50cyB0byBhbiBpdGVtIGluc2lkZSBhcHAgYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgZW5jb2RlZCBjb250ZW50IG9mIHRoZSBwdWxsZWQgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwdWxsIG9wZXJhdGlvbiBmYWlsZWRcbiAqL1xuY29tbWFuZHMucHVsbEZpbGUgPSBhc3luYyBmdW5jdGlvbiBwdWxsRmlsZSAocmVtb3RlUGF0aCkge1xuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgaXMgZXhwZWN0ZWQgdGhhdCByZW1vdGUgcGF0aCBwb2ludHMgdG8gYSBmaWxlIGFuZCBub3QgdG8gYSBmb2xkZXIuIGAgK1xuICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgbGV0IHRtcERlc3RpbmF0aW9uID0gbnVsbDtcbiAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgY29uc3QgW3BhY2thZ2VJZCwgcGF0aEluQ29udGFpbmVyXSA9IHBhcnNlQ29udGFpbmVyUGF0aChyZW1vdGVQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9Jy4gV2lsbCBnZXQgdGhlIGRhdGEgZnJvbSAnJHtwYXRoSW5Db250YWluZXJ9J2ApO1xuICAgIHRtcERlc3RpbmF0aW9uID0gYC9kYXRhL2xvY2FsL3RtcC8ke3BhdGgucG9zaXguYmFzZW5hbWUocGF0aEluQ29udGFpbmVyKX1gO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3J1bi1hcycsIHBhY2thZ2VJZCwgYGNobW9kIDc3NyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BdKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgYGNwIC1mICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nICcke2VzY2FwZVBhdGgodG1wRGVzdGluYXRpb24pfSdgXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWNjZXNzIHRoZSBjb250YWluZXIgb2YgJyR7cGFja2FnZUlkfScgYXBwbGljYXRpb24uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYElzIHRoZSBhcHBsaWNhdGlvbiBpbnN0YWxsZWQgYW5kIGhhcyAnZGVidWdnYWJsZScgYnVpbGQgb3B0aW9uIHNldCB0byB0cnVlPyBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGxvY2FsRmlsZSA9IGF3YWl0IHRlbXBEaXIucGF0aCh7cHJlZml4OiAnYXBwaXVtJywgc3VmZml4OiAnLnRtcCd9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdWxsKHRtcERlc3RpbmF0aW9uIHx8IHJlbW90ZVBhdGgsIGxvY2FsRmlsZSk7XG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQobG9jYWxGaWxlKSkudG9TdHJpbmcoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgICBpZiAodG1wRGVzdGluYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncm0nLCAnLWYnLCB0bXBEZXN0aW5hdGlvbl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQdXNoZWQgdGhlIGdpdmVuIGRhdGEgdG8gYSBmaWxlIG9uIHRoZSByZW1vdGUgZGV2aWNlXG4gKiBJdCBpcyByZXF1aXJlZCwgdGhhdCBhIHBhY2thZ2UgaGFzIGRlYnVnZ2luZyBmbGFnIGVuYWJsZWRcbiAqIGluIG9yZGVyIHRvIGFjY2VzcyBpdHMgZmlsZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZpbGUgb3JcbiAqIGEgZmlsZSBpbnNpZGUgYSBwYWNrYWdlIGJ1bmRsZVxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2U2NERhdGEgQmFzZTY0IGVuY29kZWQgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZVxuICogcmVtb3RlIGZpbGUuIFRoZSByZW1vdGUgZmlsZSB3aWxsIGJlIHNpbGVudGx5IG92ZXJyaWRkZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHB1c2hpbmcgdGhlIGRhdGFcbiAqL1xuY29tbWFuZHMucHVzaEZpbGUgPSBhc3luYyBmdW5jdGlvbiBwdXNoRmlsZSAocmVtb3RlUGF0aCwgYmFzZTY0RGF0YSkge1xuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZpbGUgYW5kIG5vdCB0byBhIGZvbGRlci4gYCArXG4gICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy50bXAnfSk7XG4gIGlmIChfLmlzQXJyYXkoYmFzZTY0RGF0YSkpIHtcbiAgICAvLyBzb21lIGNsaWVudHMgKGFoZW0pIGphdmEsIHNlbmQgYSBieXRlIGFycmF5IGVuY29kaW5nIHV0ZjggY2hhcmFjdGVyc1xuICAgIC8vIGluc3RlYWQgb2YgYSBzdHJpbmcsIHdoaWNoIHdvdWxkIGJlIGluZmluaXRlbHkgYmV0dGVyIVxuICAgIGJhc2U2NERhdGEgPSBCdWZmZXIuZnJvbShiYXNlNjREYXRhKS50b1N0cmluZygndXRmOCcpO1xuICB9XG4gIGNvbnN0IGNvbnRlbnQgPSBCdWZmZXIuZnJvbShiYXNlNjREYXRhLCAnYmFzZTY0Jyk7XG4gIGxldCB0bXBEZXN0aW5hdGlvbiA9IG51bGw7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGxvY2FsRmlsZSwgY29udGVudC50b1N0cmluZygnYmluYXJ5JyksICdiaW5hcnknKTtcbiAgICBpZiAocmVtb3RlUGF0aC5zdGFydHNXaXRoKENPTlRBSU5FUl9QQVRIX01BUktFUikpIHtcbiAgICAgIGNvbnN0IFtwYWNrYWdlSWQsIHBhdGhJbkNvbnRhaW5lcl0gPSBwYXJzZUNvbnRhaW5lclBhdGgocmVtb3RlUGF0aCk7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9Jy4gYCArXG4gICAgICAgIGBXaWxsIHB1dCB0aGUgZGF0YSBpbnRvICcke3BhdGhJbkNvbnRhaW5lcn0nYCk7XG4gICAgICB0bXBEZXN0aW5hdGlvbiA9IGAvZGF0YS9sb2NhbC90bXAvJHtwYXRoLnBvc2l4LmJhc2VuYW1lKHBhdGhJbkNvbnRhaW5lcil9YDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFxuICAgICAgICAgIFsncnVuLWFzJywgcGFja2FnZUlkLCBgbWtkaXIgLXAgJyR7ZXNjYXBlUGF0aChwYXRoLnBvc2l4LmRpcm5hbWUocGF0aEluQ29udGFpbmVyKSl9J2BdXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgdG91Y2ggJyR7ZXNjYXBlUGF0aChwYXRoSW5Db250YWluZXIpfSdgXSk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgY2htb2QgNzc3ICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nYF0pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsRmlsZSwgdG1wRGVzdGluYXRpb24pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgICBgY3AgLWYgJyR7ZXNjYXBlUGF0aCh0bXBEZXN0aW5hdGlvbil9JyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BcbiAgICAgICAgXSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY2Nlc3MgdGhlIGNvbnRhaW5lciBvZiAnJHtwYWNrYWdlSWR9JyBhcHBsaWNhdGlvbi4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBJcyB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVkIGFuZCBoYXMgJ2RlYnVnZ2FibGUnIGJ1aWxkIG9wdGlvbiBzZXQgdG8gdHJ1ZT8gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFkYiBwdXNoIGNyZWF0ZXMgZm9sZGVycyBhbmQgb3ZlcndyaXRlcyBleGlzdGluZyBmaWxlcy5cbiAgICAgIGF3YWl0IHRoaXMuYWRiLnB1c2gobG9jYWxGaWxlLCByZW1vdGVQYXRoKTtcblxuICAgICAgLy8gaWYgd2UgaGF2ZSBwdXNoZWQgYSBmaWxlLCBpdCBtaWdodCBiZSBhIG1lZGlhIGZpbGUsIHNvIGVuc3VyZSB0aGF0XG4gICAgICAvLyBhcHBzIGtub3cgYWJvdXQgaXRcbiAgICAgIGF3YWl0IHNjYW5NZWRpYSh0aGlzLmFkYiwgcmVtb3RlUGF0aCwgdGhpcy5sb2cpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgICBpZiAodG1wRGVzdGluYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncm0nLCAnLWYnLCB0bXBEZXN0aW5hdGlvbl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQdWxscyB0aGUgd2hvbGUgZm9sZGVyIGZyb20gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIGEgZm9sZGVyIG9uIHRoZVxuICogcmVtb3RlIGRldmljZSBvciBhIGZvbGRlciBpbnNpZGUgYW4gYXBwbGljYXRpb24gYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBhbmQgemlwcGVkIGNvbnRlbnQgb2YgdGhlIGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgZ2V0dGluZyB0aGUgZm9sZGVyIGNvbnRlbnRcbiAqL1xuY29tbWFuZHMucHVsbEZvbGRlciA9IGFzeW5jIGZ1bmN0aW9uIHB1bGxGb2xkZXIgKHJlbW90ZVBhdGgpIHtcbiAgbGV0IGxvY2FsRm9sZGVyID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nfSk7XG4gIGF3YWl0IHRoaXMuYWRiLnB1bGwocmVtb3RlUGF0aCwgbG9jYWxGb2xkZXIpO1xuICByZXR1cm4gKGF3YWl0IHppcC50b0luTWVtb3J5WmlwKGxvY2FsRm9sZGVyLCB7XG4gICAgZW5jb2RlVG9CYXNlNjQ6IHRydWUsXG4gIH0pKS50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBEZWxldGVzIHRoZSBnaXZlbiBmb2xkZXIgb3IgZmlsZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZvbGRlclxuICogb3IgZmlsZSAoZm9sZGVyIG5hbWVzIG11c3QgZW5kIHdpdGggYSBzaW5nbGUgc2xhc2gpXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHByb3ZpZGVkIHJlbW90ZSBwYXRoIGlzIGludmFsaWQgb3JcbiAqIHRoZSBwYWNrYWdlIGNvbnRlbnQgY2Fubm90IGJlIGFjY2Vzc2VkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSByZW1vdGUgcGF0aCBpcyB2YWxpZCwgYnV0IHRoZSByZW1vdGUgcGF0aCBkb2VzIG5vdCBleGlzdFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm4gYGZhbHNlYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRmlsZU9yRm9sZGVyIChhZGIsIHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgcGVyZm9ybVJlbW90ZUZzQ2hlY2sgPSBhc3luYyAocCwgb3AsIHJ1bkFzID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBjb25zdCBjaGVja0NtZCA9IGBbIC0ke29wfSAnJHtlc2NhcGVQYXRoKHApfScgXSAmJiBlY2hvICR7cGFzc0ZsYWd9YDtcbiAgICBjb25zdCBmdWxsQ21kID0gcnVuQXMgPyBgcnVuLWFzICR7cnVuQXN9ICR7Y2hlY2tDbWR9YCA6IGNoZWNrQ21kO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gXy5pbmNsdWRlcyhhd2FpdCBhZGIuc2hlbGwoW2Z1bGxDbWRdKSwgcGFzc0ZsYWcpO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaXNGaWxlID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2YnLCBydW5Bcyk7XG4gIGNvbnN0IGlzRGlyID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2QnLCBydW5Bcyk7XG4gIGNvbnN0IGlzUHJlc2VudCA9IGFzeW5jIChwLCBydW5BcyA9IG51bGwpID0+IGF3YWl0IHBlcmZvcm1SZW1vdGVGc0NoZWNrKHAsICdlJywgcnVuQXMpO1xuXG4gIGxldCBkc3RQYXRoID0gcmVtb3RlUGF0aDtcbiAgbGV0IHBrZ0lkID0gbnVsbDtcbiAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgY29uc3QgW3BhY2thZ2VJZCwgcGF0aEluQ29udGFpbmVyXSA9IHBhcnNlQ29udGFpbmVyUGF0aChyZW1vdGVQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9J2ApO1xuICAgIGRzdFBhdGggPSBwYXRoSW5Db250YWluZXI7XG4gICAgcGtnSWQgPSBwYWNrYWdlSWQ7XG4gIH1cblxuICBpZiAocGtnSWQpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFsncnVuLWFzJywgcGtnSWQsICdscyddKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWNjZXNzIHRoZSBjb250YWluZXIgb2YgJyR7cGtnSWR9JyBhcHBsaWNhdGlvbi4gYCArXG4gICAgICAgIGBJcyB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVkIGFuZCBoYXMgJ2RlYnVnZ2FibGUnIGJ1aWxkIG9wdGlvbiBzZXQgdG8gdHJ1ZT8gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFhd2FpdCBpc1ByZXNlbnQoZHN0UGF0aCwgcGtnSWQpKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGRvZXMgbm90IGV4aXN0LiBQZXJoYXBzLCBhbHJlYWR5IGRlbGV0ZWQ/YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0c0ZpbGUgPSAhcmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpO1xuICBpZiAoZXhwZWN0c0ZpbGUgJiYgIWF3YWl0IGlzRmlsZShkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgaXRlbSBhdCAnJHtkc3RQYXRofScgaXMgbm90IGEgZmlsZWApO1xuICB9IGVsc2UgaWYgKCFleHBlY3RzRmlsZSAmJiAhYXdhaXQgaXNEaXIoZHN0UGF0aCwgcGtnSWQpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGlzIG5vdCBhIGZvbGRlcmApO1xuICB9XG5cbiAgaWYgKHBrZ0lkKSB7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFxuICAgICAgWydydW4tYXMnLCBwa2dJZCwgYHJtIC1mJHtleHBlY3RzRmlsZSA/ICcnIDogJ3InfSAnJHtlc2NhcGVQYXRoKGRzdFBhdGgpfSdgXSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWRiLnNoZWxsKFsncm0nLCBgLWYke2V4cGVjdHNGaWxlID8gJycgOiAncid9YCwgZHN0UGF0aF0pO1xuICB9XG4gIGlmIChhd2FpdCBpc1ByZXNlbnQoZHN0UGF0aCwgcGtnSWQpKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIHN0aWxsIGV4aXN0cyBhZnRlciBiZWluZyBkZWxldGVkLiBgICtcbiAgICAgIGBJcyBpdCB3cml0YWJsZT9gKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZWxldGVGaWxlT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlbW90ZSBmaWxlXG4gKiBvciBhIGZpbGUgaW5zaWRlIGFuIGFwcGxpY2F0aW9uIGJ1bmRsZSAoZm9yIGV4YW1wbGUgYEBteS5hcHAuaWQvcGF0aC9pbi9idW5kbGVgKVxuICovXG5cbi8qKlxuICogRGVsZXRlcyBhIGZpbGUgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge0RlbGV0ZUZpbGVPcHRzfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSBwYXRoIHRvIGEgcmVtb3RlIGZpbGUgaXMgdmFsaWQsIGJ1dCB0aGUgZmlsZSBpdHNlbGYgZG9lcyBub3QgZXhpc3RcbiAqIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXJndW1lbnQgaXMgaW52YWxpZCBvciB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGVcbiAqIGRlbGV0aW5nIHRoZSBmaWxlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlbGV0ZUZpbGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEZWxldGVGaWxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3JlbW90ZVBhdGh9ID0gb3B0cztcbiAgaWYgKCFyZW1vdGVQYXRoKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgVGhlICdyZW1vdGVQYXRoJyBhcmd1bWVudCBpcyBtYW5kYXRvcnlgKTtcbiAgfVxuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgIGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZvbGRlciBhbmQgbm90IHRvIGEgZmlsZS4gYCArXG4gICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgZGVsZXRlRmlsZU9yRm9sZGVyKHRoaXMuYWRiLCByZW1vdGVQYXRoKTtcbn07XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxxQkFBcUIsR0FBRyxHQUE5QjtBQUVBLE1BQU1DLHNCQUFzQixHQUFHLElBQUlDLE1BQUosQ0FBWSxJQUFHRixxQkFBc0IsY0FBckMsQ0FBL0I7QUFDQSxNQUFNRywyQkFBMkIsR0FBRywrQ0FBcEM7QUFHQSxNQUFNQyxRQUFRLEdBQUcsRUFBakI7OztBQVdBLFNBQVNDLGtCQUFULENBQTZCQyxVQUE3QixFQUF5QztFQUN2QyxNQUFNQyxLQUFLLEdBQUdOLHNCQUFzQixDQUFDTyxJQUF2QixDQUE0QkYsVUFBNUIsQ0FBZDs7RUFDQSxJQUFJLENBQUNDLEtBQUwsRUFBWTtJQUNWLE1BQU0sSUFBSUUsS0FBSixDQUFXLGtHQUFELEdBQ2IsSUFBR0gsVUFBVyxvQkFEWCxDQUFOO0VBRUQ7O0VBQ0QsT0FBTyxDQUFDQyxLQUFLLENBQUMsQ0FBRCxDQUFOLEVBQVdHLGFBQUEsQ0FBS0MsS0FBTCxDQUFXQyxPQUFYLENBQW9CLGNBQWFMLEtBQUssQ0FBQyxDQUFELENBQUksRUFBMUMsRUFBNkNBLEtBQUssQ0FBQyxDQUFELENBQWxELENBQVgsQ0FBUDtBQUNEOztBQVdELGVBQWVNLFNBQWYsQ0FBMEJDLEdBQTFCLEVBQStCUixVQUEvQixFQUEyQ1MsR0FBRyxHQUFHLElBQWpELEVBQXVEO0VBQ3JEQSxHQUFHLFNBQUgsSUFBQUEsR0FBRyxXQUFILFlBQUFBLEdBQUcsQ0FB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
260
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT05UQUlORVJfUEFUSF9NQVJLRVIiLCJDT05UQUlORVJfUEFUSF9QQVRURVJOIiwiUmVnRXhwIiwiQU5EUk9JRF9NRURJQV9SRVNDQU5fSU5URU5UIiwiY29tbWFuZHMiLCJwYXJzZUNvbnRhaW5lclBhdGgiLCJyZW1vdGVQYXRoIiwibWF0Y2giLCJleGVjIiwiRXJyb3IiLCJwYXRoIiwicG9zaXgiLCJyZXNvbHZlIiwic2Nhbk1lZGlhIiwiYWRiIiwibG9nIiwiZGVidWciLCJnZXRBcGlMZXZlbCIsInNoZWxsIiwiZSIsIndhcm4iLCJzdGRlcnIiLCJtZXNzYWdlIiwiZXNjYXBlUGF0aCIsInAiLCJyZXBsYWNlIiwicHVsbEZpbGUiLCJlbmRzV2l0aCIsImVycm9ycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwidG1wRGVzdGluYXRpb24iLCJzdGFydHNXaXRoIiwicGFja2FnZUlkIiwicGF0aEluQ29udGFpbmVyIiwiYmFzZW5hbWUiLCJlcnJvckFuZFRocm93IiwibG9jYWxGaWxlIiwidGVtcERpciIsInByZWZpeCIsInN1ZmZpeCIsInB1bGwiLCJ1dGlsIiwidG9Jbk1lbW9yeUJhc2U2NCIsInRvU3RyaW5nIiwiZnMiLCJleGlzdHMiLCJ1bmxpbmsiLCJtb2JpbGVQdWxsRmlsZSIsIm9wdHMiLCJyZXF1aXJlQXJncyIsInB1c2hGaWxlIiwiYmFzZTY0RGF0YSIsIl8iLCJpc0FycmF5IiwiQnVmZmVyIiwiZnJvbSIsImNvbnRlbnQiLCJ3cml0ZUZpbGUiLCJkaXJuYW1lIiwicHVzaCIsIm1vYmlsZVB1c2hGaWxlIiwicGF5bG9hZCIsInB1bGxGb2xkZXIiLCJ0bXBSb290Iiwib3BlbkRpciIsInppcCIsInRvSW5NZW1vcnlaaXAiLCJlbmNvZGVUb0Jhc2U2NCIsInJpbXJhZiIsIm1vYmlsZVB1bGxGb2xkZXIiLCJkZWxldGVGaWxlT3JGb2xkZXIiLCJwZXJmb3JtUmVtb3RlRnNDaGVjayIsIm9wIiwicnVuQXMiLCJwYXNzRmxhZyIsImNoZWNrQ21kIiwiZnVsbENtZCIsImluY2x1ZGVzIiwiaWduIiwiaXNGaWxlIiwiaXNEaXIiLCJpc1ByZXNlbnQiLCJkc3RQYXRoIiwicGtnSWQiLCJpbmZvIiwiZXhwZWN0c0ZpbGUiLCJtb2JpbGVEZWxldGVGaWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2ZpbGUtYWN0aW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnMsIHV0aWwsIHppcCwgdGVtcERpciB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZXJyb3JzIH0gZnJvbSAnYXBwaXVtL2RyaXZlcic7XG5pbXBvcnQgeyByZXF1aXJlQXJncyB9IGZyb20gJy4uL3V0aWxzJztcblxuXG5jb25zdCBDT05UQUlORVJfUEFUSF9NQVJLRVIgPSAnQCc7XG4vLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL1BMZEIwRy8yXG5jb25zdCBDT05UQUlORVJfUEFUSF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXiR7Q09OVEFJTkVSX1BBVEhfTUFSS0VSfShbXi9dKykvKC4rKWApO1xuY29uc3QgQU5EUk9JRF9NRURJQV9SRVNDQU5fSU5URU5UID0gJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NRURJQV9TQ0FOTkVSX1NDQU5fRklMRSc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBQYXJzZXMgdGhlIGFjdHVhbCBkZXN0aW5hdGlvbiBwYXRoIGZyb20gdGhlIGdpdmVuIHZhbHVlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIHByZWZvcm1hdHRlZCByZW1vdGUgcGF0aCwgd2hpY2ggbG9va3MgbGlrZVxuICogYEBteS5hcHAuaWQvbXkvcGF0aGBcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSwgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgdGhlIHBhcnNlZCBwYWNrYWdlXG4gKiBpZGVudGlmaWVyIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIHBhdGggaW5zaWRlIHRoZSBwYWNrYWdlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBzdHJpbmcgY2Fubm90IGJlIHBhcnNlZFxuICovXG5mdW5jdGlvbiBwYXJzZUNvbnRhaW5lclBhdGggKHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgbWF0Y2ggPSBDT05UQUlORVJfUEFUSF9QQVRURVJOLmV4ZWMocmVtb3RlUGF0aCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEl0IGlzIGV4cGVjdGVkIHRoYXQgcGFja2FnZSBpZGVudGlmaWVyIGlzIHNlcGFyYXRlZCBmcm9tIHRoZSByZWxhdGl2ZSBwYXRoIHdpdGggYSBzaW5nbGUgc2xhc2guIGAgK1xuICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIFttYXRjaFsxXSwgcGF0aC5wb3NpeC5yZXNvbHZlKGAvZGF0YS9kYXRhLyR7bWF0Y2hbMV19YCwgbWF0Y2hbMl0pXTtcbn1cblxuLyoqXG4gKiBTY2FucyB0aGUgZ2l2ZW4gZmlsZS9mb2xkZXIgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqIGFuZCBhZGRzIG1hdGNoaW5nIGl0ZW1zIHRvIHRoZSBkZXZpY2UncyBtZWRpYSBsaWJyYXJ5LlxuICogRXhjZXB0aW9ucyBhcmUgaWdub3JlZCBhbmQgd3JpdHRlbiBpbnRvIHRoZSBsb2cuXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7T2JqZWN0P30gbG9nIExvZ2dlciBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZpbGUvZm9sZGVyIHBhdGggb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2Nhbk1lZGlhIChhZGIsIHJlbW90ZVBhdGgsIGxvZyA9IG51bGwpIHtcbiAgbG9nPy5kZWJ1ZyhgUGVyZm9ybWluZyBtZWRpYSBzY2FuIG9mICcke3JlbW90ZVBhdGh9J2ApO1xuICB0cnkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjE4NFxuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOSkge1xuICAgICAgYXdhaXQgYWRiLnNjYW5NZWRpYShyZW1vdGVQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAgICctYScsIEFORFJPSURfTUVESUFfUkVTQ0FOX0lOVEVOVCxcbiAgICAgICAgJy1kJywgYGZpbGU6Ly8ke3JlbW90ZVBhdGh9YFxuICAgICAgXSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nPy53YXJuKGBJZ25vcmluZyBhbiB1bmV4cGVjdGVkIGVycm9yIHVwb24gbWVkaWEgc2Nhbm5pbmcgb2YgJyR7cmVtb3RlUGF0aH0nOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc21hbGwgaGVscGVyLCB3aGljaCBlc2NhcGVzIHNpbmdsZSBxdW90ZXMgaW4gcGF0aHMsXG4gKiBzbyB0aGV5IGFyZSBzYWZlIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2Ygc2hlbGwgY29tbWFuZHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcCBUaGUgaW5pdGlhbCByZW1vdGUgcGF0aFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVzY2FwZWQgcGF0aCB2YWx1ZVxuICovXG5mdW5jdGlvbiBlc2NhcGVQYXRoIChwKSB7XG4gIHJldHVybiBwLnJlcGxhY2UoLycvZywgYFxcXFwnYCk7XG59XG5cbi8qKlxuICogUHVsbHMgYSByZW1vdGUgZmlsZSBmcm9tIHRoZSBkZXZpY2UuXG4gKiBJdCBpcyByZXF1aXJlZCwgdGhhdCBhIHBhY2thZ2UgaGFzIGRlYnVnZ2luZyBmbGFnIGVuYWJsZWRcbiAqIGluIG9yZGVyIHRvIGFjY2VzcyBpdHMgZmlsZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZpbGVcbiAqIG9yIGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBwYXRoLCB3aGljaCBwb2ludHMgdG8gYW4gaXRlbSBpbnNpZGUgYXBwIGJ1bmRsZVxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IGVuY29kZWQgY29udGVudCBvZiB0aGUgcHVsbGVkIGZpbGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcHVsbCBvcGVyYXRpb24gZmFpbGVkXG4gKi9cbmNvbW1hbmRzLnB1bGxGaWxlID0gYXN5bmMgZnVuY3Rpb24gcHVsbEZpbGUgKHJlbW90ZVBhdGgpIHtcbiAgaWYgKHJlbW90ZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYEl0IGlzIGV4cGVjdGVkIHRoYXQgcmVtb3RlIHBhdGggcG9pbnRzIHRvIGEgZmlsZSBhbmQgbm90IHRvIGEgZm9sZGVyLiBgICtcbiAgICAgIGAnJHtyZW1vdGVQYXRofScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICB9XG4gIGxldCB0bXBEZXN0aW5hdGlvbiA9IG51bGw7XG4gIGlmIChyZW1vdGVQYXRoLnN0YXJ0c1dpdGgoQ09OVEFJTkVSX1BBVEhfTUFSS0VSKSkge1xuICAgIGNvbnN0IFtwYWNrYWdlSWQsIHBhdGhJbkNvbnRhaW5lcl0gPSBwYXJzZUNvbnRhaW5lclBhdGgocmVtb3RlUGF0aCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBwYWNrYWdlIGlkZW50aWZpZXIgJyR7cGFja2FnZUlkfScgZnJvbSAnJHtyZW1vdGVQYXRofScuIFdpbGwgZ2V0IHRoZSBkYXRhIGZyb20gJyR7cGF0aEluQ29udGFpbmVyfSdgKTtcbiAgICB0bXBEZXN0aW5hdGlvbiA9IGAvZGF0YS9sb2NhbC90bXAvJHtwYXRoLnBvc2l4LmJhc2VuYW1lKHBhdGhJbkNvbnRhaW5lcil9YDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydydW4tYXMnLCBwYWNrYWdlSWQsIGBjaG1vZCA3NzcgJyR7ZXNjYXBlUGF0aChwYXRoSW5Db250YWluZXIpfSdgXSk7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgICAgICdydW4tYXMnLCBwYWNrYWdlSWQsXG4gICAgICAgIGBjcCAtZiAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9JyAnJHtlc2NhcGVQYXRoKHRtcERlc3RpbmF0aW9uKX0nYFxuICAgICAgXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjY2VzcyB0aGUgY29udGFpbmVyIG9mICcke3BhY2thZ2VJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBJcyB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVkIGFuZCBoYXMgJ2RlYnVnZ2FibGUnIGJ1aWxkIG9wdGlvbiBzZXQgdG8gdHJ1ZT8gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy50bXAnfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVsbCh0bXBEZXN0aW5hdGlvbiB8fCByZW1vdGVQYXRoLCBsb2NhbEZpbGUpO1xuICAgIHJldHVybiAoYXdhaXQgdXRpbC50b0luTWVtb3J5QmFzZTY0KGxvY2FsRmlsZSkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgICB9XG4gICAgaWYgKHRtcERlc3RpbmF0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3JtJywgJy1mJywgdG1wRGVzdGluYXRpb25dKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gUHVsbEZpbGVPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZmlsZVxuICogb3IgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIHBhdGgsIHdoaWNoIHBvaW50cyB0byBhbiBpdGVtIGluc2lkZSBhbiBhcHAgYnVuZGxlLFxuICogZm9yIGV4YW1wbGUgYEBteS5hcHAuaWQvbXkvcGF0aGAuIEl0IGlzIG1hbmRhdG9yeSBmb3IgdGhlIGFwcCBidW5kbGUgdG8gaGF2ZVxuICogZGVidWdnaW5nIGVuYWJsZWQgaW4gb3JkZXIgdG8gdXNlIHRoZSBsYXR0ZXIgcmVtb3RlUGF0aCBmb3JtYXQuXG4gKi9cblxuLyoqXG4gKiBQdWxscyBhIHJlbW90ZSBmaWxlIGZyb20gdGhlIGRldmljZS5cbiAqXG4gKiBAcGFyYW0ge1B1bGxGaWxlT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge3N0cmluZ30gVGhlIHNhbWUgYXMgYHB1bGxGaWxlYFxuICovXG5jb21tYW5kcy5tb2JpbGVQdWxsRmlsZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVB1bGxGaWxlIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyByZW1vdGVQYXRoIH0gPSByZXF1aXJlQXJncygncmVtb3RlUGF0aCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wdWxsRmlsZShyZW1vdGVQYXRoKTtcbn07XG5cbi8qKlxuICogUHVzaGVzIHRoZSBnaXZlbiBkYXRhIHRvIGEgZmlsZSBvbiB0aGUgcmVtb3RlIGRldmljZVxuICogSXQgaXMgcmVxdWlyZWQsIHRoYXQgYSBwYWNrYWdlIGhhcyBkZWJ1Z2dpbmcgZmxhZyBlbmFibGVkXG4gKiBpbiBvcmRlciB0byBhY2Nlc3MgaXRzIGZpbGVzLlxuICogQWZ0ZXIgYSBmaWxlIGlzIHB1c2hlZCBpdCBnZXRzIGF1dG9tYXRpY2FsbHkgc2Nhbm5lZCBmb3IgcG9zc2libGVcbiAqIG1lZGlhIG9jY3VycmVuY2VzLiBJZiB0aGUgc2NhbiBzdWNjZWVkcyB0aGVuIHRoZSBmaWxlIGlzIGFkZGVkIHRvIHRoZVxuICogbWVkaWEgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZmlsZSBvclxuICogYSBmaWxlIGluc2lkZSBhIHBhY2thZ2UgYnVuZGxlXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZTY0RGF0YSBCYXNlNjQgZW5jb2RlZCBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlXG4gKiByZW1vdGUgZmlsZS4gVGhlIHJlbW90ZSBmaWxlIHdpbGwgYmUgc2lsZW50bHkgb3ZlcnJpZGRlbiBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgcHVzaGluZyB0aGUgZGF0YVxuICovXG5jb21tYW5kcy5wdXNoRmlsZSA9IGFzeW5jIGZ1bmN0aW9uIHB1c2hGaWxlIChyZW1vdGVQYXRoLCBiYXNlNjREYXRhKSB7XG4gIGlmIChyZW1vdGVQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgYEl0IGlzIGV4cGVjdGVkIHRoYXQgcmVtb3RlIHBhdGggcG9pbnRzIHRvIGEgZmlsZSBhbmQgbm90IHRvIGEgZm9sZGVyLiBgICtcbiAgICAgIGAnJHtyZW1vdGVQYXRofScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICApO1xuICB9XG4gIGNvbnN0IGxvY2FsRmlsZSA9IGF3YWl0IHRlbXBEaXIucGF0aCh7cHJlZml4OiAnYXBwaXVtJywgc3VmZml4OiAnLnRtcCd9KTtcbiAgaWYgKF8uaXNBcnJheShiYXNlNjREYXRhKSkge1xuICAgIC8vIHNvbWUgY2xpZW50cyAoYWhlbSkgamF2YSwgc2VuZCBhIGJ5dGUgYXJyYXkgZW5jb2RpbmcgdXRmOCBjaGFyYWN0ZXJzXG4gICAgLy8gaW5zdGVhZCBvZiBhIHN0cmluZywgd2hpY2ggd291bGQgYmUgaW5maW5pdGVseSBiZXR0ZXIhXG4gICAgYmFzZTY0RGF0YSA9IEJ1ZmZlci5mcm9tKGJhc2U2NERhdGEpLnRvU3RyaW5nKCd1dGY4Jyk7XG4gIH1cbiAgY29uc3QgY29udGVudCA9IEJ1ZmZlci5mcm9tKGJhc2U2NERhdGEsICdiYXNlNjQnKTtcbiAgbGV0IHRtcERlc3RpbmF0aW9uID0gbnVsbDtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUobG9jYWxGaWxlLCBjb250ZW50LnRvU3RyaW5nKCdiaW5hcnknKSwgJ2JpbmFyeScpO1xuICAgIGlmIChyZW1vdGVQYXRoLnN0YXJ0c1dpdGgoQ09OVEFJTkVSX1BBVEhfTUFSS0VSKSkge1xuICAgICAgY29uc3QgW3BhY2thZ2VJZCwgcGF0aEluQ29udGFpbmVyXSA9IHBhcnNlQ29udGFpbmVyUGF0aChyZW1vdGVQYXRoKTtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBpZGVudGlmaWVyICcke3BhY2thZ2VJZH0nIGZyb20gJyR7cmVtb3RlUGF0aH0nLiBgICtcbiAgICAgICAgYFdpbGwgcHV0IHRoZSBkYXRhIGludG8gJyR7cGF0aEluQ29udGFpbmVyfSdgKTtcbiAgICAgIHRtcERlc3RpbmF0aW9uID0gYC9kYXRhL2xvY2FsL3RtcC8ke3BhdGgucG9zaXguYmFzZW5hbWUocGF0aEluQ29udGFpbmVyKX1gO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoXG4gICAgICAgICAgWydydW4tYXMnLCBwYWNrYWdlSWQsIGBta2RpciAtcCAnJHtlc2NhcGVQYXRoKHBhdGgucG9zaXguZGlybmFtZShwYXRoSW5Db250YWluZXIpKX0nYF1cbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydydW4tYXMnLCBwYWNrYWdlSWQsIGB0b3VjaCAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BdKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydydW4tYXMnLCBwYWNrYWdlSWQsIGBjaG1vZCA3NzcgJyR7ZXNjYXBlUGF0aChwYXRoSW5Db250YWluZXIpfSdgXSk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnB1c2gobG9jYWxGaWxlLCB0bXBEZXN0aW5hdGlvbik7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICAgICAncnVuLWFzJywgcGFja2FnZUlkLFxuICAgICAgICAgIGBjcCAtZiAnJHtlc2NhcGVQYXRoKHRtcERlc3RpbmF0aW9uKX0nICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nYFxuICAgICAgICBdKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjY2VzcyB0aGUgY29udGFpbmVyIG9mICcke3BhY2thZ2VJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYElzIHRoZSBhcHBsaWNhdGlvbiBpbnN0YWxsZWQgYW5kIGhhcyAnZGVidWdnYWJsZScgYnVpbGQgb3B0aW9uIHNldCB0byB0cnVlPyBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWRiIHB1c2ggY3JlYXRlcyBmb2xkZXJzIGFuZCBvdmVyd3JpdGVzIGV4aXN0aW5nIGZpbGVzLlxuICAgICAgYXdhaXQgdGhpcy5hZGIucHVzaChsb2NhbEZpbGUsIHJlbW90ZVBhdGgpO1xuXG4gICAgICAvLyBpZiB3ZSBoYXZlIHB1c2hlZCBhIGZpbGUsIGl0IG1pZ2h0IGJlIGEgbWVkaWEgZmlsZSwgc28gZW5zdXJlIHRoYXRcbiAgICAgIC8vIGFwcHMga25vdyBhYm91dCBpdFxuICAgICAgYXdhaXQgc2Nhbk1lZGlhKHRoaXMuYWRiLCByZW1vdGVQYXRoLCB0aGlzLmxvZyk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMobG9jYWxGaWxlKSkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKGxvY2FsRmlsZSk7XG4gICAgfVxuICAgIGlmICh0bXBEZXN0aW5hdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydybScsICctZicsIHRtcERlc3RpbmF0aW9uXSk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFB1c2hGaWxlT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZpbGVcbiAqIG9yIGEgc3BlY2lhbGx5IGZvcm1hdHRlZCBwYXRoLCB3aGljaCBwb2ludHMgdG8gYW4gaXRlbSBpbnNpZGUgYW4gYXBwIGJ1bmRsZSxcbiAqIGZvciBleGFtcGxlIGBAbXkuYXBwLmlkL215L3BhdGhgLiBJdCBpcyBtYW5kYXRvcnkgZm9yIHRoZSBhcHAgYnVuZGxlIHRvIGhhdmVcbiAqIGRlYnVnZ2luZyBlbmFibGVkIGluIG9yZGVyIHRvIHVzZSB0aGUgbGF0dGVyIHJlbW90ZVBhdGggZm9ybWF0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBheWxvYWQgQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgZmlsZSB0byBiZSBwdXNoZWQuXG4gKi9cblxuLyoqXG4gKiBQdXNoZXMgdGhlIGdpdmVuIGRhdGEgdG8gYSBmaWxlIG9uIHRoZSByZW1vdGUgZGV2aWNlLlxuICpcbiAqIEBwYXJhbSB7UHVzaEZpbGVPcHRpb25zfSBvcHRzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVB1c2hGaWxlID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlUHVzaEZpbGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IHJlbW90ZVBhdGgsIHBheWxvYWQgfSA9IHJlcXVpcmVBcmdzKFsncmVtb3RlUGF0aCcsICdwYXlsb2FkJ10sIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5wdXNoRmlsZShyZW1vdGVQYXRoLCBwYXlsb2FkKTtcbn07XG5cbi8qKlxuICogUHVsbHMgdGhlIHdob2xlIGZvbGRlciBmcm9tIHRoZSByZW1vdGUgZGV2aWNlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byBhIGZvbGRlciBvbiB0aGVcbiAqIHJlbW90ZSBkZXZpY2Ugb3IgYSBmb2xkZXIgaW5zaWRlIGFuIGFwcGxpY2F0aW9uIGJ1bmRsZVxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgYW5kIHppcHBlZCBjb250ZW50IG9mIHRoZSBmb2xkZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIGdldHRpbmcgdGhlIGZvbGRlciBjb250ZW50XG4gKi9cbmNvbW1hbmRzLnB1bGxGb2xkZXIgPSBhc3luYyBmdW5jdGlvbiBwdWxsRm9sZGVyIChyZW1vdGVQYXRoKSB7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmFkYi5wdWxsKHJlbW90ZVBhdGgsIHRtcFJvb3QpO1xuICAgIHJldHVybiAoYXdhaXQgemlwLnRvSW5NZW1vcnlaaXAodG1wUm9vdCwge1xuICAgICAgZW5jb2RlVG9CYXNlNjQ6IHRydWUsXG4gICAgfSkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFB1bGxGb2xkZXJPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZm9sZGVyLlxuICovXG5cbi8qKlxuICogUHVsbHMgdGhlIHdob2xlIGZvbGRlciBmcm9tIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqXG4gKiBAcGFyYW0ge1B1bGxGb2xkZXJPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2FtZSBhcyBgcHVsbEZvbGRlcmBcbiAqL1xuY29tbWFuZHMubW9iaWxlUHVsbEZvbGRlciA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVB1bGxGb2xkZXIgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IHJlbW90ZVBhdGggfSA9IHJlcXVpcmVBcmdzKCdyZW1vdGVQYXRoJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnB1bGxGb2xkZXIocmVtb3RlUGF0aCk7XG59O1xuXG4vKipcbiAqIERlbGV0ZXMgdGhlIGdpdmVuIGZvbGRlciBvciBmaWxlIGZyb20gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge0FEQn0gYWRiXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZm9sZGVyXG4gKiBvciBmaWxlIChmb2xkZXIgbmFtZXMgbXVzdCBlbmQgd2l0aCBhIHNpbmdsZSBzbGFzaClcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgcHJvdmlkZWQgcmVtb3RlIHBhdGggaXMgaW52YWxpZCBvclxuICogdGhlIHBhY2thZ2UgY29udGVudCBjYW5ub3QgYmUgYWNjZXNzZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHJlbW90ZSBpdGVtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBkZWxldGVkLlxuICogSWYgdGhlIHJlbW90ZSBwYXRoIGlzIHZhbGlkLCBidXQgdGhlIHJlbW90ZSBwYXRoIGRvZXMgbm90IGV4aXN0XG4gKiB0aGlzIGZ1bmN0aW9uIHJldHVybiBgZmFsc2VgLlxuICovXG5hc3luYyBmdW5jdGlvbiBkZWxldGVGaWxlT3JGb2xkZXIgKGFkYiwgcmVtb3RlUGF0aCkge1xuICBjb25zdCBwZXJmb3JtUmVtb3RlRnNDaGVjayA9IGFzeW5jIChwLCBvcCwgcnVuQXMgPSBudWxsKSA9PiB7XG4gICAgY29uc3QgcGFzc0ZsYWcgPSAnX19QQVNTX18nO1xuICAgIGNvbnN0IGNoZWNrQ21kID0gYFsgLSR7b3B9ICcke2VzY2FwZVBhdGgocCl9JyBdICYmIGVjaG8gJHtwYXNzRmxhZ31gO1xuICAgIGNvbnN0IGZ1bGxDbWQgPSBydW5BcyA/IGBydW4tYXMgJHtydW5Bc30gJHtjaGVja0NtZH1gIDogY2hlY2tDbWQ7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfLmluY2x1ZGVzKGF3YWl0IGFkYi5zaGVsbChbZnVsbENtZF0pLCBwYXNzRmxhZyk7XG4gICAgfSBjYXRjaCAoaWduKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBjb25zdCBpc0ZpbGUgPSBhc3luYyAocCwgcnVuQXMgPSBudWxsKSA9PiBhd2FpdCBwZXJmb3JtUmVtb3RlRnNDaGVjayhwLCAnZicsIHJ1bkFzKTtcbiAgY29uc3QgaXNEaXIgPSBhc3luYyAocCwgcnVuQXMgPSBudWxsKSA9PiBhd2FpdCBwZXJmb3JtUmVtb3RlRnNDaGVjayhwLCAnZCcsIHJ1bkFzKTtcbiAgY29uc3QgaXNQcmVzZW50ID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2UnLCBydW5Bcyk7XG5cbiAgbGV0IGRzdFBhdGggPSByZW1vdGVQYXRoO1xuICBsZXQgcGtnSWQgPSBudWxsO1xuICBpZiAocmVtb3RlUGF0aC5zdGFydHNXaXRoKENPTlRBSU5FUl9QQVRIX01BUktFUikpIHtcbiAgICBjb25zdCBbcGFja2FnZUlkLCBwYXRoSW5Db250YWluZXJdID0gcGFyc2VDb250YWluZXJQYXRoKHJlbW90ZVBhdGgpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBpZGVudGlmaWVyICcke3BhY2thZ2VJZH0nIGZyb20gJyR7cmVtb3RlUGF0aH0nYCk7XG4gICAgZHN0UGF0aCA9IHBhdGhJbkNvbnRhaW5lcjtcbiAgICBwa2dJZCA9IHBhY2thZ2VJZDtcbiAgfVxuXG4gIGlmIChwa2dJZCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBhZGIuc2hlbGwoWydydW4tYXMnLCBwa2dJZCwgJ2xzJ10pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY2Nlc3MgdGhlIGNvbnRhaW5lciBvZiAnJHtwa2dJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgYElzIHRoZSBhcHBsaWNhdGlvbiBpbnN0YWxsZWQgYW5kIGhhcyAnZGVidWdnYWJsZScgYnVpbGQgb3B0aW9uIHNldCB0byB0cnVlPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWF3YWl0IGlzUHJlc2VudChkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBUaGUgaXRlbSBhdCAnJHtkc3RQYXRofScgZG9lcyBub3QgZXhpc3QuIFBlcmhhcHMsIGFscmVhZHkgZGVsZXRlZD9gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBleHBlY3RzRmlsZSA9ICFyZW1vdGVQYXRoLmVuZHNXaXRoKCcvJyk7XG4gIGlmIChleHBlY3RzRmlsZSAmJiAhYXdhaXQgaXNGaWxlKGRzdFBhdGgsIHBrZ0lkKSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYFRoZSBpdGVtIGF0ICcke2RzdFBhdGh9JyBpcyBub3QgYSBmaWxlYCk7XG4gIH0gZWxzZSBpZiAoIWV4cGVjdHNGaWxlICYmICFhd2FpdCBpc0Rpcihkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgaXRlbSBhdCAnJHtkc3RQYXRofScgaXMgbm90IGEgZm9sZGVyYCk7XG4gIH1cblxuICBpZiAocGtnSWQpIHtcbiAgICBhd2FpdCBhZGIuc2hlbGwoXG4gICAgICBbJ3J1bi1hcycsIHBrZ0lkLCBgcm0gLWYke2V4cGVjdHNGaWxlID8gJycgOiAncid9ICcke2VzY2FwZVBhdGgoZHN0UGF0aCl9J2BdKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIuc2hlbGwoWydybScsIGAtZiR7ZXhwZWN0c0ZpbGUgPyAnJyA6ICdyJ31gLCBkc3RQYXRoXSk7XG4gIH1cbiAgaWYgKGF3YWl0IGlzUHJlc2VudChkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBUaGUgaXRlbSBhdCAnJHtkc3RQYXRofScgc3RpbGwgZXhpc3RzIGFmdGVyIGJlaW5nIGRlbGV0ZWQuIGAgK1xuICAgICAgYElzIGl0IHdyaXRhYmxlP2ApO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERlbGV0ZUZpbGVPcHRzXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZpbGVcbiAqIG9yIGEgZmlsZSBpbnNpZGUgYW4gYXBwbGljYXRpb24gYnVuZGxlIChmb3IgZXhhbXBsZSBgQG15LmFwcC5pZC9wYXRoL2luL2J1bmRsZWApXG4gKi9cblxuLyoqXG4gKiBEZWxldGVzIGEgZmlsZSBvbiB0aGUgcmVtb3RlIGRldmljZVxuICpcbiAqIEBwYXJhbSB7RGVsZXRlRmlsZU9wdHN9IG9wdHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHJlbW90ZSBmaWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBkZWxldGVkLlxuICogSWYgdGhlIHBhdGggdG8gYSByZW1vdGUgZmlsZSBpcyB2YWxpZCwgYnV0IHRoZSBmaWxlIGl0c2VsZiBkb2VzIG5vdCBleGlzdFxuICogdGhlbiBgZmFsc2VgIGlzIHJldHVybmVkLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBhcmd1bWVudCBpcyBpbnZhbGlkIG9yIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZVxuICogZGVsZXRpbmcgdGhlIGZpbGVcbiAqL1xuY29tbWFuZHMubW9iaWxlRGVsZXRlRmlsZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZURlbGV0ZUZpbGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7cmVtb3RlUGF0aH0gPSBvcHRzO1xuICBpZiAoIXJlbW90ZVBhdGgpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBUaGUgJ3JlbW90ZVBhdGgnIGFyZ3VtZW50IGlzIG1hbmRhdG9yeWApO1xuICB9XG4gIGlmIChyZW1vdGVQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgYEl0IGlzIGV4cGVjdGVkIHRoYXQgcmVtb3RlIHBhdGggcG9pbnRzIHRvIGEgZm9sZGVyIGFuZCBub3QgdG8gYSBmaWxlLiBgICtcbiAgICAgIGAnJHtyZW1vdGVQYXRofScgaXMgZ2l2ZW4gaW5zdGVhZGBcbiAgICApO1xuICB9XG4gIHJldHVybiBhd2FpdCBkZWxldGVGaWxlT3JGb2xkZXIodGhpcy5hZGIsIHJlbW90ZVBhdGgpO1xufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLHFCQUFxQixHQUFHLEdBQTlCO0FBRUEsTUFBTUMsc0JBQXNCLEdBQUcsSUFBSUMsTUFBSixDQUFZLElBQUdGLHFCQUFzQixjQUFyQyxDQUEvQjtBQUNBLE1BQU1HLDJCQUEyQixHQUFHLCtDQUFwQztBQUdBLE1BQU1DLFFBQVEsR0FBRyxFQUFqQjs7O0FBV0EsU0FBU0Msa0JBQVQsQ0FBNkJDLFVBQTdCLEVBQXlDO0VBQ3ZDLE1BQU1DLEtB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