appium-adb 9.6.1 → 9.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -179,7 +179,7 @@ commands.setGeoLocation = async function setGeoLocation(location, isEmulator = f
|
|
|
179
179
|
await this.adbExec(['emu', 'geo', 'fix', ...args]);
|
|
180
180
|
await this.adbExec(['emu', 'geo', 'fix', ...args.map(arg => arg.replace('.', ','))]);
|
|
181
181
|
} else {
|
|
182
|
-
const args = ['am', 'startservice', '-e', 'longitude', longitude, '-e', 'latitude', latitude];
|
|
182
|
+
const args = ['am', (await this.getApiLevel()) >= 26 ? 'start-foreground-service' : 'startservice', '-e', 'longitude', longitude, '-e', 'latitude', latitude];
|
|
183
183
|
|
|
184
184
|
if (_support.util.hasValue(altitude)) {
|
|
185
185
|
args.push('-e', 'altitude', altitude);
|
|
@@ -359,4 +359,4 @@ var _default = commands;
|
|
|
359
359
|
exports.default = _default;require('source-map-support').install();
|
|
360
360
|
|
|
361
361
|
|
|
362
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcy5qcyIsIm5hbWVzIjpbIlNFVFRJTkdTX0hFTFBFUl9JRCIsIlNFVFRJTkdTX0hFTFBFUl9NQUlOX0FDVElWSVRZIiwiV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04iLCJEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OIiwiTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIiLCJMT0NBTEVfU0VUVElOR19BQ1RJT04iLCJMT0NBVElPTl9TRVJWSUNFIiwiTE9DQVRJT05fUkVDRUlWRVIiLCJMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OIiwiQ0xJUEJPQVJEX1JFQ0VJVkVSIiwiQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04iLCJOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04iLCJTTVNfTElTVF9SRUNFSVZFUiIsIlNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04iLCJNRURJQV9TQ0FOX1JFQ0VJVkVSIiwiTUVESUFfU0NBTl9BQ1RJT04iLCJBUFBJVU1fSU1FIiwiVU5JQ09ERV9JTUUiLCJERUZBVUxUX1NBVEVMTElURVNfQ09VTlQiLCJERUZBVUxUX0FMVElUVURFIiwiTE9DQVRJT05fVFJBQ0tFUl9UQUciLCJHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MiLCJHUFNfQ09PUkRJTkFURVNfUEFUVEVSTiIsImNvbW1hbmRzIiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsIm9wdHMiLCJwcm9jZXNzRXhpc3RzIiwibG9nIiwiZGVidWciLCJ0aW1lb3V0Iiwic3RhcnRBcHAiLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsIndhaXRGb3JMYXVuY2giLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVyciIsIkVycm9yIiwic2V0V2lmaVN0YXRlIiwib24iLCJpc0VtdWxhdG9yIiwic2hlbGwiLCJwcml2aWxlZ2VkIiwiZ2V0QXBpTGV2ZWwiLCJzZXREYXRhU3RhdGUiLCJzZXRBbmltYXRpb25TdGF0ZSIsInNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJzY3JpcHQiLCJwYXJhbXMiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwicHVzaCIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJmb3JtYXRMb2NhdGlvblZhbHVlIiwidmFsdWVOYW1lIiwiaXNSZXF1aXJlZCIsInV0aWwiLCJoYXNWYWx1ZSIsImZsb2F0VmFsdWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJfIiwiY2VpbCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiYWx0aXR1ZGUiLCJzcGVlZCIsImFyZ3MiLCJpc05pbCIsInNhdGVsbGl0ZXMiLCJwYXJzZUludCIsIk51bWJlciIsImxlbmd0aCIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwiYWRiRXhlYyIsIm1hcCIsImFyZyIsInJlcGxhY2UiLCJnZXRHZW9Mb2NhdGlvbiIsIm91dHB1dCIsInN0ZGVyciIsInN0ZG91dCIsIm1lc3NhZ2UiLCJtYXRjaCIsImV4ZWMiLCJKU09OIiwic3RyaW5naWZ5IiwicmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUiLCJ0aW1lb3V0TXMiLCJsb2djYXRNb25pdG9yIiwibW9uaXRvcmluZ1Byb21pc2UiLCJjbWQiLCJhZGIiLCJkZWZhdWx0QXJncyIsIlN1YlByb2Nlc3MiLCJwYXRoIiwidGltZW91dEVycm9yTXNnIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiZXZ0IiwibGluZXMiLCJzb21lIiwibGluZSIsIngiLCJpbmNsdWRlcyIsInN0YXJ0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsImluZm8iLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImlzUnVubmluZyIsInN0b3AiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwicnVuSW5JbWVDb250ZXh0IiwiZ2V0Q2xpcGJvYXJkIiwicmV0cmlldmVDbGlwYm9hcmQiLCJ0cmltIiwiZ2V0Tm90aWZpY2F0aW9ucyIsInBhcnNlSnNvbkRhdGEiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSIsInNjYW5NZWRpYSIsImRlc3RpbmF0aW9uIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUpzb25EYXRhIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgU0VUVElOR1NfSEVMUEVSX0lEID0gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSA9ICcuU2V0dGluZ3MnO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuV2lGaUNvbm5lY3Rpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS53aWZpYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkRhdGFDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uZGF0YV9jb25uZWN0aW9uYDtcbmNvbnN0IEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkFuaW1hdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmFuaW1hdGlvbmA7XG5jb25zdCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhbGVTZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhbGVgO1xuY29uc3QgTE9DQVRJT05fU0VSVklDRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkxvY2F0aW9uU2VydmljZWA7XG5jb25zdCBMT0NBVElPTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhdGlvbkluZm9SZWNlaXZlcmA7XG5jb25zdCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhdGlvbmA7XG5jb25zdCBDTElQQk9BUkRfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuQ2xpcGJvYXJkUmVjZWl2ZXJgO1xuY29uc3QgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmNsaXBib2FyZC5nZXRgO1xuY29uc3QgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5ub3RpZmljYXRpb25zYDtcbmNvbnN0IFNNU19MSVNUX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLlNtc1JlYWRlcmA7XG5jb25zdCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zbXMucmVhZGA7XG5jb25zdCBNRURJQV9TQ0FOX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLk1lZGlhU2Nhbm5lclJlY2VpdmVyYDtcbmNvbnN0IE1FRElBX1NDQU5fQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zY2FuX21lZGlhYDtcbmNvbnN0IEFQUElVTV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5BcHBpdW1JTUVgO1xuY29uc3QgVU5JQ09ERV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Vbmljb2RlSU1FYDtcbmNvbnN0IERFRkFVTFRfU0FURUxMSVRFU19DT1VOVCA9IDEyO1xuY29uc3QgREVGQVVMVF9BTFRJVFVERSA9IDAuMDtcbmNvbnN0IExPQ0FUSU9OX1RSQUNLRVJfVEFHID0gJ0xvY2F0aW9uVHJhY2tlcic7XG5jb25zdCBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MgPSBbXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gUGxheSBTZXJ2aWNlcycsXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gTG9jYXRpb24gTWFuYWdlcidcbl07XG5cbmNvbnN0IEdQU19DT09SRElOQVRFU19QQVRURVJOID0gL2RhdGE9XCIoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVwiLztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXR0aW5nc0FwcFN0YXJ0dXBPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNTAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgYXBwIGhhcyBzdGFydGVkXG4gKi9cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgQXBwaXVtIFNldHRpbmdzIGhlbHBlciBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG4gKiBhbmQgc3RhcnRzIGl0IGlmIG5lY2Vzc2FyeVxuICpcbiAqIEBwYXJhbSB7U2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIEFwcGl1bSBTZXR0aW5ncyBoYXMgZmFpbGVkIHRvIHN0YXJ0XG4gKiBAcmV0dXJucyB7QURCfSBzZWxmIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICovXG5jb21tYW5kcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCAob3B0cyA9IHt9KSB7XG4gIGlmIChhd2FpdCB0aGlzLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX0lEKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTdGFydGluZyBBcHBpdW0gU2V0dGluZ3MgYXBwJyk7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgfSA9IG9wdHM7XG4gIGF3YWl0IHRoaXMuc3RhcnRBcHAoe1xuICAgIHBrZzogU0VUVElOR1NfSEVMUEVSX0lELFxuICAgIGFjdGl2aXR5OiBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSxcbiAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgY2F0ZWdvcnk6ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgc3RvcEFwcDogZmFsc2UsXG4gICAgd2FpdEZvckxhdW5jaDogZmFsc2UsXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCksIHtcbiAgICAgIHdhaXRNczogdGltZW91dCxcbiAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcHBpdW0gU2V0dGluZ3MgYXBwIGlzIG5vdCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tc2ApO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgV2lGaSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0V2lmaVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0V2lmaVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ3dpZmknLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgRGF0YSB0cmFuc2ZlciBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0RGF0YVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0RGF0YVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ2RhdGEnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgYW5pbWF0aW9uIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqIEFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBnbG9iYWwgcHJvcGVydGllczpcbiAqIFtBTklNQVRPUl9EVVJBVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjQU5JTUFUT1JfRFVSQVRJT05fU0NBTEV9LFxuICogW1RSQU5TSVRJT05fQU5JTUFUSU9OX1NDQUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5HbG9iYWwuaHRtbCNUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRX0sXG4gKiBbV0lORE9XX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjV0lORE9XX0FOSU1BVElPTl9TQ0FMRX0uXG4gKiBUaGlzIG1ldGhvZCBzZXRzIGFsbCB0aGlzIHByb3BlcnRpZXMgdG8gMC4wIHRvIGRpc2FibGUgKDEuMCB0byBlbmFibGUpIGFuaW1hdGlvbi5cbiAqXG4gKiBUdXJuaW5nIG9mZiBhbmltYXRpb24gbWlnaHQgYmUgdXNlZnVsIHRvIGltcHJvdmUgc3RhYmlsaXR5XG4gKiBhbmQgcmVkdWNlIHRlc3RzIGV4ZWN1dGlvbiB0aW1lLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqL1xuY29tbWFuZHMuc2V0QW5pbWF0aW9uU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRBbmltYXRpb25TdGF0ZSAob24pIHtcbiAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1hJywgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OLFxuICAgICctbicsIEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgbG9jYWxlIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC4gRG9uJ3QgbmVlZCB0byByZWJvb3QgdGhlIGRldmljZSBhZnRlciBjaGFuZ2luZyB0aGUgbG9jYWxlLlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbiBhcmJpdHJhcnkgbG9jYWxlIGZvbGxvd2luZzpcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sI0xvY2FsZShqYXZhLmxhbmcuU3RyaW5nLCUyMGphdmEubGFuZy5TdHJpbmcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIGUuZy4gZW4sIGphXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIGUuZy4gVVMsIEpQXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gZS5nLiBIYW5zIGluIGB6aC1IYW5zLUNOYFxuICovXG5jb21tYW5kcy5zZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCAobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgY29uc3QgcGFyYW1zID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIExPQ0FMRV9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdsYW5nJywgbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSxcbiAgICAnLS1lcycsICdjb3VudHJ5JywgY291bnRyeS50b1VwcGVyQ2FzZSgpXG4gIF07XG5cbiAgaWYgKHNjcmlwdCkge1xuICAgIHBhcmFtcy5wdXNoKCctLWVzJywgJ3NjcmlwdCcsIHNjcmlwdCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnNoZWxsKHBhcmFtcyk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbG9uZ2l0dWRlIC0gVmFsaWQgbG9uZ2l0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBsYXRpdHVkZSAtIFZhbGlkIGxhdGl0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWx0aXR1ZGUgLSBWYWxpZCBhbHRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNhdGVsbGl0ZXMgWzEyXSAtIE51bWJlciBvZiBzYXRlbGxpdGVzIGJlaW5nIHRyYWNrZWQgKDEtMTIpLlxuICogVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIG9uIHJlYWwgZGV2aWNlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNwZWVkIC0gVmFsaWQgc3BlZWQgdmFsdWUuXG4gKiBTaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuMCBtZXRlcnMvc2Vjb25kIGZvciByZWFsIGRldmljZXMgb3IgMC4wIGtub3RzXG4gKiBmb3IgZW11bGF0b3JzLlxuICovXG5cbi8qKlxuICogRW11bGF0ZSBnZW9sb2NhdGlvbiBjb29yZGluYXRlcyBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtMb2NhdGlvbn0gbG9jYXRpb24gLSBMb2NhdGlvbiBvYmplY3QuIFRoZSBgYWx0aXR1ZGVgIHZhbHVlIGlzIGlnbm9yZWRcbiAqIHdoaWxlIG1vY2tpbmcgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRHZW9Mb2NhdGlvbiAobG9jYXRpb24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBjb25zdCBmb3JtYXRMb2NhdGlvblZhbHVlID0gKHZhbHVlTmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpID0+IHtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUobG9jYXRpb25bdmFsdWVOYW1lXSkpIHtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZU5hbWV9IG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChsb2NhdGlvblt2YWx1ZU5hbWVdKTtcbiAgICBpZiAoIWlzTmFOKGZsb2F0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7Xy5jZWlsKGZsb2F0VmFsdWUsIDUpfWA7XG4gICAgfVxuICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGZsb2F0IG51bWJlci4gYCArXG4gICAgICAgIGAnJHtsb2NhdGlvblt2YWx1ZU5hbWVdfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgY29uc3QgbG9uZ2l0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbG9uZ2l0dWRlJyk7XG4gIGNvbnN0IGxhdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbGF0aXR1ZGUnKTtcbiAgY29uc3QgYWx0aXR1ZGUgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdhbHRpdHVkZScsIGZhbHNlKTtcbiAgY29uc3Qgc3BlZWQgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdzcGVlZCcsIGZhbHNlKTtcbiAgaWYgKGlzRW11bGF0b3IpIHtcbiAgICBjb25zdCBhcmdzID0gW2xvbmdpdHVkZSwgbGF0aXR1ZGVdO1xuICAgIGlmICghXy5pc05pbChhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaChhbHRpdHVkZSk7XG4gICAgfVxuICAgIGNvbnN0IHNhdGVsbGl0ZXMgPSBwYXJzZUludChsb2NhdGlvbi5zYXRlbGxpdGVzLCAxMCk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oc2F0ZWxsaXRlcykgJiYgc2F0ZWxsaXRlcyA+IDAgJiYgc2F0ZWxsaXRlcyA8PSAxMikge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChgJHtzYXRlbGxpdGVzfWApO1xuICAgIH1cbiAgICBpZiAoIV8uaXNOaWwoc3BlZWQpKSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIGFyZ3MucHVzaChgJHtERUZBVUxUX0FMVElUVURFfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNCkge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9TQVRFTExJVEVTX0NPVU5UfWApO1xuICAgICAgfVxuICAgICAgYXJncy5wdXNoKHNwZWVkKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uYXJnc10pO1xuICAgIC8vIEEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MTgwXG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgJ2dlbycsICdmaXgnLCAuLi4oYXJncy5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoJy4nLCAnLCcpKSldKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2FtJywgJ3N0YXJ0c2VydmljZScsXG4gICAgICAnLWUnLCAnbG9uZ2l0dWRlJywgbG9uZ2l0dWRlLFxuICAgICAgJy1lJywgJ2xhdGl0dWRlJywgbGF0aXR1ZGUsXG4gICAgXTtcbiAgICBpZiAodXRpbC5oYXNWYWx1ZShhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnYWx0aXR1ZGUnLCBhbHRpdHVkZSk7XG4gICAgfVxuICAgIGlmICh1dGlsLmhhc1ZhbHVlKHNwZWVkKSkge1xuICAgICAgYXJncy5wdXNoKCctZScsICdzcGVlZCcsIHNwZWVkKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKExPQ0FUSU9OX1NFUlZJQ0UpO1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gIH1cbn07XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IGNhY2hlZCBHUFMgbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybnMge0xvY2F0aW9ufSBUaGUgY3VycmVudCBsb2NhdGlvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGNhbm5vdCBiZSByZXRyaWV2ZWRcbiAqL1xuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgZ2VvIGNvb3JkaW5hdGVzIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBHUFNfQ09PUkRJTkFURVNfUEFUVEVSTi5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgYWN0dWFsIGxvY2F0aW9uIHZhbHVlcyBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgY29uc3QgbG9jYXRpb24gPSB7XG4gICAgbGF0aXR1ZGU6IG1hdGNoWzFdLFxuICAgIGxvbmdpdHVkZTogbWF0Y2hbMl0sXG4gICAgYWx0aXR1ZGU6IG1hdGNoWzNdLFxuICB9O1xuICBsb2cuZGVidWcoYEdvdCBnZW8gY29vcmRpbmF0ZXM6ICR7SlNPTi5zdHJpbmdpZnkobG9jYXRpb24pfWApO1xuICByZXR1cm4gbG9jYXRpb247XG59O1xuXG4vKipcbiAqIFNlbmRzIGFuIGFzeW5jIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgR1BTIGNhY2hlLlxuICogVGhpcyBmZWF0dXJlIG9ubHkgd29ya3MgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhc1xuICogR29vZ2xlIFBsYXkgU2VydmljZXMgaW5zdGFsbGVkLiBJbiBjYXNlIHRoZSB2YW5pbGxhXG4gKiBMb2NhdGlvbk1hbmFnZXIgaXMgdXNlZCB0aGUgZGV2aWNlIEFQSSBsZXZlbCBtdXN0IGJlIGF0XG4gKiB2ZXJzaW9uIDMwIChBbmRyb2lkIFIpIG9yIGhpZ2hlci5cbiAqXG4gKiBAcGFyYW0gdGltZW91dE1zIFsyMDAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gYmxvY2sgdW50aWwgR1BTIGNhY2hlIGlzIHJlZnJlc2hlZC4gUHJvdmlkaW5nIHplcm8gb3IgYSBuZWdhdGl2ZVxuICogdmFsdWUgdG8gaXQgc2tpcHMgd2FpdGluZyBjb21wbGV0ZWx5LlxuICpcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgR1BTIGNhY2hlIGNhbm5vdCBiZSByZWZyZXNoZWQuXG4gKi9cbmNvbW1hbmRzLnJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlID0gYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUgKHRpbWVvdXRNcyA9IDIwMDAwKSB7XG4gIGxldCBsb2djYXRNb25pdG9yO1xuICBsZXQgbW9uaXRvcmluZ1Byb21pc2U7XG5cbiAgaWYgKHRpbWVvdXRNcyA+IDApIHtcbiAgICBjb25zdCBjbWQgPSBbXG4gICAgICAuLi50aGlzLmFkYi5kZWZhdWx0QXJncyxcbiAgICAgICdsb2djYXQnLCAnLXMnLCBMT0NBVElPTl9UUkFDS0VSX1RBRyxcbiAgICBdO1xuICAgIGxvZ2NhdE1vbml0b3IgPSBuZXcgU3ViUHJvY2Vzcyh0aGlzLmFkYi5wYXRoLCBjbWQpO1xuICAgIGNvbnN0IHRpbWVvdXRFcnJvck1zZyA9IGBUaGUgR1BTIGNhY2hlIGhhcyBub3QgYmVlbiByZWZyZXNoZWQgd2l0aGluICR7dGltZW91dE1zfW1zIHRpbWVvdXQuIGAgK1xuICAgICAgYFBsZWFzZSBtYWtlIHN1cmUgdGhlIGRldmljZSB1bmRlciB0ZXN0IGhhcyBBcHBpdW0gU2V0dGluZ3MgYXBwIGluc3RhbGxlZCBhbmQgcnVubmluZy4gYCArXG4gICAgICBgQWxzbywgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgZGV2aWNlIGhhcyBHb29nbGUgUGxheSBTZXJ2aWNlcyBpbnN0YWxsZWQgb3IgaXMgcnVubmluZyBgICtcbiAgICAgIGBBbmRyb2lkIDEwKyBvdGhlcndpc2UuYDtcbiAgICBtb25pdG9yaW5nUHJvbWlzZSA9IG5ldyBCKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcih0aW1lb3V0RXJyb3JNc2cpKSwgdGltZW91dE1zKTtcblxuICAgICAgbG9nY2F0TW9uaXRvci5vbignZXhpdCcsICgpID0+IHJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTXNnKSkpO1xuICAgICAgWydsaW5lcy1zdGRlcnInLCAnbGluZXMtc3Rkb3V0J10ubWFwKChldnQpID0+IGxvZ2NhdE1vbml0b3Iub24oZXZ0LCAobGluZXMpID0+IHtcbiAgICAgICAgaWYgKGxpbmVzLnNvbWUoKGxpbmUpID0+IEdQU19DQUNIRV9SRUZSRVNIRURfTE9HUy5zb21lKCh4KSA9PiBsaW5lLmluY2x1ZGVzKHgpKSkpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICBhd2FpdCBsb2djYXRNb25pdG9yLnN0YXJ0KDApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1uJywgTE9DQVRJT05fUkVDRUlWRVIsXG4gICAgICAnLWEnLCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OLFxuICAgICAgJy0tZXonLCAnZm9yY2VVcGRhdGUnLCAndHJ1ZScsXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlZnJlc2ggdGhlIEdQUyBjYWNoZSBvbiB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyB1cCB0byBkYXRlIGFuZCBoYXMgbG9jYXRpb24gcGVybWlzc2lvbnMuIEFsc28gdGhlIGxvY2F0aW9uIGAgK1xuICAgICAgYHNlcnZpY2VzIG11c3QgYmUgZW5hYmxlZCBvbiB0aGUgZGV2aWNlLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBpZiAobG9nY2F0TW9uaXRvciAmJiBtb25pdG9yaW5nUHJvbWlzZSkge1xuICAgIGNvbnN0IHRpbWVyID0gbmV3IHRpbWluZy5UaW1lcigpLnN0YXJ0KCk7XG4gICAgbG9nLmRlYnVnKGBXYWl0aW5nIHVwIHRvICR7dGltZW91dE1zfW1zIGZvciB0aGUgR1BTIGNhY2hlIHRvIGJlIHJlZnJlc2hlZGApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBtb25pdG9yaW5nUHJvbWlzZTtcbiAgICAgIGxvZy5pbmZvKGBUaGUgR1BTIGNhY2hlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZWZyZXNoZWQgYWZ0ZXIgYCArXG4gICAgICAgIGAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAobG9nY2F0TW9uaXRvci5pc1J1bm5pbmcpIHtcbiAgICAgICAgYXdhaXQgbG9nY2F0TW9uaXRvci5zdG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKCdUaGUgcmVxdWVzdCB0byByZWZyZXNoIHRoZSBHUFMgY2FjaGUgaGFzIGJlZW4gc2VudC4gU2tpcHBpbmcgd2FpdGluZyBmb3IgaXRzIHJlc3VsdC4nKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgZ2l2ZW4gZWRpdG9yIGFjdGlvbiBvbiB0aGUgZm9jdXNlZCBpbnB1dCBmaWVsZC5cbiAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKiBObyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcGVyZm9ybWluZyB0aGUgYWN0aW9uLlxuICogWW91IG11c3QgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQgaWYgc29tZXRoaW5nIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGFjdGlvbiAtIEVpdGhlciBhY3Rpb24gY29kZSBvciBuYW1lLiBUaGUgZm9sbG93aW5nIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhcmUgc3VwcG9ydGVkOiBgbm9ybWFsLCB1bnNwZWNpZmllZCwgbm9uZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28sIHNlYXJjaCwgc2VuZCwgbmV4dCwgZG9uZSwgcHJldmlvdXNgXG4gKi9cbmNvbW1hbmRzLnBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtRWRpdG9yQWN0aW9uIChhY3Rpb24pIHtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGVkaXRvciBhY3Rpb246ICR7YWN0aW9ufWApO1xuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLFxuICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoWydpbnB1dCcsICd0ZXh0JywgYC8ke2FjdGlvbn0vYF0pKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGRldmljZSdzIGNsaXBib2FyZC5cbiAqIFRoZSBtZXRob2Qgd29ya3MgZm9yIEFuZHJvaWQgYmVsb3cgYW5kIGFib3ZlIDI5LlxuICogSXQgdGVtb3JhcmlseSBlbmZvcmNlcyB0aGUgSU1FIHNldHRpbmcgaW4gb3JkZXIgdG8gd29ya2Fyb3VuZFxuICogc2VjdXJpdHkgbGltaXRhdGlvbnMgaWYgbmVlZGVkLlxuICogVGhpcyBtZXRob2Qgb25seSB3b3JrcyBpZiBBcHBpdW0gU2V0dGluZ3Mgdi4gMi4xNSsgaXMgaW5zdGFsbGVkXG4gKiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIG1haW4gY2xpcGJvYXJkIGFzXG4gKiBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBjbGlwYm9hcmQgaXMgZW1wdHlcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYSBwcm9ibGVtIHdoaWxlIGdldHRpbmcgdGhlXG4gKiBjbGlwYm9hcmQgY29udGFudFxuICovXG5jb21tYW5kcy5nZXRDbGlwYm9hcmQgPSBhc3luYyBmdW5jdGlvbiBnZXRDbGlwYm9hcmQgKCkge1xuICBsb2cuZGVidWcoJ0dldHRpbmcgdGhlIGNsaXBib2FyZCBjb250ZW50Jyk7XG4gIGNvbnN0IHJldHJpZXZlQ2xpcGJvYXJkID0gYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgQ0xJUEJPQVJEX1JFQ0VJVkVSLFxuICAgICctYScsIENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSAoYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpID49IDI5KVxuICAgICAgPyAoYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSwgcmV0cmlldmVDbGlwYm9hcmQpKVxuICAgICAgOiAoYXdhaXQgcmV0cmlldmVDbGlwYm9hcmQoKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGNsaXBib2FyZCBjb250ZW50IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IC9kYXRhPVwiKFteXCJdKilcIi8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBjbGlib2FyZCBjb250ZW50IGZyb20gdGhlIGNvbW1hbmQgb3V0cHV0OiAke291dHB1dH1gKTtcbiAgfVxuICByZXR1cm4gXy50cmltKG1hdGNoWzFdKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIEFuZHJvaWQgbm90aWZpY2F0aW9ucyB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIEFwcGl1bSBTZXR0aW5ncyBhcHAgaXRzZWxmIG11c3QgYmUgKm1hbnVhbGx5KiBncmFudGVkIHRvIGFjY2VzcyBub3RpZmljYXRpb25zXG4gKiB1bmRlciBkZXZpY2UgU2V0dGluZ3MgaW4gb3JkZXIgdG8gbWFrZSB0aGlzIGZlYXR1cmUgd29ya2luZy5cbiAqIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIga2VlcHMgYWxsIHRoZSBhY3RpdmUgbm90aWZpY2F0aW9ucyBwbHVzXG4gKiBub3RpZmljYXRpb25zIHRoYXQgYXBwZWFyZWQgd2hpbGUgaXQgd2FzIHJ1bm5pbmcgaW4gdGhlIGludGVybmFsIGJ1ZmZlcixcbiAqIGJ1dCBubyBtb3JlIHRoYW4gMTAwIGl0ZW1zIGFsdG9nZXRoZXIuIE5ld2x5IGFwcGVhcmVkIG5vdGlmaWNhdGlvbnNcbiAqIGFyZSBhbHdheXMgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIG5vdGlmaWNhdGlvbnMgYXJyYXkuXG4gKiBUaGUgYGlzUmVtb3ZlZGAgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGZvciBub3RpZmljYXRpb25zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuXG4gKlxuICogU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvblxuICogYW5kIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uaHRtbFxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYXZhaWxhYmxlIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGFuZCB0aGVpciB2YWx1ZXMuXG4gKlxuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcInN0YXR1c0Jhck5vdGlmaWNhdGlvbnNcIjpbXG4gKiAgICAge1xuICogICAgICAgXCJpc0dyb3VwXCI6ZmFsc2UsXG4gKiAgICAgICBcInBhY2thZ2VOYW1lXCI6XCJpby5hcHBpdW0uc2V0dGluZ3NcIixcbiAqICAgICAgIFwiaXNDbGVhcmFibGVcIjpmYWxzZSxcbiAqICAgICAgIFwiaXNPbmdvaW5nXCI6dHJ1ZSxcbiAqICAgICAgIFwiaWRcIjoxLFxuICogICAgICAgXCJ0YWdcIjpudWxsLFxuICogICAgICAgXCJub3RpZmljYXRpb25cIjp7XG4gKiAgICAgICAgIFwidGl0bGVcIjpudWxsLFxuICogICAgICAgICBcImJpZ1RpdGxlXCI6XCJBcHBpdW0gU2V0dGluZ3NcIixcbiAqICAgICAgICAgXCJ0ZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUZXh0XCI6XCJLZWVwIHRoaXMgc2VydmljZSBydW5uaW5nLCBzbyBBcHBpdW0gZm9yIEFuZHJvaWQgY2FuIHByb3Blcmx5IGludGVyYWN0IHdpdGggc2V2ZXJhbCBzeXN0ZW0gQVBJc1wiLFxuICogICAgICAgICBcInRpY2tlclRleHRcIjpudWxsLFxuICogICAgICAgICBcInN1YlRleHRcIjpudWxsLFxuICogICAgICAgICBcImluZm9UZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJ0ZW1wbGF0ZVwiOlwiYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uJEJpZ1RleHRTdHlsZVwiXG4gKiAgICAgICB9LFxuICogICAgICAgXCJ1c2VySGFuZGxlXCI6MCxcbiAqICAgICAgIFwiZ3JvdXBLZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJvdmVycmlkZUdyb3VwS2V5XCI6bnVsbCxcbiAqICAgICAgIFwicG9zdFRpbWVcIjoxNTc2ODUzNTE4ODUwLFxuICogICAgICAgXCJrZXlcIjpcIjB8aW8uYXBwaXVtLnNldHRpbmdzfDF8bnVsbHwxMDEzM1wiLFxuICogICAgICAgXCJpc1JlbW92ZWRcIjpmYWxzZVxuICogICAgIH1cbiAqICAgXVxuICogfVxuICogYGBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdFxuICovXG5jb21tYW5kcy5nZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyBub3RpZmljYXRpb25zJyk7XG4gIC8vIFNvbWVob3cgcHJvdmlkaW5nIHRoZSBgLW5gIGFyZyB0byB0aGUgYGFtYCB1bmRlcm5lYXRoXG4gIC8vIHJlbmRlcnMgdGhlIGJyb2FkY2FzdCB0byBmYWlsIGluc3RlYWQgb2Ygc3RhcnRpbmcgdGhlXG4gIC8vIEFwcGl1bSBTZXR0aW5ncyBhcHAuIFRoaXMgb25seSBoYXBwZW5zIHRvIHRoZSBub3RpZmljYXRpb25zXG4gIC8vIHJlY2VpdmVyXG4gIGF3YWl0IHRoaXMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCgpO1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ25vdGlmaWNhdGlvbnMnKTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU21zTGlzdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXggWzEwMF0gLSBUaGUgbWF4aW11bSBjb3VudCBvZiByZWNlbnQgbWVzc2FnZXNcbiAqIHRvIHJldHJpZXZlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgdGhlIG1vc3QgcmVjZW50IFNNU1xuICogcHJvcGVydGllcyBsaXN0IHZpYSBBcHBpdW0gU2V0dGluZ3MgaGVscGVyLlxuICogTWVzc2FnZXMgYXJlIHNvcnRlZCBieSBkYXRlIGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gKlxuICogQHBhcmFtIHtTbXNMaXN0T3B0aW9uc30gb3B0c1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGV4YW1wbGUgb3V0cHV0IGlzOlxuICogYGBganNvblxuICoge1xuICogICBcIml0ZW1zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjJcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2NDIyMjAzXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlMlxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIFwiaWRcIjpcIjFcIixcbiAqICAgICAgIFwiYWRkcmVzc1wiOlwiKzEyMzQ1Njc4OVwiLFxuICogICAgICAgXCJwZXJzb25cIjpudWxsLFxuICogICAgICAgXCJkYXRlXCI6XCIxNTgxOTM2MzgyNzQwXCIsXG4gKiAgICAgICBcInJlYWRcIjpcIjBcIixcbiAqICAgICAgIFwic3RhdHVzXCI6XCItMVwiLFxuICogICAgICAgXCJ0eXBlXCI6XCIxXCIsXG4gKiAgICAgICBcInN1YmplY3RcIjpudWxsLFxuICogICAgICAgXCJib2R5XCI6XCJcXFwidGV4dCBtZXNzYWdlXFxcIlwiLFxuICogICAgICAgXCJzZXJ2aWNlQ2VudGVyXCI6bnVsbFxuICogICAgIH1cbiAqICAgXSxcbiAqICAgXCJ0b3RhbFwiOjJcbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBTTVMgbGlzdFxuICovXG5jb21tYW5kcy5nZXRTbXNMaXN0ID0gYXN5bmMgZnVuY3Rpb24gZ2V0U21zTGlzdCAob3B0cyA9IHt9KSB7XG4gIGxvZy5kZWJ1ZygnUmV0cmlldmluZyB0aGUgcmVjZW50IFNNUyBtZXNzYWdlcycpO1xuICBjb25zdCBhcmdzID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIFNNU19MSVNUX1JFQ0VJVkVSLFxuICAgICctYScsIFNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04sXG4gIF07XG4gIGlmIChvcHRzLm1heCkge1xuICAgIGFyZ3MucHVzaCgnLS1lcycsICdtYXgnLCBvcHRzLm1heCk7XG4gIH1cbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBTTVMgbGlzdCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBhbmQgaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSnNvbkRhdGEob3V0cHV0LCAnU01TIGxpc3QnKTtcbn07XG5cbi8qKlxuICogVHlwZXMgdGhlIGdpdmVuIFVuaWNvZGUgc3RyaW5nLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgZm9jdXMgaXMgYWxyZWFkeSBwdXRcbiAqIHRvIHRoZSBkZXN0aW5hdGlvbiBpbnB1dCBmaWVsZCBiZWZvcmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBzdHJpbmcgdG8gdHlwZVxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5wdXQgdGV4dCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2VudCB0byBhZGJcbiAqL1xuY29tbWFuZHMudHlwZVVuaWNvZGUgPSBhc3luYyBmdW5jdGlvbiB0eXBlVW5pY29kZSAodGV4dCkge1xuICBpZiAoXy5pc05pbCh0ZXh0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRleHQgPSBgJHt0ZXh0fWA7XG4gIGxvZy5kZWJ1ZyhgVHlwaW5nICR7dXRpbC5wbHVyYWxpemUoJ2NoYXJhY3RlcicsIHRleHQubGVuZ3RoLCB0cnVlKX1gKTtcbiAgaWYgKCF0ZXh0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KFxuICAgIFVOSUNPREVfSU1FLCBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLmlucHV0VGV4dChpbWFwLmVuY29kZSh0ZXh0KSlcbiAgKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIFBlcmZvcm1zIHJlY3Vyc2l2ZSBtZWRpYSBzY2FuIGF0IHRoZSBnaXZlbiBkZXN0aW5hdGlvbi5cbiAqIEFsbCBzdWNjZXNzZnVsbHkgc2Nhbm5lZCBpdGVtcyBhcmUgYmVpbmcgYWRkZWQgdG8gdGhlIGRldmljZSdzXG4gKiBtZWRpYSBsaWJyYXJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0aW5hdGlvbiBGaWxlL2ZvbGRlciBwYXRoIG9uIHRoZSByZW1vdGUgZGV2aWNlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiB1bmV4cGVjdGVkIGVycm9yIGJ5IHNjYW5uaW5nLlxuICovXG5jb21tYW5kcy5zY2FuTWVkaWEgPSBhc3luYyBmdW5jdGlvbiBzY2FuTWVkaWEgKGRlc3RpbmF0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgU2Nhbm5pbmcgJyR7ZGVzdGluYXRpb259JyBmb3IgbWVkaWEgZmlsZXNgKTtcbiAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgTUVESUFfU0NBTl9SRUNFSVZFUixcbiAgICAnLWEnLCBNRURJQV9TQ0FOX0FDVElPTixcbiAgICAnLS1lcycsICdwYXRoJywgZGVzdGluYXRpb25cbiAgXSk7XG4gIGlmICghXy5pbmNsdWRlcyhvdXRwdXQsICdyZXN1bHQ9LTEnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWVkaWEgY291bGQgYmUgc2Nhbm5lZCBhdCAnJHtkZXN0aW5hdGlvbn0nLiBgICtcbiAgICAgIGBDaGVjayB0aGUgZGV2aWNlIGxvZ2NhdCBvdXRwdXQgZm9yIG1vcmUgZGV0YWlscy5gKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsa0JBQWtCLEdBQUcsb0JBQTNCO0FBQ0EsTUFBTUMsNkJBQTZCLEdBQUcsV0FBdEM7QUFDQSxNQUFNQyxnQ0FBZ0MsR0FBSSxHQUFFRixrQkFBbUIsMkNBQS9EO0FBQ0EsTUFBTUcsOEJBQThCLEdBQUksR0FBRUgsa0JBQW1CLE9BQTdEO0FBQ0EsTUFBTUksZ0NBQWdDLEdBQUksR0FBRUosa0JBQW1CLDJDQUEvRDtBQUNBLE1BQU1LLDhCQUE4QixHQUFJLEdBQUVMLGtCQUFtQixrQkFBN0Q7QUFDQSxNQUFNTSwwQkFBMEIsR0FBSSxHQUFFTixrQkFBbUIsc0NBQXpEO0FBQ0EsTUFBTU8sd0JBQXdCLEdBQUksR0FBRVAsa0JBQW1CLFlBQXZEO0FBQ0EsTUFBTVEsdUJBQXVCLEdBQUksR0FBRVIsa0JBQW1CLG1DQUF0RDtBQUNBLE1BQU1TLHFCQUFxQixHQUFJLEdBQUVULGtCQUFtQixTQUFwRDtBQUNBLE1BQU1VLGdCQUFnQixHQUFJLEdBQUVWLGtCQUFtQixtQkFBL0M7QUFDQSxNQUFNVyxpQkFBaUIsR0FBSSxHQUFFWCxrQkFBbUIsa0NBQWhE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
|
|
362
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliL3Rvb2xzL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcy5qcyIsIm5hbWVzIjpbIlNFVFRJTkdTX0hFTFBFUl9JRCIsIlNFVFRJTkdTX0hFTFBFUl9NQUlOX0FDVElWSVRZIiwiV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04iLCJEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OIiwiTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIiLCJMT0NBTEVfU0VUVElOR19BQ1RJT04iLCJMT0NBVElPTl9TRVJWSUNFIiwiTE9DQVRJT05fUkVDRUlWRVIiLCJMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OIiwiQ0xJUEJPQVJEX1JFQ0VJVkVSIiwiQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04iLCJOT1RJRklDQVRJT05TX1JFVFJJRVZBTF9BQ1RJT04iLCJTTVNfTElTVF9SRUNFSVZFUiIsIlNNU19MSVNUX1JFVFJJRVZBTF9BQ1RJT04iLCJNRURJQV9TQ0FOX1JFQ0VJVkVSIiwiTUVESUFfU0NBTl9BQ1RJT04iLCJBUFBJVU1fSU1FIiwiVU5JQ09ERV9JTUUiLCJERUZBVUxUX1NBVEVMTElURVNfQ09VTlQiLCJERUZBVUxUX0FMVElUVURFIiwiTE9DQVRJT05fVFJBQ0tFUl9UQUciLCJHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MiLCJHUFNfQ09PUkRJTkFURVNfUEFUVEVSTiIsImNvbW1hbmRzIiwicmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCIsIm9wdHMiLCJwcm9jZXNzRXhpc3RzIiwibG9nIiwiZGVidWciLCJ0aW1lb3V0Iiwic3RhcnRBcHAiLCJwa2ciLCJhY3Rpdml0eSIsImFjdGlvbiIsImNhdGVnb3J5Iiwic3RvcEFwcCIsIndhaXRGb3JMYXVuY2giLCJ3YWl0Rm9yQ29uZGl0aW9uIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVyciIsIkVycm9yIiwic2V0V2lmaVN0YXRlIiwib24iLCJpc0VtdWxhdG9yIiwic2hlbGwiLCJwcml2aWxlZ2VkIiwiZ2V0QXBpTGV2ZWwiLCJzZXREYXRhU3RhdGUiLCJzZXRBbmltYXRpb25TdGF0ZSIsInNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJzY3JpcHQiLCJwYXJhbXMiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwicHVzaCIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJmb3JtYXRMb2NhdGlvblZhbHVlIiwidmFsdWVOYW1lIiwiaXNSZXF1aXJlZCIsInV0aWwiLCJoYXNWYWx1ZSIsImZsb2F0VmFsdWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJfIiwiY2VpbCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiYWx0aXR1ZGUiLCJzcGVlZCIsImFyZ3MiLCJpc05pbCIsInNhdGVsbGl0ZXMiLCJwYXJzZUludCIsIk51bWJlciIsImxlbmd0aCIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwiYWRiRXhlYyIsIm1hcCIsImFyZyIsInJlcGxhY2UiLCJnZXRHZW9Mb2NhdGlvbiIsIm91dHB1dCIsInN0ZGVyciIsInN0ZG91dCIsIm1lc3NhZ2UiLCJtYXRjaCIsImV4ZWMiLCJKU09OIiwic3RyaW5naWZ5IiwicmVmcmVzaEdlb0xvY2F0aW9uQ2FjaGUiLCJ0aW1lb3V0TXMiLCJsb2djYXRNb25pdG9yIiwibW9uaXRvcmluZ1Byb21pc2UiLCJjbWQiLCJhZGIiLCJkZWZhdWx0QXJncyIsIlN1YlByb2Nlc3MiLCJwYXRoIiwidGltZW91dEVycm9yTXNnIiwiQiIsInJlc29sdmUiLCJyZWplY3QiLCJzZXRUaW1lb3V0IiwiZXZ0IiwibGluZXMiLCJzb21lIiwibGluZSIsIngiLCJpbmNsdWRlcyIsInN0YXJ0IiwidGltZXIiLCJ0aW1pbmciLCJUaW1lciIsImluZm8iLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImlzUnVubmluZyIsInN0b3AiLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwicnVuSW5JbWVDb250ZXh0IiwiZ2V0Q2xpcGJvYXJkIiwicmV0cmlldmVDbGlwYm9hcmQiLCJ0cmltIiwiZ2V0Tm90aWZpY2F0aW9ucyIsInBhcnNlSnNvbkRhdGEiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSIsInNjYW5NZWRpYSIsImRlc3RpbmF0aW9uIl0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLiIsInNvdXJjZXMiOlsibGliL3Rvb2xzL3NldHRpbmdzLWNsaWVudC1jb21tYW5kcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUpzb25EYXRhIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCwgdGltaW5nIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5pbXBvcnQgeyBTdWJQcm9jZXNzIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcblxuY29uc3QgU0VUVElOR1NfSEVMUEVSX0lEID0gJ2lvLmFwcGl1bS5zZXR0aW5ncyc7XG5jb25zdCBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSA9ICcuU2V0dGluZ3MnO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuV2lGaUNvbm5lY3Rpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgV0lGSV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS53aWZpYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkRhdGFDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uZGF0YV9jb25uZWN0aW9uYDtcbmNvbnN0IEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkFuaW1hdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmFuaW1hdGlvbmA7XG5jb25zdCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhbGVTZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhbGVgO1xuY29uc3QgTE9DQVRJT05fU0VSVklDRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkxvY2F0aW9uU2VydmljZWA7XG5jb25zdCBMT0NBVElPTl9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5Mb2NhdGlvbkluZm9SZWNlaXZlcmA7XG5jb25zdCBMT0NBVElPTl9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5sb2NhdGlvbmA7XG5jb25zdCBDTElQQk9BUkRfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuQ2xpcGJvYXJkUmVjZWl2ZXJgO1xuY29uc3QgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmNsaXBib2FyZC5nZXRgO1xuY29uc3QgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5ub3RpZmljYXRpb25zYDtcbmNvbnN0IFNNU19MSVNUX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLlNtc1JlYWRlcmA7XG5jb25zdCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zbXMucmVhZGA7XG5jb25zdCBNRURJQV9TQ0FOX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLk1lZGlhU2Nhbm5lclJlY2VpdmVyYDtcbmNvbnN0IE1FRElBX1NDQU5fQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5zY2FuX21lZGlhYDtcbmNvbnN0IEFQUElVTV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5BcHBpdW1JTUVgO1xuY29uc3QgVU5JQ09ERV9JTUUgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Vbmljb2RlSU1FYDtcbmNvbnN0IERFRkFVTFRfU0FURUxMSVRFU19DT1VOVCA9IDEyO1xuY29uc3QgREVGQVVMVF9BTFRJVFVERSA9IDAuMDtcbmNvbnN0IExPQ0FUSU9OX1RSQUNLRVJfVEFHID0gJ0xvY2F0aW9uVHJhY2tlcic7XG5jb25zdCBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1MgPSBbXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gUGxheSBTZXJ2aWNlcycsXG4gICdUaGUgY3VycmVudCBsb2NhdGlvbiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkIGZyb20gTG9jYXRpb24gTWFuYWdlcidcbl07XG5cbmNvbnN0IEdQU19DT09SRElOQVRFU19QQVRURVJOID0gL2RhdGE9XCIoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVxccysoLT9bXFxkLl0rKVwiLztcblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTZXR0aW5nc0FwcFN0YXJ0dXBPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdGltZW91dCBbNTAwMF0gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICogdG8gd2FpdCB1bnRpbCB0aGUgYXBwIGhhcyBzdGFydGVkXG4gKi9cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgQXBwaXVtIFNldHRpbmdzIGhlbHBlciBhcHBsaWNhdGlvbiBpcyBydW5uaW5nXG4gKiBhbmQgc3RhcnRzIGl0IGlmIG5lY2Vzc2FyeVxuICpcbiAqIEBwYXJhbSB7U2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IElmIEFwcGl1bSBTZXR0aW5ncyBoYXMgZmFpbGVkIHRvIHN0YXJ0XG4gKiBAcmV0dXJucyB7QURCfSBzZWxmIGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICovXG5jb21tYW5kcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwID0gYXN5bmMgZnVuY3Rpb24gcmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCAob3B0cyA9IHt9KSB7XG4gIGlmIChhd2FpdCB0aGlzLnByb2Nlc3NFeGlzdHMoU0VUVElOR1NfSEVMUEVSX0lEKSkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9nLmRlYnVnKCdTdGFydGluZyBBcHBpdW0gU2V0dGluZ3MgYXBwJyk7XG4gIGNvbnN0IHtcbiAgICB0aW1lb3V0ID0gNTAwMCxcbiAgfSA9IG9wdHM7XG4gIGF3YWl0IHRoaXMuc3RhcnRBcHAoe1xuICAgIHBrZzogU0VUVElOR1NfSEVMUEVSX0lELFxuICAgIGFjdGl2aXR5OiBTRVRUSU5HU19IRUxQRVJfTUFJTl9BQ1RJVklUWSxcbiAgICBhY3Rpb246ICdhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTicsXG4gICAgY2F0ZWdvcnk6ICdhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUicsXG4gICAgc3RvcEFwcDogZmFsc2UsXG4gICAgd2FpdEZvckxhdW5jaDogZmFsc2UsXG4gIH0pO1xuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDb25kaXRpb24oYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCksIHtcbiAgICAgIHdhaXRNczogdGltZW91dCxcbiAgICAgIGludGVydmFsTXM6IDMwMCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBcHBpdW0gU2V0dGluZ3MgYXBwIGlzIG5vdCBydW5uaW5nIGFmdGVyICR7dGltZW91dH1tc2ApO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgV2lGaSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0V2lmaVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0V2lmaVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ3dpZmknLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgRGF0YSB0cmFuc2ZlciBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBvbiAtIFRydWUgdG8gZW5hYmxlIGFuZCBmYWxzZSB0byBkaXNhYmxlIGl0LlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0RGF0YVN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0RGF0YVN0YXRlIChvbiwgaXNFbXVsYXRvciA9IGZhbHNlKSB7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgLy8gVGhlIHN2YyBjb21tYW5kIGRvZXMgbm90IHJlcXVpcmUgdG8gYmUgcm9vdCBzaW5jZSBBUEkgMjZcbiAgICBhd2FpdCB0aGlzLnNoZWxsKFsnc3ZjJywgJ2RhdGEnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXSwge1xuICAgICAgcHJpdmlsZWdlZDogYXdhaXQgdGhpcy5nZXRBcGlMZXZlbCgpIDwgMjYsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAgICctbicsIERBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICAgJy0tZXMnLCAnc2V0c3RhdHVzJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ1xuICAgIF0pO1xuICB9XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgc3RhdGUgb2YgYW5pbWF0aW9uIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC5cbiAqIEFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGZvbGxvd2luZyBnbG9iYWwgcHJvcGVydGllczpcbiAqIFtBTklNQVRPUl9EVVJBVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjQU5JTUFUT1JfRFVSQVRJT05fU0NBTEV9LFxuICogW1RSQU5TSVRJT05fQU5JTUFUSU9OX1NDQUxFXXtAbGluayBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5HbG9iYWwuaHRtbCNUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRX0sXG4gKiBbV0lORE9XX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjV0lORE9XX0FOSU1BVElPTl9TQ0FMRX0uXG4gKiBUaGlzIG1ldGhvZCBzZXRzIGFsbCB0aGlzIHByb3BlcnRpZXMgdG8gMC4wIHRvIGRpc2FibGUgKDEuMCB0byBlbmFibGUpIGFuaW1hdGlvbi5cbiAqXG4gKiBUdXJuaW5nIG9mZiBhbmltYXRpb24gbWlnaHQgYmUgdXNlZnVsIHRvIGltcHJvdmUgc3RhYmlsaXR5XG4gKiBhbmQgcmVkdWNlIHRlc3RzIGV4ZWN1dGlvbiB0aW1lLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqL1xuY29tbWFuZHMuc2V0QW5pbWF0aW9uU3RhdGUgPSBhc3luYyBmdW5jdGlvbiBzZXRBbmltYXRpb25TdGF0ZSAob24pIHtcbiAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1hJywgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OLFxuICAgICctbicsIEFOSU1BVElPTl9TRVRUSU5HX1JFQ0VJVkVSLFxuICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgXSk7XG59O1xuXG4vKipcbiAqIENoYW5nZSB0aGUgbG9jYWxlIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdC4gRG9uJ3QgbmVlZCB0byByZWJvb3QgdGhlIGRldmljZSBhZnRlciBjaGFuZ2luZyB0aGUgbG9jYWxlLlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbiBhcmJpdHJhcnkgbG9jYWxlIGZvbGxvd2luZzpcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbFxuICogICBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvamF2YS91dGlsL0xvY2FsZS5odG1sI0xvY2FsZShqYXZhLmxhbmcuU3RyaW5nLCUyMGphdmEubGFuZy5TdHJpbmcpXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIC0gTGFuZ3VhZ2UuIGUuZy4gZW4sIGphXG4gKiBAcGFyYW0ge3N0cmluZ30gY291bnRyeSAtIENvdW50cnkuIGUuZy4gVVMsIEpQXG4gKiBAcGFyYW0gez9zdHJpbmd9IHNjcmlwdCAtIFNjcmlwdC4gZS5nLiBIYW5zIGluIGB6aC1IYW5zLUNOYFxuICovXG5jb21tYW5kcy5zZXREZXZpY2VTeXNMb2NhbGVWaWFTZXR0aW5nQXBwID0gYXN5bmMgZnVuY3Rpb24gc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCAobGFuZ3VhZ2UsIGNvdW50cnksIHNjcmlwdCA9IG51bGwpIHtcbiAgY29uc3QgcGFyYW1zID0gW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIExPQ0FMRV9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBMT0NBTEVfU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdsYW5nJywgbGFuZ3VhZ2UudG9Mb3dlckNhc2UoKSxcbiAgICAnLS1lcycsICdjb3VudHJ5JywgY291bnRyeS50b1VwcGVyQ2FzZSgpXG4gIF07XG5cbiAgaWYgKHNjcmlwdCkge1xuICAgIHBhcmFtcy5wdXNoKCctLWVzJywgJ3NjcmlwdCcsIHNjcmlwdCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLnNoZWxsKHBhcmFtcyk7XG59O1xuXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbG9uZ2l0dWRlIC0gVmFsaWQgbG9uZ2l0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXJ8c3RyaW5nfSBsYXRpdHVkZSAtIFZhbGlkIGxhdGl0dWRlIHZhbHVlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfHN0cmluZ30gYWx0aXR1ZGUgLSBWYWxpZCBhbHRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNhdGVsbGl0ZXMgWzEyXSAtIE51bWJlciBvZiBzYXRlbGxpdGVzIGJlaW5nIHRyYWNrZWQgKDEtMTIpLlxuICogVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIG9uIHJlYWwgZGV2aWNlcy5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IHNwZWVkIC0gVmFsaWQgc3BlZWQgdmFsdWUuXG4gKiBTaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuMCBtZXRlcnMvc2Vjb25kIGZvciByZWFsIGRldmljZXMgb3IgMC4wIGtub3RzXG4gKiBmb3IgZW11bGF0b3JzLlxuICovXG5cbi8qKlxuICogRW11bGF0ZSBnZW9sb2NhdGlvbiBjb29yZGluYXRlcyBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHBhcmFtIHtMb2NhdGlvbn0gbG9jYXRpb24gLSBMb2NhdGlvbiBvYmplY3QuIFRoZSBgYWx0aXR1ZGVgIHZhbHVlIGlzIGlnbm9yZWRcbiAqIHdoaWxlIG1vY2tpbmcgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBpc0VtdWxhdG9yIFtmYWxzZV0gLSBTZXQgaXQgdG8gdHJ1ZSBpZiB0aGUgZGV2aWNlIHVuZGVyIHRlc3RcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYW4gZW11bGF0b3IgcmF0aGVyIHRoYW4gYSByZWFsIGRldmljZS5cbiAqL1xuY29tbWFuZHMuc2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBzZXRHZW9Mb2NhdGlvbiAobG9jYXRpb24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBjb25zdCBmb3JtYXRMb2NhdGlvblZhbHVlID0gKHZhbHVlTmFtZSwgaXNSZXF1aXJlZCA9IHRydWUpID0+IHtcbiAgICBpZiAoIXV0aWwuaGFzVmFsdWUobG9jYXRpb25bdmFsdWVOYW1lXSkpIHtcbiAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt2YWx1ZU5hbWV9IG11c3QgYmUgcHJvdmlkZWRgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmbG9hdFZhbHVlID0gcGFyc2VGbG9hdChsb2NhdGlvblt2YWx1ZU5hbWVdKTtcbiAgICBpZiAoIWlzTmFOKGZsb2F0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gYCR7Xy5jZWlsKGZsb2F0VmFsdWUsIDUpfWA7XG4gICAgfVxuICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBpcyBleHBlY3RlZCB0byBiZSBhIHZhbGlkIGZsb2F0IG51bWJlci4gYCArXG4gICAgICAgIGAnJHtsb2NhdGlvblt2YWx1ZU5hbWVdfScgaXMgZ2l2ZW4gaW5zdGVhZGApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgY29uc3QgbG9uZ2l0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbG9uZ2l0dWRlJyk7XG4gIGNvbnN0IGxhdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnbGF0aXR1ZGUnKTtcbiAgY29uc3QgYWx0aXR1ZGUgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdhbHRpdHVkZScsIGZhbHNlKTtcbiAgY29uc3Qgc3BlZWQgPSBmb3JtYXRMb2NhdGlvblZhbHVlKCdzcGVlZCcsIGZhbHNlKTtcbiAgaWYgKGlzRW11bGF0b3IpIHtcbiAgICBjb25zdCBhcmdzID0gW2xvbmdpdHVkZSwgbGF0aXR1ZGVdO1xuICAgIGlmICghXy5pc05pbChhbHRpdHVkZSkpIHtcbiAgICAgIGFyZ3MucHVzaChhbHRpdHVkZSk7XG4gICAgfVxuICAgIGNvbnN0IHNhdGVsbGl0ZXMgPSBwYXJzZUludChsb2NhdGlvbi5zYXRlbGxpdGVzLCAxMCk7XG4gICAgaWYgKCFOdW1iZXIuaXNOYU4oc2F0ZWxsaXRlcykgJiYgc2F0ZWxsaXRlcyA+IDAgJiYgc2F0ZWxsaXRlcyA8PSAxMikge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChgJHtzYXRlbGxpdGVzfWApO1xuICAgIH1cbiAgICBpZiAoIV8uaXNOaWwoc3BlZWQpKSB7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgIGFyZ3MucHVzaChgJHtERUZBVUxUX0FMVElUVURFfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNCkge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9TQVRFTExJVEVTX0NPVU5UfWApO1xuICAgICAgfVxuICAgICAgYXJncy5wdXNoKHNwZWVkKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZXNldFRlbG5ldEF1dGhUb2tlbigpO1xuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uYXJnc10pO1xuICAgIC8vIEEgd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MTgwXG4gICAgYXdhaXQgdGhpcy5hZGJFeGVjKFsnZW11JywgJ2dlbycsICdmaXgnLCAuLi4oYXJncy5tYXAoKGFyZykgPT4gYXJnLnJlcGxhY2UoJy4nLCAnLCcpKSldKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhcmdzID0gW1xuICAgICAgJ2FtJywgKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+PSAyNikgPyAnc3RhcnQtZm9yZWdyb3VuZC1zZXJ2aWNlJyA6ICdzdGFydHNlcnZpY2UnLFxuICAgICAgJy1lJywgJ2xvbmdpdHVkZScsIGxvbmdpdHVkZSxcbiAgICAgICctZScsICdsYXRpdHVkZScsIGxhdGl0dWRlLFxuICAgIF07XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgJ2FsdGl0dWRlJywgYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShzcGVlZCkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnc3BlZWQnLCBzcGVlZCk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChMT0NBVElPTl9TRVJWSUNFKTtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBjYWNoZWQgR1BTIGxvY2F0aW9uIGZyb20gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtMb2NhdGlvbn0gVGhlIGN1cnJlbnQgbG9jYXRpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgY3VycmVudCBsb2NhdGlvbiBjYW5ub3QgYmUgcmV0cmlldmVkXG4gKi9cbmNvbW1hbmRzLmdldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gZ2V0R2VvTG9jYXRpb24gKCkge1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLW4nLCBMT0NBVElPTl9SRUNFSVZFUixcbiAgICAgICctYScsIExPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04sXG4gICAgXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIHRoZSBjdXJyZW50IGdlbyBjb29yZGluYXRlcyBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIHVwIHRvIGRhdGUgYW5kIGhhcyBsb2NhdGlvbiBwZXJtaXNzaW9ucy4gQWxzbyB0aGUgbG9jYXRpb24gYCArXG4gICAgICBgc2VydmljZXMgbXVzdCBiZSBlbmFibGVkIG9uIHRoZSBkZXZpY2UuIE9yaWdpbmFsIGVycm9yOiAke2Vyci5zdGRlcnIgfHwgZXJyLnN0ZG91dCB8fCBlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gR1BTX0NPT1JESU5BVEVTX1BBVFRFUk4uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBsb2NhdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0ge1xuICAgIGxhdGl0dWRlOiBtYXRjaFsxXSxcbiAgICBsb25naXR1ZGU6IG1hdGNoWzJdLFxuICAgIGFsdGl0dWRlOiBtYXRjaFszXSxcbiAgfTtcbiAgbG9nLmRlYnVnKGBHb3QgZ2VvIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KGxvY2F0aW9uKX1gKTtcbiAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuLyoqXG4gKiBTZW5kcyBhbiBhc3luYyByZXF1ZXN0IHRvIHJlZnJlc2ggdGhlIEdQUyBjYWNoZS5cbiAqIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIGlmIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCBoYXNcbiAqIEdvb2dsZSBQbGF5IFNlcnZpY2VzIGluc3RhbGxlZC4gSW4gY2FzZSB0aGUgdmFuaWxsYVxuICogTG9jYXRpb25NYW5hZ2VyIGlzIHVzZWQgdGhlIGRldmljZSBBUEkgbGV2ZWwgbXVzdCBiZSBhdFxuICogdmVyc2lvbiAzMCAoQW5kcm9pZCBSKSBvciBoaWdoZXIuXG4gKlxuICogQHBhcmFtIHRpbWVvdXRNcyBbMjAwMDBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIHRvIGJsb2NrIHVudGlsIEdQUyBjYWNoZSBpcyByZWZyZXNoZWQuIFByb3ZpZGluZyB6ZXJvIG9yIGEgbmVnYXRpdmVcbiAqIHZhbHVlIHRvIGl0IHNraXBzIHdhaXRpbmcgY29tcGxldGVseS5cbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIEdQUyBjYWNoZSBjYW5ub3QgYmUgcmVmcmVzaGVkLlxuICovXG5jb21tYW5kcy5yZWZyZXNoR2VvTG9jYXRpb25DYWNoZSA9IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hHZW9Mb2NhdGlvbkNhY2hlICh0aW1lb3V0TXMgPSAyMDAwMCkge1xuICBsZXQgbG9nY2F0TW9uaXRvcjtcbiAgbGV0IG1vbml0b3JpbmdQcm9taXNlO1xuXG4gIGlmICh0aW1lb3V0TXMgPiAwKSB7XG4gICAgY29uc3QgY21kID0gW1xuICAgICAgLi4udGhpcy5hZGIuZGVmYXVsdEFyZ3MsXG4gICAgICAnbG9nY2F0JywgJy1zJywgTE9DQVRJT05fVFJBQ0tFUl9UQUcsXG4gICAgXTtcbiAgICBsb2djYXRNb25pdG9yID0gbmV3IFN1YlByb2Nlc3ModGhpcy5hZGIucGF0aCwgY21kKTtcbiAgICBjb25zdCB0aW1lb3V0RXJyb3JNc2cgPSBgVGhlIEdQUyBjYWNoZSBoYXMgbm90IGJlZW4gcmVmcmVzaGVkIHdpdGhpbiAke3RpbWVvdXRNc31tcyB0aW1lb3V0LiBgICtcbiAgICAgIGBQbGVhc2UgbWFrZSBzdXJlIHRoZSBkZXZpY2UgdW5kZXIgdGVzdCBoYXMgQXBwaXVtIFNldHRpbmdzIGFwcCBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcuIGAgK1xuICAgICAgYEFsc28sIGl0IGlzIHJlcXVpcmVkIHRoYXQgdGhlIGRldmljZSBoYXMgR29vZ2xlIFBsYXkgU2VydmljZXMgaW5zdGFsbGVkIG9yIGlzIHJ1bm5pbmcgYCArXG4gICAgICBgQW5kcm9pZCAxMCsgb3RoZXJ3aXNlLmA7XG4gICAgbW9uaXRvcmluZ1Byb21pc2UgPSBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IodGltZW91dEVycm9yTXNnKSksIHRpbWVvdXRNcyk7XG5cbiAgICAgIGxvZ2NhdE1vbml0b3Iub24oJ2V4aXQnLCAoKSA9PiByZWplY3QobmV3IEVycm9yKHRpbWVvdXRFcnJvck1zZykpKTtcbiAgICAgIFsnbGluZXMtc3RkZXJyJywgJ2xpbmVzLXN0ZG91dCddLm1hcCgoZXZ0KSA9PiBsb2djYXRNb25pdG9yLm9uKGV2dCwgKGxpbmVzKSA9PiB7XG4gICAgICAgIGlmIChsaW5lcy5zb21lKChsaW5lKSA9PiBHUFNfQ0FDSEVfUkVGUkVTSEVEX0xPR1Muc29tZSgoeCkgPT4gbGluZS5pbmNsdWRlcyh4KSkpKSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gICAgYXdhaXQgbG9nY2F0TW9uaXRvci5zdGFydCgwKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICAgICctLWV6JywgJ2ZvcmNlVXBkYXRlJywgJ3RydWUnLFxuICAgIF0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWZyZXNoIHRoZSBHUFMgY2FjaGUgb24gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgaWYgKGxvZ2NhdE1vbml0b3IgJiYgbW9uaXRvcmluZ1Byb21pc2UpIHtcbiAgICBjb25zdCB0aW1lciA9IG5ldyB0aW1pbmcuVGltZXIoKS5zdGFydCgpO1xuICAgIGxvZy5kZWJ1ZyhgV2FpdGluZyB1cCB0byAke3RpbWVvdXRNc31tcyBmb3IgdGhlIEdQUyBjYWNoZSB0byBiZSByZWZyZXNoZWRgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbW9uaXRvcmluZ1Byb21pc2U7XG4gICAgICBsb2cuaW5mbyhgVGhlIEdQUyBjYWNoZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVmcmVzaGVkIGFmdGVyIGAgK1xuICAgICAgICBgJHt0aW1lci5nZXREdXJhdGlvbigpLmFzTWlsbGlTZWNvbmRzLnRvRml4ZWQoMCl9bXNgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGxvZ2NhdE1vbml0b3IuaXNSdW5uaW5nKSB7XG4gICAgICAgIGF3YWl0IGxvZ2NhdE1vbml0b3Iuc3RvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuaW5mbygnVGhlIHJlcXVlc3QgdG8gcmVmcmVzaCB0aGUgR1BTIGNhY2hlIGhhcyBiZWVuIHNlbnQuIFNraXBwaW5nIHdhaXRpbmcgZm9yIGl0cyByZXN1bHQuJyk7XG4gIH1cbn07XG5cbi8qKlxuICogUGVyZm9ybXMgdGhlIGdpdmVuIGVkaXRvciBhY3Rpb24gb24gdGhlIGZvY3VzZWQgaW5wdXQgZmllbGQuXG4gKiBUaGlzIG1ldGhvZCByZXF1aXJlcyBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIHRvIGJlIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLlxuICogTm8gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGVyZSB3YXMgYSBmYWlsdXJlIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGFjdGlvbi5cbiAqIFlvdSBtdXN0IGludmVzdGlnYXRlIHRoZSBsb2djYXQgb3V0cHV0IGlmIHNvbWV0aGluZyBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBhY3Rpb24gLSBFaXRoZXIgYWN0aW9uIGNvZGUgb3IgbmFtZS4gVGhlIGZvbGxvd2luZyBhY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMgYXJlIHN1cHBvcnRlZDogYG5vcm1hbCwgdW5zcGVjaWZpZWQsIG5vbmUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLCBzZWFyY2gsIHNlbmQsIG5leHQsIGRvbmUsIHByZXZpb3VzYFxuICovXG5jb21tYW5kcy5wZXJmb3JtRWRpdG9yQWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUVkaXRvckFjdGlvbiAoYWN0aW9uKSB7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBlZGl0b3IgYWN0aW9uOiAke2FjdGlvbn1gKTtcbiAgYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoQVBQSVVNX0lNRSxcbiAgICBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnNoZWxsKFsnaW5wdXQnLCAndGV4dCcsIGAvJHthY3Rpb259L2BdKSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBkZXZpY2UncyBjbGlwYm9hcmQuXG4gKiBUaGUgbWV0aG9kIHdvcmtzIGZvciBBbmRyb2lkIGJlbG93IGFuZCBhYm92ZSAyOS5cbiAqIEl0IHRlbW9yYXJpbHkgZW5mb3JjZXMgdGhlIElNRSBzZXR0aW5nIGluIG9yZGVyIHRvIHdvcmthcm91bmRcbiAqIHNlY3VyaXR5IGxpbWl0YXRpb25zIGlmIG5lZWRlZC5cbiAqIFRoaXMgbWV0aG9kIG9ubHkgd29ya3MgaWYgQXBwaXVtIFNldHRpbmdzIHYuIDIuMTUrIGlzIGluc3RhbGxlZFxuICogb24gdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGFjdHVhbCBjb250ZW50IG9mIHRoZSBtYWluIGNsaXBib2FyZCBhc1xuICogYmFzZTY0LWVuY29kZWQgc3RyaW5nIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY2xpcGJvYXJkIGlzIGVtcHR5XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGEgcHJvYmxlbSB3aGlsZSBnZXR0aW5nIHRoZVxuICogY2xpcGJvYXJkIGNvbnRhbnRcbiAqL1xuY29tbWFuZHMuZ2V0Q2xpcGJvYXJkID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q2xpcGJvYXJkICgpIHtcbiAgbG9nLmRlYnVnKCdHZXR0aW5nIHRoZSBjbGlwYm9hcmQgY29udGVudCcpO1xuICBjb25zdCByZXRyaWV2ZUNsaXBib2FyZCA9IGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIENMSVBCT0FSRF9SRUNFSVZFUixcbiAgICAnLWEnLCBDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTixcbiAgXSk7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gKGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA+PSAyOSlcbiAgICAgID8gKGF3YWl0IHRoaXMucnVuSW5JbWVDb250ZXh0KEFQUElVTV9JTUUsIHJldHJpZXZlQ2xpcGJvYXJkKSlcbiAgICAgIDogKGF3YWl0IHJldHJpZXZlQ2xpcGJvYXJkKCkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSB0aGUgY3VycmVudCBjbGlwYm9hcmQgY29udGVudCBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSAvZGF0YT1cIihbXlwiXSopXCIvLmV4ZWMob3V0cHV0KTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlIHRoZSBhY3R1YWwgY2xpYm9hcmQgY29udGVudCBmcm9tIHRoZSBjb21tYW5kIG91dHB1dDogJHtvdXRwdXR9YCk7XG4gIH1cbiAgcmV0dXJuIF8udHJpbShtYXRjaFsxXSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBBbmRyb2lkIG5vdGlmaWNhdGlvbnMgdmlhIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIuXG4gKiBBcHBpdW0gU2V0dGluZ3MgYXBwIGl0c2VsZiBtdXN0IGJlICptYW51YWxseSogZ3JhbnRlZCB0byBhY2Nlc3Mgbm90aWZpY2F0aW9uc1xuICogdW5kZXIgZGV2aWNlIFNldHRpbmdzIGluIG9yZGVyIHRvIG1ha2UgdGhpcyBmZWF0dXJlIHdvcmtpbmcuXG4gKiBBcHBpdW0gU2V0dGluZ3MgaGVscGVyIGtlZXBzIGFsbCB0aGUgYWN0aXZlIG5vdGlmaWNhdGlvbnMgcGx1c1xuICogbm90aWZpY2F0aW9ucyB0aGF0IGFwcGVhcmVkIHdoaWxlIGl0IHdhcyBydW5uaW5nIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gKiBidXQgbm8gbW9yZSB0aGFuIDEwMCBpdGVtcyBhbHRvZ2V0aGVyLiBOZXdseSBhcHBlYXJlZCBub3RpZmljYXRpb25zXG4gKiBhcmUgYWx3YXlzIGFkZGVkIHRvIHRoZSBoZWFkIG9mIHRoZSBub3RpZmljYXRpb25zIGFycmF5LlxuICogVGhlIGBpc1JlbW92ZWRgIGZsYWcgaXMgc2V0IHRvIGB0cnVlYCBmb3Igbm90aWZpY2F0aW9ucyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb25cbiAqIGFuZCBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uLmh0bWxcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF2YWlsYWJsZSBub3RpZmljYXRpb24gcHJvcGVydGllcyBhbmQgdGhlaXIgdmFsdWVzLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBleGFtcGxlIG91dHB1dCBpczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJzdGF0dXNCYXJOb3RpZmljYXRpb25zXCI6W1xuICogICAgIHtcbiAqICAgICAgIFwiaXNHcm91cFwiOmZhbHNlLFxuICogICAgICAgXCJwYWNrYWdlTmFtZVwiOlwiaW8uYXBwaXVtLnNldHRpbmdzXCIsXG4gKiAgICAgICBcImlzQ2xlYXJhYmxlXCI6ZmFsc2UsXG4gKiAgICAgICBcImlzT25nb2luZ1wiOnRydWUsXG4gKiAgICAgICBcImlkXCI6MSxcbiAqICAgICAgIFwidGFnXCI6bnVsbCxcbiAqICAgICAgIFwibm90aWZpY2F0aW9uXCI6e1xuICogICAgICAgICBcInRpdGxlXCI6bnVsbCxcbiAqICAgICAgICAgXCJiaWdUaXRsZVwiOlwiQXBwaXVtIFNldHRpbmdzXCIsXG4gKiAgICAgICAgIFwidGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwiYmlnVGV4dFwiOlwiS2VlcCB0aGlzIHNlcnZpY2UgcnVubmluZywgc28gQXBwaXVtIGZvciBBbmRyb2lkIGNhbiBwcm9wZXJseSBpbnRlcmFjdCB3aXRoIHNldmVyYWwgc3lzdGVtIEFQSXNcIixcbiAqICAgICAgICAgXCJ0aWNrZXJUZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJzdWJUZXh0XCI6bnVsbCxcbiAqICAgICAgICAgXCJpbmZvVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwidGVtcGxhdGVcIjpcImFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbiRCaWdUZXh0U3R5bGVcIlxuICogICAgICAgfSxcbiAqICAgICAgIFwidXNlckhhbmRsZVwiOjAsXG4gKiAgICAgICBcImdyb3VwS2V5XCI6XCIwfGlvLmFwcGl1bS5zZXR0aW5nc3wxfG51bGx8MTAxMzNcIixcbiAqICAgICAgIFwib3ZlcnJpZGVHcm91cEtleVwiOm51bGwsXG4gKiAgICAgICBcInBvc3RUaW1lXCI6MTU3Njg1MzUxODg1MCxcbiAqICAgICAgIFwia2V5XCI6XCIwfGlvLmFwcGl1bS5zZXR0aW5nc3wxfG51bGx8MTAxMzNcIixcbiAqICAgICAgIFwiaXNSZW1vdmVkXCI6ZmFsc2VcbiAqICAgICB9XG4gKiAgIF1cbiAqIH1cbiAqIGBgYFxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBub3RpZmljYXRpb25zIGxpc3RcbiAqL1xuY29tbWFuZHMuZ2V0Tm90aWZpY2F0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbnMgKCkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgbm90aWZpY2F0aW9ucycpO1xuICAvLyBTb21laG93IHByb3ZpZGluZyB0aGUgYC1uYCBhcmcgdG8gdGhlIGBhbWAgdW5kZXJuZWF0aFxuICAvLyByZW5kZXJzIHRoZSBicm9hZGNhc3QgdG8gZmFpbCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIHRoZVxuICAvLyBBcHBpdW0gU2V0dGluZ3MgYXBwLiBUaGlzIG9ubHkgaGFwcGVucyB0byB0aGUgbm90aWZpY2F0aW9uc1xuICAvLyByZWNlaXZlclxuICBhd2FpdCB0aGlzLnJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAoKTtcbiAgbGV0IG91dHB1dDtcbiAgdHJ5IHtcbiAgICBvdXRwdXQgPSBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICAgJy1hJywgTk9USUZJQ0FUSU9OU19SRVRSSUVWQUxfQUNUSU9OLFxuICAgIF0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXRyaWV2ZSBub3RpZmljYXRpb25zIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIGFuZCBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VKc29uRGF0YShvdXRwdXQsICdub3RpZmljYXRpb25zJyk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNtc0xpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4IFsxMDBdIC0gVGhlIG1heGltdW0gY291bnQgb2YgcmVjZW50IG1lc3NhZ2VzXG4gKiB0byByZXRyaWV2ZVxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHRoZSBtb3N0IHJlY2VudCBTTVNcbiAqIHByb3BlcnRpZXMgbGlzdCB2aWEgQXBwaXVtIFNldHRpbmdzIGhlbHBlci5cbiAqIE1lc3NhZ2VzIGFyZSBzb3J0ZWQgYnkgZGF0ZSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICpcbiAqIEBwYXJhbSB7U21zTGlzdE9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBleGFtcGxlIG91dHB1dCBpczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJpdGVtc1wiOltcbiAqICAgICB7XG4gKiAgICAgICBcImlkXCI6XCIyXCIsXG4gKiAgICAgICBcImFkZHJlc3NcIjpcIisxMjM0NTY3ODlcIixcbiAqICAgICAgIFwicGVyc29uXCI6bnVsbCxcbiAqICAgICAgIFwiZGF0ZVwiOlwiMTU4MTkzNjQyMjIwM1wiLFxuICogICAgICAgXCJyZWFkXCI6XCIwXCIsXG4gKiAgICAgICBcInN0YXR1c1wiOlwiLTFcIixcbiAqICAgICAgIFwidHlwZVwiOlwiMVwiLFxuICogICAgICAgXCJzdWJqZWN0XCI6bnVsbCxcbiAqICAgICAgIFwiYm9keVwiOlwiXFxcInRleHQgbWVzc2FnZTJcXFwiXCIsXG4gKiAgICAgICBcInNlcnZpY2VDZW50ZXJcIjpudWxsXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICBcImlkXCI6XCIxXCIsXG4gKiAgICAgICBcImFkZHJlc3NcIjpcIisxMjM0NTY3ODlcIixcbiAqICAgICAgIFwicGVyc29uXCI6bnVsbCxcbiAqICAgICAgIFwiZGF0ZVwiOlwiMTU4MTkzNjM4Mjc0MFwiLFxuICogICAgICAgXCJyZWFkXCI6XCIwXCIsXG4gKiAgICAgICBcInN0YXR1c1wiOlwiLTFcIixcbiAqICAgICAgIFwidHlwZVwiOlwiMVwiLFxuICogICAgICAgXCJzdWJqZWN0XCI6bnVsbCxcbiAqICAgICAgIFwiYm9keVwiOlwiXFxcInRleHQgbWVzc2FnZVxcXCJcIixcbiAqICAgICAgIFwic2VydmljZUNlbnRlclwiOm51bGxcbiAqICAgICB9XG4gKiAgIF0sXG4gKiAgIFwidG90YWxcIjoyXG4gKiB9XG4gKiBgYGBcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgU01TIGxpc3RcbiAqL1xuY29tbWFuZHMuZ2V0U21zTGlzdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFNtc0xpc3QgKG9wdHMgPSB7fSkge1xuICBsb2cuZGVidWcoJ1JldHJpZXZpbmcgdGhlIHJlY2VudCBTTVMgbWVzc2FnZXMnKTtcbiAgY29uc3QgYXJncyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLW4nLCBTTVNfTElTVF9SRUNFSVZFUixcbiAgICAnLWEnLCBTTVNfTElTVF9SRVRSSUVWQUxfQUNUSU9OLFxuICBdO1xuICBpZiAob3B0cy5tYXgpIHtcbiAgICBhcmdzLnB1c2goJy0tZXMnLCAnbWF4Jywgb3B0cy5tYXgpO1xuICB9XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChhcmdzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgU01TIGxpc3QgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGlzIHVwIHRvIGRhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICB9XG4gIHJldHVybiBwYXJzZUpzb25EYXRhKG91dHB1dCwgJ1NNUyBsaXN0Jyk7XG59O1xuXG4vKipcbiAqIFR5cGVzIHRoZSBnaXZlbiBVbmljb2RlIHN0cmluZy5cbiAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZvY3VzIGlzIGFscmVhZHkgcHV0XG4gKiB0byB0aGUgZGVzdGluYXRpb24gaW5wdXQgZmllbGQgYmVmb3JlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUaGUgc3RyaW5nIHRvIHR5cGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGlucHV0IHRleHQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gYWRiXG4gKi9cbmNvbW1hbmRzLnR5cGVVbmljb2RlID0gYXN5bmMgZnVuY3Rpb24gdHlwZVVuaWNvZGUgKHRleHQpIHtcbiAgaWYgKF8uaXNOaWwodGV4dCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0ZXh0ID0gYCR7dGV4dH1gO1xuICBsb2cuZGVidWcoYFR5cGluZyAke3V0aWwucGx1cmFsaXplKCdjaGFyYWN0ZXInLCB0ZXh0Lmxlbmd0aCwgdHJ1ZSl9YCk7XG4gIGlmICghdGV4dCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChcbiAgICBVTklDT0RFX0lNRSwgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5pbnB1dFRleHQoaW1hcC5lbmNvZGUodGV4dCkpXG4gICk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyByZWN1cnNpdmUgbWVkaWEgc2NhbiBhdCB0aGUgZ2l2ZW4gZGVzdGluYXRpb24uXG4gKiBBbGwgc3VjY2Vzc2Z1bGx5IHNjYW5uZWQgaXRlbXMgYXJlIGJlaW5nIGFkZGVkIHRvIHRoZSBkZXZpY2Unc1xuICogbWVkaWEgbGlicmFyeS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb24gRmlsZS9mb2xkZXIgcGF0aCBvbiB0aGUgcmVtb3RlIGRldmljZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gdW5leHBlY3RlZCBlcnJvciBieSBzY2FubmluZy5cbiAqL1xuY29tbWFuZHMuc2Nhbk1lZGlhID0gYXN5bmMgZnVuY3Rpb24gc2Nhbk1lZGlhIChkZXN0aW5hdGlvbikge1xuICBsb2cuZGVidWcoYFNjYW5uaW5nICcke2Rlc3RpbmF0aW9ufScgZm9yIG1lZGlhIGZpbGVzYCk7XG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctbicsIE1FRElBX1NDQU5fUkVDRUlWRVIsXG4gICAgJy1hJywgTUVESUFfU0NBTl9BQ1RJT04sXG4gICAgJy0tZXMnLCAncGF0aCcsIGRlc3RpbmF0aW9uXG4gIF0pO1xuICBpZiAoIV8uaW5jbHVkZXMob3V0cHV0LCAncmVzdWx0PS0xJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1lZGlhIGNvdWxkIGJlIHNjYW5uZWQgYXQgJyR7ZGVzdGluYXRpb259Jy4gYCArXG4gICAgICBgQ2hlY2sgdGhlIGRldmljZSBsb2djYXQgb3V0cHV0IGZvciBtb3JlIGRldGFpbHMuYCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGtCQUFrQixHQUFHLG9CQUEzQjtBQUNBLE1BQU1DLDZCQUE2QixHQUFHLFdBQXRDO0FBQ0EsTUFBTUMsZ0NBQWdDLEdBQUksR0FBRUYsa0JBQW1CLDJDQUEvRDtBQUNBLE1BQU1HLDhCQUE4QixHQUFJLEdBQUVILGtCQUFtQixPQUE3RDtBQUNBLE1BQU1JLGdDQUFnQyxHQUFJLEdBQUVKLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNSyw4QkFBOEIsR0FBSSxHQUFFTCxrQkFBbUIsa0JBQTdEO0FBQ0EsTUFBTU0sMEJBQTBCLEdBQUksR0FBRU4sa0JBQW1CLHNDQUF6RDtBQUNBLE1BQU1PLHdCQUF3QixHQUFJLEdBQUVQLGtCQUFtQixZQUF2RDtBQUNBLE1BQU1RLHVCQUF1QixHQUFJLEdBQUVSLGtCQUFtQixtQ0FBdEQ7QUFDQSxNQUFNUyxxQkFBcUIsR0FBSSxHQUFFVCxrQkFBbUIsU0FBcEQ7QUFDQSxNQUFNVSxnQkFBZ0IsR0FB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
|
|
@@ -247,7 +247,7 @@ commands.setGeoLocation = async function setGeoLocation (location, isEmulator =
|
|
|
247
247
|
await this.adbExec(['emu', 'geo', 'fix', ...(args.map((arg) => arg.replace('.', ',')))]);
|
|
248
248
|
} else {
|
|
249
249
|
const args = [
|
|
250
|
-
'am', 'startservice',
|
|
250
|
+
'am', (await this.getApiLevel() >= 26) ? 'start-foreground-service' : 'startservice',
|
|
251
251
|
'-e', 'longitude', longitude,
|
|
252
252
|
'-e', 'latitude', latitude,
|
|
253
253
|
];
|