appium-android-driver 5.5.0 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/commands/app-management.js +5 -1
- package/build/lib/commands/app-management.js.map +1 -1
- package/build/lib/commands/context.js +2 -2
- package/build/lib/commands/context.js.map +1 -1
- package/build/lib/desired-caps.js +4 -1
- package/build/lib/desired-caps.js.map +1 -1
- package/lib/commands/app-management.js +13 -2
- package/lib/commands/context.js +1 -1
- package/lib/desired-caps.js +3 -0
- package/package.json +1 -1
|
@@ -110,6 +110,10 @@ commands.terminateApp = async function terminateApp(appId, options = {}) {
|
|
|
110
110
|
}
|
|
111
111
|
await this.adb.forceStop(appId);
|
|
112
112
|
const timeout = _support.util.hasValue(options.timeout) && !isNaN(options.timeout) ? parseInt(options.timeout, 10) : 500;
|
|
113
|
+
if (timeout <= 0) {
|
|
114
|
+
this.log.info(`'${appId}' has been terminated. Skip checking the application process state ` + `since the timeout was set as ${timeout}ms`);
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
113
117
|
try {
|
|
114
118
|
await (0, _asyncbox.waitForCondition)(async () => (await this.queryAppState(appId)) <= _androidHelpers.APP_STATE.NOT_RUNNING, {
|
|
115
119
|
waitMs: timeout,
|
|
@@ -152,4 +156,4 @@ commands.mobileClearApp = async function mobileClearApp(opts = {}) {
|
|
|
152
156
|
};
|
|
153
157
|
var _default = commands;
|
|
154
158
|
exports.default = _default;
|
|
155
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJjb21tYW5kcyIsImlzQXBwSW5zdGFsbGVkIiwiYXBwSWQiLCJhZGIiLCJtb2JpbGVJc0FwcEluc3RhbGxlZCIsIm9wdHMiLCJyZXF1aXJlQXJncyIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImFwcElkUmUiLCJSZWdFeHAiLCJfIiwiZXNjYXBlUmVnRXhwIiwibGluZSIsImR1bXBXaW5kb3dzIiwic3BsaXQiLCJ0ZXN0Iiwic29tZSIsIngiLCJpbmNsdWRlcyIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImRlYnVnIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsImNtZCIsIm91dHB1dCIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwiYWN0aXZpdHlOYW1lIiwicmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eSIsInByZWZlckNtZCIsInN0ZG91dCIsIkVycm9yIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJvcHRpb25zIiwidW5pbnN0YWxsQXBrIiwibW9iaWxlUmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiZm9yY2VTdG9wIiwidGltZW91dCIsInV0aWwiLCJoYXNWYWx1ZSIsImlzTmFOIiwicGFyc2VJbnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJhcHBQYXRoIiwibG9jYWxQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImluc3RhbGwiLCJtb2JpbGVJbnN0YWxsQXBwIiwibW9iaWxlQ2xlYXJBcHAiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsImNsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHJlcXVpcmVBcmdzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBBUFBfRVhURU5TSU9OUyA9IFsnLmFwaycsICcuYXBrcyddO1xuY29uc3QgUkVTT0xWRVJfQUNUSVZJVFlfTkFNRSA9ICdhbmRyb2lkL2NvbS5hbmRyb2lkLmludGVybmFsLmFwcC5SZXNvbHZlckFjdGl2aXR5JztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb3Igbm90XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZFxuICovXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChhcHBJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVBcHBJbnN0YWxsZWRPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7TW9iaWxlQXBwSW5zdGFsbGVkT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge2Jvb2xlYW59IFNhbWUgYXMgaW4gYGlzQXBwSW5zdGFsbGVkYFxuICovXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcbn07XG5cbi8qKlxuICogUXVlcmllcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHJldHVybnMge251bWJlcn0gVGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQsIHdoaWNoIGRlc2NyaWJlc1xuICogICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gc3RhdGU6XG4gKiAwIC0gaXMgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkXG4gKiAxIC0gaWYgdGhlIGFwcCBpcyBpbnN0YWxsZWQsIGJ1dCBpcyBub3QgcnVubmluZ1xuICogMyAtIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZFxuICogNCAtIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiB0aGUgZm9yZWdyb3VuZFxuICovXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYXBwSWQpIHtcbiAgdGhpcy5sb2cuaW5mbyhgUXVlcnlpbmcgdGhlIHN0YXRlIG9mICcke2FwcElkfSdgKTtcbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIH1cbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEUuTk9UX1JVTk5JTkc7XG4gIH1cbiAgY29uc3QgYXBwSWRSZSA9IG5ldyBSZWdFeHAoYFxcXFxiJHtfLmVzY2FwZVJlZ0V4cChhcHBJZCl9L2ApO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgKGF3YWl0IHRoaXMuYWRiLmR1bXBXaW5kb3dzKCkpLnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChhcHBJZFJlLnRlc3QobGluZSkgJiYgWydtQ3VycmVudEZvY3VzJywgJ21Gb2N1c2VkQXBwJ10uc29tZSgoeCkgPT4gbGluZS5pbmNsdWRlcyh4KSkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUlVOTklOR19JTl9GT1JFR1JPVU5EO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlUXVlcnlBcHBTdGF0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVRdWVyeUFwcFN0YXRlT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge251bWJlcn0gU2FtZSBhcyBpbiBgcXVlcnlBcHBTdGF0ZWBcbiAqL1xuY29tbWFuZHMubW9iaWxlUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVF1ZXJ5QXBwU3RhdGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCk7XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlcyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gb3IgbGF1bmNoZXMgaXQgaWYgbmVjZXNzYXJ5LlxuICogVGhlIGFjdGlvbiBsaXRlcmFsbHkgc2ltdWxhdGVzXG4gKiBjbGlja2luZyB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpY29uIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFwcCBjYW5ub3QgYmUgYWN0aXZhdGVkXG4gKi9cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGFwcElkKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBBY3RpdmF0aW5nICcke2FwcElkfSdgKTtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAvLyBGYWxsYmFjayB0byBNb25rZXkgaW4gb2xkZXIgQVBJc1xuICBpZiAoYXBpTGV2ZWwgPCAyNCkge1xuICAgIC8vIFRoZSBtb25rZXkgY29tbWFuZCBjb3VsZCByYWlzZSBhbiBpc3N1ZSBhcyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NDg2MDQ3NS9ob3ctdG8tdXNlLXRoZS1tb25rZXktY29tbWFuZC13aXRoLWFuLWFuZHJvaWQtc3lzdGVtLXRoYXQtZG9lc250LWhhdmUtcGh5c2ljYWxcbiAgICAvLyBidXQgJy0tcGN0LXN5c2tleXMgMCcgY291bGQgY2F1c2UgYW5vdGhlciBiYWNrZ3JvdW5kIHByb2Nlc3MgaXNzdWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjk0MSNpc3N1ZWNvbW1lbnQtMTEyOTgzNzI4NVxuICAgIGNvbnN0IGNtZCA9IFsnbW9ua2V5JyxcbiAgICAgICctcCcsIGFwcElkLFxuICAgICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICcxJ107XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIHRyeSB7XG4gICAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke291dHB1dH1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LmluY2x1ZGVzKCdtb25rZXkgYWJvcnRlZCcpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gQXJlIHlvdSBzdXJlIGl0IGlzIGluc3RhbGxlZD9gKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGFjdGl2aXR5TmFtZSA9IGF3YWl0IHRoaXMuYWRiLnJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkoYXBwSWQpO1xuICBpZiAoYWN0aXZpdHlOYW1lID09PSBSRVNPTFZFUl9BQ1RJVklUWV9OQU1FKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE3MTI4XG4gICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICBgVGhlIGxhdW5jaGFibGUgYWN0aXZpdHkgbmFtZSBvZiAnJHthcHBJZH0nIHdhcyByZXNvbHZlZCB0byAnJHthY3Rpdml0eU5hbWV9Jy4gYCArXG4gICAgICBgU3dpdGNoaW5nIHRoZSByZXNvbHZlciB0byBub3QgdXNlIGNtZGBcbiAgICApO1xuICAgIGFjdGl2aXR5TmFtZSA9IGF3YWl0IHRoaXMuYWRiLnJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkoYXBwSWQsIHtwcmVmZXJDbWQ6IGZhbHNlfSk7XG4gIH1cblxuICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgJ2FtJywgKGFwaUxldmVsIDwgMjYpID8gJ3N0YXJ0JyA6ICdzdGFydC1hY3Rpdml0eScsXG4gICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIC8vIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQjRkxBR19BQ1RJVklUWV9ORVdfVEFTS1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50I0ZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAnLWYnLCAnMHgxMDIwMDAwMCcsXG4gICAgJy1uJywgYWN0aXZpdHlOYW1lLFxuICBdKTtcbiAgdGhpcy5sb2cuZGVidWcoc3Rkb3V0KTtcbiAgaWYgKC9eZXJyb3I6L21pLnRlc3Qoc3Rkb3V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke3N0ZG91dH1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVBY3RpdmF0ZUFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gbGl0ZXJhbGx5IHNpbXVsYXRlc1xuICogY2xpY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWNvbiBvbiB0aGUgZGFzaGJvYXJkLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlQWN0aXZhdGVBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFwcCBjYW5ub3QgYmUgYWN0aXZhdGVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQWN0aXZhdGVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbMjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB1bmluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ga2VlcERhdGEgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGtlZXAgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkYXRhIGFuZCBjYWNoZSBmb2xkZXJzIGFmdGVyIHVuaW5zdGFsbC5cbiAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpZiBpcyBpbnN0YWxsZWQuXG4gKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGlmIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1VuaW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIHJlbW92YWwgb3B0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhY2thZ2Ugd2FzIGZvdW5kIG9uIHRoZSBkZXZpY2UgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHVuaW5zdGFsbGVkLlxuICovXG5jb21tYW5kcy5yZW1vdmVBcHAgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBcHAgKGFwcElkLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayhhcHBJZCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZVJlbW92ZUFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWYgaXMgaW5zdGFsbGVkLlxuICogVGhlIGNhbGwgaXMgaWdub3JlZCBpZiB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVSZW1vdmVBcHBPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2FtZSBhcyBpbiBgcmVtb3ZlQXBwYFxuICovXG5jb21tYW5kcy5tb2JpbGVSZW1vdmVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSZW1vdmVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucmVtb3ZlQXBwKGFwcElkLCBvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGVybWluYXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuXG4gKi9cblxuLyoqXG4gKiBUZXJtaW5hdGVzIHRoZSBhcHAgaWYgaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1Rlcm1pbmF0ZU9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGFwcGxpY2F0aW9uIHRlcm1pbmF0aW9uIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcHAgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGFwcCBoYXMgbm90IGJlZW4gdGVybWluYXRlZCB3aXRoaW4gdGhlIGdpdmVuIHRpbWVvdXQuXG4gKi9cbmNvbW1hbmRzLnRlcm1pbmF0ZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIHRlcm1pbmF0ZUFwcCAoYXBwSWQsIG9wdGlvbnMgPSB7fSkge1xuICB0aGlzLmxvZy5pbmZvKGBUZXJtaW5hdGluZyAnJHthcHBJZH0nYCk7XG4gIGlmICghKGF3YWl0IHRoaXMuYWRiLnByb2Nlc3NFeGlzdHMoYXBwSWQpKSkge1xuICAgIHRoaXMubG9nLmluZm8oYFRoZSBhcHAgJyR7YXBwSWR9JyBpcyBub3QgcnVubmluZ2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLmFkYi5mb3JjZVN0b3AoYXBwSWQpO1xuICBjb25zdCB0aW1lb3V0ID0gdXRpbC5oYXNWYWx1ZShvcHRpb25zLnRpbWVvdXQpICYmICFpc05hTihvcHRpb25zLnRpbWVvdXQpID8gcGFyc2VJbnQob3B0aW9ucy50aW1lb3V0LCAxMCkgOiA1MDA7XG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoYXBwSWQpIDw9IEFQUF9TVEFURS5OT1RfUlVOTklORyxcbiAgICAgIHt3YWl0TXM6IHRpbWVvdXQsIGludGVydmFsTXM6IDEwMH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhpcy5sb2cuZXJyb3JBbmRUaHJvdyhgJyR7YXBwSWR9JyBpcyBzdGlsbCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tcyB0aW1lb3V0YCk7XG4gIH1cbiAgdGhpcy5sb2cuaW5mbyhgJyR7YXBwSWR9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdGVybWluYXRlZGApO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlVGVybWluYXRlQXBwT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyLiBNdXN0IGJlIGFsd2F5cyBwcm92aWRlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gdGltZW91dCBbNTAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB0ZXJtaW5hdGVkLlxuICovXG5cbi8qKlxuICogVGVybWluYXRlcyB0aGUgYXBwIGlmIGl0IGlzIHJ1bm5pbmcuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVUZXJtaW5hdGVBcHBPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2FtZSBhcyBpbiBgdGVybWluYXRlQXBwYFxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBhcHAgaGFzIG5vdCBiZWVuIHRlcm1pbmF0ZWQgd2l0aGluIHRoZSBnaXZlbiB0aW1lb3V0LlxuICovXG5jb21tYW5kcy5tb2JpbGVUZXJtaW5hdGVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVUZXJtaW5hdGVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMudGVybWluYXRlQXBwKGFwcElkLCBvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSW5zdGFsbE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0IFs2MDAwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIGluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dUZXN0UGFja2FnZXMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGFsbG93IHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VzIGluc3RhbGxhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdXNlU2RjYXJkIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSB0byBpbnN0YWxsIHRoZSBhcHAgb24gc2RjYXJkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiB0aGUgZGV2aWNlIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZ3JhbnRQZXJtaXNzaW9ucyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gZ3JhbnQgYWxsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uJ3MgbWFuaWZlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlciBBbmRyb2lkIDYrLlxuICogQHByb3BlcnR5IHtib29sZWFufSByZXBsYWNlIFt0cnVlXSAtIFNldCBpdCB0byBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB1cGdyYWRlZC9yZWluc3RhbGxlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudCBvbiB0aGUgZGV2aWNlLlxuICovXG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIHRvIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGxvY2FsIGFwayBwYXRoIG9yIGEgcmVtb3RlIHVybFxuICogQHBhcmFtIHs/SW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIGluc3RhbGxhdGlvbiBvcHRpb25zXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGdpdmVuIGFwayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhY2hhYmxlXG4gKi9cbmNvbW1hbmRzLmluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBpbnN0YWxsQXBwIChhcHBQYXRoLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgbG9jYWxQYXRoID0gYXdhaXQgdGhpcy5oZWxwZXJzLmNvbmZpZ3VyZUFwcChhcHBQYXRoLCBBUFBfRVhURU5TSU9OUyk7XG4gIGF3YWl0IHRoaXMuYWRiLmluc3RhbGwobG9jYWxQYXRoLCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlSW5zdGFsbEFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGxvY2FsIGFwayBwYXRoIG9yIGEgcmVtb3RlIHVybC4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge01vYmlsZUluc3RhbGxBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdGhlIGdpdmVuIGFwayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgcmVhY2hhYmxlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUluc3RhbGxBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVJbnN0YWxsQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBQYXRoIH0gPSByZXF1aXJlQXJncygnYXBwUGF0aCcsIG9wdHMpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pbnN0YWxsQXBwKGFwcFBhdGgsIG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDbGVhckFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7IXN0cmluZ30gYXBwSWQgVGhlIGlkZW50aWZpZXIgb2YgdGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UgdG8gYmUgY2xlYXJlZFxuICovXG5cbi8qKlxuICogRGVsZXRlcyBhbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSB7Q2xlYXJBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgY2xlYW5pbmcgb2YgdGhlIGFwcCBkYXRhIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUNsZWFyQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQ2xlYXJBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YXBwSWR9ID0gb3B0cztcbiAgaWYgKCFhcHBJZCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYFRoZSAnYXBwSWQnIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cbiAgYXdhaXQgdGhpcy5hZGIuY2xlYXIoYXBwSWQpO1xufTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLGNBQWMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7QUFDeEMsTUFBTUMsc0JBQXNCLEdBQUcsbURBQW1EO0FBRWxGLE1BQU1DLFFBQVEsR0FBRyxDQUFDLENBQUM7O0FBQUM7QUFRcEJBLFFBQVEsQ0FBQ0MsY0FBYyxHQUFHLGVBQWVBLGNBQWMsQ0FBRUMsS0FBSyxFQUFFO0VBQzlELE9BQU8sTUFBTSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0YsY0FBYyxDQUFDQyxLQUFLLENBQUM7QUFDN0MsQ0FBQzs7QUFhREYsUUFBUSxDQUFDSSxvQkFBb0IsR0FBRyxlQUFlQSxvQkFBb0IsQ0FBRUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQzlFLE1BQU07SUFBRUg7RUFBTSxDQUFDLEdBQUcsSUFBQUksa0JBQVcsRUFBQyxPQUFPLEVBQUVELElBQUksQ0FBQztFQUM1QyxPQUFPLE1BQU0sSUFBSSxDQUFDSixjQUFjLENBQUNDLEtBQUssQ0FBQztBQUN6QyxDQUFDOztBQWFERixRQUFRLENBQUNPLGFBQWEsR0FBRyxlQUFlQSxhQUFhLENBQUVMLEtBQUssRUFBRTtFQUM1RCxJQUFJLENBQUNNLEdBQUcsQ0FBQ0MsSUFBSSxDQUFFLDBCQUF5QlAsS0FBTSxHQUFFLENBQUM7RUFDakQsSUFBSSxFQUFDLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNGLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDLEdBQUU7SUFDekMsT0FBT1EseUJBQVMsQ0FBQ0MsYUFBYTtFQUNoQztFQUNBLElBQUksRUFBQyxNQUFNLElBQUksQ0FBQ1IsR0FBRyxDQUFDUyxhQUFhLENBQUNWLEtBQUssQ0FBQyxHQUFFO0lBQ3hDLE9BQU9RLHlCQUFTLENBQUNHLFdBQVc7RUFDOUI7RUFDQSxNQUFNQyxPQUFPLEdBQUcsSUFBSUMsTUFBTSxDQUFFLE1BQUtDLGVBQUMsQ0FBQ0MsWUFBWSxDQUFDZixLQUFLLENBQUUsR0FBRSxDQUFDO0VBQzFELEtBQUssTUFBTWdCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDZixHQUFHLENBQUNnQixXQUFXLEVBQUUsRUFBRUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQzdELElBQUlOLE9BQU8sQ0FBQ08sSUFBSSxDQUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQ0ksSUFBSSxDQUFFQyxDQUFDLElBQUtMLElBQUksQ0FBQ00sUUFBUSxDQUFDRCxDQUFDLENBQUMsQ0FBQyxFQUFFO01BQ3hGLE9BQU9iLHlCQUFTLENBQUNlLHFCQUFxQjtJQUN4QztFQUNGO0VBQ0EsT0FBT2YseUJBQVMsQ0FBQ2dCLHFCQUFxQjtBQUN4QyxDQUFDOztBQWFEMUIsUUFBUSxDQUFDMkIsbUJBQW1CLEdBQUcsZUFBZUEsbUJBQW1CLENBQUV0QixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDNUUsTUFBTTtJQUFFSDtFQUFNLENBQUMsR0FBRyxJQUFBSSxrQkFBVyxFQUFDLE9BQU8sRUFBRUQsSUFBSSxDQUFDO0VBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUNFLGFBQWEsQ0FBQ0wsS0FBSyxDQUFDO0FBQ3hDLENBQUM7O0FBVURGLFFBQVEsQ0FBQzRCLFdBQVcsR0FBRyxlQUFlQSxXQUFXLENBQUUxQixLQUFLLEVBQUU7RUFDeEQsSUFBSSxDQUFDTSxHQUFHLENBQUNxQixLQUFLLENBQUUsZUFBYzNCLEtBQU0sR0FBRSxDQUFDO0VBQ3ZDLE1BQU00QixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMzQixHQUFHLENBQUM0QixXQUFXLEVBQUU7RUFFN0MsSUFBSUQsUUFBUSxHQUFHLEVBQUUsRUFBRTtJQUdqQixNQUFNRSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQ25CLElBQUksRUFBRTlCLEtBQUssRUFDWCxJQUFJLEVBQUUsa0NBQWtDLEVBQ3hDLEdBQUcsQ0FBQztJQUNOLElBQUkrQixNQUFNLEdBQUcsRUFBRTtJQUNmLElBQUk7TUFDRkEsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDOUIsR0FBRyxDQUFDK0IsS0FBSyxDQUFDRixHQUFHLENBQUM7TUFDbEMsSUFBSSxDQUFDeEIsR0FBRyxDQUFDcUIsS0FBSyxDQUFFLG1CQUFrQkksTUFBTyxFQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLE9BQU9FLENBQUMsRUFBRTtNQUNWLElBQUksQ0FBQzNCLEdBQUcsQ0FBQzRCLGFBQWEsQ0FBRSxvQkFBbUJsQyxLQUFNLHNCQUFxQmlDLENBQUMsQ0FBQ0UsT0FBUSxFQUFDLENBQUM7SUFDcEY7SUFDQSxJQUFJSixNQUFNLENBQUNULFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO01BQ3JDLElBQUksQ0FBQ2hCLEdBQUcsQ0FBQzRCLGFBQWEsQ0FBRSxvQkFBbUJsQyxLQUFNLGtDQUFpQyxDQUFDO0lBQ3JGO0lBQ0E7RUFDRjtFQUVBLElBQUlvQyxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUNuQyxHQUFHLENBQUNvQyx5QkFBeUIsQ0FBQ3JDLEtBQUssQ0FBQztFQUNsRSxJQUFJb0MsWUFBWSxLQUFLdkMsc0JBQXNCLEVBQUU7SUFFM0MsSUFBSSxDQUFDUyxHQUFHLENBQUNxQixLQUFLLENBQ1gsb0NBQW1DM0IsS0FBTSxzQkFBcUJvQyxZQUFhLEtBQUksR0FDL0UsdUNBQXNDLENBQ3hDO0lBQ0RBLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQ25DLEdBQUcsQ0FBQ29DLHlCQUF5QixDQUFDckMsS0FBSyxFQUFFO01BQUNzQyxTQUFTLEVBQUU7SUFBSyxDQUFDLENBQUM7RUFDcEY7RUFFQSxNQUFNQyxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUN0QyxHQUFHLENBQUMrQixLQUFLLENBQUMsQ0FDbEMsSUFBSSxFQUFHSixRQUFRLEdBQUcsRUFBRSxHQUFJLE9BQU8sR0FBRyxnQkFBZ0IsRUFDbEQsSUFBSSxFQUFFLDRCQUE0QixFQUNsQyxJQUFJLEVBQUUsa0NBQWtDO0VBSXhDLElBQUksRUFBRSxZQUFZLEVBQ2xCLElBQUksRUFBRVEsWUFBWSxDQUNuQixDQUFDO0VBQ0YsSUFBSSxDQUFDOUIsR0FBRyxDQUFDcUIsS0FBSyxDQUFDWSxNQUFNLENBQUM7RUFDdEIsSUFBSSxXQUFXLENBQUNwQixJQUFJLENBQUNvQixNQUFNLENBQUMsRUFBRTtJQUM1QixNQUFNLElBQUlDLEtBQUssQ0FBRSxvQkFBbUJ4QyxLQUFNLHNCQUFxQnVDLE1BQU8sRUFBQyxDQUFDO0VBQzFFO0FBQ0YsQ0FBQzs7QUFlRHpDLFFBQVEsQ0FBQzJDLGlCQUFpQixHQUFHLGVBQWVBLGlCQUFpQixDQUFFdEMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ3hFLE1BQU07SUFBRUg7RUFBTSxDQUFDLEdBQUcsSUFBQUksa0JBQVcsRUFBQyxPQUFPLEVBQUVELElBQUksQ0FBQztFQUM1QyxPQUFPLE1BQU0sSUFBSSxDQUFDdUIsV0FBVyxDQUFDMUIsS0FBSyxDQUFDO0FBQ3RDLENBQUM7O0FBbUJERixRQUFRLENBQUM0QyxTQUFTLEdBQUcsZUFBZUEsU0FBUyxDQUFFMUMsS0FBSyxFQUFFMkMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO0VBQ2xFLE9BQU8sTUFBTSxJQUFJLENBQUMxQyxHQUFHLENBQUMyQyxZQUFZLENBQUM1QyxLQUFLLEVBQUUyQyxPQUFPLENBQUM7QUFDcEQsQ0FBQzs7QUFjRDdDLFFBQVEsQ0FBQytDLGVBQWUsR0FBRyxlQUFlQSxlQUFlLENBQUUxQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDcEUsTUFBTTtJQUFFSDtFQUFNLENBQUMsR0FBRyxJQUFBSSxrQkFBVyxFQUFDLE9BQU8sRUFBRUQsSUFBSSxDQUFDO0VBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUN1QyxTQUFTLENBQUMxQyxLQUFLLEVBQUVHLElBQUksQ0FBQztBQUMxQyxDQUFDOztBQWdCREwsUUFBUSxDQUFDZ0QsWUFBWSxHQUFHLGVBQWVBLFlBQVksQ0FBRTlDLEtBQUssRUFBRTJDLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN4RSxJQUFJLENBQUNyQyxHQUFHLENBQUNDLElBQUksQ0FBRSxnQkFBZVAsS0FBTSxHQUFFLENBQUM7RUFDdkMsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNTLGFBQWEsQ0FBQ1YsS0FBSyxDQUFDLENBQUMsRUFBRTtJQUMxQyxJQUFJLENBQUNNLEdBQUcsQ0FBQ0MsSUFBSSxDQUFFLFlBQVdQLEtBQU0sa0JBQWlCLENBQUM7SUFDbEQsT0FBTyxLQUFLO0VBQ2Q7RUFDQSxNQUFNLElBQUksQ0FBQ0MsR0FBRyxDQUFDOEMsU0FBUyxDQUFDL0MsS0FBSyxDQUFDO0VBQy9CLE1BQU1nRCxPQUFPLEdBQUdDLGFBQUksQ0FBQ0MsUUFBUSxDQUFDUCxPQUFPLENBQUNLLE9BQU8sQ0FBQyxJQUFJLENBQUNHLEtBQUssQ0FBQ1IsT0FBTyxDQUFDSyxPQUFPLENBQUMsR0FBR0ksUUFBUSxDQUFDVCxPQUFPLENBQUNLLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHO0VBQy9HLElBQUk7SUFDRixNQUFNLElBQUFLLDBCQUFnQixFQUFDLFlBQVksT0FBTSxJQUFJLENBQUNoRCxhQUFhLENBQUNMLEtBQUssQ0FBQyxLQUFJUSx5QkFBUyxDQUFDRyxXQUFXLEVBQ3pGO01BQUMyQyxNQUFNLEVBQUVOLE9BQU87TUFBRU8sVUFBVSxFQUFFO0lBQUcsQ0FBQyxDQUFDO0VBQ3ZDLENBQUMsQ0FBQyxPQUFPdEIsQ0FBQyxFQUFFO0lBQ1YsSUFBSSxDQUFDM0IsR0FBRyxDQUFDNEIsYUFBYSxDQUFFLElBQUdsQyxLQUFNLDRCQUEyQmdELE9BQVEsWUFBVyxDQUFDO0VBQ2xGO0VBQ0EsSUFBSSxDQUFDMUMsR0FBRyxDQUFDQyxJQUFJLENBQUUsSUFBR1AsS0FBTSxvQ0FBbUMsQ0FBQztFQUM1RCxPQUFPLElBQUk7QUFDYixDQUFDOztBQWdCREYsUUFBUSxDQUFDMEQsa0JBQWtCLEdBQUcsZUFBZUEsa0JBQWtCLENBQUVyRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDMUUsTUFBTTtJQUFFSDtFQUFNLENBQUMsR0FBRyxJQUFBSSxrQkFBVyxFQUFDLE9BQU8sRUFBRUQsSUFBSSxDQUFDO0VBQzVDLE9BQU8sTUFBTSxJQUFJLENBQUMyQyxZQUFZLENBQUM5QyxLQUFLLEVBQUVHLElBQUksQ0FBQztBQUM3QyxDQUFDOztBQTBCREwsUUFBUSxDQUFDMkQsVUFBVSxHQUFHLGVBQWVBLFVBQVUsQ0FBRUMsT0FBTyxFQUFFZixPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDdEUsTUFBTWdCLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxZQUFZLENBQUNILE9BQU8sRUFBRTlELGNBQWMsQ0FBQztFQUMxRSxNQUFNLElBQUksQ0FBQ0ssR0FBRyxDQUFDNkQsT0FBTyxDQUFDSCxTQUFTLEVBQUVoQixPQUFPLENBQUM7QUFDNUMsQ0FBQzs7QUEwQkQ3QyxRQUFRLENBQUNpRSxnQkFBZ0IsR0FBRyxlQUFlQSxnQkFBZ0IsQ0FBRTVELElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUN0RSxNQUFNO0lBQUV1RDtFQUFRLENBQUMsR0FBRyxJQUFBdEQsa0JBQVcsRUFBQyxTQUFTLEVBQUVELElBQUksQ0FBQztFQUNoRCxPQUFPLE1BQU0sSUFBSSxDQUFDc0QsVUFBVSxDQUFDQyxPQUFPLEVBQUV2RCxJQUFJLENBQUM7QUFDN0MsQ0FBQzs7QUFhREwsUUFBUSxDQUFDa0UsY0FBYyxHQUFHLGVBQWVBLGNBQWMsQ0FBRTdELElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNsRSxNQUFNO0lBQUNIO0VBQUssQ0FBQyxHQUFHRyxJQUFJO0VBQ3BCLElBQUksQ0FBQ0gsS0FBSyxFQUFFO0lBQ1YsTUFBTSxJQUFJaUUsY0FBTSxDQUFDQyxvQkFBb0IsQ0FBRSxrQ0FBaUMsQ0FBQztFQUMzRTtFQUNBLE1BQU0sSUFBSSxDQUFDakUsR0FBRyxDQUFDa0UsS0FBSyxDQUFDbkUsS0FBSyxDQUFDO0FBQzdCLENBQUM7QUFBQyxlQUdhRixRQUFRO0FBQUEifQ==
|
|
159
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBfRVhURU5TSU9OUyIsIlJFU09MVkVSX0FDVElWSVRZX05BTUUiLCJjb21tYW5kcyIsImlzQXBwSW5zdGFsbGVkIiwiYXBwSWQiLCJhZGIiLCJtb2JpbGVJc0FwcEluc3RhbGxlZCIsIm9wdHMiLCJyZXF1aXJlQXJncyIsInF1ZXJ5QXBwU3RhdGUiLCJsb2ciLCJpbmZvIiwiQVBQX1NUQVRFIiwiTk9UX0lOU1RBTExFRCIsInByb2Nlc3NFeGlzdHMiLCJOT1RfUlVOTklORyIsImFwcElkUmUiLCJSZWdFeHAiLCJfIiwiZXNjYXBlUmVnRXhwIiwibGluZSIsImR1bXBXaW5kb3dzIiwic3BsaXQiLCJ0ZXN0Iiwic29tZSIsIngiLCJpbmNsdWRlcyIsIlJVTk5JTkdfSU5fRk9SRUdST1VORCIsIlJVTk5JTkdfSU5fQkFDS0dST1VORCIsIm1vYmlsZVF1ZXJ5QXBwU3RhdGUiLCJhY3RpdmF0ZUFwcCIsImRlYnVnIiwiYXBpTGV2ZWwiLCJnZXRBcGlMZXZlbCIsImNtZCIsIm91dHB1dCIsInNoZWxsIiwiZSIsImVycm9yQW5kVGhyb3ciLCJtZXNzYWdlIiwiYWN0aXZpdHlOYW1lIiwicmVzb2x2ZUxhdW5jaGFibGVBY3Rpdml0eSIsInByZWZlckNtZCIsInN0ZG91dCIsIkVycm9yIiwibW9iaWxlQWN0aXZhdGVBcHAiLCJyZW1vdmVBcHAiLCJvcHRpb25zIiwidW5pbnN0YWxsQXBrIiwibW9iaWxlUmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiZm9yY2VTdG9wIiwidGltZW91dCIsInV0aWwiLCJoYXNWYWx1ZSIsImlzTmFOIiwicGFyc2VJbnQiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsIm1vYmlsZVRlcm1pbmF0ZUFwcCIsImluc3RhbGxBcHAiLCJhcHBQYXRoIiwibG9jYWxQYXRoIiwiaGVscGVycyIsImNvbmZpZ3VyZUFwcCIsImluc3RhbGwiLCJtb2JpbGVJbnN0YWxsQXBwIiwibW9iaWxlQ2xlYXJBcHAiLCJlcnJvcnMiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsImNsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2FwcC1tYW5hZ2VtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7IHJlcXVpcmVBcmdzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBBUFBfRVhURU5TSU9OUyA9IFsnLmFwaycsICcuYXBrcyddO1xuY29uc3QgUkVTT0xWRVJfQUNUSVZJVFlfTkFNRSA9ICdhbmRyb2lkL2NvbS5hbmRyb2lkLmludGVybmFsLmFwcC5SZXNvbHZlckFjdGl2aXR5JztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBWZXJpZnkgd2hldGhlciBhbiBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb3Igbm90XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgYXBwIGlzIGluc3RhbGxlZFxuICovXG5jb21tYW5kcy5pc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIGlzQXBwSW5zdGFsbGVkIChhcHBJZCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaXNBcHBJbnN0YWxsZWQoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVBcHBJbnN0YWxsZWRPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXIuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICovXG5cbi8qKlxuICogVmVyaWZ5IHdoZXRoZXIgYW4gYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIG9yIG5vdFxuICpcbiAqIEBwYXJhbSB7TW9iaWxlQXBwSW5zdGFsbGVkT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge2Jvb2xlYW59IFNhbWUgYXMgaW4gYGlzQXBwSW5zdGFsbGVkYFxuICovXG5jb21tYW5kcy5tb2JpbGVJc0FwcEluc3RhbGxlZCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzQXBwSW5zdGFsbGVkIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmlzQXBwSW5zdGFsbGVkKGFwcElkKTtcbn07XG5cbi8qKlxuICogUXVlcmllcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXBwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHJldHVybnMge251bWJlcn0gVGhlIGNvcnJlc3BvbmRpbmcgY29uc3RhbnQsIHdoaWNoIGRlc2NyaWJlc1xuICogICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgYXBwbGljYXRpb24gc3RhdGU6XG4gKiAwIC0gaXMgdGhlIGFwcCBpcyBub3QgaW5zdGFsbGVkXG4gKiAxIC0gaWYgdGhlIGFwcCBpcyBpbnN0YWxsZWQsIGJ1dCBpcyBub3QgcnVubmluZ1xuICogMyAtIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZFxuICogNCAtIGlmIHRoZSBhcHAgaXMgcnVubmluZyBpbiB0aGUgZm9yZWdyb3VuZFxuICovXG5jb21tYW5kcy5xdWVyeUFwcFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gcXVlcnlBcHBTdGF0ZSAoYXBwSWQpIHtcbiAgdGhpcy5sb2cuaW5mbyhgUXVlcnlpbmcgdGhlIHN0YXRlIG9mICcke2FwcElkfSdgKTtcbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5pc0FwcEluc3RhbGxlZChhcHBJZCkpIHtcbiAgICByZXR1cm4gQVBQX1NUQVRFLk5PVF9JTlNUQUxMRUQ7XG4gIH1cbiAgaWYgKCFhd2FpdCB0aGlzLmFkYi5wcm9jZXNzRXhpc3RzKGFwcElkKSkge1xuICAgIHJldHVybiBBUFBfU1RBVEUuTk9UX1JVTk5JTkc7XG4gIH1cbiAgY29uc3QgYXBwSWRSZSA9IG5ldyBSZWdFeHAoYFxcXFxiJHtfLmVzY2FwZVJlZ0V4cChhcHBJZCl9L2ApO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgKGF3YWl0IHRoaXMuYWRiLmR1bXBXaW5kb3dzKCkpLnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChhcHBJZFJlLnRlc3QobGluZSkgJiYgWydtQ3VycmVudEZvY3VzJywgJ21Gb2N1c2VkQXBwJ10uc29tZSgoeCkgPT4gbGluZS5pbmNsdWRlcyh4KSkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUlVOTklOR19JTl9GT1JFR1JPVU5EO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORDtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTW9iaWxlUXVlcnlBcHBTdGF0ZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBRdWVyaWVzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcHAuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVRdWVyeUFwcFN0YXRlT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge251bWJlcn0gU2FtZSBhcyBpbiBgcXVlcnlBcHBTdGF0ZWBcbiAqL1xuY29tbWFuZHMubW9iaWxlUXVlcnlBcHBTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVF1ZXJ5QXBwU3RhdGUgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucXVlcnlBcHBTdGF0ZShhcHBJZCk7XG59O1xuXG4vKipcbiAqIEFjdGl2YXRlcyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gb3IgbGF1bmNoZXMgaXQgaWYgbmVjZXNzYXJ5LlxuICogVGhlIGFjdGlvbiBsaXRlcmFsbHkgc2ltdWxhdGVzXG4gKiBjbGlja2luZyB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpY29uIG9uIHRoZSBkYXNoYm9hcmQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcElkIC0gQXBwbGljYXRpb24gcGFja2FnZSBpZGVudGlmaWVyXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFwcCBjYW5ub3QgYmUgYWN0aXZhdGVkXG4gKi9cbmNvbW1hbmRzLmFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVBcHAgKGFwcElkKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBBY3RpdmF0aW5nICcke2FwcElkfSdgKTtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCB0aGlzLmFkYi5nZXRBcGlMZXZlbCgpO1xuICAvLyBGYWxsYmFjayB0byBNb25rZXkgaW4gb2xkZXIgQVBJc1xuICBpZiAoYXBpTGV2ZWwgPCAyNCkge1xuICAgIC8vIFRoZSBtb25rZXkgY29tbWFuZCBjb3VsZCByYWlzZSBhbiBpc3N1ZSBhcyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80NDg2MDQ3NS9ob3ctdG8tdXNlLXRoZS1tb25rZXktY29tbWFuZC13aXRoLWFuLWFuZHJvaWQtc3lzdGVtLXRoYXQtZG9lc250LWhhdmUtcGh5c2ljYWxcbiAgICAvLyBidXQgJy0tcGN0LXN5c2tleXMgMCcgY291bGQgY2F1c2UgYW5vdGhlciBiYWNrZ3JvdW5kIHByb2Nlc3MgaXNzdWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjk0MSNpc3N1ZWNvbW1lbnQtMTEyOTgzNzI4NVxuICAgIGNvbnN0IGNtZCA9IFsnbW9ua2V5JyxcbiAgICAgICctcCcsIGFwcElkLFxuICAgICAgJy1jJywgJ2FuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSJyxcbiAgICAgICcxJ107XG4gICAgbGV0IG91dHB1dCA9ICcnO1xuICAgIHRyeSB7XG4gICAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChjbWQpO1xuICAgICAgdGhpcy5sb2cuZGVidWcoYENvbW1hbmQgc3Rkb3V0OiAke291dHB1dH1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LmluY2x1ZGVzKCdtb25rZXkgYWJvcnRlZCcpKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWN0aXZhdGUgJyR7YXBwSWR9Jy4gQXJlIHlvdSBzdXJlIGl0IGlzIGluc3RhbGxlZD9gKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGFjdGl2aXR5TmFtZSA9IGF3YWl0IHRoaXMuYWRiLnJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkoYXBwSWQpO1xuICBpZiAoYWN0aXZpdHlOYW1lID09PSBSRVNPTFZFUl9BQ1RJVklUWV9OQU1FKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE3MTI4XG4gICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICBgVGhlIGxhdW5jaGFibGUgYWN0aXZpdHkgbmFtZSBvZiAnJHthcHBJZH0nIHdhcyByZXNvbHZlZCB0byAnJHthY3Rpdml0eU5hbWV9Jy4gYCArXG4gICAgICBgU3dpdGNoaW5nIHRoZSByZXNvbHZlciB0byBub3QgdXNlIGNtZGBcbiAgICApO1xuICAgIGFjdGl2aXR5TmFtZSA9IGF3YWl0IHRoaXMuYWRiLnJlc29sdmVMYXVuY2hhYmxlQWN0aXZpdHkoYXBwSWQsIHtwcmVmZXJDbWQ6IGZhbHNlfSk7XG4gIH1cblxuICBjb25zdCBzdGRvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgJ2FtJywgKGFwaUxldmVsIDwgMjYpID8gJ3N0YXJ0JyA6ICdzdGFydC1hY3Rpdml0eScsXG4gICAgJy1hJywgJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOJyxcbiAgICAnLWMnLCAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIC8vIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvY29udGVudC9JbnRlbnQjRkxBR19BQ1RJVklUWV9ORVdfVEFTS1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50I0ZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERURcbiAgICAnLWYnLCAnMHgxMDIwMDAwMCcsXG4gICAgJy1uJywgYWN0aXZpdHlOYW1lLFxuICBdKTtcbiAgdGhpcy5sb2cuZGVidWcoc3Rkb3V0KTtcbiAgaWYgKC9eZXJyb3I6L21pLnRlc3Qoc3Rkb3V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGFjdGl2YXRlICcke2FwcElkfScuIE9yaWdpbmFsIGVycm9yOiAke3N0ZG91dH1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBNb2JpbGVBY3RpdmF0ZUFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBBY3RpdmF0ZXMgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIG9yIGxhdW5jaGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIFRoZSBhY3Rpb24gbGl0ZXJhbGx5IHNpbXVsYXRlc1xuICogY2xpY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWNvbiBvbiB0aGUgZGFzaGJvYXJkLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlQWN0aXZhdGVBcHBPcHRpb25zfSBvcHRzXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGFwcCBjYW5ub3QgYmUgYWN0aXZhdGVkXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUFjdGl2YXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlQWN0aXZhdGVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAoYXBwSWQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbMjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyB1bmluc3RhbGxlZC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ga2VlcERhdGEgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGtlZXAgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiBkYXRhIGFuZCBjYWNoZSBmb2xkZXJzIGFmdGVyIHVuaW5zdGFsbC5cbiAqL1xuXG4vKipcbiAqIFJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyBhcHBsaWNhdGlvbiBpZiBpcyBpbnN0YWxsZWQuXG4gKiBUaGUgY2FsbCBpcyBpZ25vcmVkIGlmIHRoZSBhcHAgaXMgbm90IGluc3RhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwSWQgLSBBcHBsaWNhdGlvbiBwYWNrYWdlIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7P1VuaW5zdGFsbE9wdGlvbnN9IG9wdGlvbnMgLSBUaGUgc2V0IG9mIHJlbW92YWwgb3B0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBhY2thZ2Ugd2FzIGZvdW5kIG9uIHRoZSBkZXZpY2UgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IHVuaW5zdGFsbGVkLlxuICovXG5jb21tYW5kcy5yZW1vdmVBcHAgPSBhc3luYyBmdW5jdGlvbiByZW1vdmVBcHAgKGFwcElkLCBvcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnVuaW5zdGFsbEFwayhhcHBJZCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZVJlbW92ZUFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKi9cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgYXBwbGljYXRpb24gaWYgaXMgaW5zdGFsbGVkLlxuICogVGhlIGNhbGwgaXMgaWdub3JlZCBpZiB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHtNb2JpbGVSZW1vdmVBcHBPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gU2FtZSBhcyBpbiBgcmVtb3ZlQXBwYFxuICovXG5jb21tYW5kcy5tb2JpbGVSZW1vdmVBcHAgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVSZW1vdmVBcHAgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGFwcElkIH0gPSByZXF1aXJlQXJncygnYXBwSWQnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMucmVtb3ZlQXBwKGFwcElkLCBvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVGVybWluYXRlT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSB0aW1lb3V0IFs1MDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwIGlzIHRlcm1pbmF0ZWQuIFRoZSBtZXRob2Qgd2lsbCBza2lwXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2luZyB0aGUgYXBwIHN0YXRlIGNoZWNrIGlmIHRoZSB0aW1lb3V0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgbG93ZXIgb3IgZXF1YWwgdG8gemVyby4gVGhlbiwgdGhlIHJldHVyblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgd2lsbCBiZSB0cnVlLlxuICovXG5cbi8qKlxuICogVGVybWluYXRlcyB0aGUgYXBwIGlmIGl0IGlzIHJ1bm5pbmcuIElmIHRoZSBnaXZlbiB0aW1lb3V0IHdhcyBsb3dlciBvciBlcXVhbCB0byB6ZXJvLFxuICogaXQgcmV0dXJucyB0cnVlIGFmdGVyIHRlcm1pbmF0aW5nIHRoZSBhcHAgd2l0aG91dCBjaGVja2luZyB0aGUgYXBwIHN0YXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllclxuICogQHBhcmFtIHs/VGVybWluYXRlT3B0aW9uc30gb3B0aW9ucyAtIFRoZSBzZXQgb2YgYXBwbGljYXRpb24gdGVybWluYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFwcCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgdGVybWluYXRlZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgYXBwIGhhcyBub3QgYmVlbiB0ZXJtaW5hdGVkIHdpdGhpbiB0aGUgZ2l2ZW4gdGltZW91dC5cbiAqL1xuY29tbWFuZHMudGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gdGVybWluYXRlQXBwIChhcHBJZCwgb3B0aW9ucyA9IHt9KSB7XG4gIHRoaXMubG9nLmluZm8oYFRlcm1pbmF0aW5nICcke2FwcElkfSdgKTtcbiAgaWYgKCEoYXdhaXQgdGhpcy5hZGIucHJvY2Vzc0V4aXN0cyhhcHBJZCkpKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgVGhlIGFwcCAnJHthcHBJZH0nIGlzIG5vdCBydW5uaW5nYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcChhcHBJZCk7XG4gIGNvbnN0IHRpbWVvdXQgPSB1dGlsLmhhc1ZhbHVlKG9wdGlvbnMudGltZW91dCkgJiYgIWlzTmFOKG9wdGlvbnMudGltZW91dCkgPyBwYXJzZUludChvcHRpb25zLnRpbWVvdXQsIDEwKSA6IDUwMDtcblxuICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgJyR7YXBwSWR9JyBoYXMgYmVlbiB0ZXJtaW5hdGVkLiBTa2lwIGNoZWNraW5nIHRoZSBhcHBsaWNhdGlvbiBwcm9jZXNzIHN0YXRlIGAgK1xuICAgICAgYHNpbmNlIHRoZSB0aW1lb3V0IHdhcyBzZXQgYXMgJHt0aW1lb3V0fW1zYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGFwcElkKSA8PSBBUFBfU1RBVEUuTk9UX1JVTk5JTkcsXG4gICAgICB7d2FpdE1zOiB0aW1lb3V0LCBpbnRlcnZhbE1zOiAxMDB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRoaXMubG9nLmVycm9yQW5kVGhyb3coYCcke2FwcElkfScgaXMgc3RpbGwgcnVubmluZyBhZnRlciAke3RpbWVvdXR9bXMgdGltZW91dGApO1xuICB9XG4gIHRoaXMubG9nLmluZm8oYCcke2FwcElkfScgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHRlcm1pbmF0ZWRgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZVRlcm1pbmF0ZUFwcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBJZCAtIEFwcGxpY2F0aW9uIHBhY2thZ2UgaWRlbnRpZmllci4gTXVzdCBiZSBhbHdheXMgcHJvdmlkZWQuXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IHRpbWVvdXQgWzUwMF0gLSBUaGUgY291bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgdW50aWwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgdGVybWluYXRlZC5cbiAqL1xuXG4vKipcbiAqIFRlcm1pbmF0ZXMgdGhlIGFwcCBpZiBpdCBpcyBydW5uaW5nLlxuICpcbiAqIEBwYXJhbSB7TW9iaWxlVGVybWluYXRlQXBwT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge2Jvb2xlYW59IFNhbWUgYXMgaW4gYHRlcm1pbmF0ZUFwcGBcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGUgYXBwIGhhcyBub3QgYmVlbiB0ZXJtaW5hdGVkIHdpdGhpbiB0aGUgZ2l2ZW4gdGltZW91dC5cbiAqL1xuY29tbWFuZHMubW9iaWxlVGVybWluYXRlQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVGVybWluYXRlQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBhcHBJZCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcElkJywgb3B0cyk7XG4gIHJldHVybiBhd2FpdCB0aGlzLnRlcm1pbmF0ZUFwcChhcHBJZCwgb3B0cyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEluc3RhbGxPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNjAwMDBdIC0gVGhlIGNvdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcCBpcyBpbnN0YWxsZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFsbG93VGVzdFBhY2thZ2VzIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBhbGxvdyB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlcyBpbnN0YWxsYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVNkY2FyZCBbZmFsc2VdIC0gU2V0IHRvIHRydWUgdG8gaW5zdGFsbCB0aGUgYXBwIG9uIHNkY2FyZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGRldmljZSBtZW1vcnkuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGdyYW50UGVybWlzc2lvbnMgW2ZhbHNlXSAtIFNldCB0byB0cnVlIGluIG9yZGVyIHRvIGdyYW50IGFsbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMgcmVxdWVzdGVkIGluIHRoZSBhcHBsaWNhdGlvbidzIG1hbmlmZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXIgQW5kcm9pZCA2Ky5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVwbGFjZSBbdHJ1ZV0gLSBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IGRvbid0IHdhbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gYmUgdXBncmFkZWQvcmVpbnN0YWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdCBpcyBhbHJlYWR5IHByZXNlbnQgb24gdGhlIGRldmljZS5cbiAqL1xuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBnaXZlbiBhcHBsaWNhdGlvbiB0byB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBsb2NhbCBhcGsgcGF0aCBvciBhIHJlbW90ZSB1cmxcbiAqIEBwYXJhbSB7P0luc3RhbGxPcHRpb25zfSBvcHRpb25zIC0gVGhlIHNldCBvZiBpbnN0YWxsYXRpb24gb3B0aW9uc1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBnaXZlbiBhcGsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWNoYWJsZVxuICovXG5jb21tYW5kcy5pbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEFwcCAoYXBwUGF0aCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGxvY2FsUGF0aCA9IGF3YWl0IHRoaXMuaGVscGVycy5jb25maWd1cmVBcHAoYXBwUGF0aCwgQVBQX0VYVEVOU0lPTlMpO1xuICBhd2FpdCB0aGlzLmFkYi5pbnN0YWxsKGxvY2FsUGF0aCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IE1vYmlsZUluc3RhbGxBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBsb2NhbCBhcGsgcGF0aCBvciBhIHJlbW90ZSB1cmwuIE11c3QgYmUgYWx3YXlzIHByb3ZpZGVkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzYwMDAwXSAtIFRoZSBjb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAgaXMgaW5zdGFsbGVkLlxuICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd1Rlc3RQYWNrYWdlcyBbZmFsc2VdIC0gU2V0IHRvIHRydWUgaW4gb3JkZXIgdG8gYWxsb3cgdGVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgaW5zdGFsbGF0aW9uLlxuICogQHByb3BlcnR5IHtib29sZWFufSB1c2VTZGNhcmQgW2ZhbHNlXSAtIFNldCB0byB0cnVlIHRvIGluc3RhbGwgdGhlIGFwcCBvbiBzZGNhcmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0ZWFkIG9mIHRoZSBkZXZpY2UgbWVtb3J5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBncmFudFBlcm1pc3Npb25zIFtmYWxzZV0gLSBTZXQgdG8gdHJ1ZSBpbiBvcmRlciB0byBncmFudCBhbGwgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zIHJlcXVlc3RlZCBpbiB0aGUgYXBwbGljYXRpb24ncyBtYW5pZmVzdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGFmdGVyIHRoZSBpbnN0YWxsYXRpb24gaXMgY29tcGxldGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVyIEFuZHJvaWQgNisuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGxhY2UgW3RydWVdIC0gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHVwZ3JhZGVkL3JlaW5zdGFsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXQgaXMgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSBkZXZpY2UuXG4gKi9cblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gdG8gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHBhcmFtIHtNb2JpbGVJbnN0YWxsQXBwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZSBnaXZlbiBhcGsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWNoYWJsZVxuICovXG5jb21tYW5kcy5tb2JpbGVJbnN0YWxsQXBwID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSW5zdGFsbEFwcCAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHsgYXBwUGF0aCB9ID0gcmVxdWlyZUFyZ3MoJ2FwcFBhdGgnLCBvcHRzKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuaW5zdGFsbEFwcChhcHBQYXRoLCBvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ2xlYXJBcHBPcHRpb25zXG4gKiBAcHJvcGVydHkgeyFzdHJpbmd9IGFwcElkIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBhcHBsaWNhdGlvbiBwYWNrYWdlIHRvIGJlIGNsZWFyZWRcbiAqL1xuXG4vKipcbiAqIERlbGV0ZXMgYWxsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgcGFja2FnZS5cbiAqXG4gKiBAcGFyYW0ge0NsZWFyQXBwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIGNsZWFuaW5nIG9mIHRoZSBhcHAgZGF0YSBmYWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVDbGVhckFwcCA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUNsZWFyQXBwIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2FwcElkfSA9IG9wdHM7XG4gIGlmICghYXBwSWQpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKGBUaGUgJ2FwcElkJyBhcmd1bWVudCBpcyByZXF1aXJlZGApO1xuICB9XG4gIGF3YWl0IHRoaXMuYWRiLmNsZWFyKGFwcElkKTtcbn07XG5cbmV4cG9ydCB7IGNvbW1hbmRzIH07XG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxjQUFjLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO0FBQ3hDLE1BQU1DLHNCQUFzQixHQUFHLG1EQUFtRDtBQUVsRixNQUFNQyxRQUFRLEdBQUcsQ0FBQyxDQUFDOztBQUFDO0FBUXBCQSxRQUFRLENBQUNDLGNBQWMsR0FBRyxlQUFlQSxjQUFjLENBQUVDLEtBQUssRUFBRTtFQUM5RCxPQUFPLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNGLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDO0FBQzdDLENBQUM7O0FBYURGLFFBQVEsQ0FBQ0ksb0JBQW9CLEdBQUcsZUFBZUEsb0JBQW9CLENBQUVDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUM5RSxNQUFNO0lBQUVIO0VBQU0sQ0FBQyxHQUFHLElBQUFJLGtCQUFXLEVBQUMsT0FBTyxFQUFFRCxJQUFJLENBQUM7RUFDNUMsT0FBTyxNQUFNLElBQUksQ0FBQ0osY0FBYyxDQUFDQyxLQUFLLENBQUM7QUFDekMsQ0FBQzs7QUFhREYsUUFBUSxDQUFDTyxhQUFhLEdBQUcsZUFBZUEsYUFBYSxDQUFFTCxLQUFLLEVBQUU7RUFDNUQsSUFBSSxDQUFDTSxHQUFHLENBQUNDLElBQUksQ0FBRSwwQkFBeUJQLEtBQU0sR0FBRSxDQUFDO0VBQ2pELElBQUksRUFBQyxNQUFNLElBQUksQ0FBQ0MsR0FBRyxDQUFDRixjQUFjLENBQUNDLEtBQUssQ0FBQyxHQUFFO0lBQ3pDLE9BQU9RLHlCQUFTLENBQUNDLGFBQWE7RUFDaEM7RUFDQSxJQUFJLEVBQUMsTUFBTSxJQUFJLENB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-management.js","names":["APP_EXTENSIONS","RESOLVER_ACTIVITY_NAME","commands","isAppInstalled","appId","adb","mobileIsAppInstalled","opts","requireArgs","queryAppState","log","info","APP_STATE","NOT_INSTALLED","processExists","NOT_RUNNING","appIdRe","RegExp","_","escapeRegExp","line","dumpWindows","split","test","some","x","includes","RUNNING_IN_FOREGROUND","RUNNING_IN_BACKGROUND","mobileQueryAppState","activateApp","debug","apiLevel","getApiLevel","cmd","output","shell","e","errorAndThrow","message","activityName","resolveLaunchableActivity","preferCmd","stdout","Error","mobileActivateApp","removeApp","options","uninstallApk","mobileRemoveApp","terminateApp","forceStop","timeout","util","hasValue","isNaN","parseInt","waitForCondition","waitMs","intervalMs","mobileTerminateApp","installApp","appPath","localPath","helpers","configureApp","install","mobileInstallApp","mobileClearApp","errors","InvalidArgumentError","clear"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["import _ from 'lodash';\nimport { waitForCondition } from 'asyncbox';\nimport { util } from 'appium/support';\nimport { APP_STATE } from '../android-helpers';\nimport { errors } from 'appium/driver';\nimport { requireArgs } from '../utils';\n\nconst APP_EXTENSIONS = ['.apk', '.apks'];\nconst RESOLVER_ACTIVITY_NAME = 'android/com.android.internal.app.ResolverActivity';\n\nconst commands = {};\n\n/**\n * Verify whether an application is installed or not\n *\n * @param {string} appId - Application package identifier\n * @returns {boolean} true if the app is installed\n */\ncommands.isAppInstalled = async function isAppInstalled (appId) {\n return await this.adb.isAppInstalled(appId);\n};\n\n/**\n * @typedef {Object} MobileAppInstalledOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Verify whether an application is installed or not\n *\n * @param {MobileAppInstalledOptions} opts\n * @returns {boolean} Same as in `isAppInstalled`\n */\ncommands.mobileIsAppInstalled = async function mobileIsAppInstalled (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.isAppInstalled(appId);\n};\n\n/**\n * Queries the current state of the app.\n *\n * @param {string} appId - Application package identifier\n * @returns {number} The corresponding constant, which describes\n * the current application state:\n * 0 - is the app is not installed\n * 1 - if the app is installed, but is not running\n * 3 - if the app is running in the background\n * 4 - if the app is running in the foreground\n */\ncommands.queryAppState = async function queryAppState (appId) {\n this.log.info(`Querying the state of '${appId}'`);\n if (!await this.adb.isAppInstalled(appId)) {\n return APP_STATE.NOT_INSTALLED;\n }\n if (!await this.adb.processExists(appId)) {\n return APP_STATE.NOT_RUNNING;\n }\n const appIdRe = new RegExp(`\\\\b${_.escapeRegExp(appId)}/`);\n for (const line of (await this.adb.dumpWindows()).split('\\n')) {\n if (appIdRe.test(line) && ['mCurrentFocus', 'mFocusedApp'].some((x) => line.includes(x))) {\n return APP_STATE.RUNNING_IN_FOREGROUND;\n }\n }\n return APP_STATE.RUNNING_IN_BACKGROUND;\n};\n\n/**\n * @typedef {Object} MobileQueryAppStateOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Queries the current state of the app.\n *\n * @param {MobileQueryAppStateOptions} opts\n * @returns {number} Same as in `queryAppState`\n */\ncommands.mobileQueryAppState = async function mobileQueryAppState (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.queryAppState(appId);\n};\n\n/**\n * Activates the given application or launches it if necessary.\n * The action literally simulates\n * clicking the corresponding application icon on the dashboard.\n *\n * @param {string} appId - Application package identifier\n * @throws {Error} If the app cannot be activated\n */\ncommands.activateApp = async function activateApp (appId) {\n this.log.debug(`Activating '${appId}'`);\n const apiLevel = await this.adb.getApiLevel();\n // Fallback to Monkey in older APIs\n if (apiLevel < 24) {\n // The monkey command could raise an issue as https://stackoverflow.com/questions/44860475/how-to-use-the-monkey-command-with-an-android-system-that-doesnt-have-physical\n // but '--pct-syskeys 0' could cause another background process issue. https://github.com/appium/appium/issues/16941#issuecomment-1129837285\n const cmd = ['monkey',\n '-p', appId,\n '-c', 'android.intent.category.LAUNCHER',\n '1'];\n let output = '';\n try {\n output = await this.adb.shell(cmd);\n this.log.debug(`Command stdout: ${output}`);\n } catch (e) {\n this.log.errorAndThrow(`Cannot activate '${appId}'. Original error: ${e.message}`);\n }\n if (output.includes('monkey aborted')) {\n this.log.errorAndThrow(`Cannot activate '${appId}'. Are you sure it is installed?`);\n }\n return;\n }\n\n let activityName = await this.adb.resolveLaunchableActivity(appId);\n if (activityName === RESOLVER_ACTIVITY_NAME) {\n // https://github.com/appium/appium/issues/17128\n this.log.debug(\n `The launchable activity name of '${appId}' was resolved to '${activityName}'. ` +\n `Switching the resolver to not use cmd`\n );\n activityName = await this.adb.resolveLaunchableActivity(appId, {preferCmd: false});\n }\n\n const stdout = await this.adb.shell([\n 'am', (apiLevel < 26) ? 'start' : 'start-activity',\n '-a', 'android.intent.action.MAIN',\n '-c', 'android.intent.category.LAUNCHER',\n // FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED\n // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_NEW_TASK\n // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_RESET_TASK_IF_NEEDED\n '-f', '0x10200000',\n '-n', activityName,\n ]);\n this.log.debug(stdout);\n if (/^error:/mi.test(stdout)) {\n throw new Error(`Cannot activate '${appId}'. Original error: ${stdout}`);\n }\n};\n\n/**\n * @typedef {Object} MobileActivateAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Activates the given application or launches it if necessary.\n * The action literally simulates\n * clicking the corresponding application icon on the dashboard.\n *\n * @param {MobileActivateAppOptions} opts\n * @throws {Error} If the app cannot be activated\n */\ncommands.mobileActivateApp = async function mobileActivateApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.activateApp(appId);\n};\n\n/**\n * @typedef {Object} UninstallOptions\n * @property {number} timeout [20000] - The count of milliseconds to wait until the\n * app is uninstalled.\n * @property {boolean} keepData [false] - Set to true in order to keep the\n * application data and cache folders after uninstall.\n */\n\n/**\n * Remove the corresponding application if is installed.\n * The call is ignored if the app is not installed.\n *\n * @param {string} appId - Application package identifier\n * @param {?UninstallOptions} options - The set of removal options\n * @returns {boolean} True if the package was found on the device and\n * successfully uninstalled.\n */\ncommands.removeApp = async function removeApp (appId, options = {}) {\n return await this.adb.uninstallApk(appId, options);\n};\n\n/**\n * @typedef {Object} MobileRemoveAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Remove the corresponding application if is installed.\n * The call is ignored if the app is not installed.\n *\n * @param {MobileRemoveAppOptions} opts\n * @returns {boolean} Same as in `removeApp`\n */\ncommands.mobileRemoveApp = async function mobileRemoveApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.removeApp(appId, opts);\n};\n\n/**\n * @typedef {Object} TerminateOptions\n * @property {number|string} timeout [500] - The count of milliseconds to wait until the\n * app is terminated.\n */\n\n/**\n * Terminates the app if it is running.\n *\n * @param {string} appId - Application package identifier\n * @param {?TerminateOptions} options - The set of application termination options\n * @returns {boolean} True if the app has been successfully terminated.\n * @throws {Error} if the app has not been terminated within the given timeout.\n */\ncommands.terminateApp = async function terminateApp (appId, options = {}) {\n this.log.info(`Terminating '${appId}'`);\n if (!(await this.adb.processExists(appId))) {\n this.log.info(`The app '${appId}' is not running`);\n return false;\n }\n await this.adb.forceStop(appId);\n const timeout = util.hasValue(options.timeout) && !isNaN(options.timeout) ? parseInt(options.timeout, 10) : 500;\n try {\n await waitForCondition(async () => await this.queryAppState(appId) <= APP_STATE.NOT_RUNNING,\n {waitMs: timeout, intervalMs: 100});\n } catch (e) {\n this.log.errorAndThrow(`'${appId}' is still running after ${timeout}ms timeout`);\n }\n this.log.info(`'${appId}' has been successfully terminated`);\n return true;\n};\n\n/**\n * @typedef {Object} MobileTerminateAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n * @property {number|string} timeout [500] - The count of milliseconds to wait until the\n * app is terminated.\n */\n\n/**\n * Terminates the app if it is running.\n *\n * @param {MobileTerminateAppOptions} opts\n * @returns {boolean} Same as in `terminateApp`\n * @throws {Error} if the app has not been terminated within the given timeout.\n */\ncommands.mobileTerminateApp = async function mobileTerminateApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.terminateApp(appId, opts);\n};\n\n/**\n * @typedef {Object} InstallOptions\n * @property {number} timeout [60000] - The count of milliseconds to wait until the\n * app is installed.\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n */\n\n/**\n * Installs the given application to the device under test\n *\n * @param {string} appPath - The local apk path or a remote url\n * @param {?InstallOptions} options - The set of installation options\n * @throws {Error} if the given apk does not exist or is not reachable\n */\ncommands.installApp = async function installApp (appPath, options = {}) {\n const localPath = await this.helpers.configureApp(appPath, APP_EXTENSIONS);\n await this.adb.install(localPath, options);\n};\n\n/**\n * @typedef {Object} MobileInstallAppOptions\n * @property {string} appPath - The local apk path or a remote url. Must be always provided.\n * @property {number} timeout [60000] - The count of milliseconds to wait until the\n * app is installed.\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n */\n\n/**\n * Installs the given application to the device under test\n *\n * @param {MobileInstallAppOptions} opts\n * @throws {Error} if the given apk does not exist or is not reachable\n */\ncommands.mobileInstallApp = async function mobileInstallApp (opts = {}) {\n const { appPath } = requireArgs('appPath', opts);\n return await this.installApp(appPath, opts);\n};\n\n/**\n * @typedef {Object} ClearAppOptions\n * @property {!string} appId The identifier of the application package to be cleared\n */\n\n/**\n * Deletes all data associated with a package.\n *\n * @param {ClearAppOptions} opts\n * @throws {Error} If cleaning of the app data fails\n */\ncommands.mobileClearApp = async function mobileClearApp (opts = {}) {\n const {appId} = opts;\n if (!appId) {\n throw new errors.InvalidArgumentError(`The 'appId' argument is required`);\n }\n await this.adb.clear(appId);\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-management.js","names":["APP_EXTENSIONS","RESOLVER_ACTIVITY_NAME","commands","isAppInstalled","appId","adb","mobileIsAppInstalled","opts","requireArgs","queryAppState","log","info","APP_STATE","NOT_INSTALLED","processExists","NOT_RUNNING","appIdRe","RegExp","_","escapeRegExp","line","dumpWindows","split","test","some","x","includes","RUNNING_IN_FOREGROUND","RUNNING_IN_BACKGROUND","mobileQueryAppState","activateApp","debug","apiLevel","getApiLevel","cmd","output","shell","e","errorAndThrow","message","activityName","resolveLaunchableActivity","preferCmd","stdout","Error","mobileActivateApp","removeApp","options","uninstallApk","mobileRemoveApp","terminateApp","forceStop","timeout","util","hasValue","isNaN","parseInt","waitForCondition","waitMs","intervalMs","mobileTerminateApp","installApp","appPath","localPath","helpers","configureApp","install","mobileInstallApp","mobileClearApp","errors","InvalidArgumentError","clear"],"sources":["../../../lib/commands/app-management.js"],"sourcesContent":["import _ from 'lodash';\nimport { waitForCondition } from 'asyncbox';\nimport { util } from 'appium/support';\nimport { APP_STATE } from '../android-helpers';\nimport { errors } from 'appium/driver';\nimport { requireArgs } from '../utils';\n\nconst APP_EXTENSIONS = ['.apk', '.apks'];\nconst RESOLVER_ACTIVITY_NAME = 'android/com.android.internal.app.ResolverActivity';\n\nconst commands = {};\n\n/**\n * Verify whether an application is installed or not\n *\n * @param {string} appId - Application package identifier\n * @returns {boolean} true if the app is installed\n */\ncommands.isAppInstalled = async function isAppInstalled (appId) {\n return await this.adb.isAppInstalled(appId);\n};\n\n/**\n * @typedef {Object} MobileAppInstalledOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Verify whether an application is installed or not\n *\n * @param {MobileAppInstalledOptions} opts\n * @returns {boolean} Same as in `isAppInstalled`\n */\ncommands.mobileIsAppInstalled = async function mobileIsAppInstalled (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.isAppInstalled(appId);\n};\n\n/**\n * Queries the current state of the app.\n *\n * @param {string} appId - Application package identifier\n * @returns {number} The corresponding constant, which describes\n * the current application state:\n * 0 - is the app is not installed\n * 1 - if the app is installed, but is not running\n * 3 - if the app is running in the background\n * 4 - if the app is running in the foreground\n */\ncommands.queryAppState = async function queryAppState (appId) {\n this.log.info(`Querying the state of '${appId}'`);\n if (!await this.adb.isAppInstalled(appId)) {\n return APP_STATE.NOT_INSTALLED;\n }\n if (!await this.adb.processExists(appId)) {\n return APP_STATE.NOT_RUNNING;\n }\n const appIdRe = new RegExp(`\\\\b${_.escapeRegExp(appId)}/`);\n for (const line of (await this.adb.dumpWindows()).split('\\n')) {\n if (appIdRe.test(line) && ['mCurrentFocus', 'mFocusedApp'].some((x) => line.includes(x))) {\n return APP_STATE.RUNNING_IN_FOREGROUND;\n }\n }\n return APP_STATE.RUNNING_IN_BACKGROUND;\n};\n\n/**\n * @typedef {Object} MobileQueryAppStateOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Queries the current state of the app.\n *\n * @param {MobileQueryAppStateOptions} opts\n * @returns {number} Same as in `queryAppState`\n */\ncommands.mobileQueryAppState = async function mobileQueryAppState (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.queryAppState(appId);\n};\n\n/**\n * Activates the given application or launches it if necessary.\n * The action literally simulates\n * clicking the corresponding application icon on the dashboard.\n *\n * @param {string} appId - Application package identifier\n * @throws {Error} If the app cannot be activated\n */\ncommands.activateApp = async function activateApp (appId) {\n this.log.debug(`Activating '${appId}'`);\n const apiLevel = await this.adb.getApiLevel();\n // Fallback to Monkey in older APIs\n if (apiLevel < 24) {\n // The monkey command could raise an issue as https://stackoverflow.com/questions/44860475/how-to-use-the-monkey-command-with-an-android-system-that-doesnt-have-physical\n // but '--pct-syskeys 0' could cause another background process issue. https://github.com/appium/appium/issues/16941#issuecomment-1129837285\n const cmd = ['monkey',\n '-p', appId,\n '-c', 'android.intent.category.LAUNCHER',\n '1'];\n let output = '';\n try {\n output = await this.adb.shell(cmd);\n this.log.debug(`Command stdout: ${output}`);\n } catch (e) {\n this.log.errorAndThrow(`Cannot activate '${appId}'. Original error: ${e.message}`);\n }\n if (output.includes('monkey aborted')) {\n this.log.errorAndThrow(`Cannot activate '${appId}'. Are you sure it is installed?`);\n }\n return;\n }\n\n let activityName = await this.adb.resolveLaunchableActivity(appId);\n if (activityName === RESOLVER_ACTIVITY_NAME) {\n // https://github.com/appium/appium/issues/17128\n this.log.debug(\n `The launchable activity name of '${appId}' was resolved to '${activityName}'. ` +\n `Switching the resolver to not use cmd`\n );\n activityName = await this.adb.resolveLaunchableActivity(appId, {preferCmd: false});\n }\n\n const stdout = await this.adb.shell([\n 'am', (apiLevel < 26) ? 'start' : 'start-activity',\n '-a', 'android.intent.action.MAIN',\n '-c', 'android.intent.category.LAUNCHER',\n // FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_RESET_TASK_IF_NEEDED\n // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_NEW_TASK\n // https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_RESET_TASK_IF_NEEDED\n '-f', '0x10200000',\n '-n', activityName,\n ]);\n this.log.debug(stdout);\n if (/^error:/mi.test(stdout)) {\n throw new Error(`Cannot activate '${appId}'. Original error: ${stdout}`);\n }\n};\n\n/**\n * @typedef {Object} MobileActivateAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Activates the given application or launches it if necessary.\n * The action literally simulates\n * clicking the corresponding application icon on the dashboard.\n *\n * @param {MobileActivateAppOptions} opts\n * @throws {Error} If the app cannot be activated\n */\ncommands.mobileActivateApp = async function mobileActivateApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.activateApp(appId);\n};\n\n/**\n * @typedef {Object} UninstallOptions\n * @property {number} timeout [20000] - The count of milliseconds to wait until the\n * app is uninstalled.\n * @property {boolean} keepData [false] - Set to true in order to keep the\n * application data and cache folders after uninstall.\n */\n\n/**\n * Remove the corresponding application if is installed.\n * The call is ignored if the app is not installed.\n *\n * @param {string} appId - Application package identifier\n * @param {?UninstallOptions} options - The set of removal options\n * @returns {boolean} True if the package was found on the device and\n * successfully uninstalled.\n */\ncommands.removeApp = async function removeApp (appId, options = {}) {\n return await this.adb.uninstallApk(appId, options);\n};\n\n/**\n * @typedef {Object} MobileRemoveAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n */\n\n/**\n * Remove the corresponding application if is installed.\n * The call is ignored if the app is not installed.\n *\n * @param {MobileRemoveAppOptions} opts\n * @returns {boolean} Same as in `removeApp`\n */\ncommands.mobileRemoveApp = async function mobileRemoveApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.removeApp(appId, opts);\n};\n\n/**\n * @typedef {Object} TerminateOptions\n * @property {number|string} timeout [500] - The count of milliseconds to wait until the\n * app is terminated. The method will skip\n * checking the app state check if the timeout\n * was lower or equal to zero. Then, the return\n * value will be true.\n */\n\n/**\n * Terminates the app if it is running. If the given timeout was lower or equal to zero,\n * it returns true after terminating the app without checking the app state.\n *\n * @param {string} appId - Application package identifier\n * @param {?TerminateOptions} options - The set of application termination options\n * @returns {boolean} True if the app has been successfully terminated.\n * @throws {Error} if the app has not been terminated within the given timeout.\n */\ncommands.terminateApp = async function terminateApp (appId, options = {}) {\n this.log.info(`Terminating '${appId}'`);\n if (!(await this.adb.processExists(appId))) {\n this.log.info(`The app '${appId}' is not running`);\n return false;\n }\n await this.adb.forceStop(appId);\n const timeout = util.hasValue(options.timeout) && !isNaN(options.timeout) ? parseInt(options.timeout, 10) : 500;\n\n if (timeout <= 0) {\n this.log.info(`'${appId}' has been terminated. Skip checking the application process state ` +\n `since the timeout was set as ${timeout}ms`);\n return true;\n }\n\n try {\n await waitForCondition(async () => await this.queryAppState(appId) <= APP_STATE.NOT_RUNNING,\n {waitMs: timeout, intervalMs: 100});\n } catch (e) {\n this.log.errorAndThrow(`'${appId}' is still running after ${timeout}ms timeout`);\n }\n this.log.info(`'${appId}' has been successfully terminated`);\n return true;\n};\n\n/**\n * @typedef {Object} MobileTerminateAppOptions\n * @property {string} appId - Application package identifier. Must be always provided.\n * @property {number|string} timeout [500] - The count of milliseconds to wait until the\n * app is terminated.\n */\n\n/**\n * Terminates the app if it is running.\n *\n * @param {MobileTerminateAppOptions} opts\n * @returns {boolean} Same as in `terminateApp`\n * @throws {Error} if the app has not been terminated within the given timeout.\n */\ncommands.mobileTerminateApp = async function mobileTerminateApp (opts = {}) {\n const { appId } = requireArgs('appId', opts);\n return await this.terminateApp(appId, opts);\n};\n\n/**\n * @typedef {Object} InstallOptions\n * @property {number} timeout [60000] - The count of milliseconds to wait until the\n * app is installed.\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n */\n\n/**\n * Installs the given application to the device under test\n *\n * @param {string} appPath - The local apk path or a remote url\n * @param {?InstallOptions} options - The set of installation options\n * @throws {Error} if the given apk does not exist or is not reachable\n */\ncommands.installApp = async function installApp (appPath, options = {}) {\n const localPath = await this.helpers.configureApp(appPath, APP_EXTENSIONS);\n await this.adb.install(localPath, options);\n};\n\n/**\n * @typedef {Object} MobileInstallAppOptions\n * @property {string} appPath - The local apk path or a remote url. Must be always provided.\n * @property {number} timeout [60000] - The count of milliseconds to wait until the\n * app is installed.\n * @property {boolean} allowTestPackages [false] - Set to true in order to allow test\n * packages installation.\n * @property {boolean} useSdcard [false] - Set to true to install the app on sdcard\n * instead of the device memory.\n * @property {boolean} grantPermissions [false] - Set to true in order to grant all the\n * permissions requested in the application's manifest\n * automatically after the installation is completed\n * under Android 6+.\n * @property {boolean} replace [true] - Set it to false if you don't want\n * the application to be upgraded/reinstalled\n * if it is already present on the device.\n */\n\n/**\n * Installs the given application to the device under test\n *\n * @param {MobileInstallAppOptions} opts\n * @throws {Error} if the given apk does not exist or is not reachable\n */\ncommands.mobileInstallApp = async function mobileInstallApp (opts = {}) {\n const { appPath } = requireArgs('appPath', opts);\n return await this.installApp(appPath, opts);\n};\n\n/**\n * @typedef {Object} ClearAppOptions\n * @property {!string} appId The identifier of the application package to be cleared\n */\n\n/**\n * Deletes all data associated with a package.\n *\n * @param {ClearAppOptions} opts\n * @throws {Error} If cleaning of the app data fails\n */\ncommands.mobileClearApp = async function mobileClearApp (opts = {}) {\n const {appId} = opts;\n if (!appId) {\n throw new errors.InvalidArgumentError(`The 'appId' argument is required`);\n }\n await this.adb.clear(appId);\n};\n\nexport { commands };\nexport default commands;\n"],"mappings":"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"}
|
|
@@ -85,7 +85,7 @@ helpers.defaultContextName = function defaultContextName() {
|
|
|
85
85
|
return _webviewHelpers.NATIVE_WIN;
|
|
86
86
|
};
|
|
87
87
|
helpers.defaultWebviewName = function defaultWebviewName() {
|
|
88
|
-
return _webviewHelpers.WEBVIEW_BASE + this.opts.appPackage;
|
|
88
|
+
return _webviewHelpers.WEBVIEW_BASE + (this.opts.autoWebviewName || this.opts.appPackage);
|
|
89
89
|
};
|
|
90
90
|
helpers.isWebContext = function isWebContext() {
|
|
91
91
|
return this.curContext !== null && this.curContext !== _webviewHelpers.NATIVE_WIN;
|
|
@@ -331,4 +331,4 @@ exports.setupNewChromedriver = setupNewChromedriver;
|
|
|
331
331
|
Object.assign(extensions, commands, helpers);
|
|
332
332
|
var _default = extensions;
|
|
333
333
|
exports.default = _default;
|
|
334
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q3VycmVudENvbnRleHQiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZ2V0Q29udGV4dHMiLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsIm9wdHMiLCJhc3NpZ25Db250ZXh0cyIsInNldENvbnRleHQiLCJuYW1lIiwidXRpbCIsImhhc1ZhbHVlIiwiV0VCVklFV19XSU4iLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjb250ZXh0cyIsIl8iLCJpbmNsdWRlcyIsImVycm9ycyIsIk5vU3VjaENvbnRleHRFcnJvciIsInN3aXRjaENvbnRleHQiLCJtb2JpbGVHZXRDb250ZXh0cyIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyIsIndlYnZpZXdEZXZ0b29sc1BvcnQiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3cyIsInBhcnNlV2Vidmlld05hbWVzIiwiTkFUSVZFX1dJTiIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQ2hyb21lZHJpdmVyQ29udGV4dCIsInN0YXJ0Q2hyb21lZHJpdmVyUHJveHkiLCJyZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJFcnJvciIsIldFQlZJRVdfQkFTRSIsImFwcFBhY2thZ2UiLCJpc1dlYkNvbnRleHQiLCJjb250ZXh0IiwiY2QiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsInNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIiLCJjbG9uZURlZXAiLCJjaHJvbWVVc2VSdW5uaW5nQXBwIiwiZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIiwiYW5kcm9pZFBhY2thZ2UiLCJtYXRjaCIsImxlbmd0aCIsImNocm9tZUFuZHJvaWRQYWNrYWdlIiwiaGFzIiwibWFwIiwid20iLCJ3ZWJ2aWV3TmFtZSIsImtub3duUGFja2FnZSIsIktOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTIiwiYXBwU3RhdGUiLCJxdWVyeUFwcFN0YXRlIiwiQVBQX1NUQVRFIiwiUlVOTklOR19JTl9CQUNLR1JPVU5EIiwiUlVOTklOR19JTl9GT1JFR1JPVU5EIiwiaW5mbyIsInNldHVwTmV3Q2hyb21lZHJpdmVyIiwiY3VyRGV2aWNlSWQiLCJvbiIsIkNocm9tZWRyaXZlciIsIkVWRU5UX0NIQU5HRUQiLCJtc2ciLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJvbkNocm9tZWRyaXZlclN0b3AiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsInByb3h5UmVxIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cHJveHkiLCJjb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJ3YXJuIiwiZXJyIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJrZXlzIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsIm1lc3NhZ2UiLCJ2aWV3TmFtZSIsIkNIUk9NSVVNX1dJTiIsInNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lIiwiY2hyb21lT3B0aW9ucyIsImlzQXJyYXkiLCJhcmdzIiwiZGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2NvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBDaHJvbWVkcml2ZXIgZnJvbSAnYXBwaXVtLWNocm9tZWRyaXZlcic7XG5pbXBvcnQgUG9ydEZpbmRlciBmcm9tICdwb3J0ZmluZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgd2Vidmlld0hlbHBlcnMsXG4gIE5BVElWRV9XSU4sIFdFQlZJRVdfQkFTRSwgV0VCVklFV19XSU4sIENIUk9NSVVNX1dJTiwgS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVNcbn0gZnJvbSAnLi4vd2Vidmlldy1oZWxwZXJzJztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5cbmNvbnN0IENIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSA9ICdjaHJvbWVkcml2ZXJfYXV0b2Rvd25sb2FkJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEFjdHVhbCBNSlNPTldQIGNvbW1hbmQgaGFuZGxlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbmNvbW1hbmRzLmdldEN1cnJlbnRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudENvbnRleHQgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgLy8gaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBgbnVsbGAsIGluZGljYXRpbmcgbm8gY29udGV4dFxuICAvLyBleHBsaWNpdGx5IHNldCwgaXQgaXMgdGhlIGRlZmF1bHQgY29udGV4dFxuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0IHx8IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG59O1xuXG5jb21tYW5kcy5nZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICByZXR1cm4gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xufTtcblxuY29tbWFuZHMuc2V0Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKG5hbWUpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG5hbWUpKSB7XG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gV0VCVklFV19XSU4pIHtcbiAgICAvLyBoYW5kbGUgc2V0Q29udGV4dCBcIldFQlZJRVdcIlxuICAgIG5hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICB9XG4gIC8vIGlmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgd2Ugd2FudCwgZG8gbm90aGluZ1xuICBpZiAobmFtZSA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICBjb25zdCBjb250ZXh0cyA9IHRoaXMuYXNzaWduQ29udGV4dHMod2Vidmlld3NNYXBwaW5nKTtcbiAgLy8gaWYgdGhlIGNvbnRleHQgd2Ugd2FudCBkb2Vzbid0IGV4aXN0LCBmYWlsXG4gIGlmICghXy5pbmNsdWRlcyhjb250ZXh0cywgbmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaENvbnRleHRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zd2l0Y2hDb250ZXh0KG5hbWUsIHdlYnZpZXdzTWFwcGluZyk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG5hbWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYnZpZXdzTWFwcGluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb2MgVGhlIG5hbWUgb2YgdGhlIERldnRvb2xzIFVuaXggc29ja2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyBUaGUgd2ViIHZpZXcgYWxpYXMuIExvb2tzIGxpa2UgYFdFQlZJRVdfYFxuICogcHJlZml4IHBsdXMgUElEIG9yIHBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFdlYnZpZXcgaW5mb3JtYXRpb24gYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi92ZXJzaW9uIENEUCBlbmRwb2ludFxuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgV2VidmlldyBwYWdlcyBsaXN0IGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vbGlzdCBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ5IHs/c3RyaW5nfSB3ZWJ2aWV3TmFtZSBBbiBhY3R1YWwgd2VidmlldyBuYW1lIGZvciBzd2l0Y2hpbmcgY29udGV4dC5cbiAqIFRoaXMgdmFsdWUgYmVjb21lcyBudWxsIHdoZW4gZmFpbGluZyB0byBmaW5kIGEgUElEIGZvciBhIHdlYnZpZXcuXG4gKlxuICogVGhlIGZvbGxvd2luZyBqc29uIGRlbW9uc3RyYXRlcyB0aGUgZXhhbXBsZSBvZiBXZWJ2aWV3c01hcHBpbmcgb2JqZWN0LlxuICogTm90ZSB0aGF0IGBkZXNjcmlwdGlvbmAgaW4gYHBhZ2VgIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgbW9zdCBsaWtlbHkgd2hlbiBpdCBjb21lcyB0byBNb2JpbGUgQ2hyb21lKVxuICoge1xuICogICBcInByb2NcIjogXCJAd2Vidmlld19kZXZ0b29sc19yZW1vdGVfMjIxMzhcIixcbiAqICAgXCJ3ZWJ2aWV3XCI6IFwiV0VCVklFV18yMjEzOFwiLFxuICogICBcImluZm9cIjoge1xuICogICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzc0LjAuMzcyOS4xODVcIixcbiAqICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICAgICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IEFuZHJvaWQgU0RLIGJ1aWx0IGZvciB4ODYgQnVpbGQvUVNSMS4xOTA5MjAuMDAxOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc0LjAuMzcyOS4xODUgTW9iaWxlIFNhZmFyaS81MzcuMzZcIixcbiAqICAgICBcIlY4LVZlcnNpb25cIjogXCI3LjQuMjg4LjI4XCIsXG4gKiAgICAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNiAoQDIyOTU1NjgyZjk0Y2UwOTMzNjE5N2JmYjhkZmZlYTk5MWZhMzJmMGQpXCIsXG4gKiAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL2Jyb3dzZXJcIlxuICogICB9LFxuICogICBcInBhZ2VzXCI6IFtcbiAqICAgICB7XG4gKiAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwie1xcXCJhdHRhY2hlZFxcXCI6dHJ1ZSxcXFwiZW1wdHlcXFwiOmZhbHNlLFxcXCJoZWlnaHRcXFwiOjE0NTgsXFxcInNjcmVlblhcXFwiOjAsXFxcInNjcmVlbllcXFwiOjMzNixcXFwidmlzaWJsZVxcXCI6dHJ1ZSxcXFwid2lkdGhcXFwiOjEwODB9XCIsXG4gKiAgICAgICBcImRldnRvb2xzRnJvbnRlbmRVcmxcIjogXCJodHRwOi8vY2hyb21lLWRldnRvb2xzLWZyb250ZW5kLmFwcHNwb3QuY29tL3NlcnZlX3Jldi9AMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZC9pbnNwZWN0b3IuaHRtbD93cz0xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvcGFnZS8yNzMyNUNDNTBCNjAwRDMxQjIzM0Y0NUUwOTQ4N0IxRlwiLFxuICogICAgICAgXCJpZFwiOiBcIjI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcInRpdGxlXCI6IFwiUmVsZWFzZXMgwrcgYXBwaXVtL2FwcGl1bSDCtyBHaXRIdWJcIixcbiAqICAgICAgIFwidHlwZVwiOiBcInBhZ2VcIixcbiAqICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcmVsZWFzZXNcIixcbiAqICAgICAgIFwid2ViU29ja2V0RGVidWdnZXJVcmxcIjogXCJ3czovLzEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCJcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwid2Vidmlld05hbWVcIjogXCJXRUJWSUVXX2NvbS5pby5hcHBpdW0uc2V0dGluZ1wiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgd2Vidmlld3NNYXBwaW5nIGJhc2VkIG9uIENEUCBlbmRwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxXZWJ2aWV3c01hcHBpbmc+fSB3ZWJ2aWV3c01hcHBpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRDb250ZXh0cyAoKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgYW5kcm9pZERldmljZVNvY2tldDogdGhpcy5vcHRzLmFuZHJvaWREZXZpY2VTb2NrZXQsXG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHRydWUsXG4gICAgd2Vidmlld0RldnRvb2xzUG9ydDogdGhpcy5vcHRzLndlYnZpZXdEZXZ0b29sc1BvcnQsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB0cnVlXG4gIH07XG4gIHJldHVybiBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJWaWV3c01hcHBpbmcodGhpcy5hZGIsIG9wdHMpO1xufTtcblxuaGVscGVycy5hc3NpZ25Db250ZXh0cyA9IGZ1bmN0aW9uIGFzc2lnbkNvbnRleHRzICh3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe2lzQ2hyb21lU2Vzc2lvbjogdGhpcy5pc0Nocm9tZVNlc3Npb259LCB0aGlzLm9wdHMpO1xuICBjb25zdCB3ZWJ2aWV3cyA9IHdlYnZpZXdIZWxwZXJzLnBhcnNlV2Vidmlld05hbWVzKHdlYnZpZXdzTWFwcGluZywgb3B0cyk7XG4gIHRoaXMuY29udGV4dHMgPSBbTkFUSVZFX1dJTiwgLi4ud2Vidmlld3NdO1xuICB0aGlzLmxvZy5kZWJ1ZyhgQXZhaWxhYmxlIGNvbnRleHRzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29udGV4dHMpfWApO1xuICByZXR1cm4gdGhpcy5jb250ZXh0cztcbn07XG5cbmhlbHBlcnMuc3dpdGNoQ29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHN3aXRjaENvbnRleHQgKG5hbWUsIHdlYnZpZXdzTWFwcGluZykge1xuICAvLyBXZSBoYXZlIHNvbWUgb3B0aW9ucyB3aGVuIGl0IGNvbWVzIHRvIHdlYnZpZXdzLiBJZiB3ZSB3YW50IGFcbiAgLy8gQ2hyb21lZHJpdmVyIHdlYnZpZXcsIHdlIGNhbiBvbmx5IGNvbnRyb2wgb25lIGF0IGEgdGltZS5cbiAgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3RhcnQgcHJveHlpbmcgY29tbWFuZHMgZGlyZWN0bHkgdG8gY2hyb21lZHJpdmVyXG4gICAgYXdhaXQgdGhpcy5zdGFydENocm9tZWRyaXZlclByb3h5KG5hbWUsIHdlYnZpZXdzTWFwcGluZyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQodGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGlmIHdlJ3JlIG1vdmluZyB0byBhIG5vbi1jaHJvbWVkcml2ZXIgd2VidmlldywgYW5kIG91ciBjdXJyZW50IGNvbnRleHRcbiAgICAvLyBfaXNfIGEgY2hyb21lZHJpdmVyIHdlYnZpZXcsIGlmIGNhcHMgcmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBpcyBzZXRcbiAgICAvLyB0byB0cnVlIHRoZW4ga2lsbCBjaHJvbWVkcml2ZXIgc2Vzc2lvbiB1c2luZyBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyBvclxuICAgIC8vIGVsc2Ugc2ltcGx5IHN1c3BlbmQgcHJveHlpbmcgdG8gdGhlIGxhdHRlclxuICAgIGlmICh0aGlzLm9wdHMucmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ3JlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgc2V0IHRvIHRydWU7IGtpbGxpbmcgZXhpc3RpbmcgY2hyb21lZHJpdmVycycpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZG4ndCBrbm93IGhvdyB0byBoYW5kbGUgc3dpdGNoaW5nIHRvIGNvbnRleHQgJyR7bmFtZX0nYCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBPbi1vYmplY3QgY29udGV4dC1yZWxhdGVkIGhlbHBlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGUgcmVhc29uIHRoaXMgaXMgYSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYSBjb25zdGFudCBpcyB0aGF0IGJvdGggYW5kcm9pZC1cbi8vIGRyaXZlciBhbmQgc2VsZW5kcm9pZC1kcml2ZXIgdXNlIHRoaXMgbG9naWMsIGFuZCBlYWNoIG9uZSByZXR1cm5zXG4vLyBhIGRpZmZlcmVudCBkZWZhdWx0IGNvbnRleHQgbmFtZVxuaGVscGVycy5kZWZhdWx0Q29udGV4dE5hbWUgPSBmdW5jdGlvbiBkZWZhdWx0Q29udGV4dE5hbWUgKCkge1xuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmhlbHBlcnMuZGVmYXVsdFdlYnZpZXdOYW1lID0gZnVuY3Rpb24gZGVmYXVsdFdlYnZpZXdOYW1lICgpIHtcbiAgcmV0dXJuIFdFQlZJRVdfQkFTRSArIHRoaXMub3B0cy5hcHBQYWNrYWdlO1xufTtcblxuaGVscGVycy5pc1dlYkNvbnRleHQgPSBmdW5jdGlvbiBpc1dlYkNvbnRleHQgKCkge1xuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0ICE9PSBudWxsICYmIHRoaXMuY3VyQ29udGV4dCAhPT0gTkFUSVZFX1dJTjtcbn07XG5cbi8vIFR1cm4gb24gcHJveHlpbmcgdG8gYW4gZXhpc3RpbmcgQ2hyb21lZHJpdmVyIHNlc3Npb24gb3IgYSBuZXcgb25lXG5oZWxwZXJzLnN0YXJ0Q2hyb21lZHJpdmVyUHJveHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZWRyaXZlclByb3h5IChjb250ZXh0LCB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgdGhpcy5sb2cuZGVidWcoYENvbm5lY3RpbmcgdG8gY2hyb21lLWJhY2tlZCB3ZWJ2aWV3IGNvbnRleHQgJyR7Y29udGV4dH0nYCk7XG5cbiAgbGV0IGNkO1xuICBpZiAodGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSkge1xuICAgIC8vIGluIHRoZSBjYXNlIHdoZXJlIHdlJ3ZlIGFscmVhZHkgc2V0IHVwIGEgY2hyb21lZHJpdmVyIGZvciBhIGNvbnRleHQsXG4gICAgLy8gd2Ugd2FudCB0byByZWNvbm5lY3QgdG8gaXQsIG5vdCBjcmVhdGUgYSB3aG9sZSBuZXcgb25lXG4gICAgdGhpcy5sb2cuZGVidWcoYEZvdW5kIGV4aXN0aW5nIENocm9tZWRyaXZlciBmb3IgY29udGV4dCAnJHtjb250ZXh0fScuIFVzaW5nIGl0LmApO1xuICAgIGNkID0gdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgICBhd2FpdCBzZXR1cEV4aXN0aW5nQ2hyb21lZHJpdmVyKHRoaXMubG9nLCBjZCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuICAgIG9wdHMuY2hyb21lVXNlUnVubmluZ0FwcCA9IHRydWU7XG5cbiAgICAvLyBpZiByZXF1ZXN0ZWQsIHRlbGwgY2hyb21lZHJpdmVyIHRvIGF0dGFjaCB0byB0aGUgYW5kcm9pZCBwYWNrYWdlIHdlIGhhdmVcbiAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRleHQgbmFtZSwgcmF0aGVyIHRoYW4gdGhlIHBhY2thZ2Ugb2YgdGhlIEFVVC5cbiAgICAvLyBBbmQgdHVybiB0aGlzIG9uIGJ5IGRlZmF1bHQgZm9yIGNocm9tZS0taWYgY2hyb21lIHBvcHMgdXAgd2l0aCBhIHdlYnZpZXdcbiAgICAvLyBhbmQgc29tZW9uZSB3YW50cyB0byBzd2l0Y2ggdG8gaXQsIHdlIHNob3VsZCBsZXQgY2hyb21lZHJpdmVyIGNvbm5lY3QgdG9cbiAgICAvLyBjaHJvbWUgcmF0aGVyIHRoYW4gc3RheWluZyBzdHVjayBvbiB0aGUgQVVUXG4gICAgaWYgKG9wdHMuZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIHx8IGNvbnRleHQgPT09IGAke1dFQlZJRVdfQkFTRX1jaHJvbWVgKSB7XG4gICAgICBsZXQgYW5kcm9pZFBhY2thZ2UgPSBjb250ZXh0Lm1hdGNoKGAke1dFQlZJRVdfQkFTRX0oLispYCk7XG4gICAgICBpZiAoYW5kcm9pZFBhY2thZ2UgJiYgYW5kcm9pZFBhY2thZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0gYW5kcm9pZFBhY2thZ2VbMV07XG4gICAgICB9XG4gICAgICBpZiAoIW9wdHMuZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lKSB7XG4gICAgICAgIGlmIChfLmhhcyh0aGlzLm9wdHMsICdlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24nKSAmJiAhdGhpcy5vcHRzLmVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbikge1xuICAgICAgICAgIC8vIFdoZW4gZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uIGNhcGFiaWxpdHkgaXMgZXhwbGljaXRseSBkaXNhYmxlZCwgdHJ5IHRvIGlkZW50aWZ5XG4gICAgICAgICAgLy8gY2hyb21lQW5kcm9pZFBhY2thZ2UgYmFzZWQgb24gY29udGV4dHMsIGtub3duIGNocm9tZSB2YXJpYW50IHBhY2thZ2VzIGFuZCBxdWVyeUFwcFN0YXRlIHJlc3VsdFxuICAgICAgICAgIC8vIHNpbmNlIHdlYnZpZXdzTWFwcGluZyBkb2VzIG5vdCBoYXZlIGluZm8gb2JqZWN0XG4gICAgICAgICAgY29uc3QgY29udGV4dHMgPSB3ZWJ2aWV3c01hcHBpbmcubWFwKCh3bSkgPT4gd20ud2Vidmlld05hbWUpO1xuICAgICAgICAgIGZvciAoY29uc3Qga25vd25QYWNrYWdlIG9mIEtOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTKSB7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhjb250ZXh0cywgYCR7V0VCVklFV19CQVNFfSR7a25vd25QYWNrYWdlfWApKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBwU3RhdGUgPSBhd2FpdCB0aGlzLnF1ZXJ5QXBwU3RhdGUoa25vd25QYWNrYWdlKTtcbiAgICAgICAgICAgIGlmIChfLmluY2x1ZGVzKFtBUFBfU1RBVEUuUlVOTklOR19JTl9CQUNLR1JPVU5ELCBBUFBfU1RBVEUuUlVOTklOR19JTl9GT1JFR1JPVU5EXSwgYXBwU3RhdGUpKSB7XG4gICAgICAgICAgICAgIG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2UgPSBrbm93blBhY2thZ2U7XG4gICAgICAgICAgICAgIHRoaXMubG9nLmRlYnVnKGBJZGVudGlmaWVkIGNocm9tZUFuZHJvaWRQYWNrYWdlIGFzICcke29wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2V9JyBgICtcbiAgICAgICAgICAgICAgICBgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nIGJ5IHF1ZXJ5aW5nIHN0YXRlcyBvZiBDaHJvbWUgYXBwIHBhY2thZ2VzYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdtIG9mIHdlYnZpZXdzTWFwcGluZykge1xuICAgICAgICAgICAgaWYgKHdtLndlYnZpZXdOYW1lID09PSBjb250ZXh0ICYmIF8uaGFzKHdtPy5pbmZvLCAnQW5kcm9pZC1QYWNrYWdlJykpIHtcbiAgICAgICAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IHdtLmluZm9bJ0FuZHJvaWQtUGFja2FnZSddO1xuICAgICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBDRFBgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2QgPSBhd2FpdCB0aGlzLnNldHVwTmV3Q2hyb21lZHJpdmVyKG9wdHMsIHRoaXMuYWRiLmN1ckRldmljZUlkLCB0aGlzLmFkYiwgY29udGV4dCk7XG4gICAgLy8gYmluZCBvdXIgc3RvcC9leGl0IGhhbmRsZXIsIHBhc3NpbmcgaW4gY29udGV4dCBzbyB3ZSBrbm93IHdoaWNoXG4gICAgLy8gb25lIHN0b3BwZWQgdW5leHBlY3RlZGx5XG4gICAgY2Qub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICAgIHRoaXMub25DaHJvbWVkcml2ZXJTdG9wKGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNhdmUgdGhlIGNocm9tZWRyaXZlciBvYmplY3QgdW5kZXIgdGhlIGNvbnRleHRcbiAgICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdID0gY2Q7XG4gIH1cbiAgLy8gaG9vayB1cCB0aGUgbG9jYWwgdmFyaWFibGVzIHNvIHdlIGNhbiBwcm94eSB0aGlzIGJpelxuICB0aGlzLmNocm9tZWRyaXZlciA9IGNkO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xufTtcblxuLy8gU3RvcCBwcm94eWluZyB0byBhbnkgQ2hyb21lZHJpdmVyXG5oZWxwZXJzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSA9IGZ1bmN0aW9uIHN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSAoKSB7XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gbnVsbDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IG51bGw7XG4gIHRoaXMucHJveHlDb21tYW5kID0gbnVsbDtcbiAgdGhpcy5qd3BQcm94eUFjdGl2ZSA9IGZhbHNlO1xufTtcblxuLy8gSGFuZGxlIGFuIG91dC1vZi1iYW5kIENocm9tZWRyaXZlciBzdG9wIGV2ZW50XG5oZWxwZXJzLm9uQ2hyb21lZHJpdmVyU3RvcCA9IGFzeW5jIGZ1bmN0aW9uIG9uQ2hyb21lZHJpdmVyU3RvcCAoY29udGV4dCkge1xuICB0aGlzLmxvZy53YXJuKGBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJHtjb250ZXh0fSBzdG9wcGVkIHVuZXhwZWN0ZWRseWApO1xuICBpZiAoY29udGV4dCA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgLy8gd2UgZXhpdGVkIHVuZXhwZWN0ZWRseSB3aGlsZSBhdXRvbWF0aW5nIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHNvIHdhbnRcbiAgICAvLyB0byBzaHV0IGRvd24gdGhlIHNlc3Npb24gYW5kIHJlc3BvbmQgd2l0aCBhbiBlcnJvclxuICAgIGxldCBlcnIgPSBuZXcgRXJyb3IoJ0Nocm9tZWRyaXZlciBxdWl0IHVuZXhwZWN0ZWRseSBkdXJpbmcgc2Vzc2lvbicpO1xuICAgIGF3YWl0IHRoaXMuc3RhcnRVbmV4cGVjdGVkU2h1dGRvd24oZXJyKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBhIENocm9tZWRyaXZlciBpbiB0aGUgbm9uLWFjdGl2ZSBjb250ZXh0IGJhcmZzLCB3ZSBkb24ndCByZWFsbHlcbiAgICAvLyBjYXJlLCB3ZSdsbCBqdXN0IG1ha2UgYSBuZXcgb25lIG5leHQgdGltZSB3ZSBuZWVkIHRoZSBjb250ZXh0LlxuICAgIHRoaXMubG9nLndhcm4oXCJDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHksIGJ1dCBpdCB3YXNuJ3QgdGhlIGFjdGl2ZSBcIiArXG4gICAgICAnY29udGV4dCwgaWdub3JpbmcnKTtcbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuLy8gSW50ZW50aW9uYWxseSBzdG9wIGFsbCB0aGUgY2hyb21lZHJpdmVycyBjdXJyZW50bHkgYWN0aXZlLCBhbmQgaWdub3JlXG4vLyB0aGVpciBleGl0IGV2ZW50c1xuaGVscGVycy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcyA9IGFzeW5jIGZ1bmN0aW9uIHN0b3BDaHJvbWVkcml2ZXJQcm94aWVzICgpIHtcbiAgdGhpcy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkoKTsgLy8gbWFrZSBzdXJlIHdlIHR1cm4gb2ZmIHRoZSBwcm94eSBmbGFnXG4gIGZvciAobGV0IGNvbnRleHQgb2YgXy5rZXlzKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnMpKSB7XG4gICAgbGV0IGNkID0gdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgU3RvcHBpbmcgY2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH1gKTtcbiAgICAvLyBzdG9wIGxpc3RlbmluZyBmb3IgdGhlIHN0b3BwZWQgc3RhdGUgZXZlbnRcbiAgICBjZC5yZW1vdmVBbGxMaXN0ZW5lcnMoQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjZC5zdG9wKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGBFcnJvciBzdG9wcGluZyBDaHJvbWVkcml2ZXI6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW2NvbnRleHRdO1xuICB9XG59O1xuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQ29udGV4dCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQ29udGV4dCAodmlld05hbWUpIHtcbiAgcmV0dXJuIF8uaW5jbHVkZXModmlld05hbWUsIFdFQlZJRVdfV0lOKSB8fCB2aWV3TmFtZSA9PT0gQ0hST01JVU1fV0lOO1xufTtcblxuaGVscGVycy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSA9IGZ1bmN0aW9uIHNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lICgpIHtcbiAgcmV0dXJuICEhdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMgJiZcbiAgICAgICAgIF8uaXNBcnJheSh0aGlzLm9wdHMuY2hyb21lT3B0aW9ucy5hcmdzKSAmJlxuICAgICAgICAgdGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncy5pbmNsdWRlcygnLS1uby1maXJzdC1ydW4nKTtcbn07XG5cbmhlbHBlcnMuZGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBhc3luYyBmdW5jdGlvbiBkaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIHRoaXMubG9nLmluZm8oJ1RyeWluZyB0byBkaXNtaXNzIENocm9tZSB3ZWxjb21lJyk7XG4gIGxldCBhY3Rpdml0eSA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudEFjdGl2aXR5KCk7XG4gIGlmIChhY3Rpdml0eSAhPT0gJ29yZy5jaHJvbWl1bS5jaHJvbWUuYnJvd3Nlci5maXJzdHJ1bi5GaXJzdFJ1bkFjdGl2aXR5Jykge1xuICAgIHRoaXMubG9nLmluZm8oJ0Nocm9tZSB3ZWxjb21lIGRpYWxvZyBuZXZlciBzaG93ZWQgdXAhIENvbnRpbnVpbmcnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL3Rlcm1zX2FjY2VwdCcsIGZhbHNlKTtcbiAgYXdhaXQgdGhpcy5jbGljayhlbC5FTEVNRU5UKTtcbiAgdHJ5IHtcbiAgICBsZXQgZWwgPSBhd2FpdCB0aGlzLmZpbmRFbE9yRWxzKCdpZCcsICdjb20uYW5kcm9pZC5jaHJvbWU6aWQvbmVnYXRpdmVfYnV0dG9uJywgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBETyBOT1RISU5HLCBUSElTIERFVklDRSBESUROVCBMQVVOQ0ggVEhFIFNJR05JTiBESUFMT0dcbiAgICAvLyBJVCBNVVNUIEJFIEEgTk9OIEdNUyBERVZJQ0VcbiAgICB0aGlzLmxvZy53YXJuKGBUaGlzIGRldmljZSBkaWQgbm90IHNob3cgQ2hyb21lIFNpZ25JbiBkaWFsb2csICR7ZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG5oZWxwZXJzLnN0YXJ0Q2hyb21lU2Vzc2lvbiA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0Q2hyb21lU2Vzc2lvbiAoKSB7XG4gIHRoaXMubG9nLmluZm8oJ1N0YXJ0aW5nIGEgY2hyb21lLWJhc2VkIGJyb3dzZXIgc2Vzc2lvbicpO1xuICBsZXQgb3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgY29uc3Qga25vd25QYWNrYWdlcyA9IFtcbiAgICAnb3JnLmNocm9taXVtLmNocm9tZS5zaGVsbCcsXG4gICAgJ2NvbS5hbmRyb2lkLmNocm9tZScsXG4gICAgJ2NvbS5jaHJvbWUuYmV0YScsXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUnLFxuICAgICdvcmcuY2hyb21pdW0ud2Vidmlld19zaGVsbCcsXG4gIF07XG5cbiAgaWYgKF8uaW5jbHVkZXMoa25vd25QYWNrYWdlcywgdGhpcy5vcHRzLmFwcFBhY2thZ2UpKSB7XG4gICAgb3B0cy5jaHJvbWVCdW5kbGVJZCA9IHRoaXMub3B0cy5hcHBQYWNrYWdlO1xuICB9IGVsc2Uge1xuICAgIG9wdHMuY2hyb21lQW5kcm9pZEFjdGl2aXR5ID0gdGhpcy5vcHRzLmFwcEFjdGl2aXR5O1xuICB9XG4gIHRoaXMuY2hyb21lZHJpdmVyID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIpO1xuICB0aGlzLmNocm9tZWRyaXZlci5vbihDaHJvbWVkcml2ZXIuRVZFTlRfQ0hBTkdFRCwgKG1zZykgPT4ge1xuICAgIGlmIChtc2cuc3RhdGUgPT09IENocm9tZWRyaXZlci5TVEFURV9TVE9QUEVEKSB7XG4gICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChDSFJPTUlVTV9XSU4pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhIENocm9tZSBzZXNzaW9uLCB3ZSBlbnN1cmUgdGhhdCB0aGUgY29udGV4dCBpc1xuICAvLyBhcHByb3ByaWF0ZWx5IHNldCBhbmQgdGhhdCB0aGlzIGNocm9tZWRyaXZlciBpcyBhZGRlZCB0byB0aGUgbGlzdFxuICAvLyBvZiBzZXNzaW9uIGNocm9tZWRyaXZlcnMgc28gd2UgY2FuIHN3aXRjaCBiYWNrIGFuZCBmb3J0aFxuICB0aGlzLmN1ckNvbnRleHQgPSBDSFJPTUlVTV9XSU47XG4gIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbQ0hST01JVU1fV0lOXSA9IHRoaXMuY2hyb21lZHJpdmVyO1xuICB0aGlzLnByb3h5UmVxUmVzID0gdGhpcy5jaHJvbWVkcml2ZXIucHJveHlSZXEuYmluZCh0aGlzLmNocm9tZWRyaXZlcik7XG4gIHRoaXMucHJveHlDb21tYW5kID0gdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIuandwcm94eSk7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSB0cnVlO1xuXG4gIGlmICh0aGlzLnNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lKCkpIHtcbiAgICAvLyBkaXNtaXNzIENocm9tZSB3ZWxjb21lIGRpYWxvZ1xuICAgIGF3YWl0IHRoaXMuZGlzbWlzc0Nocm9tZVdlbGNvbWUoKTtcbiAgfVxufTtcblxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogSW50ZXJuYWwgbGlicmFyeSBmdW5jdGlvbnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbmFzeW5jIGZ1bmN0aW9uIHNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIgKGxvZywgY2hyb21lZHJpdmVyKSB7XG4gIC8vIGNoZWNrIHRoZSBzdGF0dXMgYnkgc2VuZGluZyBhIHNpbXBsZSB3aW5kb3ctYmFzZWQgY29tbWFuZCB0byBDaHJvbWVEcml2ZXJcbiAgLy8gaWYgdGhlcmUgaXMgYW4gZXJyb3IsIHdlIHdhbnQgdG8gcmVjcmVhdGUgdGhlIENocm9tZURyaXZlciBzZXNzaW9uXG4gIGlmICghYXdhaXQgY2hyb21lZHJpdmVyLmhhc1dvcmtpbmdXZWJ2aWV3KCkpIHtcbiAgICBsb2cuZGVidWcoJ0Nocm9tZURyaXZlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgd2luZG93LiAnICtcbiAgICAgICAgICAgICAgICAgJ1JlLWluaXRpYWxpemluZyB0aGUgc2Vzc2lvbi4nKTtcbiAgICBhd2FpdCBjaHJvbWVkcml2ZXIucmVzdGFydCgpO1xuICB9XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59XG5cbi8qKlxuICogRmluZCBhIGZyZWUgcG9ydCB0byBoYXZlIENocm9tZWRyaXZlciBsaXN0ZW4gb24uXG4gKlxuICogQHBhcmFtIHthcnJheX0gcG9ydFNwZWMgLSBBcnJheSB3aGljaCBpcyBhIGxpc3Qgb2YgcG9ydHMuIEEgbGlzdCBpdGVtIG1heVxuICogYWxzbyBpdHNlbGYgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIDIgc3BlY2lmeWluZyBhIHN0YXJ0IGFuZCBlbmQgcG9ydCBvZlxuICogYSByYW5nZS4gU29tZSB2YWxpZCBwb3J0IHNwZWNzOlxuICogICAgLSBbODAwMCwgODAwMSwgODAwMl1cbiAqICAgIC0gW1s4MDAwLCA4MDA1XV1cbiAqICAgIC0gWzgwMDAsIFs5MDAwLCA5MTAwXV1cbiAqIEBwYXJhbSB7T2JqZWN0P30gbG9nIExvZ2dlciBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge251bWJlcn0gQSBmcmVlIHBvcnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hyb21lZHJpdmVyUG9ydCAocG9ydFNwZWMsIGxvZyA9IG51bGwpIHtcbiAgY29uc3QgZ2V0UG9ydCA9IEIucHJvbWlzaWZ5KFBvcnRGaW5kZXIuZ2V0UG9ydCwge2NvbnRleHQ6IFBvcnRGaW5kZXJ9KTtcblxuICAvLyBpZiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZSB1cyBhbnkgc3BlY2lmaWMgaW5mb3JtYXRpb24gYWJvdXQgY2hyb21lZHJpdmVyXG4gIC8vIHBvcnQgcmFuZ2VzLCBqdXN0IGZpbmQgYW55IGZyZWUgcG9ydFxuICBpZiAoIXBvcnRTcGVjKSB7XG4gICAgY29uc3QgcG9ydCA9IGF3YWl0IGdldFBvcnQoKTtcbiAgICBsb2c/LmRlYnVnKGBBIHBvcnQgd2FzIG5vdCBnaXZlbiwgdXNpbmcgcmFuZG9tIGZyZWUgcG9ydDogJHtwb3J0fWApO1xuICAgIHJldHVybiBwb3J0O1xuICB9XG5cbiAgLy8gb3RoZXJ3aXNlIGZpbmQgdGhlIGZyZWUgcG9ydCBiYXNlZCBvbiBhIGxpc3Qgb3IgcmFuZ2UgcHJvdmlkZWQgYnkgdGhlIHVzZXJcbiAgbG9nPy5kZWJ1ZyhgRmluZGluZyBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIHNwZWMgJHtKU09OLnN0cmluZ2lmeShwb3J0U3BlYyl9YCk7XG4gIGxldCBmb3VuZFBvcnQgPSBudWxsO1xuICBmb3IgKGNvbnN0IHBvdGVudGlhbFBvcnQgb2YgcG9ydFNwZWMpIHtcbiAgICBsZXQgcG9ydCwgc3RvcFBvcnQ7XG4gICAgaWYgKF8uaXNBcnJheShwb3RlbnRpYWxQb3J0KSkge1xuICAgICAgKFtwb3J0LCBzdG9wUG9ydF0gPSBwb3RlbnRpYWxQb3J0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9ydCA9IHBhcnNlSW50KHBvdGVudGlhbFBvcnQsIDEwKTsgLy8gZW5zdXJlIHdlIGhhdmUgYSBudW1iZXIgYW5kIG5vdCBhIHN0cmluZ1xuICAgICAgc3RvcFBvcnQgPSBwb3J0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgbG9nPy5kZWJ1ZyhgQ2hlY2tpbmcgcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9YCk7XG4gICAgICBmb3VuZFBvcnQgPSBhd2FpdCBnZXRQb3J0KHtwb3J0LCBzdG9wUG9ydH0pO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nPy5kZWJ1ZyhgTm90aGluZyBpbiBwb3J0IHJhbmdlICR7cG9ydH06JHtzdG9wUG9ydH0gd2FzIGF2YWlsYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChmb3VuZFBvcnQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGEgZnJlZSBwb3J0IGZvciBjaHJvbWVkcml2ZXIgdXNpbmcgYCArXG4gICAgICAgICAgICAgICAgICAgIGBjaHJvbWVkcml2ZXJQb3J0cyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICB9XG5cbiAgbG9nPy5kZWJ1ZyhgVXNpbmcgZnJlZSBwb3J0ICR7Zm91bmRQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIHJldHVybiBmb3VuZFBvcnQ7XG59XG5cbmhlbHBlcnMuaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkID0gZnVuY3Rpb24gaXNDaHJvbWVkcml2ZXJBdXRvZG93bmxvYWRFbmFibGVkICgpIHtcbiAgaWYgKHRoaXMuaXNGZWF0dXJlRW5hYmxlZChDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdGhpcz8ubG9nPy5kZWJ1ZyhgQXV0b21hdGVkIENocm9tZWRyaXZlciBkb3dubG9hZCBpcyBkaXNhYmxlZC4gYCArXG4gICAgYFVzZSAnJHtDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkV9JyBzZXJ2ZXIgZmVhdHVyZSB0byBlbmFibGUgaXRgKTtcbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuaGVscGVycy5zZXR1cE5ld0Nocm9tZWRyaXZlciA9IGFzeW5jIGZ1bmN0aW9uIHNldHVwTmV3Q2hyb21lZHJpdmVyIChvcHRzLCBjdXJEZXZpY2VJZCwgYWRiLCBjb250ZXh0ID0gbnVsbCkge1xuICBpZiAob3B0cy5jaHJvbWVEcml2ZXJQb3J0KSB7XG4gICAgdGhpcz8ubG9nPy53YXJuKGBUaGUgJ2Nocm9tZURyaXZlclBvcnQnIGNhcGFiaWxpdHkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAnY2hyb21lZHJpdmVyUG9ydCcgaW5zdGVhZGApO1xuICAgIG9wdHMuY2hyb21lZHJpdmVyUG9ydCA9IG9wdHMuY2hyb21lRHJpdmVyUG9ydDtcbiAgfVxuXG4gIGlmIChvcHRzLmNocm9tZWRyaXZlclBvcnQpIHtcbiAgICB0aGlzPy5sb2c/LmRlYnVnKGBVc2luZyB1c2VyLXNwZWNpZmllZCBwb3J0ICR7b3B0cy5jaHJvbWVkcml2ZXJQb3J0fSBmb3IgY2hyb21lZHJpdmVyYCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBzaW5nbGUgcG9ydCB3YXNuJ3QgZ2l2ZW4sIHdlJ2xsIGxvb2sgZm9yIGEgZnJlZSBvbmVcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBhd2FpdCBnZXRDaHJvbWVkcml2ZXJQb3J0KG9wdHMuY2hyb21lZHJpdmVyUG9ydHMsIHRoaXM/LmxvZyk7XG4gIH1cblxuICBjb25zdCBkZXRhaWxzID0gY29udGV4dCA/IHdlYnZpZXdIZWxwZXJzLmdldFdlYnZpZXdEZXRhaWxzKGFkYiwgY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGlmICghXy5pc0VtcHR5KGRldGFpbHMpKSB7XG4gICAgdGhpcz8ubG9nPy5kZWJ1ZygnUGFzc2luZyB3ZWIgdmlldyBkZXRhaWxzIHRvIHRoZSBDaHJvbWVkcml2ZXIgY29uc3RydWN0b3I6ICcgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkoZGV0YWlscywgbnVsbCwgMikpO1xuICB9XG5cbiAgY29uc3QgY2hyb21lZHJpdmVyID0gbmV3IENocm9tZWRyaXZlcih7XG4gICAgcG9ydDogb3B0cy5jaHJvbWVkcml2ZXJQb3J0LFxuICAgIGV4ZWN1dGFibGU6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZSxcbiAgICBhZGIsXG4gICAgY21kQXJnczogb3B0cy5jaHJvbWVkcml2ZXJBcmdzLFxuICAgIHZlcmJvc2U6ICEhb3B0cy5zaG93Q2hyb21lZHJpdmVyTG9nLFxuICAgIGV4ZWN1dGFibGVEaXI6IG9wdHMuY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpcixcbiAgICBtYXBwaW5nUGF0aDogb3B0cy5jaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZSxcbiAgICBidW5kbGVJZDogb3B0cy5jaHJvbWVCdW5kbGVJZCxcbiAgICB1c2VTeXN0ZW1FeGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGUsXG4gICAgZGlzYWJsZUJ1aWxkQ2hlY2s6IG9wdHMuY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2ssXG4gICAgZGV0YWlscyxcbiAgICBpc0F1dG9kb3dubG9hZEVuYWJsZWQ6IHRoaXM/LmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZD8uKClcbiAgfSk7XG5cbiAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBjaHJvbWVPcHRpb25zXG4gIG9wdHMuY2hyb21lT3B0aW9ucyA9IG9wdHMuY2hyb21lT3B0aW9ucyB8fCB7fTtcbiAgLy8gdHJ5IG91dCBhbnkgcHJlZml4ZWQgY2hyb21lT3B0aW9ucyxcbiAgLy8gYW5kIHN0cmlwIHRoZSBwcmVmaXhcbiAgZm9yIChjb25zdCBvcHQgb2YgXy5rZXlzKG9wdHMpKSB7XG4gICAgaWYgKG9wdC5lbmRzV2l0aCgnOmNocm9tZU9wdGlvbnMnKSkge1xuICAgICAgdGhpcz8ubG9nPy53YXJuKGBNZXJnaW5nICcke29wdH0nIGludG8gJ2Nocm9tZU9wdGlvbnMnLiBUaGlzIG1heSBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yYCk7XG4gICAgICBfLm1lcmdlKG9wdHMuY2hyb21lT3B0aW9ucywgb3B0c1tvcHRdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjYXBzID0gd2Vidmlld0hlbHBlcnMuY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyhvcHRzLCBjdXJEZXZpY2VJZCwgZGV0YWlscyk7XG4gIHRoaXM/LmxvZz8uZGVidWcoYEJlZm9yZSBzdGFydGluZyBjaHJvbWVkcml2ZXIsIGFuZHJvaWRQYWNrYWdlIGlzICcke2NhcHMuY2hyb21lT3B0aW9ucy5hbmRyb2lkUGFja2FnZX0nYCk7XG4gIGF3YWl0IGNocm9tZWRyaXZlci5zdGFydChjYXBzKTtcbiAgcmV0dXJuIGNocm9tZWRyaXZlcjtcbn07XG5jb25zdCBzZXR1cE5ld0Nocm9tZWRyaXZlciA9IGhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXI7XG5cblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycywgc2V0dXBOZXdDaHJvbWVk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
|
|
334
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDSFJPTUVEUklWRVJfQVVUT0RPV05MT0FEX0ZFQVRVUkUiLCJjb21tYW5kcyIsImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZ2V0Q3VycmVudENvbnRleHQiLCJjdXJDb250ZXh0IiwiZGVmYXVsdENvbnRleHROYW1lIiwiZ2V0Q29udGV4dHMiLCJ3ZWJ2aWV3c01hcHBpbmciLCJ3ZWJ2aWV3SGVscGVycyIsImdldFdlYlZpZXdzTWFwcGluZyIsImFkYiIsIm9wdHMiLCJhc3NpZ25Db250ZXh0cyIsInNldENvbnRleHQiLCJuYW1lIiwidXRpbCIsImhhc1ZhbHVlIiwiV0VCVklFV19XSU4iLCJkZWZhdWx0V2Vidmlld05hbWUiLCJjb250ZXh0cyIsIl8iLCJpbmNsdWRlcyIsImVycm9ycyIsIk5vU3VjaENvbnRleHRFcnJvciIsInN3aXRjaENvbnRleHQiLCJtb2JpbGVHZXRDb250ZXh0cyIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJlbnN1cmVXZWJ2aWV3c0hhdmVQYWdlcyIsIndlYnZpZXdEZXZ0b29sc1BvcnQiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nocm9tZVNlc3Npb24iLCJ3ZWJ2aWV3cyIsInBhcnNlV2Vidmlld05hbWVzIiwiTkFUSVZFX1dJTiIsImxvZyIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzQ2hyb21lZHJpdmVyQ29udGV4dCIsInN0YXJ0Q2hyb21lZHJpdmVyUHJveHkiLCJyZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zIiwic3RvcENocm9tZWRyaXZlclByb3hpZXMiLCJzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkiLCJFcnJvciIsIldFQlZJRVdfQkFTRSIsImF1dG9XZWJ2aWV3TmFtZSIsImFwcFBhY2thZ2UiLCJpc1dlYkNvbnRleHQiLCJjb250ZXh0IiwiY2QiLCJzZXNzaW9uQ2hyb21lZHJpdmVycyIsInNldHVwRXhpc3RpbmdDaHJvbWVkcml2ZXIiLCJjbG9uZURlZXAiLCJjaHJvbWVVc2VSdW5uaW5nQXBwIiwiZXh0cmFjdENocm9tZUFuZHJvaWRQYWNrYWdlRnJvbUNvbnRleHROYW1lIiwiYW5kcm9pZFBhY2thZ2UiLCJtYXRjaCIsImxlbmd0aCIsImNocm9tZUFuZHJvaWRQYWNrYWdlIiwiaGFzIiwibWFwIiwid20iLCJ3ZWJ2aWV3TmFtZSIsImtub3duUGFja2FnZSIsIktOT1dOX0NIUk9NRV9QQUNLQUdFX05BTUVTIiwiYXBwU3RhdGUiLCJxdWVyeUFwcFN0YXRlIiwiQVBQX1NUQVRFIiwiUlVOTklOR19JTl9CQUNLR1JPVU5EIiwiUlVOTklOR19JTl9GT1JFR1JPVU5EIiwiaW5mbyIsInNldHVwTmV3Q2hyb21lZHJpdmVyIiwiY3VyRGV2aWNlSWQiLCJvbiIsIkNocm9tZWRyaXZlciIsIkVWRU5UX0NIQU5HRUQiLCJtc2ciLCJzdGF0ZSIsIlNUQVRFX1NUT1BQRUQiLCJvbkNocm9tZWRyaXZlclN0b3AiLCJjaHJvbWVkcml2ZXIiLCJwcm94eVJlcVJlcyIsInByb3h5UmVxIiwiYmluZCIsInByb3h5Q29tbWFuZCIsImp3cHJveHkiLCJjb21tYW5kIiwiandwUHJveHlBY3RpdmUiLCJ3YXJuIiwiZXJyIiwic3RhcnRVbmV4cGVjdGVkU2h1dGRvd24iLCJrZXlzIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RvcCIsIm1lc3NhZ2UiLCJ2aWV3TmFtZSIsIkNIUk9NSVVNX1dJTiIsInNob3VsZERpc21pc3NDaHJvbWVXZWxjb21lIiwiY2hyb21lT3B0aW9ucyIsImlzQXJyYXkiLCJhcmdzIiwiZGlzbWlzc0Nocm9tZVdlbGNvbWUiLCJhY3Rpdml0eSIsImdldEN1cnJlbnRBY3Rpdml0eSIsImVsIiwiZmluZEVsT3JFbHMiLCJjbGljayIsIkVMRU1FTlQiLCJlIiwic3RhcnRDaHJvbWVTZXNzaW9uIiwia25vd25QYWNrYWdlcyIsImNocm9tZUJ1bmRsZUlkIiwiY2hyb21lQW5kcm9pZEFjdGl2aXR5IiwiYXBwQWN0aXZpdHkiLCJoYXNXb3JraW5nV2VidmlldyIsInJlc3RhcnQiLCJnZXRDaHJvbWVkcml2ZXJQb3J0IiwicG9ydFNwZWMiLCJnZXRQb3J0IiwiQiIsInByb21pc2lmeSIsIlBvcnRGaW5kZXIiLCJwb3J0IiwiZm91bmRQb3J0IiwicG90ZW50aWFsUG9ydCIsInN0b3BQb3J0IiwicGFyc2VJbnQiLCJpc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQiLCJpc0ZlYXR1cmVFbmFibGVkIiwiY2hyb21lRHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnQiLCJjaHJvbWVkcml2ZXJQb3J0cyIsImRldGFpbHMiLCJnZXRXZWJ2aWV3RGV0YWlscyIsInVuZGVmaW5lZCIsImlzRW1wdHkiLCJleGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZSIsImNtZEFyZ3MiLCJjaHJvbWVkcml2ZXJBcmdzIiwidmVyYm9zZSIsInNob3dDaHJvbWVkcml2ZXJMb2ciLCJleGVjdXRhYmxlRGlyIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsIm1hcHBpbmdQYXRoIiwiY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUiLCJidW5kbGVJZCIsInVzZVN5c3RlbUV4ZWN1dGFibGUiLCJjaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlIiwiZGlzYWJsZUJ1aWxkQ2hlY2siLCJjaHJvbWVkcml2ZXJEaXNhYmxlQnVpbGRDaGVjayIsImlzQXV0b2Rvd25sb2FkRW5hYmxlZCIsIm9wdCIsImVuZHNXaXRoIiwibWVyZ2UiLCJjYXBzIiwiY3JlYXRlQ2hyb21lZHJpdmVyQ2FwcyIsInN0YXJ0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2NvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBDaHJvbWVkcml2ZXIgZnJvbSAnYXBwaXVtLWNocm9tZWRyaXZlcic7XG5pbXBvcnQgUG9ydEZpbmRlciBmcm9tICdwb3J0ZmluZGVyJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcbmltcG9ydCB7XG4gIGRlZmF1bHQgYXMgd2Vidmlld0hlbHBlcnMsXG4gIE5BVElWRV9XSU4sIFdFQlZJRVdfQkFTRSwgV0VCVklFV19XSU4sIENIUk9NSVVNX1dJTiwgS05PV05fQ0hST01FX1BBQ0tBR0VfTkFNRVNcbn0gZnJvbSAnLi4vd2Vidmlldy1oZWxwZXJzJztcbmltcG9ydCB7IEFQUF9TVEFURSB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5cbmNvbnN0IENIUk9NRURSSVZFUl9BVVRPRE9XTkxPQURfRkVBVFVSRSA9ICdjaHJvbWVkcml2ZXJfYXV0b2Rvd25sb2FkJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEFjdHVhbCBNSlNPTldQIGNvbW1hbmQgaGFuZGxlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbmNvbW1hbmRzLmdldEN1cnJlbnRDb250ZXh0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudENvbnRleHQgKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHJlcXVpcmUtYXdhaXRcbiAgLy8gaWYgdGhlIGN1cnJlbnQgY29udGV4dCBpcyBgbnVsbGAsIGluZGljYXRpbmcgbm8gY29udGV4dFxuICAvLyBleHBsaWNpdGx5IHNldCwgaXQgaXMgdGhlIGRlZmF1bHQgY29udGV4dFxuICByZXR1cm4gdGhpcy5jdXJDb250ZXh0IHx8IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG59O1xuXG5jb21tYW5kcy5nZXRDb250ZXh0cyA9IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHRzICgpIHtcbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICByZXR1cm4gdGhpcy5hc3NpZ25Db250ZXh0cyh3ZWJ2aWV3c01hcHBpbmcpO1xufTtcblxuY29tbWFuZHMuc2V0Q29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHQgKG5hbWUpIHtcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKG5hbWUpKSB7XG4gICAgbmFtZSA9IHRoaXMuZGVmYXVsdENvbnRleHROYW1lKCk7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gV0VCVklFV19XSU4pIHtcbiAgICAvLyBoYW5kbGUgc2V0Q29udGV4dCBcIldFQlZJRVdcIlxuICAgIG5hbWUgPSB0aGlzLmRlZmF1bHRXZWJ2aWV3TmFtZSgpO1xuICB9XG4gIC8vIGlmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgd2Ugd2FudCwgZG8gbm90aGluZ1xuICBpZiAobmFtZSA9PT0gdGhpcy5jdXJDb250ZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgd2Vidmlld3NNYXBwaW5nID0gYXdhaXQgd2Vidmlld0hlbHBlcnMuZ2V0V2ViVmlld3NNYXBwaW5nKHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICBjb25zdCBjb250ZXh0cyA9IHRoaXMuYXNzaWduQ29udGV4dHMod2Vidmlld3NNYXBwaW5nKTtcbiAgLy8gaWYgdGhlIGNvbnRleHQgd2Ugd2FudCBkb2Vzbid0IGV4aXN0LCBmYWlsXG4gIGlmICghXy5pbmNsdWRlcyhjb250ZXh0cywgbmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vU3VjaENvbnRleHRFcnJvcigpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zd2l0Y2hDb250ZXh0KG5hbWUsIHdlYnZpZXdzTWFwcGluZyk7XG4gIHRoaXMuY3VyQ29udGV4dCA9IG5hbWU7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdlYnZpZXdzTWFwcGluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByb2MgVGhlIG5hbWUgb2YgdGhlIERldnRvb2xzIFVuaXggc29ja2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gd2VidmlldyBUaGUgd2ViIHZpZXcgYWxpYXMuIExvb2tzIGxpa2UgYFdFQlZJRVdfYFxuICogcHJlZml4IHBsdXMgUElEIG9yIHBhY2thZ2UgbmFtZVxuICogQHByb3BlcnR5IHs/T2JqZWN0fSBpbmZvIFdlYnZpZXcgaW5mb3JtYXRpb24gYXMgaXQgaXMgcmV0cmlldmVkIGJ5XG4gKiAvanNvbi92ZXJzaW9uIENEUCBlbmRwb2ludFxuICogQHByb3BlcnR5IHs/QXJyYXk8T2JqZWN0Pn0gcGFnZXMgV2VidmlldyBwYWdlcyBsaXN0IGFzIGl0IGlzIHJldHJpZXZlZCBieVxuICogL2pzb24vbGlzdCBDRFAgZW5kcG9pbnRcbiAqIEBwcm9wZXJ5IHs/c3RyaW5nfSB3ZWJ2aWV3TmFtZSBBbiBhY3R1YWwgd2VidmlldyBuYW1lIGZvciBzd2l0Y2hpbmcgY29udGV4dC5cbiAqIFRoaXMgdmFsdWUgYmVjb21lcyBudWxsIHdoZW4gZmFpbGluZyB0byBmaW5kIGEgUElEIGZvciBhIHdlYnZpZXcuXG4gKlxuICogVGhlIGZvbGxvd2luZyBqc29uIGRlbW9uc3RyYXRlcyB0aGUgZXhhbXBsZSBvZiBXZWJ2aWV3c01hcHBpbmcgb2JqZWN0LlxuICogTm90ZSB0aGF0IGBkZXNjcmlwdGlvbmAgaW4gYHBhZ2VgIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcgbW9zdCBsaWtlbHkgd2hlbiBpdCBjb21lcyB0byBNb2JpbGUgQ2hyb21lKVxuICoge1xuICogICBcInByb2NcIjogXCJAd2Vidmlld19kZXZ0b29sc19yZW1vdGVfMjIxMzhcIixcbiAqICAgXCJ3ZWJ2aWV3XCI6IFwiV0VCVklFV18yMjEzOFwiLFxuICogICBcImluZm9cIjoge1xuICogICAgIFwiQW5kcm9pZC1QYWNrYWdlXCI6IFwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgXCJCcm93c2VyXCI6IFwiQ2hyb21lLzc0LjAuMzcyOS4xODVcIixcbiAqICAgICBcIlByb3RvY29sLVZlcnNpb25cIjogXCIxLjNcIixcbiAqICAgICBcIlVzZXItQWdlbnRcIjogXCJNb3ppbGxhLzUuMCAoTGludXg7IEFuZHJvaWQgMTA7IEFuZHJvaWQgU0RLIGJ1aWx0IGZvciB4ODYgQnVpbGQvUVNSMS4xOTA5MjAuMDAxOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzc0LjAuMzcyOS4xODUgTW9iaWxlIFNhZmFyaS81MzcuMzZcIixcbiAqICAgICBcIlY4LVZlcnNpb25cIjogXCI3LjQuMjg4LjI4XCIsXG4gKiAgICAgXCJXZWJLaXQtVmVyc2lvblwiOiBcIjUzNy4zNiAoQDIyOTU1NjgyZjk0Y2UwOTMzNjE5N2JmYjhkZmZlYTk5MWZhMzJmMGQpXCIsXG4gKiAgICAgXCJ3ZWJTb2NrZXREZWJ1Z2dlclVybFwiOiBcIndzOi8vMTI3LjAuMC4xOjEwOTAwL2RldnRvb2xzL2Jyb3dzZXJcIlxuICogICB9LFxuICogICBcInBhZ2VzXCI6IFtcbiAqICAgICB7XG4gKiAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwie1xcXCJhdHRhY2hlZFxcXCI6dHJ1ZSxcXFwiZW1wdHlcXFwiOmZhbHNlLFxcXCJoZWlnaHRcXFwiOjE0NTgsXFxcInNjcmVlblhcXFwiOjAsXFxcInNjcmVlbllcXFwiOjMzNixcXFwidmlzaWJsZVxcXCI6dHJ1ZSxcXFwid2lkdGhcXFwiOjEwODB9XCIsXG4gKiAgICAgICBcImRldnRvb2xzRnJvbnRlbmRVcmxcIjogXCJodHRwOi8vY2hyb21lLWRldnRvb2xzLWZyb250ZW5kLmFwcHNwb3QuY29tL3NlcnZlX3Jldi9AMjI5NTU2ODJmOTRjZTA5MzM2MTk3YmZiOGRmZmVhOTkxZmEzMmYwZC9pbnNwZWN0b3IuaHRtbD93cz0xMjcuMC4wLjE6MTA5MDAvZGV2dG9vbHMvcGFnZS8yNzMyNUNDNTBCNjAwRDMxQjIzM0Y0NUUwOTQ4N0IxRlwiLFxuICogICAgICAgXCJpZFwiOiBcIjI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCIsXG4gKiAgICAgICBcInRpdGxlXCI6IFwiUmVsZWFzZXMgwrcgYXBwaXVtL2FwcGl1bSDCtyBHaXRIdWJcIixcbiAqICAgICAgIFwidHlwZVwiOiBcInBhZ2VcIixcbiAqICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vcmVsZWFzZXNcIixcbiAqICAgICAgIFwid2ViU29ja2V0RGVidWdnZXJVcmxcIjogXCJ3czovLzEyNy4wLjAuMToxMDkwMC9kZXZ0b29scy9wYWdlLzI3MzI1Q0M1MEI2MDBEMzFCMjMzRjQ1RTA5NDg3QjFGXCJcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwid2Vidmlld05hbWVcIjogXCJXRUJWSUVXX2NvbS5pby5hcHBpdW0uc2V0dGluZ1wiXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgd2Vidmlld3NNYXBwaW5nIGJhc2VkIG9uIENEUCBlbmRwb2ludHNcbiAqXG4gKiBAcmV0dXJuIHtBcnJheTxXZWJ2aWV3c01hcHBpbmc+fSB3ZWJ2aWV3c01hcHBpbmdcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Q29udGV4dHMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRDb250ZXh0cyAoKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgYW5kcm9pZERldmljZVNvY2tldDogdGhpcy5vcHRzLmFuZHJvaWREZXZpY2VTb2NrZXQsXG4gICAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHRydWUsXG4gICAgd2Vidmlld0RldnRvb2xzUG9ydDogdGhpcy5vcHRzLndlYnZpZXdEZXZ0b29sc1BvcnQsXG4gICAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB0cnVlXG4gIH07XG4gIHJldHVybiBhd2FpdCB3ZWJ2aWV3SGVscGVycy5nZXRXZWJWaWV3c01hcHBpbmcodGhpcy5hZGIsIG9wdHMpO1xufTtcblxuaGVscGVycy5hc3NpZ25Db250ZXh0cyA9IGZ1bmN0aW9uIGFzc2lnbkNvbnRleHRzICh3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe2lzQ2hyb21lU2Vzc2lvbjogdGhpcy5pc0Nocm9tZVNlc3Npb259LCB0aGlzLm9wdHMpO1xuICBjb25zdCB3ZWJ2aWV3cyA9IHdlYnZpZXdIZWxwZXJzLnBhcnNlV2Vidmlld05hbWVzKHdlYnZpZXdzTWFwcGluZywgb3B0cyk7XG4gIHRoaXMuY29udGV4dHMgPSBbTkFUSVZFX1dJTiwgLi4ud2Vidmlld3NdO1xuICB0aGlzLmxvZy5kZWJ1ZyhgQXZhaWxhYmxlIGNvbnRleHRzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29udGV4dHMpfWApO1xuICByZXR1cm4gdGhpcy5jb250ZXh0cztcbn07XG5cbmhlbHBlcnMuc3dpdGNoQ29udGV4dCA9IGFzeW5jIGZ1bmN0aW9uIHN3aXRjaENvbnRleHQgKG5hbWUsIHdlYnZpZXdzTWFwcGluZykge1xuICAvLyBXZSBoYXZlIHNvbWUgb3B0aW9ucyB3aGVuIGl0IGNvbWVzIHRvIHdlYnZpZXdzLiBJZiB3ZSB3YW50IGFcbiAgLy8gQ2hyb21lZHJpdmVyIHdlYnZpZXcsIHdlIGNhbiBvbmx5IGNvbnRyb2wgb25lIGF0IGEgdGltZS5cbiAgaWYgKHRoaXMuaXNDaHJvbWVkcml2ZXJDb250ZXh0KG5hbWUpKSB7XG4gICAgLy8gc3RhcnQgcHJveHlpbmcgY29tbWFuZHMgZGlyZWN0bHkgdG8gY2hyb21lZHJpdmVyXG4gICAgYXdhaXQgdGhpcy5zdGFydENocm9tZWRyaXZlclByb3h5KG5hbWUsIHdlYnZpZXdzTWFwcGluZyk7XG4gIH0gZWxzZSBpZiAodGhpcy5pc0Nocm9tZWRyaXZlckNvbnRleHQodGhpcy5jdXJDb250ZXh0KSkge1xuICAgIC8vIGlmIHdlJ3JlIG1vdmluZyB0byBhIG5vbi1jaHJvbWVkcml2ZXIgd2VidmlldywgYW5kIG91ciBjdXJyZW50IGNvbnRleHRcbiAgICAvLyBfaXNfIGEgY2hyb21lZHJpdmVyIHdlYnZpZXcsIGlmIGNhcHMgcmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucyBpcyBzZXRcbiAgICAvLyB0byB0cnVlIHRoZW4ga2lsbCBjaHJvbWVkcml2ZXIgc2Vzc2lvbiB1c2luZyBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyBvclxuICAgIC8vIGVsc2Ugc2ltcGx5IHN1c3BlbmQgcHJveHlpbmcgdG8gdGhlIGxhdHRlclxuICAgIGlmICh0aGlzLm9wdHMucmVjcmVhdGVDaHJvbWVEcml2ZXJTZXNzaW9ucykge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ3JlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMgc2V0IHRvIHRydWU7IGtpbGxpbmcgZXhpc3RpbmcgY2hyb21lZHJpdmVycycpO1xuICAgICAgYXdhaXQgdGhpcy5zdG9wQ2hyb21lZHJpdmVyUHJveGllcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnN1c3BlbmRDaHJvbWVkcml2ZXJQcm94eSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERpZG4ndCBrbm93IGhvdyB0byBoYW5kbGUgc3dpdGNoaW5nIHRvIGNvbnRleHQgJyR7bmFtZX0nYCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBPbi1vYmplY3QgY29udGV4dC1yZWxhdGVkIGhlbHBlcnNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGUgcmVhc29uIHRoaXMgaXMgYSBmdW5jdGlvbiBhbmQgbm90IGp1c3QgYSBjb25zdGFudCBpcyB0aGF0IGJvdGggYW5kcm9pZC1cbi8vIGRyaXZlciBhbmQgc2VsZW5kcm9pZC1kcml2ZXIgdXNlIHRoaXMgbG9naWMsIGFuZCBlYWNoIG9uZSByZXR1cm5zXG4vLyBhIGRpZmZlcmVudCBkZWZhdWx0IGNvbnRleHQgbmFtZVxuaGVscGVycy5kZWZhdWx0Q29udGV4dE5hbWUgPSBmdW5jdGlvbiBkZWZhdWx0Q29udGV4dE5hbWUgKCkge1xuICByZXR1cm4gTkFUSVZFX1dJTjtcbn07XG5cbmhlbHBlcnMuZGVmYXVsdFdlYnZpZXdOYW1lID0gZnVuY3Rpb24gZGVmYXVsdFdlYnZpZXdOYW1lICgpIHtcbiAgcmV0dXJuIFdFQlZJRVdfQkFTRSArICh0aGlzLm9wdHMuYXV0b1dlYnZpZXdOYW1lIHx8IHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbn07XG5cbmhlbHBlcnMuaXNXZWJDb250ZXh0ID0gZnVuY3Rpb24gaXNXZWJDb250ZXh0ICgpIHtcbiAgcmV0dXJuIHRoaXMuY3VyQ29udGV4dCAhPT0gbnVsbCAmJiB0aGlzLmN1ckNvbnRleHQgIT09IE5BVElWRV9XSU47XG59O1xuXG4vLyBUdXJuIG9uIHByb3h5aW5nIHRvIGFuIGV4aXN0aW5nIENocm9tZWRyaXZlciBzZXNzaW9uIG9yIGEgbmV3IG9uZVxuaGVscGVycy5zdGFydENocm9tZWRyaXZlclByb3h5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRDaHJvbWVkcml2ZXJQcm94eSAoY29udGV4dCwgd2Vidmlld3NNYXBwaW5nKSB7XG4gIHRoaXMubG9nLmRlYnVnKGBDb25uZWN0aW5nIHRvIGNocm9tZS1iYWNrZWQgd2VidmlldyBjb250ZXh0ICcke2NvbnRleHR9J2ApO1xuXG4gIGxldCBjZDtcbiAgaWYgKHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF0pIHtcbiAgICAvLyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSd2ZSBhbHJlYWR5IHNldCB1cCBhIGNocm9tZWRyaXZlciBmb3IgYSBjb250ZXh0LFxuICAgIC8vIHdlIHdhbnQgdG8gcmVjb25uZWN0IHRvIGl0LCBub3QgY3JlYXRlIGEgd2hvbGUgbmV3IG9uZVxuICAgIHRoaXMubG9nLmRlYnVnKGBGb3VuZCBleGlzdGluZyBDaHJvbWVkcml2ZXIgZm9yIGNvbnRleHQgJyR7Y29udGV4dH0nLiBVc2luZyBpdC5gKTtcbiAgICBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgYXdhaXQgc2V0dXBFeGlzdGluZ0Nocm9tZWRyaXZlcih0aGlzLmxvZywgY2QpO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcbiAgICBvcHRzLmNocm9tZVVzZVJ1bm5pbmdBcHAgPSB0cnVlO1xuXG4gICAgLy8gaWYgcmVxdWVzdGVkLCB0ZWxsIGNocm9tZWRyaXZlciB0byBhdHRhY2ggdG8gdGhlIGFuZHJvaWQgcGFja2FnZSB3ZSBoYXZlXG4gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZXh0IG5hbWUsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIG9mIHRoZSBBVVQuXG4gICAgLy8gQW5kIHR1cm4gdGhpcyBvbiBieSBkZWZhdWx0IGZvciBjaHJvbWUtLWlmIGNocm9tZSBwb3BzIHVwIHdpdGggYSB3ZWJ2aWV3XG4gICAgLy8gYW5kIHNvbWVvbmUgd2FudHMgdG8gc3dpdGNoIHRvIGl0LCB3ZSBzaG91bGQgbGV0IGNocm9tZWRyaXZlciBjb25uZWN0IHRvXG4gICAgLy8gY2hyb21lIHJhdGhlciB0aGFuIHN0YXlpbmcgc3R1Y2sgb24gdGhlIEFVVFxuICAgIGlmIChvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSB8fCBjb250ZXh0ID09PSBgJHtXRUJWSUVXX0JBU0V9Y2hyb21lYCkge1xuICAgICAgbGV0IGFuZHJvaWRQYWNrYWdlID0gY29udGV4dC5tYXRjaChgJHtXRUJWSUVXX0JBU0V9KC4rKWApO1xuICAgICAgaWYgKGFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWRQYWNrYWdlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZSA9IGFuZHJvaWRQYWNrYWdlWzFdO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRzLmV4dHJhY3RDaHJvbWVBbmRyb2lkUGFja2FnZUZyb21Db250ZXh0TmFtZSkge1xuICAgICAgICBpZiAoXy5oYXModGhpcy5vcHRzLCAnZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uJykgJiYgIXRoaXMub3B0cy5lbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24pIHtcbiAgICAgICAgICAvLyBXaGVuIGVuYWJsZVdlYnZpZXdEZXRhaWxzQ29sbGVjdGlvbiBjYXBhYmlsaXR5IGlzIGV4cGxpY2l0bHkgZGlzYWJsZWQsIHRyeSB0byBpZGVudGlmeVxuICAgICAgICAgIC8vIGNocm9tZUFuZHJvaWRQYWNrYWdlIGJhc2VkIG9uIGNvbnRleHRzLCBrbm93biBjaHJvbWUgdmFyaWFudCBwYWNrYWdlcyBhbmQgcXVlcnlBcHBTdGF0ZSByZXN1bHRcbiAgICAgICAgICAvLyBzaW5jZSB3ZWJ2aWV3c01hcHBpbmcgZG9lcyBub3QgaGF2ZSBpbmZvIG9iamVjdFxuICAgICAgICAgIGNvbnN0IGNvbnRleHRzID0gd2Vidmlld3NNYXBwaW5nLm1hcCgod20pID0+IHdtLndlYnZpZXdOYW1lKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtub3duUGFja2FnZSBvZiBLTk9XTl9DSFJPTUVfUEFDS0FHRV9OQU1FUykge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXMoY29udGV4dHMsIGAke1dFQlZJRVdfQkFTRX0ke2tub3duUGFja2FnZX1gKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwcFN0YXRlID0gYXdhaXQgdGhpcy5xdWVyeUFwcFN0YXRlKGtub3duUGFja2FnZSk7XG4gICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhbQVBQX1NUQVRFLlJVTk5JTkdfSU5fQkFDS0dST1VORCwgQVBQX1NUQVRFLlJVTk5JTkdfSU5fRk9SRUdST1VORF0sIGFwcFN0YXRlKSkge1xuICAgICAgICAgICAgICBvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlID0ga25vd25QYWNrYWdlO1xuICAgICAgICAgICAgICB0aGlzLmxvZy5kZWJ1ZyhgSWRlbnRpZmllZCBjaHJvbWVBbmRyb2lkUGFja2FnZSBhcyAnJHtvcHRzLmNocm9tZUFuZHJvaWRQYWNrYWdlfScgYCArXG4gICAgICAgICAgICAgICAgYGZvciBjb250ZXh0ICcke2NvbnRleHR9JyBieSBxdWVyeWluZyBzdGF0ZXMgb2YgQ2hyb21lIGFwcCBwYWNrYWdlc2ApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChjb25zdCB3bSBvZiB3ZWJ2aWV3c01hcHBpbmcpIHtcbiAgICAgICAgICAgIGlmICh3bS53ZWJ2aWV3TmFtZSA9PT0gY29udGV4dCAmJiBfLmhhcyh3bT8uaW5mbywgJ0FuZHJvaWQtUGFja2FnZScpKSB7XG4gICAgICAgICAgICAgIG9wdHMuY2hyb21lQW5kcm9pZFBhY2thZ2UgPSB3bS5pbmZvWydBbmRyb2lkLVBhY2thZ2UnXTtcbiAgICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYElkZW50aWZpZWQgY2hyb21lQW5kcm9pZFBhY2thZ2UgYXMgJyR7b3B0cy5jaHJvbWVBbmRyb2lkUGFja2FnZX0nIGAgK1xuICAgICAgICAgICAgICAgIGBmb3IgY29udGV4dCAnJHtjb250ZXh0fScgYnkgQ0RQYCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNkID0gYXdhaXQgdGhpcy5zZXR1cE5ld0Nocm9tZWRyaXZlcihvcHRzLCB0aGlzLmFkYi5jdXJEZXZpY2VJZCwgdGhpcy5hZGIsIGNvbnRleHQpO1xuICAgIC8vIGJpbmQgb3VyIHN0b3AvZXhpdCBoYW5kbGVyLCBwYXNzaW5nIGluIGNvbnRleHQgc28gd2Uga25vdyB3aGljaFxuICAgIC8vIG9uZSBzdG9wcGVkIHVuZXhwZWN0ZWRseVxuICAgIGNkLm9uKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VELCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgICB0aGlzLm9uQ2hyb21lZHJpdmVyU3RvcChjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBzYXZlIHRoZSBjaHJvbWVkcml2ZXIgb2JqZWN0IHVuZGVyIHRoZSBjb250ZXh0XG4gICAgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XSA9IGNkO1xuICB9XG4gIC8vIGhvb2sgdXAgdGhlIGxvY2FsIHZhcmlhYmxlcyBzbyB3ZSBjYW4gcHJveHkgdGhpcyBiaXpcbiAgdGhpcy5jaHJvbWVkcml2ZXIgPSBjZDtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZC5iaW5kKHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcbn07XG5cbi8vIFN0b3AgcHJveHlpbmcgdG8gYW55IENocm9tZWRyaXZlclxuaGVscGVycy5zdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgPSBmdW5jdGlvbiBzdXNwZW5kQ2hyb21lZHJpdmVyUHJveHkgKCkge1xuICB0aGlzLmNocm9tZWRyaXZlciA9IG51bGw7XG4gIHRoaXMucHJveHlSZXFSZXMgPSBudWxsO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IG51bGw7XG4gIHRoaXMuandwUHJveHlBY3RpdmUgPSBmYWxzZTtcbn07XG5cbi8vIEhhbmRsZSBhbiBvdXQtb2YtYmFuZCBDaHJvbWVkcml2ZXIgc3RvcCBldmVudFxuaGVscGVycy5vbkNocm9tZWRyaXZlclN0b3AgPSBhc3luYyBmdW5jdGlvbiBvbkNocm9tZWRyaXZlclN0b3AgKGNvbnRleHQpIHtcbiAgdGhpcy5sb2cud2FybihgQ2hyb21lZHJpdmVyIGZvciBjb250ZXh0ICR7Y29udGV4dH0gc3RvcHBlZCB1bmV4cGVjdGVkbHlgKTtcbiAgaWYgKGNvbnRleHQgPT09IHRoaXMuY3VyQ29udGV4dCkge1xuICAgIC8vIHdlIGV4aXRlZCB1bmV4cGVjdGVkbHkgd2hpbGUgYXV0b21hdGluZyB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBzbyB3YW50XG4gICAgLy8gdG8gc2h1dCBkb3duIHRoZSBzZXNzaW9uIGFuZCByZXNwb25kIHdpdGggYW4gZXJyb3JcbiAgICBsZXQgZXJyID0gbmV3IEVycm9yKCdDaHJvbWVkcml2ZXIgcXVpdCB1bmV4cGVjdGVkbHkgZHVyaW5nIHNlc3Npb24nKTtcbiAgICBhd2FpdCB0aGlzLnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKGVycik7XG4gIH0gZWxzZSB7XG4gICAgLy8gaWYgYSBDaHJvbWVkcml2ZXIgaW4gdGhlIG5vbi1hY3RpdmUgY29udGV4dCBiYXJmcywgd2UgZG9uJ3QgcmVhbGx5XG4gICAgLy8gY2FyZSwgd2UnbGwganVzdCBtYWtlIGEgbmV3IG9uZSBuZXh0IHRpbWUgd2UgbmVlZCB0aGUgY29udGV4dC5cbiAgICB0aGlzLmxvZy53YXJuKFwiQ2hyb21lZHJpdmVyIHF1aXQgdW5leHBlY3RlZGx5LCBidXQgaXQgd2Fzbid0IHRoZSBhY3RpdmUgXCIgK1xuICAgICAgJ2NvbnRleHQsIGlnbm9yaW5nJyk7XG4gICAgZGVsZXRlIHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gIH1cbn07XG5cbi8vIEludGVudGlvbmFsbHkgc3RvcCBhbGwgdGhlIGNocm9tZWRyaXZlcnMgY3VycmVudGx5IGFjdGl2ZSwgYW5kIGlnbm9yZVxuLy8gdGhlaXIgZXhpdCBldmVudHNcbmhlbHBlcnMuc3RvcENocm9tZWRyaXZlclByb3hpZXMgPSBhc3luYyBmdW5jdGlvbiBzdG9wQ2hyb21lZHJpdmVyUHJveGllcyAoKSB7XG4gIHRoaXMuc3VzcGVuZENocm9tZWRyaXZlclByb3h5KCk7IC8vIG1ha2Ugc3VyZSB3ZSB0dXJuIG9mZiB0aGUgcHJveHkgZmxhZ1xuICBmb3IgKGxldCBjb250ZXh0IG9mIF8ua2V5cyh0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzKSkge1xuICAgIGxldCBjZCA9IHRoaXMuc2Vzc2lvbkNocm9tZWRyaXZlcnNbY29udGV4dF07XG4gICAgdGhpcy5sb2cuZGVidWcoYFN0b3BwaW5nIGNocm9tZWRyaXZlciBmb3IgY29udGV4dCAke2NvbnRleHR9YCk7XG4gICAgLy8gc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBzdG9wcGVkIHN0YXRlIGV2ZW50XG4gICAgY2QucmVtb3ZlQWxsTGlzdGVuZXJzKENocm9tZWRyaXZlci5FVkVOVF9DSEFOR0VEKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2Quc3RvcCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2cud2FybihgRXJyb3Igc3RvcHBpbmcgQ2hyb21lZHJpdmVyOiAke2Vyci5tZXNzYWdlfWApO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5zZXNzaW9uQ2hyb21lZHJpdmVyc1tjb250ZXh0XTtcbiAgfVxufTtcblxuaGVscGVycy5pc0Nocm9tZWRyaXZlckNvbnRleHQgPSBmdW5jdGlvbiBpc0Nocm9tZWRyaXZlckNvbnRleHQgKHZpZXdOYW1lKSB7XG4gIHJldHVybiBfLmluY2x1ZGVzKHZpZXdOYW1lLCBXRUJWSUVXX1dJTikgfHwgdmlld05hbWUgPT09IENIUk9NSVVNX1dJTjtcbn07XG5cbmhlbHBlcnMuc2hvdWxkRGlzbWlzc0Nocm9tZVdlbGNvbWUgPSBmdW5jdGlvbiBzaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSAoKSB7XG4gIHJldHVybiAhIXRoaXMub3B0cy5jaHJvbWVPcHRpb25zICYmXG4gICAgICAgICBfLmlzQXJyYXkodGhpcy5vcHRzLmNocm9tZU9wdGlvbnMuYXJncykgJiZcbiAgICAgICAgIHRoaXMub3B0cy5jaHJvbWVPcHRpb25zLmFyZ3MuaW5jbHVkZXMoJy0tbm8tZmlyc3QtcnVuJyk7XG59O1xuXG5oZWxwZXJzLmRpc21pc3NDaHJvbWVXZWxjb21lID0gYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0Nocm9tZVdlbGNvbWUgKCkge1xuICB0aGlzLmxvZy5pbmZvKCdUcnlpbmcgdG8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZScpO1xuICBsZXQgYWN0aXZpdHkgPSBhd2FpdCB0aGlzLmdldEN1cnJlbnRBY3Rpdml0eSgpO1xuICBpZiAoYWN0aXZpdHkgIT09ICdvcmcuY2hyb21pdW0uY2hyb21lLmJyb3dzZXIuZmlyc3RydW4uRmlyc3RSdW5BY3Rpdml0eScpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdDaHJvbWUgd2VsY29tZSBkaWFsb2cgbmV2ZXIgc2hvd2VkIHVwISBDb250aW51aW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBlbCA9IGF3YWl0IHRoaXMuZmluZEVsT3JFbHMoJ2lkJywgJ2NvbS5hbmRyb2lkLmNocm9tZTppZC90ZXJtc19hY2NlcHQnLCBmYWxzZSk7XG4gIGF3YWl0IHRoaXMuY2xpY2soZWwuRUxFTUVOVCk7XG4gIHRyeSB7XG4gICAgbGV0IGVsID0gYXdhaXQgdGhpcy5maW5kRWxPckVscygnaWQnLCAnY29tLmFuZHJvaWQuY2hyb21lOmlkL25lZ2F0aXZlX2J1dHRvbicsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmNsaWNrKGVsLkVMRU1FTlQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRE8gTk9USElORywgVEhJUyBERVZJQ0UgRElETlQgTEFVTkNIIFRIRSBTSUdOSU4gRElBTE9HXG4gICAgLy8gSVQgTVVTVCBCRSBBIE5PTiBHTVMgREVWSUNFXG4gICAgdGhpcy5sb2cud2FybihgVGhpcyBkZXZpY2UgZGlkIG5vdCBzaG93IENocm9tZSBTaWduSW4gZGlhbG9nLCAke2UubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuaGVscGVycy5zdGFydENocm9tZVNlc3Npb24gPSBhc3luYyBmdW5jdGlvbiBzdGFydENocm9tZVNlc3Npb24gKCkge1xuICB0aGlzLmxvZy5pbmZvKCdTdGFydGluZyBhIGNocm9tZS1iYXNlZCBicm93c2VyIHNlc3Npb24nKTtcbiAgbGV0IG9wdHMgPSBfLmNsb25lRGVlcCh0aGlzLm9wdHMpO1xuXG4gIGNvbnN0IGtub3duUGFja2FnZXMgPSBbXG4gICAgJ29yZy5jaHJvbWl1bS5jaHJvbWUuc2hlbGwnLFxuICAgICdjb20uYW5kcm9pZC5jaHJvbWUnLFxuICAgICdjb20uY2hyb21lLmJldGEnLFxuICAgICdvcmcuY2hyb21pdW0uY2hyb21lJyxcbiAgICAnb3JnLmNocm9taXVtLndlYnZpZXdfc2hlbGwnLFxuICBdO1xuXG4gIGlmIChfLmluY2x1ZGVzKGtub3duUGFja2FnZXMsIHRoaXMub3B0cy5hcHBQYWNrYWdlKSkge1xuICAgIG9wdHMuY2hyb21lQnVuZGxlSWQgPSB0aGlzLm9wdHMuYXBwUGFja2FnZTtcbiAgfSBlbHNlIHtcbiAgICBvcHRzLmNocm9tZUFuZHJvaWRBY3Rpdml0eSA9IHRoaXMub3B0cy5hcHBBY3Rpdml0eTtcbiAgfVxuICB0aGlzLmNocm9tZWRyaXZlciA9IGF3YWl0IHRoaXMuc2V0dXBOZXdDaHJvbWVkcml2ZXIob3B0cywgdGhpcy5hZGIuY3VyRGV2aWNlSWQsIHRoaXMuYWRiKTtcbiAgdGhpcy5jaHJvbWVkcml2ZXIub24oQ2hyb21lZHJpdmVyLkVWRU5UX0NIQU5HRUQsIChtc2cpID0+IHtcbiAgICBpZiAobXNnLnN0YXRlID09PSBDaHJvbWVkcml2ZXIuU1RBVEVfU1RPUFBFRCkge1xuICAgICAgdGhpcy5vbkNocm9tZWRyaXZlclN0b3AoQ0hST01JVU1fV0lOKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBDaHJvbWUgc2Vzc2lvbiwgd2UgZW5zdXJlIHRoYXQgdGhlIGNvbnRleHQgaXNcbiAgLy8gYXBwcm9wcmlhdGVseSBzZXQgYW5kIHRoYXQgdGhpcyBjaHJvbWVkcml2ZXIgaXMgYWRkZWQgdG8gdGhlIGxpc3RcbiAgLy8gb2Ygc2Vzc2lvbiBjaHJvbWVkcml2ZXJzIHNvIHdlIGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGhcbiAgdGhpcy5jdXJDb250ZXh0ID0gQ0hST01JVU1fV0lOO1xuICB0aGlzLnNlc3Npb25DaHJvbWVkcml2ZXJzW0NIUk9NSVVNX1dJTl0gPSB0aGlzLmNocm9tZWRyaXZlcjtcbiAgdGhpcy5wcm94eVJlcVJlcyA9IHRoaXMuY2hyb21lZHJpdmVyLnByb3h5UmVxLmJpbmQodGhpcy5jaHJvbWVkcml2ZXIpO1xuICB0aGlzLnByb3h5Q29tbWFuZCA9IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuY29tbWFuZC5iaW5kKHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkpO1xuICB0aGlzLmp3cFByb3h5QWN0aXZlID0gdHJ1ZTtcblxuICBpZiAodGhpcy5zaG91bGREaXNtaXNzQ2hyb21lV2VsY29tZSgpKSB7XG4gICAgLy8gZGlzbWlzcyBDaHJvbWUgd2VsY29tZSBkaWFsb2dcbiAgICBhd2FpdCB0aGlzLmRpc21pc3NDaHJvbWVXZWxjb21lKCk7XG4gIH1cbn07XG5cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEludGVybmFsIGxpYnJhcnkgZnVuY3Rpb25zXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5hc3luYyBmdW5jdGlvbiBzZXR1cEV4aXN0aW5nQ2hyb21lZHJpdmVyIChsb2csIGNocm9tZWRyaXZlcikge1xuICAvLyBjaGVjayB0aGUgc3RhdHVzIGJ5IHNlbmRpbmcgYSBzaW1wbGUgd2luZG93LWJhc2VkIGNvbW1hbmQgdG8gQ2hyb21lRHJpdmVyXG4gIC8vIGlmIHRoZXJlIGlzIGFuIGVycm9yLCB3ZSB3YW50IHRvIHJlY3JlYXRlIHRoZSBDaHJvbWVEcml2ZXIgc2Vzc2lvblxuICBpZiAoIWF3YWl0IGNocm9tZWRyaXZlci5oYXNXb3JraW5nV2VidmlldygpKSB7XG4gICAgbG9nLmRlYnVnKCdDaHJvbWVEcml2ZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdpbmRvdy4gJyArXG4gICAgICAgICAgICAgICAgICdSZS1pbml0aWFsaXppbmcgdGhlIHNlc3Npb24uJyk7XG4gICAgYXdhaXQgY2hyb21lZHJpdmVyLnJlc3RhcnQoKTtcbiAgfVxuICByZXR1cm4gY2hyb21lZHJpdmVyO1xufVxuXG4vKipcbiAqIEZpbmQgYSBmcmVlIHBvcnQgdG8gaGF2ZSBDaHJvbWVkcml2ZXIgbGlzdGVuIG9uLlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IHBvcnRTcGVjIC0gQXJyYXkgd2hpY2ggaXMgYSBsaXN0IG9mIHBvcnRzLiBBIGxpc3QgaXRlbSBtYXlcbiAqIGFsc28gaXRzZWxmIGJlIGFuIGFycmF5IG9mIGxlbmd0aCAyIHNwZWNpZnlpbmcgYSBzdGFydCBhbmQgZW5kIHBvcnQgb2ZcbiAqIGEgcmFuZ2UuIFNvbWUgdmFsaWQgcG9ydCBzcGVjczpcbiAqICAgIC0gWzgwMDAsIDgwMDEsIDgwMDJdXG4gKiAgICAtIFtbODAwMCwgODAwNV1dXG4gKiAgICAtIFs4MDAwLCBbOTAwMCwgOTEwMF1dXG4gKiBAcGFyYW0ge09iamVjdD99IGxvZyBMb2dnZXIgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgZnJlZSBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldENocm9tZWRyaXZlclBvcnQgKHBvcnRTcGVjLCBsb2cgPSBudWxsKSB7XG4gIGNvbnN0IGdldFBvcnQgPSBCLnByb21pc2lmeShQb3J0RmluZGVyLmdldFBvcnQsIHtjb250ZXh0OiBQb3J0RmluZGVyfSk7XG5cbiAgLy8gaWYgdGhlIHVzZXIgZGlkbid0IGdpdmUgdXMgYW55IHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IGNocm9tZWRyaXZlclxuICAvLyBwb3J0IHJhbmdlcywganVzdCBmaW5kIGFueSBmcmVlIHBvcnRcbiAgaWYgKCFwb3J0U3BlYykge1xuICAgIGNvbnN0IHBvcnQgPSBhd2FpdCBnZXRQb3J0KCk7XG4gICAgbG9nPy5kZWJ1ZyhgQSBwb3J0IHdhcyBub3QgZ2l2ZW4sIHVzaW5nIHJhbmRvbSBmcmVlIHBvcnQ6ICR7cG9ydH1gKTtcbiAgICByZXR1cm4gcG9ydDtcbiAgfVxuXG4gIC8vIG90aGVyd2lzZSBmaW5kIHRoZSBmcmVlIHBvcnQgYmFzZWQgb24gYSBsaXN0IG9yIHJhbmdlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gIGxvZz8uZGVidWcoYEZpbmRpbmcgYSBmcmVlIHBvcnQgZm9yIGNocm9tZWRyaXZlciB1c2luZyBzcGVjICR7SlNPTi5zdHJpbmdpZnkocG9ydFNwZWMpfWApO1xuICBsZXQgZm91bmRQb3J0ID0gbnVsbDtcbiAgZm9yIChjb25zdCBwb3RlbnRpYWxQb3J0IG9mIHBvcnRTcGVjKSB7XG4gICAgbGV0IHBvcnQsIHN0b3BQb3J0O1xuICAgIGlmIChfLmlzQXJyYXkocG90ZW50aWFsUG9ydCkpIHtcbiAgICAgIChbcG9ydCwgc3RvcFBvcnRdID0gcG90ZW50aWFsUG9ydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcnQgPSBwYXJzZUludChwb3RlbnRpYWxQb3J0LCAxMCk7IC8vIGVuc3VyZSB3ZSBoYXZlIGEgbnVtYmVyIGFuZCBub3QgYSBzdHJpbmdcbiAgICAgIHN0b3BQb3J0ID0gcG9ydDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGxvZz8uZGVidWcoYENoZWNraW5nIHBvcnQgcmFuZ2UgJHtwb3J0fToke3N0b3BQb3J0fWApO1xuICAgICAgZm91bmRQb3J0ID0gYXdhaXQgZ2V0UG9ydCh7cG9ydCwgc3RvcFBvcnR9KTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZz8uZGVidWcoYE5vdGhpbmcgaW4gcG9ydCByYW5nZSAke3BvcnR9OiR7c3RvcFBvcnR9IHdhcyBhdmFpbGFibGVgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZm91bmRQb3J0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBhIGZyZWUgcG9ydCBmb3IgY2hyb21lZHJpdmVyIHVzaW5nIGAgK1xuICAgICAgICAgICAgICAgICAgICBgY2hyb21lZHJpdmVyUG9ydHMgc3BlYyAke0pTT04uc3RyaW5naWZ5KHBvcnRTcGVjKX1gKTtcbiAgfVxuXG4gIGxvZz8uZGVidWcoYFVzaW5nIGZyZWUgcG9ydCAke2ZvdW5kUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICByZXR1cm4gZm91bmRQb3J0O1xufVxuXG5oZWxwZXJzLmlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCA9IGZ1bmN0aW9uIGlzQ2hyb21lZHJpdmVyQXV0b2Rvd25sb2FkRW5hYmxlZCAoKSB7XG4gIGlmICh0aGlzLmlzRmVhdHVyZUVuYWJsZWQoQ0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRoaXM/LmxvZz8uZGVidWcoYEF1dG9tYXRlZCBDaHJvbWVkcml2ZXIgZG93bmxvYWQgaXMgZGlzYWJsZWQuIGAgK1xuICAgIGBVc2UgJyR7Q0hST01FRFJJVkVSX0FVVE9ET1dOTE9BRF9GRUFUVVJFfScgc2VydmVyIGZlYXR1cmUgdG8gZW5hYmxlIGl0YCk7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmhlbHBlcnMuc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBhc3luYyBmdW5jdGlvbiBzZXR1cE5ld0Nocm9tZWRyaXZlciAob3B0cywgY3VyRGV2aWNlSWQsIGFkYiwgY29udGV4dCA9IG51bGwpIHtcbiAgaWYgKG9wdHMuY2hyb21lRHJpdmVyUG9ydCkge1xuICAgIHRoaXM/LmxvZz8ud2FybihgVGhlICdjaHJvbWVEcml2ZXJQb3J0JyBjYXBhYmlsaXR5IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgJ2Nocm9tZWRyaXZlclBvcnQnIGluc3RlYWRgKTtcbiAgICBvcHRzLmNocm9tZWRyaXZlclBvcnQgPSBvcHRzLmNocm9tZURyaXZlclBvcnQ7XG4gIH1cblxuICBpZiAob3B0cy5jaHJvbWVkcml2ZXJQb3J0KSB7XG4gICAgdGhpcz8ubG9nPy5kZWJ1ZyhgVXNpbmcgdXNlci1zcGVjaWZpZWQgcG9ydCAke29wdHMuY2hyb21lZHJpdmVyUG9ydH0gZm9yIGNocm9tZWRyaXZlcmApO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIGEgc2luZ2xlIHBvcnQgd2Fzbid0IGdpdmVuLCB3ZSdsbCBsb29rIGZvciBhIGZyZWUgb25lXG4gICAgb3B0cy5jaHJvbWVkcml2ZXJQb3J0ID0gYXdhaXQgZ2V0Q2hyb21lZHJpdmVyUG9ydChvcHRzLmNocm9tZWRyaXZlclBvcnRzLCB0aGlzPy5sb2cpO1xuICB9XG5cbiAgY29uc3QgZGV0YWlscyA9IGNvbnRleHQgPyB3ZWJ2aWV3SGVscGVycy5nZXRXZWJ2aWV3RGV0YWlscyhhZGIsIGNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBpZiAoIV8uaXNFbXB0eShkZXRhaWxzKSkge1xuICAgIHRoaXM/LmxvZz8uZGVidWcoJ1Bhc3Npbmcgd2ViIHZpZXcgZGV0YWlscyB0byB0aGUgQ2hyb21lZHJpdmVyIGNvbnN0cnVjdG9yOiAnICtcbiAgICAgIEpTT04uc3RyaW5naWZ5KGRldGFpbHMsIG51bGwsIDIpKTtcbiAgfVxuXG4gIGNvbnN0IGNocm9tZWRyaXZlciA9IG5ldyBDaHJvbWVkcml2ZXIoe1xuICAgIHBvcnQ6IG9wdHMuY2hyb21lZHJpdmVyUG9ydCxcbiAgICBleGVjdXRhYmxlOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGUsXG4gICAgYWRiLFxuICAgIGNtZEFyZ3M6IG9wdHMuY2hyb21lZHJpdmVyQXJncyxcbiAgICB2ZXJib3NlOiAhIW9wdHMuc2hvd0Nocm9tZWRyaXZlckxvZyxcbiAgICBleGVjdXRhYmxlRGlyOiBvcHRzLmNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXIsXG4gICAgbWFwcGluZ1BhdGg6IG9wdHMuY2hyb21lZHJpdmVyQ2hyb21lTWFwcGluZ0ZpbGUsXG4gICAgYnVuZGxlSWQ6IG9wdHMuY2hyb21lQnVuZGxlSWQsXG4gICAgdXNlU3lzdGVtRXhlY3V0YWJsZTogb3B0cy5jaHJvbWVkcml2ZXJVc2VTeXN0ZW1FeGVjdXRhYmxlLFxuICAgIGRpc2FibGVCdWlsZENoZWNrOiBvcHRzLmNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrLFxuICAgIGRldGFpbHMsXG4gICAgaXNBdXRvZG93bmxvYWRFbmFibGVkOiB0aGlzPy5pc0Nocm9tZWRyaXZlckF1dG9kb3dubG9hZEVuYWJsZWQ/LigpXG4gIH0pO1xuXG4gIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgY2hyb21lT3B0aW9uc1xuICBvcHRzLmNocm9tZU9wdGlvbnMgPSBvcHRzLmNocm9tZU9wdGlvbnMgfHwge307XG4gIC8vIHRyeSBvdXQgYW55IHByZWZpeGVkIGNocm9tZU9wdGlvbnMsXG4gIC8vIGFuZCBzdHJpcCB0aGUgcHJlZml4XG4gIGZvciAoY29uc3Qgb3B0IG9mIF8ua2V5cyhvcHRzKSkge1xuICAgIGlmIChvcHQuZW5kc1dpdGgoJzpjaHJvbWVPcHRpb25zJykpIHtcbiAgICAgIHRoaXM/LmxvZz8ud2FybihgTWVyZ2luZyAnJHtvcHR9JyBpbnRvICdjaHJvbWVPcHRpb25zJy4gVGhpcyBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcmApO1xuICAgICAgXy5tZXJnZShvcHRzLmNocm9tZU9wdGlvbnMsIG9wdHNbb3B0XSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2FwcyA9IHdlYnZpZXdIZWxwZXJzLmNyZWF0ZUNocm9tZWRyaXZlckNhcHMob3B0cywgY3VyRGV2aWNlSWQsIGRldGFpbHMpO1xuICB0aGlzPy5sb2c/LmRlYnVnKGBCZWZvcmUgc3RhcnRpbmcgY2hyb21lZHJpdmVyLCBhbmRyb2lkUGFja2FnZSBpcyAnJHtjYXBzLmNocm9tZU9wdGlvbnMuYW5kcm9pZFBhY2thZ2V9J2ApO1xuICBhd2FpdCBjaHJvbWVkcml2ZXIuc3RhcnQoY2Fwcyk7XG4gIHJldHVybiBjaHJvbWVkcml2ZXI7XG59O1xuY29uc3Qgc2V0dXBOZXdDaHJvbWVkcml2ZXIgPSBoZWxwZXJzLnNldHVwTmV3Q2hyb21lZHJpdmVyO1xuXG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgY29tbWFuZHMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgY29tbWFuZHMsIGhlbHBlcnMsIHNldHVwTmV3Q2hyb21lZHJpdmVyIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFBK0M7QUFBQTtBQUUvQyxNQUFNQSxpQ0FBaUMsR0FBRywyQkFBMkI7QUFFckUsSUFBSUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7O0FBQUM7QUFBQTtBQU1qREYsUUFBUSxDQUFDRyxpQkFBaUIsR0FBRyxlQUFlQSxpQkFBaUIsR0FBSTtFQUcvRCxPQUFPLElBQUksQ0FBQ0MsVUFBVSxJQUFJLElBQUksQ0FBQ0Msa0JBQWtCLEVBQUU7QUFDckQsQ0FBQztBQUVETCxRQUFRLENBQUNNLFdBQVcsR0FBRyxlQUFlQSxXQUFXLEdBQUk7RUFDbkQsTUFBTUMsZUFBZSxHQUFHLE1BQU1DLHVCQUFjLENBQUNDLGtCQUFrQixDQUFDLElBQUksQ0FBQ0MsR0FBRyxFQUFFLElBQUksQ0FBQ0MsSUFBSSxDQUFDO0VBQ3BGLE9BQU8sSUFBSSxDQUFDQyxjQUFjLENBQUNMLGVBQWUsQ0FBQztBQUM3QyxDQUFDO0FBRURQLFFBQVEsQ0FBQ2EsVUFBVSxHQUFHLGVBQWVBLFVBQVUsQ0FBRUMsSUFBSSxFQUFFO0VBQ3JELElBQUksQ0FBQ0MsYUFBSSxDQUFDQyxRQUFRLENBQUNGLElBQUksQ0FBQyxFQUFFO0lBQ3hCQSxJQUFJLEdBQUcsSUFBSSxDQUFDVCxrQkFBa0IsRUFBRTtFQUNsQyxDQUFDLE1BQU0sSUFBSVMsSUFBSSxLQUFLRywyQkFBVyxFQUFFO0lBRS9CSCxJQUFJLEdBQUcsSUFBSSxDQUFDSSxrQkFBa0IsRUFBRTtFQUNsQztFQUVBLElBQUlKLElBQUksS0FBSyxJQUFJLENBQUNWLFVBQVUsRUFBRTtJQUM1QjtFQUNGO0VBRUEsTUFBTUcsZUFBZSxH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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":["CHROMEDRIVER_AUTODOWNLOAD_FEATURE","commands","helpers","extensions","getCurrentContext","curContext","defaultContextName","getContexts","webviewsMapping","webviewHelpers","getWebViewsMapping","adb","opts","assignContexts","setContext","name","util","hasValue","WEBVIEW_WIN","defaultWebviewName","contexts","_","includes","errors","NoSuchContextError","switchContext","mobileGetContexts","androidDeviceSocket","ensureWebviewsHavePages","webviewDevtoolsPort","enableWebviewDetailsCollection","Object","assign","isChromeSession","webviews","parseWebviewNames","NATIVE_WIN","log","debug","JSON","stringify","isChromedriverContext","startChromedriverProxy","recreateChromeDriverSessions","stopChromedriverProxies","suspendChromedriverProxy","Error","WEBVIEW_BASE","appPackage","isWebContext","context","cd","sessionChromedrivers","setupExistingChromedriver","cloneDeep","chromeUseRunningApp","extractChromeAndroidPackageFromContextName","androidPackage","match","length","chromeAndroidPackage","has","map","wm","webviewName","knownPackage","KNOWN_CHROME_PACKAGE_NAMES","appState","queryAppState","APP_STATE","RUNNING_IN_BACKGROUND","RUNNING_IN_FOREGROUND","info","setupNewChromedriver","curDeviceId","on","Chromedriver","EVENT_CHANGED","msg","state","STATE_STOPPED","onChromedriverStop","chromedriver","proxyReqRes","proxyReq","bind","proxyCommand","jwproxy","command","jwpProxyActive","warn","err","startUnexpectedShutdown","keys","removeAllListeners","stop","message","viewName","CHROMIUM_WIN","shouldDismissChromeWelcome","chromeOptions","isArray","args","dismissChromeWelcome","activity","getCurrentActivity","el","findElOrEls","click","ELEMENT","e","startChromeSession","knownPackages","chromeBundleId","chromeAndroidActivity","appActivity","hasWorkingWebview","restart","getChromedriverPort","portSpec","getPort","B","promisify","PortFinder","port","foundPort","potentialPort","stopPort","parseInt","isChromedriverAutodownloadEnabled","isFeatureEnabled","chromeDriverPort","chromedriverPort","chromedriverPorts","details","getWebviewDetails","undefined","isEmpty","executable","chromedriverExecutable","cmdArgs","chromedriverArgs","verbose","showChromedriverLog","executableDir","chromedriverExecutableDir","mappingPath","chromedriverChromeMappingFile","bundleId","useSystemExecutable","chromedriverUseSystemExecutable","disableBuildCheck","chromedriverDisableBuildCheck","isAutodownloadEnabled","opt","endsWith","merge","caps","createChromedriverCaps","start"],"sources":["../../../lib/commands/context.js"],"sourcesContent":["import _ from 'lodash';\nimport Chromedriver from 'appium-chromedriver';\nimport PortFinder from 'portfinder';\nimport B from 'bluebird';\nimport { util } from 'appium/support';\nimport { errors } from 'appium/driver';\nimport {\n default as webviewHelpers,\n NATIVE_WIN, WEBVIEW_BASE, WEBVIEW_WIN, CHROMIUM_WIN, KNOWN_CHROME_PACKAGE_NAMES\n} from '../webview-helpers';\nimport { APP_STATE } from '../android-helpers';\n\nconst CHROMEDRIVER_AUTODOWNLOAD_FEATURE = 'chromedriver_autodownload';\n\nlet commands = {}, helpers = {}, extensions = {};\n\n\n/* -------------------------------\n * Actual MJSONWP command handlers\n * ------------------------------- */\ncommands.getCurrentContext = async function getCurrentContext () { // eslint-disable-line require-await\n // if the current context is `null`, indicating no context\n // explicitly set, it is the default context\n return this.curContext || this.defaultContextName();\n};\n\ncommands.getContexts = async function getContexts () {\n const webviewsMapping = await webviewHelpers.getWebViewsMapping(this.adb, this.opts);\n return this.assignContexts(webviewsMapping);\n};\n\ncommands.setContext = async function setContext (name) {\n if (!util.hasValue(name)) {\n name = this.defaultContextName();\n } else if (name === WEBVIEW_WIN) {\n // handle setContext \"WEBVIEW\"\n name = this.defaultWebviewName();\n }\n // if we're already in the context we want, do nothing\n if (name === this.curContext) {\n return;\n }\n\n const webviewsMapping = await webviewHelpers.getWebViewsMapping(this.adb, this.opts);\n const contexts = this.assignContexts(webviewsMapping);\n // if the context we want doesn't exist, fail\n if (!_.includes(contexts, name)) {\n throw new errors.NoSuchContextError();\n }\n\n await this.switchContext(name, webviewsMapping);\n this.curContext = name;\n};\n\n/**\n * @typedef {Object} WebviewsMapping\n * @property {string} proc The name of the Devtools Unix socket\n * @property {string} webview The web view alias. Looks like `WEBVIEW_`\n * prefix plus PID or package name\n * @property {?Object} info Webview information as it is retrieved by\n * /json/version CDP endpoint\n * @property {?Array<Object>} pages Webview pages list as it is retrieved by\n * /json/list CDP endpoint\n * @propery {?string} webviewName An actual webview name for switching context.\n * This value becomes null when failing to find a PID for a webview.\n *\n * The following json demonstrates the example of WebviewsMapping object.\n * Note that `description` in `page` can be an empty string most likely when it comes to Mobile Chrome)\n * {\n * \"proc\": \"@webview_devtools_remote_22138\",\n * \"webview\": \"WEBVIEW_22138\",\n * \"info\": {\n * \"Android-Package\": \"io.appium.settings\",\n * \"Browser\": \"Chrome/74.0.3729.185\",\n * \"Protocol-Version\": \"1.3\",\n * \"User-Agent\": \"Mozilla/5.0 (Linux; Android 10; Android SDK built for x86 Build/QSR1.190920.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.185 Mobile Safari/537.36\",\n * \"V8-Version\": \"7.4.288.28\",\n * \"WebKit-Version\": \"537.36 (@22955682f94ce09336197bfb8dffea991fa32f0d)\",\n * \"webSocketDebuggerUrl\": \"ws://127.0.0.1:10900/devtools/browser\"\n * },\n * \"pages\": [\n * {\n * \"description\": \"{\\\"attached\\\":true,\\\"empty\\\":false,\\\"height\\\":1458,\\\"screenX\\\":0,\\\"screenY\\\":336,\\\"visible\\\":true,\\\"width\\\":1080}\",\n * \"devtoolsFrontendUrl\": \"http://chrome-devtools-frontend.appspot.com/serve_rev/@22955682f94ce09336197bfb8dffea991fa32f0d/inspector.html?ws=127.0.0.1:10900/devtools/page/27325CC50B600D31B233F45E09487B1F\",\n * \"id\": \"27325CC50B600D31B233F45E09487B1F\",\n * \"title\": \"Releases · appium/appium · GitHub\",\n * \"type\": \"page\",\n * \"url\": \"https://github.com/appium/appium/releases\",\n * \"webSocketDebuggerUrl\": \"ws://127.0.0.1:10900/devtools/page/27325CC50B600D31B233F45E09487B1F\"\n * }\n * ],\n * \"webviewName\": \"WEBVIEW_com.io.appium.setting\"\n * }\n */\n\n/**\n * Returns a webviewsMapping based on CDP endpoints\n *\n * @return {Array<WebviewsMapping>} webviewsMapping\n */\ncommands.mobileGetContexts = async function mobileGetContexts () {\n const opts = {\n androidDeviceSocket: this.opts.androidDeviceSocket,\n ensureWebviewsHavePages: true,\n webviewDevtoolsPort: this.opts.webviewDevtoolsPort,\n enableWebviewDetailsCollection: true\n };\n return await webviewHelpers.getWebViewsMapping(this.adb, opts);\n};\n\nhelpers.assignContexts = function assignContexts (webviewsMapping) {\n const opts = Object.assign({isChromeSession: this.isChromeSession}, this.opts);\n const webviews = webviewHelpers.parseWebviewNames(webviewsMapping, opts);\n this.contexts = [NATIVE_WIN, ...webviews];\n this.log.debug(`Available contexts: ${JSON.stringify(this.contexts)}`);\n return this.contexts;\n};\n\nhelpers.switchContext = async function switchContext (name, webviewsMapping) {\n // We have some options when it comes to webviews. If we want a\n // Chromedriver webview, we can only control one at a time.\n if (this.isChromedriverContext(name)) {\n // start proxying commands directly to chromedriver\n await this.startChromedriverProxy(name, webviewsMapping);\n } else if (this.isChromedriverContext(this.curContext)) {\n // if we're moving to a non-chromedriver webview, and our current context\n // _is_ a chromedriver webview, if caps recreateChromeDriverSessions is set\n // to true then kill chromedriver session using stopChromedriverProxies or\n // else simply suspend proxying to the latter\n if (this.opts.recreateChromeDriverSessions) {\n this.log.debug('recreateChromeDriverSessions set to true; killing existing chromedrivers');\n await this.stopChromedriverProxies();\n } else {\n await this.suspendChromedriverProxy();\n }\n } else {\n throw new Error(`Didn't know how to handle switching to context '${name}'`);\n }\n};\n\n\n/* ---------------------------------\n * On-object context-related helpers\n * --------------------------------- */\n\n// The reason this is a function and not just a constant is that both android-\n// driver and selendroid-driver use this logic, and each one returns\n// a different default context name\nhelpers.defaultContextName = function defaultContextName () {\n return NATIVE_WIN;\n};\n\nhelpers.defaultWebviewName = function defaultWebviewName () {\n return WEBVIEW_BASE + this.opts.appPackage;\n};\n\nhelpers.isWebContext = function isWebContext () {\n return this.curContext !== null && this.curContext !== NATIVE_WIN;\n};\n\n// Turn on proxying to an existing Chromedriver session or a new one\nhelpers.startChromedriverProxy = async function startChromedriverProxy (context, webviewsMapping) {\n this.log.debug(`Connecting to chrome-backed webview context '${context}'`);\n\n let cd;\n if (this.sessionChromedrivers[context]) {\n // in the case where we've already set up a chromedriver for a context,\n // we want to reconnect to it, not create a whole new one\n this.log.debug(`Found existing Chromedriver for context '${context}'. Using it.`);\n cd = this.sessionChromedrivers[context];\n await setupExistingChromedriver(this.log, cd);\n } else {\n let opts = _.cloneDeep(this.opts);\n opts.chromeUseRunningApp = true;\n\n // if requested, tell chromedriver to attach to the android package we have\n // associated with the context name, rather than the package of the AUT.\n // And turn this on by default for chrome--if chrome pops up with a webview\n // and someone wants to switch to it, we should let chromedriver connect to\n // chrome rather than staying stuck on the AUT\n if (opts.extractChromeAndroidPackageFromContextName || context === `${WEBVIEW_BASE}chrome`) {\n let androidPackage = context.match(`${WEBVIEW_BASE}(.+)`);\n if (androidPackage && androidPackage.length > 0) {\n opts.chromeAndroidPackage = androidPackage[1];\n }\n if (!opts.extractChromeAndroidPackageFromContextName) {\n if (_.has(this.opts, 'enableWebviewDetailsCollection') && !this.opts.enableWebviewDetailsCollection) {\n // When enableWebviewDetailsCollection capability is explicitly disabled, try to identify\n // chromeAndroidPackage based on contexts, known chrome variant packages and queryAppState result\n // since webviewsMapping does not have info object\n const contexts = webviewsMapping.map((wm) => wm.webviewName);\n for (const knownPackage of KNOWN_CHROME_PACKAGE_NAMES) {\n if (_.includes(contexts, `${WEBVIEW_BASE}${knownPackage}`)) {\n continue;\n }\n const appState = await this.queryAppState(knownPackage);\n if (_.includes([APP_STATE.RUNNING_IN_BACKGROUND, APP_STATE.RUNNING_IN_FOREGROUND], appState)) {\n opts.chromeAndroidPackage = knownPackage;\n this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` +\n `for context '${context}' by querying states of Chrome app packages`);\n break;\n }\n }\n } else {\n for (const wm of webviewsMapping) {\n if (wm.webviewName === context && _.has(wm?.info, 'Android-Package')) {\n opts.chromeAndroidPackage = wm.info['Android-Package'];\n this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` +\n `for context '${context}' by CDP`);\n break;\n }\n }\n }\n }\n }\n\n cd = await this.setupNewChromedriver(opts, this.adb.curDeviceId, this.adb, context);\n // bind our stop/exit handler, passing in context so we know which\n // one stopped unexpectedly\n cd.on(Chromedriver.EVENT_CHANGED, (msg) => {\n if (msg.state === Chromedriver.STATE_STOPPED) {\n this.onChromedriverStop(context);\n }\n });\n // save the chromedriver object under the context\n this.sessionChromedrivers[context] = cd;\n }\n // hook up the local variables so we can proxy this biz\n this.chromedriver = cd;\n this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);\n this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);\n this.jwpProxyActive = true;\n};\n\n// Stop proxying to any Chromedriver\nhelpers.suspendChromedriverProxy = function suspendChromedriverProxy () {\n this.chromedriver = null;\n this.proxyReqRes = null;\n this.proxyCommand = null;\n this.jwpProxyActive = false;\n};\n\n// Handle an out-of-band Chromedriver stop event\nhelpers.onChromedriverStop = async function onChromedriverStop (context) {\n this.log.warn(`Chromedriver for context ${context} stopped unexpectedly`);\n if (context === this.curContext) {\n // we exited unexpectedly while automating the current context and so want\n // to shut down the session and respond with an error\n let err = new Error('Chromedriver quit unexpectedly during session');\n await this.startUnexpectedShutdown(err);\n } else {\n // if a Chromedriver in the non-active context barfs, we don't really\n // care, we'll just make a new one next time we need the context.\n this.log.warn(\"Chromedriver quit unexpectedly, but it wasn't the active \" +\n 'context, ignoring');\n delete this.sessionChromedrivers[context];\n }\n};\n\n// Intentionally stop all the chromedrivers currently active, and ignore\n// their exit events\nhelpers.stopChromedriverProxies = async function stopChromedriverProxies () {\n this.suspendChromedriverProxy(); // make sure we turn off the proxy flag\n for (let context of _.keys(this.sessionChromedrivers)) {\n let cd = this.sessionChromedrivers[context];\n this.log.debug(`Stopping chromedriver for context ${context}`);\n // stop listening for the stopped state event\n cd.removeAllListeners(Chromedriver.EVENT_CHANGED);\n try {\n await cd.stop();\n } catch (err) {\n this.log.warn(`Error stopping Chromedriver: ${err.message}`);\n }\n delete this.sessionChromedrivers[context];\n }\n};\n\nhelpers.isChromedriverContext = function isChromedriverContext (viewName) {\n return _.includes(viewName, WEBVIEW_WIN) || viewName === CHROMIUM_WIN;\n};\n\nhelpers.shouldDismissChromeWelcome = function shouldDismissChromeWelcome () {\n return !!this.opts.chromeOptions &&\n _.isArray(this.opts.chromeOptions.args) &&\n this.opts.chromeOptions.args.includes('--no-first-run');\n};\n\nhelpers.dismissChromeWelcome = async function dismissChromeWelcome () {\n this.log.info('Trying to dismiss Chrome welcome');\n let activity = await this.getCurrentActivity();\n if (activity !== 'org.chromium.chrome.browser.firstrun.FirstRunActivity') {\n this.log.info('Chrome welcome dialog never showed up! Continuing');\n return;\n }\n let el = await this.findElOrEls('id', 'com.android.chrome:id/terms_accept', false);\n await this.click(el.ELEMENT);\n try {\n let el = await this.findElOrEls('id', 'com.android.chrome:id/negative_button', false);\n await this.click(el.ELEMENT);\n } catch (e) {\n // DO NOTHING, THIS DEVICE DIDNT LAUNCH THE SIGNIN DIALOG\n // IT MUST BE A NON GMS DEVICE\n this.log.warn(`This device did not show Chrome SignIn dialog, ${e.message}`);\n }\n};\n\nhelpers.startChromeSession = async function startChromeSession () {\n this.log.info('Starting a chrome-based browser session');\n let opts = _.cloneDeep(this.opts);\n\n const knownPackages = [\n 'org.chromium.chrome.shell',\n 'com.android.chrome',\n 'com.chrome.beta',\n 'org.chromium.chrome',\n 'org.chromium.webview_shell',\n ];\n\n if (_.includes(knownPackages, this.opts.appPackage)) {\n opts.chromeBundleId = this.opts.appPackage;\n } else {\n opts.chromeAndroidActivity = this.opts.appActivity;\n }\n this.chromedriver = await this.setupNewChromedriver(opts, this.adb.curDeviceId, this.adb);\n this.chromedriver.on(Chromedriver.EVENT_CHANGED, (msg) => {\n if (msg.state === Chromedriver.STATE_STOPPED) {\n this.onChromedriverStop(CHROMIUM_WIN);\n }\n });\n\n // Now that we have a Chrome session, we ensure that the context is\n // appropriately set and that this chromedriver is added to the list\n // of session chromedrivers so we can switch back and forth\n this.curContext = CHROMIUM_WIN;\n this.sessionChromedrivers[CHROMIUM_WIN] = this.chromedriver;\n this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);\n this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);\n this.jwpProxyActive = true;\n\n if (this.shouldDismissChromeWelcome()) {\n // dismiss Chrome welcome dialog\n await this.dismissChromeWelcome();\n }\n};\n\n\n/* --------------------------\n * Internal library functions\n * -------------------------- */\n\nasync function setupExistingChromedriver (log, chromedriver) {\n // check the status by sending a simple window-based command to ChromeDriver\n // if there is an error, we want to recreate the ChromeDriver session\n if (!await chromedriver.hasWorkingWebview()) {\n log.debug('ChromeDriver is not associated with a window. ' +\n 'Re-initializing the session.');\n await chromedriver.restart();\n }\n return chromedriver;\n}\n\n/**\n * Find a free port to have Chromedriver listen on.\n *\n * @param {array} portSpec - Array which is a list of ports. A list item may\n * also itself be an array of length 2 specifying a start and end port of\n * a range. Some valid port specs:\n * - [8000, 8001, 8002]\n * - [[8000, 8005]]\n * - [8000, [9000, 9100]]\n * @param {Object?} log Logger instance\n *\n * @return {number} A free port\n */\nasync function getChromedriverPort (portSpec, log = null) {\n const getPort = B.promisify(PortFinder.getPort, {context: PortFinder});\n\n // if the user didn't give us any specific information about chromedriver\n // port ranges, just find any free port\n if (!portSpec) {\n const port = await getPort();\n log?.debug(`A port was not given, using random free port: ${port}`);\n return port;\n }\n\n // otherwise find the free port based on a list or range provided by the user\n log?.debug(`Finding a free port for chromedriver using spec ${JSON.stringify(portSpec)}`);\n let foundPort = null;\n for (const potentialPort of portSpec) {\n let port, stopPort;\n if (_.isArray(potentialPort)) {\n ([port, stopPort] = potentialPort);\n } else {\n port = parseInt(potentialPort, 10); // ensure we have a number and not a string\n stopPort = port;\n }\n try {\n log?.debug(`Checking port range ${port}:${stopPort}`);\n foundPort = await getPort({port, stopPort});\n break;\n } catch (e) {\n log?.debug(`Nothing in port range ${port}:${stopPort} was available`);\n }\n }\n\n if (foundPort === null) {\n throw new Error(`Could not find a free port for chromedriver using ` +\n `chromedriverPorts spec ${JSON.stringify(portSpec)}`);\n }\n\n log?.debug(`Using free port ${foundPort} for chromedriver`);\n return foundPort;\n}\n\nhelpers.isChromedriverAutodownloadEnabled = function isChromedriverAutodownloadEnabled () {\n if (this.isFeatureEnabled(CHROMEDRIVER_AUTODOWNLOAD_FEATURE)) {\n return true;\n }\n this?.log?.debug(`Automated Chromedriver download is disabled. ` +\n `Use '${CHROMEDRIVER_AUTODOWNLOAD_FEATURE}' server feature to enable it`);\n return false;\n};\n\nhelpers.setupNewChromedriver = async function setupNewChromedriver (opts, curDeviceId, adb, context = null) {\n if (opts.chromeDriverPort) {\n this?.log?.warn(`The 'chromeDriverPort' capability is deprecated. Please use 'chromedriverPort' instead`);\n opts.chromedriverPort = opts.chromeDriverPort;\n }\n\n if (opts.chromedriverPort) {\n this?.log?.debug(`Using user-specified port ${opts.chromedriverPort} for chromedriver`);\n } else {\n // if a single port wasn't given, we'll look for a free one\n opts.chromedriverPort = await getChromedriverPort(opts.chromedriverPorts, this?.log);\n }\n\n const details = context ? webviewHelpers.getWebviewDetails(adb, context) : undefined;\n if (!_.isEmpty(details)) {\n this?.log?.debug('Passing web view details to the Chromedriver constructor: ' +\n JSON.stringify(details, null, 2));\n }\n\n const chromedriver = new Chromedriver({\n port: opts.chromedriverPort,\n executable: opts.chromedriverExecutable,\n adb,\n cmdArgs: opts.chromedriverArgs,\n verbose: !!opts.showChromedriverLog,\n executableDir: opts.chromedriverExecutableDir,\n mappingPath: opts.chromedriverChromeMappingFile,\n bundleId: opts.chromeBundleId,\n useSystemExecutable: opts.chromedriverUseSystemExecutable,\n disableBuildCheck: opts.chromedriverDisableBuildCheck,\n details,\n isAutodownloadEnabled: this?.isChromedriverAutodownloadEnabled?.()\n });\n\n // make sure there are chromeOptions\n opts.chromeOptions = opts.chromeOptions || {};\n // try out any prefixed chromeOptions,\n // and strip the prefix\n for (const opt of _.keys(opts)) {\n if (opt.endsWith(':chromeOptions')) {\n this?.log?.warn(`Merging '${opt}' into 'chromeOptions'. This may cause unexpected behavior`);\n _.merge(opts.chromeOptions, opts[opt]);\n }\n }\n\n const caps = webviewHelpers.createChromedriverCaps(opts, curDeviceId, details);\n this?.log?.debug(`Before starting chromedriver, androidPackage is '${caps.chromeOptions.androidPackage}'`);\n await chromedriver.start(caps);\n return chromedriver;\n};\nconst setupNewChromedriver = helpers.setupNewChromedriver;\n\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers, setupNewChromedriver };\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context.js","names":["CHROMEDRIVER_AUTODOWNLOAD_FEATURE","commands","helpers","extensions","getCurrentContext","curContext","defaultContextName","getContexts","webviewsMapping","webviewHelpers","getWebViewsMapping","adb","opts","assignContexts","setContext","name","util","hasValue","WEBVIEW_WIN","defaultWebviewName","contexts","_","includes","errors","NoSuchContextError","switchContext","mobileGetContexts","androidDeviceSocket","ensureWebviewsHavePages","webviewDevtoolsPort","enableWebviewDetailsCollection","Object","assign","isChromeSession","webviews","parseWebviewNames","NATIVE_WIN","log","debug","JSON","stringify","isChromedriverContext","startChromedriverProxy","recreateChromeDriverSessions","stopChromedriverProxies","suspendChromedriverProxy","Error","WEBVIEW_BASE","autoWebviewName","appPackage","isWebContext","context","cd","sessionChromedrivers","setupExistingChromedriver","cloneDeep","chromeUseRunningApp","extractChromeAndroidPackageFromContextName","androidPackage","match","length","chromeAndroidPackage","has","map","wm","webviewName","knownPackage","KNOWN_CHROME_PACKAGE_NAMES","appState","queryAppState","APP_STATE","RUNNING_IN_BACKGROUND","RUNNING_IN_FOREGROUND","info","setupNewChromedriver","curDeviceId","on","Chromedriver","EVENT_CHANGED","msg","state","STATE_STOPPED","onChromedriverStop","chromedriver","proxyReqRes","proxyReq","bind","proxyCommand","jwproxy","command","jwpProxyActive","warn","err","startUnexpectedShutdown","keys","removeAllListeners","stop","message","viewName","CHROMIUM_WIN","shouldDismissChromeWelcome","chromeOptions","isArray","args","dismissChromeWelcome","activity","getCurrentActivity","el","findElOrEls","click","ELEMENT","e","startChromeSession","knownPackages","chromeBundleId","chromeAndroidActivity","appActivity","hasWorkingWebview","restart","getChromedriverPort","portSpec","getPort","B","promisify","PortFinder","port","foundPort","potentialPort","stopPort","parseInt","isChromedriverAutodownloadEnabled","isFeatureEnabled","chromeDriverPort","chromedriverPort","chromedriverPorts","details","getWebviewDetails","undefined","isEmpty","executable","chromedriverExecutable","cmdArgs","chromedriverArgs","verbose","showChromedriverLog","executableDir","chromedriverExecutableDir","mappingPath","chromedriverChromeMappingFile","bundleId","useSystemExecutable","chromedriverUseSystemExecutable","disableBuildCheck","chromedriverDisableBuildCheck","isAutodownloadEnabled","opt","endsWith","merge","caps","createChromedriverCaps","start"],"sources":["../../../lib/commands/context.js"],"sourcesContent":["import _ from 'lodash';\nimport Chromedriver from 'appium-chromedriver';\nimport PortFinder from 'portfinder';\nimport B from 'bluebird';\nimport { util } from 'appium/support';\nimport { errors } from 'appium/driver';\nimport {\n default as webviewHelpers,\n NATIVE_WIN, WEBVIEW_BASE, WEBVIEW_WIN, CHROMIUM_WIN, KNOWN_CHROME_PACKAGE_NAMES\n} from '../webview-helpers';\nimport { APP_STATE } from '../android-helpers';\n\nconst CHROMEDRIVER_AUTODOWNLOAD_FEATURE = 'chromedriver_autodownload';\n\nlet commands = {}, helpers = {}, extensions = {};\n\n\n/* -------------------------------\n * Actual MJSONWP command handlers\n * ------------------------------- */\ncommands.getCurrentContext = async function getCurrentContext () { // eslint-disable-line require-await\n // if the current context is `null`, indicating no context\n // explicitly set, it is the default context\n return this.curContext || this.defaultContextName();\n};\n\ncommands.getContexts = async function getContexts () {\n const webviewsMapping = await webviewHelpers.getWebViewsMapping(this.adb, this.opts);\n return this.assignContexts(webviewsMapping);\n};\n\ncommands.setContext = async function setContext (name) {\n if (!util.hasValue(name)) {\n name = this.defaultContextName();\n } else if (name === WEBVIEW_WIN) {\n // handle setContext \"WEBVIEW\"\n name = this.defaultWebviewName();\n }\n // if we're already in the context we want, do nothing\n if (name === this.curContext) {\n return;\n }\n\n const webviewsMapping = await webviewHelpers.getWebViewsMapping(this.adb, this.opts);\n const contexts = this.assignContexts(webviewsMapping);\n // if the context we want doesn't exist, fail\n if (!_.includes(contexts, name)) {\n throw new errors.NoSuchContextError();\n }\n\n await this.switchContext(name, webviewsMapping);\n this.curContext = name;\n};\n\n/**\n * @typedef {Object} WebviewsMapping\n * @property {string} proc The name of the Devtools Unix socket\n * @property {string} webview The web view alias. Looks like `WEBVIEW_`\n * prefix plus PID or package name\n * @property {?Object} info Webview information as it is retrieved by\n * /json/version CDP endpoint\n * @property {?Array<Object>} pages Webview pages list as it is retrieved by\n * /json/list CDP endpoint\n * @propery {?string} webviewName An actual webview name for switching context.\n * This value becomes null when failing to find a PID for a webview.\n *\n * The following json demonstrates the example of WebviewsMapping object.\n * Note that `description` in `page` can be an empty string most likely when it comes to Mobile Chrome)\n * {\n * \"proc\": \"@webview_devtools_remote_22138\",\n * \"webview\": \"WEBVIEW_22138\",\n * \"info\": {\n * \"Android-Package\": \"io.appium.settings\",\n * \"Browser\": \"Chrome/74.0.3729.185\",\n * \"Protocol-Version\": \"1.3\",\n * \"User-Agent\": \"Mozilla/5.0 (Linux; Android 10; Android SDK built for x86 Build/QSR1.190920.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.185 Mobile Safari/537.36\",\n * \"V8-Version\": \"7.4.288.28\",\n * \"WebKit-Version\": \"537.36 (@22955682f94ce09336197bfb8dffea991fa32f0d)\",\n * \"webSocketDebuggerUrl\": \"ws://127.0.0.1:10900/devtools/browser\"\n * },\n * \"pages\": [\n * {\n * \"description\": \"{\\\"attached\\\":true,\\\"empty\\\":false,\\\"height\\\":1458,\\\"screenX\\\":0,\\\"screenY\\\":336,\\\"visible\\\":true,\\\"width\\\":1080}\",\n * \"devtoolsFrontendUrl\": \"http://chrome-devtools-frontend.appspot.com/serve_rev/@22955682f94ce09336197bfb8dffea991fa32f0d/inspector.html?ws=127.0.0.1:10900/devtools/page/27325CC50B600D31B233F45E09487B1F\",\n * \"id\": \"27325CC50B600D31B233F45E09487B1F\",\n * \"title\": \"Releases · appium/appium · GitHub\",\n * \"type\": \"page\",\n * \"url\": \"https://github.com/appium/appium/releases\",\n * \"webSocketDebuggerUrl\": \"ws://127.0.0.1:10900/devtools/page/27325CC50B600D31B233F45E09487B1F\"\n * }\n * ],\n * \"webviewName\": \"WEBVIEW_com.io.appium.setting\"\n * }\n */\n\n/**\n * Returns a webviewsMapping based on CDP endpoints\n *\n * @return {Array<WebviewsMapping>} webviewsMapping\n */\ncommands.mobileGetContexts = async function mobileGetContexts () {\n const opts = {\n androidDeviceSocket: this.opts.androidDeviceSocket,\n ensureWebviewsHavePages: true,\n webviewDevtoolsPort: this.opts.webviewDevtoolsPort,\n enableWebviewDetailsCollection: true\n };\n return await webviewHelpers.getWebViewsMapping(this.adb, opts);\n};\n\nhelpers.assignContexts = function assignContexts (webviewsMapping) {\n const opts = Object.assign({isChromeSession: this.isChromeSession}, this.opts);\n const webviews = webviewHelpers.parseWebviewNames(webviewsMapping, opts);\n this.contexts = [NATIVE_WIN, ...webviews];\n this.log.debug(`Available contexts: ${JSON.stringify(this.contexts)}`);\n return this.contexts;\n};\n\nhelpers.switchContext = async function switchContext (name, webviewsMapping) {\n // We have some options when it comes to webviews. If we want a\n // Chromedriver webview, we can only control one at a time.\n if (this.isChromedriverContext(name)) {\n // start proxying commands directly to chromedriver\n await this.startChromedriverProxy(name, webviewsMapping);\n } else if (this.isChromedriverContext(this.curContext)) {\n // if we're moving to a non-chromedriver webview, and our current context\n // _is_ a chromedriver webview, if caps recreateChromeDriverSessions is set\n // to true then kill chromedriver session using stopChromedriverProxies or\n // else simply suspend proxying to the latter\n if (this.opts.recreateChromeDriverSessions) {\n this.log.debug('recreateChromeDriverSessions set to true; killing existing chromedrivers');\n await this.stopChromedriverProxies();\n } else {\n await this.suspendChromedriverProxy();\n }\n } else {\n throw new Error(`Didn't know how to handle switching to context '${name}'`);\n }\n};\n\n\n/* ---------------------------------\n * On-object context-related helpers\n * --------------------------------- */\n\n// The reason this is a function and not just a constant is that both android-\n// driver and selendroid-driver use this logic, and each one returns\n// a different default context name\nhelpers.defaultContextName = function defaultContextName () {\n return NATIVE_WIN;\n};\n\nhelpers.defaultWebviewName = function defaultWebviewName () {\n return WEBVIEW_BASE + (this.opts.autoWebviewName || this.opts.appPackage);\n};\n\nhelpers.isWebContext = function isWebContext () {\n return this.curContext !== null && this.curContext !== NATIVE_WIN;\n};\n\n// Turn on proxying to an existing Chromedriver session or a new one\nhelpers.startChromedriverProxy = async function startChromedriverProxy (context, webviewsMapping) {\n this.log.debug(`Connecting to chrome-backed webview context '${context}'`);\n\n let cd;\n if (this.sessionChromedrivers[context]) {\n // in the case where we've already set up a chromedriver for a context,\n // we want to reconnect to it, not create a whole new one\n this.log.debug(`Found existing Chromedriver for context '${context}'. Using it.`);\n cd = this.sessionChromedrivers[context];\n await setupExistingChromedriver(this.log, cd);\n } else {\n let opts = _.cloneDeep(this.opts);\n opts.chromeUseRunningApp = true;\n\n // if requested, tell chromedriver to attach to the android package we have\n // associated with the context name, rather than the package of the AUT.\n // And turn this on by default for chrome--if chrome pops up with a webview\n // and someone wants to switch to it, we should let chromedriver connect to\n // chrome rather than staying stuck on the AUT\n if (opts.extractChromeAndroidPackageFromContextName || context === `${WEBVIEW_BASE}chrome`) {\n let androidPackage = context.match(`${WEBVIEW_BASE}(.+)`);\n if (androidPackage && androidPackage.length > 0) {\n opts.chromeAndroidPackage = androidPackage[1];\n }\n if (!opts.extractChromeAndroidPackageFromContextName) {\n if (_.has(this.opts, 'enableWebviewDetailsCollection') && !this.opts.enableWebviewDetailsCollection) {\n // When enableWebviewDetailsCollection capability is explicitly disabled, try to identify\n // chromeAndroidPackage based on contexts, known chrome variant packages and queryAppState result\n // since webviewsMapping does not have info object\n const contexts = webviewsMapping.map((wm) => wm.webviewName);\n for (const knownPackage of KNOWN_CHROME_PACKAGE_NAMES) {\n if (_.includes(contexts, `${WEBVIEW_BASE}${knownPackage}`)) {\n continue;\n }\n const appState = await this.queryAppState(knownPackage);\n if (_.includes([APP_STATE.RUNNING_IN_BACKGROUND, APP_STATE.RUNNING_IN_FOREGROUND], appState)) {\n opts.chromeAndroidPackage = knownPackage;\n this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` +\n `for context '${context}' by querying states of Chrome app packages`);\n break;\n }\n }\n } else {\n for (const wm of webviewsMapping) {\n if (wm.webviewName === context && _.has(wm?.info, 'Android-Package')) {\n opts.chromeAndroidPackage = wm.info['Android-Package'];\n this.log.debug(`Identified chromeAndroidPackage as '${opts.chromeAndroidPackage}' ` +\n `for context '${context}' by CDP`);\n break;\n }\n }\n }\n }\n }\n\n cd = await this.setupNewChromedriver(opts, this.adb.curDeviceId, this.adb, context);\n // bind our stop/exit handler, passing in context so we know which\n // one stopped unexpectedly\n cd.on(Chromedriver.EVENT_CHANGED, (msg) => {\n if (msg.state === Chromedriver.STATE_STOPPED) {\n this.onChromedriverStop(context);\n }\n });\n // save the chromedriver object under the context\n this.sessionChromedrivers[context] = cd;\n }\n // hook up the local variables so we can proxy this biz\n this.chromedriver = cd;\n this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);\n this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);\n this.jwpProxyActive = true;\n};\n\n// Stop proxying to any Chromedriver\nhelpers.suspendChromedriverProxy = function suspendChromedriverProxy () {\n this.chromedriver = null;\n this.proxyReqRes = null;\n this.proxyCommand = null;\n this.jwpProxyActive = false;\n};\n\n// Handle an out-of-band Chromedriver stop event\nhelpers.onChromedriverStop = async function onChromedriverStop (context) {\n this.log.warn(`Chromedriver for context ${context} stopped unexpectedly`);\n if (context === this.curContext) {\n // we exited unexpectedly while automating the current context and so want\n // to shut down the session and respond with an error\n let err = new Error('Chromedriver quit unexpectedly during session');\n await this.startUnexpectedShutdown(err);\n } else {\n // if a Chromedriver in the non-active context barfs, we don't really\n // care, we'll just make a new one next time we need the context.\n this.log.warn(\"Chromedriver quit unexpectedly, but it wasn't the active \" +\n 'context, ignoring');\n delete this.sessionChromedrivers[context];\n }\n};\n\n// Intentionally stop all the chromedrivers currently active, and ignore\n// their exit events\nhelpers.stopChromedriverProxies = async function stopChromedriverProxies () {\n this.suspendChromedriverProxy(); // make sure we turn off the proxy flag\n for (let context of _.keys(this.sessionChromedrivers)) {\n let cd = this.sessionChromedrivers[context];\n this.log.debug(`Stopping chromedriver for context ${context}`);\n // stop listening for the stopped state event\n cd.removeAllListeners(Chromedriver.EVENT_CHANGED);\n try {\n await cd.stop();\n } catch (err) {\n this.log.warn(`Error stopping Chromedriver: ${err.message}`);\n }\n delete this.sessionChromedrivers[context];\n }\n};\n\nhelpers.isChromedriverContext = function isChromedriverContext (viewName) {\n return _.includes(viewName, WEBVIEW_WIN) || viewName === CHROMIUM_WIN;\n};\n\nhelpers.shouldDismissChromeWelcome = function shouldDismissChromeWelcome () {\n return !!this.opts.chromeOptions &&\n _.isArray(this.opts.chromeOptions.args) &&\n this.opts.chromeOptions.args.includes('--no-first-run');\n};\n\nhelpers.dismissChromeWelcome = async function dismissChromeWelcome () {\n this.log.info('Trying to dismiss Chrome welcome');\n let activity = await this.getCurrentActivity();\n if (activity !== 'org.chromium.chrome.browser.firstrun.FirstRunActivity') {\n this.log.info('Chrome welcome dialog never showed up! Continuing');\n return;\n }\n let el = await this.findElOrEls('id', 'com.android.chrome:id/terms_accept', false);\n await this.click(el.ELEMENT);\n try {\n let el = await this.findElOrEls('id', 'com.android.chrome:id/negative_button', false);\n await this.click(el.ELEMENT);\n } catch (e) {\n // DO NOTHING, THIS DEVICE DIDNT LAUNCH THE SIGNIN DIALOG\n // IT MUST BE A NON GMS DEVICE\n this.log.warn(`This device did not show Chrome SignIn dialog, ${e.message}`);\n }\n};\n\nhelpers.startChromeSession = async function startChromeSession () {\n this.log.info('Starting a chrome-based browser session');\n let opts = _.cloneDeep(this.opts);\n\n const knownPackages = [\n 'org.chromium.chrome.shell',\n 'com.android.chrome',\n 'com.chrome.beta',\n 'org.chromium.chrome',\n 'org.chromium.webview_shell',\n ];\n\n if (_.includes(knownPackages, this.opts.appPackage)) {\n opts.chromeBundleId = this.opts.appPackage;\n } else {\n opts.chromeAndroidActivity = this.opts.appActivity;\n }\n this.chromedriver = await this.setupNewChromedriver(opts, this.adb.curDeviceId, this.adb);\n this.chromedriver.on(Chromedriver.EVENT_CHANGED, (msg) => {\n if (msg.state === Chromedriver.STATE_STOPPED) {\n this.onChromedriverStop(CHROMIUM_WIN);\n }\n });\n\n // Now that we have a Chrome session, we ensure that the context is\n // appropriately set and that this chromedriver is added to the list\n // of session chromedrivers so we can switch back and forth\n this.curContext = CHROMIUM_WIN;\n this.sessionChromedrivers[CHROMIUM_WIN] = this.chromedriver;\n this.proxyReqRes = this.chromedriver.proxyReq.bind(this.chromedriver);\n this.proxyCommand = this.chromedriver.jwproxy.command.bind(this.chromedriver.jwproxy);\n this.jwpProxyActive = true;\n\n if (this.shouldDismissChromeWelcome()) {\n // dismiss Chrome welcome dialog\n await this.dismissChromeWelcome();\n }\n};\n\n\n/* --------------------------\n * Internal library functions\n * -------------------------- */\n\nasync function setupExistingChromedriver (log, chromedriver) {\n // check the status by sending a simple window-based command to ChromeDriver\n // if there is an error, we want to recreate the ChromeDriver session\n if (!await chromedriver.hasWorkingWebview()) {\n log.debug('ChromeDriver is not associated with a window. ' +\n 'Re-initializing the session.');\n await chromedriver.restart();\n }\n return chromedriver;\n}\n\n/**\n * Find a free port to have Chromedriver listen on.\n *\n * @param {array} portSpec - Array which is a list of ports. A list item may\n * also itself be an array of length 2 specifying a start and end port of\n * a range. Some valid port specs:\n * - [8000, 8001, 8002]\n * - [[8000, 8005]]\n * - [8000, [9000, 9100]]\n * @param {Object?} log Logger instance\n *\n * @return {number} A free port\n */\nasync function getChromedriverPort (portSpec, log = null) {\n const getPort = B.promisify(PortFinder.getPort, {context: PortFinder});\n\n // if the user didn't give us any specific information about chromedriver\n // port ranges, just find any free port\n if (!portSpec) {\n const port = await getPort();\n log?.debug(`A port was not given, using random free port: ${port}`);\n return port;\n }\n\n // otherwise find the free port based on a list or range provided by the user\n log?.debug(`Finding a free port for chromedriver using spec ${JSON.stringify(portSpec)}`);\n let foundPort = null;\n for (const potentialPort of portSpec) {\n let port, stopPort;\n if (_.isArray(potentialPort)) {\n ([port, stopPort] = potentialPort);\n } else {\n port = parseInt(potentialPort, 10); // ensure we have a number and not a string\n stopPort = port;\n }\n try {\n log?.debug(`Checking port range ${port}:${stopPort}`);\n foundPort = await getPort({port, stopPort});\n break;\n } catch (e) {\n log?.debug(`Nothing in port range ${port}:${stopPort} was available`);\n }\n }\n\n if (foundPort === null) {\n throw new Error(`Could not find a free port for chromedriver using ` +\n `chromedriverPorts spec ${JSON.stringify(portSpec)}`);\n }\n\n log?.debug(`Using free port ${foundPort} for chromedriver`);\n return foundPort;\n}\n\nhelpers.isChromedriverAutodownloadEnabled = function isChromedriverAutodownloadEnabled () {\n if (this.isFeatureEnabled(CHROMEDRIVER_AUTODOWNLOAD_FEATURE)) {\n return true;\n }\n this?.log?.debug(`Automated Chromedriver download is disabled. ` +\n `Use '${CHROMEDRIVER_AUTODOWNLOAD_FEATURE}' server feature to enable it`);\n return false;\n};\n\nhelpers.setupNewChromedriver = async function setupNewChromedriver (opts, curDeviceId, adb, context = null) {\n if (opts.chromeDriverPort) {\n this?.log?.warn(`The 'chromeDriverPort' capability is deprecated. Please use 'chromedriverPort' instead`);\n opts.chromedriverPort = opts.chromeDriverPort;\n }\n\n if (opts.chromedriverPort) {\n this?.log?.debug(`Using user-specified port ${opts.chromedriverPort} for chromedriver`);\n } else {\n // if a single port wasn't given, we'll look for a free one\n opts.chromedriverPort = await getChromedriverPort(opts.chromedriverPorts, this?.log);\n }\n\n const details = context ? webviewHelpers.getWebviewDetails(adb, context) : undefined;\n if (!_.isEmpty(details)) {\n this?.log?.debug('Passing web view details to the Chromedriver constructor: ' +\n JSON.stringify(details, null, 2));\n }\n\n const chromedriver = new Chromedriver({\n port: opts.chromedriverPort,\n executable: opts.chromedriverExecutable,\n adb,\n cmdArgs: opts.chromedriverArgs,\n verbose: !!opts.showChromedriverLog,\n executableDir: opts.chromedriverExecutableDir,\n mappingPath: opts.chromedriverChromeMappingFile,\n bundleId: opts.chromeBundleId,\n useSystemExecutable: opts.chromedriverUseSystemExecutable,\n disableBuildCheck: opts.chromedriverDisableBuildCheck,\n details,\n isAutodownloadEnabled: this?.isChromedriverAutodownloadEnabled?.()\n });\n\n // make sure there are chromeOptions\n opts.chromeOptions = opts.chromeOptions || {};\n // try out any prefixed chromeOptions,\n // and strip the prefix\n for (const opt of _.keys(opts)) {\n if (opt.endsWith(':chromeOptions')) {\n this?.log?.warn(`Merging '${opt}' into 'chromeOptions'. This may cause unexpected behavior`);\n _.merge(opts.chromeOptions, opts[opt]);\n }\n }\n\n const caps = webviewHelpers.createChromedriverCaps(opts, curDeviceId, details);\n this?.log?.debug(`Before starting chromedriver, androidPackage is '${caps.chromeOptions.androidPackage}'`);\n await chromedriver.start(caps);\n return chromedriver;\n};\nconst setupNewChromedriver = helpers.setupNewChromedriver;\n\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers, setupNewChromedriver };\nexport default extensions;\n"],"mappings":"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"}
|
|
@@ -124,6 +124,9 @@ let commonCapConstraints = {
|
|
|
124
124
|
autoWebviewTimeout: {
|
|
125
125
|
isNumber: true
|
|
126
126
|
},
|
|
127
|
+
autoWebviewName: {
|
|
128
|
+
isString: true
|
|
129
|
+
},
|
|
127
130
|
intentAction: {
|
|
128
131
|
isString: true
|
|
129
132
|
},
|
|
@@ -295,4 +298,4 @@ let desiredCapConstraints = {};
|
|
|
295
298
|
Object.assign(desiredCapConstraints, commonCapConstraints, uiautomatorCapConstraints);
|
|
296
299
|
var _default = desiredCapConstraints;
|
|
297
300
|
exports.default = _default;
|
|
298
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tb25DYXBDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsImlzU3RyaW5nIiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwicHJlc2VuY2UiLCJhcHAiLCJhcHBBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXREdXJhdGlvbiIsImlzTnVtYmVyIiwiZGV2aWNlUmVhZHlUaW1lb3V0IiwiYW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZERldmljZVJlYWR5VGltZW91dCIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhZGJQb3J0IiwicmVtb3RlQWRiSG9zdCIsImFkYkV4ZWNUaW1lb3V0IiwiYXZkIiwiYXZkTGF1bmNoVGltZW91dCIsImF2ZFJlYWR5VGltZW91dCIsImF2ZEFyZ3MiLCJhdmRFbnYiLCJpc09iamVjdCIsInVzZUtleXN0b3JlIiwiaXNCb29sZWFuIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiaXNBcnJheSIsImNocm9tZWRyaXZlckFyZ3MiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsImNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlIiwiY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiY2hyb21lTG9nZ2luZ1ByZWZzIiwiYXV0b1dlYnZpZXdUaW1lb3V0IiwiaW50ZW50QWN0aW9uIiwiaW50ZW50Q2F0ZWdvcnkiLCJpbnRlbnRGbGFncyIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwiZG9udFN0b3BBcHBPblJlc2V0IiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsIm5vU2lnbiIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJhdXRvTGF1bmNoIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImFuZHJvaWRTY3JlZW5zaG90UGF0aCIsImFuZHJvaWRJbnN0YWxsUGF0aCIsImNsZWFyU3lzdGVtRmlsZXMiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsInNoYXJlZFByZWZlcmVuY2VzIiwibmV0d29ya1NwZWVkIiwiZ3BzRW5hYmxlZCIsImlzSGVhZGxlc3MiLCJzaG93Q2hyb21lZHJpdmVyTG9nIiwic2tpcFVubG9jayIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJ1bmxvY2tUeXBlIiwidW5sb2NrS2V5IiwidW5sb2NrU3RyYXRlZ3kiLCJvdGhlckFwcHMiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJwYWdlTG9hZFN0cmF0ZWd5IiwibG9jYWxlU2NyaXB0Iiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsInNraXBMb2djYXRDYXB0dXJlIiwiY2hyb21lT3B0aW9ucyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsInVzZXJQcm9maWxlIiwiYnJvd3Nlck5hbWUiLCJlbmZvcmNlQXBwSW5zdGFsbCIsInN1cHByZXNzS2lsbFNlcnZlciIsImFsbG93T2ZmbGluZURldmljZXMiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwibW9ja0xvY2F0aW9uQXBwIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJhbGxvd0RlbGF5QWRiIiwidWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwiYWNjZXB0U3NsQ2VydHMiLCJhbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImJvb3RzdHJhcFBvcnQiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi9saWIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tb25DYXBDb25zdHJhaW50cyA9IHtcbiAgcGxhdGZvcm1OYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ0FuZHJvaWQnXSxcbiAgICBwcmVzZW5jZTogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBBY3Rpdml0eToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFBhY2thZ2U6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0QWN0aXZpdHk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0UGFja2FnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFdhaXREdXJhdGlvbjoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGRldmljZVJlYWR5VGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWRDb3ZlcmFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWREZXZpY2VSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhbmRyb2lkRGV2aWNlU29ja2V0OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWRiUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlbW90ZUFkYkhvc3Q6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhZGJFeGVjVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGF2ZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGF2ZExhdW5jaFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRBcmdzOiB7XG4gICAgLy8gY291bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcbiAgfSxcbiAgYXZkRW52OiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgdXNlS2V5c3RvcmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXNzd29yZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGtleUFsaWFzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5UGFzc3dvcmQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIC8vIHRoaXMgb25lIGlzIGRlcHJlY2F0ZWRcbiAgY2hyb21lRHJpdmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIC8vIGR1cGxpY2F0ZSBvZiBhYm92ZSB3aXRoIGJldHRlciBzcGVsbGluZ1xuICBjaHJvbWVkcml2ZXJQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyUG9ydHM6IHtcbiAgICBpc0FycmF5OiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckFyZ3M6IHtcbiAgICBpc09iamVjdDogdHJ1ZSxcbiAgfSxcbiAgY2hyb21lZHJpdmVyRXhlY3V0YWJsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXI6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lTG9nZ2luZ1ByZWZzOiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgaW50ZW50QWN0aW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50Q2F0ZWdvcnk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBpbnRlbnRGbGFnczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZG9udFN0b3BBcHBPblJlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVuaWNvZGVLZXlib2FyZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZXNldEtleWJvYXJkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5vU2lnbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zOiB7XG4gICAgaXNCb29sZWFuOiBmYWxzZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5hdGl2ZVdlYlNjcmVlbnNob3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYW5kcm9pZFNjcmVlbnNob3RQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2xlYXJTeXN0ZW1GaWxlczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYXV0b0dyYW50UGVybWlzc2lvbnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hhcmVkUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBuZXR3b3JrU3BlZWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBncHNFbmFibGVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGlzSGVhZGxlc3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd0Nocm9tZWRyaXZlckxvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBza2lwVW5sb2NrOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQ6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrVHlwZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja0tleToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja1N0cmF0ZWd5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ2xvY2tzZXR0aW5ncycsICd1aWF1dG9tYXRvciddLFxuICB9LFxuICBvdGhlckFwcHM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1bmluc3RhbGxPdGhlclBhY2thZ2VzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYWxsb3dUZXN0UGFja2FnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgcGFnZUxvYWRTdHJhdGVneToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZVNjcmlwdDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZW1vdGVBcHBzQ2FjaGVMaW1pdDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJ1aWxkVG9vbHNWZXJzaW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2tpcExvZ2NhdENhcHR1cmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lT3B0aW9uczoge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH0sXG4gIGVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VyUHJvZmlsZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZW5mb3JjZUFwcEluc3RhbGw6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc3VwcHJlc3NLaWxsU2VydmVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFsbG93T2ZmbGluZURldmljZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3I6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtb2NrTG9jYXRpb25BcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGb3JtYXQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGaWx0ZXJTcGVjczoge1xuICAgIGlzQXJyYXk6IHRydWVcbiAgfSxcbiAgYWxsb3dEZWxheUFkYjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9XG59O1xuXG5sZXQgdWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyA9IHtcbiAgaWdub3JlVW5pbXBvcnRhbnRWaWV3czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFjY2VwdFNzbENlcnRzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWROYXR1cmFsT3JpZW50YXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBib290c3RyYXBQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbn07XG5cbmxldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7fTtcblxuT2JqZWN0LmFzc2lnbihkZXNpcmVkQ2FwQ29uc3RyYWludHMsIGNvbW1vbkNhcENvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuZXhwb3J0IHsgY29tbW9uQ2FwQ29uc3RyYWludHMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUlBLG9CQUFvQixHQUFHO0VBQ3pCQyxZQUFZLEVBQUU7SUFDWkMsUUFBUSxFQUFFLElBQUk7SUFDZEMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDckNDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsR0FBRyxFQUFFO0lBQ0hILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksV0FBVyxFQUFFO0lBQ1hKLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREssVUFBVSxFQUFFO0lBQ1ZMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sZUFBZSxFQUFFO0lBQ2ZOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sY0FBYyxFQUFFO0lBQ2RQLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFEsZUFBZSxFQUFFO0lBQ2ZDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsa0JBQWtCLEVBQUU7SUFDbEJELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREUsZUFBZSxFQUFFO0lBQ2ZYLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFkseUJBQXlCLEVBQUU7SUFDekJILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksbUJBQW1CLEVBQUU7SUFDbkJiLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGMscUJBQXFCLEVBQUU7SUFDckJMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sT0FBTyxFQUFFO0lBQ1BOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sYUFBYSxFQUFFO0lBQ2JoQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RpQixjQUFjLEVBQUU7SUFDZFIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEUyxHQUFHLEVBQUU7SUFDSGxCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG1CLGdCQUFnQixFQUFFO0lBQ2hCVixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RXLGVBQWUsRUFBRTtJQUNmWCxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RZLE9BQU8sRUFBRTtFQUVULENBQUM7RUFDREMsTUFBTSxFQUFFO0lBQ05DLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsV0FBVyxFQUFFO0lBQ1hDLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDREMsWUFBWSxFQUFFO0lBQ1oxQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QyQixnQkFBZ0IsRUFBRTtJQUNoQjNCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDRCLFFBQVEsRUFBRTtJQUNSNUIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNENkIsV0FBVyxFQUFFO0lBQ1g3QixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q4QixtQkFBbUIsRUFBRTtJQUNuQnJCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHNCLHVCQUF1QixFQUFFO0lBQ3ZCTixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RPLDhCQUE4QixFQUFFO0lBQzlCUCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBRURRLGdCQUFnQixFQUFFO0lBQ2hCeEIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUVEeUIsZ0JBQWdCLEVBQUU7SUFDaEJ6QixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QwQixpQkFBaUIsRUFBRTtJQUNqQkMsT0FBTyxFQUFFO0VBQ1gsQ0FBQztFQUNEQyxnQkFBZ0IsRUFBRTtJQUNoQmQsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEZSxzQkFBc0IsRUFBRTtJQUN0QnRDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHVDLHlCQUF5QixFQUFFO0lBQ3pCdkMsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEd0MsNkJBQTZCLEVBQUU7SUFDN0J4QyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R5QywrQkFBK0IsRUFBRTtJQUMvQmhCLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGlCLDZCQUE2QixFQUFFO0lBQzdCakIsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEa0Isa0JBQWtCLEVBQUU7SUFDbEJwQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RxQixrQkFBa0IsRUFBRTtJQUNsQm5DLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG9DLFlBQVksRUFBRTtJQUNaN0MsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEOEMsY0FBYyxFQUFFO0lBQ2Q5QyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QrQyxXQUFXLEVBQUU7SUFDWC9DLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGdELHVCQUF1QixFQUFFO0lBQ3ZCaEQsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEaUQsa0JBQWtCLEVBQUU7SUFDbEJ4QixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R5QixlQUFlLEVBQUU7SUFDZnpCLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDBCLGFBQWEsRUFBRTtJQUNiMUIsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEMkIsTUFBTSxFQUFFO0lBQ04zQixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0Q0Qiw0QkFBNEIsRUFBRTtJQUM1QjVCLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDZCLFVBQVUsRUFBRTtJQUNWN0IsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEOEIsbUJBQW1CLEVBQUU7SUFDbkI5QixTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QrQixxQkFBcUIsRUFBRTtJQUNyQnhELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHlELGtCQUFrQixFQUFFO0lBQ2xCekQsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEMEQsZ0JBQWdCLEVBQUU7SUFDaEJqQyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0RrQywwQ0FBMEMsRUFBRTtJQUMxQ2xDLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRG1DLG9CQUFvQixFQUFFO0lBQ3BCbkMsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEb0MsaUJBQWlCLEVBQUU7SUFDakJ0QyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R1QyxZQUFZLEVBQUU7SUFDWjlELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRCtELFVBQVUsRUFBRTtJQUNWdEMsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEdUMsVUFBVSxFQUFFO0lBQ1Z2QyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R3QyxtQkFBbUIsRUFBRTtJQUNuQnhDLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHlDLFVBQVUsRUFBRTtJQUNWekMsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEMEMsc0JBQXNCLEVBQUU7SUFDdEIxQyxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QyQyxVQUFVLEVBQUU7SUFDVnBFLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRHFFLFNBQVMsRUFBRTtJQUNUckUsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEc0UsY0FBYyxFQUFFO0lBQ2R0RSxRQUFRLEVBQUUsSUFBSTtJQUNkQyx3QkFBd0IsRUFBRSxDQUFDLGNBQWMsRUFBRSxhQUFhO0VBQzFELENBQUM7RUFDRHNFLFNBQVMsRUFBRTtJQUNUdkUsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEd0Usc0JBQXNCLEVBQUU7SUFDdEJ4RSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0R5RSxpQkFBaUIsRUFBRTtJQUNqQmhELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRGlELGdCQUFnQixFQUFFO0lBQ2hCMUUsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEMkUsWUFBWSxFQUFFO0lBQ1ozRSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0Q0RSx3QkFBd0IsRUFBRTtJQUN4Qm5ELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRG9ELG9CQUFvQixFQUFFO0lBQ3BCcEUsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEcUUsaUJBQWlCLEVBQUU7SUFDakI5RSxRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QrRSxpQkFBaUIsRUFBRTtJQUNqQnRELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHVELGFBQWEsRUFBRTtJQUNiekQsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEMEQsd0JBQXdCLEVBQUU7SUFDeEJ4RCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R5RCxXQUFXLEVBQUU7SUFDWHpFLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRDBFLFdBQVcsRUFBRTtJQUNYbkYsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEb0YsaUJBQWlCLEVBQUU7SUFDakIzRCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0Q0RCxrQkFBa0IsRUFBRTtJQUNsQjVELFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRDZELG1CQUFtQixFQUFFO0lBQ25CN0QsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEOEQsMEJBQTBCLEVBQUU7SUFDMUI5RCxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QrRCxvQkFBb0IsRUFBRTtJQUNwQi9FLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGdGLGVBQWUsRUFBRTtJQUNmekYsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEMEYsWUFBWSxFQUFFO0lBQ1oxRixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0QyRixpQkFBaUIsRUFBRTtJQUNqQnZELE9BQU8sRUFBRTtFQUNYLENBQUM7RUFDRHdELGFBQWEsRUFBRTtJQUNibkUsU0FBUyxFQUFFO0VBQ2I7QUFDRixDQUFDO0FBQUM7QUFFRixJQUFJb0UseUJBQXlCLEdBQUc7RUFDOUJDLHNCQUFzQixFQUFFO0lBQ3RCckUsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEc0Usc0JBQXNCLEVBQUU7SUFDdEJ0RSxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0R1RSxjQUFjLEVBQUU7SUFDZHZFLFNBQVMsRUFBRTtFQUNiLENBQUM7RUFDRHdFLHlCQUF5QixFQUFFO0lBQ3pCeEUsU0FBUyxFQUFFO0VBQ2IsQ0FBQztFQUNEeUUsc0JBQXNCLEVBQUU7SUFDdEJ6RSxTQUFTLEVBQUU7RUFDYixDQUFDO0VBQ0QwRSxhQUFhLEVBQUU7SUFDYjFGLFFBQVEsRUFBRTtFQUNaO0FBQ0YsQ0FBQztBQUVELElBQUkyRixxQkFBcUIsR0FBRyxDQUFDLENBQUM7QUFFOUJDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDRixxQkFBcUIsRUFBRXRHLG9CQUFvQixFQUMzQytGLHlCQUF5QixDQUFDO0FBQUMsZUFFMUJPLHFCQUFxQjtBQUFBIn0=
|
|
301
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tb25DYXBDb25zdHJhaW50cyIsInBsYXRmb3JtTmFtZSIsImlzU3RyaW5nIiwiaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlIiwicHJlc2VuY2UiLCJhcHAiLCJhcHBBY3Rpdml0eSIsImFwcFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJhcHBXYWl0UGFja2FnZSIsImFwcFdhaXREdXJhdGlvbiIsImlzTnVtYmVyIiwiZGV2aWNlUmVhZHlUaW1lb3V0IiwiYW5kcm9pZENvdmVyYWdlIiwiYW5kcm9pZERldmljZVJlYWR5VGltZW91dCIsImFuZHJvaWREZXZpY2VTb2NrZXQiLCJhbmRyb2lkSW5zdGFsbFRpbWVvdXQiLCJhZGJQb3J0IiwicmVtb3RlQWRiSG9zdCIsImFkYkV4ZWNUaW1lb3V0IiwiYXZkIiwiYXZkTGF1bmNoVGltZW91dCIsImF2ZFJlYWR5VGltZW91dCIsImF2ZEFyZ3MiLCJhdmRFbnYiLCJpc09iamVjdCIsInVzZUtleXN0b3JlIiwiaXNCb29sZWFuIiwia2V5c3RvcmVQYXRoIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJ3ZWJ2aWV3RGV2dG9vbHNQb3J0IiwiZW5zdXJlV2Vidmlld3NIYXZlUGFnZXMiLCJlbmFibGVXZWJ2aWV3RGV0YWlsc0NvbGxlY3Rpb24iLCJjaHJvbWVEcml2ZXJQb3J0IiwiY2hyb21lZHJpdmVyUG9ydCIsImNocm9tZWRyaXZlclBvcnRzIiwiaXNBcnJheSIsImNocm9tZWRyaXZlckFyZ3MiLCJjaHJvbWVkcml2ZXJFeGVjdXRhYmxlIiwiY2hyb21lZHJpdmVyRXhlY3V0YWJsZURpciIsImNocm9tZWRyaXZlckNocm9tZU1hcHBpbmdGaWxlIiwiY2hyb21lZHJpdmVyVXNlU3lzdGVtRXhlY3V0YWJsZSIsImNocm9tZWRyaXZlckRpc2FibGVCdWlsZENoZWNrIiwiY2hyb21lTG9nZ2luZ1ByZWZzIiwiYXV0b1dlYnZpZXdUaW1lb3V0IiwiYXV0b1dlYnZpZXdOYW1lIiwiaW50ZW50QWN0aW9uIiwiaW50ZW50Q2F0ZWdvcnkiLCJpbnRlbnRGbGFncyIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwiZG9udFN0b3BBcHBPblJlc2V0IiwidW5pY29kZUtleWJvYXJkIiwicmVzZXRLZXlib2FyZCIsIm5vU2lnbiIsInJlY3JlYXRlQ2hyb21lRHJpdmVyU2Vzc2lvbnMiLCJhdXRvTGF1bmNoIiwibmF0aXZlV2ViU2NyZWVuc2hvdCIsImFuZHJvaWRTY3JlZW5zaG90UGF0aCIsImFuZHJvaWRJbnN0YWxsUGF0aCIsImNsZWFyU3lzdGVtRmlsZXMiLCJleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWUiLCJhdXRvR3JhbnRQZXJtaXNzaW9ucyIsInNoYXJlZFByZWZlcmVuY2VzIiwibmV0d29ya1NwZWVkIiwiZ3BzRW5hYmxlZCIsImlzSGVhZGxlc3MiLCJzaG93Q2hyb21lZHJpdmVyTG9nIiwic2tpcFVubG9jayIsImNsZWFyRGV2aWNlTG9nc09uU3RhcnQiLCJ1bmxvY2tUeXBlIiwidW5sb2NrS2V5IiwidW5sb2NrU3RyYXRlZ3kiLCJvdGhlckFwcHMiLCJ1bmluc3RhbGxPdGhlclBhY2thZ2VzIiwiYWxsb3dUZXN0UGFja2FnZXMiLCJwYWdlTG9hZFN0cmF0ZWd5IiwibG9jYWxlU2NyaXB0Iiwic2tpcERldmljZUluaXRpYWxpemF0aW9uIiwicmVtb3RlQXBwc0NhY2hlTGltaXQiLCJidWlsZFRvb2xzVmVyc2lvbiIsInNraXBMb2djYXRDYXB0dXJlIiwiY2hyb21lT3B0aW9ucyIsImVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZyIsInVzZXJQcm9maWxlIiwiYnJvd3Nlck5hbWUiLCJlbmZvcmNlQXBwSW5zdGFsbCIsInN1cHByZXNzS2lsbFNlcnZlciIsImFsbG93T2ZmbGluZURldmljZXMiLCJpZ25vcmVIaWRkZW5BcGlQb2xpY3lFcnJvciIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwibW9ja0xvY2F0aW9uQXBwIiwibG9nY2F0Rm9ybWF0IiwibG9nY2F0RmlsdGVyU3BlY3MiLCJhbGxvd0RlbGF5QWRiIiwidWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyIsImlnbm9yZVVuaW1wb3J0YW50Vmlld3MiLCJkaXNhYmxlQW5kcm9pZFdhdGNoZXJzIiwiYWNjZXB0U3NsQ2VydHMiLCJhbmRyb2lkTmF0dXJhbE9yaWVudGF0aW9uIiwiZGlzYWJsZVdpbmRvd0FuaW1hdGlvbiIsImJvb3RzdHJhcFBvcnQiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJPYmplY3QiLCJhc3NpZ24iXSwic291cmNlcyI6WyIuLi8uLi9saWIvZGVzaXJlZC1jYXBzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBjb21tb25DYXBDb25zdHJhaW50cyA9IHtcbiAgcGxhdGZvcm1OYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ0FuZHJvaWQnXSxcbiAgICBwcmVzZW5jZTogdHJ1ZVxuICB9LFxuICBhcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBBY3Rpdml0eToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFBhY2thZ2U6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0QWN0aXZpdHk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhcHBXYWl0UGFja2FnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFwcFdhaXREdXJhdGlvbjoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGRldmljZVJlYWR5VGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWRDb3ZlcmFnZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWREZXZpY2VSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhbmRyb2lkRGV2aWNlU29ja2V0OiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYWRiUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIHJlbW90ZUFkYkhvc3Q6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBhZGJFeGVjVGltZW91dDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGF2ZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGF2ZExhdW5jaFRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRSZWFkeVRpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBhdmRBcmdzOiB7XG4gICAgLy8gY291bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcbiAgfSxcbiAgYXZkRW52OiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgdXNlS2V5c3RvcmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5c3RvcmVQYXNzd29yZDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGtleUFsaWFzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAga2V5UGFzc3dvcmQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB3ZWJ2aWV3RGV2dG9vbHNQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgZW5zdXJlV2Vidmlld3NIYXZlUGFnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZW5hYmxlV2Vidmlld0RldGFpbHNDb2xsZWN0aW9uOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIC8vIHRoaXMgb25lIGlzIGRlcHJlY2F0ZWRcbiAgY2hyb21lRHJpdmVyUG9ydDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIC8vIGR1cGxpY2F0ZSBvZiBhYm92ZSB3aXRoIGJldHRlciBzcGVsbGluZ1xuICBjaHJvbWVkcml2ZXJQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyUG9ydHM6IHtcbiAgICBpc0FycmF5OiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckFyZ3M6IHtcbiAgICBpc09iamVjdDogdHJ1ZSxcbiAgfSxcbiAgY2hyb21lZHJpdmVyRXhlY3V0YWJsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlckV4ZWN1dGFibGVEaXI6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBjaHJvbWVkcml2ZXJDaHJvbWVNYXBwaW5nRmlsZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGNocm9tZWRyaXZlclVzZVN5c3RlbUV4ZWN1dGFibGU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lZHJpdmVyRGlzYWJsZUJ1aWxkQ2hlY2s6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lTG9nZ2luZ1ByZWZzOiB7XG4gICAgaXNPYmplY3Q6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdUaW1lb3V0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbiAgYXV0b1dlYnZpZXdOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50QWN0aW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgaW50ZW50Q2F0ZWdvcnk6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBpbnRlbnRGbGFnczoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZG9udFN0b3BBcHBPblJlc2V0OiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIHVuaWNvZGVLZXlib2FyZDoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZXNldEtleWJvYXJkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5vU2lnbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZWNyZWF0ZUNocm9tZURyaXZlclNlc3Npb25zOiB7XG4gICAgaXNCb29sZWFuOiBmYWxzZVxuICB9LFxuICBhdXRvTGF1bmNoOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIG5hdGl2ZVdlYlNjcmVlbnNob3Q6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYW5kcm9pZFNjcmVlbnNob3RQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYW5kcm9pZEluc3RhbGxQYXRoOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgY2xlYXJTeXN0ZW1GaWxlczoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBleHRyYWN0Q2hyb21lQW5kcm9pZFBhY2thZ2VGcm9tQ29udGV4dE5hbWU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgYXV0b0dyYW50UGVybWlzc2lvbnM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hhcmVkUHJlZmVyZW5jZXM6IHtcbiAgICBpc09iamVjdDogdHJ1ZVxuICB9LFxuICBuZXR3b3JrU3BlZWQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBncHNFbmFibGVkOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGlzSGVhZGxlc3M6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc2hvd0Nocm9tZWRyaXZlckxvZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBza2lwVW5sb2NrOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGNsZWFyRGV2aWNlTG9nc09uU3RhcnQ6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrVHlwZToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja0tleToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHVubG9ja1N0cmF0ZWd5OiB7XG4gICAgaXNTdHJpbmc6IHRydWUsXG4gICAgaW5jbHVzaW9uQ2FzZUluc2Vuc2l0aXZlOiBbJ2xvY2tzZXR0aW5ncycsICd1aWF1dG9tYXRvciddLFxuICB9LFxuICBvdGhlckFwcHM6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICB1bmluc3RhbGxPdGhlclBhY2thZ2VzOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgYWxsb3dUZXN0UGFja2FnZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgcGFnZUxvYWRTdHJhdGVneToge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIGxvY2FsZVNjcmlwdDoge1xuICAgIGlzU3RyaW5nOiB0cnVlXG4gIH0sXG4gIHNraXBEZXZpY2VJbml0aWFsaXphdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICByZW1vdGVBcHBzQ2FjaGVMaW1pdDoge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJ1aWxkVG9vbHNWZXJzaW9uOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgc2tpcExvZ2NhdENhcHR1cmU6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgY2hyb21lT3B0aW9uczoge1xuICAgIGlzT2JqZWN0OiB0cnVlXG4gIH0sXG4gIGVuYWJsZVBlcmZvcm1hbmNlTG9nZ2luZzoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICB1c2VyUHJvZmlsZToge1xuICAgIGlzTnVtYmVyOiB0cnVlXG4gIH0sXG4gIGJyb3dzZXJOYW1lOiB7XG4gICAgaXNTdHJpbmc6IHRydWVcbiAgfSxcbiAgZW5mb3JjZUFwcEluc3RhbGw6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgc3VwcHJlc3NLaWxsU2VydmVyOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFsbG93T2ZmbGluZURldmljZXM6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgaWdub3JlSGlkZGVuQXBpUG9saWN5RXJyb3I6IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHtcbiAgICBpc051bWJlcjogdHJ1ZVxuICB9LFxuICBtb2NrTG9jYXRpb25BcHA6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGb3JtYXQ6IHtcbiAgICBpc1N0cmluZzogdHJ1ZVxuICB9LFxuICBsb2djYXRGaWx0ZXJTcGVjczoge1xuICAgIGlzQXJyYXk6IHRydWVcbiAgfSxcbiAgYWxsb3dEZWxheUFkYjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9XG59O1xuXG5sZXQgdWlhdXRvbWF0b3JDYXBDb25zdHJhaW50cyA9IHtcbiAgaWdub3JlVW5pbXBvcnRhbnRWaWV3czoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBkaXNhYmxlQW5kcm9pZFdhdGNoZXJzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFjY2VwdFNzbENlcnRzOiB7XG4gICAgaXNCb29sZWFuOiB0cnVlXG4gIH0sXG4gIGFuZHJvaWROYXR1cmFsT3JpZW50YXRpb246IHtcbiAgICBpc0Jvb2xlYW46IHRydWVcbiAgfSxcbiAgZGlzYWJsZVdpbmRvd0FuaW1hdGlvbjoge1xuICAgIGlzQm9vbGVhbjogdHJ1ZVxuICB9LFxuICBib290c3RyYXBQb3J0OiB7XG4gICAgaXNOdW1iZXI6IHRydWVcbiAgfSxcbn07XG5cbmxldCBkZXNpcmVkQ2FwQ29uc3RyYWludHMgPSB7fTtcblxuT2JqZWN0LmFzc2lnbihkZXNpcmVkQ2FwQ29uc3RyYWludHMsIGNvbW1vbkNhcENvbnN0cmFpbnRzLFxuICAgICAgICAgICAgICB1aWF1dG9tYXRvckNhcENvbnN0cmFpbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVzaXJlZENhcENvbnN0cmFpbnRzO1xuZXhwb3J0IHsgY29tbW9uQ2FwQ29uc3RyYWludHMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUlBLG9CQUFvQixHQUFHO0VBQ3pCQyxZQUFZLEVBQUU7SUFDWkMsUUFBUSxFQUFFLElBQUk7SUFDZEMsd0JBQXdCLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDckNDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsR0FBRyxFQUFFO0lBQ0hILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksV0FBVyxFQUFFO0lBQ1hKLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREssVUFBVSxFQUFFO0lBQ1ZMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sZUFBZSxFQUFFO0lBQ2ZOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sY0FBYyxFQUFFO0lBQ2RQLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFEsZUFBZSxFQUFFO0lBQ2ZDLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREMsa0JBQWtCLEVBQUU7SUFDbEJELFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREUsZUFBZSxFQUFFO0lBQ2ZYLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRFkseUJBQXlCLEVBQUU7SUFDekJILFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDREksbUJBQW1CLEVBQUU7SUFDbkJiLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRGMscUJBQXFCLEVBQUU7SUFDckJMLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE0sT0FBTyxFQUFFO0lBQ1BOLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRE8sYUFBYSxFQUFFO0lBQ2JoQixRQUFRLEVBQUU7RUFDWixDQUFDO0VBQ0RpQixjQUFjLEVBQUU7SUFDZFIsUUFBUSxFQUFFO0VBQ1osQ0FBQztFQUNEUyxHQUFHLEVBQUU7SUFDSGxCLFFBQVEsRUFBRTtFQUNaLENBQUM7RUFDRG1CLGdCQUFnQixFQUFF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desired-caps.js","names":["commonCapConstraints","platformName","isString","inclusionCaseInsensitive","presence","app","appActivity","appPackage","appWaitActivity","appWaitPackage","appWaitDuration","isNumber","deviceReadyTimeout","androidCoverage","androidDeviceReadyTimeout","androidDeviceSocket","androidInstallTimeout","adbPort","remoteAdbHost","adbExecTimeout","avd","avdLaunchTimeout","avdReadyTimeout","avdArgs","avdEnv","isObject","useKeystore","isBoolean","keystorePath","keystorePassword","keyAlias","keyPassword","webviewDevtoolsPort","ensureWebviewsHavePages","enableWebviewDetailsCollection","chromeDriverPort","chromedriverPort","chromedriverPorts","isArray","chromedriverArgs","chromedriverExecutable","chromedriverExecutableDir","chromedriverChromeMappingFile","chromedriverUseSystemExecutable","chromedriverDisableBuildCheck","chromeLoggingPrefs","autoWebviewTimeout","intentAction","intentCategory","intentFlags","optionalIntentArguments","dontStopAppOnReset","unicodeKeyboard","resetKeyboard","noSign","recreateChromeDriverSessions","autoLaunch","nativeWebScreenshot","androidScreenshotPath","androidInstallPath","clearSystemFiles","extractChromeAndroidPackageFromContextName","autoGrantPermissions","sharedPreferences","networkSpeed","gpsEnabled","isHeadless","showChromedriverLog","skipUnlock","clearDeviceLogsOnStart","unlockType","unlockKey","unlockStrategy","otherApps","uninstallOtherPackages","allowTestPackages","pageLoadStrategy","localeScript","skipDeviceInitialization","remoteAppsCacheLimit","buildToolsVersion","skipLogcatCapture","chromeOptions","enablePerformanceLogging","userProfile","browserName","enforceAppInstall","suppressKillServer","allowOfflineDevices","ignoreHiddenApiPolicyError","unlockSuccessTimeout","mockLocationApp","logcatFormat","logcatFilterSpecs","allowDelayAdb","uiautomatorCapConstraints","ignoreUnimportantViews","disableAndroidWatchers","acceptSslCerts","androidNaturalOrientation","disableWindowAnimation","bootstrapPort","desiredCapConstraints","Object","assign"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["let commonCapConstraints = {\n platformName: {\n isString: true,\n inclusionCaseInsensitive: ['Android'],\n presence: true\n },\n app: {\n isString: true\n },\n appActivity: {\n isString: true\n },\n appPackage: {\n isString: true\n },\n appWaitActivity: {\n isString: true\n },\n appWaitPackage: {\n isString: true\n },\n appWaitDuration: {\n isNumber: true\n },\n deviceReadyTimeout: {\n isNumber: true\n },\n androidCoverage: {\n isString: true\n },\n androidDeviceReadyTimeout: {\n isNumber: true\n },\n androidDeviceSocket: {\n isString: true\n },\n androidInstallTimeout: {\n isNumber: true\n },\n adbPort: {\n isNumber: true\n },\n remoteAdbHost: {\n isString: true\n },\n adbExecTimeout: {\n isNumber: true\n },\n avd: {\n isString: true\n },\n avdLaunchTimeout: {\n isNumber: true\n },\n avdReadyTimeout: {\n isNumber: true\n },\n avdArgs: {\n // could be a string or an array\n },\n avdEnv: {\n isObject: true\n },\n useKeystore: {\n isBoolean: true\n },\n keystorePath: {\n isString: true\n },\n keystorePassword: {\n isString: true\n },\n keyAlias: {\n isString: true\n },\n keyPassword: {\n isString: true\n },\n webviewDevtoolsPort: {\n isNumber: true\n },\n ensureWebviewsHavePages: {\n isBoolean: true\n },\n enableWebviewDetailsCollection: {\n isBoolean: true\n },\n // this one is deprecated\n chromeDriverPort: {\n isNumber: true\n },\n // duplicate of above with better spelling\n chromedriverPort: {\n isNumber: true\n },\n chromedriverPorts: {\n isArray: true\n },\n chromedriverArgs: {\n isObject: true,\n },\n chromedriverExecutable: {\n isString: true\n },\n chromedriverExecutableDir: {\n isString: true\n },\n chromedriverChromeMappingFile: {\n isString: true\n },\n chromedriverUseSystemExecutable: {\n isBoolean: true\n },\n chromedriverDisableBuildCheck: {\n isBoolean: true\n },\n chromeLoggingPrefs: {\n isObject: true\n },\n autoWebviewTimeout: {\n isNumber: true\n },\n intentAction: {\n isString: true\n },\n intentCategory: {\n isString: true\n },\n intentFlags: {\n isString: true\n },\n optionalIntentArguments: {\n isString: true\n },\n dontStopAppOnReset: {\n isBoolean: true\n },\n unicodeKeyboard: {\n isBoolean: true\n },\n resetKeyboard: {\n isBoolean: true\n },\n noSign: {\n isBoolean: true\n },\n recreateChromeDriverSessions: {\n isBoolean: false\n },\n autoLaunch: {\n isBoolean: true\n },\n nativeWebScreenshot: {\n isBoolean: true\n },\n androidScreenshotPath: {\n isString: true\n },\n androidInstallPath: {\n isString: true\n },\n clearSystemFiles: {\n isBoolean: true\n },\n extractChromeAndroidPackageFromContextName: {\n isBoolean: true\n },\n autoGrantPermissions: {\n isBoolean: true\n },\n sharedPreferences: {\n isObject: true\n },\n networkSpeed: {\n isString: true\n },\n gpsEnabled: {\n isBoolean: true\n },\n isHeadless: {\n isBoolean: true\n },\n showChromedriverLog: {\n isBoolean: true\n },\n skipUnlock: {\n isBoolean: true\n },\n clearDeviceLogsOnStart: {\n isBoolean: true\n },\n unlockType: {\n isString: true\n },\n unlockKey: {\n isString: true\n },\n unlockStrategy: {\n isString: true,\n inclusionCaseInsensitive: ['locksettings', 'uiautomator'],\n },\n otherApps: {\n isString: true\n },\n uninstallOtherPackages: {\n isString: true\n },\n allowTestPackages: {\n isBoolean: true\n },\n pageLoadStrategy: {\n isString: true\n },\n localeScript: {\n isString: true\n },\n skipDeviceInitialization: {\n isBoolean: true\n },\n remoteAppsCacheLimit: {\n isNumber: true\n },\n buildToolsVersion: {\n isString: true\n },\n skipLogcatCapture: {\n isBoolean: true\n },\n chromeOptions: {\n isObject: true\n },\n enablePerformanceLogging: {\n isBoolean: true\n },\n userProfile: {\n isNumber: true\n },\n browserName: {\n isString: true\n },\n enforceAppInstall: {\n isBoolean: true\n },\n suppressKillServer: {\n isBoolean: true\n },\n allowOfflineDevices: {\n isBoolean: true\n },\n ignoreHiddenApiPolicyError: {\n isBoolean: true\n },\n unlockSuccessTimeout: {\n isNumber: true\n },\n mockLocationApp: {\n isString: true\n },\n logcatFormat: {\n isString: true\n },\n logcatFilterSpecs: {\n isArray: true\n },\n allowDelayAdb: {\n isBoolean: true\n }\n};\n\nlet uiautomatorCapConstraints = {\n ignoreUnimportantViews: {\n isBoolean: true\n },\n disableAndroidWatchers: {\n isBoolean: true\n },\n acceptSslCerts: {\n isBoolean: true\n },\n androidNaturalOrientation: {\n isBoolean: true\n },\n disableWindowAnimation: {\n isBoolean: true\n },\n bootstrapPort: {\n isNumber: true\n },\n};\n\nlet desiredCapConstraints = {};\n\nObject.assign(desiredCapConstraints, commonCapConstraints,\n uiautomatorCapConstraints);\n\nexport default desiredCapConstraints;\nexport { commonCapConstraints };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"desired-caps.js","names":["commonCapConstraints","platformName","isString","inclusionCaseInsensitive","presence","app","appActivity","appPackage","appWaitActivity","appWaitPackage","appWaitDuration","isNumber","deviceReadyTimeout","androidCoverage","androidDeviceReadyTimeout","androidDeviceSocket","androidInstallTimeout","adbPort","remoteAdbHost","adbExecTimeout","avd","avdLaunchTimeout","avdReadyTimeout","avdArgs","avdEnv","isObject","useKeystore","isBoolean","keystorePath","keystorePassword","keyAlias","keyPassword","webviewDevtoolsPort","ensureWebviewsHavePages","enableWebviewDetailsCollection","chromeDriverPort","chromedriverPort","chromedriverPorts","isArray","chromedriverArgs","chromedriverExecutable","chromedriverExecutableDir","chromedriverChromeMappingFile","chromedriverUseSystemExecutable","chromedriverDisableBuildCheck","chromeLoggingPrefs","autoWebviewTimeout","autoWebviewName","intentAction","intentCategory","intentFlags","optionalIntentArguments","dontStopAppOnReset","unicodeKeyboard","resetKeyboard","noSign","recreateChromeDriverSessions","autoLaunch","nativeWebScreenshot","androidScreenshotPath","androidInstallPath","clearSystemFiles","extractChromeAndroidPackageFromContextName","autoGrantPermissions","sharedPreferences","networkSpeed","gpsEnabled","isHeadless","showChromedriverLog","skipUnlock","clearDeviceLogsOnStart","unlockType","unlockKey","unlockStrategy","otherApps","uninstallOtherPackages","allowTestPackages","pageLoadStrategy","localeScript","skipDeviceInitialization","remoteAppsCacheLimit","buildToolsVersion","skipLogcatCapture","chromeOptions","enablePerformanceLogging","userProfile","browserName","enforceAppInstall","suppressKillServer","allowOfflineDevices","ignoreHiddenApiPolicyError","unlockSuccessTimeout","mockLocationApp","logcatFormat","logcatFilterSpecs","allowDelayAdb","uiautomatorCapConstraints","ignoreUnimportantViews","disableAndroidWatchers","acceptSslCerts","androidNaturalOrientation","disableWindowAnimation","bootstrapPort","desiredCapConstraints","Object","assign"],"sources":["../../lib/desired-caps.js"],"sourcesContent":["let commonCapConstraints = {\n platformName: {\n isString: true,\n inclusionCaseInsensitive: ['Android'],\n presence: true\n },\n app: {\n isString: true\n },\n appActivity: {\n isString: true\n },\n appPackage: {\n isString: true\n },\n appWaitActivity: {\n isString: true\n },\n appWaitPackage: {\n isString: true\n },\n appWaitDuration: {\n isNumber: true\n },\n deviceReadyTimeout: {\n isNumber: true\n },\n androidCoverage: {\n isString: true\n },\n androidDeviceReadyTimeout: {\n isNumber: true\n },\n androidDeviceSocket: {\n isString: true\n },\n androidInstallTimeout: {\n isNumber: true\n },\n adbPort: {\n isNumber: true\n },\n remoteAdbHost: {\n isString: true\n },\n adbExecTimeout: {\n isNumber: true\n },\n avd: {\n isString: true\n },\n avdLaunchTimeout: {\n isNumber: true\n },\n avdReadyTimeout: {\n isNumber: true\n },\n avdArgs: {\n // could be a string or an array\n },\n avdEnv: {\n isObject: true\n },\n useKeystore: {\n isBoolean: true\n },\n keystorePath: {\n isString: true\n },\n keystorePassword: {\n isString: true\n },\n keyAlias: {\n isString: true\n },\n keyPassword: {\n isString: true\n },\n webviewDevtoolsPort: {\n isNumber: true\n },\n ensureWebviewsHavePages: {\n isBoolean: true\n },\n enableWebviewDetailsCollection: {\n isBoolean: true\n },\n // this one is deprecated\n chromeDriverPort: {\n isNumber: true\n },\n // duplicate of above with better spelling\n chromedriverPort: {\n isNumber: true\n },\n chromedriverPorts: {\n isArray: true\n },\n chromedriverArgs: {\n isObject: true,\n },\n chromedriverExecutable: {\n isString: true\n },\n chromedriverExecutableDir: {\n isString: true\n },\n chromedriverChromeMappingFile: {\n isString: true\n },\n chromedriverUseSystemExecutable: {\n isBoolean: true\n },\n chromedriverDisableBuildCheck: {\n isBoolean: true\n },\n chromeLoggingPrefs: {\n isObject: true\n },\n autoWebviewTimeout: {\n isNumber: true\n },\n autoWebviewName: {\n isString: true\n },\n intentAction: {\n isString: true\n },\n intentCategory: {\n isString: true\n },\n intentFlags: {\n isString: true\n },\n optionalIntentArguments: {\n isString: true\n },\n dontStopAppOnReset: {\n isBoolean: true\n },\n unicodeKeyboard: {\n isBoolean: true\n },\n resetKeyboard: {\n isBoolean: true\n },\n noSign: {\n isBoolean: true\n },\n recreateChromeDriverSessions: {\n isBoolean: false\n },\n autoLaunch: {\n isBoolean: true\n },\n nativeWebScreenshot: {\n isBoolean: true\n },\n androidScreenshotPath: {\n isString: true\n },\n androidInstallPath: {\n isString: true\n },\n clearSystemFiles: {\n isBoolean: true\n },\n extractChromeAndroidPackageFromContextName: {\n isBoolean: true\n },\n autoGrantPermissions: {\n isBoolean: true\n },\n sharedPreferences: {\n isObject: true\n },\n networkSpeed: {\n isString: true\n },\n gpsEnabled: {\n isBoolean: true\n },\n isHeadless: {\n isBoolean: true\n },\n showChromedriverLog: {\n isBoolean: true\n },\n skipUnlock: {\n isBoolean: true\n },\n clearDeviceLogsOnStart: {\n isBoolean: true\n },\n unlockType: {\n isString: true\n },\n unlockKey: {\n isString: true\n },\n unlockStrategy: {\n isString: true,\n inclusionCaseInsensitive: ['locksettings', 'uiautomator'],\n },\n otherApps: {\n isString: true\n },\n uninstallOtherPackages: {\n isString: true\n },\n allowTestPackages: {\n isBoolean: true\n },\n pageLoadStrategy: {\n isString: true\n },\n localeScript: {\n isString: true\n },\n skipDeviceInitialization: {\n isBoolean: true\n },\n remoteAppsCacheLimit: {\n isNumber: true\n },\n buildToolsVersion: {\n isString: true\n },\n skipLogcatCapture: {\n isBoolean: true\n },\n chromeOptions: {\n isObject: true\n },\n enablePerformanceLogging: {\n isBoolean: true\n },\n userProfile: {\n isNumber: true\n },\n browserName: {\n isString: true\n },\n enforceAppInstall: {\n isBoolean: true\n },\n suppressKillServer: {\n isBoolean: true\n },\n allowOfflineDevices: {\n isBoolean: true\n },\n ignoreHiddenApiPolicyError: {\n isBoolean: true\n },\n unlockSuccessTimeout: {\n isNumber: true\n },\n mockLocationApp: {\n isString: true\n },\n logcatFormat: {\n isString: true\n },\n logcatFilterSpecs: {\n isArray: true\n },\n allowDelayAdb: {\n isBoolean: true\n }\n};\n\nlet uiautomatorCapConstraints = {\n ignoreUnimportantViews: {\n isBoolean: true\n },\n disableAndroidWatchers: {\n isBoolean: true\n },\n acceptSslCerts: {\n isBoolean: true\n },\n androidNaturalOrientation: {\n isBoolean: true\n },\n disableWindowAnimation: {\n isBoolean: true\n },\n bootstrapPort: {\n isNumber: true\n },\n};\n\nlet desiredCapConstraints = {};\n\nObject.assign(desiredCapConstraints, commonCapConstraints,\n uiautomatorCapConstraints);\n\nexport default desiredCapConstraints;\nexport { commonCapConstraints };\n"],"mappings":"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"}
|
|
@@ -197,11 +197,15 @@ commands.mobileRemoveApp = async function mobileRemoveApp (opts = {}) {
|
|
|
197
197
|
/**
|
|
198
198
|
* @typedef {Object} TerminateOptions
|
|
199
199
|
* @property {number|string} timeout [500] - The count of milliseconds to wait until the
|
|
200
|
-
* app is terminated.
|
|
200
|
+
* app is terminated. The method will skip
|
|
201
|
+
* checking the app state check if the timeout
|
|
202
|
+
* was lower or equal to zero. Then, the return
|
|
203
|
+
* value will be true.
|
|
201
204
|
*/
|
|
202
205
|
|
|
203
206
|
/**
|
|
204
|
-
* Terminates the app if it is running.
|
|
207
|
+
* Terminates the app if it is running. If the given timeout was lower or equal to zero,
|
|
208
|
+
* it returns true after terminating the app without checking the app state.
|
|
205
209
|
*
|
|
206
210
|
* @param {string} appId - Application package identifier
|
|
207
211
|
* @param {?TerminateOptions} options - The set of application termination options
|
|
@@ -216,6 +220,13 @@ commands.terminateApp = async function terminateApp (appId, options = {}) {
|
|
|
216
220
|
}
|
|
217
221
|
await this.adb.forceStop(appId);
|
|
218
222
|
const timeout = util.hasValue(options.timeout) && !isNaN(options.timeout) ? parseInt(options.timeout, 10) : 500;
|
|
223
|
+
|
|
224
|
+
if (timeout <= 0) {
|
|
225
|
+
this.log.info(`'${appId}' has been terminated. Skip checking the application process state ` +
|
|
226
|
+
`since the timeout was set as ${timeout}ms`);
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
|
|
219
230
|
try {
|
|
220
231
|
await waitForCondition(async () => await this.queryAppState(appId) <= APP_STATE.NOT_RUNNING,
|
|
221
232
|
{waitMs: timeout, intervalMs: 100});
|
package/lib/commands/context.js
CHANGED
|
@@ -151,7 +151,7 @@ helpers.defaultContextName = function defaultContextName () {
|
|
|
151
151
|
};
|
|
152
152
|
|
|
153
153
|
helpers.defaultWebviewName = function defaultWebviewName () {
|
|
154
|
-
return WEBVIEW_BASE + this.opts.appPackage;
|
|
154
|
+
return WEBVIEW_BASE + (this.opts.autoWebviewName || this.opts.appPackage);
|
|
155
155
|
};
|
|
156
156
|
|
|
157
157
|
helpers.isWebContext = function isWebContext () {
|
package/lib/desired-caps.js
CHANGED