appium-android-driver 5.9.1 → 5.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/build/lib/commands/execute.js +4 -2
- package/build/lib/commands/execute.js.map +1 -1
- package/build/lib/commands/general.js +1 -10
- package/build/lib/commands/general.js.map +1 -1
- package/build/lib/commands/index.js +3 -2
- package/build/lib/commands/index.js.map +1 -1
- package/build/lib/commands/keyboard.js +20 -0
- package/build/lib/commands/keyboard.js.map +1 -0
- package/build/lib/commands/media-projection.js +4 -2
- package/build/lib/commands/media-projection.js.map +1 -1
- package/lib/commands/execute.js +3 -0
- package/lib/commands/general.js +0 -9
- package/lib/commands/index.js +4 -2
- package/lib/commands/keyboard.js +12 -0
- package/lib/commands/media-projection.js +2 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
## [5.10.1](https://github.com/appium/appium-android-driver/compare/v5.10.0...v5.10.1) (2023-04-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* increase pull recent timeout ([#802](https://github.com/appium/appium-android-driver/issues/802)) ([fd9b8ea](https://github.com/appium/appium-android-driver/commit/fd9b8ea6659ddc1b6ce3d5295d72bbbe820b91ae))
|
|
7
|
+
|
|
8
|
+
## [5.10.0](https://github.com/appium/appium-android-driver/compare/v5.9.1...v5.10.0) (2023-04-17)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Park keyboard commands to extensions ([#801](https://github.com/appium/appium-android-driver/issues/801)) ([6fd53bd](https://github.com/appium/appium-android-driver/commit/6fd53bd2ebb6882779ac679f8d672625da622b8e))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Miscellaneous Chores
|
|
17
|
+
|
|
18
|
+
* **deps-dev:** bump rimraf from 4.4.1 to 5.0.0 ([#794](https://github.com/appium/appium-android-driver/issues/794)) ([7ab3933](https://github.com/appium/appium-android-driver/commit/7ab39337b1190803d8bb064255570aa6b50d6c48))
|
|
19
|
+
|
|
1
20
|
## [5.9.1](https://github.com/appium/appium-android-driver/compare/v5.9.0...v5.9.1) (2023-04-11)
|
|
2
21
|
|
|
3
22
|
|
|
@@ -61,7 +61,9 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
|
|
|
61
61
|
isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',
|
|
62
62
|
stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',
|
|
63
63
|
getConnectivity: 'mobileGetConnectivity',
|
|
64
|
-
setConnectivity: 'mobileSetConnectivity'
|
|
64
|
+
setConnectivity: 'mobileSetConnectivity',
|
|
65
|
+
hideKeyboard: 'hideKeyboard',
|
|
66
|
+
isKeyboardShown: 'isKeyboardShown'
|
|
65
67
|
};
|
|
66
68
|
if (!_lodash.default.has(mobileCommandsMapping, mobileCommand)) {
|
|
67
69
|
throw new _driver.errors.UnknownCommandError(`Unknown mobile command "${mobileCommand}". ` + `Only ${_lodash.default.keys(mobileCommandsMapping)} commands are supported.`);
|
|
@@ -70,4 +72,4 @@ extensions.executeMobile = async function executeMobile(mobileCommand, opts = {}
|
|
|
70
72
|
};
|
|
71
73
|
var _default = extensions;
|
|
72
74
|
exports.default = _default;
|
|
73
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZHJpdmVyIiwiZXh0ZW5zaW9ucyIsImV4ZWN1dGUiLCJzY3JpcHQiLCJhcmdzIiwibWF0Y2giLCJsb2ciLCJpbmZvIiwicmVwbGFjZSIsInRyaW0iLCJleGVjdXRlTW9iaWxlIiwiXyIsImlzQXJyYXkiLCJpc1dlYkNvbnRleHQiLCJlcnJvcnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZW5kcG9pbnQiLCJjaHJvbWVkcml2ZXIiLCJqd3Byb3h5IiwiZG93bnN0cmVhbVByb3RvY29sIiwiUFJPVE9DT0xTIiwiTUpTT05XUCIsImNvbW1hbmQiLCJtb2JpbGVDb21tYW5kIiwib3B0cyIsIm1vYmlsZUNvbW1hbmRzTWFwcGluZyIsInNoZWxsIiwiZXhlY0VtdUNvbnNvbGVDb21tYW5kIiwic3RhcnRMb2dzQnJvYWRjYXN0Iiwic3RvcExvZ3NCcm9hZGNhc3QiLCJjaGFuZ2VQZXJtaXNzaW9ucyIsImdldFBlcm1pc3Npb25zIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInNlbnNvclNldCIsImdldERldmljZVRpbWUiLCJzdGFydFNjcmVlblN0cmVhbWluZyIsInN0b3BTY3JlZW5TdHJlYW1pbmciLCJnZXROb3RpZmljYXRpb25zIiwibGlzdFNtcyIsInB1c2hGaWxlIiwicHVsbEZpbGUiLCJwdWxsRm9sZGVyIiwiZGVsZXRlRmlsZSIsImlzQXBwSW5zdGFsbGVkIiwicXVlcnlBcHBTdGF0ZSIsImFjdGl2YXRlQXBwIiwicmVtb3ZlQXBwIiwidGVybWluYXRlQXBwIiwiaW5zdGFsbEFwcCIsImNsZWFyQXBwIiwic3RhcnRTZXJ2aWNlIiwic3RvcFNlcnZpY2UiLCJzdGFydEFjdGl2aXR5IiwiYnJvYWRjYXN0IiwiZ2V0Q29udGV4dHMiLCJ1bmxvY2siLCJyZWZyZXNoR3BzQ2FjaGUiLCJzdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsImlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsInN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJnZXRDb25uZWN0aXZpdHkiLCJzZXRDb25uZWN0aXZpdHkiLCJoaWRlS2V5Ym9hcmQiLCJpc0tleWJvYXJkU2hvd24iLCJoYXMiLCJVbmtub3duQ29tbWFuZEVycm9yIiwia2V5cyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMvZXhlY3V0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZXJyb3JzLCBQUk9UT0NPTFMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgZXh0ZW5zaW9ucyA9IHt9O1xuXG5leHRlbnNpb25zLmV4ZWN1dGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlIChzY3JpcHQsIGFyZ3MpIHtcbiAgaWYgKHNjcmlwdC5tYXRjaCgvXm1vYmlsZTovKSkge1xuICAgIHRoaXMubG9nLmluZm8oYEV4ZWN1dGluZyBuYXRpdmUgY29tbWFuZCAnJHtzY3JpcHR9J2ApO1xuICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKC9ebW9iaWxlOi8sICcnKS50cmltKCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXhlY3V0ZU1vYmlsZShzY3JpcHQsIF8uaXNBcnJheShhcmdzKSA/IGFyZ3NbMF0gOiBhcmdzKTtcbiAgfVxuICBpZiAoIXRoaXMuaXNXZWJDb250ZXh0KCkpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLk5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgfVxuICBjb25zdCBlbmRwb2ludCA9IHRoaXMuY2hyb21lZHJpdmVyLmp3cHJveHkuZG93bnN0cmVhbVByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUFxuICAgID8gJy9leGVjdXRlJ1xuICAgIDogJy9leGVjdXRlL3N5bmMnO1xuICByZXR1cm4gYXdhaXQgdGhpcy5jaHJvbWVkcml2ZXIuandwcm94eS5jb21tYW5kKGVuZHBvaW50LCAnUE9TVCcsIHtcbiAgICBzY3JpcHQsXG4gICAgYXJncyxcbiAgfSk7XG59O1xuXG5leHRlbnNpb25zLmV4ZWN1dGVNb2JpbGUgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlTW9iaWxlIChtb2JpbGVDb21tYW5kLCBvcHRzID0ge30pIHtcbiAgY29uc3QgbW9iaWxlQ29tbWFuZHNNYXBwaW5nID0ge1xuICAgIHNoZWxsOiAnbW9iaWxlU2hlbGwnLFxuXG4gICAgZXhlY0VtdUNvbnNvbGVDb21tYW5kOiAnbW9iaWxlRXhlY0VtdUNvbnNvbGVDb21tYW5kJyxcblxuICAgIHN0YXJ0TG9nc0Jyb2FkY2FzdDogJ21vYmlsZVN0YXJ0TG9nc0Jyb2FkY2FzdCcsXG4gICAgc3RvcExvZ3NCcm9hZGNhc3Q6ICdtb2JpbGVTdG9wTG9nc0Jyb2FkY2FzdCcsXG5cbiAgICBjaGFuZ2VQZXJtaXNzaW9uczogJ21vYmlsZUNoYW5nZVBlcm1pc3Npb25zJyxcbiAgICBnZXRQZXJtaXNzaW9uczogJ21vYmlsZUdldFBlcm1pc3Npb25zJyxcblxuICAgIHBlcmZvcm1FZGl0b3JBY3Rpb246ICdtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uJyxcblxuICAgIHNlbnNvclNldDogJ3NlbnNvclNldCcsXG5cbiAgICBnZXREZXZpY2VUaW1lOiAnbW9iaWxlR2V0RGV2aWNlVGltZScsXG5cbiAgICBzdGFydFNjcmVlblN0cmVhbWluZzogJ21vYmlsZVN0YXJ0U2NyZWVuU3RyZWFtaW5nJyxcbiAgICBzdG9wU2NyZWVuU3RyZWFtaW5nOiAnbW9iaWxlU3RvcFNjcmVlblN0cmVhbWluZycsXG5cbiAgICBnZXROb3RpZmljYXRpb25zOiAnbW9iaWxlR2V0Tm90aWZpY2F0aW9ucycsXG5cbiAgICBsaXN0U21zOiAnbW9iaWxlTGlzdFNtcycsXG5cbiAgICBwdXNoRmlsZTogJ21vYmlsZVB1c2hGaWxlJyxcbiAgICBwdWxsRmlsZTogJ21vYmlsZVB1bGxGaWxlJyxcbiAgICBwdWxsRm9sZGVyOiAnbW9iaWxlUHVsbEZvbGRlcicsXG4gICAgZGVsZXRlRmlsZTogJ21vYmlsZURlbGV0ZUZpbGUnLFxuXG4gICAgaXNBcHBJbnN0YWxsZWQ6ICdtb2JpbGVJc0FwcEluc3RhbGxlZCcsXG4gICAgcXVlcnlBcHBTdGF0ZTogJ21vYmlsZVF1ZXJ5QXBwU3RhdGUnLFxuICAgIGFjdGl2YXRlQXBwOiAnbW9iaWxlQWN0aXZhdGVBcHAnLFxuICAgIHJlbW92ZUFwcDogJ21vYmlsZVJlbW92ZUFwcCcsXG4gICAgdGVybWluYXRlQXBwOiAnbW9iaWxlVGVybWluYXRlQXBwJyxcbiAgICBpbnN0YWxsQXBwOiAnbW9iaWxlSW5zdGFsbEFwcCcsXG4gICAgY2xlYXJBcHA6ICdtb2JpbGVDbGVhckFwcCcsXG5cbiAgICBzdGFydFNlcnZpY2U6ICdtb2JpbGVTdGFydFNlcnZpY2UnLFxuICAgIHN0b3BTZXJ2aWNlOiAnbW9iaWxlU3RvcFNlcnZpY2UnLFxuICAgIHN0YXJ0QWN0aXZpdHk6ICdtb2JpbGVTdGFydEFjdGl2aXR5JyxcbiAgICBicm9hZGNhc3Q6ICdtb2JpbGVCcm9hZGNhc3QnLFxuXG4gICAgZ2V0Q29udGV4dHM6ICdtb2JpbGVHZXRDb250ZXh0cycsXG5cbiAgICB1bmxvY2s6ICdtb2JpbGVVbmxvY2snLFxuXG4gICAgcmVmcmVzaEdwc0NhY2hlOiAnbW9iaWxlUmVmcmVzaEdwc0NhY2hlJyxcblxuICAgIHN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nOiAnbW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuICAgIGlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZzogJ21vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZycsXG4gICAgc3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZzogJ21vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcnLFxuXG4gICAgZ2V0Q29ubmVjdGl2aXR5OiAnbW9iaWxlR2V0Q29ubmVjdGl2aXR5JyxcbiAgICBzZXRDb25uZWN0aXZpdHk6ICdtb2JpbGVTZXRDb25uZWN0aXZpdHknLFxuXG4gICAgaGlkZUtleWJvYXJkOiAnaGlkZUtleWJvYXJkJyxcbiAgICBpc0tleWJvYXJkU2hvd246ICdpc0tleWJvYXJkU2hvd24nLFxuICB9O1xuXG4gIGlmICghXy5oYXMobW9iaWxlQ29tbWFuZHNNYXBwaW5nLCBtb2JpbGVDb21tYW5kKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuVW5rbm93bkNvbW1hbmRFcnJvcihgVW5rbm93biBtb2JpbGUgY29tbWFuZCBcIiR7bW9iaWxlQ29tbWFuZH1cIi4gYCArXG4gICAgICBgT25seSAke18ua2V5cyhtb2JpbGVDb21tYW5kc01hcHBpbmcpfSBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLmApO1xuICB9XG4gIHJldHVybiBhd2FpdCB0aGlzW21vYmlsZUNvbW1hbmRzTWFwcGluZ1ttb2JpbGVDb21tYW5kXV0ob3B0cyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUVBLE1BQU1FLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFckJBLFVBQVUsQ0FBQ0MsT0FBTyxHQUFHLGVBQWVBLE9BQU9BLENBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFO0VBQ3pELElBQUlELE1BQU0sQ0FBQ0UsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQzVCLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxJQUFJLENBQUUsNkJBQTRCSixNQUFPLEdBQUUsQ0FBQztJQUNyREEsTUFBTSxHQUFHQSxNQUFNLENBQUNLLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUNDLElBQUksRUFBRTtJQUM5QyxPQUFPLE1BQU0sSUFBSSxDQUFDQyxhQUFhLENBQUNQLE1BQU0sRUFBRVEsZUFBQyxDQUFDQyxPQUFPLENBQUNSLElBQUksQ0FBQyxHQUFH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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","extensions","execute","script","args","match","log","info","replace","trim","executeMobile","_","isArray","isWebContext","errors","NotImplementedError","endpoint","chromedriver","jwproxy","downstreamProtocol","PROTOCOLS","MJSONWP","command","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","startLogsBroadcast","stopLogsBroadcast","changePermissions","getPermissions","performEditorAction","sensorSet","getDeviceTime","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startService","stopService","startActivity","broadcast","getContexts","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","getConnectivity","setConnectivity","has","UnknownCommandError","keys","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors, PROTOCOLS } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.execute = async function execute (script, args) {\n if (script.match(/^mobile:/)) {\n this.log.info(`Executing native command '${script}'`);\n script = script.replace(/^mobile:/, '').trim();\n return await this.executeMobile(script, _.isArray(args) ? args[0] : args);\n }\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n const endpoint = this.chromedriver.jwproxy.downstreamProtocol === PROTOCOLS.MJSONWP\n ? '/execute'\n : '/execute/sync';\n return await this.chromedriver.jwproxy.command(endpoint, 'POST', {\n script,\n args,\n });\n};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n sensorSet: 'sensorSet',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n startActivity: 'mobileStartActivity',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n\n getConnectivity: 'mobileGetConnectivity',\n setConnectivity: 'mobileSetConnectivity',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":";;;;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,UAAU,GAAG,CAAC,CAAC;AAErBA,UAAU,CAACC,OAAO,GAAG,eAAeA,OAAOA,CAAEC,MAAM,EAAEC,IAAI,EAAE;EACzD,IAAID,MAAM,CAACE,KAAK,CAAC,UAAU,CAAC,EAAE;IAC5B,IAAI,CAACC,GAAG,CAACC,IAAI,CAAE,6BAA4BJ,MAAO,GAAE,CAAC;IACrDA,MAAM,GAAGA,MAAM,CAACK,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAACC,IAAI,EAAE;IAC9C,OAAO,MAAM,IAAI,CAACC,aAAa,CAACP,MAAM,EAAEQ,eAAC,CAACC,OAAO,CAACR,IAAI,CAAC,GAAGA,IAAI,CAAC,CAAC,CAAC,GAAGA,IAAI,CAAC;EAC3E;EACA,IAAI,CAAC,IAAI,CAACS,YAAY,EAAE,EAAE;IACxB,MAAM,IAAIC,cAAM,CAACC,mBAAmB,EAAE;EACxC;EACA,MAAMC,QAAQ,GAAG,IAAI,CAACC,YAAY,CAACC,OAAO,CAACC,kBAAkB,KAAKC,iBAAS,CAACC,OAAO,GAC/E,UAAU,GACV,eAAe;EACnB,OAAO,MAAM,IAAI,CAACJ,YAAY,CAACC,OAAO,CAACI,OAAO,CAACN,QAAQ,EAAE,MAAM,EAAE;IAC/Db,MAAM;IACNC;EACF,CAAC,CAAC;AACJ,CAAC;AAEDH,UAAU,CAACS,aAAa,GAAG,eAAeA,aAAaA,CAAEa,aAAa,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACjF,MAAMC,qBAAqB,GAAG;IAC5BC,KAAK,EAAE,aAAa;IAEpBC,qBAAqB,EAAE,6BAA6B;IAEpDC,kBAAkB,EAAE,0BAA0B;IAC9CC,iBAAiB,EAAE,yBAAyB;IAE5CC,iBAAiB,EAAE,yBAAyB;IAC5CC,cAAc,EAAE,sBAAsB;IAEtCC,mBAAmB,EAAE,2BAA2B;IAEhDC,SAAS,EAAE,WAAW;IAEtBC,aAAa,EAAE,qBAAqB;IAEpCC,oBAAoB,EAAE,4BAA4B;IAClDC,mBAAmB,EAAE,2BAA2B;IAEhDC,gBAAgB,EAAE,wBAAwB;IAE1CC,OAAO,EAAE,eAAe;IAExBC,QAAQ,EAAE,gBAAgB;IAC1BC,QAAQ,EAAE,gBAAgB;IAC1BC,UAAU,EAAE,kBAAkB;IAC9BC,UAAU,EAAE,kBAAkB;IAE9BC,cAAc,EAAE,sBAAsB;IACtCC,aAAa,EAAE,qBAAqB;IACpCC,WAAW,EAAE,mBAAmB;IAChCC,SAAS,EAAE,iBAAiB;IAC5BC,YAAY,EAAE,oBAAoB;IAClCC,UAAU,EAAE,kBAAkB;IAC9BC,QAAQ,EAAE,gBAAgB;IAE1BC,YAAY,EAAE,oBAAoB;IAClCC,WAAW,EAAE,mBAAmB;IAChCC,aAAa,EAAE,qBAAqB;IACpCC,SAAS,EAAE,iBAAiB;IAE5BC,WAAW,EAAE,mBAAmB;IAEhCC,MAAM,EAAE,cAAc;IAEtBC,eAAe,EAAE,uBAAuB;IAExCC,6BAA6B,EAAE,qCAAqC;IACpEC,iCAAiC,EAAE,yCAAyC;IAC5EC,4BAA4B,EAAE,oCAAoC;IAElEC,eAAe,EAAE,uBAAuB;IACxCC,eAAe,EAAE;EACnB,CAAC;EAED,IAAI,
|
|
1
|
+
{"version":3,"file":"execute.js","names":["_lodash","_interopRequireDefault","require","_driver","extensions","execute","script","args","match","log","info","replace","trim","executeMobile","_","isArray","isWebContext","errors","NotImplementedError","endpoint","chromedriver","jwproxy","downstreamProtocol","PROTOCOLS","MJSONWP","command","mobileCommand","opts","mobileCommandsMapping","shell","execEmuConsoleCommand","startLogsBroadcast","stopLogsBroadcast","changePermissions","getPermissions","performEditorAction","sensorSet","getDeviceTime","startScreenStreaming","stopScreenStreaming","getNotifications","listSms","pushFile","pullFile","pullFolder","deleteFile","isAppInstalled","queryAppState","activateApp","removeApp","terminateApp","installApp","clearApp","startService","stopService","startActivity","broadcast","getContexts","unlock","refreshGpsCache","startMediaProjectionRecording","isMediaProjectionRecordingRunning","stopMediaProjectionRecording","getConnectivity","setConnectivity","hideKeyboard","isKeyboardShown","has","UnknownCommandError","keys","_default","exports","default"],"sources":["../../../lib/commands/execute.js"],"sourcesContent":["import _ from 'lodash';\nimport { errors, PROTOCOLS } from 'appium/driver';\n\nconst extensions = {};\n\nextensions.execute = async function execute (script, args) {\n if (script.match(/^mobile:/)) {\n this.log.info(`Executing native command '${script}'`);\n script = script.replace(/^mobile:/, '').trim();\n return await this.executeMobile(script, _.isArray(args) ? args[0] : args);\n }\n if (!this.isWebContext()) {\n throw new errors.NotImplementedError();\n }\n const endpoint = this.chromedriver.jwproxy.downstreamProtocol === PROTOCOLS.MJSONWP\n ? '/execute'\n : '/execute/sync';\n return await this.chromedriver.jwproxy.command(endpoint, 'POST', {\n script,\n args,\n });\n};\n\nextensions.executeMobile = async function executeMobile (mobileCommand, opts = {}) {\n const mobileCommandsMapping = {\n shell: 'mobileShell',\n\n execEmuConsoleCommand: 'mobileExecEmuConsoleCommand',\n\n startLogsBroadcast: 'mobileStartLogsBroadcast',\n stopLogsBroadcast: 'mobileStopLogsBroadcast',\n\n changePermissions: 'mobileChangePermissions',\n getPermissions: 'mobileGetPermissions',\n\n performEditorAction: 'mobilePerformEditorAction',\n\n sensorSet: 'sensorSet',\n\n getDeviceTime: 'mobileGetDeviceTime',\n\n startScreenStreaming: 'mobileStartScreenStreaming',\n stopScreenStreaming: 'mobileStopScreenStreaming',\n\n getNotifications: 'mobileGetNotifications',\n\n listSms: 'mobileListSms',\n\n pushFile: 'mobilePushFile',\n pullFile: 'mobilePullFile',\n pullFolder: 'mobilePullFolder',\n deleteFile: 'mobileDeleteFile',\n\n isAppInstalled: 'mobileIsAppInstalled',\n queryAppState: 'mobileQueryAppState',\n activateApp: 'mobileActivateApp',\n removeApp: 'mobileRemoveApp',\n terminateApp: 'mobileTerminateApp',\n installApp: 'mobileInstallApp',\n clearApp: 'mobileClearApp',\n\n startService: 'mobileStartService',\n stopService: 'mobileStopService',\n startActivity: 'mobileStartActivity',\n broadcast: 'mobileBroadcast',\n\n getContexts: 'mobileGetContexts',\n\n unlock: 'mobileUnlock',\n\n refreshGpsCache: 'mobileRefreshGpsCache',\n\n startMediaProjectionRecording: 'mobileStartMediaProjectionRecording',\n isMediaProjectionRecordingRunning: 'mobileIsMediaProjectionRecordingRunning',\n stopMediaProjectionRecording: 'mobileStopMediaProjectionRecording',\n\n getConnectivity: 'mobileGetConnectivity',\n setConnectivity: 'mobileSetConnectivity',\n\n hideKeyboard: 'hideKeyboard',\n isKeyboardShown: 'isKeyboardShown',\n };\n\n if (!_.has(mobileCommandsMapping, mobileCommand)) {\n throw new errors.UnknownCommandError(`Unknown mobile command \"${mobileCommand}\". ` +\n `Only ${_.keys(mobileCommandsMapping)} commands are supported.`);\n }\n return await this[mobileCommandsMapping[mobileCommand]](opts);\n};\n\nexport default extensions;\n"],"mappings":"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"}
|
|
@@ -52,15 +52,6 @@ commands.getPageSource = async function getPageSource() {
|
|
|
52
52
|
commands.back = async function back() {
|
|
53
53
|
return await this.bootstrap.sendAction('pressBack');
|
|
54
54
|
};
|
|
55
|
-
commands.isKeyboardShown = async function isKeyboardShown() {
|
|
56
|
-
const {
|
|
57
|
-
isKeyboardShown
|
|
58
|
-
} = await this.adb.isSoftKeyboardPresent();
|
|
59
|
-
return isKeyboardShown;
|
|
60
|
-
};
|
|
61
|
-
commands.hideKeyboard = async function hideKeyboard() {
|
|
62
|
-
return await this.adb.hideKeyboard();
|
|
63
|
-
};
|
|
64
55
|
commands.openSettingsActivity = async function openSettingsActivity(setting) {
|
|
65
56
|
let {
|
|
66
57
|
appPackage,
|
|
@@ -276,4 +267,4 @@ commands.mobileUnlock = async function mobileUnlock(opts = {}) {
|
|
|
276
267
|
Object.assign(extensions, commands, helpers);
|
|
277
268
|
var _default = extensions;
|
|
278
269
|
exports.default = _default;
|
|
279
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYW5kcm9pZEhlbHBlcnMiLCJfc3VwcG9ydCIsIl9tb21lbnQiLCJfYXN5bmNib3giLCJfZHJpdmVyIiwiTU9NRU5UX0ZPUk1BVF9JU084NjAxIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImV4cG9ydHMiLCJrZXlzIiwiXyIsImlzQXJyYXkiLCJqb2luIiwicGFyYW1zIiwidGV4dCIsInJlcGxhY2UiLCJvcHRzIiwidW5pY29kZUtleWJvYXJkIiwiZG9TZW5kS2V5cyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJnZXREZXZpY2VUaW1lIiwiZm9ybWF0IiwibG9nIiwiZGVidWciLCJkZXZpY2VUaW1lc3RhbXAiLCJhZGIiLCJzaGVsbCIsInRyaW0iLCJwYXJzZWRUaW1lc3RhbXAiLCJtb21lbnQiLCJ1dGMiLCJpc1ZhbGlkIiwid2FybiIsInV0Y09mZnNldCIsIl90em0iLCJtb2JpbGVHZXREZXZpY2VUaW1lIiwiZ2V0UGFnZVNvdXJjZSIsImJhY2siLCJpc0tleWJvYXJkU2hvd24iLCJpc1NvZnRLZXlib2FyZFByZXNlbnQiLCJoaWRlS2V5Ym9hcmQiLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsInNldHRpbmciLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5Iiwid2FpdEZvck5vdEFjdGl2aXR5IiwiZ2V0V2luZG93U2l6ZSIsImdldFdpbmRvd1JlY3QiLCJ3aWR0aCIsImhlaWdodCIsIngiLCJ5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZ2V0Q3VycmVudFBhY2thZ2UiLCJiYWNrZ3JvdW5kIiwic2Vjb25kcyIsImdvVG9Ib21lIiwic2xlZXBNcyIsInRocmVzaG9sZE1zIiwiaW50ZXJ2YWxNcyIsIm1pbiIsInBhcnNlSW50IiwicHJvZ3Jlc3NDYiIsImVsYXBzZWRNcyIsInByb2dyZXNzIiwid2FpdFNlY3MiLCJ0b0ZpeGVkIiwicHJvZ3Jlc3NQY3QiLCJsb25nU2xlZXAiLCJhcmdzIiwiX2NhY2hlZEFjdGl2aXR5QXJncyIsImFjdGl2YXRlQXBwIiwiaWduIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJzcGxpdCIsImluY2x1ZGVzIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInV0aWwiLCJmaWx0ZXJPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBcHAiLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsImFwa1N0cmluZ3MiLCJhbmRyb2lkSGVscGVycyIsInB1c2hTdHJpbmdzIiwibGF1bmNoQXBwIiwiaW5pdEFVVCIsInN0YXJ0QVVUIiwic3RhcnRBY3Rpdml0eSIsImRvbnRTdG9wQXBwT25SZXNldCIsImhhc1ZhbHVlIiwicmVzZXQiLCJyZXNldEFwcCIsIk9iamVjdCIsImFzc2lnbiIsImZhc3RSZXNldCIsInNldENvbnRleHQiLCJpc0Nocm9tZVNlc3Npb24iLCJzdGFydENocm9tZVNlc3Npb24iLCJzZXRVcmwiLCJ1cmkiLCJzdGFydFVyaSIsImNsb3NlQXBwIiwiZm9yY2VTdG9wIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJvdXQiLCJ2YWwiLCJpc05hTiIsImVycm9yQW5kVGhyb3ciLCJtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwibW9iaWxlR2V0Tm90aWZpY2F0aW9ucyIsImdldE5vdGlmaWNhdGlvbnMiLCJtb2JpbGVMaXN0U21zIiwiZ2V0U21zTGlzdCIsIm1vYmlsZVVubG9jayIsInR5cGUiLCJzdHJhdGVneSIsInRpbWVvdXRNcyIsInVubG9jayIsInVubG9ja0tleSIsInVubG9ja1R5cGUiLCJ1bmxvY2tTdHJhdGVneSIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBsb25nU2xlZXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgTU9NRU5UX0ZPUk1BVF9JU084NjAxID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5rZXlzID0gYXN5bmMgZnVuY3Rpb24ga2V5cyAoa2V5cykge1xuICAvLyBQcm90b2NvbCBzZW5kcyBhbiBhcnJheTsgcmV0aGluayBhcHByb2FjaFxuICBrZXlzID0gXy5pc0FycmF5KGtleXMpID8ga2V5cy5qb2luKCcnKSA6IGtleXM7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgdGV4dDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZVxuICB9O1xuICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCkge1xuICAgIHBhcmFtcy51bmljb2RlS2V5Ym9hcmQgPSB0cnVlO1xuICB9XG4gIGF3YWl0IHRoaXMuZG9TZW5kS2V5cyhwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZG9TZW5kS2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGRvU2VuZEtleXMgKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBkZXZpY2UncyB0aW1lc3RhbXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFRoZSBzZXQgb2YgZm9ybWF0IHNwZWNpZmllcnMuIFJlYWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyB0byBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSBmb3JtYXQgc3BlY2lmaWVycy4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYFlZWVktTU0tRERUSEg6bW06c3NaYCwgd2hpY2ggY29tcGxpZXMgdG8gSVNPLTg2MDFcbiAqIEByZXR1cm4ge3N0cmluZ30gRm9ybWF0dGVkIGRhdGV0aW1lIHN0cmluZyBvciB0aGUgcmF3IGNvbW1hbmQgb3V0cHV0IGlmIGZvcm1hdHRpbmcgZmFpbHNcbiAqL1xuY29tbWFuZHMuZ2V0RGV2aWNlVGltZSA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVRpbWUgKGZvcm1hdCA9IE1PTUVOVF9GT1JNQVRfSVNPODYwMSkge1xuICB0aGlzLmxvZy5kZWJ1ZygnQXR0ZW1wdGluZyB0byBjYXB0dXJlIGFuZHJvaWQgZGV2aWNlIGRhdGUgYW5kIHRpbWUuICcgK1xuICAgIGBUaGUgZm9ybWF0IHNwZWNpZmllciBpcyAnJHtmb3JtYXR9J2ApO1xuICBjb25zdCBkZXZpY2VUaW1lc3RhbXAgPSAoYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydkYXRlJywgJyslWS0lbS0lZFQlVCV6J10pKS50cmltKCk7XG4gIHRoaXMubG9nLmRlYnVnKGBHb3QgZGV2aWNlIHRpbWVzdGFtcDogJHtkZXZpY2VUaW1lc3RhbXB9YCk7XG4gIGNvbnN0IHBhcnNlZFRpbWVzdGFtcCA9IG1vbWVudC51dGMoZGV2aWNlVGltZXN0YW1wLCAnWVlZWS1NTS1ERFRISDptbTpzc1paJyk7XG4gIGlmICghcGFyc2VkVGltZXN0YW1wLmlzVmFsaWQoKSkge1xuICAgIHRoaXMubG9nLndhcm4oJ0Nhbm5vdCBwYXJzZSB0aGUgcmV0dXJuZWQgdGltZXN0YW1wLiBSZXR1cm5pbmcgYXMgaXMnKTtcbiAgICByZXR1cm4gZGV2aWNlVGltZXN0YW1wO1xuICB9XG4gIHJldHVybiBwYXJzZWRUaW1lc3RhbXAudXRjT2Zmc2V0KHBhcnNlZFRpbWVzdGFtcC5fdHptIHx8IDApLmZvcm1hdChmb3JtYXQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VUaW1lT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGZvcm1hdCBbWVlZWS1NTS1ERFRISDptbTpzc1pdIC0gU2VlIGdldERldmljZVRpbWUjZm9ybWF0XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWVcbiAqXG4gKiBAcGFyYW0ge0RldmljZVRpbWVPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VUaW1lIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlVGltZShvcHRzLmZvcm1hdCk7XG59O1xuXG5jb21tYW5kcy5nZXRQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzb3VyY2UnKTtcbn07XG5cbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiBiYWNrICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzQmFjaycpO1xufTtcblxuY29tbWFuZHMuaXNLZXlib2FyZFNob3duID0gYXN5bmMgZnVuY3Rpb24gaXNLZXlib2FyZFNob3duICgpIHtcbiAgY29uc3Qge2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmFkYi5pc1NvZnRLZXlib2FyZFByZXNlbnQoKTtcbiAgcmV0dXJuIGlzS2V5Ym9hcmRTaG93bjtcbn07XG5cbmNvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5oaWRlS2V5Ym9hcmQoKTtcbn07XG5cbmNvbW1hbmRzLm9wZW5TZXR0aW5nc0FjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gb3BlblNldHRpbmdzQWN0aXZpdHkgKHNldHRpbmcpIHtcbiAgbGV0IHthcHBQYWNrYWdlLCBhcHBBY3Rpdml0eX0gPSBhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCk7XG4gIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnYW0nLCAnc3RhcnQnLCAnLWEnLCBgYW5kcm9pZC5zZXR0aW5ncy4ke3NldHRpbmd9YF0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yTm90QWN0aXZpdHkoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIDUwMDApO1xufTtcblxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1NpemUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZ2V0RGV2aWNlU2l6ZScpO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1JlY3QgKCkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRBY3Rpdml0eSAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpKS5hcHBBY3Rpdml0eTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRQYWNrYWdlID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudFBhY2thZ2UgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwUGFja2FnZTtcbn07XG5cbmNvbW1hbmRzLmJhY2tncm91bmQgPSBhc3luYyBmdW5jdGlvbiBiYWNrZ3JvdW5kIChzZWNvbmRzKSB7XG4gIGlmIChzZWNvbmRzIDwgMCkge1xuICAgIC8vIGlmIHVzZXIgcGFzc2VzIGluIGEgbmVnYXRpdmUgc2Vjb25kcyB2YWx1ZSwgaW50ZXJwcmV0IHRoYXQgYXMgdGhlIGluc3RydWN0aW9uXG4gICAgLy8gdG8gbm90IGJyaW5nIHRoZSBhcHAgYmFjayBhdCBhbGxcbiAgICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuXG4gIC8vIHBlb3BsZSBjYW4gd2FpdCBmb3IgYSBsb25nIHRpbWUsIHNvIHRvIGJlIHNhZmUgbGV0J3MgdXNlIHRoZSBsb25nU2xlZXAgZnVuY3Rpb24gYW5kIGxvZ1xuICAvLyBwcm9ncmVzcyBwZXJpb2RpY2FsbHkuXG4gIGNvbnN0IHNsZWVwTXMgPSBzZWNvbmRzICogMTAwMDtcbiAgY29uc3QgdGhyZXNob2xkTXMgPSAzMCAqIDEwMDA7IC8vIHVzZSB0aGUgc3Bpbi13YWl0IGZvciBhbnl0aGluZyBvdmVyIHRoaXMgdGhyZXNob2xkXG4gIC8vIGZvciBvdXIgc3BpbiBpbnRlcnZhbCwgdXNlIDElIG9mIHRoZSB0b3RhbCB3YWl0IHRpbWUsIGJ1dCBub3RoaW5nIGJpZ2dlciB0aGFuIDMwc1xuICBjb25zdCBpbnRlcnZhbE1zID0gXy5taW4oWzMwICogMTAwMCwgcGFyc2VJbnQoc2xlZXBNcyAvIDEwMCwgMTApXSk7XG4gIGNvbnN0IHByb2dyZXNzQ2IgPSAoe2VsYXBzZWRNcywgcHJvZ3Jlc3N9KSA9PiB7XG4gICAgY29uc3Qgd2FpdFNlY3MgPSAoZWxhcHNlZE1zIC8gMTAwMCkudG9GaXhlZCgwKTtcbiAgICBjb25zdCBwcm9ncmVzc1BjdCA9IChwcm9ncmVzcyAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgV2FpdGVkICR7d2FpdFNlY3N9cyBzbyBmYXIgKCR7cHJvZ3Jlc3NQY3R9JSlgKTtcbiAgfTtcbiAgYXdhaXQgbG9uZ1NsZWVwKHNsZWVwTXMsIHt0aHJlc2hvbGRNcywgaW50ZXJ2YWxNcywgcHJvZ3Jlc3NDYn0pO1xuXG4gIGxldCBhcmdzO1xuICBpZiAodGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzICYmIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcHBQYWNrYWdlfS8ke2FwcEFjdGl2aXR5fWBdKSB7XG4gICAgLy8gdGhlIGFjdGl2aXR5IHdhcyBzdGFydGVkIHdpdGggYHN0YXJ0QWN0aXZpdHlgLCBzbyB1c2UgdGhvc2UgYXJncyB0byByZXN0YXJ0XG4gICAgYXJncyA9IHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJnc1tgJHthcHBQYWNrYWdlfS8ke2FwcEFjdGl2aXR5fWBdO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZy5kZWJ1ZyhgQWN0aXZhdGluZyBhcHAgJyR7YXBwUGFja2FnZX0nIGluIG9yZGVyIHRvIHJlc3RvcmUgaXRgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAoYXBwUGFja2FnZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgYXJncyA9ICgoYXBwUGFja2FnZSA9PT0gdGhpcy5vcHRzLmFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkgPT09IHRoaXMub3B0cy5hcHBBY3Rpdml0eSkgfHxcbiAgICAgICAgICAgIChhcHBQYWNrYWdlID09PSB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UgJiYgKHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgJycpLnNwbGl0KCcsJykuaW5jbHVkZXMoYXBwQWN0aXZpdHkpKSlcbiAgICAgID8gey8vIHRoZSBhY3Rpdml0eSBpcyB0aGUgb3JpZ2luYWwgc2Vzc2lvbiBhY3Rpdml0eSwgc28gdXNlIHRoZSBvcmlnaW5hbCBhcmdzXG4gICAgICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSxcbiAgICAgICAgZmxhZ3M6IHRoaXMub3B0cy5pbnRlbnRGbGFncyxcbiAgICAgICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgICAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgICAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGV9XG4gICAgICA6IHsvLyB0aGUgYWN0aXZpdHkgd2FzIHN0YXJ0ZWQgc29tZSBvdGhlciB3YXksIHNvIHVzZSBkZWZhdWx0c1xuICAgICAgICBwa2c6IGFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICAgICAgd2FpdFBrZzogYXBwUGFja2FnZSxcbiAgICAgICAgd2FpdEFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICAgICAgc3RvcEFwcDogZmFsc2V9O1xuICB9XG4gIGFyZ3MgPSBhd2FpdCB1dGlsLmZpbHRlck9iamVjdChhcmdzKTtcbiAgdGhpcy5sb2cuZGVidWcoYEJyaW5naW5nIGFwcGxpY2F0aW9uIGJhY2sgdG8gZm9yZWdyb3VuZCB3aXRoIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN0cmluZ3MgKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgdGhpcy5sb2cuaW5mbyhgTm8gbGFuZ3VhZ2Ugc3BlY2lmaWVkLCByZXR1cm5pbmcgc3RyaW5ncyBmb3I6ICR7bGFuZ3VhZ2V9YCk7XG4gIH1cblxuICAvLyBDbGllbnRzIHJlcXVpcmUgdGhlIHJlc3VsdGluZyBtYXBwaW5nIHRvIGhhdmUgYm90aCBrZXlzXG4gIC8vIGFuZCB2YWx1ZXMgb2YgdHlwZSBzdHJpbmdcbiAgY29uc3QgcHJlcHJvY2Vzc1N0cmluZ3NNYXAgPSAobWFwcGluZykgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIF8udG9QYWlycyhtYXBwaW5nKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBfLmlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGlmICh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKSB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBzdHJpbmdzXG4gICAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xuICB9XG5cbiAgdGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSA9IGF3YWl0IGFuZHJvaWRIZWxwZXJzLnB1c2hTdHJpbmdzKGxhbmd1YWdlLCB0aGlzLmFkYiwgdGhpcy5vcHRzKTtcbiAgaWYgKHRoaXMuYm9vdHN0cmFwKSB7XG4gICAgLy8gVE9ETzogVGhpcyBpcyBtdXRhdGluZyB0aGUgY3VycmVudCBsYW5ndWFnZSwgYnV0IGl0J3MgaG93IGFwcGl1bSBjdXJyZW50bHkgd29ya3NcbiAgICBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCd1cGRhdGVTdHJpbmdzJyk7XG4gIH1cblxuICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSk7XG59O1xuXG5jb21tYW5kcy5sYXVuY2hBcHAgPSBhc3luYyBmdW5jdGlvbiBsYXVuY2hBcHAgKCkge1xuICBhd2FpdCB0aGlzLmluaXRBVVQoKTtcbiAgYXdhaXQgdGhpcy5zdGFydEFVVCgpO1xufTtcblxuY29tbWFuZHMuc3RhcnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0QWN0aXZpdHkgKGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LFxuICBhcHBXYWl0UGFja2FnZSwgYXBwV2FpdEFjdGl2aXR5LCBpbnRlbnRBY3Rpb24sIGludGVudENhdGVnb3J5LCBpbnRlbnRGbGFncyxcbiAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsIGRvbnRTdG9wQXBwT25SZXNldCkge1xuICB0aGlzLmxvZy5kZWJ1ZyhgU3RhcnRpbmcgcGFja2FnZSAnJHthcHBQYWNrYWdlfScgYW5kIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fSdgKTtcblxuICAvLyBkb250U3RvcEFwcE9uUmVzZXQgaXMgYm90aCBhbiBhcmd1bWVudCBoZXJlLCBhbmQgYSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAgLy8gaWYgdGhlIGFyZ3VtZW50IGlzIHNldCwgdXNlIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBjYXBcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGRvbnRTdG9wQXBwT25SZXNldCkpIHtcbiAgICBkb250U3RvcEFwcE9uUmVzZXQgPSAhIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQ7XG4gIH1cblxuICBsZXQgYXJncyA9IHtcbiAgICBwa2c6IGFwcFBhY2thZ2UsXG4gICAgYWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgIHdhaXRQa2c6IGFwcFdhaXRQYWNrYWdlIHx8IGFwcFBhY2thZ2UsXG4gICAgd2FpdEFjdGl2aXR5OiBhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksXG4gICAgYWN0aW9uOiBpbnRlbnRBY3Rpb24sXG4gICAgY2F0ZWdvcnk6IGludGVudENhdGVnb3J5LFxuICAgIGZsYWdzOiBpbnRlbnRGbGFncyxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBzdG9wQXBwOiAhZG9udFN0b3BBcHBPblJlc2V0XG4gIH07XG4gIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyA9IHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyB8fCB7fTtcbiAgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzW2Ake2FyZ3Mud2FpdFBrZ30vJHthcmdzLndhaXRBY3Rpdml0eX1gXSA9IGFyZ3M7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtmYXN0UmVzZXQ6IHRydWV9KSk7XG4gIC8vIHJlc2V0IGNvbnRleHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb24gY29udGV4dCB3ZSB3aWxsIGVuZCB1cCBhZnRlciBhcHAgbGF1bmNoLlxuICBhd2FpdCB0aGlzLnNldENvbnRleHQoKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuaXNDaHJvbWVTZXNzaW9uID8gdGhpcy5zdGFydENocm9tZVNlc3Npb24oKSA6IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QVVUID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBVVQgKCkge1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcCh7XG4gICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbixcbiAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MsXG4gICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICB3YWl0Rm9yTGF1bmNoOiB0aGlzLm9wdHMuYXBwV2FpdEZvckxhdW5jaCxcbiAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBzdG9wQXBwOiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCxcbiAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gIH0pO1xufTtcblxuLy8gd2Ugb3ZlcnJpZGUgc2V0VXJsIHRvIHRha2UgYW4gYW5kcm9pZCBVUkkgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGRlZXAtbGlua2luZ1xuLy8gaW5zaWRlIGFuIGFwcCwgc2ltaWxhciB0byBzdGFydGluZyBhbiBpbnRlbnRcbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uIHNldFVybCAodXJpKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVyaSwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xufTtcblxuLy8gY2xvc2luZyBhcHAgdXNpbmcgZm9yY2Ugc3RvcFxuY29tbWFuZHMuY2xvc2VBcHAgPSBhc3luYyBmdW5jdGlvbiBjbG9zZUFwcCAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gIC8vIHJlc2V0IGNvbnRleHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb24gY29udGV4dCB3ZSB3aWxsIGVuZCB1cCBhZnRlciBhcHAgbGF1bmNoLlxuICBhd2FpdCB0aGlzLnNldENvbnRleHQoKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICAvLyBmaXJzdCB0cnkgdGhlIHByb3BlcnR5IGZvciBkZXZpY2VzXG4gIGxldCBvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2dldHByb3AnLCAncm8uc2YubGNkX2RlbnNpdHknXSk7XG4gIGlmIChvdXQpIHtcbiAgICBsZXQgdmFsID0gcGFyc2VJbnQob3V0LCAxMCk7XG4gICAgLy8gaWYgdGhlIHZhbHVlIGlzIE5hTiwgdHJ5IGdldHRpbmcgdGhlIGVtdWxhdG9yIHByb3BlcnR5XG4gICAgaWYgKCFpc05hTih2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIGRlbnNpdHkgdmFsdWUgd2FzIE5hTjogXCIke291dH1cImApO1xuICB9XG4gIC8vIGZhbGxiYWNrIHRvIHRyeWluZyBwcm9wZXJ0eSBmb3IgZW11bGF0b3JzXG4gIG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZ2V0cHJvcCcsICdxZW11LnNmLmxjZF9kZW5zaXR5J10pO1xuICBpZiAob3V0KSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KG91dCwgMTApO1xuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgdGhpcy5sb2cuZGVidWcoYFBhcnNlZCBkZW5zaXR5IHZhbHVlIHdhcyBOYU46IFwiJHtvdXR9XCJgKTtcbiAgfVxuICAvLyBjb3VsZG4ndCBnZXQgYW55dGhpbmcsIHNvIGVycm9yIG91dFxuICB0aGlzLmxvZy5lcnJvckFuZFRocm93KCdGYWlsZWQgdG8gZ2V0IGRpc3BsYXkgZGVuc2l0eSBwcm9wZXJ0eS4nKTtcbn07XG5cbmNvbW1hbmRzLm1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIChvcHRzID0ge30pIHtcbiAgY29uc3Qge2FjdGlvbn0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUoYWN0aW9uKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYCdhY3Rpb24nIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmFkYi5wZXJmb3JtRWRpdG9yQWN0aW9uKGFjdGlvbik7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiByZWNlbnQgc3lzdGVtIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIGBhZGIuZ2V0Tm90aWZpY2F0aW9uc2AgZm9yXG4gKiBtb3JlIGRldGFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0Tm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUdldE5vdGlmaWNhdGlvbnMgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZ2V0Tm90aWZpY2F0aW9ucygpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTbXNMaXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heCBbMTAwXSAtIFRoZSBtYXhpbXVtIGNvdW50IG9mIHJlY2VudCBTTVMgbWVzc2FnZXNcbiAqIHRvIHJldHJpZXZlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcmVjZW50IFNNUyBtZXNzYWdlcyB3aXRoIHRoZWlyIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtTbXNMaXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIGBhZGIuZ2V0U21zTGlzdGAgZm9yXG4gKiBtb3JlIGRldGFpbHNcbiAqL1xuY29tbWFuZHMubW9iaWxlTGlzdFNtcyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUxpc3RTbXMgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuZ2V0U21zTGlzdChvcHRzKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gVW5sb2NrT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleSBUaGUgdW5sb2NrIGtleS4gVGhlIHZhbHVlIG9mIHRoaXMga2V5IGRlcGVuZHNcbiAqIG9uIHRoZSBhY3R1YWwgdW5sb2NrIHR5cGUgYW5kIGNvdWxkIGJlIGEgcGluL3Bhc3N3b3JkL3BhdHRlcm4gdmFsdWUgb3JcbiAqIGEgYmlvbWV0cmljIGZpbmdlciBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSB1bmxvY2sgdHlwZS4gVGhlIGZvbGxvd2luZyB1bmxvY2sgdHlwZXNcbiAqIGFyZSBzdXBwb3J0ZWQ6IGBwaW5gLCBgcGluV2l0aEtleUV2ZW50YCwgYHBhc3N3b3JkYCwgYHBhdHRlcm5gIGFuZCBgZmluZ2VycHJpbnRgLlxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzdHJhdGVneSBFaXRoZXIgJ2xvY2tzZXR0aW5ncycgKGRlZmF1bHQpIG9yICd1aWF1dG9tYXRvcicuXG4gKiBTZXR0aW5nIGl0IHRvICd1aWF1dG9tYXRvcicgd2lsbCBlbmZvcmNlIHRoZSBkcml2ZXIgdG8gYXZvaWQgdXNpbmcgc3BlY2lhbFxuICogQURCIHNob3J0Y3V0cyBpbiBvcmRlciB0byBzcGVlZCB1cCB0aGUgdW5sb2NrIHByb2NlZHVyZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcn0gdGltZW91dE1zIFsyMDAwXSBUaGUgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgc2NyZWVuIGdldHMgdW5sb2NrZWRcbiAqL1xuXG4vKipcbiAqIFVubG9ja3MgdGhlIGRldmljZSBpZiBpdCBpcyBsb2NrZWQuIE5vb3AgaWYgdGhlIGRldmljZSdzIHNjcmVlbiBpcyBub3QgbG9ja2VkLlxuICpcbiAqIEBwYXJhbSB7P1VubG9ja09wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB1bmxvY2sgb3BlcmF0aW9uIGZhaWxzIG9yIHRoZSBwcm92aWRlZFxuICogYXJndW1lbnRzIGFyZSBub3QgdmFsaWRcbiAqL1xuY29tbWFuZHMubW9iaWxlVW5sb2NrID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlVW5sb2NrIChvcHRzID0ge30pIHtcbiAgY29uc3QgeyBrZXksIHR5cGUsIHN0cmF0ZWd5LCB0aW1lb3V0TXMgfSA9IG9wdHM7XG4gIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnVubG9jayh0aGlzLCB0aGlzLmFkYiwge1xuICAgIHVubG9ja0tleToga2V5LFxuICAgIHVubG9ja1R5cGU6IHR5cGUsXG4gICAgdW5sb2NrU3RyYXRlZ3k6IHN0cmF0ZWd5LFxuICAgIHVubG9ja1N1Y2Nlc3NUaW1lb3V0OiB0aW1lb3V0TXMsXG4gIH0pO1xufTtcblxuT2JqZWN0LmFzc2lnbihleHRlbnNpb25zLCBjb21tYW5kcywgaGVscGVycyk7XG5leHBvcnQgeyBjb21tYW5kcywgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxlQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFFQSxNQUFNTSxxQkFBcUIsR0FBRyxzQkFBc0I7QUFFcEQsSUFBSUMsUUFBUSxHQUFHLENBQUMsQ0FBQztFQUFFQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFBQ0MsT0FBQSxDQUFBRixPQUFBLEdBQUFBLE9BQUE7QUFBQUUsT0FBQSxDQUFBSCxRQUFBLEdBQUFBLFFBQUE7QUFFakRBLFFBQVEsQ0FBQ0ksSUFBSSxHQUFHLGVBQWVBLElBQUlBLENBQUVBLElBQUksRUFBRTtFQUV6Q0EsSUFBSSxHQUFHQyxlQUFDLENBQUNDLE9BQU8sQ0FBQ0YsSUFBSSxDQUFDLEdBQUdBLElBQUksQ0FBQ0csSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHSCxJQUFJO0VBQzdDLElBQUlJLE1BQU0sR0FBRztJQUNYQyxJQUFJLEVBQUVMLElBQUk7SUFDVk0sT0FBTyxFQUFFO0VBQ1gsQ0FBQztFQUNELElBQUksSUFBSSxDQUFDQyxJ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
|
|
270
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYW5kcm9pZEhlbHBlcnMiLCJfc3VwcG9ydCIsIl9tb21lbnQiLCJfYXN5bmNib3giLCJfZHJpdmVyIiwiTU9NRU5UX0ZPUk1BVF9JU084NjAxIiwiY29tbWFuZHMiLCJoZWxwZXJzIiwiZXh0ZW5zaW9ucyIsImV4cG9ydHMiLCJrZXlzIiwiXyIsImlzQXJyYXkiLCJqb2luIiwicGFyYW1zIiwidGV4dCIsInJlcGxhY2UiLCJvcHRzIiwidW5pY29kZUtleWJvYXJkIiwiZG9TZW5kS2V5cyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJnZXREZXZpY2VUaW1lIiwiZm9ybWF0IiwibG9nIiwiZGVidWciLCJkZXZpY2VUaW1lc3RhbXAiLCJhZGIiLCJzaGVsbCIsInRyaW0iLCJwYXJzZWRUaW1lc3RhbXAiLCJtb21lbnQiLCJ1dGMiLCJpc1ZhbGlkIiwid2FybiIsInV0Y09mZnNldCIsIl90em0iLCJtb2JpbGVHZXREZXZpY2VUaW1lIiwiZ2V0UGFnZVNvdXJjZSIsImJhY2siLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsInNldHRpbmciLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5Iiwid2FpdEZvck5vdEFjdGl2aXR5IiwiZ2V0V2luZG93U2l6ZSIsImdldFdpbmRvd1JlY3QiLCJ3aWR0aCIsImhlaWdodCIsIngiLCJ5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZ2V0Q3VycmVudFBhY2thZ2UiLCJiYWNrZ3JvdW5kIiwic2Vjb25kcyIsImdvVG9Ib21lIiwic2xlZXBNcyIsInRocmVzaG9sZE1zIiwiaW50ZXJ2YWxNcyIsIm1pbiIsInBhcnNlSW50IiwicHJvZ3Jlc3NDYiIsImVsYXBzZWRNcyIsInByb2dyZXNzIiwid2FpdFNlY3MiLCJ0b0ZpeGVkIiwicHJvZ3Jlc3NQY3QiLCJsb25nU2xlZXAiLCJhcmdzIiwiX2NhY2hlZEFjdGl2aXR5QXJncyIsImFjdGl2YXRlQXBwIiwiaWduIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJzcGxpdCIsImluY2x1ZGVzIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInV0aWwiLCJmaWx0ZXJPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBcHAiLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsImFwa1N0cmluZ3MiLCJhbmRyb2lkSGVscGVycyIsInB1c2hTdHJpbmdzIiwibGF1bmNoQXBwIiwiaW5pdEFVVCIsInN0YXJ0QVVUIiwic3RhcnRBY3Rpdml0eSIsImRvbnRTdG9wQXBwT25SZXNldCIsImhhc1ZhbHVlIiwicmVzZXQiLCJyZXNldEFwcCIsIk9iamVjdCIsImFzc2lnbiIsImZhc3RSZXNldCIsInNldENvbnRleHQiLCJpc0Nocm9tZVNlc3Npb24iLCJzdGFydENocm9tZVNlc3Npb24iLCJzZXRVcmwiLCJ1cmkiLCJzdGFydFVyaSIsImNsb3NlQXBwIiwiZm9yY2VTdG9wIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJvdXQiLCJ2YWwiLCJpc05hTiIsImVycm9yQW5kVGhyb3ciLCJtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwibW9iaWxlR2V0Tm90aWZpY2F0aW9ucyIsImdldE5vdGlmaWNhdGlvbnMiLCJtb2JpbGVMaXN0U21zIiwiZ2V0U21zTGlzdCIsIm1vYmlsZVVubG9jayIsInR5cGUiLCJzdHJhdGVneSIsInRpbWVvdXRNcyIsInVubG9jayIsInVubG9ja0tleSIsInVubG9ja1R5cGUiLCJ1bmxvY2tTdHJhdGVneSIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0IiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL2dlbmVyYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBhbmRyb2lkSGVscGVycyBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBsb25nU2xlZXAgfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdhcHBpdW0vZHJpdmVyJztcblxuY29uc3QgTU9NRU5UX0ZPUk1BVF9JU084NjAxID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5rZXlzID0gYXN5bmMgZnVuY3Rpb24ga2V5cyAoa2V5cykge1xuICAvLyBQcm90b2NvbCBzZW5kcyBhbiBhcnJheTsgcmV0aGluayBhcHByb2FjaFxuICBrZXlzID0gXy5pc0FycmF5KGtleXMpID8ga2V5cy5qb2luKCcnKSA6IGtleXM7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgdGV4dDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZVxuICB9O1xuICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCkge1xuICAgIHBhcmFtcy51bmljb2RlS2V5Ym9hcmQgPSB0cnVlO1xuICB9XG4gIGF3YWl0IHRoaXMuZG9TZW5kS2V5cyhwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZG9TZW5kS2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGRvU2VuZEtleXMgKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBkZXZpY2UncyB0aW1lc3RhbXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFRoZSBzZXQgb2YgZm9ybWF0IHNwZWNpZmllcnMuIFJlYWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyB0byBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSBmb3JtYXQgc3BlY2lmaWVycy4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYFlZWVktTU0tRERUSEg6bW06c3NaYCwgd2hpY2ggY29tcGxpZXMgdG8gSVNPLTg2MDFcbiAqIEByZXR1cm4ge3N0cmluZ30gRm9ybWF0dGVkIGRhdGV0aW1lIHN0cmluZyBvciB0aGUgcmF3IGNvbW1hbmQgb3V0cHV0IGlmIGZvcm1hdHRpbmcgZmFpbHNcbiAqL1xuY29tbWFuZHMuZ2V0RGV2aWNlVGltZSA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVRpbWUgKGZvcm1hdCA9IE1PTUVOVF9GT1JNQVRfSVNPODYwMSkge1xuICB0aGlzLmxvZy5kZWJ1ZygnQXR0ZW1wdGluZyB0byBjYXB0dXJlIGFuZHJvaWQgZGV2aWNlIGRhdGUgYW5kIHRpbWUuICcgK1xuICAgIGBUaGUgZm9ybWF0IHNwZWNpZmllciBpcyAnJHtmb3JtYXR9J2ApO1xuICBjb25zdCBkZXZpY2VUaW1lc3RhbXAgPSAoYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydkYXRlJywgJyslWS0lbS0lZFQlVCV6J10pKS50cmltKCk7XG4gIHRoaXMubG9nLmRlYnVnKGBHb3QgZGV2aWNlIHRpbWVzdGFtcDogJHtkZXZpY2VUaW1lc3RhbXB9YCk7XG4gIGNvbnN0IHBhcnNlZFRpbWVzdGFtcCA9IG1vbWVudC51dGMoZGV2aWNlVGltZXN0YW1wLCAnWVlZWS1NTS1ERFRISDptbTpzc1paJyk7XG4gIGlmICghcGFyc2VkVGltZXN0YW1wLmlzVmFsaWQoKSkge1xuICAgIHRoaXMubG9nLndhcm4oJ0Nhbm5vdCBwYXJzZSB0aGUgcmV0dXJuZWQgdGltZXN0YW1wLiBSZXR1cm5pbmcgYXMgaXMnKTtcbiAgICByZXR1cm4gZGV2aWNlVGltZXN0YW1wO1xuICB9XG4gIHJldHVybiBwYXJzZWRUaW1lc3RhbXAudXRjT2Zmc2V0KHBhcnNlZFRpbWVzdGFtcC5fdHptIHx8IDApLmZvcm1hdChmb3JtYXQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VUaW1lT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGZvcm1hdCBbWVlZWS1NTS1ERFRISDptbTpzc1pdIC0gU2VlIGdldERldmljZVRpbWUjZm9ybWF0XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWVcbiAqXG4gKiBAcGFyYW0ge0RldmljZVRpbWVPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VUaW1lIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlVGltZShvcHRzLmZvcm1hdCk7XG59O1xuXG5jb21tYW5kcy5nZXRQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzb3VyY2UnKTtcbn07XG5cbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiBiYWNrICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzQmFjaycpO1xufTtcblxuY29tbWFuZHMub3BlblNldHRpbmdzQWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBvcGVuU2V0dGluZ3NBY3Rpdml0eSAoc2V0dGluZykge1xuICBsZXQge2FwcFBhY2thZ2UsIGFwcEFjdGl2aXR5fSA9IGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKTtcbiAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydhbScsICdzdGFydCcsICctYScsIGBhbmRyb2lkLnNldHRpbmdzLiR7c2V0dGluZ31gXSk7XG4gIGF3YWl0IHRoaXMuYWRiLndhaXRGb3JOb3RBY3Rpdml0eShhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSwgNTAwMCk7XG59O1xuXG5jb21tYW5kcy5nZXRXaW5kb3dTaXplID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93U2l6ZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdnZXREZXZpY2VTaXplJyk7XG59O1xuXG4vLyBGb3IgVzNDXG5jb21tYW5kcy5nZXRXaW5kb3dSZWN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0V2luZG93UmVjdCAoKSB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgdGhpcy5nZXRXaW5kb3dTaXplKCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xufTtcblxuY29tbWFuZHMuZ2V0Q3VycmVudEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudEFjdGl2aXR5ICgpIHtcbiAgcmV0dXJuIChhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCkpLmFwcEFjdGl2aXR5O1xufTtcblxuY29tbWFuZHMuZ2V0Q3VycmVudFBhY2thZ2UgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50UGFja2FnZSAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpKS5hcHBQYWNrYWdlO1xufTtcblxuY29tbWFuZHMuYmFja2dyb3VuZCA9IGFzeW5jIGZ1bmN0aW9uIGJhY2tncm91bmQgKHNlY29uZHMpIHtcbiAgaWYgKHNlY29uZHMgPCAwKSB7XG4gICAgLy8gaWYgdXNlciBwYXNzZXMgaW4gYSBuZWdhdGl2ZSBzZWNvbmRzIHZhbHVlLCBpbnRlcnByZXQgdGhhdCBhcyB0aGUgaW5zdHJ1Y3Rpb25cbiAgICAvLyB0byBub3QgYnJpbmcgdGhlIGFwcCBiYWNrIGF0IGFsbFxuICAgIGF3YWl0IHRoaXMuYWRiLmdvVG9Ib21lKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgbGV0IHthcHBQYWNrYWdlLCBhcHBBY3Rpdml0eX0gPSBhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCk7XG4gIGF3YWl0IHRoaXMuYWRiLmdvVG9Ib21lKCk7XG5cbiAgLy8gcGVvcGxlIGNhbiB3YWl0IGZvciBhIGxvbmcgdGltZSwgc28gdG8gYmUgc2FmZSBsZXQncyB1c2UgdGhlIGxvbmdTbGVlcCBmdW5jdGlvbiBhbmQgbG9nXG4gIC8vIHByb2dyZXNzIHBlcmlvZGljYWxseS5cbiAgY29uc3Qgc2xlZXBNcyA9IHNlY29uZHMgKiAxMDAwO1xuICBjb25zdCB0aHJlc2hvbGRNcyA9IDMwICogMTAwMDsgLy8gdXNlIHRoZSBzcGluLXdhaXQgZm9yIGFueXRoaW5nIG92ZXIgdGhpcyB0aHJlc2hvbGRcbiAgLy8gZm9yIG91ciBzcGluIGludGVydmFsLCB1c2UgMSUgb2YgdGhlIHRvdGFsIHdhaXQgdGltZSwgYnV0IG5vdGhpbmcgYmlnZ2VyIHRoYW4gMzBzXG4gIGNvbnN0IGludGVydmFsTXMgPSBfLm1pbihbMzAgKiAxMDAwLCBwYXJzZUludChzbGVlcE1zIC8gMTAwLCAxMCldKTtcbiAgY29uc3QgcHJvZ3Jlc3NDYiA9ICh7ZWxhcHNlZE1zLCBwcm9ncmVzc30pID0+IHtcbiAgICBjb25zdCB3YWl0U2VjcyA9IChlbGFwc2VkTXMgLyAxMDAwKS50b0ZpeGVkKDApO1xuICAgIGNvbnN0IHByb2dyZXNzUGN0ID0gKHByb2dyZXNzICogMTAwKS50b0ZpeGVkKDIpO1xuICAgIHRoaXMubG9nLmRlYnVnKGBXYWl0ZWQgJHt3YWl0U2Vjc31zIHNvIGZhciAoJHtwcm9ncmVzc1BjdH0lKWApO1xuICB9O1xuICBhd2FpdCBsb25nU2xlZXAoc2xlZXBNcywge3RocmVzaG9sZE1zLCBpbnRlcnZhbE1zLCBwcm9ncmVzc0NifSk7XG5cbiAgbGV0IGFyZ3M7XG4gIGlmICh0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3MgJiYgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzW2Ake2FwcFBhY2thZ2V9LyR7YXBwQWN0aXZpdHl9YF0pIHtcbiAgICAvLyB0aGUgYWN0aXZpdHkgd2FzIHN0YXJ0ZWQgd2l0aCBgc3RhcnRBY3Rpdml0eWAsIHNvIHVzZSB0aG9zZSBhcmdzIHRvIHJlc3RhcnRcbiAgICBhcmdzID0gdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzW2Ake2FwcFBhY2thZ2V9LyR7YXBwQWN0aXZpdHl9YF07XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBBY3RpdmF0aW5nIGFwcCAnJHthcHBQYWNrYWdlfScgaW4gb3JkZXIgdG8gcmVzdG9yZSBpdGApO1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmF0ZUFwcChhcHBQYWNrYWdlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICBhcmdzID0gKChhcHBQYWNrYWdlID09PSB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiBhcHBBY3Rpdml0eSA9PT0gdGhpcy5vcHRzLmFwcEFjdGl2aXR5KSB8fFxuICAgICAgICAgICAgKGFwcFBhY2thZ2UgPT09IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSAmJiAodGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSB8fCAnJykuc3BsaXQoJywnKS5pbmNsdWRlcyhhcHBBY3Rpdml0eSkpKVxuICAgICAgPyB7Ly8gdGhlIGFjdGl2aXR5IGlzIHRoZSBvcmlnaW5hbCBzZXNzaW9uIGFjdGl2aXR5LCBzbyB1c2UgdGhlIG9yaWdpbmFsIGFyZ3NcbiAgICAgICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgICAgc3RvcEFwcDogZmFsc2UsXG4gICAgICAgIHVzZXI6IHRoaXMub3B0cy51c2VyUHJvZmlsZX1cbiAgICAgIDogey8vIHRoZSBhY3Rpdml0eSB3YXMgc3RhcnRlZCBzb21lIG90aGVyIHdheSwgc28gdXNlIGRlZmF1bHRzXG4gICAgICAgIHBrZzogYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgICAgICB3YWl0UGtnOiBhcHBQYWNrYWdlLFxuICAgICAgICB3YWl0QWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgICAgICBzdG9wQXBwOiBmYWxzZX07XG4gIH1cbiAgYXJncyA9IGF3YWl0IHV0aWwuZmlsdGVyT2JqZWN0KGFyZ3MpO1xuICB0aGlzLmxvZy5kZWJ1ZyhgQnJpbmdpbmcgYXBwbGljYXRpb24gYmFjayB0byBmb3JlZ3JvdW5kIHdpdGggYXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoYXJncyk7XG59O1xuXG5jb21tYW5kcy5nZXRTdHJpbmdzID0gYXN5bmMgZnVuY3Rpb24gZ2V0U3RyaW5ncyAobGFuZ3VhZ2UpIHtcbiAgaWYgKCFsYW5ndWFnZSkge1xuICAgIGxhbmd1YWdlID0gYXdhaXQgdGhpcy5hZGIuZ2V0RGV2aWNlTGFuZ3VhZ2UoKTtcbiAgICB0aGlzLmxvZy5pbmZvKGBObyBsYW5ndWFnZSBzcGVjaWZpZWQsIHJldHVybmluZyBzdHJpbmdzIGZvcjogJHtsYW5ndWFnZX1gKTtcbiAgfVxuXG4gIC8vIENsaWVudHMgcmVxdWlyZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcgdG8gaGF2ZSBib3RoIGtleXNcbiAgLy8gYW5kIHZhbHVlcyBvZiB0eXBlIHN0cmluZ1xuICBjb25zdCBwcmVwcm9jZXNzU3RyaW5nc01hcCA9IChtYXBwaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IF8uaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgaWYgKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIHN0cmluZ3NcbiAgICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSk7XG4gIH1cblxuICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMucHVzaFN0cmluZ3MobGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICBpZiAodGhpcy5ib290c3RyYXApIHtcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG11dGF0aW5nIHRoZSBjdXJyZW50IGxhbmd1YWdlLCBidXQgaXQncyBob3cgYXBwaXVtIGN1cnJlbnRseSB3b3Jrc1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3VwZGF0ZVN0cmluZ3MnKTtcbiAgfVxuXG4gIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbn07XG5cbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuICBhd2FpdCB0aGlzLnN0YXJ0QVVUKCk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBY3Rpdml0eSAoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksXG4gIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHksIGludGVudEFjdGlvbiwgaW50ZW50Q2F0ZWdvcnksIGludGVudEZsYWdzLFxuICBvcHRpb25hbEludGVudEFyZ3VtZW50cywgZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gIHRoaXMubG9nLmRlYnVnKGBTdGFydGluZyBwYWNrYWdlICcke2FwcFBhY2thZ2V9JyBhbmQgYWN0aXZpdHkgJyR7YXBwQWN0aXZpdHl9J2ApO1xuXG4gIC8vIGRvbnRTdG9wQXBwT25SZXNldCBpcyBib3RoIGFuIGFyZ3VtZW50IGhlcmUsIGFuZCBhIGRlc2lyZWQgY2FwYWJpbGl0eVxuICAvLyBpZiB0aGUgYXJndW1lbnQgaXMgc2V0LCB1c2UgaXQsIG90aGVyd2lzZSB1c2UgdGhlIGNhcFxuICBpZiAoIXV0aWwuaGFzVmFsdWUoZG9udFN0b3BBcHBPblJlc2V0KSkge1xuICAgIGRvbnRTdG9wQXBwT25SZXNldCA9ICEhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldDtcbiAgfVxuXG4gIGxldCBhcmdzID0ge1xuICAgIHBrZzogYXBwUGFja2FnZSxcbiAgICBhY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgd2FpdFBrZzogYXBwV2FpdFBhY2thZ2UgfHwgYXBwUGFja2FnZSxcbiAgICB3YWl0QWN0aXZpdHk6IGFwcFdhaXRBY3Rpdml0eSB8fCBhcHBBY3Rpdml0eSxcbiAgICBhY3Rpb246IGludGVudEFjdGlvbixcbiAgICBjYXRlZ29yeTogaW50ZW50Q2F0ZWdvcnksXG4gICAgZmxhZ3M6IGludGVudEZsYWdzLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIHN0b3BBcHA6ICFkb250U3RvcEFwcE9uUmVzZXRcbiAgfTtcbiAgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzID0gdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzIHx8IHt9O1xuICB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXJncy53YWl0UGtnfS8ke2FyZ3Mud2FpdEFjdGl2aXR5fWBdID0gYXJncztcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoYXJncyk7XG59O1xuXG5jb21tYW5kcy5yZXNldCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0ICgpIHtcbiAgYXdhaXQgYW5kcm9pZEhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0cywge2Zhc3RSZXNldDogdHJ1ZX0pKTtcbiAgLy8gcmVzZXQgY29udGV4dCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQga2luZCBvbiBjb250ZXh0IHdlIHdpbGwgZW5kIHVwIGFmdGVyIGFwcCBsYXVuY2guXG4gIGF3YWl0IHRoaXMuc2V0Q29udGV4dCgpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pc0Nocm9tZVNlc3Npb24gPyB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpIDogdGhpcy5zdGFydEFVVCgpO1xufTtcblxuY29tbWFuZHMuc3RhcnRBVVQgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFVVCAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICBwa2c6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgIGNhdGVnb3J5OiB0aGlzLm9wdHMuaW50ZW50Q2F0ZWdvcnksXG4gICAgZmxhZ3M6IHRoaXMub3B0cy5pbnRlbnRGbGFncyxcbiAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgd2FpdEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5LFxuICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50czogdGhpcy5vcHRzLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIHN0b3BBcHA6ICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0LFxuICAgIHVzZXI6IHRoaXMub3B0cy51c2VyUHJvZmlsZSxcbiAgfSk7XG59O1xuXG4vLyB3ZSBvdmVycmlkZSBzZXRVcmwgdG8gdGFrZSBhbiBhbmRyb2lkIFVSSSB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZGVlcC1saW5raW5nXG4vLyBpbnNpZGUgYW4gYXBwLCBzaW1pbGFyIHRvIHN0YXJ0aW5nIGFuIGludGVudFxuY29tbWFuZHMuc2V0VXJsID0gYXN5bmMgZnVuY3Rpb24gc2V0VXJsICh1cmkpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJpLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vLyBjbG9zaW5nIGFwcCB1c2luZyBmb3JjZSBzdG9wXG5jb21tYW5kcy5jbG9zZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGNsb3NlQXBwICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgLy8gcmVzZXQgY29udGV4dCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQga2luZCBvbiBjb250ZXh0IHdlIHdpbGwgZW5kIHVwIGFmdGVyIGFwcCBsYXVuY2guXG4gIGF3YWl0IHRoaXMuc2V0Q29udGV4dCgpO1xufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIC8vIGZpcnN0IHRyeSB0aGUgcHJvcGVydHkgZm9yIGRldmljZXNcbiAgbGV0IG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZ2V0cHJvcCcsICdyby5zZi5sY2RfZGVuc2l0eSddKTtcbiAgaWYgKG91dCkge1xuICAgIGxldCB2YWwgPSBwYXJzZUludChvdXQsIDEwKTtcbiAgICAvLyBpZiB0aGUgdmFsdWUgaXMgTmFOLCB0cnkgZ2V0dGluZyB0aGUgZW11bGF0b3IgcHJvcGVydHlcbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHRoaXMubG9nLmRlYnVnKGBQYXJzZWQgZGVuc2l0eSB2YWx1ZSB3YXMgTmFOOiBcIiR7b3V0fVwiYCk7XG4gIH1cbiAgLy8gZmFsbGJhY2sgdG8gdHJ5aW5nIHByb3BlcnR5IGZvciBlbXVsYXRvcnNcbiAgb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydnZXRwcm9wJywgJ3FlbXUuc2YubGNkX2RlbnNpdHknXSk7XG4gIGlmIChvdXQpIHtcbiAgICBsZXQgdmFsID0gcGFyc2VJbnQob3V0LCAxMCk7XG4gICAgaWYgKCFpc05hTih2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB0aGlzLmxvZy5kZWJ1ZyhgUGFyc2VkIGRlbnNpdHkgdmFsdWUgd2FzIE5hTjogXCIke291dH1cImApO1xuICB9XG4gIC8vIGNvdWxkbid0IGdldCBhbnl0aGluZywgc28gZXJyb3Igb3V0XG4gIHRoaXMubG9nLmVycm9yQW5kVGhyb3coJ0ZhaWxlZCB0byBnZXQgZGlzcGxheSBkZW5zaXR5IHByb3BlcnR5LicpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IG9wdHM7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShhY3Rpb24pKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJ2FjdGlvbicgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuXG4gIGF3YWl0IHRoaXMuYWRiLnBlcmZvcm1FZGl0b3JBY3Rpb24oYWN0aW9uKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHJlY2VudCBzeXN0ZW0gbm90aWZpY2F0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYGFkYi5nZXROb3RpZmljYXRpb25zYCBmb3JcbiAqIG1vcmUgZGV0YWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5nZXROb3RpZmljYXRpb25zKCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNtc0xpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4IFsxMDBdIC0gVGhlIG1heGltdW0gY291bnQgb2YgcmVjZW50IFNNUyBtZXNzYWdlc1xuICogdG8gcmV0cmlldmVcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiByZWNlbnQgU01TIG1lc3NhZ2VzIHdpdGggdGhlaXIgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge1Ntc0xpc3RPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYGFkYi5nZXRTbXNMaXN0YCBmb3JcbiAqIG1vcmUgZGV0YWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVMaXN0U21zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdFNtcyAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5nZXRTbXNMaXN0KG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmxvY2tPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5IFRoZSB1bmxvY2sga2V5LiBUaGUgdmFsdWUgb2YgdGhpcyBrZXkgZGVwZW5kc1xuICogb24gdGhlIGFjdHVhbCB1bmxvY2sgdHlwZSBhbmQgY291bGQgYmUgYSBwaW4vcGFzc3dvcmQvcGF0dGVybiB2YWx1ZSBvclxuICogYSBiaW9tZXRyaWMgZmluZ2VyIGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgVGhlIHVubG9jayB0eXBlLiBUaGUgZm9sbG93aW5nIHVubG9jayB0eXBlc1xuICogYXJlIHN1cHBvcnRlZDogYHBpbmAsIGBwaW5XaXRoS2V5RXZlbnRgLCBgcGFzc3dvcmRgLCBgcGF0dGVybmAgYW5kIGBmaW5nZXJwcmludGAuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHN0cmF0ZWd5IEVpdGhlciAnbG9ja3NldHRpbmdzJyAoZGVmYXVsdCkgb3IgJ3VpYXV0b21hdG9yJy5cbiAqIFNldHRpbmcgaXQgdG8gJ3VpYXV0b21hdG9yJyB3aWxsIGVuZm9yY2UgdGhlIGRyaXZlciB0byBhdm9pZCB1c2luZyBzcGVjaWFsXG4gKiBBREIgc2hvcnRjdXRzIGluIG9yZGVyIHRvIHNwZWVkIHVwIHRoZSB1bmxvY2sgcHJvY2VkdXJlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0aW1lb3V0TXMgWzIwMDBdIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gKiB0byB3YWl0IHVudGlsIHRoZSBzY3JlZW4gZ2V0cyB1bmxvY2tlZFxuICovXG5cbi8qKlxuICogVW5sb2NrcyB0aGUgZGV2aWNlIGlmIGl0IGlzIGxvY2tlZC4gTm9vcCBpZiB0aGUgZGV2aWNlJ3Mgc2NyZWVuIGlzIG5vdCBsb2NrZWQuXG4gKlxuICogQHBhcmFtIHs/VW5sb2NrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHVubG9jayBvcGVyYXRpb24gZmFpbHMgb3IgdGhlIHByb3ZpZGVkXG4gKiBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVbmxvY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGtleSwgdHlwZSwgc3RyYXRlZ3ksIHRpbWVvdXRNcyB9ID0gb3B0cztcbiAgYXdhaXQgYW5kcm9pZEhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB7XG4gICAgdW5sb2NrS2V5OiBrZXksXG4gICAgdW5sb2NrVHlwZTogdHlwZSxcbiAgICB1bmxvY2tTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHRpbWVvdXRNcyxcbiAgfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGVBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQUVBLE1BQU1NLHFCQUFxQixHQUFHLHNCQUFzQjtBQUVwRCxJQUFJQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0VBQUVDLE9BQU8sR0FBRyxDQUFDLENBQUM7RUFBRUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFGLE9BQUEsR0FBQUEsT0FBQTtBQUFBRSxPQUFBLENBQUFILFFBQUEsR0FBQUEsUUFBQTtBQUVqREEsUUFBUSxDQUFDSSxJQUFJLEdBQUcsZUFBZUEsSUFBSUEsQ0FBRUEsSUFBSSxFQUFFO0VBRXpDQSxJQUFJLEdBQUdDLGVBQUMsQ0FBQ0MsT0FBTyxDQUFDRixJQUFJLENBQUMsR0FBR0EsSUFBSSxDQUFDRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUdILElBQUk7RUFDN0MsSUFBSUksTUFBTSxHQUFHO0lBQ1hDLElBQUksRUFBRUwsSUFBSTtJQUNWTSxPQUFPLEVBQUU7RUFDWCxDQUFDO0VBQ0QsSUFBSSxJQUFJLENBQUNDLElBQUksQ0FBQ0MsZUFBZSxFQUFFO0lBQzdCSixNQUFNLENBQUNJLGVBQWUsR0FBRyxJQUFJO0VBQy9CO0VBQ0EsTUFBTSxJQUFJLENBQUNDLFVBQVUsQ0FBQ0wsTUFBTSxDQUFDO0FBQy9CLENBQUM7QUFFRFIsUUFBUSxDQUFDYSxVQUFVLEdBQUcsZUFBZUEsVUFBVUEsQ0FBRUwsTUFBTSxFQUFFO0VBQ3ZELE9BQU8sTUFBTSxJQUFJLENBQUNNLFNBQVMsQ0FBQ0MsVUFBVSxDQUFDLFNBQVMsRUFBRVAsTUFBTSxDQUFDO0FBQzNELENBQUM7QUFXRFIsUUFBUSxDQUFDZ0IsYUFBYSxHQUFHLGVBQWVBLGFBQWFBLENBQUVDLE1BQU0sR0FBR2xCLHFCQUFxQixFQUFFO0VBQ3JGLElBQUksQ0FBQ21CLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLHNEQUFzRCxHQUNsRSw0QkFBMkJGLE1BQU8sR0FBRSxDQUFDO0VBQ3hDLE1BQU1HLGVBQWUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDQyxHQUFHLENBQUNDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUVDLElBQUksRUFBRTtFQUNqRixJQUFJLENBQUNMLEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLHlCQUF3QkMsZUFBZ0IsRUFBQyxDQUFDO0VBQzFELE1BQU1JLGVBQWUsR0FBR0MsZUFBTSxDQUFDQyxHQUFHLENBQUNOLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQztFQUM1RSxJQUFJLENBQUNJLGVBQWUsQ0FBQ0csT0FBTyxFQUFFLEVBQUU7SUFDOUIsSUFBSSxDQUFDVCxHQUFHLENBQUNVLElBQUksQ0FBQyxzREFBc0QsQ0FBQztJQUNyRSxPQUFPUixlQUFlO0VBQ3hCO0VBQ0EsT0FBT0ksZUFBZSxDQUFDSyxTQUFTLENBQUNMLGVBQWUsQ0FBQ00sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDYixNQUFNLENBQUNBLE1BQU0sQ0FBQztBQUM1RSxDQUFDO0FBYURqQixRQUFRLENBQUMrQixtQkFBbUIsR0FBRyxlQUFlQSxtQkFBbUJBLENBQUVwQixJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDNUUsT0FBTyxNQUFNLElBQUksQ0FBQ0ssYUFBYSxDQUFDTCxJQUFJLENBQUNNLE1BQU0sQ0FBQztBQUM5QyxDQUFDO0FBRURqQixRQUFRLENBQUNnQyxhQUFhLEdBQUcsZUFBZUEsYUFBYUEsQ0FBQSxFQUFJO0VBQ3ZELE9BQU8sTUFBTSxJQUFJLENBQUNsQixTQUFTLENBQUNDLFVBQVUsQ0FBQyxRQUFRLENBQUM7QUFDbEQsQ0FBQztBQUVEZixRQUFRLENBQUNpQyxJQUFJLEdBQUcsZUFBZUEsSUFBSUEsQ0FBQSxFQUFJO0VBQ3JDLE9BQU8sTUFBTSxJQUFJLENBQUNuQixTQUFTLENBQUNDLFVBQVUsQ0FBQyxXQUFXLENBQUM7QUFDckQsQ0FBQztBQUVEZixRQUFRLENBQUNrQyxvQkFBb0IsR0FBRyxlQUFlQSxvQkFBb0JBLENBQUVDLE9BQU8sRUFBRTtFQUM1RSxJQUFJO0lBQUNDLFVBQVU7SUFBRUM7RUFBVyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNoQixHQUFHLENBQUNpQiw0QkFBNEIsRUFBRTtFQUM3RSxNQUFNLElBQUksQ0FBQ2pCLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUcsb0JBQW1CYSxPQUFRLEVBQUMsQ0FBQyxDQUFDO0VBQzFFLE1BQU0sSUFBSSxDQUFDZCxHQUFHLENBQUNrQixrQkFBa0IsQ0FBQ0gsVUFBVSxFQUFFQyxXQUFXLEVBQUUsSUFBSSxDQUFDO0FBQ2xFLENBQUM7QUFFRHJDLFFBQVEsQ0FBQ3dDLGFBQWEsR0FBRyxlQUFlQSxhQUFhQSxDQUFBLEVBQUk7RUFDdkQsT0FBTyxNQUFNLElBQUksQ0FBQzFCLFNBQVMsQ0FBQ0MsVUFBVSxDQUFDLGVBQWUsQ0FBQztBQUN6RCxDQUFDO0FBR0RmLFFBQVEsQ0FBQ3lDLGFBQWEsR0FBRyxlQUFlQSxhQUFhQSxDQUFBLEVBQUk7RUFDdkQsTUFBTTtJQUFFQyxLQUFLO0lBQUVDO0VBQU8sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDSCxhQUFhLEVBQUU7RUFDcEQsT0FBTztJQUNMRSxLQUFLO0lBQ0xDLE1BQU07SUFDTkMsQ0FBQyxFQUFFLENBQUM7SUFDSkMsQ0FBQyxFQUFFO0VBQ0wsQ0FBQztBQUNILENBQUM7QUFFRDdDLFFBQVEsQ0FBQzhDLGtCQUFrQixHQUFHLGVBQWVBLGtCQUFrQkEsQ0FBQSxFQUFJO0VBQ2pFLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQ3pCLEdBQUcsQ0FBQ2lCLDRCQUE0QixFQUFFLEVBQUVELFdBQVc7QUFDcEUsQ0FBQztBQUVEckMsUUFBUSxDQUFDK0MsaUJBQWlCLEdBQUcsZUFBZUEsaUJBQWlCQSxDQUFBLEVBQUk7RUFDL0QsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDMUIsR0FBRyxDQUFDaUIsNEJBQTRCLEVBQUUsRUFBRUYsVUFBVTtBQUNuRSxDQUFDO0FBRURwQyxRQUFRLENBQUNnRCxVQUFVLEdBQUcsZUFBZUEsVUFBVUEsQ0FBRUMsT0FBTyxFQUFFO0VBQ3hELElBQUlBLE9BQU8sR0FBRyxDQUFDLEVBQUU7SUFHZixNQUFNLElBQUksQ0FBQzVCLEdBQUcsQ0FBQzZCLFFBQVEsRUFBRTtJQUN6QixPQUFPLElBQUk7RUFDYjtFQUNBLElBQUk7SUFBQ2QsVUFBVTtJQUFFQztFQUFXLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQ2hCLEdBQUcsQ0FBQ2lCLDRCQUE0QixFQUFFO0VBQzdFLE1BQU0sSUFBSSxDQUFDakIsR0FBRyxDQUFDNkIsUUFBUSxFQUFFO0VBSXpCLE1BQU1DLE9BQU8sR0FBR0YsT0FBTyxHQUFHLElBQUk7RUFDOUIsTUFBTUcsV0FBVyxHQUFHLEVBQUUsR0FBRyxJQUFJO0VBRTdCLE1BQU1DLFVBQVUsR0FBR2hELGVBQUMsQ0FBQ2lELEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUVDLFFBQVEsQ0FBQ0osT0FBTyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ2xFLE1BQU1LLFVBQVUsR0FBR0EsQ0FBQztJQUFDQyxTQUFTO0lBQUVDO0VBQVEsQ0FBQyxLQUFLO0lBQzVDLE1BQU1DLFFBQVEsR0FBRyxDQUFDRixTQUFTLEdBQUcsSUFBSSxFQUFFRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlDLE1BQU1DLFdBQVcsR0FBRyxDQUFDSCxRQUFRLEdBQUcsR0FBRyxFQUFFRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQzFDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFFLFVBQVN3QyxRQUFTLGFBQVlFLFdBQVksSUFBRyxDQUFDO0VBQ2hFLENBQUM7RUFDRCxNQUFNLElBQUFDLG1CQUFTLEVBQUNYLE9BQU8sRUFBRTtJQUFDQyxXQUFXO0lBQUVDLFVBQVU7SUFBRUc7RUFBVSxDQUFDLENBQUM7RUFFL0QsSUFBSU8sSUFBSTtFQUNSLElBQUksSUFBSSxDQUFDQyxtQkFBbUIsSUFBSSxJQUFJLENBQUNBLG1CQUFtQixDQUFFLEdBQUU1QixVQUFXLElBQUdDLFdBQVksRUFBQyxDQUFDLEVBQUU7SUFFeEYwQixJQUFJLEdBQUcsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBRSxHQUFFNUIsVUFBVyxJQUFHQyxXQUFZLEVBQUMsQ0FBQztFQUNqRSxDQUFDLE1BQU07SUFDTCxJQUFJO01BQ0YsSUFBSSxDQUFDbkIsR0FBRyxDQUFDQyxLQUFLLENBQUUsbUJBQWtCaUIsVUFBVywwQkFBeUIsQ0FBQztNQUN2RSxNQUFNLElBQUksQ0FBQzZCLFdBQVcsQ0FBQzdCLFVBQVUsQ0FBQztNQUNsQyxPQUFPLElBQUk7SUFDYixDQUFDLENBQUMsT0FBTzhCLEdBQUcsRUFBRSxDQUFDO0lBQ2ZILElBQUksR0FBSzNCLFVBQVUsS0FBSyxJQUFJLENBQUN6QixJQUFJLENBQUN5QixVQUFVLElBQUlDLFdBQVcsS0FBSyxJQUFJLENBQUMxQixJQUFJLENBQUMwQixXQUFXLElBQzVFRCxVQUFVLEtBQUssSUFBSSxDQUFDekIsSUFBSSxDQUFDd0QsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDeEQsSUFBSSxDQUFDeUQsZUFBZSxJQUFJLEVBQUUsRUFBRUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxRQUFRLENBQUNqQyxXQUFXLENBQUUsR0FDbkg7TUFDQWtDLEdBQUcsRUFBRSxJQUFJLENBQUM1RCxJQUFJLENBQUN5QixVQUFVO01BQ3pCb0MsUUFBUSxFQUFFLElBQUksQ0FBQzdELElBQUksQ0FBQzBCLFdBQVc7TUFDL0JvQyxNQUFNLEVBQUUsSUFBSSxDQUFDOUQsSUFBSSxDQUFDK0QsWUFBWTtNQUM5QkMsUUFBUSxFQUFFLElBQUksQ0FBQ2hFLElBQUksQ0FBQ2lFLGNBQWM7TUFDbENDLEtBQUssRUFBRSxJQUFJLENBQUNsRSxJQUFJLENBQUNtRSxXQUFXO01BQzVCQyxPQUFPLEVBQUUsSUFBSSxDQUFDcEUsSUFBSSxDQUFDd0QsY0FBYztNQUNqQ2EsWUFBWSxFQUFFLElBQUksQ0FBQ3JFLElBQUksQ0FBQ3lELGVBQWU7TUFDdkNhLGFBQWEsRUFBRSxJQUFJLENBQUN0RSxJQUFJLENBQUN1RSxnQkFBZ0I7TUFDekNDLFlBQVksRUFBRSxJQUFJLENBQUN4RSxJQUFJLENBQUN5RSxlQUFlO01BQ3ZDQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMxRSxJQUFJLENBQUMwRSx1QkFBdUI7TUFDMURDLE9BQU8sRUFBRSxLQUFLO01BQ2RDLElBQUksRUFBRSxJQUFJLENBQUM1RSxJQUFJLENBQUM2RTtJQUFXLENBQUMsR0FDNUI7TUFDQWpCLEdBQUcsRUFBRW5DLFVBQVU7TUFDZm9DLFFBQVEsRUFBRW5DLFdBQVc7TUFDckIwQyxPQUFPLEVBQUUzQyxVQUFVO01BQ25CNEMsWUFBWSxFQUFFM0MsV0FBVztNQUN6QmlELE9BQU8sRUFBRTtJQUFLLENBQUM7RUFDckI7RUFDQXZCLElBQUksR0FBRyxNQUFNMEIsYUFBSSxDQUFDQyxZQUFZLENBQUMzQixJQUFJLENBQUM7RUFDcEMsSUFBSSxDQUFDN0MsR0FBRyxDQUFDQyxLQUFLLENBQUUsMkRBQTBEd0UsSUFBSSxDQUFDQyxTQUFTLENBQUM3QixJQUFJLENBQUUsRUFBQyxDQUFDO0VBQ2pHLE9BQU8sTUFBTSxJQUFJLENBQUMxQyxHQUFHLENBQUN3RSxRQUFRLENBQUM5QixJQUFJLENBQUM7QUFDdEMsQ0FBQztBQUVEL0QsUUFBUSxDQUFDOEYsVUFBVSxHQUFHLGVBQWVBLFVBQVVBLENBQUVDLFFBQVEsRUFBRTtFQUN6RCxJQUFJLENBQUNBLFFBQVEsRUFBRTtJQUNiQSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMxRSxHQUFHLENBQUMyRSxpQkFBaUIsRUFBRTtJQUM3QyxJQUFJLENBQUM5RSxHQUFHLENBQUMrRSxJQUFJLENBQUUsaURBQWdERixRQUFTLEVBQUMsQ0FBQztFQUM1RTtFQUlBLE1BQU1HLG9CQUFvQixHQUFJQyxPQUFPLElBQUs7SUFDeEMsTUFBTUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqQixLQUFLLE1BQU0sQ0FBQ0MsR0FBRyxFQUFFQyxLQUFLLENBQUMsSUFBSWpHLGVBQUMsQ0FBQ2tHLE9BQU8sQ0FBQ0osT0FBTyxDQUFDLEVBQUU7TUFDN0NDLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLEdBQUdoRyxlQUFDLENBQUNtRyxRQUFRLENBQUNGLEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUdYLElBQUksQ0FBQ0MsU0FBUyxDQUFDVSxLQUFLLENBQUM7SUFDakU7SUFDQSxPQUFPRixNQUFNO0VBQ2YsQ0FBQztFQUVELElBQUksSUFBSSxDQUFDSyxVQUFVLENBQUNWLFFBQVEsQ0FBQyxFQUFFO0lBRTdCLE9BQU9HLG9CQUFvQixDQUFDLElBQUksQ0FBQ08sVUFBVSxDQUFDVixRQUFRLENBQUMsQ0FBQztFQUN4RDtFQUVBLElBQUksQ0FBQ1UsVUFBVSxDQUFDVixRQUFRLENBQUMsR0FBRyxNQUFNVyx1QkFBYyxDQUFDQyxXQUFXLENBQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMxRSxHQUFHLEVBQUUsSUFBSSxDQUFDVixJQUFJLENBQUM7RUFDM0YsSUFBSSxJQUFJLENBQUNHLFNBQVMsRUFBRTtJQUVsQixNQUFNLElBQUksQ0FBQ0EsU0FBUyxDQUFDQyxVQUFVLENBQUMsZUFBZSxDQUFDO0VBQ2xEO0VBRUEsT0FBT21GLG9CQUFvQixDQUFDLElBQUksQ0FBQ08sVUFBVSxDQUFDVixRQUFRLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQvRixRQUFRLENBQUM0RyxTQUFTLEdBQUcsZUFBZUEsU0FBU0EsQ0FBQSxFQUFJO0VBQy9DLE1BQU0sSUFBSSxDQUFDQyxPQUFPLEVBQUU7RUFDcEIsTUFBTSxJQUFJLENBQUNDLFFBQVEsRUFBRTtBQUN2QixDQUFDO0FBRUQ5RyxRQUFRLENBQUMrRyxhQUFhLEdBQUcsZUFBZUEsYUFBYUEsQ0FBRTNFLFVBQVUsRUFBRUMsV0FBVyxFQUM1RThCLGNBQWMsRUFBRUMsZUFBZSxFQUFFTSxZQUFZLEVBQUVFLGNBQWMsRUFBRUUsV0FBVyxFQUMxRU8sdUJBQXVCLEVBQUUyQixrQkFBa0IsRUFBRTtFQUM3QyxJQUFJLENBQUM5RixHQUFHLENBQUNDLEtBQUssQ0FBRSxxQkFBb0JpQixVQUFXLG1CQUFrQkMsV0FBWSxHQUFFLENBQUM7RUFJaEYsSUFBSSxDQUFDb0QsYUFBSSxDQUFDd0IsUUFBUSxDQUFDRCxrQkFBa0IsQ0FBQyxFQUFFO0lBQ3RDQSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDckcsSUFBSSxDQUFDcUcsa0JBQWtCO0VBQ3JEO0VBRUEsSUFBSWpELElBQUksR0FBRztJQUNUUSxHQUFHLEVBQUVuQyxVQUFVO0lBQ2ZvQyxRQUFRLEVBQUVuQyxXQUFXO0lBQ3JCMEMsT0FBTyxFQUFFWixjQUFjLElBQUkvQixVQUFVO0lBQ3JDNEMsWUFBWSxFQUFFWixlQUFlLElBQUkvQixXQUFXO0lBQzVDb0MsTUFBTSxFQUFFQyxZQUFZO0lBQ3BCQyxRQUFRLEVBQUVDLGNBQWM7SUFDeEJDLEtBQUssRUFBRUMsV0FBVztJQUNsQk8sdUJBQXVCO0lBQ3ZCQyxPQUFPLEVBQUUsQ0FBQzBCO0VBQ1osQ0FBQztFQUNELElBQUksQ0FBQ2hELG1CQUFtQixHQUFHLElBQUksQ0FBQ0EsbUJBQW1CLElBQUksQ0FBQyxDQUFDO0VBQ3pELElBQUksQ0FBQ0EsbUJBQW1CLENBQUUsR0FBRUQsSUFBSSxDQUFDZ0IsT0FBUSxJQUFHaEIsSUFBSSxDQUFDaUIsWUFBYSxFQUFDLENBQUMsR0FBR2pCLElBQUk7RUFDdkUsTUFBTSxJQUFJLENBQUMxQyxHQUFHLENBQUN3RSxRQUFRLENBQUM5QixJQUFJLENBQUM7QUFDL0IsQ0FBQztBQUVEL0QsUUFBUSxDQUFDa0gsS0FBSyxHQUFHLGVBQWVBLEtBQUtBLENBQUEsRUFBSTtFQUN2QyxNQUFNUix1QkFBYyxDQUFDUyxRQUFRLENBQUMsSUFBSSxDQUFDOUYsR0FBRyxFQUFFK0YsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDMUcsSUFBSSxFQUFFO0lBQUMyRyxTQUFTLEVBQUU7RUFBSSxDQUFDLENBQUMsQ0FBQztFQUV4RixNQUFNLElBQUksQ0FBQ0MsVUFBVSxFQUFFO0VBQ3ZCLE9BQU8sT0FBTSxJQUFJLENBQUNDLGVBQWUsSUFBRyxJQUFJLENBQUNDLGtCQUFrQixFQUFFLEdBQUcsSUFBSSxDQUFDWCxRQUFRLEVBQUU7QUFDakYsQ0FBQztBQUVEOUcsUUFBUSxDQUFDOEcsUUFBUSxHQUFHLGVBQWVBLFFBQVFBLENBQUEsRUFBSTtFQUM3QyxNQUFNLElBQUksQ0FBQ3pGLEdBQUcsQ0FBQ3dFLFFBQVEsQ0FBQztJQUN0QnRCLEdBQUcsRUFBRSxJQUFJLENBQUM1RCxJQUFJLENBQUN5QixVQUFVO0lBQ3pCb0MsUUFBUSxFQUFFLElBQUksQ0FBQzdELElBQUksQ0FBQzBCLFdBQVc7SUFDL0JvQyxNQUFNLEVBQUUsSUFBSSxDQUFDOUQsSUFBSSxDQUFDK0QsWUFBWTtJQUM5QkMsUUFBUSxFQUFFLElBQUksQ0FBQ2hFLElBQUksQ0FBQ2lFLGNBQWM7SUFDbENDLEtBQUssRUFBRSxJQUFJLENBQUNsRSxJQUFJLENBQUNtRSxXQUFXO0lBQzVCQyxPQUFPLEVBQUUsSUFBSSxDQUFDcEUsSUFBSSxDQUFDd0QsY0FBYztJQUNqQ2EsWUFBWSxFQUFFLElBQUksQ0FBQ3JFLElBQUksQ0FBQ3lELGVBQWU7SUFDdkNhLGFBQWEsRUFBRSxJQUFJLENBQUN0RSxJQUFJLENBQUN1RSxnQkFBZ0I7SUFDekNDLFlBQVksRUFBRSxJQUFJLENBQUN4RSxJQUFJLENBQUN5RSxlQUFlO0lBQ3ZDQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMxRSxJQUFJLENBQUMwRSx1QkFBdUI7SUFDMURDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQzNFLElBQUksQ0FBQ3FHLGtCQUFrQjtJQUN0Q3pCLElBQUksRUFBRSxJQUFJLENBQUM1RSxJQUFJLENBQUM2RTtFQUNsQixDQUFDLENBQUM7QUFDSixDQUFDO0FBSUR4RixRQUFRLENBQUMwSCxNQUFNLEdBQUcsZUFBZUEsTUFBTUEsQ0FBRUMsR0FBRyxFQUFFO0VBQzVDLE1BQU0sSUFBSSxDQUFDdEcsR0FBRyxDQUFDdUcsUUFBUSxDQUFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDaEgsSUFBSSxDQUFDeUIsVUFBVSxDQUFDO0FBQ3BELENBQUM7QUFHRHBDLFFBQVEsQ0FBQzZILFFBQVEsR0FBRyxlQUFlQSxRQUFRQSxDQUFBLEVBQUk7RUFDN0MsTUFBTSxJQUFJLENBQUN4RyxHQUFHLENBQUN5RyxTQUFTLENBQUMsSUFBSSxDQUFDbkgsSUFBSSxDQUFDeUIsVUFBVSxDQUFDO0VBRTlDLE1BQU0sSUFBSSxDQUFDbUYsVUFBVSxFQUFFO0FBQ3pCLENBQUM7QUFFRHZILFFBQVEsQ0FBQytILGlCQUFpQixHQUFHLGVBQWVBLGlCQUFpQkEsQ0FBQSxFQUFJO0VBRS9ELElBQUlDLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQzNHLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7RUFDaEUsSUFBSTBHLEdBQUcsRUFBRTtJQUNQLElBQUlDLEdBQUcsR0FBRzFFLFFBQVEsQ0FBQ3lFLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFFM0IsSUFBSSxDQUFDRSxLQUFLLENBQUNELEdBQUcsQ0FBQyxFQUFFO01BQ2YsT0FBT0EsR0FBRztJQUNaO0lBQ0EsSUFBSSxDQUFDL0csR0FBRyxDQUFDQyxLQUFLLENBQUUsa0NBQWlDNkcsR0FBSSxHQUFFLENBQUM7RUFDMUQ7RUFFQUEsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDM0csR0FBRyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsQ0FBQztFQUM5RCxJQUFJMEcsR0FBRyxFQUFFO0lBQ1AsSUFBSUMsR0FBRyxHQUFHMUUsUUFBUSxDQUFDeUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUMzQixJQUFJLENBQUNFLEtBQUssQ0FBQ0QsR0FBRyxDQUFDLEVBQUU7TUFDZixPQUFPQSxHQUFHO0lBQ1o7SUFDQSxJQUFJLENBQUMvRyxHQUFHLENBQUNDLEtBQUssQ0FBRSxrQ0FBaUM2RyxHQUFJLEdBQUUsQ0FBQztFQUMxRDtFQUVBLElBQUksQ0FBQzlHLEdBQUcsQ0FBQ2lILGFBQWEsQ0FBQyx5Q0FBeUMsQ0FBQztBQUNuRSxDQUFDO0FBRURuSSxRQUFRLENBQUNvSSx5QkFBeUIsR0FBRyxlQUFlQSx5QkFBeUJBLENBQUV6SCxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDeEYsTUFBTTtJQUFDOEQ7RUFBTSxDQUFDLEdBQUc5RCxJQUFJO0VBQ3JCLElBQUksQ0FBQzhFLGFBQUksQ0FBQ3dCLFFBQVEsQ0FBQ3hDLE1BQU0sQ0FBQyxFQUFFO0lBQzFCLE1BQU0sSUFBSTRELGNBQU0sQ0FBQ0Msb0JBQW9CLENBQUUsK0JBQThCLENBQUM7RUFDeEU7RUFFQSxNQUFNLElBQUksQ0FBQ2pILEdBQUcsQ0FBQ2tILG1CQUFtQixDQUFDOUQsTUFBTSxDQUFDO0FBQzVDLENBQUM7QUFRRHpFLFFBQVEsQ0FBQ3dJLHNCQUFzQixHQUFHLGVBQWVBLHNCQUFzQkEsQ0FBQSxFQUFJO0VBQ3pFLE9BQU8sTUFBTSxJQUFJLENBQUNuSCxHQUFHLENBQUNvSCxnQkFBZ0IsRUFBRTtBQUMxQyxDQUFDO0FBZUR6SSxRQUFRLENBQUMwSSxhQUFhLEdBQUcsZUFBZUEsYUFBYUEsQ0FBRS9ILElBQUksR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNoRSxPQUFPLE1BQU0sSUFBSSxDQUFDVSxHQUFHLENBQUNzSCxVQUFVLENBQUNoSSxJQUFJLENBQUM7QUFDeEMsQ0FBQztBQXVCRFgsUUFBUSxDQUFDNEksWUFBWSxHQUFHLGVBQWVBLFlBQVlBLENBQUVqSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDOUQsTUFBTTtJQUFFMEYsR0FBRztJQUFFd0MsSUFBSTtJQUFFQyxRQUFRO0lBQUVDO0VBQVUsQ0FBQyxHQUFHcEksSUFBSTtFQUMvQyxNQUFNK0YsdUJBQWMsQ0FBQ3NDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDM0gsR0FBRyxFQUFFO0lBQzFDNEgsU0FBUyxFQUFFNUMsR0FBRztJQUNkNkMsVUFBVSxFQUFFTCxJQUFJO0lBQ2hCTSxjQUFjLEVBQUVMLFFBQVE7SUFDeEJNLG9CQUFvQixFQUFFTDtFQUN4QixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQzQixNQUFNLENBQUNDLE1BQU0sQ0FBQ25ILFVBQVUsRUFBRUYsUUFBUSxFQUFFQyxPQUFPLENBQUM7QUFBQyxJQUFBb0osUUFBQSxHQUU5Qm5KLFVBQVU7QUFBQUMsT0FBQSxDQUFBbUosT0FBQSxHQUFBRCxRQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_androidHelpers","_support","_moment","_asyncbox","_driver","MOMENT_FORMAT_ISO8601","commands","helpers","extensions","exports","keys","_","isArray","join","params","text","replace","opts","unicodeKeyboard","doSendKeys","bootstrap","sendAction","getDeviceTime","format","log","debug","deviceTimestamp","adb","shell","trim","parsedTimestamp","moment","utc","isValid","warn","utcOffset","_tzm","mobileGetDeviceTime","getPageSource","back","isKeyboardShown","isSoftKeyboardPresent","hideKeyboard","openSettingsActivity","setting","appPackage","appActivity","getFocusedPackageAndActivity","waitForNotActivity","getWindowSize","getWindowRect","width","height","x","y","getCurrentActivity","getCurrentPackage","background","seconds","goToHome","sleepMs","thresholdMs","intervalMs","min","parseInt","progressCb","elapsedMs","progress","waitSecs","toFixed","progressPct","longSleep","args","_cachedActivityArgs","activateApp","ign","appWaitPackage","appWaitActivity","split","includes","pkg","activity","action","intentAction","category","intentCategory","flags","intentFlags","waitPkg","waitActivity","waitForLaunch","appWaitForLaunch","waitDuration","appWaitDuration","optionalIntentArguments","stopApp","user","userProfile","util","filterObject","JSON","stringify","startApp","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","toPairs","isString","apkStrings","androidHelpers","pushStrings","launchApp","initAUT","startAUT","startActivity","dontStopAppOnReset","hasValue","reset","resetApp","Object","assign","fastReset","setContext","isChromeSession","startChromeSession","setUrl","uri","startUri","closeApp","forceStop","getDisplayDensity","out","val","isNaN","errorAndThrow","mobilePerformEditorAction","errors","InvalidArgumentError","performEditorAction","mobileGetNotifications","getNotifications","mobileListSms","getSmsList","mobileUnlock","type","strategy","timeoutMs","unlock","unlockKey","unlockType","unlockStrategy","unlockSuccessTimeout","_default","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport androidHelpers from '../android-helpers';\nimport { util } from '@appium/support';\nimport moment from 'moment';\nimport { longSleep } from 'asyncbox';\nimport { errors } from 'appium/driver';\n\nconst MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keys = async function keys (keys) {\n // Protocol sends an array; rethink approach\n keys = _.isArray(keys) ? keys.join('') : keys;\n let params = {\n text: keys,\n replace: false\n };\n if (this.opts.unicodeKeyboard) {\n params.unicodeKeyboard = true;\n }\n await this.doSendKeys(params);\n};\n\ncommands.doSendKeys = async function doSendKeys (params) {\n return await this.bootstrap.sendAction('setText', params);\n};\n\n/**\n * Retrieves the current device's timestamp.\n *\n * @param {string} format - The set of format specifiers. Read\n * https://momentjs.com/docs/ to get the full list of supported\n * datetime format specifiers. The default format is\n * `YYYY-MM-DDTHH:mm:ssZ`, which complies to ISO-8601\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.getDeviceTime = async function getDeviceTime (format = MOMENT_FORMAT_ISO8601) {\n this.log.debug('Attempting to capture android device date and time. ' +\n `The format specifier is '${format}'`);\n const deviceTimestamp = (await this.adb.shell(['date', '+%Y-%m-%dT%T%z'])).trim();\n this.log.debug(`Got device timestamp: ${deviceTimestamp}`);\n const parsedTimestamp = moment.utc(deviceTimestamp, 'YYYY-MM-DDTHH:mm:ssZZ');\n if (!parsedTimestamp.isValid()) {\n this.log.warn('Cannot parse the returned timestamp. Returning as is');\n return deviceTimestamp;\n }\n return parsedTimestamp.utcOffset(parsedTimestamp._tzm || 0).format(format);\n};\n\n/**\n * @typedef {Object} DeviceTimeOptions\n * @property {string} format [YYYY-MM-DDTHH:mm:ssZ] - See getDeviceTime#format\n */\n\n/**\n * Retrieves the current device time\n *\n * @param {DeviceTimeOptions} opts\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.mobileGetDeviceTime = async function mobileGetDeviceTime (opts = {}) {\n return await this.getDeviceTime(opts.format);\n};\n\ncommands.getPageSource = async function getPageSource () {\n return await this.bootstrap.sendAction('source');\n};\n\ncommands.back = async function back () {\n return await this.bootstrap.sendAction('pressBack');\n};\n\ncommands.isKeyboardShown = async function isKeyboardShown () {\n const {isKeyboardShown} = await this.adb.isSoftKeyboardPresent();\n return isKeyboardShown;\n};\n\ncommands.hideKeyboard = async function hideKeyboard () {\n return await this.adb.hideKeyboard();\n};\n\ncommands.openSettingsActivity = async function openSettingsActivity (setting) {\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.shell(['am', 'start', '-a', `android.settings.${setting}`]);\n await this.adb.waitForNotActivity(appPackage, appActivity, 5000);\n};\n\ncommands.getWindowSize = async function getWindowSize () {\n return await this.bootstrap.sendAction('getDeviceSize');\n};\n\n// For W3C\ncommands.getWindowRect = async function getWindowRect () {\n const { width, height } = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0\n };\n};\n\ncommands.getCurrentActivity = async function getCurrentActivity () {\n return (await this.adb.getFocusedPackageAndActivity()).appActivity;\n};\n\ncommands.getCurrentPackage = async function getCurrentPackage () {\n return (await this.adb.getFocusedPackageAndActivity()).appPackage;\n};\n\ncommands.background = async function background (seconds) {\n if (seconds < 0) {\n // if user passes in a negative seconds value, interpret that as the instruction\n // to not bring the app back at all\n await this.adb.goToHome();\n return true;\n }\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.goToHome();\n\n // people can wait for a long time, so to be safe let's use the longSleep function and log\n // progress periodically.\n const sleepMs = seconds * 1000;\n const thresholdMs = 30 * 1000; // use the spin-wait for anything over this threshold\n // for our spin interval, use 1% of the total wait time, but nothing bigger than 30s\n const intervalMs = _.min([30 * 1000, parseInt(sleepMs / 100, 10)]);\n const progressCb = ({elapsedMs, progress}) => {\n const waitSecs = (elapsedMs / 1000).toFixed(0);\n const progressPct = (progress * 100).toFixed(2);\n this.log.debug(`Waited ${waitSecs}s so far (${progressPct}%)`);\n };\n await longSleep(sleepMs, {thresholdMs, intervalMs, progressCb});\n\n let args;\n if (this._cachedActivityArgs && this._cachedActivityArgs[`${appPackage}/${appActivity}`]) {\n // the activity was started with `startActivity`, so use those args to restart\n args = this._cachedActivityArgs[`${appPackage}/${appActivity}`];\n } else {\n try {\n this.log.debug(`Activating app '${appPackage}' in order to restore it`);\n await this.activateApp(appPackage);\n return true;\n } catch (ign) {}\n args = ((appPackage === this.opts.appPackage && appActivity === this.opts.appActivity) ||\n (appPackage === this.opts.appWaitPackage && (this.opts.appWaitActivity || '').split(',').includes(appActivity)))\n ? {// the activity is the original session activity, so use the original args\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: false,\n user: this.opts.userProfile}\n : {// the activity was started some other way, so use defaults\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appPackage,\n waitActivity: appActivity,\n stopApp: false};\n }\n args = await util.filterObject(args);\n this.log.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);\n return await this.adb.startApp(args);\n};\n\ncommands.getStrings = async function getStrings (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = (mapping) => {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n this.apkStrings[language] = await androidHelpers.pushStrings(language, this.adb, this.opts);\n if (this.bootstrap) {\n // TODO: This is mutating the current language, but it's how appium currently works\n await this.bootstrap.sendAction('updateStrings');\n }\n\n return preprocessStringsMap(this.apkStrings[language]);\n};\n\ncommands.launchApp = async function launchApp () {\n await this.initAUT();\n await this.startAUT();\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags,\n optionalIntentArguments, dontStopAppOnReset) {\n this.log.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);\n\n // dontStopAppOnReset is both an argument here, and a desired capability\n // if the argument is set, use it, otherwise use the cap\n if (!util.hasValue(dontStopAppOnReset)) {\n dontStopAppOnReset = !!this.opts.dontStopAppOnReset;\n }\n\n let args = {\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appWaitPackage || appPackage,\n waitActivity: appWaitActivity || appActivity,\n action: intentAction,\n category: intentCategory,\n flags: intentFlags,\n optionalIntentArguments,\n stopApp: !dontStopAppOnReset\n };\n this._cachedActivityArgs = this._cachedActivityArgs || {};\n this._cachedActivityArgs[`${args.waitPkg}/${args.waitActivity}`] = args;\n await this.adb.startApp(args);\n};\n\ncommands.reset = async function reset () {\n await androidHelpers.resetApp(this.adb, Object.assign({}, this.opts, {fastReset: true}));\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n return await this.isChromeSession ? this.startChromeSession() : this.startAUT();\n};\n\ncommands.startAUT = async function startAUT () {\n await this.adb.startApp({\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: !this.opts.dontStopAppOnReset,\n user: this.opts.userProfile,\n });\n};\n\n// we override setUrl to take an android URI which can be used for deep-linking\n// inside an app, similar to starting an intent\ncommands.setUrl = async function setUrl (uri) {\n await this.adb.startUri(uri, this.opts.appPackage);\n};\n\n// closing app using force stop\ncommands.closeApp = async function closeApp () {\n await this.adb.forceStop(this.opts.appPackage);\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n // first try the property for devices\n let out = await this.adb.shell(['getprop', 'ro.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n // if the value is NaN, try getting the emulator property\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // fallback to trying property for emulators\n out = await this.adb.shell(['getprop', 'qemu.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // couldn't get anything, so error out\n this.log.errorAndThrow('Failed to get display density property.');\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = opts;\n if (!util.hasValue(action)) {\n throw new errors.InvalidArgumentError(`'action' argument is required`);\n }\n\n await this.adb.performEditorAction(action);\n};\n\n/**\n * Retrieves the list of recent system notifications.\n *\n * @returns {Object} See the documentation on `adb.getNotifications` for\n * more details\n */\ncommands.mobileGetNotifications = async function mobileGetNotifications () {\n return await this.adb.getNotifications();\n};\n\n/**\n * @typedef {Object} SmsListOptions\n * @property {number} max [100] - The maximum count of recent SMS messages\n * to retrieve\n */\n\n/**\n * Retrieves the list of recent SMS messages with their properties.\n *\n * @param {SmsListOptions} opts\n * @returns {Object} See the documentation on `adb.getSmsList` for\n * more details\n */\ncommands.mobileListSms = async function mobileListSms (opts = {}) {\n return await this.adb.getSmsList(opts);\n};\n\n/**\n * @typedef {Object} UnlockOptions\n * @property {string} key The unlock key. The value of this key depends\n * on the actual unlock type and could be a pin/password/pattern value or\n * a biometric finger id.\n * @property {string} type The unlock type. The following unlock types\n * are supported: `pin`, `pinWithKeyEvent`, `password`, `pattern` and `fingerprint`.\n * @property {?string} strategy Either 'locksettings' (default) or 'uiautomator'.\n * Setting it to 'uiautomator' will enforce the driver to avoid using special\n * ADB shortcuts in order to speed up the unlock procedure.\n * @property {?number} timeoutMs [2000] The maximum time in milliseconds\n * to wait until the screen gets unlocked\n */\n\n/**\n * Unlocks the device if it is locked. Noop if the device's screen is not locked.\n *\n * @param {?UnlockOptions} opts\n * @throws {Error} if unlock operation fails or the provided\n * arguments are not valid\n */\ncommands.mobileUnlock = async function mobileUnlock (opts = {}) {\n const { key, type, strategy, timeoutMs } = opts;\n await androidHelpers.unlock(this, this.adb, {\n unlockKey: key,\n unlockType: type,\n unlockStrategy: strategy,\n unlockSuccessTimeout: timeoutMs,\n });\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"general.js","names":["_lodash","_interopRequireDefault","require","_androidHelpers","_support","_moment","_asyncbox","_driver","MOMENT_FORMAT_ISO8601","commands","helpers","extensions","exports","keys","_","isArray","join","params","text","replace","opts","unicodeKeyboard","doSendKeys","bootstrap","sendAction","getDeviceTime","format","log","debug","deviceTimestamp","adb","shell","trim","parsedTimestamp","moment","utc","isValid","warn","utcOffset","_tzm","mobileGetDeviceTime","getPageSource","back","openSettingsActivity","setting","appPackage","appActivity","getFocusedPackageAndActivity","waitForNotActivity","getWindowSize","getWindowRect","width","height","x","y","getCurrentActivity","getCurrentPackage","background","seconds","goToHome","sleepMs","thresholdMs","intervalMs","min","parseInt","progressCb","elapsedMs","progress","waitSecs","toFixed","progressPct","longSleep","args","_cachedActivityArgs","activateApp","ign","appWaitPackage","appWaitActivity","split","includes","pkg","activity","action","intentAction","category","intentCategory","flags","intentFlags","waitPkg","waitActivity","waitForLaunch","appWaitForLaunch","waitDuration","appWaitDuration","optionalIntentArguments","stopApp","user","userProfile","util","filterObject","JSON","stringify","startApp","getStrings","language","getDeviceLanguage","info","preprocessStringsMap","mapping","result","key","value","toPairs","isString","apkStrings","androidHelpers","pushStrings","launchApp","initAUT","startAUT","startActivity","dontStopAppOnReset","hasValue","reset","resetApp","Object","assign","fastReset","setContext","isChromeSession","startChromeSession","setUrl","uri","startUri","closeApp","forceStop","getDisplayDensity","out","val","isNaN","errorAndThrow","mobilePerformEditorAction","errors","InvalidArgumentError","performEditorAction","mobileGetNotifications","getNotifications","mobileListSms","getSmsList","mobileUnlock","type","strategy","timeoutMs","unlock","unlockKey","unlockType","unlockStrategy","unlockSuccessTimeout","_default","default"],"sources":["../../../lib/commands/general.js"],"sourcesContent":["import _ from 'lodash';\nimport androidHelpers from '../android-helpers';\nimport { util } from '@appium/support';\nimport moment from 'moment';\nimport { longSleep } from 'asyncbox';\nimport { errors } from 'appium/driver';\n\nconst MOMENT_FORMAT_ISO8601 = 'YYYY-MM-DDTHH:mm:ssZ';\n\nlet commands = {}, helpers = {}, extensions = {};\n\ncommands.keys = async function keys (keys) {\n // Protocol sends an array; rethink approach\n keys = _.isArray(keys) ? keys.join('') : keys;\n let params = {\n text: keys,\n replace: false\n };\n if (this.opts.unicodeKeyboard) {\n params.unicodeKeyboard = true;\n }\n await this.doSendKeys(params);\n};\n\ncommands.doSendKeys = async function doSendKeys (params) {\n return await this.bootstrap.sendAction('setText', params);\n};\n\n/**\n * Retrieves the current device's timestamp.\n *\n * @param {string} format - The set of format specifiers. Read\n * https://momentjs.com/docs/ to get the full list of supported\n * datetime format specifiers. The default format is\n * `YYYY-MM-DDTHH:mm:ssZ`, which complies to ISO-8601\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.getDeviceTime = async function getDeviceTime (format = MOMENT_FORMAT_ISO8601) {\n this.log.debug('Attempting to capture android device date and time. ' +\n `The format specifier is '${format}'`);\n const deviceTimestamp = (await this.adb.shell(['date', '+%Y-%m-%dT%T%z'])).trim();\n this.log.debug(`Got device timestamp: ${deviceTimestamp}`);\n const parsedTimestamp = moment.utc(deviceTimestamp, 'YYYY-MM-DDTHH:mm:ssZZ');\n if (!parsedTimestamp.isValid()) {\n this.log.warn('Cannot parse the returned timestamp. Returning as is');\n return deviceTimestamp;\n }\n return parsedTimestamp.utcOffset(parsedTimestamp._tzm || 0).format(format);\n};\n\n/**\n * @typedef {Object} DeviceTimeOptions\n * @property {string} format [YYYY-MM-DDTHH:mm:ssZ] - See getDeviceTime#format\n */\n\n/**\n * Retrieves the current device time\n *\n * @param {DeviceTimeOptions} opts\n * @return {string} Formatted datetime string or the raw command output if formatting fails\n */\ncommands.mobileGetDeviceTime = async function mobileGetDeviceTime (opts = {}) {\n return await this.getDeviceTime(opts.format);\n};\n\ncommands.getPageSource = async function getPageSource () {\n return await this.bootstrap.sendAction('source');\n};\n\ncommands.back = async function back () {\n return await this.bootstrap.sendAction('pressBack');\n};\n\ncommands.openSettingsActivity = async function openSettingsActivity (setting) {\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.shell(['am', 'start', '-a', `android.settings.${setting}`]);\n await this.adb.waitForNotActivity(appPackage, appActivity, 5000);\n};\n\ncommands.getWindowSize = async function getWindowSize () {\n return await this.bootstrap.sendAction('getDeviceSize');\n};\n\n// For W3C\ncommands.getWindowRect = async function getWindowRect () {\n const { width, height } = await this.getWindowSize();\n return {\n width,\n height,\n x: 0,\n y: 0\n };\n};\n\ncommands.getCurrentActivity = async function getCurrentActivity () {\n return (await this.adb.getFocusedPackageAndActivity()).appActivity;\n};\n\ncommands.getCurrentPackage = async function getCurrentPackage () {\n return (await this.adb.getFocusedPackageAndActivity()).appPackage;\n};\n\ncommands.background = async function background (seconds) {\n if (seconds < 0) {\n // if user passes in a negative seconds value, interpret that as the instruction\n // to not bring the app back at all\n await this.adb.goToHome();\n return true;\n }\n let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();\n await this.adb.goToHome();\n\n // people can wait for a long time, so to be safe let's use the longSleep function and log\n // progress periodically.\n const sleepMs = seconds * 1000;\n const thresholdMs = 30 * 1000; // use the spin-wait for anything over this threshold\n // for our spin interval, use 1% of the total wait time, but nothing bigger than 30s\n const intervalMs = _.min([30 * 1000, parseInt(sleepMs / 100, 10)]);\n const progressCb = ({elapsedMs, progress}) => {\n const waitSecs = (elapsedMs / 1000).toFixed(0);\n const progressPct = (progress * 100).toFixed(2);\n this.log.debug(`Waited ${waitSecs}s so far (${progressPct}%)`);\n };\n await longSleep(sleepMs, {thresholdMs, intervalMs, progressCb});\n\n let args;\n if (this._cachedActivityArgs && this._cachedActivityArgs[`${appPackage}/${appActivity}`]) {\n // the activity was started with `startActivity`, so use those args to restart\n args = this._cachedActivityArgs[`${appPackage}/${appActivity}`];\n } else {\n try {\n this.log.debug(`Activating app '${appPackage}' in order to restore it`);\n await this.activateApp(appPackage);\n return true;\n } catch (ign) {}\n args = ((appPackage === this.opts.appPackage && appActivity === this.opts.appActivity) ||\n (appPackage === this.opts.appWaitPackage && (this.opts.appWaitActivity || '').split(',').includes(appActivity)))\n ? {// the activity is the original session activity, so use the original args\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: false,\n user: this.opts.userProfile}\n : {// the activity was started some other way, so use defaults\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appPackage,\n waitActivity: appActivity,\n stopApp: false};\n }\n args = await util.filterObject(args);\n this.log.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);\n return await this.adb.startApp(args);\n};\n\ncommands.getStrings = async function getStrings (language) {\n if (!language) {\n language = await this.adb.getDeviceLanguage();\n this.log.info(`No language specified, returning strings for: ${language}`);\n }\n\n // Clients require the resulting mapping to have both keys\n // and values of type string\n const preprocessStringsMap = (mapping) => {\n const result = {};\n for (const [key, value] of _.toPairs(mapping)) {\n result[key] = _.isString(value) ? value : JSON.stringify(value);\n }\n return result;\n };\n\n if (this.apkStrings[language]) {\n // Return cached strings\n return preprocessStringsMap(this.apkStrings[language]);\n }\n\n this.apkStrings[language] = await androidHelpers.pushStrings(language, this.adb, this.opts);\n if (this.bootstrap) {\n // TODO: This is mutating the current language, but it's how appium currently works\n await this.bootstrap.sendAction('updateStrings');\n }\n\n return preprocessStringsMap(this.apkStrings[language]);\n};\n\ncommands.launchApp = async function launchApp () {\n await this.initAUT();\n await this.startAUT();\n};\n\ncommands.startActivity = async function startActivity (appPackage, appActivity,\n appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags,\n optionalIntentArguments, dontStopAppOnReset) {\n this.log.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);\n\n // dontStopAppOnReset is both an argument here, and a desired capability\n // if the argument is set, use it, otherwise use the cap\n if (!util.hasValue(dontStopAppOnReset)) {\n dontStopAppOnReset = !!this.opts.dontStopAppOnReset;\n }\n\n let args = {\n pkg: appPackage,\n activity: appActivity,\n waitPkg: appWaitPackage || appPackage,\n waitActivity: appWaitActivity || appActivity,\n action: intentAction,\n category: intentCategory,\n flags: intentFlags,\n optionalIntentArguments,\n stopApp: !dontStopAppOnReset\n };\n this._cachedActivityArgs = this._cachedActivityArgs || {};\n this._cachedActivityArgs[`${args.waitPkg}/${args.waitActivity}`] = args;\n await this.adb.startApp(args);\n};\n\ncommands.reset = async function reset () {\n await androidHelpers.resetApp(this.adb, Object.assign({}, this.opts, {fastReset: true}));\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n return await this.isChromeSession ? this.startChromeSession() : this.startAUT();\n};\n\ncommands.startAUT = async function startAUT () {\n await this.adb.startApp({\n pkg: this.opts.appPackage,\n activity: this.opts.appActivity,\n action: this.opts.intentAction,\n category: this.opts.intentCategory,\n flags: this.opts.intentFlags,\n waitPkg: this.opts.appWaitPackage,\n waitActivity: this.opts.appWaitActivity,\n waitForLaunch: this.opts.appWaitForLaunch,\n waitDuration: this.opts.appWaitDuration,\n optionalIntentArguments: this.opts.optionalIntentArguments,\n stopApp: !this.opts.dontStopAppOnReset,\n user: this.opts.userProfile,\n });\n};\n\n// we override setUrl to take an android URI which can be used for deep-linking\n// inside an app, similar to starting an intent\ncommands.setUrl = async function setUrl (uri) {\n await this.adb.startUri(uri, this.opts.appPackage);\n};\n\n// closing app using force stop\ncommands.closeApp = async function closeApp () {\n await this.adb.forceStop(this.opts.appPackage);\n // reset context since we don't know what kind on context we will end up after app launch.\n await this.setContext();\n};\n\ncommands.getDisplayDensity = async function getDisplayDensity () {\n // first try the property for devices\n let out = await this.adb.shell(['getprop', 'ro.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n // if the value is NaN, try getting the emulator property\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // fallback to trying property for emulators\n out = await this.adb.shell(['getprop', 'qemu.sf.lcd_density']);\n if (out) {\n let val = parseInt(out, 10);\n if (!isNaN(val)) {\n return val;\n }\n this.log.debug(`Parsed density value was NaN: \"${out}\"`);\n }\n // couldn't get anything, so error out\n this.log.errorAndThrow('Failed to get display density property.');\n};\n\ncommands.mobilePerformEditorAction = async function mobilePerformEditorAction (opts = {}) {\n const {action} = opts;\n if (!util.hasValue(action)) {\n throw new errors.InvalidArgumentError(`'action' argument is required`);\n }\n\n await this.adb.performEditorAction(action);\n};\n\n/**\n * Retrieves the list of recent system notifications.\n *\n * @returns {Object} See the documentation on `adb.getNotifications` for\n * more details\n */\ncommands.mobileGetNotifications = async function mobileGetNotifications () {\n return await this.adb.getNotifications();\n};\n\n/**\n * @typedef {Object} SmsListOptions\n * @property {number} max [100] - The maximum count of recent SMS messages\n * to retrieve\n */\n\n/**\n * Retrieves the list of recent SMS messages with their properties.\n *\n * @param {SmsListOptions} opts\n * @returns {Object} See the documentation on `adb.getSmsList` for\n * more details\n */\ncommands.mobileListSms = async function mobileListSms (opts = {}) {\n return await this.adb.getSmsList(opts);\n};\n\n/**\n * @typedef {Object} UnlockOptions\n * @property {string} key The unlock key. The value of this key depends\n * on the actual unlock type and could be a pin/password/pattern value or\n * a biometric finger id.\n * @property {string} type The unlock type. The following unlock types\n * are supported: `pin`, `pinWithKeyEvent`, `password`, `pattern` and `fingerprint`.\n * @property {?string} strategy Either 'locksettings' (default) or 'uiautomator'.\n * Setting it to 'uiautomator' will enforce the driver to avoid using special\n * ADB shortcuts in order to speed up the unlock procedure.\n * @property {?number} timeoutMs [2000] The maximum time in milliseconds\n * to wait until the screen gets unlocked\n */\n\n/**\n * Unlocks the device if it is locked. Noop if the device's screen is not locked.\n *\n * @param {?UnlockOptions} opts\n * @throws {Error} if unlock operation fails or the provided\n * arguments are not valid\n */\ncommands.mobileUnlock = async function mobileUnlock (opts = {}) {\n const { key, type, strategy, timeoutMs } = opts;\n await androidHelpers.unlock(this, this.adb, {\n unlockKey: key,\n unlockType: type,\n unlockStrategy: strategy,\n unlockSuccessTimeout: timeoutMs,\n });\n};\n\nObject.assign(extensions, commands, helpers);\nexport { commands, helpers };\nexport default extensions;\n"],"mappings":"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"}
|
|
@@ -29,9 +29,10 @@ var _systemBars = _interopRequireDefault(require("./system-bars"));
|
|
|
29
29
|
var _log = _interopRequireDefault(require("./log"));
|
|
30
30
|
var _mediaProjection = _interopRequireDefault(require("./media-projection"));
|
|
31
31
|
var _permissions = _interopRequireDefault(require("./permissions"));
|
|
32
|
+
var _keyboard = _interopRequireDefault(require("./keyboard"));
|
|
32
33
|
let commands = {};
|
|
33
34
|
exports.commands = commands;
|
|
34
|
-
Object.assign(commands, _find.default, _general.default, _alert.default, _element.default, _context.default, _actions.default, _touch.default, _ime.default, _network.default, _coverage.default, _recordscreen.default, _intent.default, _streamscreen.default, _performance.default, _execute.default, _shell.default, _emuConsole.default, _systemBars.default, _appManagement.default, _fileActions.default, _log.default, _mediaProjection.default, _permissions.default);
|
|
35
|
+
Object.assign(commands, _find.default, _general.default, _alert.default, _element.default, _context.default, _actions.default, _touch.default, _ime.default, _network.default, _coverage.default, _recordscreen.default, _intent.default, _streamscreen.default, _performance.default, _execute.default, _shell.default, _emuConsole.default, _systemBars.default, _appManagement.default, _fileActions.default, _log.default, _mediaProjection.default, _permissions.default, _keyboard.default);
|
|
35
36
|
var _default = commands;
|
|
36
37
|
exports.default = _default;
|
|
37
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZmluZCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2dlbmVyYWwiLCJfYWxlcnQiLCJfZWxlbWVudCIsIl9jb250ZXh0IiwiX2FjdGlvbnMiLCJfdG91Y2giLCJfaW1lIiwiX25ldHdvcmsiLCJfY292ZXJhZ2UiLCJfcmVjb3Jkc2NyZWVuIiwiX3N0cmVhbXNjcmVlbiIsIl9wZXJmb3JtYW5jZSIsIl9leGVjdXRlIiwiX3NoZWxsIiwiX2VtdUNvbnNvbGUiLCJfZmlsZUFjdGlvbnMiLCJfYXBwTWFuYWdlbWVudCIsIl9pbnRlbnQiLCJfc3lzdGVtQmFycyIsIl9sb2ciLCJfbWVkaWFQcm9qZWN0aW9uIiwiX3Blcm1pc3Npb25zIiwiX2tleWJvYXJkIiwiY29tbWFuZHMiLCJleHBvcnRzIiwiT2JqZWN0IiwiYXNzaWduIiwiZmluZENtZHMiLCJnZW5lcmFsQ21kcyIsImFsZXJ0Q21kcyIsImVsZW1lbnRDbWRzIiwiY29udGV4dENtZHMiLCJhY3Rpb25DbWRzIiwidG91Y2hDbWRzIiwiaW1lQ21kcyIsIm5ldHdvcmtDbWRzIiwiY292ZXJhZ2VDbWRzIiwicmVjb3Jkc2NyZWVuQ21kcyIsImludGVudENtZHMiLCJzY3JlZW5TdHJlYW1DbWRzIiwicGVyZm9ybWFuY2VDbWRzIiwiZXhlY3V0ZUNtZHMiLCJzaGVsbENtZHMiLCJlbXVDb25zb2xlQ21kcyIsInN5c3RlbUJhcnNDbWRzIiwiYXBwTWFuYWdlbWVudENtZHMiLCJmaWxlQWN0aW9uc0NtZHMiLCJsb2dDbWRzIiwibWVkaWFQcm9qZWN0aW9uQ21kcyIsInBlcm1pc3Npb25zQ21kcyIsImtleWJvYXJkQ21kcyIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZmluZENtZHMgZnJvbSAnLi9maW5kJztcbmltcG9ydCBnZW5lcmFsQ21kcyBmcm9tICcuL2dlbmVyYWwnO1xuaW1wb3J0IGFsZXJ0Q21kcyBmcm9tICcuL2FsZXJ0JztcbmltcG9ydCBlbGVtZW50Q21kcyBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IGNvbnRleHRDbWRzIGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgYWN0aW9uQ21kcyBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHRvdWNoQ21kcyBmcm9tICcuL3RvdWNoJztcbmltcG9ydCBpbWVDbWRzIGZyb20gJy4vaW1lJztcbmltcG9ydCBuZXR3b3JrQ21kcyBmcm9tICcuL25ldHdvcmsnO1xuaW1wb3J0IGNvdmVyYWdlQ21kcyBmcm9tICcuL2NvdmVyYWdlJztcbmltcG9ydCByZWNvcmRzY3JlZW5DbWRzIGZyb20gJy4vcmVjb3Jkc2NyZWVuJztcbmltcG9ydCBzY3JlZW5TdHJlYW1DbWRzIGZyb20gJy4vc3RyZWFtc2NyZWVuJztcbmltcG9ydCBwZXJmb3JtYW5jZUNtZHMgZnJvbSAnLi9wZXJmb3JtYW5jZSc7XG5pbXBvcnQgZXhlY3V0ZUNtZHMgZnJvbSAnLi9leGVjdXRlJztcbmltcG9ydCBzaGVsbENtZHMgZnJvbSAnLi9zaGVsbCc7XG5pbXBvcnQgZW11Q29uc29sZUNtZHMgZnJvbSAnLi9lbXUtY29uc29sZSc7XG5pbXBvcnQgZmlsZUFjdGlvbnNDbWRzIGZyb20gJy4vZmlsZS1hY3Rpb25zJztcbmltcG9ydCBhcHBNYW5hZ2VtZW50Q21kcyBmcm9tICcuL2FwcC1tYW5hZ2VtZW50JztcbmltcG9ydCBpbnRlbnRDbWRzIGZyb20gJy4vaW50ZW50JztcbmltcG9ydCBzeXN0ZW1CYXJzQ21kcyBmcm9tICcuL3N5c3RlbS1iYXJzJztcbmltcG9ydCBsb2dDbWRzIGZyb20gJy4vbG9nJztcbmltcG9ydCBtZWRpYVByb2plY3Rpb25DbWRzIGZyb20gJy4vbWVkaWEtcHJvamVjdGlvbic7XG5pbXBvcnQgcGVybWlzc2lvbnNDbWRzIGZyb20gJy4vcGVybWlzc2lvbnMnO1xuaW1wb3J0IGtleWJvYXJkQ21kcyBmcm9tICcuL2tleWJvYXJkJztcblxuXG5sZXQgY29tbWFuZHMgPSB7fTtcbk9iamVjdC5hc3NpZ24oXG4gIGNvbW1hbmRzLFxuICBmaW5kQ21kcyxcbiAgZ2VuZXJhbENtZHMsXG4gIGFsZXJ0Q21kcyxcbiAgZWxlbWVudENtZHMsXG4gIGNvbnRleHRDbWRzLFxuICBhY3Rpb25DbWRzLFxuICB0b3VjaENtZHMsXG4gIGltZUNtZHMsXG4gIG5ldHdvcmtDbWRzLFxuICBjb3ZlcmFnZUNtZHMsXG4gIHJlY29yZHNjcmVlbkNtZHMsXG4gIGludGVudENtZHMsXG4gIHNjcmVlblN0cmVhbUNtZHMsXG4gIHBlcmZvcm1hbmNlQ21kcyxcbiAgZXhlY3V0ZUNtZHMsXG4gIHNoZWxsQ21kcyxcbiAgZW11Q29uc29sZUNtZHMsXG4gIHN5c3RlbUJhcnNDbWRzLFxuICBhcHBNYW5hZ2VtZW50Q21kcyxcbiAgZmlsZUFjdGlvbnNDbWRzLFxuICBsb2dDbWRzLFxuICBtZWRpYVByb2plY3Rpb25DbWRzLFxuICBwZXJtaXNzaW9uc0NtZHMsXG4gIGtleWJvYXJkQ21kcyxcbiAgLy8gYWRkIG90aGVyIGNvbW1hbmQgdHlwZXMgaGVyZVxuKTtcblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLE1BQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLElBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLFFBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLFNBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLGFBQUEsR0FBQVgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFXLGFBQUEsR0FBQVosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFZLFlBQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFhLFFBQUEsR0FBQWQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFjLE1BQUEsR0FBQWYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFlLFdBQUEsR0FBQWhCLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBZ0IsWUFBQSxHQUFBakIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFpQixjQUFBLEdBQUFsQixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQWtCLE9BQUEsR0FBQW5CLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBbUIsV0FBQSxHQUFBcEIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFvQixJQUFBLEdBQUFyQixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQXFCLGdCQUFBLEdBQUF0QixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQXNCLFlBQUEsR0FBQXZCLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBdUIsU0FBQSxHQUFBeEIsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUl3QixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQUNDLE9BQUEsQ0FBQUQsUUFBQSxHQUFBQSxRQUFBO0FBQ2xCRSxNQUFNLENBQUNDLE1BQU0sQ0FDWEgsUUFBUSxFQUNSSSxhQUFRLEVBQ1JDLGdCQUFXLEVBQ1hDLGNBQVMsRUFDVEMsZ0JBQVcsRUFDWEMsZ0JBQVcsRUFDWEMsZ0JBQVUsRUFDVkMsY0FBUyxFQUNUQyxZQUFPLEVBQ1BDLGdCQUFXLEVBQ1hDLGlCQUFZLEVBQ1pDLHFCQUFnQixFQUNoQkMsZUFBVSxFQUNWQyxxQkFBZ0IsRUFDaEJDLG9CQUFlLEVBQ2ZDLGdCQUFXLEVBQ1hDLGNBQVMsRUFDVEMsbUJBQWMsRUFDZEMsbUJBQWMsRUFDZEMsc0JBQWlCLEVBQ2pCQyxvQkFBZSxFQUNmQyxZQUFPLEVBQ1BDLHdCQUFtQixFQUNuQkMsb0JBQWUsRUFDZkMsaUJBQVksQ0FFYjtBQUFDLElBQUFDLFFBQUEsR0FHYTVCLFFBQVE7QUFBQUMsT0FBQSxDQUFBNEIsT0FBQSxHQUFBRCxRQUFBIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_find","_interopRequireDefault","require","_general","_alert","_element","_context","_actions","_touch","_ime","_network","_coverage","_recordscreen","_streamscreen","_performance","_execute","_shell","_emuConsole","_fileActions","_appManagement","_intent","_systemBars","_log","_mediaProjection","_permissions","commands","exports","Object","assign","findCmds","generalCmds","alertCmds","elementCmds","contextCmds","actionCmds","touchCmds","imeCmds","networkCmds","coverageCmds","recordscreenCmds","intentCmds","screenStreamCmds","performanceCmds","executeCmds","shellCmds","emuConsoleCmds","systemBarsCmds","appManagementCmds","fileActionsCmds","logCmds","mediaProjectionCmds","
|
|
1
|
+
{"version":3,"file":"index.js","names":["_find","_interopRequireDefault","require","_general","_alert","_element","_context","_actions","_touch","_ime","_network","_coverage","_recordscreen","_streamscreen","_performance","_execute","_shell","_emuConsole","_fileActions","_appManagement","_intent","_systemBars","_log","_mediaProjection","_permissions","_keyboard","commands","exports","Object","assign","findCmds","generalCmds","alertCmds","elementCmds","contextCmds","actionCmds","touchCmds","imeCmds","networkCmds","coverageCmds","recordscreenCmds","intentCmds","screenStreamCmds","performanceCmds","executeCmds","shellCmds","emuConsoleCmds","systemBarsCmds","appManagementCmds","fileActionsCmds","logCmds","mediaProjectionCmds","permissionsCmds","keyboardCmds","_default","default"],"sources":["../../../lib/commands/index.js"],"sourcesContent":["import findCmds from './find';\nimport generalCmds from './general';\nimport alertCmds from './alert';\nimport elementCmds from './element';\nimport contextCmds from './context';\nimport actionCmds from './actions';\nimport touchCmds from './touch';\nimport imeCmds from './ime';\nimport networkCmds from './network';\nimport coverageCmds from './coverage';\nimport recordscreenCmds from './recordscreen';\nimport screenStreamCmds from './streamscreen';\nimport performanceCmds from './performance';\nimport executeCmds from './execute';\nimport shellCmds from './shell';\nimport emuConsoleCmds from './emu-console';\nimport fileActionsCmds from './file-actions';\nimport appManagementCmds from './app-management';\nimport intentCmds from './intent';\nimport systemBarsCmds from './system-bars';\nimport logCmds from './log';\nimport mediaProjectionCmds from './media-projection';\nimport permissionsCmds from './permissions';\nimport keyboardCmds from './keyboard';\n\n\nlet commands = {};\nObject.assign(\n commands,\n findCmds,\n generalCmds,\n alertCmds,\n elementCmds,\n contextCmds,\n actionCmds,\n touchCmds,\n imeCmds,\n networkCmds,\n coverageCmds,\n recordscreenCmds,\n intentCmds,\n screenStreamCmds,\n performanceCmds,\n executeCmds,\n shellCmds,\n emuConsoleCmds,\n systemBarsCmds,\n appManagementCmds,\n fileActionsCmds,\n logCmds,\n mediaProjectionCmds,\n permissionsCmds,\n keyboardCmds,\n // add other command types here\n);\n\nexport { commands };\nexport default commands;\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,QAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,MAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,IAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,QAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,SAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,aAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,aAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,YAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,QAAA,GAAAd,sBAAA,CAAAC,OAAA;AACA,IAAAc,MAAA,GAAAf,sBAAA,CAAAC,OAAA;AACA,IAAAe,WAAA,GAAAhB,sBAAA,CAAAC,OAAA;AACA,IAAAgB,YAAA,GAAAjB,sBAAA,CAAAC,OAAA;AACA,IAAAiB,cAAA,GAAAlB,sBAAA,CAAAC,OAAA;AACA,IAAAkB,OAAA,GAAAnB,sBAAA,CAAAC,OAAA;AACA,IAAAmB,WAAA,GAAApB,sBAAA,CAAAC,OAAA;AACA,IAAAoB,IAAA,GAAArB,sBAAA,CAAAC,OAAA;AACA,IAAAqB,gBAAA,GAAAtB,sBAAA,CAAAC,OAAA;AACA,IAAAsB,YAAA,GAAAvB,sBAAA,CAAAC,OAAA;AACA,IAAAuB,SAAA,GAAAxB,sBAAA,CAAAC,OAAA;AAGA,IAAIwB,QAAQ,GAAG,CAAC,CAAC;AAACC,OAAA,CAAAD,QAAA,GAAAA,QAAA;AAClBE,MAAM,CAACC,MAAM,CACXH,QAAQ,EACRI,aAAQ,EACRC,gBAAW,EACXC,cAAS,EACTC,gBAAW,EACXC,gBAAW,EACXC,gBAAU,EACVC,cAAS,EACTC,YAAO,EACPC,gBAAW,EACXC,iBAAY,EACZC,qBAAgB,EAChBC,eAAU,EACVC,qBAAgB,EAChBC,oBAAe,EACfC,gBAAW,EACXC,cAAS,EACTC,mBAAc,EACdC,mBAAc,EACdC,sBAAiB,EACjBC,oBAAe,EACfC,YAAO,EACPC,wBAAmB,EACnBC,oBAAe,EACfC,iBAAY,CAEb;AAAC,IAAAC,QAAA,GAGa5B,QAAQ;AAAAC,OAAA,CAAA4B,OAAA,GAAAD,QAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
require("source-map-support/register");
|
|
8
|
+
const commands = {};
|
|
9
|
+
commands.hideKeyboard = async function hideKeyboard() {
|
|
10
|
+
return await this.adb.hideKeyboard();
|
|
11
|
+
};
|
|
12
|
+
commands.isKeyboardShown = async function isKeyboardShown() {
|
|
13
|
+
const {
|
|
14
|
+
isKeyboardShown
|
|
15
|
+
} = await this.adb.isSoftKeyboardPresent();
|
|
16
|
+
return isKeyboardShown;
|
|
17
|
+
};
|
|
18
|
+
var _default = commands;
|
|
19
|
+
exports.default = _default;
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kcyIsImhpZGVLZXlib2FyZCIsImFkYiIsImlzS2V5Ym9hcmRTaG93biIsImlzU29mdEtleWJvYXJkUHJlc2VudCIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29tbWFuZHMva2V5Ym9hcmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY29tbWFuZHMgPSB7fTtcblxuY29tbWFuZHMuaGlkZUtleWJvYXJkID0gYXN5bmMgZnVuY3Rpb24gaGlkZUtleWJvYXJkICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLmhpZGVLZXlib2FyZCgpO1xufTtcblxuY29tbWFuZHMuaXNLZXlib2FyZFNob3duID0gYXN5bmMgZnVuY3Rpb24gaXNLZXlib2FyZFNob3duICgpIHtcbiAgY29uc3Qge2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmFkYi5pc1NvZnRLZXlib2FyZFByZXNlbnQoKTtcbiAgcmV0dXJuIGlzS2V5Ym9hcmRTaG93bjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsTUFBTUEsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVuQkEsUUFBUSxDQUFDQyxZQUFZLEdBQUcsZUFBZUEsWUFBWUEsQ0FBQSxFQUFJO0VBQ3JELE9BQU8sTUFBTSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0QsWUFBWSxFQUFFO0FBQ3RDLENBQUM7QUFFREQsUUFBUSxDQUFDRyxlQUFlLEdBQUcsZUFBZUEsZUFBZUEsQ0FBQSxFQUFJO0VBQzNELE1BQU07SUFBQ0E7RUFBZSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUNELEdBQUcsQ0FBQ0UscUJBQXFCLEVBQUU7RUFDaEUsT0FBT0QsZUFBZTtBQUN4QixDQUFDO0FBQUMsSUFBQUUsUUFBQSxHQUVhTCxRQUFRO0FBQUFNLE9BQUEsQ0FBQUMsT0FBQSxHQUFBRixRQUFBIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.js","names":["commands","hideKeyboard","adb","isKeyboardShown","isSoftKeyboardPresent","_default","exports","default"],"sources":["../../../lib/commands/keyboard.js"],"sourcesContent":["const commands = {};\n\ncommands.hideKeyboard = async function hideKeyboard () {\n return await this.adb.hideKeyboard();\n};\n\ncommands.isKeyboardShown = async function isKeyboardShown () {\n const {isKeyboardShown} = await this.adb.isSoftKeyboardPresent();\n return isKeyboardShown;\n};\n\nexport default commands;\n"],"mappings":";;;;;;;AAAA,MAAMA,QAAQ,GAAG,CAAC,CAAC;AAEnBA,QAAQ,CAACC,YAAY,GAAG,eAAeA,YAAYA,CAAA,EAAI;EACrD,OAAO,MAAM,IAAI,CAACC,GAAG,CAACD,YAAY,EAAE;AACtC,CAAC;AAEDD,QAAQ,CAACG,eAAe,GAAG,eAAeA,eAAeA,CAAA,EAAI;EAC3D,MAAM;IAACA;EAAe,CAAC,GAAG,MAAM,IAAI,CAACD,GAAG,CAACE,qBAAqB,EAAE;EAChE,OAAOD,eAAe;AACxB,CAAC;AAAC,IAAAE,QAAA,GAEaL,QAAQ;AAAAM,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -113,7 +113,9 @@ class MediaProjectionRecorder {
|
|
|
113
113
|
return null;
|
|
114
114
|
}
|
|
115
115
|
const dstPath = _path.default.join(await _support.tempDir.openDir(), recordings[0]);
|
|
116
|
-
await this.adb.pull(`${RECORDINGS_ROOT}/${recordings[0]}`, dstPath
|
|
116
|
+
await this.adb.pull(`${RECORDINGS_ROOT}/${recordings[0]}`, dstPath, {
|
|
117
|
+
timeout: 300000
|
|
118
|
+
});
|
|
117
119
|
return dstPath;
|
|
118
120
|
}
|
|
119
121
|
async stop() {
|
|
@@ -189,4 +191,4 @@ commands.mobileStopMediaProjectionRecording = async function mobileStopMediaProj
|
|
|
189
191
|
};
|
|
190
192
|
var _default = commands;
|
|
191
193
|
exports.default = _default;
|
|
192
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYXN5bmNib3giLCJfc3VwcG9ydCIsIl9wYXRoIiwiX2JsdWViaXJkIiwiX2FuZHJvaWRIZWxwZXJzIiwiX21vbWVudCIsImNvbW1hbmRzIiwiZXhwb3J0cyIsIkRFRkFVTFRfRVhUIiwiUkVDT1JESU5HX1NUQVJUVVBfVElNRU9VVF9NUyIsIlJFQ09SRElOR19TVE9QX1RJTUVPVVRfTVMiLCJNSU5fQVBJX0xFVkVMIiwiUkVDT1JESU5HX1NFUlZJQ0VfTkFNRSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSIsIlJFQ09SRElOR19BQ1RJT05fU1RBUlQiLCJSRUNPUkRJTkdfQUNUSU9OX1NUT1AiLCJSRUNPUkRJTkdTX1JPT1QiLCJERUZBVUxUX0ZJTEVOQU1FX0ZPUk1BVCIsInVwbG9hZFJlY29yZGVkTWVkaWEiLCJsb2NhbEZpbGUiLCJyZW1vdGVQYXRoIiwidXBsb2FkT3B0aW9ucyIsIl8iLCJpc0VtcHR5IiwidXRpbCIsInRvSW5NZW1vcnlCYXNlNjQiLCJ0b1N0cmluZyIsInVzZXIiLCJwYXNzIiwibWV0aG9kIiwiaGVhZGVycyIsImZpbGVGaWVsZE5hbWUiLCJmb3JtRmllbGRzIiwib3B0aW9ucyIsImF1dGgiLCJuZXQiLCJ1cGxvYWRGaWxlIiwiYWRqdXN0TWVkaWFFeHRlbnNpb24iLCJuYW1lIiwidG9Mb3dlciIsImVuZHNXaXRoIiwidmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQiLCJhZGIiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwiRXJyb3IiLCJNZWRpYVByb2plY3Rpb25SZWNvcmRlciIsImNvbnN0cnVjdG9yIiwiaXNSdW5uaW5nIiwic3Rkb3V0Iiwic2hlbGwiLCJpbmNsdWRlcyIsInN0YXJ0Iiwib3B0cyIsImNsZWFudXAiLCJmaWxlbmFtZSIsIm1heER1cmF0aW9uU2VjIiwicHJpb3JpdHkiLCJyZXNvbHV0aW9uIiwiYXJncyIsInB1c2giLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJwdWxsUmVjZW50IiwicmVjb3JkaW5ncyIsImxzIiwiZHN0UGF0aCIsInBhdGgiLCJqb2luIiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsIiwic3RvcCIsIndhaXRGb3JDb25kaXRpb24iLCJ3YWl0TXMiLCJpbnRlcnZhbE1zIiwiZSIsIm1vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwicmVjb3JkZXIiLCJmbmFtZSIsIm1vbWVudCIsImZvcm1hdCIsImRpZFN0YXJ0IiwibG9nIiwiaW5mbyIsIm1vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyIsIm1vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmciLCJyZWNlbnRSZWNvcmRpbmdQYXRoIiwic2l6ZSIsImZzIiwic3RhdCIsImRlYnVnIiwidG9SZWFkYWJsZVNpemVTdHJpbmciLCJyaW1yYWYiLCJkaXJuYW1lIiwiX2RlZmF1bHQiLCJkZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbW1hbmRzL21lZGlhLXByb2plY3Rpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyB1dGlsLCBmcywgbmV0LCB0ZW1wRGlyIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgU0VUVElOR1NfSEVMUEVSX1BLR19JRCB9IGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9pby5hcHBpdW0uc2V0dGluZ3MjaW50ZXJuYWwtYXVkaW8tLXZpZGVvLXJlY29yZGluZ1xuY29uc3QgREVGQVVMVF9FWFQgPSAnLm1wNCc7XG5jb25zdCBSRUNPUkRJTkdfU1RBUlRVUF9USU1FT1VUX01TID0gMyAqIDEwMDA7XG5jb25zdCBSRUNPUkRJTkdfU1RPUF9USU1FT1VUX01TID0gMyAqIDEwMDA7XG5jb25zdCBNSU5fQVBJX0xFVkVMID0gMjk7XG5jb25zdCBSRUNPUkRJTkdfU0VSVklDRV9OQU1FID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vLnJlY29yZGVyLlJlY29yZGVyU2VydmljZWA7XG5jb25zdCBSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9L2lvLmFwcGl1bS5zZXR0aW5ncy5TZXR0aW5nc2A7XG5jb25zdCBSRUNPUkRJTkdfQUNUSU9OX1NUQVJUID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0ucmVjb3JkaW5nLkFDVElPTl9TVEFSVGA7XG5jb25zdCBSRUNPUkRJTkdfQUNUSU9OX1NUT1AgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS5yZWNvcmRpbmcuQUNUSU9OX1NUT1BgO1xuY29uc3QgUkVDT1JESU5HU19ST09UID0gYC9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhLyR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0vZmlsZXNgO1xuY29uc3QgREVGQVVMVF9GSUxFTkFNRV9GT1JNQVQgPSAnWVlZWS1NTS1ERFRISC1tbS1zcyc7XG5cblxuYXN5bmMgZnVuY3Rpb24gdXBsb2FkUmVjb3JkZWRNZWRpYSAobG9jYWxGaWxlLCByZW1vdGVQYXRoID0gbnVsbCwgdXBsb2FkT3B0aW9ucyA9IHt9KSB7XG4gIGlmIChfLmlzRW1wdHkocmVtb3RlUGF0aCkpIHtcbiAgICByZXR1cm4gKGF3YWl0IHV0aWwudG9Jbk1lbW9yeUJhc2U2NChsb2NhbEZpbGUpKS50b1N0cmluZygpO1xuICB9XG5cbiAgY29uc3Qge3VzZXIsIHBhc3MsIG1ldGhvZCwgaGVhZGVycywgZmlsZUZpZWxkTmFtZSwgZm9ybUZpZWxkc30gPSB1cGxvYWRPcHRpb25zO1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIG1ldGhvZDogbWV0aG9kIHx8ICdQVVQnLFxuICAgIGhlYWRlcnMsXG4gICAgZmlsZUZpZWxkTmFtZSxcbiAgICBmb3JtRmllbGRzLFxuICB9O1xuICBpZiAodXNlciAmJiBwYXNzKSB7XG4gICAgb3B0aW9ucy5hdXRoID0ge3VzZXIsIHBhc3N9O1xuICB9XG4gIGF3YWl0IG5ldC51cGxvYWRGaWxlKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCwgb3B0aW9ucyk7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gYWRqdXN0TWVkaWFFeHRlbnNpb24gKG5hbWUpIHtcbiAgcmV0dXJuIF8udG9Mb3dlcihuYW1lKS5lbmRzV2l0aChERUZBVUxUX0VYVCkgPyBuYW1lIDogYCR7bmFtZX0ke0RFRkFVTFRfRVhUfWA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeU1lZGlhUHJvamVjdGlvblJlY29yZGluZ0lzU3VwcG9ydGVkIChhZGIpIHtcbiAgY29uc3QgYXBpTGV2ZWwgPSBhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKTtcbiAgaWYgKGFwaUxldmVsIDwgTUlOX0FQSV9MRVZFTCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWVkaWEgcHJvamVjdGlvbi1iYXNlZCByZWNvcmRpbmcgaXMgbm90IGF2YWlsYWJsZSBvbiBBUEkgTGV2ZWwgJHthcGlMZXZlbH0uIGAgK1xuICAgICAgYE1pbmltdW0gcmVxdWlyZWQgQVBJIExldmVsIGlzICR7TUlOX0FQSV9MRVZFTH0uYCk7XG4gIH1cbn1cblxuXG5jbGFzcyBNZWRpYVByb2plY3Rpb25SZWNvcmRlciB7XG4gIGNvbnN0cnVjdG9yIChhZGIpIHtcbiAgICB0aGlzLmFkYiA9IGFkYjtcbiAgfVxuXG4gIGFzeW5jIGlzUnVubmluZyAoKSB7XG4gICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoW1xuICAgICAgJ2R1bXBzeXMnLCAnYWN0aXZpdHknLCAnc2VydmljZXMnLCBSRUNPUkRJTkdfU0VSVklDRV9OQU1FXG4gICAgXSk7XG4gICAgcmV0dXJuIHN0ZG91dC5pbmNsdWRlcyhSRUNPUkRJTkdfU0VSVklDRV9OQU1FKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0IChvcHRzID0ge30pIHtcbiAgICBpZiAoYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgbWF4RHVyYXRpb25TZWMsXG4gICAgICBwcmlvcml0eSxcbiAgICAgIHJlc29sdXRpb24sXG4gICAgfSA9IG9wdHM7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdhbScsICdzdGFydCcsXG4gICAgICAnLW4nLCBSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSxcbiAgICAgICctYScsIFJFQ09SRElOR19BQ1RJT05fU1RBUlQsXG4gICAgXTtcbiAgICBpZiAoZmlsZW5hbWUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1lcycsICdmaWxlbmFtZScsIGZpbGVuYW1lKTtcbiAgICB9XG4gICAgaWYgKG1heER1cmF0aW9uU2VjKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZXMnLCAnbWF4X2R1cmF0aW9uX3NlYycsIGAke21heER1cmF0aW9uU2VjfWApO1xuICAgIH1cbiAgICBpZiAocHJpb3JpdHkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1lcycsICdwcmlvcml0eScsIHByaW9yaXR5KTtcbiAgICB9XG4gICAgaWYgKHJlc29sdXRpb24pIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1lcycsICdyZXNvbHV0aW9uJywgcmVzb2x1dGlvbik7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKGFyZ3MpO1xuICAgIGF3YWl0IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoIWF3YWl0IHRoaXMuaXNSdW5uaW5nKCkpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgaXMgbm90IHJ1bm5pbmcgYWZ0ZXIgJHtSRUNPUkRJTkdfU1RBUlRVUF9USU1FT1VUX01TfW1zLiBgICtcbiAgICAgICAgICAgIGBQbGVhc2UgY2hlY2sgdGhlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscy5gXG4gICAgICAgICAgKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgUkVDT1JESU5HX1NUQVJUVVBfVElNRU9VVF9NUyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjbGVhbnVwICgpIHtcbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbYHJtIC1mICR7UkVDT1JESU5HU19ST09UfS8qYF0pO1xuICB9XG5cbiAgYXN5bmMgcHVsbFJlY2VudCAoKSB7XG4gICAgY29uc3QgcmVjb3JkaW5ncyA9IGF3YWl0IHRoaXMuYWRiLmxzKFJFQ09SRElOR1NfUk9PVCwgWyctdHInXSk7XG4gICAgaWYgKF8uaXNFbXB0eShyZWNvcmRpbmdzKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZHN0UGF0aCA9IHBhdGguam9pbihhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKSwgcmVjb3JkaW5nc1swXSk7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVsbChgJHtSRUNPUkRJTkdTX1JPT1R9LyR7cmVjb3JkaW5nc1swXX1gLCBkc3RQYXRoKTtcbiAgICByZXR1cm4gZHN0UGF0aDtcbiAgfVxuXG4gIGFzeW5jIHN0b3AgKCkge1xuICAgIGlmICghYXdhaXQgdGhpcy5pc1J1bm5pbmcoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICdhbScsICdzdGFydCcsXG4gICAgICAnLW4nLCBSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSxcbiAgICAgICctYScsIFJFQ09SRElOR19BQ1RJT05fU1RPUCxcbiAgICBdKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgd2FpdEZvckNvbmRpdGlvbihhc3luYyAoKSA9PiAhKGF3YWl0IHRoaXMuaXNSdW5uaW5nKCkpLCB7XG4gICAgICAgIHdhaXRNczogUkVDT1JESU5HX1NUT1BfVElNRU9VVF9NUyxcbiAgICAgICAgaW50ZXJ2YWxNczogNTAwLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGF0dGVtcHQgdG8gc3RvcCB0aGUgY3VycmVudCBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyB0aW1lZCBvdXQgYWZ0ZXIgYCArXG4gICAgICAgIGAke1JFQ09SRElOR19TVE9QX1RJTUVPVVRfTVN9bXNgXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RhcnRSZWNvcmRpbmdPcHRpb25zXG4gKlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSByZXNvbHV0aW9uIE1heGltdW0gc3VwcG9ydGVkIHJlc29sdXRpb24gb24tZGV2aWNlIChEZXRlY3RlZFxuICogYXV0b21hdGljYWxseSBieSB0aGUgYXBwIGl0c2VsZiksIHdoaWNoIHVzdWFsbHkgZXF1YWxzIHRvIEZ1bGwgSEQgMTkyMHgxMDgwIG9uIG1vc3RcbiAqIHBob25lcyBob3dldmVyIHlvdSBjYW4gY2hhbmdlIGl0IHRvIGZvbGxvd2luZyBzdXBwb3J0ZWQgcmVzb2x1dGlvbnNcbiAqIGFzIHdlbGw6IFwiMTkyMHgxMDgwXCIsIFwiMTI4MHg3MjBcIiwgXCI3MjB4NDgwXCIsIFwiMzIweDI0MFwiLCBcIjE3NngxNDRcIi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyP30gbWF4RHVyYXRpb25TZWMgWzkwMF0gRGVmYXVsdCB2YWx1ZTogOTAwIHNlY29uZHMgd2hpY2ggbWVhbnNcbiAqIG1heGltdW0gYWxsb3dlZCBkdXJhdGlvbiBpcyAxNSBtaW51dGUsIHlvdSBjYW4gaW5jcmVhc2UgaXQgaWYgeW91ciB0ZXN0IHRha2VzXG4gKiBsb25nZXIgdGhhbiB0aGF0LlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBwcmlvcml0eSBbaGlnaF0gTWVhbnMgcmVjb3JkaW5nIHRocmVhZCBwcmlvcml0eSBpcyBtYXhpbXVtXG4gKiBob3dldmVyIGlmIHlvdSBmYWNlIHBlcmZvcm1hbmNlIGRyb3BzIGR1cmluZyB0ZXN0aW5nIHdpdGggcmVjb3JkaW5nIGVuYWJsZWQsIHlvdVxuICogY2FuIHJlZHVjZSByZWNvcmRpbmcgcHJpb3JpdHkgdG8gXCJub3JtYWxcIiBvciBcImxvd1wiLlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBmaWxlbmFtZSBZb3UgY2FuIHR5cGUgcmVjb3JkaW5nIHZpZGVvIGZpbGUgbmFtZSBhcyB5b3Ugd2FudCxcbiAqIGJ1dCByZWNvcmRpbmcgY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgXCJtcDRcIiBmb3JtYXQgc28geW91ciBmaWxlbmFtZSBtdXN0IGVuZCB3aXRoIFwiLm1wNFwiLlxuICogQW4gaW52YWxpZCBmaWxlIG5hbWUgd2lsbCBmYWlsIHRvIHN0YXJ0IHRoZSByZWNvcmRpbmcuXG4gKiBJZiBub3QgcHJvdmlkZWQgdGhlbiB0aGUgY3VycmVudCB0aW1lc3RhbXAgd2lsbCBiZSB1c2VkIGFzIGZpbGUgbmFtZS5cbiAqL1xuXG4vKipcbiAqIFJlY29yZCB0aGUgZGlzcGxheSBvZiBhIHJlYWwgZGV2aWNlcyBydW5uaW5nIEFuZHJvaWQgMTAgKEFQSSBsZXZlbCAyOSkgYW5kIGhpZ2hlci5cbiAqIFRoZSBzY3JlZW4gYWN0aXZpdHkgaXMgcmVjb3JkZWQgdG8gYSBNUEVHLTQgZmlsZS4gQXVkaW8gaXMgYWxzbyByZWNvcmRlZCBieSBkZWZhdWx0XG4gKiAob25seSBmb3IgYXBwcyB0aGF0IGFsbG93IGl0IGluIHRoZWlyIG1hbmlmZXN0cykuXG4gKiBJZiBhbm90aGVyIHJlY29yZGluZyBoYXMgYmVlbiBhbHJlYWR5IHN0YXJ0ZWQgdGhlbiB0aGUgY29tbWFuZCB3aWxsIGV4aXQgc2lsZW50bHkuXG4gKiBUaGUgcHJldmlvdXNseSByZWNvcmRlZCB2aWRlbyBmaWxlIGlzIGRlbGV0ZWQgd2hlbiBhIG5ldyByZWNvcmRpbmcgc2Vzc2lvbiBpcyBzdGFydGVkLlxuICogUmVjb3JkaW5nIGNvbnRpbnVlcyBpdCBpcyBzdG9wcGVkIGV4cGxpY2l0bHkgb3IgdW50aWwgdGhlIHRpbWVvdXQgaGFwcGVucy5cbiAqXG4gKiBAcGFyYW0gez9TdGFydFJlY29yZGluZ09wdGlvbnN9IG9wdGlvbnMgQXZhaWxhYmxlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIG5ldyByZWNvcmRpbmcgaGFzIHN1Y2Nlc3NmdWxseSBzdGFydGVkLlxuICogQHRocm93cyB7RXJyb3J9IElmIHJlY29yZGluZyBoYXMgZmFpbGVkIHRvIHN0YXJ0IG9yIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICovXG5jb21tYW5kcy5tb2JpbGVTdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVN0YXJ0TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIChvcHRpb25zID0ge30pIHtcbiAgYXdhaXQgdmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQodGhpcy5hZGIpO1xuXG4gIGNvbnN0IHtyZXNvbHV0aW9uLCBwcmlvcml0eSwgbWF4RHVyYXRpb25TZWMsIGZpbGVuYW1lfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUHJvamVjdGlvblJlY29yZGVyKHRoaXMuYWRiKTtcbiAgY29uc3QgZm5hbWUgPSBhZGp1c3RNZWRpYUV4dGVuc2lvbihmaWxlbmFtZSB8fCBtb21lbnQoKS5mb3JtYXQoREVGQVVMVF9GSUxFTkFNRV9GT1JNQVQpKTtcbiAgY29uc3QgZGlkU3RhcnQgPSBhd2FpdCByZWNvcmRlci5zdGFydCh7XG4gICAgcmVzb2x1dGlvbixcbiAgICBwcmlvcml0eSxcbiAgICBtYXhEdXJhdGlvblNlYyxcbiAgICBmaWxlbmFtZTogZm5hbWUsXG4gIH0pO1xuICBpZiAoZGlkU3RhcnQpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBBIG5ldyBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyAnJHtmbmFtZX0nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzdGFydGVkYCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sb2cuaW5mbygnQW5vdGhlciBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyBpcyBhbHJlYWR5IGluIHByb2dyZXNzLiBUaGVyZSBpcyBub3RoaW5nIHRvIHN0YXJ0Jyk7XG4gIH1cbiAgcmV0dXJuIGRpZFN0YXJ0O1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtZWRpYSBwcm9qZWN0aW9uLWJhc2VkIHJlY29yZGluZyBpcyBjdXJyZW50bHkgcnVubmluZy5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBhIHJlY29yZGluZyBpcyBpbiBwcm9ncmVzcy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhIHJlY29yZGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqL1xuY29tbWFuZHMubW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlSXNNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdSdW5uaW5nICgpIHtcbiAgYXdhaXQgdmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQodGhpcy5hZGIpO1xuXG4gIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUHJvamVjdGlvblJlY29yZGVyKHRoaXMuYWRiKTtcbiAgcmV0dXJuIGF3YWl0IHJlY29yZGVyLmlzUnVubmluZygpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTdG9wUmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gcmVtb3RlUGF0aCBUaGUgcGF0aCB0byB0aGUgcmVtb3RlIGxvY2F0aW9uLCB3aGVyZSB0aGUgcmVzdWx0aW5nIHZpZGVvIHNob3VsZCBiZSB1cGxvYWRlZC5cbiAqIFRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IGh0dHAvaHR0cHMsIGZ0cC5cbiAqIE51bGwgb3IgZW1wdHkgc3RyaW5nIHZhbHVlICh0aGUgZGVmYXVsdCBzZXR0aW5nKSBtZWFucyB0aGUgY29udGVudCBvZiByZXN1bHRpbmdcbiAqIGZpbGUgc2hvdWxkIGJlIGVuY29kZWQgYXMgQmFzZTY0IGFuZCBwYXNzZWQgYXMgdGhlIGVuZHBvb250IHJlc3BvbnNlIHZhbHVlLlxuICogQW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGlmIHRoZSBnZW5lcmF0ZWQgbWVkaWEgZmlsZSBpcyB0b28gYmlnIHRvXG4gKiBmaXQgaW50byB0aGUgYXZhaWxhYmxlIHByb2Nlc3MgbWVtb3J5LlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSB1c2VyIFRoZSBuYW1lIG9mIHRoZSB1c2VyIGZvciB0aGUgcmVtb3RlIGF1dGhlbnRpY2F0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmc/fSBwYXNzIFRoZSBwYXNzd29yZCBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gbWV0aG9kIFRoZSBodHRwIG11bHRpcGFydCB1cGxvYWQgbWV0aG9kIG5hbWUuIFRoZSAnUFVUJyBvbmUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtPYmplY3Q/fSBoZWFkZXJzIEFkZGl0aW9uYWwgaGVhZGVycyBtYXBwaW5nIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKiBAcHJvcGVydHkge3N0cmluZz99IGZpbGVGaWVsZE5hbWUgW2ZpbGVdIFRoZSBuYW1lIG9mIHRoZSBmb3JtIGZpZWxkLCB3aGVyZSB0aGUgZmlsZSBjb250ZW50IEJMT0Igc2hvdWxkIGJlIHN0b3JlZCBmb3JcbiAqIGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHtPYmplY3R8QXJyYXk8UGFpcj4/fSBmb3JtRmllbGRzIEFkZGl0aW9uYWwgZm9ybSBmaWVsZHMgZm9yIG11bHRpcGFydCBodHRwKHMpIHVwbG9hZHNcbiAqL1xuXG4vKipcbiAqIFN0b3AgYSBtZWRpYSBwcm9qZWN0aW9uLWJhc2VkIHJlY29yZGluZy5cbiAqIElmIG5vIHJlY29yZGluZyBoYXMgYmVlbiBzdGFydGVkIGJlZm9yZSB0aGVuIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIElmIHRoZSByZWNvcmRpbmcgaGFzIGJlZW4gYWxyZWFkeSBmaW5pc2hlZCBiZWZvcmUgdGhpcyBBUEkgaGFzIGJlZW4gY2FsbGVkXG4gKiB0aGVuIHRoZSBtb3N0IHJlY2VudCByZWNvcmRlZCBmaWxlIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7P1N0b3BSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIEF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgY29udGVudCBvZiB0aGUgcmVjb3JkZWQgbWVkaWEgZmlsZSBpZiAncmVtb3RlUGF0aCdcbiAqIHBhcmFtZXRlciBpcyBmYWxzeSBvciBhbiBlbXB0eSBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHN0b3BwaW5nIGEgcmVjb3JkaW5nLFxuICogZmV0Y2hpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIHJlbW90ZSBtZWRpYSBmaWxlLFxuICogb3IgaWYgYSByZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZVN0b3BNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIChvcHRpb25zID0ge30pIHtcbiAgYXdhaXQgdmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQodGhpcy5hZGIpO1xuXG4gIGNvbnN0IHJlY29yZGVyID0gbmV3IE1lZGlhUHJvamVjdGlvblJlY29yZGVyKHRoaXMuYWRiKTtcbiAgaWYgKGF3YWl0IHJlY29yZGVyLnN0b3AoKSkge1xuICAgIHRoaXMubG9nLmluZm8oJ1N1Y2Nlc3NmdWxseSBzdG9wcGVkIGEgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcuIFB1bGxpbmcgdGhlIHJlY29yZGVkIG1lZGlhJyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5sb2cuaW5mbygnTWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgaXMgbm90IHJ1bm5pbmcuIFRoZXJlIGlzIG5vdGhpbmcgdG8gc3RvcCcpO1xuICB9XG4gIGNvbnN0IHJlY2VudFJlY29yZGluZ1BhdGggPSBhd2FpdCByZWNvcmRlci5wdWxsUmVjZW50KCk7XG4gIGlmICghcmVjZW50UmVjb3JkaW5nUGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVjZW50IG1lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nIGhhdmUgYmVlbiBmb3VuZC4gRGlkIHlvdSBzdGFydCBhbnk/YCk7XG4gIH1cblxuICBjb25zdCB7cmVtb3RlUGF0aH0gPSBvcHRpb25zO1xuICBpZiAoXy5pc0VtcHR5KHJlbW90ZVBhdGgpKSB7XG4gICAgY29uc3Qge3NpemV9ID0gYXdhaXQgZnMuc3RhdChyZWNlbnRSZWNvcmRpbmdQYXRoKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgVGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyBpcyAke3V0aWwudG9SZWFkYWJsZVNpemVTdHJpbmcoc2l6ZSl9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgdXBsb2FkUmVjb3JkZWRNZWRpYShyZWNlbnRSZWNvcmRpbmdQYXRoLCByZW1vdGVQYXRoLCBvcHRpb25zKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBmcy5yaW1yYWYocGF0aC5kaXJuYW1lKHJlY2VudFJlY29yZGluZ1BhdGgpKTtcbiAgfVxufTtcblxuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBR0EsTUFBTU8sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUFDQyxPQUFBLENBQUFELFFBQUEsR0FBQUEsUUFBQTtBQUdwQixNQUFNRSxXQUFXLEdBQUcsTUFBTTtBQUMxQixNQUFNQyw0QkFBNEIsR0FBRyxDQUFDLEdBQUcsSUFBSTtBQUM3QyxNQUFNQyx5QkFBeUIsR0FBRyxDQUFDLEdBQUcsSUFBSTtBQUMxQyxNQUFNQyxhQUFhLEdBQUcsRUFBRTtBQUN4QixNQUFNQyxzQkFBc0IsR0FBSSxHQUFFQyxzQ0FBdUIsNEJBQTJCO0FBQ3BGLE1BQU1DLHVCQUF1QixHQUFJLEdBQUVELHNDQUF1Qiw4QkFBNkI7QUFDdkYsTUFBTUUsc0JBQXNCLEdBQUksR0FBRUYsc0NBQXVCLHlCQUF3QjtBQUNqRixNQUFNRyxxQkFBcUIsR0FBSSxHQUFFSCxzQ0FBdUIsd0JBQXVCO0FBQy9FLE1BQU1JLGVB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
|
|
194
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfYXN5bmNib3giLCJfc3VwcG9ydCIsIl9wYXRoIiwiX2JsdWViaXJkIiwiX2FuZHJvaWRIZWxwZXJzIiwiX21vbWVudCIsImNvbW1hbmRzIiwiZXhwb3J0cyIsIkRFRkFVTFRfRVhUIiwiUkVDT1JESU5HX1NUQVJUVVBfVElNRU9VVF9NUyIsIlJFQ09SRElOR19TVE9QX1RJTUVPVVRfTVMiLCJNSU5fQVBJX0xFVkVMIiwiUkVDT1JESU5HX1NFUlZJQ0VfTkFNRSIsIlNFVFRJTkdTX0hFTFBFUl9QS0dfSUQiLCJSRUNPUkRJTkdfQUNUSVZJVFlfTkFNRSIsIlJFQ09SRElOR19BQ1RJT05fU1RBUlQiLCJSRUNPUkRJTkdfQUNUSU9OX1NUT1AiLCJSRUNPUkRJTkdTX1JPT1QiLCJERUZBVUxUX0ZJTEVOQU1FX0ZPUk1BVCIsInVwbG9hZFJlY29yZGVkTWVkaWEiLCJsb2NhbEZpbGUiLCJyZW1vdGVQYXRoIiwidXBsb2FkT3B0aW9ucyIsIl8iLCJpc0VtcHR5IiwidXRpbCIsInRvSW5NZW1vcnlCYXNlNjQiLCJ0b1N0cmluZyIsInVzZXIiLCJwYXNzIiwibWV0aG9kIiwiaGVhZGVycyIsImZpbGVGaWVsZE5hbWUiLCJmb3JtRmllbGRzIiwib3B0aW9ucyIsImF1dGgiLCJuZXQiLCJ1cGxvYWRGaWxlIiwiYWRqdXN0TWVkaWFFeHRlbnNpb24iLCJuYW1lIiwidG9Mb3dlciIsImVuZHNXaXRoIiwidmVyaWZ5TWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nSXNTdXBwb3J0ZWQiLCJhZGIiLCJhcGlMZXZlbCIsImdldEFwaUxldmVsIiwiRXJyb3IiLCJNZWRpYVByb2plY3Rpb25SZWNvcmRlciIsImNvbnN0cnVjdG9yIiwiaXNSdW5uaW5nIiwic3Rkb3V0Iiwic2hlbGwiLCJpbmNsdWRlcyIsInN0YXJ0Iiwib3B0cyIsImNsZWFudXAiLCJmaWxlbmFtZSIsIm1heER1cmF0aW9uU2VjIiwicHJpb3JpdHkiLCJyZXNvbHV0aW9uIiwiYXJncyIsInB1c2giLCJCIiwicmVzb2x2ZSIsInJlamVjdCIsInNldFRpbWVvdXQiLCJwdWxsUmVjZW50IiwicmVjb3JkaW5ncyIsImxzIiwiZHN0UGF0aCIsInBhdGgiLCJqb2luIiwidGVtcERpciIsIm9wZW5EaXIiLCJwdWxsIiwidGltZW91dCIsInN0b3AiLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImUiLCJtb2JpbGVTdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyIsInJlY29yZGVyIiwiZm5hbWUiLCJtb21lbnQiLCJmb3JtYXQiLCJkaWRTdGFydCIsImxvZyIsImluZm8iLCJtb2JpbGVJc01lZGlhUHJvamVjdGlvblJlY29yZGluZ1J1bm5pbmciLCJtb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nIiwicmVjZW50UmVjb3JkaW5nUGF0aCIsInNpemUiLCJmcyIsInN0YXQiLCJkZWJ1ZyIsInRvUmVhZGFibGVTaXplU3RyaW5nIiwicmltcmFmIiwiZGlybmFtZSIsIl9kZWZhdWx0IiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21tYW5kcy9tZWRpYS1wcm9qZWN0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyB3YWl0Rm9yQ29uZGl0aW9uIH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IHsgdXRpbCwgZnMsIG5ldCwgdGVtcERpciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7IFNFVFRJTkdTX0hFTFBFUl9QS0dfSUQgfSBmcm9tICcuLi9hbmRyb2lkLWhlbHBlcnMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vaW8uYXBwaXVtLnNldHRpbmdzI2ludGVybmFsLWF1ZGlvLS12aWRlby1yZWNvcmRpbmdcbmNvbnN0IERFRkFVTFRfRVhUID0gJy5tcDQnO1xuY29uc3QgUkVDT1JESU5HX1NUQVJUVVBfVElNRU9VVF9NUyA9IDMgKiAxMDAwO1xuY29uc3QgUkVDT1JESU5HX1NUT1BfVElNRU9VVF9NUyA9IDMgKiAxMDAwO1xuY29uc3QgTUlOX0FQSV9MRVZFTCA9IDI5O1xuY29uc3QgUkVDT1JESU5HX1NFUlZJQ0VfTkFNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9Ly5yZWNvcmRlci5SZWNvcmRlclNlcnZpY2VgO1xuY29uc3QgUkVDT1JESU5HX0FDVElWSVRZX05BTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfUEtHX0lEfS9pby5hcHBpdW0uc2V0dGluZ3MuU2V0dGluZ3NgO1xuY29uc3QgUkVDT1JESU5HX0FDVElPTl9TVEFSVCA9IGAke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9LnJlY29yZGluZy5BQ1RJT05fU1RBUlRgO1xuY29uc3QgUkVDT1JESU5HX0FDVElPTl9TVE9QID0gYCR7U0VUVElOR1NfSEVMUEVSX1BLR19JRH0ucmVjb3JkaW5nLkFDVElPTl9TVE9QYDtcbmNvbnN0IFJFQ09SRElOR1NfUk9PVCA9IGAvc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS8ke1NFVFRJTkdTX0hFTFBFUl9QS0dfSUR9L2ZpbGVzYDtcbmNvbnN0IERFRkFVTFRfRklMRU5BTUVfRk9STUFUID0gJ1lZWVktTU0tRERUSEgtbW0tc3MnO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIHVwbG9hZFJlY29yZGVkTWVkaWEgKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCA9IG51bGwsIHVwbG9hZE9wdGlvbnMgPSB7fSkge1xuICBpZiAoXy5pc0VtcHR5KHJlbW90ZVBhdGgpKSB7XG4gICAgcmV0dXJuIChhd2FpdCB1dGlsLnRvSW5NZW1vcnlCYXNlNjQobG9jYWxGaWxlKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHt1c2VyLCBwYXNzLCBtZXRob2QsIGhlYWRlcnMsIGZpbGVGaWVsZE5hbWUsIGZvcm1GaWVsZHN9ID0gdXBsb2FkT3B0aW9ucztcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6IG1ldGhvZCB8fCAnUFVUJyxcbiAgICBoZWFkZXJzLFxuICAgIGZpbGVGaWVsZE5hbWUsXG4gICAgZm9ybUZpZWxkcyxcbiAgfTtcbiAgaWYgKHVzZXIgJiYgcGFzcykge1xuICAgIG9wdGlvbnMuYXV0aCA9IHt1c2VyLCBwYXNzfTtcbiAgfVxuICBhd2FpdCBuZXQudXBsb2FkRmlsZShsb2NhbEZpbGUsIHJlbW90ZVBhdGgsIG9wdGlvbnMpO1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGFkanVzdE1lZGlhRXh0ZW5zaW9uIChuYW1lKSB7XG4gIHJldHVybiBfLnRvTG93ZXIobmFtZSkuZW5kc1dpdGgoREVGQVVMVF9FWFQpID8gbmFtZSA6IGAke25hbWV9JHtERUZBVUxUX0VYVH1gO1xufVxuXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlNZWRpYVByb2plY3Rpb25SZWNvcmRpbmdJc1N1cHBvcnRlZCAoYWRiKSB7XG4gIGNvbnN0IGFwaUxldmVsID0gYXdhaXQgYWRiLmdldEFwaUxldmVsKCk7XG4gIGlmIChhcGlMZXZlbCA8IE1JTl9BUElfTEVWRUwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1lZGlhIHByb2plY3Rpb24tYmFzZWQgcmVjb3JkaW5nIGlzIG5vdCBhdmFpbGFibGUgb24gQVBJIExldmVsICR7YXBpTGV2ZWx9LiBgICtcbiAgICAgIGBNaW5pbXVtIHJlcXVpcmVkIEFQSSBMZXZlbCBpcyAke01JTl9BUElfTEVWRUx9LmApO1xuICB9XG59XG5cblxuY2xhc3MgTWVkaWFQcm9qZWN0aW9uUmVjb3JkZXIge1xuICBjb25zdHJ1Y3RvciAoYWRiKSB7XG4gICAgdGhpcy5hZGIgPSBhZGI7XG4gIH1cblxuICBhc3luYyBpc1J1bm5pbmcgKCkge1xuICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICdkdW1wc3lzJywgJ2FjdGl2aXR5JywgJ3NlcnZpY2VzJywgUkVDT1JESU5HX1NFUlZJQ0VfTkFNRVxuICAgIF0pO1xuICAgIHJldHVybiBzdGRvdXQuaW5jbHVkZXMoUkVDT1JESU5HX1NFUlZJQ0VfTkFNRSk7XG4gIH1cblxuICBhc3luYyBzdGFydCAob3B0cyA9IHt9KSB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaXNSdW5uaW5nKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmNsZWFudXAoKTtcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIG1heER1cmF0aW9uU2VjLFxuICAgICAgcHJpb3JpdHksXG4gICAgICByZXNvbHV0aW9uLFxuICAgIH0gPSBvcHRzO1xuICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgUkVDT1JESU5HX0FDVElWSVRZX05BTUUsXG4gICAgICAnLWEnLCBSRUNPUkRJTkdfQUNUSU9OX1NUQVJULFxuICAgIF07XG4gICAgaWYgKGZpbGVuYW1lKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZXMnLCAnZmlsZW5hbWUnLCBmaWxlbmFtZSk7XG4gICAgfVxuICAgIGlmIChtYXhEdXJhdGlvblNlYykge1xuICAgICAgYXJncy5wdXNoKCctLWVzJywgJ21heF9kdXJhdGlvbl9zZWMnLCBgJHttYXhEdXJhdGlvblNlY31gKTtcbiAgICB9XG4gICAgaWYgKHByaW9yaXR5KSB7XG4gICAgICBhcmdzLnB1c2goJy0tZXMnLCAncHJpb3JpdHknLCBwcmlvcml0eSk7XG4gICAgfVxuICAgIGlmIChyZXNvbHV0aW9uKSB7XG4gICAgICBhcmdzLnB1c2goJy0tZXMnLCAncmVzb2x1dGlvbicsIHJlc29sdXRpb24pO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChhcmdzKTtcbiAgICBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKCFhd2FpdCB0aGlzLmlzUnVubmluZygpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIG1lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nIGlzIG5vdCBydW5uaW5nIGFmdGVyICR7UkVDT1JESU5HX1NUQVJUVVBfVElNRU9VVF9NU31tcy4gYCArXG4gICAgICAgICAgICBgUGxlYXNlIGNoZWNrIHRoZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHMuYFxuICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0sIFJFQ09SRElOR19TVEFSVFVQX1RJTUVPVVRfTVMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgY2xlYW51cCAoKSB7XG4gICAgYXdhaXQgdGhpcy5hZGIuc2hlbGwoW2BybSAtZiAke1JFQ09SRElOR1NfUk9PVH0vKmBdKTtcbiAgfVxuXG4gIGFzeW5jIHB1bGxSZWNlbnQgKCkge1xuICAgIGNvbnN0IHJlY29yZGluZ3MgPSBhd2FpdCB0aGlzLmFkYi5scyhSRUNPUkRJTkdTX1JPT1QsIFsnLXRyJ10pO1xuICAgIGlmIChfLmlzRW1wdHkocmVjb3JkaW5ncykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRzdFBhdGggPSBwYXRoLmpvaW4oYXdhaXQgdGVtcERpci5vcGVuRGlyKCksIHJlY29yZGluZ3NbMF0pO1xuICAgIC8vIGluY3JlYXNlIHRpbWVvdXQgdG8gNSBtaW51dGVzIGJlY2F1c2UgaXQgbWlnaHQgdGFrZSBhIHdoaWxlIHRvIHB1bGwgYSBsYXJnZSB2aWRlbyBmaWxlXG4gICAgYXdhaXQgdGhpcy5hZGIucHVsbChgJHtSRUNPUkRJTkdTX1JPT1R9LyR7cmVjb3JkaW5nc1swXX1gLCBkc3RQYXRoLCB7dGltZW91dDogMzAwMDAwfSk7XG4gICAgcmV0dXJuIGRzdFBhdGg7XG4gIH1cblxuICBhc3luYyBzdG9wICgpIHtcbiAgICBpZiAoIWF3YWl0IHRoaXMuaXNSdW5uaW5nKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgICAnYW0nLCAnc3RhcnQnLFxuICAgICAgJy1uJywgUkVDT1JESU5HX0FDVElWSVRZX05BTUUsXG4gICAgICAnLWEnLCBSRUNPUkRJTkdfQUNUSU9OX1NUT1AsXG4gICAgXSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gIShhd2FpdCB0aGlzLmlzUnVubmluZygpKSwge1xuICAgICAgICB3YWl0TXM6IFJFQ09SRElOR19TVE9QX1RJTUVPVVRfTVMsXG4gICAgICAgIGludGVydmFsTXM6IDUwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBhdHRlbXB0IHRvIHN0b3AgdGhlIGN1cnJlbnQgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgdGltZWQgb3V0IGFmdGVyIGAgK1xuICAgICAgICBgJHtSRUNPUkRJTkdfU1RPUF9USU1FT1VUX01TfW1zYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFN0YXJ0UmVjb3JkaW5nT3B0aW9uc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gcmVzb2x1dGlvbiBNYXhpbXVtIHN1cHBvcnRlZCByZXNvbHV0aW9uIG9uLWRldmljZSAoRGV0ZWN0ZWRcbiAqIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGFwcCBpdHNlbGYpLCB3aGljaCB1c3VhbGx5IGVxdWFscyB0byBGdWxsIEhEIDE5MjB4MTA4MCBvbiBtb3N0XG4gKiBwaG9uZXMgaG93ZXZlciB5b3UgY2FuIGNoYW5nZSBpdCB0byBmb2xsb3dpbmcgc3VwcG9ydGVkIHJlc29sdXRpb25zXG4gKiBhcyB3ZWxsOiBcIjE5MjB4MTA4MFwiLCBcIjEyODB4NzIwXCIsIFwiNzIweDQ4MFwiLCBcIjMyMHgyNDBcIiwgXCIxNzZ4MTQ0XCIuXG4gKiBAcHJvcGVydHkge251bWJlcj99IG1heER1cmF0aW9uU2VjIFs5MDBdIERlZmF1bHQgdmFsdWU6IDkwMCBzZWNvbmRzIHdoaWNoIG1lYW5zXG4gKiBtYXhpbXVtIGFsbG93ZWQgZHVyYXRpb24gaXMgMTUgbWludXRlLCB5b3UgY2FuIGluY3JlYXNlIGl0IGlmIHlvdXIgdGVzdCB0YWtlc1xuICogbG9uZ2VyIHRoYW4gdGhhdC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gcHJpb3JpdHkgW2hpZ2hdIE1lYW5zIHJlY29yZGluZyB0aHJlYWQgcHJpb3JpdHkgaXMgbWF4aW11bVxuICogaG93ZXZlciBpZiB5b3UgZmFjZSBwZXJmb3JtYW5jZSBkcm9wcyBkdXJpbmcgdGVzdGluZyB3aXRoIHJlY29yZGluZyBlbmFibGVkLCB5b3VcbiAqIGNhbiByZWR1Y2UgcmVjb3JkaW5nIHByaW9yaXR5IHRvIFwibm9ybWFsXCIgb3IgXCJsb3dcIi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gZmlsZW5hbWUgWW91IGNhbiB0eXBlIHJlY29yZGluZyB2aWRlbyBmaWxlIG5hbWUgYXMgeW91IHdhbnQsXG4gKiBidXQgcmVjb3JkaW5nIGN1cnJlbnRseSBzdXBwb3J0cyBvbmx5IFwibXA0XCIgZm9ybWF0IHNvIHlvdXIgZmlsZW5hbWUgbXVzdCBlbmQgd2l0aCBcIi5tcDRcIi5cbiAqIEFuIGludmFsaWQgZmlsZSBuYW1lIHdpbGwgZmFpbCB0byBzdGFydCB0aGUgcmVjb3JkaW5nLlxuICogSWYgbm90IHByb3ZpZGVkIHRoZW4gdGhlIGN1cnJlbnQgdGltZXN0YW1wIHdpbGwgYmUgdXNlZCBhcyBmaWxlIG5hbWUuXG4gKi9cblxuLyoqXG4gKiBSZWNvcmQgdGhlIGRpc3BsYXkgb2YgYSByZWFsIGRldmljZXMgcnVubmluZyBBbmRyb2lkIDEwIChBUEkgbGV2ZWwgMjkpIGFuZCBoaWdoZXIuXG4gKiBUaGUgc2NyZWVuIGFjdGl2aXR5IGlzIHJlY29yZGVkIHRvIGEgTVBFRy00IGZpbGUuIEF1ZGlvIGlzIGFsc28gcmVjb3JkZWQgYnkgZGVmYXVsdFxuICogKG9ubHkgZm9yIGFwcHMgdGhhdCBhbGxvdyBpdCBpbiB0aGVpciBtYW5pZmVzdHMpLlxuICogSWYgYW5vdGhlciByZWNvcmRpbmcgaGFzIGJlZW4gYWxyZWFkeSBzdGFydGVkIHRoZW4gdGhlIGNvbW1hbmQgd2lsbCBleGl0IHNpbGVudGx5LlxuICogVGhlIHByZXZpb3VzbHkgcmVjb3JkZWQgdmlkZW8gZmlsZSBpcyBkZWxldGVkIHdoZW4gYSBuZXcgcmVjb3JkaW5nIHNlc3Npb24gaXMgc3RhcnRlZC5cbiAqIFJlY29yZGluZyBjb250aW51ZXMgaXQgaXMgc3RvcHBlZCBleHBsaWNpdGx5IG9yIHVudGlsIHRoZSB0aW1lb3V0IGhhcHBlbnMuXG4gKlxuICogQHBhcmFtIHs/U3RhcnRSZWNvcmRpbmdPcHRpb25zfSBvcHRpb25zIEF2YWlsYWJsZSBvcHRpb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYSBuZXcgcmVjb3JkaW5nIGhhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiByZWNvcmRpbmcgaGFzIGZhaWxlZCB0byBzdGFydCBvciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqL1xuY29tbWFuZHMubW9iaWxlU3RhcnRNZWRpYVByb2plY3Rpb25SZWNvcmRpbmcgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVTdGFydE1lZGlhUHJvamVjdGlvblJlY29yZGluZyAob3B0aW9ucyA9IHt9KSB7XG4gIGF3YWl0IHZlcmlmeU1lZGlhUHJvamVjdGlvblJlY29yZGluZ0lzU3VwcG9ydGVkKHRoaXMuYWRiKTtcblxuICBjb25zdCB7cmVzb2x1dGlvbiwgcHJpb3JpdHksIG1heER1cmF0aW9uU2VjLCBmaWxlbmFtZX0gPSBvcHRpb25zO1xuICBjb25zdCByZWNvcmRlciA9IG5ldyBNZWRpYVByb2plY3Rpb25SZWNvcmRlcih0aGlzLmFkYik7XG4gIGNvbnN0IGZuYW1lID0gYWRqdXN0TWVkaWFFeHRlbnNpb24oZmlsZW5hbWUgfHwgbW9tZW50KCkuZm9ybWF0KERFRkFVTFRfRklMRU5BTUVfRk9STUFUKSk7XG4gIGNvbnN0IGRpZFN0YXJ0ID0gYXdhaXQgcmVjb3JkZXIuc3RhcnQoe1xuICAgIHJlc29sdXRpb24sXG4gICAgcHJpb3JpdHksXG4gICAgbWF4RHVyYXRpb25TZWMsXG4gICAgZmlsZW5hbWU6IGZuYW1lLFxuICB9KTtcbiAgaWYgKGRpZFN0YXJ0KSB7XG4gICAgdGhpcy5sb2cuaW5mbyhgQSBuZXcgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgJyR7Zm5hbWV9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc3RhcnRlZGApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubG9nLmluZm8oJ0Fub3RoZXIgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcy4gVGhlcmUgaXMgbm90aGluZyB0byBzdGFydCcpO1xuICB9XG4gIHJldHVybiBkaWRTdGFydDtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWVkaWEgcHJvamVjdGlvbi1iYXNlZCByZWNvcmRpbmcgaXMgY3VycmVudGx5IHJ1bm5pbmcuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYSByZWNvcmRpbmcgaXMgaW4gcHJvZ3Jlc3MuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYSByZWNvcmRpbmcgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZUlzTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nUnVubmluZyAoKSB7XG4gIGF3YWl0IHZlcmlmeU1lZGlhUHJvamVjdGlvblJlY29yZGluZ0lzU3VwcG9ydGVkKHRoaXMuYWRiKTtcblxuICBjb25zdCByZWNvcmRlciA9IG5ldyBNZWRpYVByb2plY3Rpb25SZWNvcmRlcih0aGlzLmFkYik7XG4gIHJldHVybiBhd2FpdCByZWNvcmRlci5pc1J1bm5pbmcoKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3RvcFJlY29yZGluZ09wdGlvbnNcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZz99IHJlbW90ZVBhdGggVGhlIHBhdGggdG8gdGhlIHJlbW90ZSBsb2NhdGlvbiwgd2hlcmUgdGhlIHJlc3VsdGluZyB2aWRlbyBzaG91bGQgYmUgdXBsb2FkZWQuXG4gKiBUaGUgZm9sbG93aW5nIHByb3RvY29scyBhcmUgc3VwcG9ydGVkOiBodHRwL2h0dHBzLCBmdHAuXG4gKiBOdWxsIG9yIGVtcHR5IHN0cmluZyB2YWx1ZSAodGhlIGRlZmF1bHQgc2V0dGluZykgbWVhbnMgdGhlIGNvbnRlbnQgb2YgcmVzdWx0aW5nXG4gKiBmaWxlIHNob3VsZCBiZSBlbmNvZGVkIGFzIEJhc2U2NCBhbmQgcGFzc2VkIGFzIHRoZSBlbmRwb29udCByZXNwb25zZSB2YWx1ZS5cbiAqIEFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93biBpZiB0aGUgZ2VuZXJhdGVkIG1lZGlhIGZpbGUgaXMgdG9vIGJpZyB0b1xuICogZml0IGludG8gdGhlIGF2YWlsYWJsZSBwcm9jZXNzIG1lbW9yeS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gdXNlciBUaGUgbmFtZSBvZiB0aGUgdXNlciBmb3IgdGhlIHJlbW90ZSBhdXRoZW50aWNhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nP30gcGFzcyBUaGUgcGFzc3dvcmQgZm9yIHRoZSByZW1vdGUgYXV0aGVudGljYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZz99IG1ldGhvZCBUaGUgaHR0cCBtdWx0aXBhcnQgdXBsb2FkIG1ldGhvZCBuYW1lLiBUaGUgJ1BVVCcgb25lIGlzIHVzZWQgYnkgZGVmYXVsdC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0P30gaGVhZGVycyBBZGRpdGlvbmFsIGhlYWRlcnMgbWFwcGluZyBmb3IgbXVsdGlwYXJ0IGh0dHAocykgdXBsb2Fkc1xuICogQHByb3BlcnR5IHtzdHJpbmc/fSBmaWxlRmllbGROYW1lIFtmaWxlXSBUaGUgbmFtZSBvZiB0aGUgZm9ybSBmaWVsZCwgd2hlcmUgdGhlIGZpbGUgY29udGVudCBCTE9CIHNob3VsZCBiZSBzdG9yZWQgZm9yXG4gKiBodHRwKHMpIHVwbG9hZHNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fEFycmF5PFBhaXI+P30gZm9ybUZpZWxkcyBBZGRpdGlvbmFsIGZvcm0gZmllbGRzIGZvciBtdWx0aXBhcnQgaHR0cChzKSB1cGxvYWRzXG4gKi9cblxuLyoqXG4gKiBTdG9wIGEgbWVkaWEgcHJvamVjdGlvbi1iYXNlZCByZWNvcmRpbmcuXG4gKiBJZiBubyByZWNvcmRpbmcgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUgdGhlbiBhbiBlcnJvciBpcyB0aHJvd24uXG4gKiBJZiB0aGUgcmVjb3JkaW5nIGhhcyBiZWVuIGFscmVhZHkgZmluaXNoZWQgYmVmb3JlIHRoaXMgQVBJIGhhcyBiZWVuIGNhbGxlZFxuICogdGhlbiB0aGUgbW9zdCByZWNlbnQgcmVjb3JkZWQgZmlsZSBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gez9TdG9wUmVjb3JkaW5nT3B0aW9uc30gb3B0aW9ucyBBdmFpbGFibGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NC1lbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHJlY29yZGVkIG1lZGlhIGZpbGUgaWYgJ3JlbW90ZVBhdGgnXG4gKiBwYXJhbWV0ZXIgaXMgZmFsc3kgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBzdG9wcGluZyBhIHJlY29yZGluZyxcbiAqIGZldGNoaW5nIHRoZSBjb250ZW50IG9mIHRoZSByZW1vdGUgbWVkaWEgZmlsZSxcbiAqIG9yIGlmIGEgcmVjb3JkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICovXG5jb21tYW5kcy5tb2JpbGVTdG9wTWVkaWFQcm9qZWN0aW9uUmVjb3JkaW5nID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlU3RvcE1lZGlhUHJvamVjdGlvblJlY29yZGluZyAob3B0aW9ucyA9IHt9KSB7XG4gIGF3YWl0IHZlcmlmeU1lZGlhUHJvamVjdGlvblJlY29yZGluZ0lzU3VwcG9ydGVkKHRoaXMuYWRiKTtcblxuICBjb25zdCByZWNvcmRlciA9IG5ldyBNZWRpYVByb2plY3Rpb25SZWNvcmRlcih0aGlzLmFkYik7XG4gIGlmIChhd2FpdCByZWNvcmRlci5zdG9wKCkpIHtcbiAgICB0aGlzLmxvZy5pbmZvKCdTdWNjZXNzZnVsbHkgc3RvcHBlZCBhIG1lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nLiBQdWxsaW5nIHRoZSByZWNvcmRlZCBtZWRpYScpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubG9nLmluZm8oJ01lZGlhIHByb2plY3Rpb24gcmVjb3JkaW5nIGlzIG5vdCBydW5uaW5nLiBUaGVyZSBpcyBub3RoaW5nIHRvIHN0b3AnKTtcbiAgfVxuICBjb25zdCByZWNlbnRSZWNvcmRpbmdQYXRoID0gYXdhaXQgcmVjb3JkZXIucHVsbFJlY2VudCgpO1xuICBpZiAoIXJlY2VudFJlY29yZGluZ1BhdGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlY2VudCBtZWRpYSBwcm9qZWN0aW9uIHJlY29yZGluZyBoYXZlIGJlZW4gZm91bmQuIERpZCB5b3Ugc3RhcnQgYW55P2ApO1xuICB9XG5cbiAgY29uc3Qge3JlbW90ZVBhdGh9ID0gb3B0aW9ucztcbiAgaWYgKF8uaXNFbXB0eShyZW1vdGVQYXRoKSkge1xuICAgIGNvbnN0IHtzaXplfSA9IGF3YWl0IGZzLnN0YXQocmVjZW50UmVjb3JkaW5nUGF0aCk7XG4gICAgdGhpcy5sb2cuZGVidWcoYFRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgbWVkaWEgcHJvamVjdGlvbiByZWNvcmRpbmcgaXMgJHt1dGlsLnRvUmVhZGFibGVTaXplU3RyaW5nKHNpemUpfWApO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHVwbG9hZFJlY29yZGVkTWVkaWEocmVjZW50UmVjb3JkaW5nUGF0aCwgcmVtb3RlUGF0aCwgb3B0aW9ucyk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHBhdGguZGlybmFtZShyZWNlbnRSZWNvcmRpbmdQYXRoKSk7XG4gIH1cbn07XG5cblxuZXhwb3J0IHsgY29tbWFuZHMgfTtcbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLGVBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLE1BQU1PLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFBQ0MsT0FBQSxDQUFBRCxRQUFBLEdBQUFBLFFBQUE7QUFHcEIsTUFBTUUsV0FBVyxHQUFHLE1BQU07QUFDMUIsTUFBTUMsNEJBQTRCLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDN0MsTUFBTUMseUJBQXlCLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDMUMsTUFBTUMsYUFBYSxHQUFHLEVBQUU7QUFDeEIsTUFBTUMsc0JBQXNCLEdBQUksR0FBRUMsc0NBQXVCLDRCQUEyQjtBQUNwRixNQUFNQyx1QkFBdUIsR0FB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-projection.js","names":["_lodash","_interopRequireDefault","require","_asyncbox","_support","_path","_bluebird","_androidHelpers","_moment","commands","exports","DEFAULT_EXT","RECORDING_STARTUP_TIMEOUT_MS","RECORDING_STOP_TIMEOUT_MS","MIN_API_LEVEL","RECORDING_SERVICE_NAME","SETTINGS_HELPER_PKG_ID","RECORDING_ACTIVITY_NAME","RECORDING_ACTION_START","RECORDING_ACTION_STOP","RECORDINGS_ROOT","DEFAULT_FILENAME_FORMAT","uploadRecordedMedia","localFile","remotePath","uploadOptions","_","isEmpty","util","toInMemoryBase64","toString","user","pass","method","headers","fileFieldName","formFields","options","auth","net","uploadFile","adjustMediaExtension","name","toLower","endsWith","verifyMediaProjectionRecordingIsSupported","adb","apiLevel","getApiLevel","Error","MediaProjectionRecorder","constructor","isRunning","stdout","shell","includes","start","opts","cleanup","filename","maxDurationSec","priority","resolution","args","push","B","resolve","reject","setTimeout","pullRecent","recordings","ls","dstPath","path","join","tempDir","openDir","pull","stop","waitForCondition","waitMs","intervalMs","e","mobileStartMediaProjectionRecording","recorder","fname","moment","format","didStart","log","info","mobileIsMediaProjectionRecordingRunning","mobileStopMediaProjectionRecording","recentRecordingPath","size","fs","stat","debug","toReadableSizeString","rimraf","dirname","_default","default"],"sources":["../../../lib/commands/media-projection.js"],"sourcesContent":["import _ from 'lodash';\nimport { waitForCondition } from 'asyncbox';\nimport { util, fs, net, tempDir } from '@appium/support';\nimport path from 'path';\nimport B from 'bluebird';\nimport { SETTINGS_HELPER_PKG_ID } from '../android-helpers';\nimport moment from 'moment';\n\n\nconst commands = {};\n\n// https://github.com/appium/io.appium.settings#internal-audio--video-recording\nconst DEFAULT_EXT = '.mp4';\nconst RECORDING_STARTUP_TIMEOUT_MS = 3 * 1000;\nconst RECORDING_STOP_TIMEOUT_MS = 3 * 1000;\nconst MIN_API_LEVEL = 29;\nconst RECORDING_SERVICE_NAME = `${SETTINGS_HELPER_PKG_ID}/.recorder.RecorderService`;\nconst RECORDING_ACTIVITY_NAME = `${SETTINGS_HELPER_PKG_ID}/io.appium.settings.Settings`;\nconst RECORDING_ACTION_START = `${SETTINGS_HELPER_PKG_ID}.recording.ACTION_START`;\nconst RECORDING_ACTION_STOP = `${SETTINGS_HELPER_PKG_ID}.recording.ACTION_STOP`;\nconst RECORDINGS_ROOT = `/storage/emulated/0/Android/data/${SETTINGS_HELPER_PKG_ID}/files`;\nconst DEFAULT_FILENAME_FORMAT = 'YYYY-MM-DDTHH-mm-ss';\n\n\nasync function uploadRecordedMedia (localFile, remotePath = null, uploadOptions = {}) {\n if (_.isEmpty(remotePath)) {\n return (await util.toInMemoryBase64(localFile)).toString();\n }\n\n const {user, pass, method, headers, fileFieldName, formFields} = uploadOptions;\n const options = {\n method: method || 'PUT',\n headers,\n fileFieldName,\n formFields,\n };\n if (user && pass) {\n options.auth = {user, pass};\n }\n await net.uploadFile(localFile, remotePath, options);\n return '';\n}\n\nfunction adjustMediaExtension (name) {\n return _.toLower(name).endsWith(DEFAULT_EXT) ? name : `${name}${DEFAULT_EXT}`;\n}\n\nasync function verifyMediaProjectionRecordingIsSupported (adb) {\n const apiLevel = await adb.getApiLevel();\n if (apiLevel < MIN_API_LEVEL) {\n throw new Error(`Media projection-based recording is not available on API Level ${apiLevel}. ` +\n `Minimum required API Level is ${MIN_API_LEVEL}.`);\n }\n}\n\n\nclass MediaProjectionRecorder {\n constructor (adb) {\n this.adb = adb;\n }\n\n async isRunning () {\n const stdout = await this.adb.shell([\n 'dumpsys', 'activity', 'services', RECORDING_SERVICE_NAME\n ]);\n return stdout.includes(RECORDING_SERVICE_NAME);\n }\n\n async start (opts = {}) {\n if (await this.isRunning()) {\n return false;\n }\n\n await this.cleanup();\n const {\n filename,\n maxDurationSec,\n priority,\n resolution,\n } = opts;\n const args = [\n 'am', 'start',\n '-n', RECORDING_ACTIVITY_NAME,\n '-a', RECORDING_ACTION_START,\n ];\n if (filename) {\n args.push('--es', 'filename', filename);\n }\n if (maxDurationSec) {\n args.push('--es', 'max_duration_sec', `${maxDurationSec}`);\n }\n if (priority) {\n args.push('--es', 'priority', priority);\n }\n if (resolution) {\n args.push('--es', 'resolution', resolution);\n }\n await this.adb.shell(args);\n await new B((resolve, reject) => {\n setTimeout(async () => {\n if (!await this.isRunning()) {\n return reject(new Error(\n `The media projection recording is not running after ${RECORDING_STARTUP_TIMEOUT_MS}ms. ` +\n `Please check the logcat output for more details.`\n ));\n }\n resolve();\n }, RECORDING_STARTUP_TIMEOUT_MS);\n });\n return true;\n }\n\n async cleanup () {\n await this.adb.shell([`rm -f ${RECORDINGS_ROOT}/*`]);\n }\n\n async pullRecent () {\n const recordings = await this.adb.ls(RECORDINGS_ROOT, ['-tr']);\n if (_.isEmpty(recordings)) {\n return null;\n }\n\n const dstPath = path.join(await tempDir.openDir(), recordings[0]);\n await this.adb.pull(`${RECORDINGS_ROOT}/${recordings[0]}`, dstPath);\n return dstPath;\n }\n\n async stop () {\n if (!await this.isRunning()) {\n return false;\n }\n\n await this.adb.shell([\n 'am', 'start',\n '-n', RECORDING_ACTIVITY_NAME,\n '-a', RECORDING_ACTION_STOP,\n ]);\n try {\n await waitForCondition(async () => !(await this.isRunning()), {\n waitMs: RECORDING_STOP_TIMEOUT_MS,\n intervalMs: 500,\n });\n } catch (e) {\n throw new Error(\n `The attempt to stop the current media projection recording timed out after ` +\n `${RECORDING_STOP_TIMEOUT_MS}ms`\n );\n }\n return true;\n }\n}\n\n\n/**\n * @typedef {Object} StartRecordingOptions\n *\n * @property {string?} resolution Maximum supported resolution on-device (Detected\n * automatically by the app itself), which usually equals to Full HD 1920x1080 on most\n * phones however you can change it to following supported resolutions\n * as well: \"1920x1080\", \"1280x720\", \"720x480\", \"320x240\", \"176x144\".\n * @property {number?} maxDurationSec [900] Default value: 900 seconds which means\n * maximum allowed duration is 15 minute, you can increase it if your test takes\n * longer than that.\n * @property {string?} priority [high] Means recording thread priority is maximum\n * however if you face performance drops during testing with recording enabled, you\n * can reduce recording priority to \"normal\" or \"low\".\n * @property {string?} filename You can type recording video file name as you want,\n * but recording currently supports only \"mp4\" format so your filename must end with \".mp4\".\n * An invalid file name will fail to start the recording.\n * If not provided then the current timestamp will be used as file name.\n */\n\n/**\n * Record the display of a real devices running Android 10 (API level 29) and higher.\n * The screen activity is recorded to a MPEG-4 file. Audio is also recorded by default\n * (only for apps that allow it in their manifests).\n * If another recording has been already started then the command will exit silently.\n * The previously recorded video file is deleted when a new recording session is started.\n * Recording continues it is stopped explicitly or until the timeout happens.\n *\n * @param {?StartRecordingOptions} options Available options.\n * @returns {boolean} True if a new recording has successfully started.\n * @throws {Error} If recording has failed to start or is not supported on the device under test.\n */\ncommands.mobileStartMediaProjectionRecording = async function mobileStartMediaProjectionRecording (options = {}) {\n await verifyMediaProjectionRecordingIsSupported(this.adb);\n\n const {resolution, priority, maxDurationSec, filename} = options;\n const recorder = new MediaProjectionRecorder(this.adb);\n const fname = adjustMediaExtension(filename || moment().format(DEFAULT_FILENAME_FORMAT));\n const didStart = await recorder.start({\n resolution,\n priority,\n maxDurationSec,\n filename: fname,\n });\n if (didStart) {\n this.log.info(`A new media projection recording '${fname}' has been successfully started`);\n } else {\n this.log.info('Another media projection recording is already in progress. There is nothing to start');\n }\n return didStart;\n};\n\n/**\n * Checks if a media projection-based recording is currently running.\n *\n * @returns {boolean} True if a recording is in progress.\n * @throws {Error} If a recording is not supported on the device under test.\n */\ncommands.mobileIsMediaProjectionRecordingRunning = async function mobileIsMediaProjectionRecordingRunning () {\n await verifyMediaProjectionRecordingIsSupported(this.adb);\n\n const recorder = new MediaProjectionRecorder(this.adb);\n return await recorder.isRunning();\n};\n\n/**\n * @typedef {Object} StopRecordingOptions\n *\n * @property {string?} remotePath The path to the remote location, where the resulting video should be uploaded.\n * The following protocols are supported: http/https, ftp.\n * Null or empty string value (the default setting) means the content of resulting\n * file should be encoded as Base64 and passed as the endpoont response value.\n * An exception will be thrown if the generated media file is too big to\n * fit into the available process memory.\n * @property {string?} user The name of the user for the remote authentication.\n * @property {string?} pass The password for the remote authentication.\n * @property {string?} method The http multipart upload method name. The 'PUT' one is used by default.\n * @property {Object?} headers Additional headers mapping for multipart http(s) uploads\n * @property {string?} fileFieldName [file] The name of the form field, where the file content BLOB should be stored for\n * http(s) uploads\n * @property {Object|Array<Pair>?} formFields Additional form fields for multipart http(s) uploads\n */\n\n/**\n * Stop a media projection-based recording.\n * If no recording has been started before then an error is thrown.\n * If the recording has been already finished before this API has been called\n * then the most recent recorded file is returned.\n *\n * @param {?StopRecordingOptions} options Available options.\n * @returns {string} Base64-encoded content of the recorded media file if 'remotePath'\n * parameter is falsy or an empty string.\n * @throws {Error} If there was an error while stopping a recording,\n * fetching the content of the remote media file,\n * or if a recording is not supported on the device under test.\n */\ncommands.mobileStopMediaProjectionRecording = async function mobileStopMediaProjectionRecording (options = {}) {\n await verifyMediaProjectionRecordingIsSupported(this.adb);\n\n const recorder = new MediaProjectionRecorder(this.adb);\n if (await recorder.stop()) {\n this.log.info('Successfully stopped a media projection recording. Pulling the recorded media');\n } else {\n this.log.info('Media projection recording is not running. There is nothing to stop');\n }\n const recentRecordingPath = await recorder.pullRecent();\n if (!recentRecordingPath) {\n throw new Error(`No recent media projection recording have been found. Did you start any?`);\n }\n\n const {remotePath} = options;\n if (_.isEmpty(remotePath)) {\n const {size} = await fs.stat(recentRecordingPath);\n this.log.debug(`The size of the resulting media projection recording is ${util.toReadableSizeString(size)}`);\n }\n try {\n return await uploadRecordedMedia(recentRecordingPath, remotePath, options);\n } finally {\n await fs.rimraf(path.dirname(recentRecordingPath));\n }\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-projection.js","names":["_lodash","_interopRequireDefault","require","_asyncbox","_support","_path","_bluebird","_androidHelpers","_moment","commands","exports","DEFAULT_EXT","RECORDING_STARTUP_TIMEOUT_MS","RECORDING_STOP_TIMEOUT_MS","MIN_API_LEVEL","RECORDING_SERVICE_NAME","SETTINGS_HELPER_PKG_ID","RECORDING_ACTIVITY_NAME","RECORDING_ACTION_START","RECORDING_ACTION_STOP","RECORDINGS_ROOT","DEFAULT_FILENAME_FORMAT","uploadRecordedMedia","localFile","remotePath","uploadOptions","_","isEmpty","util","toInMemoryBase64","toString","user","pass","method","headers","fileFieldName","formFields","options","auth","net","uploadFile","adjustMediaExtension","name","toLower","endsWith","verifyMediaProjectionRecordingIsSupported","adb","apiLevel","getApiLevel","Error","MediaProjectionRecorder","constructor","isRunning","stdout","shell","includes","start","opts","cleanup","filename","maxDurationSec","priority","resolution","args","push","B","resolve","reject","setTimeout","pullRecent","recordings","ls","dstPath","path","join","tempDir","openDir","pull","timeout","stop","waitForCondition","waitMs","intervalMs","e","mobileStartMediaProjectionRecording","recorder","fname","moment","format","didStart","log","info","mobileIsMediaProjectionRecordingRunning","mobileStopMediaProjectionRecording","recentRecordingPath","size","fs","stat","debug","toReadableSizeString","rimraf","dirname","_default","default"],"sources":["../../../lib/commands/media-projection.js"],"sourcesContent":["import _ from 'lodash';\nimport { waitForCondition } from 'asyncbox';\nimport { util, fs, net, tempDir } from '@appium/support';\nimport path from 'path';\nimport B from 'bluebird';\nimport { SETTINGS_HELPER_PKG_ID } from '../android-helpers';\nimport moment from 'moment';\n\n\nconst commands = {};\n\n// https://github.com/appium/io.appium.settings#internal-audio--video-recording\nconst DEFAULT_EXT = '.mp4';\nconst RECORDING_STARTUP_TIMEOUT_MS = 3 * 1000;\nconst RECORDING_STOP_TIMEOUT_MS = 3 * 1000;\nconst MIN_API_LEVEL = 29;\nconst RECORDING_SERVICE_NAME = `${SETTINGS_HELPER_PKG_ID}/.recorder.RecorderService`;\nconst RECORDING_ACTIVITY_NAME = `${SETTINGS_HELPER_PKG_ID}/io.appium.settings.Settings`;\nconst RECORDING_ACTION_START = `${SETTINGS_HELPER_PKG_ID}.recording.ACTION_START`;\nconst RECORDING_ACTION_STOP = `${SETTINGS_HELPER_PKG_ID}.recording.ACTION_STOP`;\nconst RECORDINGS_ROOT = `/storage/emulated/0/Android/data/${SETTINGS_HELPER_PKG_ID}/files`;\nconst DEFAULT_FILENAME_FORMAT = 'YYYY-MM-DDTHH-mm-ss';\n\n\nasync function uploadRecordedMedia (localFile, remotePath = null, uploadOptions = {}) {\n if (_.isEmpty(remotePath)) {\n return (await util.toInMemoryBase64(localFile)).toString();\n }\n\n const {user, pass, method, headers, fileFieldName, formFields} = uploadOptions;\n const options = {\n method: method || 'PUT',\n headers,\n fileFieldName,\n formFields,\n };\n if (user && pass) {\n options.auth = {user, pass};\n }\n await net.uploadFile(localFile, remotePath, options);\n return '';\n}\n\nfunction adjustMediaExtension (name) {\n return _.toLower(name).endsWith(DEFAULT_EXT) ? name : `${name}${DEFAULT_EXT}`;\n}\n\nasync function verifyMediaProjectionRecordingIsSupported (adb) {\n const apiLevel = await adb.getApiLevel();\n if (apiLevel < MIN_API_LEVEL) {\n throw new Error(`Media projection-based recording is not available on API Level ${apiLevel}. ` +\n `Minimum required API Level is ${MIN_API_LEVEL}.`);\n }\n}\n\n\nclass MediaProjectionRecorder {\n constructor (adb) {\n this.adb = adb;\n }\n\n async isRunning () {\n const stdout = await this.adb.shell([\n 'dumpsys', 'activity', 'services', RECORDING_SERVICE_NAME\n ]);\n return stdout.includes(RECORDING_SERVICE_NAME);\n }\n\n async start (opts = {}) {\n if (await this.isRunning()) {\n return false;\n }\n\n await this.cleanup();\n const {\n filename,\n maxDurationSec,\n priority,\n resolution,\n } = opts;\n const args = [\n 'am', 'start',\n '-n', RECORDING_ACTIVITY_NAME,\n '-a', RECORDING_ACTION_START,\n ];\n if (filename) {\n args.push('--es', 'filename', filename);\n }\n if (maxDurationSec) {\n args.push('--es', 'max_duration_sec', `${maxDurationSec}`);\n }\n if (priority) {\n args.push('--es', 'priority', priority);\n }\n if (resolution) {\n args.push('--es', 'resolution', resolution);\n }\n await this.adb.shell(args);\n await new B((resolve, reject) => {\n setTimeout(async () => {\n if (!await this.isRunning()) {\n return reject(new Error(\n `The media projection recording is not running after ${RECORDING_STARTUP_TIMEOUT_MS}ms. ` +\n `Please check the logcat output for more details.`\n ));\n }\n resolve();\n }, RECORDING_STARTUP_TIMEOUT_MS);\n });\n return true;\n }\n\n async cleanup () {\n await this.adb.shell([`rm -f ${RECORDINGS_ROOT}/*`]);\n }\n\n async pullRecent () {\n const recordings = await this.adb.ls(RECORDINGS_ROOT, ['-tr']);\n if (_.isEmpty(recordings)) {\n return null;\n }\n\n const dstPath = path.join(await tempDir.openDir(), recordings[0]);\n // increase timeout to 5 minutes because it might take a while to pull a large video file\n await this.adb.pull(`${RECORDINGS_ROOT}/${recordings[0]}`, dstPath, {timeout: 300000});\n return dstPath;\n }\n\n async stop () {\n if (!await this.isRunning()) {\n return false;\n }\n\n await this.adb.shell([\n 'am', 'start',\n '-n', RECORDING_ACTIVITY_NAME,\n '-a', RECORDING_ACTION_STOP,\n ]);\n try {\n await waitForCondition(async () => !(await this.isRunning()), {\n waitMs: RECORDING_STOP_TIMEOUT_MS,\n intervalMs: 500,\n });\n } catch (e) {\n throw new Error(\n `The attempt to stop the current media projection recording timed out after ` +\n `${RECORDING_STOP_TIMEOUT_MS}ms`\n );\n }\n return true;\n }\n}\n\n\n/**\n * @typedef {Object} StartRecordingOptions\n *\n * @property {string?} resolution Maximum supported resolution on-device (Detected\n * automatically by the app itself), which usually equals to Full HD 1920x1080 on most\n * phones however you can change it to following supported resolutions\n * as well: \"1920x1080\", \"1280x720\", \"720x480\", \"320x240\", \"176x144\".\n * @property {number?} maxDurationSec [900] Default value: 900 seconds which means\n * maximum allowed duration is 15 minute, you can increase it if your test takes\n * longer than that.\n * @property {string?} priority [high] Means recording thread priority is maximum\n * however if you face performance drops during testing with recording enabled, you\n * can reduce recording priority to \"normal\" or \"low\".\n * @property {string?} filename You can type recording video file name as you want,\n * but recording currently supports only \"mp4\" format so your filename must end with \".mp4\".\n * An invalid file name will fail to start the recording.\n * If not provided then the current timestamp will be used as file name.\n */\n\n/**\n * Record the display of a real devices running Android 10 (API level 29) and higher.\n * The screen activity is recorded to a MPEG-4 file. Audio is also recorded by default\n * (only for apps that allow it in their manifests).\n * If another recording has been already started then the command will exit silently.\n * The previously recorded video file is deleted when a new recording session is started.\n * Recording continues it is stopped explicitly or until the timeout happens.\n *\n * @param {?StartRecordingOptions} options Available options.\n * @returns {boolean} True if a new recording has successfully started.\n * @throws {Error} If recording has failed to start or is not supported on the device under test.\n */\ncommands.mobileStartMediaProjectionRecording = async function mobileStartMediaProjectionRecording (options = {}) {\n await verifyMediaProjectionRecordingIsSupported(this.adb);\n\n const {resolution, priority, maxDurationSec, filename} = options;\n const recorder = new MediaProjectionRecorder(this.adb);\n const fname = adjustMediaExtension(filename || moment().format(DEFAULT_FILENAME_FORMAT));\n const didStart = await recorder.start({\n resolution,\n priority,\n maxDurationSec,\n filename: fname,\n });\n if (didStart) {\n this.log.info(`A new media projection recording '${fname}' has been successfully started`);\n } else {\n this.log.info('Another media projection recording is already in progress. There is nothing to start');\n }\n return didStart;\n};\n\n/**\n * Checks if a media projection-based recording is currently running.\n *\n * @returns {boolean} True if a recording is in progress.\n * @throws {Error} If a recording is not supported on the device under test.\n */\ncommands.mobileIsMediaProjectionRecordingRunning = async function mobileIsMediaProjectionRecordingRunning () {\n await verifyMediaProjectionRecordingIsSupported(this.adb);\n\n const recorder = new MediaProjectionRecorder(this.adb);\n return await recorder.isRunning();\n};\n\n/**\n * @typedef {Object} StopRecordingOptions\n *\n * @property {string?} remotePath The path to the remote location, where the resulting video should be uploaded.\n * The following protocols are supported: http/https, ftp.\n * Null or empty string value (the default setting) means the content of resulting\n * file should be encoded as Base64 and passed as the endpoont response value.\n * An exception will be thrown if the generated media file is too big to\n * fit into the available process memory.\n * @property {string?} user The name of the user for the remote authentication.\n * @property {string?} pass The password for the remote authentication.\n * @property {string?} method The http multipart upload method name. The 'PUT' one is used by default.\n * @property {Object?} headers Additional headers mapping for multipart http(s) uploads\n * @property {string?} fileFieldName [file] The name of the form field, where the file content BLOB should be stored for\n * http(s) uploads\n * @property {Object|Array<Pair>?} formFields Additional form fields for multipart http(s) uploads\n */\n\n/**\n * Stop a media projection-based recording.\n * If no recording has been started before then an error is thrown.\n * If the recording has been already finished before this API has been called\n * then the most recent recorded file is returned.\n *\n * @param {?StopRecordingOptions} options Available options.\n * @returns {string} Base64-encoded content of the recorded media file if 'remotePath'\n * parameter is falsy or an empty string.\n * @throws {Error} If there was an error while stopping a recording,\n * fetching the content of the remote media file,\n * or if a recording is not supported on the device under test.\n */\ncommands.mobileStopMediaProjectionRecording = async function mobileStopMediaProjectionRecording (options = {}) {\n await verifyMediaProjectionRecordingIsSupported(this.adb);\n\n const recorder = new MediaProjectionRecorder(this.adb);\n if (await recorder.stop()) {\n this.log.info('Successfully stopped a media projection recording. Pulling the recorded media');\n } else {\n this.log.info('Media projection recording is not running. There is nothing to stop');\n }\n const recentRecordingPath = await recorder.pullRecent();\n if (!recentRecordingPath) {\n throw new Error(`No recent media projection recording have been found. Did you start any?`);\n }\n\n const {remotePath} = options;\n if (_.isEmpty(remotePath)) {\n const {size} = await fs.stat(recentRecordingPath);\n this.log.debug(`The size of the resulting media projection recording is ${util.toReadableSizeString(size)}`);\n }\n try {\n return await uploadRecordedMedia(recentRecordingPath, remotePath, options);\n } finally {\n await fs.rimraf(path.dirname(recentRecordingPath));\n }\n};\n\n\nexport { commands };\nexport default commands;\n"],"mappings":"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"}
|
package/lib/commands/execute.js
CHANGED
|
@@ -76,6 +76,9 @@ extensions.executeMobile = async function executeMobile (mobileCommand, opts = {
|
|
|
76
76
|
|
|
77
77
|
getConnectivity: 'mobileGetConnectivity',
|
|
78
78
|
setConnectivity: 'mobileSetConnectivity',
|
|
79
|
+
|
|
80
|
+
hideKeyboard: 'hideKeyboard',
|
|
81
|
+
isKeyboardShown: 'isKeyboardShown',
|
|
79
82
|
};
|
|
80
83
|
|
|
81
84
|
if (!_.has(mobileCommandsMapping, mobileCommand)) {
|
package/lib/commands/general.js
CHANGED
|
@@ -71,15 +71,6 @@ commands.back = async function back () {
|
|
|
71
71
|
return await this.bootstrap.sendAction('pressBack');
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
-
commands.isKeyboardShown = async function isKeyboardShown () {
|
|
75
|
-
const {isKeyboardShown} = await this.adb.isSoftKeyboardPresent();
|
|
76
|
-
return isKeyboardShown;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
commands.hideKeyboard = async function hideKeyboard () {
|
|
80
|
-
return await this.adb.hideKeyboard();
|
|
81
|
-
};
|
|
82
|
-
|
|
83
74
|
commands.openSettingsActivity = async function openSettingsActivity (setting) {
|
|
84
75
|
let {appPackage, appActivity} = await this.adb.getFocusedPackageAndActivity();
|
|
85
76
|
await this.adb.shell(['am', 'start', '-a', `android.settings.${setting}`]);
|
package/lib/commands/index.js
CHANGED
|
@@ -20,7 +20,8 @@ import intentCmds from './intent';
|
|
|
20
20
|
import systemBarsCmds from './system-bars';
|
|
21
21
|
import logCmds from './log';
|
|
22
22
|
import mediaProjectionCmds from './media-projection';
|
|
23
|
-
import
|
|
23
|
+
import permissionsCmds from './permissions';
|
|
24
|
+
import keyboardCmds from './keyboard';
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
let commands = {};
|
|
@@ -48,7 +49,8 @@ Object.assign(
|
|
|
48
49
|
fileActionsCmds,
|
|
49
50
|
logCmds,
|
|
50
51
|
mediaProjectionCmds,
|
|
51
|
-
|
|
52
|
+
permissionsCmds,
|
|
53
|
+
keyboardCmds,
|
|
52
54
|
// add other command types here
|
|
53
55
|
);
|
|
54
56
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const commands = {};
|
|
2
|
+
|
|
3
|
+
commands.hideKeyboard = async function hideKeyboard () {
|
|
4
|
+
return await this.adb.hideKeyboard();
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
commands.isKeyboardShown = async function isKeyboardShown () {
|
|
8
|
+
const {isKeyboardShown} = await this.adb.isSoftKeyboardPresent();
|
|
9
|
+
return isKeyboardShown;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default commands;
|
|
@@ -121,7 +121,8 @@ class MediaProjectionRecorder {
|
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
const dstPath = path.join(await tempDir.openDir(), recordings[0]);
|
|
124
|
-
|
|
124
|
+
// increase timeout to 5 minutes because it might take a while to pull a large video file
|
|
125
|
+
await this.adb.pull(`${RECORDINGS_ROOT}/${recordings[0]}`, dstPath, {timeout: 300000});
|
|
125
126
|
return dstPath;
|
|
126
127
|
}
|
|
127
128
|
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"mobile",
|
|
10
10
|
"mobile testing"
|
|
11
11
|
],
|
|
12
|
-
"version": "5.
|
|
12
|
+
"version": "5.10.1",
|
|
13
13
|
"author": "Appium Contributors",
|
|
14
14
|
"license": "Apache-2.0",
|
|
15
15
|
"repository": {
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"mocha": "^10.0.0",
|
|
113
113
|
"mock-fs": "^5.0.0",
|
|
114
114
|
"pre-commit": "^1.1.3",
|
|
115
|
-
"rimraf": "^
|
|
115
|
+
"rimraf": "^5.0.0",
|
|
116
116
|
"semantic-release": "^20.0.2",
|
|
117
117
|
"sinon": "^15.0.0",
|
|
118
118
|
"xpath": "^0.x"
|