appium-adb 8.14.0 → 8.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +5 -3
- package/build/lib/adb.js +7 -3
- package/build/lib/logcat.js +1 -1
- package/build/lib/tools/adb-commands.js +21 -31
- package/build/lib/tools/apks-utils.js +34 -31
- package/build/lib/tools/index.js +10 -4
- package/build/lib/tools/keyboard-commands.js +71 -0
- package/build/lib/tools/lockmgmt.js +224 -0
- package/build/lib/tools/settings-client-commands.js +2 -2
- package/build/lib/tools/system-calls.js +4 -4
- package/lib/adb.js +2 -0
- package/lib/tools/adb-commands.js +27 -66
- package/lib/tools/apks-utils.js +62 -45
- package/lib/tools/index.js +4 -0
- package/lib/tools/keyboard-commands.js +64 -0
- package/lib/tools/lockmgmt.js +248 -0
- package/lib/tools/settings-client-commands.js +4 -3
- package/lib/tools/system-calls.js +3 -3
- package/package.json +1 -1
|
@@ -287,7 +287,7 @@ commands.typeUnicode = async function typeUnicode(text) {
|
|
|
287
287
|
return false;
|
|
288
288
|
}
|
|
289
289
|
|
|
290
|
-
await this.runInImeContext(UNICODE_IME, async () => await this.
|
|
290
|
+
await this.runInImeContext(UNICODE_IME, async () => await this.inputText(_utf.imap.encode(text)));
|
|
291
291
|
return true;
|
|
292
292
|
};
|
|
293
293
|
|
|
@@ -295,4 +295,4 @@ var _default = commands;
|
|
|
295
295
|
exports.default = _default;require('source-map-support').install();
|
|
296
296
|
|
|
297
297
|
|
|
298
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwibmFtZXMiOlsiU0VUVElOR1NfSEVMUEVSX0lEIiwiU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIldJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OIiwiQU5JTUFUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJBTklNQVRJT05fU0VUVElOR19BQ1RJT04iLCJMT0NBTEVfU0VUVElOR19SRUNFSVZFUiIsIkxPQ0FMRV9TRVRUSU5HX0FDVElPTiIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJMT0NBVElPTl9SRUNFSVZFUiIsIkxPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04iLCJDTElQQk9BUkRfUkVDRUlWRVIiLCJDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTiIsIk5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiIsIlNNU19MSVNUX1JFQ0VJVkVSIiwiU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiIsIkFQUElVTV9JTUUiLCJVTklDT0RFX0lNRSIsIkRFRkFVTFRfU0FURUxMSVRFU19DT1VOVCIsIkRFRkFVTFRfQUxUSVRVREUiLCJjb21tYW5kcyIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJvcHRzIiwicHJvY2Vzc0V4aXN0cyIsImxvZyIsImRlYnVnIiwidGltZW91dCIsInN0YXJ0QXBwIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInN0b3BBcHAiLCJ3YWl0Rm9yTGF1bmNoIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVyciIsIkVycm9yIiwic2V0V2lmaVN0YXRlIiwib24iLCJpc0VtdWxhdG9yIiwic2hlbGwiLCJwcml2aWxlZ2VkIiwiZ2V0QXBpTGV2ZWwiLCJzZXREYXRhU3RhdGUiLCJzZXRBbmltYXRpb25TdGF0ZSIsInNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJzY3JpcHQiLCJwYXJhbXMiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwicHVzaCIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJmb3JtYXRMb2NhdGlvblZhbHVlIiwidmFsdWVOYW1lIiwiaXNSZXF1aXJlZCIsInV0aWwiLCJoYXNWYWx1ZSIsImZsb2F0VmFsdWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJfIiwiY2VpbCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiYWx0aXR1ZGUiLCJzcGVlZCIsImFyZ3MiLCJpc05pbCIsInNhdGVsbGl0ZXMiLCJwYXJzZUludCIsIk51bWJlciIsImxlbmd0aCIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwiYWRiRXhlYyIsIm1hcCIsImFyZyIsInJlcGxhY2UiLCJnZXRHZW9Mb2NhdGlvbiIsIm91dHB1dCIsIm1lc3NhZ2UiLCJtYXRjaCIsImV4ZWMiLCJKU09OIiwic3RyaW5naWZ5IiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInJ1bkluSW1lQ29udGV4dCIsImdldENsaXBib2FyZCIsInJldHJpZXZlQ2xpcGJvYXJkIiwidHJpbSIsImdldE5vdGlmaWNhdGlvbnMiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW1hcCIsImVuY29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxrQkFBa0IsR0FBRyxvQkFBM0I7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxXQUF0QztBQUNBLE1BQU1DLGdDQUFnQyxHQUFJLEdBQUVGLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNRyw4QkFBOEIsR0FBSSxHQUFFSCxrQkFBbUIsT0FBN0Q7QUFDQSxNQUFNSSxnQ0FBZ0Ms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Q0FBNEJDLElBQTVCLEVBQWtDO0FBQ3ZELE1BQUlqQyxnQkFBRU8sS0FBRixDQUFRMEIsSUFBUixDQUFKLEVBQW1CO0FBQ2pCLFdBQU8sS0FBUDtBQUNEOztBQUVEQSxFQUFBQSxJQUFJLEdBQUksR0FBRUEsSUFBSyxFQUFmOztBQUNBekUsa0JBQUlDLEtBQUosQ0FBVyxVQUFTa0Msb0JBQUt1QyxTQUFMLENBQWUsV0FBZixFQUE0QkQsSUFBSSxDQUFDdEIsTUFBakMsRUFBeUMsSUFBekMsQ0FBK0MsRUFBbkU7O0FBQ0EsTUFBSSxDQUFDc0IsSUFBTCxFQUFXO0FBQ1QsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsUUFBTSxLQUFLUixlQUFMLENBQXFCeEUsV0FBckIsRUFDSixZQUFZLE1BQU0sS0FBS3dCLEtBQUwsQ0FBVyxDQUFDLE9BQUQsRUFBVSxNQUFWLEVBQWtCLDZCQUFlMEQsVUFBS0MsTUFBTCxDQUFZSCxJQUFaLENBQWYsQ0FBbEIsQ0FBWCxDQURkLENBQU47QUFFQSxTQUFPLElBQVA7QUFDRCxDQWJEOztlQWVlN0UsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IHBhcnNlSnNvbkRhdGEsIGVzY2FwZVNoZWxsQXJnIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5cbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkgPSAnLlNldHRpbmdzJztcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLldpRmlDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ud2lmaWA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5EYXRhQ29ubmVjdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmRhdGFfY29ubmVjdGlvbmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5BbmltYXRpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5hbmltYXRpb25gO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYWxlU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IExPQ0FMRV9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYWxlYDtcbmNvbnN0IExPQ0FUSU9OX1NFUlZJQ0UgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Mb2NhdGlvblNlcnZpY2VgO1xuY29uc3QgTE9DQVRJT05fUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYXRpb25JbmZvUmVjZWl2ZXJgO1xuY29uc3QgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYXRpb25gO1xuY29uc3QgQ0xJUEJPQVJEX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkNsaXBib2FyZFJlY2VpdmVyYDtcbmNvbnN0IENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5jbGlwYm9hcmQuZ2V0YDtcbmNvbnN0IE5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubm90aWZpY2F0aW9uc2A7XG5jb25zdCBTTVNfTElTVF9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5TbXNSZWFkZXJgO1xuY29uc3QgU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uc21zLnJlYWRgO1xuY29uc3QgQVBQSVVNX0lNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkFwcGl1bUlNRWA7XG5jb25zdCBVTklDT0RFX0lNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLlVuaWNvZGVJTUVgO1xuY29uc3QgREVGQVVMVF9TQVRFTExJVEVTX0NPVU5UID0gMTI7XG5jb25zdCBERUZBVUxUX0FMVElUVURFID0gMC4wO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzUwMDBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIHRvIHdhaXQgdW50aWwgdGhlIGFwcCBoYXMgc3RhcnRlZFxuICovXG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgYXBwbGljYXRpb24gaXMgcnVubmluZ1xuICogYW5kIHN0YXJ0cyBpdCBpZiBuZWNlc3NhcnlcbiAqXG4gKiBAcGFyYW0ge1NldHRpbmdzQXBwU3RhcnR1cE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBBcHBpdW0gU2V0dGluZ3MgaGFzIGZhaWxlZCB0byBzdGFydFxuICogQHJldHVybnMge0FEQn0gc2VsZiBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAqL1xuY29tbWFuZHMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3RhcnRpbmcgQXBwaXVtIFNldHRpbmdzIGFwcCcpO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLnN0YXJ0QXBwKHtcbiAgICBwa2c6IFNFVFRJTkdTX0hFTFBFUl9JRCxcbiAgICBhY3Rpdml0eTogU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFksXG4gICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgIHdhaXRGb3JMYXVuY2g6IGZhbHNlLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfSUQpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICBpbnRlcnZhbE1zOiAzMDAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXBwaXVtIFNldHRpbmdzIGFwcCBpcyBub3QgcnVubmluZyBhZnRlciAke3RpbWVvdXR9bXNgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIFdpRmkgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldFdpZmlTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpZmlTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICd3aWZpJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIERhdGEgdHJhbnNmZXIgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldERhdGFTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldERhdGFTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICdkYXRhJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIGFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKiBBbmltYXRpb24gb24gdGhlIGRldmljZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBmb2xsb3dpbmcgZ2xvYmFsIHByb3BlcnRpZXM6XG4gKiBbQU5JTUFUT1JfRFVSQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI0FOSU1BVE9SX0RVUkFUSU9OX1NDQUxFfSxcbiAqIFtUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjVFJBTlNJVElPTl9BTklNQVRJT05fU0NBTEV9LFxuICogW1dJTkRPV19BTklNQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI1dJTkRPV19BTklNQVRJT05fU0NBTEV9LlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbGwgdGhpcyBwcm9wZXJ0aWVzIHRvIDAuMCB0byBkaXNhYmxlICgxLjAgdG8gZW5hYmxlKSBhbmltYXRpb24uXG4gKlxuICogVHVybmluZyBvZmYgYW5pbWF0aW9uIG1pZ2h0IGJlIHVzZWZ1bCB0byBpbXByb3ZlIHN0YWJpbGl0eVxuICogYW5kIHJlZHVjZSB0ZXN0cyBleGVjdXRpb24gdGltZS5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9uIC0gVHJ1ZSB0byBlbmFibGUgYW5kIGZhbHNlIHRvIGRpc2FibGUgaXQuXG4gKi9cbmNvbW1hbmRzLnNldEFuaW1hdGlvblN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0QW5pbWF0aW9uU3RhdGUgKG9uKSB7XG4gIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIEFOSU1BVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdzZXRzdGF0dXMnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXG4gIF0pO1xufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGxvY2FsZSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuIERvbid0IG5lZWQgdG8gcmVib290IHRoZSBkZXZpY2UgYWZ0ZXIgY2hhbmdpbmcgdGhlIGxvY2FsZS5cbiAqIFRoaXMgbWV0aG9kIHNldHMgYW4gYXJiaXRyYXJ5IGxvY2FsZSBmb2xsb3dpbmc6XG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCNMb2NhbGUoamF2YS5sYW5nLlN0cmluZywlMjBqYXZhLmxhbmcuU3RyaW5nKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBlLmcuIGVuLCBqYVxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBlLmcuIFVTLCBKUFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIGUuZy4gSGFucyBpbiBgemgtSGFucy1DTmBcbiAqL1xuY29tbWFuZHMuc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAgKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLWEnLCBMT0NBTEVfU0VUVElOR19BQ1RJT04sXG4gICAgJy1uJywgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIsXG4gICAgJy0tZXMnLCAnbGFuZycsIGxhbmd1YWdlLnRvTG93ZXJDYXNlKCksXG4gICAgJy0tZXMnLCAnY291bnRyeScsIGNvdW50cnkudG9VcHBlckNhc2UoKVxuICBdO1xuXG4gIGlmIChzY3JpcHQpIHtcbiAgICBwYXJhbXMucHVzaCgnLS1lcycsICdzY3JpcHQnLCBzY3JpcHQpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zaGVsbChwYXJhbXMpO1xufTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvY2F0aW9uXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IGxvbmdpdHVkZSAtIFZhbGlkIGxvbmdpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbGF0aXR1ZGUgLSBWYWxpZCBsYXRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IGFsdGl0dWRlIC0gVmFsaWQgYWx0aXR1ZGUgdmFsdWUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzYXRlbGxpdGVzIFsxMl0gLSBOdW1iZXIgb2Ygc2F0ZWxsaXRlcyBiZWluZyB0cmFja2VkICgxLTEyKS5cbiAqIFRoaXMgdmFsdWUgaXMgaWdub3JlZCBvbiByZWFsIGRldmljZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzcGVlZCAtIFZhbGlkIHNwZWVkIHZhbHVlLlxuICogU2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLjAgbWV0ZXJzL3NlY29uZCBmb3IgcmVhbCBkZXZpY2VzIG9yIDAuMCBrbm90c1xuICogZm9yIGVtdWxhdG9ycy5cbiAqL1xuXG4vKipcbiAqIEVtdWxhdGUgZ2VvbG9jYXRpb24gY29vcmRpbmF0ZXMgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7TG9jYXRpb259IGxvY2F0aW9uIC0gTG9jYXRpb24gb2JqZWN0LiBUaGUgYGFsdGl0dWRlYCB2YWx1ZSBpcyBpZ25vcmVkXG4gKiB3aGlsZSBtb2NraW5nIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0R2VvTG9jYXRpb24gKGxvY2F0aW9uLCBpc0VtdWxhdG9yID0gZmFsc2UpIHtcbiAgY29uc3QgZm9ybWF0TG9jYXRpb25WYWx1ZSA9ICh2YWx1ZU5hbWUsIGlzUmVxdWlyZWQgPSB0cnVlKSA9PiB7XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKGxvY2F0aW9uW3ZhbHVlTmFtZV0pKSB7XG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmxvYXRWYWx1ZSA9IHBhcnNlRmxvYXQobG9jYXRpb25bdmFsdWVOYW1lXSk7XG4gICAgaWYgKCFpc05hTihmbG9hdFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGAke18uY2VpbChmbG9hdFZhbHVlLCA1KX1gO1xuICAgIH1cbiAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlTmFtZX0gaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBmbG9hdCBudW1iZXIuIGAgK1xuICAgICAgICBgJyR7bG9jYXRpb25bdmFsdWVOYW1lXX0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IGxvbmdpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xvbmdpdHVkZScpO1xuICBjb25zdCBsYXRpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xhdGl0dWRlJyk7XG4gIGNvbnN0IGFsdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnYWx0aXR1ZGUnLCBmYWxzZSk7XG4gIGNvbnN0IHNwZWVkID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnc3BlZWQnLCBmYWxzZSk7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgY29uc3QgYXJncyA9IFtsb25naXR1ZGUsIGxhdGl0dWRlXTtcbiAgICBpZiAoIV8uaXNOaWwoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBjb25zdCBzYXRlbGxpdGVzID0gcGFyc2VJbnQobG9jYXRpb24uc2F0ZWxsaXRlcywgMTApO1xuICAgIGlmICghTnVtYmVyLmlzTmFOKHNhdGVsbGl0ZXMpICYmIHNhdGVsbGl0ZXMgPiAwICYmIHNhdGVsbGl0ZXMgPD0gMTIpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfQUxUSVRVREV9YCk7XG4gICAgICB9XG4gICAgICBhcmdzLnB1c2goYCR7c2F0ZWxsaXRlc31gKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzTmlsKHNwZWVkKSkge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfU0FURUxMSVRFU19DT1VOVH1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChzcGVlZCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVzZXRUZWxuZXRBdXRoVG9rZW4oKTtcbiAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydlbXUnLCAnZ2VvJywgJ2ZpeCcsIC4uLmFyZ3NdKTtcbiAgICAvLyBBIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTIwNjE4MFxuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uKGFyZ3MubWFwKChhcmcpID0+IGFyZy5yZXBsYWNlKCcuJywgJywnKSkpXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdhbScsICdzdGFydHNlcnZpY2UnLFxuICAgICAgJy1lJywgJ2xvbmdpdHVkZScsIGxvbmdpdHVkZSxcbiAgICAgICctZScsICdsYXRpdHVkZScsIGxhdGl0dWRlLFxuICAgIF07XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgJ2FsdGl0dWRlJywgYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShzcGVlZCkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnc3BlZWQnLCBzcGVlZCk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChMT0NBVElPTl9TRVJWSUNFKTtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBnZW8gbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybnMge0xvY2F0aW9ufSBUaGUgY3VycmVudCBsb2NhdGlvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGNhbm5vdCBiZSByZXRyaWV2ZWRcbiAqL1xuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgZ2VvIGNvb3JkaW5hdGVzIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IC9kYXRhPVwiKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcIi8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBsb2NhdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0ge1xuICAgIGxhdGl0dWRlOiBtYXRjaFsxXSxcbiAgICBsb25naXR1ZGU6IG1hdGNoWzJdLFxuICAgIGFsdGl0dWRlOiBtYXRjaFszXSxcbiAgfTtcbiAgbG9nLmRlYnVnKGBHb3QgZ2VvIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KGxvY2F0aW9uKX1gKTtcbiAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgZ2l2ZW4gZWRpdG9yIGFjdGlvbiBvbiB0aGUgZm9jdXNlZCBpbnB1dCBmaWVsZC5cbiAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKiBObyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcGVyZm9ybWluZyB0aGUgYWN0aW9uLlxuICogWW91IG11c3QgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQgaWYgc29tZXRoaW5nIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGFjdGlvbiAtIEVpdGhlciBhY3Rpb24gY29kZSBvciBuYW1lLiBUaGUgZm9sbG93aW5nIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhcmUgc3VwcG9ydGVkOiBgbm9ybWFsLCB1bnNwZWNpZmllZCwgbm9uZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28sIHNlYXJjaCwgc2VuZCwgbmV4dCwgZG9uZSwgcHJldmlvdXNgXG4gKi9cbmNvbW1hbmRzLnBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtRWRpdG9yQWN0aW9uIChhY3Rpb24pIHtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGVkaXRvciBhY3Rpb246ICR7YWN0aW9ufWApO1xuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLFxuICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoWydpbnB1dCcsICd0ZXh0JywgYC8ke2FjdGlvbn0vYF0pKTtcbn07XG5cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZGV2aWNlJ3MgY2xpcGJvYXJkLlxuICogVGhlIG1ldGhvZCB3b3JrcyBmb3IgQW5kcm9pZCBiZWxvdyBhbmQgYWJvdmUgMjkuXG4gKiBJdCB0ZW1vcmFyaWx5IGVuZm9yY2VzIHRoZSBJTUUgc2V0dGluZyBpbiBvcmRlciB0byB3b3JrYXJvdW5kXG4gKiBzZWN1cml0eSBsaW1pdGF0aW9ucyBpZiBuZWVkZWQuXG4gKiBUaGlzIG1ldGhvZCBvbmx5IHdvcmtzIGlmIEFwcGl1bSBTZXR0aW5ncyB2LiAyLjE1KyBpcyBpbnN0YWxsZWRcbiAqIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhY3R1YWwgY29udGVudCBvZiB0aGUgbWFpbiBjbGlwYm9hcmQgYXNcbiAqIGJhc2U2NC1lbmNvZGVkIHN0cmluZyBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGNsaXBib2FyZCBpcyBlbXB0eVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIHByb2JsZW0gd2hpbGUgZ2V0dGluZyB0aGVcbiAqIGNsaXBib2FyZCBjb250YW50XG4gKi9cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyB0aGUgY2xpcGJvYXJkIGNvbnRlbnQnKTtcbiAgY29uc3QgcmV0cmlldmVDbGlwYm9hcmQgPSBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLW4nLCBDTElQQk9BUkRfUkVDRUlWRVIsXG4gICAgJy1hJywgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04sXG4gIF0pO1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IChhd2FpdCB0aGlzLmdldEFwaUxldmVsKCkgPj0gMjkpXG4gICAgICA/IChhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLCByZXRyaWV2ZUNsaXBib2FyZCkpXG4gICAgICA6IChhd2FpdCByZXRyaWV2ZUNsaXBib2FyZCgpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgY2xpcGJvYXJkIGNvbnRlbnQgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gL2RhdGE9XCIoW15cIl0qKVwiLy5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgYWN0dWFsIGNsaWJvYXJkIGNvbnRlbnQgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIHJldHVybiBfLnRyaW0obWF0Y2hbMV0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgQW5kcm9pZCBub3RpZmljYXRpb25zIHZpYSBBcHBpdW0gU2V0dGluZ3MgaGVscGVyLlxuICogQXBwaXVtIFNldHRpbmdzIGFwcCBpdHNlbGYgbXVzdCBiZSAqbWFudWFsbHkqIGdyYW50ZWQgdG8gYWNjZXNzIG5vdGlmaWNhdGlvbnNcbiAqIHVuZGVyIGRldmljZSBTZXR0aW5ncyBpbiBvcmRlciB0byBtYWtlIHRoaXMgZmVhdHVyZSB3b3JraW5nLlxuICogQXBwaXVtIFNldHRpbmdzIGhlbHBlciBrZWVwcyBhbGwgdGhlIGFjdGl2ZSBub3RpZmljYXRpb25zIHBsdXNcbiAqIG5vdGlmaWNhdGlvbnMgdGhhdCBhcHBlYXJlZCB3aGlsZSBpdCB3YXMgcnVubmluZyBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLFxuICogYnV0IG5vIG1vcmUgdGhhbiAxMDAgaXRlbXMgYWx0b2dldGhlci4gTmV3bHkgYXBwZWFyZWQgbm90aWZpY2F0aW9uc1xuICogYXJlIGFsd2F5cyBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgbm90aWZpY2F0aW9ucyBhcnJheS5cbiAqIFRoZSBgaXNSZW1vdmVkYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAgZm9yIG5vdGlmaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vU3RhdHVzQmFyTm90aWZpY2F0aW9uXG4gKiBhbmQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5odG1sXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhdmFpbGFibGUgbm90aWZpY2F0aW9uIHByb3BlcnRpZXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXhhbXBsZSBvdXRwdXQgaXM6XG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwic3RhdHVzQmFyTm90aWZpY2F0aW9uc1wiOltcbiAqICAgICB7XG4gKiAgICAgICBcImlzR3JvdXBcIjpmYWxzZSxcbiAqICAgICAgIFwicGFja2FnZU5hbWVcIjpcImlvLmFwcGl1bS5zZXR0aW5nc1wiLFxuICogICAgICAgXCJpc0NsZWFyYWJsZVwiOmZhbHNlLFxuICogICAgICAgXCJpc09uZ29pbmdcIjp0cnVlLFxuICogICAgICAgXCJpZFwiOjEsXG4gKiAgICAgICBcInRhZ1wiOm51bGwsXG4gKiAgICAgICBcIm5vdGlmaWNhdGlvblwiOntcbiAqICAgICAgICAgXCJ0aXRsZVwiOm51bGwsXG4gKiAgICAgICAgIFwiYmlnVGl0bGVcIjpcIkFwcGl1bSBTZXR0aW5nc1wiLFxuICogICAgICAgICBcInRleHRcIjpudWxsLFxuICogICAgICAgICBcImJpZ1RleHRcIjpcIktlZXAgdGhpcyBzZXJ2aWNlIHJ1bm5pbmcsIHNvIEFwcGl1bSBmb3IgQW5kcm9pZCBjYW4gcHJvcGVybHkgaW50ZXJhY3Qgd2l0aCBzZXZlcmFsIHN5c3RlbSBBUElzXCIsXG4gKiAgICAgICAgIFwidGlja2VyVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwic3ViVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwiaW5mb1RleHRcIjpudWxsLFxuICogICAgICAgICBcInRlbXBsYXRlXCI6XCJhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24kQmlnVGV4dFN0eWxlXCJcbiAqICAgICAgIH0sXG4gKiAgICAgICBcInVzZXJIYW5kbGVcIjowLFxuICogICAgICAgXCJncm91cEtleVwiOlwiMHxpby5hcHBpdW0uc2V0dGluZ3N8MXxudWxsfDEwMTMzXCIsXG4gKiAgICAgICBcIm92ZXJyaWRlR3JvdXBLZXlcIjpudWxsLFxuICogICAgICAgXCJwb3N0VGltZVwiOjE1NzY4NTM1MTg4NTAsXG4gKiAgICAgICBcImtleVwiOlwiMHxpby5hcHBpdW0uc2V0dGluZ3N8MXxudWxsfDEwMTMzXCIsXG4gKiAgICAgICBcImlzUmVtb3ZlZFwiOmZhbHNlXG4gKiAgICAgfVxuICogICBdXG4gKiB9XG4gKiBgYGBcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgbm90aWZpY2F0aW9ucyBsaXN0XG4gKi9cbmNvbW1hbmRzLmdldE5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBnZXROb3RpZmljYXRpb25zICgpIHtcbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIG5vdGlmaWNhdGlvbnMnKTtcbiAgLy8gU29tZWhvdyBwcm92aWRpbmcgdGhlIGAtbmAgYXJnIHRvIHRoZSBgYW1gIHVuZGVybmVhdGhcbiAgLy8gcmVuZGVycyB0aGUgYnJvYWRjYXN0IHRvIGZhaWwgaW5zdGVhZCBvZiBzdGFydGluZyB0aGVcbiAgLy8gQXBwaXVtIFNldHRpbmdzIGFwcC4gVGhpcyBvbmx5IGhhcHBlbnMgdG8gdGhlIG5vdGlmaWNhdGlvbnNcbiAgLy8gcmVjZWl2ZXJcbiAgYXdhaXQgdGhpcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwKCk7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIE5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBhbmQgaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSnNvbkRhdGEob3V0cHV0LCAnbm90aWZpY2F0aW9ucycpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTbXNMaXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heCBbMTAwXSAtIFRoZSBtYXhpbXVtIGNvdW50IG9mIHJlY2VudCBtZXNzYWdlc1xuICogdG8gcmV0cmlldmVcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiB0aGUgbW9zdCByZWNlbnQgU01TXG4gKiBwcm9wZXJ0aWVzIGxpc3QgdmlhIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIuXG4gKiBNZXNzYWdlcyBhcmUgc29ydGVkIGJ5IGRhdGUgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAcGFyYW0ge1Ntc0xpc3RPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXhhbXBsZSBvdXRwdXQgaXM6XG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwiaXRlbXNcIjpbXG4gKiAgICAge1xuICogICAgICAgXCJpZFwiOlwiMlwiLFxuICogICAgICAgXCJhZGRyZXNzXCI6XCIrMTIzNDU2Nzg5XCIsXG4gKiAgICAgICBcInBlcnNvblwiOm51bGwsXG4gKiAgICAgICBcImRhdGVcIjpcIjE1ODE5MzY0MjIyMDNcIixcbiAqICAgICAgIFwicmVhZFwiOlwiMFwiLFxuICogICAgICAgXCJzdGF0dXNcIjpcIi0xXCIsXG4gKiAgICAgICBcInR5cGVcIjpcIjFcIixcbiAqICAgICAgIFwic3ViamVjdFwiOm51bGwsXG4gKiAgICAgICBcImJvZHlcIjpcIlxcXCJ0ZXh0IG1lc3NhZ2UyXFxcIlwiLFxuICogICAgICAgXCJzZXJ2aWNlQ2VudGVyXCI6bnVsbFxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgXCJpZFwiOlwiMVwiLFxuICogICAgICAgXCJhZGRyZXNzXCI6XCIrMTIzNDU2Nzg5XCIsXG4gKiAgICAgICBcInBlcnNvblwiOm51bGwsXG4gKiAgICAgICBcImRhdGVcIjpcIjE1ODE5MzYzODI3NDBcIixcbiAqICAgICAgIFwicmVhZFwiOlwiMFwiLFxuICogICAgICAgXCJzdGF0dXNcIjpcIi0xXCIsXG4gKiAgICAgICBcInR5cGVcIjpcIjFcIixcbiAqICAgICAgIFwic3ViamVjdFwiOm51bGwsXG4gKiAgICAgICBcImJvZHlcIjpcIlxcXCJ0ZXh0IG1lc3NhZ2VcXFwiXCIsXG4gKiAgICAgICBcInNlcnZpY2VDZW50ZXJcIjpudWxsXG4gKiAgICAgfVxuICogICBdLFxuICogICBcInRvdGFsXCI6MlxuICogfVxuICogYGBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIFNNUyBsaXN0XG4gKi9cbmNvbW1hbmRzLmdldFNtc0xpc3QgPSBhc3luYyBmdW5jdGlvbiBnZXRTbXNMaXN0IChvcHRzID0ge30pIHtcbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIHRoZSByZWNlbnQgU01TIG1lc3NhZ2VzJyk7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgU01TX0xJU1RfUkVDRUlWRVIsXG4gICAgJy1hJywgU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTixcbiAgXTtcbiAgaWYgKG9wdHMubWF4KSB7XG4gICAgYXJncy5wdXNoKCctLWVzJywgJ21heCcsIG9wdHMubWF4KTtcbiAgfVxuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIFNNUyBsaXN0IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIGFuZCBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VKc29uRGF0YShvdXRwdXQsICdTTVMgbGlzdCcpO1xufTtcblxuLyoqXG4gKiBUeXBlcyB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmb2N1cyBpcyBhbHJlYWR5IHB1dFxuICogdG8gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHN0cmluZyB0byB0eXBlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCB0ZXh0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkYlxuICovXG5jb21tYW5kcy50eXBlVW5pY29kZSA9IGFzeW5jIGZ1bmN0aW9uIHR5cGVVbmljb2RlICh0ZXh0KSB7XG4gIGlmIChfLmlzTmlsKHRleHQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGV4dCA9IGAke3RleHR9YDtcbiAgbG9nLmRlYnVnKGBUeXBpbmcgJHt1dGlsLnBsdXJhbGl6ZSgnY2hhcmFjdGVyJywgdGV4dC5sZW5ndGgsIHRydWUpfWApO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoVU5JQ09ERV9JTUUsXG4gICAgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5zaGVsbChbJ2lucHV0JywgJ3RleHQnLCBlc2NhcGVTaGVsbEFyZyhpbWFwLmVuY29kZSh0ZXh0KSldKSk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
298
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9zZXR0aW5ncy1jbGllbnQtY29tbWFuZHMuanMiXSwibmFtZXMiOlsiU0VUVElOR1NfSEVMUEVSX0lEIiwiU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkiLCJXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiIsIldJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiIsIkRBVEFfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSIiwiREFUQV9DT05ORUNUSU9OX1NFVFRJTkdfQUNUSU9OIiwiQU5JTUFUSU9OX1NFVFRJTkdfUkVDRUlWRVIiLCJBTklNQVRJT05fU0VUVElOR19BQ1RJT04iLCJMT0NBTEVfU0VUVElOR19SRUNFSVZFUiIsIkxPQ0FMRV9TRVRUSU5HX0FDVElPTiIsIkxPQ0FUSU9OX1NFUlZJQ0UiLCJMT0NBVElPTl9SRUNFSVZFUiIsIkxPQ0FUSU9OX1JFVFJJRVZBTF9BQ1RJT04iLCJDTElQQk9BUkRfUkVDRUlWRVIiLCJDTElQQk9BUkRfUkVUUklFVkFMX0FDVElPTiIsIk5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiIsIlNNU19MSVNUX1JFQ0VJVkVSIiwiU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiIsIkFQUElVTV9JTUUiLCJVTklDT0RFX0lNRSIsIkRFRkFVTFRfU0FURUxMSVRFU19DT1VOVCIsIkRFRkFVTFRfQUxUSVRVREUiLCJjb21tYW5kcyIsInJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAiLCJvcHRzIiwicHJvY2Vzc0V4aXN0cyIsImxvZyIsImRlYnVnIiwidGltZW91dCIsInN0YXJ0QXBwIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJjYXRlZ29yeSIsInN0b3BBcHAiLCJ3YWl0Rm9yTGF1bmNoIiwid2FpdE1zIiwiaW50ZXJ2YWxNcyIsImVyciIsIkVycm9yIiwic2V0V2lmaVN0YXRlIiwib24iLCJpc0VtdWxhdG9yIiwic2hlbGwiLCJwcml2aWxlZ2VkIiwiZ2V0QXBpTGV2ZWwiLCJzZXREYXRhU3RhdGUiLCJzZXRBbmltYXRpb25TdGF0ZSIsInNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAiLCJsYW5ndWFnZSIsImNvdW50cnkiLCJzY3JpcHQiLCJwYXJhbXMiLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwicHVzaCIsInNldEdlb0xvY2F0aW9uIiwibG9jYXRpb24iLCJmb3JtYXRMb2NhdGlvblZhbHVlIiwidmFsdWVOYW1lIiwiaXNSZXF1aXJlZCIsInV0aWwiLCJoYXNWYWx1ZSIsImZsb2F0VmFsdWUiLCJwYXJzZUZsb2F0IiwiaXNOYU4iLCJfIiwiY2VpbCIsImxvbmdpdHVkZSIsImxhdGl0dWRlIiwiYWx0aXR1ZGUiLCJzcGVlZCIsImFyZ3MiLCJpc05pbCIsInNhdGVsbGl0ZXMiLCJwYXJzZUludCIsIk51bWJlciIsImxlbmd0aCIsInJlc2V0VGVsbmV0QXV0aFRva2VuIiwiYWRiRXhlYyIsIm1hcCIsImFyZyIsInJlcGxhY2UiLCJnZXRHZW9Mb2NhdGlvbiIsIm91dHB1dCIsIm1lc3NhZ2UiLCJtYXRjaCIsImV4ZWMiLCJKU09OIiwic3RyaW5naWZ5IiwicGVyZm9ybUVkaXRvckFjdGlvbiIsInJ1bkluSW1lQ29udGV4dCIsImdldENsaXBib2FyZCIsInJldHJpZXZlQ2xpcGJvYXJkIiwidHJpbSIsImdldE5vdGlmaWNhdGlvbnMiLCJnZXRTbXNMaXN0IiwibWF4IiwidHlwZVVuaWNvZGUiLCJ0ZXh0IiwicGx1cmFsaXplIiwiaW5wdXRUZXh0IiwiaW1hcCIsImVuY29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxrQkFBa0IsR0FBRyxvQkFBM0I7QUFDQSxNQUFNQyw2QkFBNkIsR0FBRyxXQUF0QztBQUNBLE1BQU1DLGdDQUFnQyxHQUFJLEdBQUVGLGtCQUFtQiwyQ0FBL0Q7QUFDQSxNQUFNRyw4QkFBOEIsR0FBSSxHQUFFSCxrQkFBbUIsT0FBN0Q7QUFDQSxN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LGVBQWVBLFdBQWYsQ0FBNEJDLElBQTVCLEVBQWtDO0FBQ3ZELE1BQUlqQyxnQkFBRU8sS0FBRixDQUFRMEIsSUFBUixDQUFKLEVBQW1CO0FBQ2pCLFdBQU8sS0FBUDtBQUNEOztBQUVEQSxFQUFBQSxJQUFJLEdBQUksR0FBRUEsSUFBSyxFQUFmOztBQUNBekUsa0JBQUlDLEtBQUosQ0FBVyxVQUFTa0Msb0JBQUt1QyxTQUFMLENBQWUsV0FBZixFQUE0QkQsSUFBSSxDQUFDdEIsTUFBakMsRUFBeUMsSUFBekMsQ0FBK0MsRUFBbkU7O0FBQ0EsTUFBSSxDQUFDc0IsSUFBTCxFQUFXO0FBQ1QsV0FBTyxLQUFQO0FBQ0Q7O0FBQ0QsUUFBTSxLQUFLUixlQUFMLENBQ0p4RSxXQURJLEVBQ1MsWUFBWSxNQUFNLEtBQUtrRixTQUFMLENBQWVDLFVBQUtDLE1BQUwsQ0FBWUosSUFBWixDQUFmLENBRDNCLENBQU47QUFHQSxTQUFPLElBQVA7QUFDRCxDQWREOztlQWdCZTdFLFEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUpzb25EYXRhIH0gZnJvbSAnLi4vaGVscGVycy5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gJ2FwcGl1bS1zdXBwb3J0JztcbmltcG9ydCB7IHdhaXRGb3JDb25kaXRpb24gfSBmcm9tICdhc3luY2JveCc7XG5pbXBvcnQgeyBpbWFwIH0gZnJvbSAndXRmNyc7XG5cbmNvbnN0IFNFVFRJTkdTX0hFTFBFUl9JRCA9ICdpby5hcHBpdW0uc2V0dGluZ3MnO1xuY29uc3QgU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFkgPSAnLlNldHRpbmdzJztcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLldpRmlDb25uZWN0aW9uU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IFdJRklfQ09OTkVDVElPTl9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ud2lmaWA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5EYXRhQ29ubmVjdGlvblNldHRpbmdSZWNlaXZlcmA7XG5jb25zdCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04gPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9LmRhdGFfY29ubmVjdGlvbmA7XG5jb25zdCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5BbmltYXRpb25TZXR0aW5nUmVjZWl2ZXJgO1xuY29uc3QgQU5JTUFUSU9OX1NFVFRJTkdfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5hbmltYXRpb25gO1xuY29uc3QgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYWxlU2V0dGluZ1JlY2VpdmVyYDtcbmNvbnN0IExPQ0FMRV9TRVRUSU5HX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYWxlYDtcbmNvbnN0IExPQ0FUSU9OX1NFUlZJQ0UgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5Mb2NhdGlvblNlcnZpY2VgO1xuY29uc3QgTE9DQVRJT05fUkVDRUlWRVIgPSBgJHtTRVRUSU5HU19IRUxQRVJfSUR9Ly5yZWNlaXZlcnMuTG9jYXRpb25JbmZvUmVjZWl2ZXJgO1xuY29uc3QgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubG9jYXRpb25gO1xuY29uc3QgQ0xJUEJPQVJEX1JFQ0VJVkVSID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS8ucmVjZWl2ZXJzLkNsaXBib2FyZFJlY2VpdmVyYDtcbmNvbnN0IENMSVBCT0FSRF9SRVRSSUVWQUxfQUNUSU9OID0gYCR7U0VUVElOR1NfSEVMUEVSX0lEfS5jbGlwYm9hcmQuZ2V0YDtcbmNvbnN0IE5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0ubm90aWZpY2F0aW9uc2A7XG5jb25zdCBTTVNfTElTVF9SRUNFSVZFUiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLnJlY2VpdmVycy5TbXNSZWFkZXJgO1xuY29uc3QgU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTiA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0uc21zLnJlYWRgO1xuY29uc3QgQVBQSVVNX0lNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLkFwcGl1bUlNRWA7XG5jb25zdCBVTklDT0RFX0lNRSA9IGAke1NFVFRJTkdTX0hFTFBFUl9JRH0vLlVuaWNvZGVJTUVgO1xuY29uc3QgREVGQVVMVF9TQVRFTExJVEVTX0NPVU5UID0gMTI7XG5jb25zdCBERUZBVUxUX0FMVElUVURFID0gMC4wO1xuXG5cbmNvbnN0IGNvbW1hbmRzID0ge307XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU2V0dGluZ3NBcHBTdGFydHVwT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgWzUwMDBdIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqIHRvIHdhaXQgdW50aWwgdGhlIGFwcCBoYXMgc3RhcnRlZFxuICovXG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgYXBwbGljYXRpb24gaXMgcnVubmluZ1xuICogYW5kIHN0YXJ0cyBpdCBpZiBuZWNlc3NhcnlcbiAqXG4gKiBAcGFyYW0ge1NldHRpbmdzQXBwU3RhcnR1cE9wdGlvbnN9IG9wdHNcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBBcHBpdW0gU2V0dGluZ3MgaGFzIGZhaWxlZCB0byBzdGFydFxuICogQHJldHVybnMge0FEQn0gc2VsZiBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAqL1xuY29tbWFuZHMucmVxdWlyZVJ1bm5pbmdTZXR0aW5nc0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHJlcXVpcmVSdW5uaW5nU2V0dGluZ3NBcHAgKG9wdHMgPSB7fSkge1xuICBpZiAoYXdhaXQgdGhpcy5wcm9jZXNzRXhpc3RzKFNFVFRJTkdTX0hFTFBFUl9JRCkpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvZy5kZWJ1ZygnU3RhcnRpbmcgQXBwaXVtIFNldHRpbmdzIGFwcCcpO1xuICBjb25zdCB7XG4gICAgdGltZW91dCA9IDUwMDAsXG4gIH0gPSBvcHRzO1xuICBhd2FpdCB0aGlzLnN0YXJ0QXBwKHtcbiAgICBwa2c6IFNFVFRJTkdTX0hFTFBFUl9JRCxcbiAgICBhY3Rpdml0eTogU0VUVElOR1NfSEVMUEVSX01BSU5fQUNUSVZJVFksXG4gICAgYWN0aW9uOiAnYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4nLFxuICAgIGNhdGVnb3J5OiAnYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVInLFxuICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgIHdhaXRGb3JMYXVuY2g6IGZhbHNlLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ29uZGl0aW9uKGFzeW5jICgpID0+IGF3YWl0IHRoaXMucHJvY2Vzc0V4aXN0cyhTRVRUSU5HU19IRUxQRVJfSUQpLCB7XG4gICAgICB3YWl0TXM6IHRpbWVvdXQsXG4gICAgICBpbnRlcnZhbE1zOiAzMDAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXBwaXVtIFNldHRpbmdzIGFwcCBpcyBub3QgcnVubmluZyBhZnRlciAke3RpbWVvdXR9bXNgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIFdpRmkgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldFdpZmlTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldFdpZmlTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICd3aWZpJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBXSUZJX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIERhdGEgdHJhbnNmZXIgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb24gLSBUcnVlIHRvIGVuYWJsZSBhbmQgZmFsc2UgdG8gZGlzYWJsZSBpdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldERhdGFTdGF0ZSA9IGFzeW5jIGZ1bmN0aW9uIHNldERhdGFTdGF0ZSAob24sIGlzRW11bGF0b3IgPSBmYWxzZSkge1xuICBpZiAoaXNFbXVsYXRvcikge1xuICAgIC8vIFRoZSBzdmMgY29tbWFuZCBkb2VzIG5vdCByZXF1aXJlIHRvIGJlIHJvb3Qgc2luY2UgQVBJIDI2XG4gICAgYXdhaXQgdGhpcy5zaGVsbChbJ3N2YycsICdkYXRhJywgb24gPyAnZW5hYmxlJyA6ICdkaXNhYmxlJ10sIHtcbiAgICAgIHByaXZpbGVnZWQ6IGF3YWl0IHRoaXMuZ2V0QXBpTGV2ZWwoKSA8IDI2LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAnLWEnLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19BQ1RJT04sXG4gICAgICAnLW4nLCBEQVRBX0NPTk5FQ1RJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAgICctLWVzJywgJ3NldHN0YXR1cycsIG9uID8gJ2VuYWJsZScgOiAnZGlzYWJsZSdcbiAgICBdKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIHN0YXRlIG9mIGFuaW1hdGlvbiBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKiBBbmltYXRpb24gb24gdGhlIGRldmljZSBpcyBjb250cm9sbGVkIGJ5IHRoZSBmb2xsb3dpbmcgZ2xvYmFsIHByb3BlcnRpZXM6XG4gKiBbQU5JTUFUT1JfRFVSQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI0FOSU1BVE9SX0RVUkFUSU9OX1NDQUxFfSxcbiAqIFtUUkFOU0lUSU9OX0FOSU1BVElPTl9TQ0FMRV17QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuR2xvYmFsLmh0bWwjVFJBTlNJVElPTl9BTklNQVRJT05fU0NBTEV9LFxuICogW1dJTkRPV19BTklNQVRJT05fU0NBTEVde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLkdsb2JhbC5odG1sI1dJTkRPV19BTklNQVRJT05fU0NBTEV9LlxuICogVGhpcyBtZXRob2Qgc2V0cyBhbGwgdGhpcyBwcm9wZXJ0aWVzIHRvIDAuMCB0byBkaXNhYmxlICgxLjAgdG8gZW5hYmxlKSBhbmltYXRpb24uXG4gKlxuICogVHVybmluZyBvZmYgYW5pbWF0aW9uIG1pZ2h0IGJlIHVzZWZ1bCB0byBpbXByb3ZlIHN0YWJpbGl0eVxuICogYW5kIHJlZHVjZSB0ZXN0cyBleGVjdXRpb24gdGltZS5cbiAqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9uIC0gVHJ1ZSB0byBlbmFibGUgYW5kIGZhbHNlIHRvIGRpc2FibGUgaXQuXG4gKi9cbmNvbW1hbmRzLnNldEFuaW1hdGlvblN0YXRlID0gYXN5bmMgZnVuY3Rpb24gc2V0QW5pbWF0aW9uU3RhdGUgKG9uKSB7XG4gIGF3YWl0IHRoaXMuc2hlbGwoW1xuICAgICdhbScsICdicm9hZGNhc3QnLFxuICAgICctYScsIEFOSU1BVElPTl9TRVRUSU5HX0FDVElPTixcbiAgICAnLW4nLCBBTklNQVRJT05fU0VUVElOR19SRUNFSVZFUixcbiAgICAnLS1lcycsICdzZXRzdGF0dXMnLCBvbiA/ICdlbmFibGUnIDogJ2Rpc2FibGUnXG4gIF0pO1xufTtcblxuLyoqXG4gKiBDaGFuZ2UgdGhlIGxvY2FsZSBvbiB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuIERvbid0IG5lZWQgdG8gcmVib290IHRoZSBkZXZpY2UgYWZ0ZXIgY2hhbmdpbmcgdGhlIGxvY2FsZS5cbiAqIFRoaXMgbWV0aG9kIHNldHMgYW4gYXJiaXRyYXJ5IGxvY2FsZSBmb2xsb3dpbmc6XG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9qYXZhL3V0aWwvTG9jYWxlLmh0bWxcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2phdmEvdXRpbC9Mb2NhbGUuaHRtbCNMb2NhbGUoamF2YS5sYW5nLlN0cmluZywlMjBqYXZhLmxhbmcuU3RyaW5nKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSAtIExhbmd1YWdlLiBlLmcuIGVuLCBqYVxuICogQHBhcmFtIHtzdHJpbmd9IGNvdW50cnkgLSBDb3VudHJ5LiBlLmcuIFVTLCBKUFxuICogQHBhcmFtIHs/c3RyaW5nfSBzY3JpcHQgLSBTY3JpcHQuIGUuZy4gSGFucyBpbiBgemgtSGFucy1DTmBcbiAqL1xuY29tbWFuZHMuc2V0RGV2aWNlU3lzTG9jYWxlVmlhU2V0dGluZ0FwcCA9IGFzeW5jIGZ1bmN0aW9uIHNldERldmljZVN5c0xvY2FsZVZpYVNldHRpbmdBcHAgKGxhbmd1YWdlLCBjb3VudHJ5LCBzY3JpcHQgPSBudWxsKSB7XG4gIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLWEnLCBMT0NBTEVfU0VUVElOR19BQ1RJT04sXG4gICAgJy1uJywgTE9DQUxFX1NFVFRJTkdfUkVDRUlWRVIsXG4gICAgJy0tZXMnLCAnbGFuZycsIGxhbmd1YWdlLnRvTG93ZXJDYXNlKCksXG4gICAgJy0tZXMnLCAnY291bnRyeScsIGNvdW50cnkudG9VcHBlckNhc2UoKVxuICBdO1xuXG4gIGlmIChzY3JpcHQpIHtcbiAgICBwYXJhbXMucHVzaCgnLS1lcycsICdzY3JpcHQnLCBzY3JpcHQpO1xuICB9XG5cbiAgYXdhaXQgdGhpcy5zaGVsbChwYXJhbXMpO1xufTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IExvY2F0aW9uXG4gKiBAcHJvcGVydHkge251bWJlcnxzdHJpbmd9IGxvbmdpdHVkZSAtIFZhbGlkIGxvbmdpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHN0cmluZ30gbGF0aXR1ZGUgLSBWYWxpZCBsYXRpdHVkZSB2YWx1ZS5cbiAqIEBwcm9wZXJ0eSB7P251bWJlcnxzdHJpbmd9IGFsdGl0dWRlIC0gVmFsaWQgYWx0aXR1ZGUgdmFsdWUuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzYXRlbGxpdGVzIFsxMl0gLSBOdW1iZXIgb2Ygc2F0ZWxsaXRlcyBiZWluZyB0cmFja2VkICgxLTEyKS5cbiAqIFRoaXMgdmFsdWUgaXMgaWdub3JlZCBvbiByZWFsIGRldmljZXMuXG4gKiBAcHJvcGVydHkgez9udW1iZXJ8c3RyaW5nfSBzcGVlZCAtIFZhbGlkIHNwZWVkIHZhbHVlLlxuICogU2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLjAgbWV0ZXJzL3NlY29uZCBmb3IgcmVhbCBkZXZpY2VzIG9yIDAuMCBrbm90c1xuICogZm9yIGVtdWxhdG9ycy5cbiAqL1xuXG4vKipcbiAqIEVtdWxhdGUgZ2VvbG9jYXRpb24gY29vcmRpbmF0ZXMgb24gdGhlIGRldmljZSB1bmRlciB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7TG9jYXRpb259IGxvY2F0aW9uIC0gTG9jYXRpb24gb2JqZWN0LiBUaGUgYGFsdGl0dWRlYCB2YWx1ZSBpcyBpZ25vcmVkXG4gKiB3aGlsZSBtb2NraW5nIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNFbXVsYXRvciBbZmFsc2VdIC0gU2V0IGl0IHRvIHRydWUgaWYgdGhlIGRldmljZSB1bmRlciB0ZXN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFuIGVtdWxhdG9yIHJhdGhlciB0aGFuIGEgcmVhbCBkZXZpY2UuXG4gKi9cbmNvbW1hbmRzLnNldEdlb0xvY2F0aW9uID0gYXN5bmMgZnVuY3Rpb24gc2V0R2VvTG9jYXRpb24gKGxvY2F0aW9uLCBpc0VtdWxhdG9yID0gZmFsc2UpIHtcbiAgY29uc3QgZm9ybWF0TG9jYXRpb25WYWx1ZSA9ICh2YWx1ZU5hbWUsIGlzUmVxdWlyZWQgPSB0cnVlKSA9PiB7XG4gICAgaWYgKCF1dGlsLmhhc1ZhbHVlKGxvY2F0aW9uW3ZhbHVlTmFtZV0pKSB7XG4gICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dmFsdWVOYW1lfSBtdXN0IGJlIHByb3ZpZGVkYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmxvYXRWYWx1ZSA9IHBhcnNlRmxvYXQobG9jYXRpb25bdmFsdWVOYW1lXSk7XG4gICAgaWYgKCFpc05hTihmbG9hdFZhbHVlKSkge1xuICAgICAgcmV0dXJuIGAke18uY2VpbChmbG9hdFZhbHVlLCA1KX1gO1xuICAgIH1cbiAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlTmFtZX0gaXMgZXhwZWN0ZWQgdG8gYmUgYSB2YWxpZCBmbG9hdCBudW1iZXIuIGAgK1xuICAgICAgICBgJyR7bG9jYXRpb25bdmFsdWVOYW1lXX0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IGxvbmdpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xvbmdpdHVkZScpO1xuICBjb25zdCBsYXRpdHVkZSA9IGZvcm1hdExvY2F0aW9uVmFsdWUoJ2xhdGl0dWRlJyk7XG4gIGNvbnN0IGFsdGl0dWRlID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnYWx0aXR1ZGUnLCBmYWxzZSk7XG4gIGNvbnN0IHNwZWVkID0gZm9ybWF0TG9jYXRpb25WYWx1ZSgnc3BlZWQnLCBmYWxzZSk7XG4gIGlmIChpc0VtdWxhdG9yKSB7XG4gICAgY29uc3QgYXJncyA9IFtsb25naXR1ZGUsIGxhdGl0dWRlXTtcbiAgICBpZiAoIV8uaXNOaWwoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBjb25zdCBzYXRlbGxpdGVzID0gcGFyc2VJbnQobG9jYXRpb24uc2F0ZWxsaXRlcywgMTApO1xuICAgIGlmICghTnVtYmVyLmlzTmFOKHNhdGVsbGl0ZXMpICYmIHNhdGVsbGl0ZXMgPiAwICYmIHNhdGVsbGl0ZXMgPD0gMTIpIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfQUxUSVRVREV9YCk7XG4gICAgICB9XG4gICAgICBhcmdzLnB1c2goYCR7c2F0ZWxsaXRlc31gKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzTmlsKHNwZWVkKSkge1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICBhcmdzLnB1c2goYCR7REVGQVVMVF9BTFRJVFVERX1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgYXJncy5wdXNoKGAke0RFRkFVTFRfU0FURUxMSVRFU19DT1VOVH1gKTtcbiAgICAgIH1cbiAgICAgIGFyZ3MucHVzaChzcGVlZCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVzZXRUZWxuZXRBdXRoVG9rZW4oKTtcbiAgICBhd2FpdCB0aGlzLmFkYkV4ZWMoWydlbXUnLCAnZ2VvJywgJ2ZpeCcsIC4uLmFyZ3NdKTtcbiAgICAvLyBBIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTIwNjE4MFxuICAgIGF3YWl0IHRoaXMuYWRiRXhlYyhbJ2VtdScsICdnZW8nLCAnZml4JywgLi4uKGFyZ3MubWFwKChhcmcpID0+IGFyZy5yZXBsYWNlKCcuJywgJywnKSkpXSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgYXJncyA9IFtcbiAgICAgICdhbScsICdzdGFydHNlcnZpY2UnLFxuICAgICAgJy1lJywgJ2xvbmdpdHVkZScsIGxvbmdpdHVkZSxcbiAgICAgICctZScsICdsYXRpdHVkZScsIGxhdGl0dWRlLFxuICAgIF07XG4gICAgaWYgKHV0aWwuaGFzVmFsdWUoYWx0aXR1ZGUpKSB7XG4gICAgICBhcmdzLnB1c2goJy1lJywgJ2FsdGl0dWRlJywgYWx0aXR1ZGUpO1xuICAgIH1cbiAgICBpZiAodXRpbC5oYXNWYWx1ZShzcGVlZCkpIHtcbiAgICAgIGFyZ3MucHVzaCgnLWUnLCAnc3BlZWQnLCBzcGVlZCk7XG4gICAgfVxuICAgIGFyZ3MucHVzaChMT0NBVElPTl9TRVJWSUNFKTtcbiAgICBhd2FpdCB0aGlzLnNoZWxsKGFyZ3MpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCB0aGUgY3VycmVudCBnZW8gbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlIHVuZGVyIHRlc3QuXG4gKlxuICogQHJldHVybnMge0xvY2F0aW9ufSBUaGUgY3VycmVudCBsb2NhdGlvblxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGNhbm5vdCBiZSByZXRyaWV2ZWRcbiAqL1xuY29tbWFuZHMuZ2V0R2VvTG9jYXRpb24gPSBhc3luYyBmdW5jdGlvbiBnZXRHZW9Mb2NhdGlvbiAoKSB7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctbicsIExPQ0FUSU9OX1JFQ0VJVkVSLFxuICAgICAgJy1hJywgTE9DQVRJT05fUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgZ2VvIGNvb3JkaW5hdGVzIGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgdXAgdG8gZGF0ZSBhbmQgaGFzIGxvY2F0aW9uIHBlcm1pc3Npb25zLiBBbHNvIHRoZSBsb2NhdGlvbiBgICtcbiAgICAgIGBzZXJ2aWNlcyBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGRldmljZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IC9kYXRhPVwiKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcXHMrKC0/W1xcZC5dKylcIi8uZXhlYyhvdXRwdXQpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGFjdHVhbCBsb2NhdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIGNvbnN0IGxvY2F0aW9uID0ge1xuICAgIGxhdGl0dWRlOiBtYXRjaFsxXSxcbiAgICBsb25naXR1ZGU6IG1hdGNoWzJdLFxuICAgIGFsdGl0dWRlOiBtYXRjaFszXSxcbiAgfTtcbiAgbG9nLmRlYnVnKGBHb3QgZ2VvIGNvb3JkaW5hdGVzOiAke0pTT04uc3RyaW5naWZ5KGxvY2F0aW9uKX1gKTtcbiAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgZ2l2ZW4gZWRpdG9yIGFjdGlvbiBvbiB0aGUgZm9jdXNlZCBpbnB1dCBmaWVsZC5cbiAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIgdG8gYmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuXG4gKiBObyBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgcGVyZm9ybWluZyB0aGUgYWN0aW9uLlxuICogWW91IG11c3QgaW52ZXN0aWdhdGUgdGhlIGxvZ2NhdCBvdXRwdXQgaWYgc29tZXRoaW5nIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGFjdGlvbiAtIEVpdGhlciBhY3Rpb24gY29kZSBvciBuYW1lLiBUaGUgZm9sbG93aW5nIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcyBhcmUgc3VwcG9ydGVkOiBgbm9ybWFsLCB1bnNwZWNpZmllZCwgbm9uZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28sIHNlYXJjaCwgc2VuZCwgbmV4dCwgZG9uZSwgcHJldmlvdXNgXG4gKi9cbmNvbW1hbmRzLnBlcmZvcm1FZGl0b3JBY3Rpb24gPSBhc3luYyBmdW5jdGlvbiBwZXJmb3JtRWRpdG9yQWN0aW9uIChhY3Rpb24pIHtcbiAgbG9nLmRlYnVnKGBQZXJmb3JtaW5nIGVkaXRvciBhY3Rpb246ICR7YWN0aW9ufWApO1xuICBhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLFxuICAgIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuc2hlbGwoWydpbnB1dCcsICd0ZXh0JywgYC8ke2FjdGlvbn0vYF0pKTtcbn07XG5cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZGV2aWNlJ3MgY2xpcGJvYXJkLlxuICogVGhlIG1ldGhvZCB3b3JrcyBmb3IgQW5kcm9pZCBiZWxvdyBhbmQgYWJvdmUgMjkuXG4gKiBJdCB0ZW1vcmFyaWx5IGVuZm9yY2VzIHRoZSBJTUUgc2V0dGluZyBpbiBvcmRlciB0byB3b3JrYXJvdW5kXG4gKiBzZWN1cml0eSBsaW1pdGF0aW9ucyBpZiBuZWVkZWQuXG4gKiBUaGlzIG1ldGhvZCBvbmx5IHdvcmtzIGlmIEFwcGl1bSBTZXR0aW5ncyB2LiAyLjE1KyBpcyBpbnN0YWxsZWRcbiAqIG9uIHRoZSBkZXZpY2UgdW5kZXIgdGVzdFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhY3R1YWwgY29udGVudCBvZiB0aGUgbWFpbiBjbGlwYm9hcmQgYXNcbiAqIGJhc2U2NC1lbmNvZGVkIHN0cmluZyBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGNsaXBib2FyZCBpcyBlbXB0eVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIHByb2JsZW0gd2hpbGUgZ2V0dGluZyB0aGVcbiAqIGNsaXBib2FyZCBjb250YW50XG4gKi9cbmNvbW1hbmRzLmdldENsaXBib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGdldENsaXBib2FyZCAoKSB7XG4gIGxvZy5kZWJ1ZygnR2V0dGluZyB0aGUgY2xpcGJvYXJkIGNvbnRlbnQnKTtcbiAgY29uc3QgcmV0cmlldmVDbGlwYm9hcmQgPSBhc3luYyAoKSA9PiBhd2FpdCB0aGlzLnNoZWxsKFtcbiAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAnLW4nLCBDTElQQk9BUkRfUkVDRUlWRVIsXG4gICAgJy1hJywgQ0xJUEJPQVJEX1JFVFJJRVZBTF9BQ1RJT04sXG4gIF0pO1xuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IChhd2FpdCB0aGlzLmdldEFwaUxldmVsKCkgPj0gMjkpXG4gICAgICA/IChhd2FpdCB0aGlzLnJ1bkluSW1lQ29udGV4dChBUFBJVU1fSU1FLCByZXRyaWV2ZUNsaXBib2FyZCkpXG4gICAgICA6IChhd2FpdCByZXRyaWV2ZUNsaXBib2FyZCgpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgdGhlIGN1cnJlbnQgY2xpcGJvYXJkIGNvbnRlbnQgZnJvbSB0aGUgZGV2aWNlLiBgICtcbiAgICAgIGBNYWtlIHN1cmUgdGhlIEFwcGl1bSBTZXR0aW5ncyBhcHBsaWNhdGlvbiBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gL2RhdGE9XCIoW15cIl0qKVwiLy5leGVjKG91dHB1dCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZSB0aGUgYWN0dWFsIGNsaWJvYXJkIGNvbnRlbnQgZnJvbSB0aGUgY29tbWFuZCBvdXRwdXQ6ICR7b3V0cHV0fWApO1xuICB9XG4gIHJldHVybiBfLnRyaW0obWF0Y2hbMV0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgQW5kcm9pZCBub3RpZmljYXRpb25zIHZpYSBBcHBpdW0gU2V0dGluZ3MgaGVscGVyLlxuICogQXBwaXVtIFNldHRpbmdzIGFwcCBpdHNlbGYgbXVzdCBiZSAqbWFudWFsbHkqIGdyYW50ZWQgdG8gYWNjZXNzIG5vdGlmaWNhdGlvbnNcbiAqIHVuZGVyIGRldmljZSBTZXR0aW5ncyBpbiBvcmRlciB0byBtYWtlIHRoaXMgZmVhdHVyZSB3b3JraW5nLlxuICogQXBwaXVtIFNldHRpbmdzIGhlbHBlciBrZWVwcyBhbGwgdGhlIGFjdGl2ZSBub3RpZmljYXRpb25zIHBsdXNcbiAqIG5vdGlmaWNhdGlvbnMgdGhhdCBhcHBlYXJlZCB3aGlsZSBpdCB3YXMgcnVubmluZyBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLFxuICogYnV0IG5vIG1vcmUgdGhhbiAxMDAgaXRlbXMgYWx0b2dldGhlci4gTmV3bHkgYXBwZWFyZWQgbm90aWZpY2F0aW9uc1xuICogYXJlIGFsd2F5cyBhZGRlZCB0byB0aGUgaGVhZCBvZiB0aGUgbm90aWZpY2F0aW9ucyBhcnJheS5cbiAqIFRoZSBgaXNSZW1vdmVkYCBmbGFnIGlzIHNldCB0byBgdHJ1ZWAgZm9yIG5vdGlmaWNhdGlvbnMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vU3RhdHVzQmFyTm90aWZpY2F0aW9uXG4gKiBhbmQgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5odG1sXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhdmFpbGFibGUgbm90aWZpY2F0aW9uIHByb3BlcnRpZXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXhhbXBsZSBvdXRwdXQgaXM6XG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwic3RhdHVzQmFyTm90aWZpY2F0aW9uc1wiOltcbiAqICAgICB7XG4gKiAgICAgICBcImlzR3JvdXBcIjpmYWxzZSxcbiAqICAgICAgIFwicGFja2FnZU5hbWVcIjpcImlvLmFwcGl1bS5zZXR0aW5nc1wiLFxuICogICAgICAgXCJpc0NsZWFyYWJsZVwiOmZhbHNlLFxuICogICAgICAgXCJpc09uZ29pbmdcIjp0cnVlLFxuICogICAgICAgXCJpZFwiOjEsXG4gKiAgICAgICBcInRhZ1wiOm51bGwsXG4gKiAgICAgICBcIm5vdGlmaWNhdGlvblwiOntcbiAqICAgICAgICAgXCJ0aXRsZVwiOm51bGwsXG4gKiAgICAgICAgIFwiYmlnVGl0bGVcIjpcIkFwcGl1bSBTZXR0aW5nc1wiLFxuICogICAgICAgICBcInRleHRcIjpudWxsLFxuICogICAgICAgICBcImJpZ1RleHRcIjpcIktlZXAgdGhpcyBzZXJ2aWNlIHJ1bm5pbmcsIHNvIEFwcGl1bSBmb3IgQW5kcm9pZCBjYW4gcHJvcGVybHkgaW50ZXJhY3Qgd2l0aCBzZXZlcmFsIHN5c3RlbSBBUElzXCIsXG4gKiAgICAgICAgIFwidGlja2VyVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwic3ViVGV4dFwiOm51bGwsXG4gKiAgICAgICAgIFwiaW5mb1RleHRcIjpudWxsLFxuICogICAgICAgICBcInRlbXBsYXRlXCI6XCJhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24kQmlnVGV4dFN0eWxlXCJcbiAqICAgICAgIH0sXG4gKiAgICAgICBcInVzZXJIYW5kbGVcIjowLFxuICogICAgICAgXCJncm91cEtleVwiOlwiMHxpby5hcHBpdW0uc2V0dGluZ3N8MXxudWxsfDEwMTMzXCIsXG4gKiAgICAgICBcIm92ZXJyaWRlR3JvdXBLZXlcIjpudWxsLFxuICogICAgICAgXCJwb3N0VGltZVwiOjE1NzY4NTM1MTg4NTAsXG4gKiAgICAgICBcImtleVwiOlwiMHxpby5hcHBpdW0uc2V0dGluZ3N8MXxudWxsfDEwMTMzXCIsXG4gKiAgICAgICBcImlzUmVtb3ZlZFwiOmZhbHNlXG4gKiAgICAgfVxuICogICBdXG4gKiB9XG4gKiBgYGBcbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyB0aGUgbm90aWZpY2F0aW9ucyBsaXN0XG4gKi9cbmNvbW1hbmRzLmdldE5vdGlmaWNhdGlvbnMgPSBhc3luYyBmdW5jdGlvbiBnZXROb3RpZmljYXRpb25zICgpIHtcbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIG5vdGlmaWNhdGlvbnMnKTtcbiAgLy8gU29tZWhvdyBwcm92aWRpbmcgdGhlIGAtbmAgYXJnIHRvIHRoZSBgYW1gIHVuZGVybmVhdGhcbiAgLy8gcmVuZGVycyB0aGUgYnJvYWRjYXN0IHRvIGZhaWwgaW5zdGVhZCBvZiBzdGFydGluZyB0aGVcbiAgLy8gQXBwaXVtIFNldHRpbmdzIGFwcC4gVGhpcyBvbmx5IGhhcHBlbnMgdG8gdGhlIG5vdGlmaWNhdGlvbnNcbiAgLy8gcmVjZWl2ZXJcbiAgYXdhaXQgdGhpcy5yZXF1aXJlUnVubmluZ1NldHRpbmdzQXBwKCk7XG4gIGxldCBvdXRwdXQ7XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgdGhpcy5zaGVsbChbXG4gICAgICAnYW0nLCAnYnJvYWRjYXN0JyxcbiAgICAgICctYScsIE5PVElGSUNBVElPTlNfUkVUUklFVkFMX0FDVElPTixcbiAgICBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmV0cmlldmUgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBkZXZpY2UuIGAgK1xuICAgICAgYE1ha2Ugc3VyZSB0aGUgQXBwaXVtIFNldHRpbmdzIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBhbmQgaXMgdXAgdG8gZGF0ZS4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSnNvbkRhdGEob3V0cHV0LCAnbm90aWZpY2F0aW9ucycpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBTbXNMaXN0T3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heCBbMTAwXSAtIFRoZSBtYXhpbXVtIGNvdW50IG9mIHJlY2VudCBtZXNzYWdlc1xuICogdG8gcmV0cmlldmVcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiB0aGUgbW9zdCByZWNlbnQgU01TXG4gKiBwcm9wZXJ0aWVzIGxpc3QgdmlhIEFwcGl1bSBTZXR0aW5ncyBoZWxwZXIuXG4gKiBNZXNzYWdlcyBhcmUgc29ydGVkIGJ5IGRhdGUgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAqXG4gKiBAcGFyYW0ge1Ntc0xpc3RPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZXhhbXBsZSBvdXRwdXQgaXM6XG4gKiBgYGBqc29uXG4gKiB7XG4gKiAgIFwiaXRlbXNcIjpbXG4gKiAgICAge1xuICogICAgICAgXCJpZFwiOlwiMlwiLFxuICogICAgICAgXCJhZGRyZXNzXCI6XCIrMTIzNDU2Nzg5XCIsXG4gKiAgICAgICBcInBlcnNvblwiOm51bGwsXG4gKiAgICAgICBcImRhdGVcIjpcIjE1ODE5MzY0MjIyMDNcIixcbiAqICAgICAgIFwicmVhZFwiOlwiMFwiLFxuICogICAgICAgXCJzdGF0dXNcIjpcIi0xXCIsXG4gKiAgICAgICBcInR5cGVcIjpcIjFcIixcbiAqICAgICAgIFwic3ViamVjdFwiOm51bGwsXG4gKiAgICAgICBcImJvZHlcIjpcIlxcXCJ0ZXh0IG1lc3NhZ2UyXFxcIlwiLFxuICogICAgICAgXCJzZXJ2aWNlQ2VudGVyXCI6bnVsbFxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgXCJpZFwiOlwiMVwiLFxuICogICAgICAgXCJhZGRyZXNzXCI6XCIrMTIzNDU2Nzg5XCIsXG4gKiAgICAgICBcInBlcnNvblwiOm51bGwsXG4gKiAgICAgICBcImRhdGVcIjpcIjE1ODE5MzYzODI3NDBcIixcbiAqICAgICAgIFwicmVhZFwiOlwiMFwiLFxuICogICAgICAgXCJzdGF0dXNcIjpcIi0xXCIsXG4gKiAgICAgICBcInR5cGVcIjpcIjFcIixcbiAqICAgICAgIFwic3ViamVjdFwiOm51bGwsXG4gKiAgICAgICBcImJvZHlcIjpcIlxcXCJ0ZXh0IG1lc3NhZ2VcXFwiXCIsXG4gKiAgICAgICBcInNlcnZpY2VDZW50ZXJcIjpudWxsXG4gKiAgICAgfVxuICogICBdLFxuICogICBcInRvdGFsXCI6MlxuICogfVxuICogYGBgXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGdldHRpbmcgdGhlIFNNUyBsaXN0XG4gKi9cbmNvbW1hbmRzLmdldFNtc0xpc3QgPSBhc3luYyBmdW5jdGlvbiBnZXRTbXNMaXN0IChvcHRzID0ge30pIHtcbiAgbG9nLmRlYnVnKCdSZXRyaWV2aW5nIHRoZSByZWNlbnQgU01TIG1lc3NhZ2VzJyk7XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgJy1uJywgU01TX0xJU1RfUkVDRUlWRVIsXG4gICAgJy1hJywgU01TX0xJU1RfUkVUUklFVkFMX0FDVElPTixcbiAgXTtcbiAgaWYgKG9wdHMubWF4KSB7XG4gICAgYXJncy5wdXNoKCctLWVzJywgJ21heCcsIG9wdHMubWF4KTtcbiAgfVxuICBsZXQgb3V0cHV0O1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IHRoaXMuc2hlbGwoYXJncyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJldHJpZXZlIFNNUyBsaXN0IGZyb20gdGhlIGRldmljZS4gYCArXG4gICAgICBgTWFrZSBzdXJlIHRoZSBBcHBpdW0gU2V0dGluZ3MgYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIGFuZCBpcyB1cCB0byBkYXRlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgfVxuICByZXR1cm4gcGFyc2VKc29uRGF0YShvdXRwdXQsICdTTVMgbGlzdCcpO1xufTtcblxuLyoqXG4gKiBUeXBlcyB0aGUgZ2l2ZW4gVW5pY29kZSBzdHJpbmcuXG4gKiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBmb2N1cyBpcyBhbHJlYWR5IHB1dFxuICogdG8gdGhlIGRlc3RpbmF0aW9uIGlucHV0IGZpZWxkIGJlZm9yZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGhlIHN0cmluZyB0byB0eXBlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnB1dCB0ZXh0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGFkYlxuICovXG5jb21tYW5kcy50eXBlVW5pY29kZSA9IGFzeW5jIGZ1bmN0aW9uIHR5cGVVbmljb2RlICh0ZXh0KSB7XG4gIGlmIChfLmlzTmlsKHRleHQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGV4dCA9IGAke3RleHR9YDtcbiAgbG9nLmRlYnVnKGBUeXBpbmcgJHt1dGlsLnBsdXJhbGl6ZSgnY2hhcmFjdGVyJywgdGV4dC5sZW5ndGgsIHRydWUpfWApO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXdhaXQgdGhpcy5ydW5JbkltZUNvbnRleHQoXG4gICAgVU5JQ09ERV9JTUUsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuaW5wdXRUZXh0KGltYXAuZW5jb2RlKHRleHQpKVxuICApO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbW1hbmRzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvc2V0dGluZ3MtY2xpZW50LWNvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
|